Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into disablesnolegs
This commit is contained in:
@@ -0,0 +1,387 @@
|
||||
//Generates a markdown txt file for use with the wiki
|
||||
|
||||
/proc/find_reagent(input)
|
||||
. = FALSE
|
||||
if(GLOB.chemical_reagents_list[input]) //prefer IDs!
|
||||
var/datum/reagent/R = GLOB.chemical_reagents_list[input]
|
||||
return R
|
||||
else
|
||||
for(var/X in GLOB.chemical_reagents_list)
|
||||
var/datum/reagent/R = GLOB.chemical_reagents_list[X]
|
||||
if(input == replacetext(lowertext(R.name), " ", ""))
|
||||
return R
|
||||
if(input == replacetext(lowertext(R.id), " ", ""))
|
||||
return R
|
||||
|
||||
|
||||
|
||||
|
||||
/client/proc/generate_wikichem_list()
|
||||
set name = "Generate Wikichems"
|
||||
set category = "Debug"
|
||||
set desc = "Generate a huge loglist of all the chems. Do not click unless you want lag."
|
||||
|
||||
|
||||
|
||||
var/prefix = "|Name | Reagents | Reaction vars | Description | Chem properties |\n|---|---|---|-----------|---|\n"
|
||||
var/input_reagent = replacetext(lowertext(input("Input the name/id of a reagent to get it's description on it's own, or leave blank to parse every chem.", "Input") as text), " ", "") //95% of the time, the reagent id is a lowercase/no spaces version of the name
|
||||
if(input_reagent)
|
||||
var/input_reagent2 = find_reagent(input_reagent)
|
||||
if(!input_reagent2)
|
||||
to_chat(usr, "Unable to find reagent, stopping proc.")
|
||||
var/single_parse = generate_chemwiki_line(input_reagent2, input_reagent, FALSE)
|
||||
text2file(single_parse, "[GLOB.log_directory]/chem_parse.md")
|
||||
to_chat(usr, "[single_parse].")
|
||||
|
||||
single_parse = generate_chemwiki_line(input_reagent2, input_reagent, FALSE)
|
||||
text2file(single_parse, "[GLOB.log_directory]/chem_parse.md")
|
||||
to_chat(usr, "[single_parse].")
|
||||
to_chat(usr, "Saved line to (wherever your root folder is, i.e. where the DME is)/[GLOB.log_directory]/chem_parse.md OR use the Get Current Logs verb under the Admin tab. (if you click Open, and it does nothing, that's because you've not set a .md default program! Try downloading it instead, and use that file to set a default program! Also have a cute day.)")
|
||||
//Do things here
|
||||
return
|
||||
to_chat(usr, "Generating big list")
|
||||
message_admins("Someone pressed the lag button. (Generate Wikichems)")
|
||||
///datum/reagent/medicine, /datum/reagent/toxin, /datum/reagent/consumable, /datum/reagent/plantnutriment, /datum/reagent/uranium,
|
||||
///datum/reagent/colorful_reagent, /datum/reagent/mutationtoxin, /datum/reagent/fermi, /datum/reagent/drug, /datum/reagent/impure
|
||||
|
||||
//Probably not the most eligant of solutions.
|
||||
to_chat(usr, "Attempting reagent scan. Length of list [LAZYLEN(GLOB.chemical_reagents_list)*2]")
|
||||
var/datum/reagent/R
|
||||
var/tally = 0
|
||||
var/processCR = TRUE //Process reactions first
|
||||
var/medicine = ""
|
||||
var/toxin = ""
|
||||
var/consumable = ""
|
||||
var/plant = ""
|
||||
var/uranium = ""
|
||||
var/colours = ""
|
||||
var/muta = ""
|
||||
var/fermi = ""
|
||||
var/remainder = ""
|
||||
var/drug = ""
|
||||
var/basic = ""
|
||||
var/upgraded = ""
|
||||
var/drinks = ""
|
||||
var/alco = ""
|
||||
var/grinded = ""
|
||||
var/blob = ""
|
||||
var/impure = ""
|
||||
|
||||
//Chem_dispencer
|
||||
var/list/dispensable_reagents = list(
|
||||
"hydrogen",
|
||||
"lithium",
|
||||
"carbon",
|
||||
"nitrogen",
|
||||
"oxygen",
|
||||
"fluorine",
|
||||
"sodium",
|
||||
"aluminium",
|
||||
"silicon",
|
||||
"phosphorus",
|
||||
"sulfur",
|
||||
"chlorine",
|
||||
"potassium",
|
||||
"iron",
|
||||
"copper",
|
||||
"mercury",
|
||||
"radium",
|
||||
"water",
|
||||
"ethanol",
|
||||
"sugar",
|
||||
"sacid",
|
||||
"welding_fuel",
|
||||
"silver",
|
||||
"iodine",
|
||||
"bromine",
|
||||
"stable_plasma"
|
||||
)
|
||||
var/list/components = list(
|
||||
"oil",
|
||||
"ammonia",
|
||||
"ash",
|
||||
"acetone",
|
||||
"phenol",
|
||||
"diethylamine",
|
||||
"saltpetre",
|
||||
"sodiumchloride",
|
||||
"lye"
|
||||
)
|
||||
|
||||
var/list/grind = list(
|
||||
"bluespace",
|
||||
"gold",
|
||||
"plasma",
|
||||
"uranium"
|
||||
)
|
||||
|
||||
//Bartender
|
||||
var/dispence_drinks = list(
|
||||
"water",
|
||||
"ice",
|
||||
"coffee",
|
||||
"cream",
|
||||
"tea",
|
||||
"icetea",
|
||||
"cola",
|
||||
"spacemountainwind",
|
||||
"dr_gibb",
|
||||
"space_up",
|
||||
"tonic",
|
||||
"sodawater",
|
||||
"lemon_lime",
|
||||
"pwr_game",
|
||||
"shamblers",
|
||||
"sugar",
|
||||
"orangejuice",
|
||||
"grenadine",
|
||||
"limejuice",
|
||||
"tomatojuice",
|
||||
"lemonjuice",
|
||||
"menthol"
|
||||
)
|
||||
var/dispence_alco = list(
|
||||
"beer",
|
||||
"kahlua",
|
||||
"whiskey",
|
||||
"wine",
|
||||
"vodka",
|
||||
"gin",
|
||||
"rum",
|
||||
"tequila",
|
||||
"vermouth",
|
||||
"cognac",
|
||||
"ale",
|
||||
"absinthe",
|
||||
"hcider",
|
||||
"creme_de_menthe",
|
||||
"creme_de_cacao",
|
||||
"triple_sec",
|
||||
"sake",
|
||||
"applejack"
|
||||
)
|
||||
|
||||
var/breakout = FALSE
|
||||
for(var/i = 1, i <= 2, i+=1)
|
||||
for(var/X in GLOB.chemical_reagents_list)
|
||||
R = GLOB.chemical_reagents_list[X]
|
||||
if(!R.description) //No description? It's not worth my time.
|
||||
continue
|
||||
|
||||
for(var/Y in dispensable_reagents) //Why do you have to do this
|
||||
if(R.id == Y)
|
||||
basic += generate_chemwiki_line(R, X, processCR)
|
||||
breakout = TRUE
|
||||
continue
|
||||
|
||||
for(var/Y in components)
|
||||
if(R.id == Y)
|
||||
upgraded += generate_chemwiki_line(R, X, processCR)
|
||||
breakout = TRUE
|
||||
continue
|
||||
|
||||
for(var/Y in dispence_drinks)
|
||||
if(R.id == Y)
|
||||
drinks += generate_chemwiki_line(R, X, processCR)
|
||||
breakout = TRUE
|
||||
continue
|
||||
|
||||
for(var/Y in dispence_alco)
|
||||
if(R.id == Y)
|
||||
alco += generate_chemwiki_line(R, X, processCR)
|
||||
breakout = TRUE
|
||||
continue
|
||||
|
||||
for(var/Y in grind)
|
||||
if(R.id == Y)
|
||||
grinded += generate_chemwiki_line(R, X, processCR)
|
||||
breakout = TRUE
|
||||
continue
|
||||
|
||||
if(breakout)
|
||||
breakout = FALSE
|
||||
continue
|
||||
|
||||
if(istype(R, /datum/reagent/medicine))
|
||||
medicine += generate_chemwiki_line(R, X, processCR)
|
||||
|
||||
else if(istype(R, /datum/reagent/toxin))
|
||||
toxin += generate_chemwiki_line(R, X, processCR)
|
||||
|
||||
else if(istype(R, /datum/reagent/consumable))
|
||||
consumable += generate_chemwiki_line(R, X, processCR)
|
||||
|
||||
else if(istype(R, /datum/reagent/plantnutriment))
|
||||
plant += generate_chemwiki_line(R, X, processCR)
|
||||
|
||||
else if(istype(R, /datum/reagent/uranium))
|
||||
uranium += generate_chemwiki_line(R, X, processCR)
|
||||
|
||||
else if(istype(R, /datum/reagent/colorful_reagent))
|
||||
colours += generate_chemwiki_line(R, X, processCR)
|
||||
|
||||
else if(istype(R, /datum/reagent/mutationtoxin))
|
||||
muta += generate_chemwiki_line(R, X, processCR)
|
||||
|
||||
else if(istype(R, /datum/reagent/fermi))
|
||||
fermi += generate_chemwiki_line(R, X, processCR)
|
||||
|
||||
else if(istype(R, /datum/reagent/drug))
|
||||
drug += generate_chemwiki_line(R, X, processCR)
|
||||
|
||||
else if(istype(R, /datum/reagent/blob))
|
||||
blob += generate_chemwiki_line(R, X, processCR)
|
||||
|
||||
else if(istype(R, /datum/reagent/impure))
|
||||
impure += generate_chemwiki_line(R, X, processCR)
|
||||
|
||||
else
|
||||
remainder += generate_chemwiki_line(R, X, processCR)
|
||||
|
||||
tally++
|
||||
if((tally%50)==0)
|
||||
to_chat(usr, "[tally] of [LAZYLEN(GLOB.chemical_reagents_list)*2] done.")
|
||||
|
||||
processCR = FALSE
|
||||
|
||||
to_chat(usr, "finished chems")
|
||||
|
||||
var/wholeString = ("\n# DISPENCEABLE REAGENTS\n\n[prefix][basic]\n\n# COMPONENT REAGENTS\n\n[prefix][upgraded]\n\n# GROUND REAGENTS\n\n[prefix][grinded]\n")
|
||||
wholeString += ("\n# MEDICINE:\n\n[prefix][medicine]\n\n# TOXIN:\n\n[prefix][toxin]\n\n# DRUGS\n\n[prefix][drug]\n\n# FERMI\n\nThese chems lie on the cutting edge of chemical technology, and as such are not recommended for beginners!\n\n[prefix][fermi]\n\n# IMPURE REAGENTS\n\n[prefix][impure]\n\n# GENERAL REAGENTS\n\n[prefix][remainder]\n\n# DISPENCEABLE SOFT DRINKS\n\n[prefix][drinks]\n\n# DISPENCEABLE HARD DRINKS\n\n[prefix][alco]\n\n# CONSUMABLE\n\n[prefix][consumable]\n\n# PLANTS\n\n[prefix][plant]\n\n# URANIUM\n\n[prefix][uranium]\n\n# COLOURS\n\n[prefix][colours]\n\n# RACE MUTATIONS\n\n[prefix][muta]\n\n\n# BLOB REAGENTS\n\n[prefix][blob]\n")
|
||||
|
||||
prefix = "|Name | Reagents | Reaction vars | Description |\n|---|---|---|----------|\n"
|
||||
var/CRparse = ""
|
||||
to_chat(usr, "starting reactions")
|
||||
|
||||
//generate the reactions that we missed from before
|
||||
for(var/reagent in GLOB.chemical_reactions_list)
|
||||
for(var/datum/chemical_reaction/CR in GLOB.chemical_reactions_list[reagent])
|
||||
CRparse += generate_chemreactwiki_line(CR)
|
||||
|
||||
wholeString += ("\n# CHEMICAL REACTIONS\n\n[prefix][CRparse]\n")
|
||||
text2file(wholeString, "[GLOB.log_directory]/chem_parse.md")
|
||||
to_chat(usr, "finished reactions")
|
||||
to_chat(usr, "Saved file to (wherever your root folder is, i.e. where the DME is)/[GLOB.log_directory]/chem_parse.md OR use the Get Current Logs verb under the Admin tab. (if you click Open, and it does nothing, that's because you've not set a .md default program! Try downloading it instead, and use that file to set a default program! Also have a cute day.)")
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
//Generate the big list of reagent based reactions.
|
||||
/proc/generate_chemwiki_line(datum/reagent/R, X, processCR)
|
||||
//name | Reagent pH | reagents | reaction temp | explosion temp | pH range | Kinetics | description | OD level | Addiction level | Metabolism rate | impure chem | inverse chem
|
||||
|
||||
var/datum/chemical_reaction/CR = get_chemical_reaction(R.id)
|
||||
if((!CR && processCR) || (CR && !processCR)) // Do reactions first.
|
||||
return ""
|
||||
|
||||
|
||||
var/outstring = "|<a href=\"#[R.name]\"><h5 id=\"[R.name]\">!\[[R.color]\](https://placehold.it/15/[copytext(R.color, 2, 8)]/000000?text=+)[R.name]</h5></a> pH: [R.pH] | "
|
||||
var/datum/reagent/R3
|
||||
if(CR)
|
||||
outstring += "<ul>"
|
||||
for(var/R2 in CR.required_reagents)
|
||||
R3 = GLOB.chemical_reagents_list[R2]//What a convoluted mess
|
||||
outstring += "<li><a href=\"#[R3.name]\">[R3.name]</a>: [CR.required_reagents[R3.id]]u</li>"
|
||||
if(CR.required_catalysts)
|
||||
for(var/R2 in CR.required_catalysts)
|
||||
R3 = GLOB.chemical_reagents_list[R2]
|
||||
outstring += "<li>Catalyst: <a href=\"#[R3.name]\">[R3.name]</a>: [CR.required_catalysts[R3.id]]u</li>"
|
||||
outstring += "</ul> | "
|
||||
else
|
||||
outstring += "N/A | "
|
||||
|
||||
|
||||
//Temp, Explosions and pH
|
||||
if(CR)
|
||||
outstring += "<ul>[(CR.FermiChem?"<li>Min react temp: [CR.OptimalTempMin]K</li>":"[(CR.required_temp?"<li>Min react temp: [CR.required_temp]K</li>":"")]")] [(CR.FermiChem?"<li>Explosion_temp: [CR.ExplodeTemp]K</li>":"")] [(CR.FermiChem?"<li>pH range: [max((CR.OptimalpHMin - CR.ReactpHLim), 0)] to [min((CR.OptimalpHMax + CR.ReactpHLim), 14)]</li>":"")] "
|
||||
if(CR.FermiChem)
|
||||
outstring += "[(CR.PurityMin?"<li>Min explosive purity: [CR.PurityMin]</li>":"")] [(CR.FermiExplode?"<li>Special explosion: Yes</li>":"")]"
|
||||
else
|
||||
outstring += ""
|
||||
|
||||
//Kinetics
|
||||
if(CR)
|
||||
if(CR.FermiChem)
|
||||
switch(CR.ThermicConstant)
|
||||
if(-INFINITY to -9.9)
|
||||
outstring += "<li>Extremely endothermic</li> "
|
||||
if(-9.9 to -4.9)
|
||||
outstring += "<li>Very endothermic</li> "
|
||||
if(-4.9 to -0.1)
|
||||
outstring += "<li>Endothermic</li> "
|
||||
if(-0.1 to 0.1)
|
||||
outstring += "<li>Neutral</li> "
|
||||
if(0.1 to 4.9)
|
||||
outstring += "<li>Exothermic</li> "
|
||||
if(4.9 to 9.9)
|
||||
outstring += "<li>Very exothermic</li> "
|
||||
if(9.9 to 19.9)
|
||||
outstring += "<li>Extremely exothermic</li> "
|
||||
if(19.9 to INFINITY )
|
||||
outstring += "<li>**Dangerously exothermic**</li> "
|
||||
//if("cheesey")
|
||||
//outstring += "<li>Dangerously Cheesey</li>"
|
||||
|
||||
outstring += "</ul>| "
|
||||
else
|
||||
outstring += " | "
|
||||
|
||||
//Description, OD, Addict, Meta
|
||||
outstring += "[R.description] | <ul><li>Metabolism rate: [R.metabolization_rate/2]u/s</li> [(R.overdose_threshold?"<li>Overdose: [R.overdose_threshold]u</li>":"")] [(R.addiction_threshold?"<li>Addiction: [R.addiction_threshold]u</li>":"")] "
|
||||
|
||||
if(R.impure_chem && R.impure_chem != "fermiTox")
|
||||
R3 = GLOB.chemical_reagents_list[R.impure_chem]
|
||||
outstring += "<li>Impure chem:<a href=\"#[R3.name]\">[R3.name]</a></li>"
|
||||
|
||||
if(R.inverse_chem && R.impure_chem != "fermiTox")
|
||||
R3 = GLOB.chemical_reagents_list[R.inverse_chem]
|
||||
outstring += "<li>Inverse chem:<a href=\"#[R3.name]\">[R3.name]</a></li> [(R3.inverse_chem_val?"<li>Inverse purity: [R3.inverse_chem_val]</li>":"")] "
|
||||
|
||||
if(CR)
|
||||
if(CR.required_container)
|
||||
/*var/obj/item/I
|
||||
I = istype(I, CR.required_container) if you can work out how to get this to work, by all means.
|
||||
outstring += "<li>Required container: [I.name]</li>"*/
|
||||
outstring += "<li>Required container: [CR.required_container]</li>"
|
||||
|
||||
outstring += "</ul>|\n"
|
||||
return outstring
|
||||
|
||||
//Generate the big list of reaction based reactions.
|
||||
//|Name | Reagents | Reaction vars | Description | Chem properties
|
||||
/proc/generate_chemreactwiki_line(datum/chemical_reaction/CR)
|
||||
if(CR.results.len) //Handled prior
|
||||
return
|
||||
var/outstring = "|[CR.name] | <ul>"
|
||||
|
||||
//reagents
|
||||
var/datum/reagent/R3
|
||||
for(var/R2 in CR.required_reagents)
|
||||
R3 = GLOB.chemical_reagents_list[R2]
|
||||
outstring += "<li><a href=\"#[R3.name]\">[R3.name]</a>: [CR.required_reagents[R3.id]]u</li>"
|
||||
if(CR.required_catalysts)
|
||||
for(var/R2 in CR.required_catalysts)
|
||||
R3 = GLOB.chemical_reagents_list[R2]
|
||||
outstring += "<li>Catalyst: <a href=\"#[R3.name]\">[R3.name]</a>: [CR.required_catalysts[R3.id]]u</li>"
|
||||
outstring += "</ul> | <ul>"
|
||||
|
||||
//Reaction vars
|
||||
if(CR.required_temp)
|
||||
outstring += "<li>Min react temp: [CR.required_temp]K</li>"
|
||||
if(CR.FermiChem)
|
||||
outstring += "[(CR.FermiChem?"<li>Min react temp: [CR.OptimalTempMin]K</li>":"[(CR.required_temp?"<li>Min react temp: [CR.required_temp]K</li>":"")]")] [(CR.FermiChem?"<li>Explosion temp: [CR.ExplodeTemp]K</li>":"")] [(CR.FermiChem?"<li>pH range: [max((CR.OptimalpHMin - CR.ReactpHLim), 0)] to [min((CR.OptimalpHMax + CR.ReactpHLim), 14)]</li>":"")] <li>Minimum purity: [CR.PurityMin] [(CR.FermiExplode?"<li>Special explosion: Yes</li>":"")]"
|
||||
if(CR.is_cold_recipe)
|
||||
outstring += "<li>Cold: Yes</li>"
|
||||
if(CR.required_container)
|
||||
outstring += "<li>Required container: [CR.required_container]</li>"
|
||||
if(CR.mob_react)
|
||||
outstring += "<li>Can react in mob: Yes</li>"
|
||||
|
||||
//description
|
||||
outstring += "</ul>| fill in manually "
|
||||
|
||||
outstring += "<ul>|\n"
|
||||
return outstring
|
||||
@@ -0,0 +1,23 @@
|
||||
How to code fermichem reactions:
|
||||
First off, probably read though the readme for standard reagent mechanisms, this builds on top of that.
|
||||
|
||||
#bitflags
|
||||
for `datum/reagent/` you have the following options with `var/chemical_flags`:
|
||||
|
||||
```
|
||||
REAGENT_DEAD_PROCESS calls on_mob_dead() if present in a dead body
|
||||
REAGENT_DONOTSPLIT Do not split the chem at all during processing
|
||||
REAGENT_ONLYINVERSE Only invert chem, no splitting
|
||||
REAGENT_ONMOBMERGE Call on_mob_life proc when reagents are merging.
|
||||
REAGENT_INVISIBLE Doesn't appear on handheld health analyzers.
|
||||
REAGENT_FORCEONNEW Forces a on_new() call without a data overhead
|
||||
REAGENT_SNEAKYNAME When inverted, the inverted chem uses the name of the original chem
|
||||
REAGENT_SPLITRETAINVOL Retains initial volume of chem when splitting
|
||||
```
|
||||
|
||||
for `datum/chemical_reaction/` under `var/clear_conversion`
|
||||
|
||||
```
|
||||
REACTION_CLEAR_IMPURE Convert into impure/pure on reaction completion
|
||||
REACTION_CLEAR_INVERSE Convert into inverse on reaction completion when purity is low enough
|
||||
```
|
||||
@@ -63,7 +63,7 @@
|
||||
var/targetVol = 0 //the target volume, i.e. the total amount that can be created during a fermichem reaction.
|
||||
var/reactedVol = 0 //how much of the reagent is reacted during a fermireaction
|
||||
var/fermiIsReacting = FALSE //that prevents multiple reactions from occurring (i.e. add_reagent calls to process_reactions(), this stops any extra reactions.)
|
||||
var/fermiReactID = null //ID of the chem being made during a fermireaction, kept here so it's cache isn't lost between loops/procs.
|
||||
var/fermiReactID //ID of the chem being made during a fermireaction, kept here so it's cache isn't lost between loops/procs.
|
||||
|
||||
/datum/reagents/New(maximum=100, new_flags)
|
||||
maximum_volume = maximum
|
||||
@@ -128,14 +128,12 @@
|
||||
|
||||
/datum/reagents/proc/remove_all(amount = 1)
|
||||
var/list/cached_reagents = reagent_list
|
||||
if((total_volume - amount) <= 0)//Because this can result in 0, I don't want it to crash.
|
||||
pH = 7
|
||||
if(total_volume > 0)
|
||||
var/part = amount / total_volume
|
||||
for(var/reagent in cached_reagents)
|
||||
var/datum/reagent/R = reagent
|
||||
remove_reagent(R.id, R.volume * part, ignore_pH = TRUE)
|
||||
|
||||
pH = REAGENT_NORMAL_PH
|
||||
update_total()
|
||||
handle_reactions()
|
||||
return amount
|
||||
@@ -365,7 +363,7 @@
|
||||
|
||||
|
||||
/datum/reagents/proc/handle_reactions()//HERE EDIT HERE THE MAIN REACTION
|
||||
if(fermiIsReacting == TRUE)
|
||||
if(fermiIsReacting) //This ARRESTS other reactions. If you don't want this, then remove it.
|
||||
return
|
||||
|
||||
if(reagents_holder_flags & NO_REACT)
|
||||
@@ -404,7 +402,7 @@
|
||||
|
||||
|
||||
for(var/B in cached_required_reagents)
|
||||
if(!has_reagent(B, cached_required_reagents[B]))
|
||||
if(!has_reagent(B, cached_required_reagents[B]))//Allows vols at less than 1 to react.
|
||||
break
|
||||
total_matching_reagents++
|
||||
for(var/B in cached_required_catalysts)
|
||||
@@ -464,39 +462,36 @@
|
||||
//Temperature plays into a larger role too.
|
||||
var/datum/chemical_reaction/C = selected_reaction
|
||||
|
||||
if (C.FermiChem == TRUE && !continue_reacting)
|
||||
if (C.FermiChem && !continue_reacting)
|
||||
if (chem_temp > C.ExplodeTemp) //This is first to ensure explosions.
|
||||
var/datum/chemical_reaction/fermi/Ferm = selected_reaction
|
||||
var/datum/chemical_reaction/Ferm = selected_reaction
|
||||
fermiIsReacting = FALSE
|
||||
SSblackbox.record_feedback("tally", "fermi_chem", 1, ("[Ferm] explosion"))
|
||||
Ferm.FermiExplode(src, my_atom, volume = total_volume, temp = chem_temp, pH = pH)
|
||||
return 0
|
||||
|
||||
//This is just to calc the on_reaction multiplier, and is a candidate for removal.
|
||||
for(var/B in cached_required_reagents)
|
||||
multiplier = min(multiplier, round((get_reagent_amount(B) / cached_required_reagents[B]), CHEMICAL_QUANTISATION_LEVEL))
|
||||
multiplier = min(multiplier, round((get_reagent_amount(B) / cached_required_reagents[B]), 0.0001))
|
||||
for(var/P in selected_reaction.results)
|
||||
targetVol = cached_results[P]*multiplier
|
||||
|
||||
if( (chem_temp <= C.ExplodeTemp) && (chem_temp >= C.OptimalTempMin))
|
||||
if( (pH >= (C.OptimalpHMin - C.ReactpHLim)) && (pH <= (C.OptimalpHMax + C.ReactpHLim)) )//To prevent pointless reactions
|
||||
|
||||
if (fermiIsReacting == TRUE)
|
||||
return 0
|
||||
else
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
selected_reaction.on_reaction(src, my_atom, multiplier)
|
||||
fermiIsReacting = TRUE
|
||||
fermiReactID = selected_reaction
|
||||
reaction_occurred = 1
|
||||
|
||||
else //It's a little bit of a confusing nest, but esstentially we check if it's a fermireaction, then temperature, then pH. If this is true, the remainer of this handler is run.
|
||||
return 0 //If pH is out of range
|
||||
if(!((chem_temp <= C.ExplodeTemp) && (chem_temp >= C.OptimalTempMin)))
|
||||
return 0 //Not hot enough
|
||||
if(! ((pH >= (C.OptimalpHMin - C.ReactpHLim)) && (pH <= (C.OptimalpHMax + C.ReactpHLim)) ))//To prevent pointless reactions
|
||||
return 0
|
||||
if (fermiIsReacting)
|
||||
return 0
|
||||
else
|
||||
return 0 //If not hot enough
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
selected_reaction.on_reaction(src, my_atom, multiplier)
|
||||
fermiIsReacting = TRUE
|
||||
fermiReactID = selected_reaction
|
||||
reaction_occurred = 1
|
||||
|
||||
//Standard reaction mechanics:
|
||||
else
|
||||
if (C.FermiChem == TRUE)//Just to make sure, should only proc when grenades are combining.
|
||||
if (C.FermiChem)//Just to make sure, should only proc when grenades are combining.
|
||||
if (chem_temp > C.ExplodeTemp) //To allow fermigrenades
|
||||
var/datum/chemical_reaction/fermi/Ferm = selected_reaction
|
||||
fermiIsReacting = FALSE
|
||||
@@ -507,6 +502,7 @@
|
||||
for(var/B in cached_required_reagents) //
|
||||
multiplier = min(multiplier, round((get_reagent_amount(B) / cached_required_reagents[B]), CHEMICAL_QUANTISATION_LEVEL))
|
||||
|
||||
|
||||
for(var/B in cached_required_reagents)
|
||||
remove_reagent(B, (multiplier * cached_required_reagents[B]), safety = 1, ignore_pH = TRUE)
|
||||
|
||||
@@ -544,59 +540,67 @@
|
||||
return 0
|
||||
|
||||
/datum/reagents/process()
|
||||
var/datum/chemical_reaction/fermi/C = fermiReactID
|
||||
var/datum/chemical_reaction/C = fermiReactID
|
||||
|
||||
var/list/cached_required_reagents = C.required_reagents//update reagents list
|
||||
var/list/cached_results = C.results//resultant chemical list
|
||||
var/multiplier = INFINITY
|
||||
|
||||
for(var/B in cached_required_reagents) //
|
||||
multiplier = min(multiplier, round((get_reagent_amount(B) / cached_required_reagents[B]), 0.001))
|
||||
if (multiplier == 0)
|
||||
multiplier = min(multiplier, round((get_reagent_amount(B) / cached_required_reagents[B]), 0.0001))
|
||||
if (multiplier <= 0)//clarity
|
||||
fermiEnd()
|
||||
return
|
||||
for(var/P in cached_results)
|
||||
targetVol = cached_results[P]*multiplier
|
||||
|
||||
if (fermiIsReacting == FALSE)
|
||||
CRASH("Fermi has refused to stop reacting even though we asked her nicely.")
|
||||
|
||||
if (chem_temp > C.OptimalTempMin && fermiIsReacting == TRUE)//To prevent pointless reactions
|
||||
if( (pH >= (C.OptimalpHMin - C.ReactpHLim)) && (pH <= (C.OptimalpHMax + C.ReactpHLim)) )
|
||||
if (reactedVol < targetVol)
|
||||
reactedVol = fermiReact(fermiReactID, chem_temp, pH, reactedVol, targetVol, cached_required_reagents, cached_results, multiplier)
|
||||
else//Volume is used up
|
||||
if(C.required_catalysts)
|
||||
for(var/P in C.required_catalysts)
|
||||
if(!has_reagent(P))
|
||||
fermiEnd()
|
||||
return
|
||||
else//pH is out of range
|
||||
fermiEnd()
|
||||
return
|
||||
else//Temperature is too low, or reaction has stopped.
|
||||
|
||||
if (!fermiIsReacting)
|
||||
CRASH("Fermi has refused to stop reacting even though we asked her nicely.")
|
||||
|
||||
if (!(chem_temp >= C.OptimalTempMin))//To prevent pointless reactions
|
||||
fermiEnd()
|
||||
return
|
||||
|
||||
if (!( (pH >= (C.OptimalpHMin - C.ReactpHLim)) && (pH <= (C.OptimalpHMax + C.ReactpHLim)) )) //if pH is too far out, (could possibly allow reactions at this point, after the reaction has started, but make purity = 0)
|
||||
fermiEnd()
|
||||
return
|
||||
|
||||
reactedVol = fermiReact(fermiReactID, chem_temp, pH, reactedVol, targetVol, cached_required_reagents, cached_results, multiplier)
|
||||
if(round(reactedVol, CHEMICAL_QUANTISATION_LEVEL) == round(targetVol, CHEMICAL_QUANTISATION_LEVEL))
|
||||
fermiEnd()
|
||||
if(!reactedVol)//Maybe unnessicary.
|
||||
fermiEnd()
|
||||
return
|
||||
|
||||
/datum/reagents/proc/fermiEnd()
|
||||
var/datum/chemical_reaction/fermi/C = fermiReactID
|
||||
var/datum/chemical_reaction/C = fermiReactID
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
fermiIsReacting = FALSE
|
||||
reactedVol = 0
|
||||
targetVol = 0
|
||||
//Cap off values
|
||||
for(var/datum/reagent/R in reagent_list)
|
||||
R.volume = round(R.volume, CHEMICAL_QUANTISATION_LEVEL)//To prevent runaways.
|
||||
//pH check, handled at the end to reduce calls.
|
||||
if(istype(my_atom, /obj/item/reagent_containers))
|
||||
var/obj/item/reagent_containers/RC = my_atom
|
||||
RC.pH_check()
|
||||
C.FermiFinish(src, my_atom)
|
||||
C.FermiFinish(src, my_atom, reactedVol)
|
||||
reactedVol = 0
|
||||
targetVol = 0
|
||||
handle_reactions()
|
||||
update_total()
|
||||
//Reaction sounds and words
|
||||
playsound(get_turf(my_atom), C.mix_sound, 80, 1)
|
||||
var/list/seen = viewers(5, get_turf(my_atom))
|
||||
var/iconhtml = icon2html(my_atom, seen)
|
||||
for(var/mob/M in seen)
|
||||
to_chat(M, "<span class='notice'>[iconhtml] [C.mix_message]</span>")
|
||||
|
||||
/datum/reagents/proc/fermiReact(selected_reaction, cached_temp, cached_pH, reactedVol, targetVol, cached_required_reagents, cached_results, multiplier)
|
||||
var/datum/chemical_reaction/fermi/C = selected_reaction
|
||||
var/datum/chemical_reaction/C = selected_reaction
|
||||
var/deltaT = 0
|
||||
var/deltapH = 0
|
||||
var/stepChemAmmount = 0
|
||||
@@ -646,16 +650,18 @@
|
||||
//ONLY WORKS FOR ONE PRODUCT AT THE MOMENT
|
||||
//Calculate how much product to make and how much reactant to remove factors..
|
||||
for(var/P in cached_results)
|
||||
//stepChemAmmount = CLAMP(((deltaT * multiplier), 0, ((targetVol - reactedVol)/cached_results[P])) //used to have multipler, now it does
|
||||
stepChemAmmount = (multiplier*cached_results[P])
|
||||
if (stepChemAmmount >= C.RateUpLim)
|
||||
stepChemAmmount = (C.RateUpLim)
|
||||
if (stepChemAmmount > C.RateUpLim)
|
||||
stepChemAmmount = C.RateUpLim
|
||||
addChemAmmount = deltaT * stepChemAmmount
|
||||
if (addChemAmmount >= (targetVol - reactedVol))
|
||||
addChemAmmount = (targetVol - reactedVol)
|
||||
if (addChemAmmount < CHEMICAL_QUANTISATION_LEVEL)
|
||||
addChemAmmount = CHEMICAL_QUANTISATION_LEVEL
|
||||
removeChemAmmount = (addChemAmmount/cached_results[P])
|
||||
//keep limited.
|
||||
addChemAmmount = round(addChemAmmount, CHEMICAL_QUANTISATION_LEVEL)
|
||||
removeChemAmmount = round(removeChemAmmount, CHEMICAL_QUANTISATION_LEVEL)
|
||||
//This is kept for future bugtesters.
|
||||
//message_admins("Reaction vars: PreReacted: [reactedVol] of [targetVol]. deltaT [deltaT], multiplier [multiplier], Step [stepChemAmmount], uncapped Step [deltaT*(multiplier*cached_results[P])], addChemAmmount [addChemAmmount], removeFactor [removeChemAmmount] Pfactor [cached_results[P]], adding [addChemAmmount]")
|
||||
|
||||
@@ -668,7 +674,7 @@
|
||||
for(var/P in cached_results)
|
||||
SSblackbox.record_feedback("tally", "chemical_reaction", addChemAmmount, P)//log
|
||||
SSblackbox.record_feedback("tally", "fermi_chem", addChemAmmount, P)
|
||||
add_reagent(P, (addChemAmmount), null, cached_temp, purity)//add reagent function!! I THINK I can do this:
|
||||
add_reagent(P, (addChemAmmount), null, cached_temp, purity)
|
||||
TotalStep += addChemAmmount//for multiple products
|
||||
//Above should reduce yeild based on holder purity.
|
||||
//Purity Check
|
||||
@@ -677,11 +683,11 @@
|
||||
if (R.purity < C.PurityMin)//If purity is below the min, blow it up.
|
||||
fermiIsReacting = FALSE
|
||||
SSblackbox.record_feedback("tally", "fermi_chem", 1, ("[P] explosion"))
|
||||
C.FermiExplode(src, my_atom, (reactedVol+targetVol), cached_temp, pH)
|
||||
C.FermiExplode(src, my_atom, (total_volume), cached_temp, pH)
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
return 0
|
||||
return
|
||||
|
||||
C.FermiCreate(src)//proc that calls when step is done
|
||||
C.FermiCreate(src, addChemAmmount, purity)//proc that calls when step is done
|
||||
|
||||
//Apply pH changes and thermal output of reaction to beaker
|
||||
chem_temp = round(cached_temp + (C.ThermicConstant * addChemAmmount))
|
||||
@@ -694,18 +700,18 @@
|
||||
//go to explode proc
|
||||
fermiIsReacting = FALSE
|
||||
SSblackbox.record_feedback("tally", "fermi_chem", 1, ("[C] explosions"))
|
||||
C.FermiExplode(src, my_atom, (reactedVol+targetVol), chem_temp, pH)
|
||||
C.FermiExplode(src, my_atom, (total_volume), chem_temp, pH)
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
return
|
||||
|
||||
//Make sure things are limited.
|
||||
//Make sure things are limited, but superacids/bases can push forward the reaction
|
||||
pH = CLAMP(pH, 0, 14)
|
||||
|
||||
//return said amount to compare for next step.
|
||||
return (reactedVol)
|
||||
|
||||
//Currently calculates it irrespective of required reagents at the start
|
||||
/datum/reagents/proc/reactant_purity(var/datum/chemical_reaction/fermi/C, holder)
|
||||
/datum/reagents/proc/reactant_purity(var/datum/chemical_reaction/C, holder)
|
||||
var/list/cached_reagents = reagent_list
|
||||
var/i = 0
|
||||
var/cachedPurity
|
||||
@@ -713,8 +719,18 @@
|
||||
if (R in cached_reagents)
|
||||
cachedPurity += R.purity
|
||||
i++
|
||||
if(!i)//I've never seen it get here with 0, but in case
|
||||
CRASH("No reactants found mid reaction for [fermiReactID]/[C], how it got here is beyond me. Beaker: [holder]")
|
||||
return cachedPurity/i
|
||||
|
||||
/datum/reagents/proc/uncache_purity(id)
|
||||
var/datum/reagent/R = has_reagent("[id]")
|
||||
if(!R)
|
||||
return
|
||||
if(R.cached_purity == 1)
|
||||
return
|
||||
R.purity = R.cached_purity
|
||||
|
||||
/datum/reagents/proc/isolate_reagent(reagent)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/_reagent in cached_reagents)
|
||||
@@ -746,14 +762,14 @@
|
||||
total_volume = 0
|
||||
for(var/reagent in cached_reagents)
|
||||
var/datum/reagent/R = reagent
|
||||
if(R.volume == 0)
|
||||
if(R.volume <= 0)//For clarity
|
||||
del_reagent(R.id)
|
||||
if((R.volume < 0.01) && !fermiIsReacting)
|
||||
del_reagent(R.id)
|
||||
else
|
||||
total_volume += R.volume
|
||||
if(!reagent_list)
|
||||
pH = 7
|
||||
if(!reagent_list || !total_volume)
|
||||
pH = REAGENT_NORMAL_PH
|
||||
return 0
|
||||
|
||||
/datum/reagents/proc/clear_reagents()
|
||||
@@ -818,7 +834,7 @@
|
||||
if(!isnum(amount) || !amount)
|
||||
return FALSE
|
||||
|
||||
if(amount <= CHEMICAL_QUANTISATION_LEVEL)//To prevent small ammount problems.
|
||||
if(amount < CHEMICAL_QUANTISATION_LEVEL)//To prevent small ammount problems.
|
||||
return FALSE
|
||||
|
||||
var/datum/reagent/D = GLOB.chemical_reagents_list[reagent]
|
||||
@@ -826,7 +842,7 @@
|
||||
WARNING("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])")
|
||||
return FALSE
|
||||
|
||||
if (D.id == "water" && no_react == FALSE && !istype(my_atom, /obj/item/reagent_containers/food)) //Do like an otter, add acid to water, but also don't blow up botany.
|
||||
if (D.id == "water" && !no_react && !istype(my_atom, /obj/item/reagent_containers/food)) //Do like an otter, add acid to water, but also don't blow up botany.
|
||||
if (pH <= 2)
|
||||
SSblackbox.record_feedback("tally", "fermi_chem", 1, "water-acid explosions")
|
||||
var/datum/effect_system/smoke_spread/chem/s = new
|
||||
@@ -852,7 +868,6 @@
|
||||
var/new_total = cached_total + amount
|
||||
var/cached_temp = chem_temp
|
||||
var/list/cached_reagents = reagent_list
|
||||
|
||||
var/cached_pH = pH
|
||||
|
||||
|
||||
@@ -869,7 +884,7 @@
|
||||
chem_temp = thermal_energy / (specific_heat * new_total)
|
||||
|
||||
//cacluate reagent based pH shift.
|
||||
if(ignore_pH == TRUE)
|
||||
if(ignore_pH)
|
||||
pH = ((cached_pH * cached_total)+(other_pH * amount))/(cached_total + amount)//should be right
|
||||
else
|
||||
pH = ((cached_pH * cached_total)+(D.pH * amount))/(cached_total + amount)//should be right
|
||||
@@ -889,10 +904,8 @@
|
||||
if(my_atom)
|
||||
my_atom.on_reagent_change(ADD_REAGENT)
|
||||
if(isliving(my_atom))
|
||||
if(R.OnMobMergeCheck == TRUE)//Forces on_mob_add proc when a chem is merged
|
||||
if(R.chemical_flags & REAGENT_ONMOBMERGE)//Forces on_mob_add proc when a chem is merged
|
||||
R.on_mob_add(my_atom, amount)
|
||||
//else
|
||||
// R.on_merge(data, amount, my_atom, other_purity)
|
||||
R.on_merge(data, amount, my_atom, other_purity)
|
||||
if(!no_react)
|
||||
handle_reactions()
|
||||
@@ -910,7 +923,7 @@
|
||||
if(data)
|
||||
R.data = data
|
||||
R.on_new(data)
|
||||
if(R.addProc == TRUE)//Allows on new without data overhead.
|
||||
if(R.chemical_flags & REAGENT_FORCEONNEW)//Allows on new without data overhead.
|
||||
R.on_new(pH) //Add more as desired.
|
||||
|
||||
|
||||
@@ -948,9 +961,9 @@
|
||||
var/datum/reagent/R = A
|
||||
if (R.id == reagent)
|
||||
if((total_volume - amount) <= 0)//Because this can result in 0, I don't want it to crash.
|
||||
pH = 7
|
||||
pH = REAGENT_NORMAL_PH
|
||||
//In practice this is really confusing and players feel like it randomly melts their beakers, but I'm not sure how else to handle it. We'll see how it goes and I can remove this if it confuses people.
|
||||
else if (ignore_pH == FALSE)
|
||||
else if (!ignore_pH)
|
||||
//if (((pH > R.pH) && (pH <= 7)) || ((pH < R.pH) && (pH >= 7)))
|
||||
pH = (((pH - R.pH) / total_volume) * amount) + pH
|
||||
if(istype(my_atom, /obj/item/reagent_containers/))
|
||||
|
||||
@@ -114,7 +114,6 @@
|
||||
recharge_counter++
|
||||
|
||||
/obj/machinery/chem_dispenser/proc/display_beaker()
|
||||
..()
|
||||
var/mutable_appearance/b_o = beaker_overlay || mutable_appearance(icon, "disp_beaker")
|
||||
b_o.pixel_y = -4
|
||||
b_o.pixel_x = -7
|
||||
@@ -157,8 +156,8 @@
|
||||
if(beaker)
|
||||
beaker.ex_act(severity, target)
|
||||
|
||||
/obj/machinery/chem_dispenser/handle_atom_del(atom/A)
|
||||
..()
|
||||
/obj/machinery/chem_dispenser/Exited(atom/movable/A, atom/newloc)
|
||||
. = ..()
|
||||
if(A == beaker)
|
||||
beaker = null
|
||||
cut_overlays()
|
||||
@@ -252,7 +251,7 @@
|
||||
if(!is_operational())
|
||||
return
|
||||
var/amount = text2num(params["amount"])
|
||||
if(beaker && amount in beaker.possible_transfer_amounts)
|
||||
if(beaker && (amount in beaker.possible_transfer_amounts))
|
||||
beaker.reagents.remove_all(amount)
|
||||
work_animation()
|
||||
. = TRUE
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
data["chosenPillStyle"] = chosenPillStyle
|
||||
data["isPillBottleLoaded"] = bottle ? 1 : 0
|
||||
if(bottle)
|
||||
GET_COMPONENT_FROM(STRB, /datum/component/storage, bottle)
|
||||
var/datum/component/storage/STRB = bottle.GetComponent(/datum/component/storage)
|
||||
data["pillBotContent"] = bottle.contents.len
|
||||
data["pillBotMaxContent"] = STRB.max_items
|
||||
|
||||
@@ -263,7 +263,7 @@
|
||||
var/target_loc = bottle ? bottle : drop_location()
|
||||
var/drop_threshold = INFINITY
|
||||
if(bottle)
|
||||
GET_COMPONENT_FROM(STRB, /datum/component/storage, bottle)
|
||||
var/datum/component/storage/STRB = bottle.GetComponent(/datum/component/storage)
|
||||
if(STRB)
|
||||
drop_threshold = STRB.max_items - bottle.contents.len
|
||||
|
||||
@@ -384,6 +384,38 @@
|
||||
adjust_item_drop_location(P)
|
||||
reagents.trans_to(P, vol_part)
|
||||
. = TRUE
|
||||
|
||||
if("createDart")
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
if(!(istype(R, /datum/reagent/medicine)))
|
||||
visible_message("<b>The [src]</b> beeps, \"<span class='warning'>SmartDarts are insoluble with non-medicinal compounds.\"</span>")
|
||||
return
|
||||
|
||||
var/many = params["many"]
|
||||
if(reagents.total_volume == 0)
|
||||
return
|
||||
var/amount = 1
|
||||
var/vol_each = min(reagents.total_volume, 20)
|
||||
if(text2num(many))
|
||||
amount = CLAMP(round(input(usr, "Max 10. Buffer content will be split evenly.", "How many darts?", amount) as num|null), 0, 10)
|
||||
if(!amount)
|
||||
return
|
||||
vol_each = min(reagents.total_volume / amount, 20)
|
||||
|
||||
var/name = stripped_input(usr,"Name:","Name your SmartDart!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)
|
||||
if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr)))
|
||||
return
|
||||
|
||||
var/obj/item/reagent_containers/syringe/dart/D
|
||||
for(var/i = 0; i < amount; i++)
|
||||
D = new /obj/item/reagent_containers/syringe/dart(drop_location())
|
||||
D.name = trim("[name] SmartDart")
|
||||
adjust_item_drop_location(D)
|
||||
reagents.trans_to(D, vol_each)
|
||||
D.mode=!mode
|
||||
D.update_icon()
|
||||
. = TRUE
|
||||
|
||||
//END CITADEL ADDITIONS
|
||||
if("analyzeBeak")
|
||||
var/datum/reagent/R = GLOB.chemical_reagents_list[params["id"]]
|
||||
@@ -405,7 +437,7 @@
|
||||
|
||||
if(!targetReagent)
|
||||
CRASH("Tried to find a reagent that doesn't exist in the chem_master!")
|
||||
analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold), "purityF" = targetReagent.purity, "inverseRatioF" = initial(R.InverseChemVal), "purityE" = initial(Rcr.PurityMin), "minTemp" = initial(Rcr.OptimalTempMin), "maxTemp" = initial(Rcr.OptimalTempMax), "eTemp" = initial(Rcr.ExplodeTemp), "pHpeak" = pHpeakCache)
|
||||
analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold), "purityF" = targetReagent.purity, "inverseRatioF" = initial(R.inverse_chem_val), "purityE" = initial(Rcr.PurityMin), "minTemp" = initial(Rcr.OptimalTempMin), "maxTemp" = initial(Rcr.OptimalTempMax), "eTemp" = initial(Rcr.ExplodeTemp), "pHpeak" = pHpeakCache)
|
||||
else
|
||||
fermianalyze = FALSE
|
||||
analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold))
|
||||
@@ -432,7 +464,7 @@
|
||||
|
||||
if(!targetReagent)
|
||||
CRASH("Tried to find a reagent that doesn't exist in the chem_master!")
|
||||
analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold), "purityF" = targetReagent.purity, "inverseRatioF" = initial(R.InverseChemVal), "purityE" = initial(Rcr.PurityMin), "minTemp" = initial(Rcr.OptimalTempMin), "maxTemp" = initial(Rcr.OptimalTempMax), "eTemp" = initial(Rcr.ExplodeTemp), "pHpeak" = pHpeakCache)
|
||||
analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold), "purityF" = targetReagent.purity, "inverseRatioF" = initial(R.inverse_chem_val), "purityE" = initial(Rcr.PurityMin), "minTemp" = initial(Rcr.OptimalTempMin), "maxTemp" = initial(Rcr.OptimalTempMax), "eTemp" = initial(Rcr.ExplodeTemp), "pHpeak" = pHpeakCache)
|
||||
else
|
||||
fermianalyze = FALSE
|
||||
analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold))
|
||||
|
||||
@@ -125,12 +125,6 @@
|
||||
else
|
||||
cut_overlays()
|
||||
|
||||
/obj/machinery/computer/pandemic/proc/eject_beaker()
|
||||
if(beaker)
|
||||
beaker.forceMove(drop_location())
|
||||
beaker = null
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/computer/pandemic/ui_interact(mob/user, ui_key = "main", datum/tgui/ui, force_open = FALSE, datum/tgui/master_ui, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
@@ -165,7 +159,7 @@
|
||||
return
|
||||
switch(action)
|
||||
if("eject_beaker")
|
||||
eject_beaker()
|
||||
replace_beaker(usr)
|
||||
. = TRUE
|
||||
if("empty_beaker")
|
||||
if(beaker)
|
||||
@@ -174,7 +168,7 @@
|
||||
if("empty_eject_beaker")
|
||||
if(beaker)
|
||||
beaker.reagents.clear_reagents()
|
||||
eject_beaker()
|
||||
replace_beaker(usr)
|
||||
. = TRUE
|
||||
if("rename_disease")
|
||||
var/id = get_virus_id_by_index(text2num(params["index"]))
|
||||
@@ -194,13 +188,15 @@
|
||||
to_chat(usr, "<span class='warning'>ERROR: Cannot replicate virus strain.</span>")
|
||||
return
|
||||
A = A.Copy()
|
||||
var/list/data = list("viruses" = list(A))
|
||||
var/list/data = list("blood_DNA" = "UNKNOWN DNA", "blood_type" = "SY", "viruses" = list(A))
|
||||
var/obj/item/reagent_containers/glass/bottle/B = new(drop_location())
|
||||
B.name = "[A.name] culture bottle"
|
||||
B.desc = "A small bottle. Contains [A.agent] culture in synthblood medium."
|
||||
B.reagents.add_reagent("blood", 20, data)
|
||||
wait = TRUE
|
||||
update_icon()
|
||||
var/turf/source_turf = get_turf(src)
|
||||
log_virus("A culture bottle was printed for the virus [A.admin_details()] at [loc_name(source_turf)] by [key_name(usr)]")
|
||||
addtimer(CALLBACK(src, .proc/reset_replicator_cooldown), 50)
|
||||
. = TRUE
|
||||
if("create_vaccine_bottle")
|
||||
@@ -232,18 +228,32 @@
|
||||
. = TRUE //no afterattack
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
if(beaker)
|
||||
to_chat(user, "<span class='warning'>A container is already loaded into [src]!</span>")
|
||||
var/obj/item/reagent_containers/B = I
|
||||
if(!user.transferItemToLoc(B, src))
|
||||
return
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
return
|
||||
|
||||
beaker = I
|
||||
replace_beaker(user, B)
|
||||
to_chat(user, "<span class='notice'>You insert [I] into [src].</span>")
|
||||
update_icon()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/pandemic/AltClick(mob/living/user)
|
||||
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
||||
return
|
||||
replace_beaker(user)
|
||||
return
|
||||
|
||||
/obj/machinery/computer/pandemic/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker)
|
||||
if(beaker)
|
||||
if(user && Adjacent(user) && !issiliconoradminghost(user))
|
||||
if(!user.put_in_hands(beaker))
|
||||
beaker.forceMove(drop_location())
|
||||
if(new_beaker)
|
||||
beaker = new_beaker
|
||||
else
|
||||
beaker = null
|
||||
update_icon()
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/computer/pandemic/on_deconstruction()
|
||||
eject_beaker()
|
||||
replace_beaker(usr)
|
||||
. = ..()
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/setting = 1 // displayed range is 3 * setting
|
||||
var/max_range = 3 // displayed max range is 3 * max range
|
||||
|
||||
/datum/effect_system/smoke_spread/chem/smoke_machine/set_up(datum/reagents/carry, setting=1, efficiency=10, loc)
|
||||
/datum/effect_system/smoke_spread/chem/smoke_machine/set_up(datum/reagents/carry, setting=1, efficiency=10, loc, silent=FALSE)
|
||||
amount = setting
|
||||
carry.copy_to(chemholder, 20)
|
||||
carry.remove_any(amount * 16 / efficiency)
|
||||
|
||||
@@ -32,21 +32,19 @@
|
||||
var/addiction_stage3_end = 30
|
||||
var/addiction_stage4_end = 40
|
||||
var/overdosed = 0 // You fucked up and this is now triggering its overdose effects, purge that shit quick.
|
||||
var/self_consuming = FALSE
|
||||
var/metabolizing = FALSE
|
||||
var/invisible = FALSE //Set to true if it doesn't appear on handheld health analyzers.
|
||||
var/self_consuming = FALSE //I think this uhhh, makes weird stuff happen when metabolising, but... doesn't seem to do what I think, so I'm gonna leave it.
|
||||
//Fermichem vars:
|
||||
var/purity = 1 //How pure a chemical is from 0 - 1.
|
||||
var/addProc = FALSE //If the chemical should force an on_new() call
|
||||
var/turf/loc = null //Should be the creation location!
|
||||
var/purity = 1 //How pure a chemical is from 0 - 1.
|
||||
var/cached_purity = 1
|
||||
var/turf/loc = null //Should be the creation location!
|
||||
var/pH = 7 //pH of the specific reagent, used for calculating the sum pH of a holder.
|
||||
var/SplitChem = FALSE //If the chem splits on metabolism
|
||||
var/ImpureChem = "fermiTox"// What chemical is metabolised with an inpure reaction
|
||||
var/InverseChemVal = 0.25 // If the impurity is below 0.5, replace ALL of the chem with InverseChem upon metabolising
|
||||
var/InverseChem = "fermiTox"// 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.
|
||||
var/DoNotSplit = FALSE // If impurity is handled within the main chem itself
|
||||
var/OnMobMergeCheck = FALSE //Call on_mob_life proc when reagents are merging.
|
||||
|
||||
//var/SplitChem = FALSE //If the chem splits on metabolism
|
||||
var/impure_chem // What chemical is metabolised with an inpure reaction
|
||||
var/inverse_chem_val = 0 // If the impurity is below 0.5, replace ALL of the chem with inverse_chemupon metabolising
|
||||
var/inverse_chem // What chem is metabolised when purity is below inverse_chem_val, this shouldn't be made, but if it does, well, I guess I'll know about it.
|
||||
var/metabolizing = FALSE
|
||||
var/chemical_flags // See fermi/readme.dm REAGENT_DEAD_PROCESS, REAGENT_DONOTSPLIT, REAGENT_ONLYINVERSE, REAGENT_ONMOBMERGE, REAGENT_INVISIBLE, REAGENT_FORCEONNEW, REAGENT_SNEAKYNAME
|
||||
var/value = 0 //How much does it sell for in cargo?
|
||||
|
||||
/datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references
|
||||
. = ..()
|
||||
@@ -75,28 +73,47 @@
|
||||
holder.remove_reagent(src.id, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears.
|
||||
return
|
||||
|
||||
//called when a mob processes chems when dead.
|
||||
/datum/reagent/proc/on_mob_dead(mob/living/carbon/M)
|
||||
if(!(chemical_flags & REAGENT_DEAD_PROCESS)) //justincase
|
||||
return
|
||||
current_cycle++
|
||||
if(holder)
|
||||
holder.remove_reagent(src.id, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears.
|
||||
return
|
||||
|
||||
// Called when this reagent is first added to a mob
|
||||
/datum/reagent/proc/on_mob_add(mob/living/L, amount)
|
||||
if(SplitChem)
|
||||
var/mob/living/carbon/M = L
|
||||
if(!M)
|
||||
return
|
||||
if(purity < 0)
|
||||
CRASH("Purity below 0 for chem: [id], Please let Fermis Know!")
|
||||
if (purity == 1 || DoNotSplit == TRUE)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [id]")
|
||||
return
|
||||
else if (InverseChemVal > purity)//Turns all of a added reagent into the inverse chem
|
||||
M.reagents.remove_reagent(id, amount, FALSE)
|
||||
M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [InverseChem]")
|
||||
return
|
||||
else
|
||||
var/impureVol = amount * (1 - purity) //turns impure ratio into impure chem
|
||||
if(!iscarbon(L))
|
||||
return
|
||||
var/mob/living/carbon/M = L
|
||||
if (purity == 1)
|
||||
log_game("CHEM: [L] ckey: [L.key] has ingested [volume]u of [id]")
|
||||
return
|
||||
if(cached_purity == 1)
|
||||
cached_purity = purity
|
||||
else if(purity < 0)
|
||||
CRASH("Purity below 0 for chem: [id], Please let Fermis Know!")
|
||||
if(chemical_flags & REAGENT_DONOTSPLIT)
|
||||
return
|
||||
|
||||
if ((inverse_chem_val > purity) && (inverse_chem))//Turns all of a added reagent into the inverse chem
|
||||
M.reagents.remove_reagent(id, amount, FALSE)
|
||||
M.reagents.add_reagent(inverse_chem, amount, FALSE, other_purity = 1-cached_purity)
|
||||
var/datum/reagent/R = M.reagents.has_reagent("[inverse_chem]")
|
||||
if(R.chemical_flags & REAGENT_SNEAKYNAME)
|
||||
R.name = name//Negative effects are hidden
|
||||
if(R.chemical_flags & REAGENT_INVISIBLE)
|
||||
R.chemical_flags |= (REAGENT_INVISIBLE)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [inverse_chem]")
|
||||
return
|
||||
else if (impure_chem)
|
||||
var/impureVol = amount * (1 - purity) //turns impure ratio into impure chem
|
||||
if(!(chemical_flags & REAGENT_SPLITRETAINVOL))
|
||||
M.reagents.remove_reagent(id, (impureVol), FALSE)
|
||||
M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume - impureVol]u of [id]")
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [ImpureChem]")
|
||||
M.reagents.add_reagent(impure_chem, impureVol, FALSE, other_purity = 1-cached_purity)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume - impureVol]u of [id]")
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [impure_chem]")
|
||||
return
|
||||
|
||||
// Called when this reagent is removed while inside a mob
|
||||
@@ -120,31 +137,34 @@
|
||||
|
||||
// Called when two reagents of the same are mixing.
|
||||
/datum/reagent/proc/on_merge(data, amount, mob/living/carbon/M, purity)
|
||||
if(SplitChem)
|
||||
if(!ishuman(M))
|
||||
return
|
||||
if (purity < 0)
|
||||
CRASH("Purity below 0 for chem: [id], Please let Fermis Know!")
|
||||
if (purity == 1 || DoNotSplit == TRUE)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [id] in themselves")
|
||||
return
|
||||
else if (InverseChemVal > purity)
|
||||
M.reagents.remove_reagent(id, amount, FALSE)
|
||||
M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1)
|
||||
for(var/datum/reagent/fermi/R in M.reagents.reagent_list)
|
||||
if(R.name == "")
|
||||
R.name = name//Negative effects are hidden
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [InverseChem]")
|
||||
return
|
||||
else
|
||||
var/impureVol = amount * (1 - purity)
|
||||
if(!iscarbon(M))
|
||||
return
|
||||
if (purity == 1)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [id]")
|
||||
return
|
||||
cached_purity = purity //purity SHOULD be precalculated from the add_reagent, update cache.
|
||||
if (purity < 0)
|
||||
CRASH("Purity below 0 for chem: [id], Please let Fermis Know!")
|
||||
if(chemical_flags & REAGENT_DONOTSPLIT)
|
||||
return
|
||||
|
||||
if ((inverse_chem_val > purity) && (inverse_chem)) //INVERT
|
||||
M.reagents.remove_reagent(id, amount, FALSE)
|
||||
M.reagents.add_reagent(inverse_chem, amount, FALSE, other_purity = 1-cached_purity)
|
||||
var/datum/reagent/R = M.reagents.has_reagent("[inverse_chem]")
|
||||
if(R.chemical_flags & REAGENT_SNEAKYNAME)
|
||||
R.name = name//Negative effects are hidden
|
||||
if(R.chemical_flags & REAGENT_INVISIBLE)
|
||||
R.chemical_flags |= (REAGENT_INVISIBLE)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [inverse_chem]")
|
||||
return
|
||||
else if (impure_chem) //SPLIT
|
||||
var/impureVol = amount * (1 - purity)
|
||||
if(!(chemical_flags & REAGENT_SPLITRETAINVOL))
|
||||
M.reagents.remove_reagent(id, impureVol, FALSE)
|
||||
M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1)
|
||||
for(var/datum/reagent/fermi/R in M.reagents.reagent_list)
|
||||
if(R.name == "")
|
||||
R.name = name//Negative effects are hidden
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume - impureVol]u of [id]")
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [ImpureChem]")
|
||||
M.reagents.add_reagent(impure_chem, impureVol, FALSE, other_purity = 1-cached_purity)
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume - impureVol]u of [id]")
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [impure_chem]")
|
||||
return
|
||||
|
||||
/datum/reagent/proc/on_update(atom/A)
|
||||
|
||||
@@ -88,7 +88,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of beer"
|
||||
glass_desc = "A freezing pint of beer."
|
||||
pH = 4
|
||||
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/beer/light
|
||||
name = "Light Beer"
|
||||
@@ -99,6 +99,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of light beer"
|
||||
glass_desc = "A freezing pint of watery light beer."
|
||||
pH = 5
|
||||
value = 0.3
|
||||
|
||||
/datum/reagent/consumable/ethanol/beer/green
|
||||
name = "Green Beer"
|
||||
@@ -110,6 +111,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of green beer"
|
||||
glass_desc = "A freezing pint of green beer. Festive."
|
||||
pH = 6
|
||||
value = 0.3
|
||||
|
||||
/datum/reagent/consumable/ethanol/beer/green/on_mob_life(mob/living/carbon/M)
|
||||
if(M.color != color)
|
||||
@@ -130,6 +132,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "DAMN, THIS THING LOOKS ROBUST!"
|
||||
shot_glass_icon_state = "shotglasscream"
|
||||
pH = 6
|
||||
value = 0.1
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/carbon/M)
|
||||
@@ -153,6 +156,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
pH = 4.5
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/thirteenloko
|
||||
name = "Thirteen Loko"
|
||||
@@ -168,7 +172,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "thirteen_loko_glass"
|
||||
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."
|
||||
|
||||
value = 0.3
|
||||
|
||||
/datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/carbon/M)
|
||||
M.drowsyness = max(0,M.drowsyness-7)
|
||||
@@ -231,6 +235,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "The glass contain wodka. Xynta."
|
||||
shot_glass_icon_state = "shotglassclear"
|
||||
pH = 8.1
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/vodka/on_mob_life(mob/living/carbon/M)
|
||||
M.radiation = max(M.radiation-2,0)
|
||||
@@ -247,6 +252,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "glass_brown"
|
||||
glass_name = "glass of bilk"
|
||||
glass_desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis."
|
||||
value = 0.5
|
||||
|
||||
/datum/reagent/consumable/ethanol/bilk/on_mob_life(mob/living/carbon/M)
|
||||
if(M.getBruteLoss() && prob(10))
|
||||
@@ -266,6 +272,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Three Mile Island Ice Tea"
|
||||
glass_desc = "A glass of this is sure to prevent a meltdown."
|
||||
pH = 3.5
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/threemileisland/on_mob_life(mob/living/carbon/M)
|
||||
M.set_drugginess(50)
|
||||
@@ -282,6 +289,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of gin"
|
||||
glass_desc = "A crystal clear glass of Griffeater gin."
|
||||
pH = 6.9
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/rum
|
||||
name = "Rum"
|
||||
@@ -295,6 +303,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "Now you want to Pray for a pirate suit, don't you?"
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
pH = 6.5
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/tequila
|
||||
name = "Tequila"
|
||||
@@ -308,6 +317,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "Now all that's missing is the weird colored shades!"
|
||||
shot_glass_icon_state = "shotglassgold"
|
||||
pH = 4
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/vermouth
|
||||
name = "Vermouth"
|
||||
@@ -321,6 +331,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "You wonder why you're even drinking this straight."
|
||||
shot_glass_icon_state = "shotglassclear"
|
||||
pH = 3.25
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/wine
|
||||
name = "Wine"
|
||||
@@ -334,6 +345,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "A very classy looking drink."
|
||||
shot_glass_icon_state = "shotglassred"
|
||||
pH = 3.45
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/lizardwine
|
||||
name = "Lizard wine"
|
||||
@@ -344,6 +356,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
quality = DRINK_FANTASTIC
|
||||
taste_description = "scaley sweetness"
|
||||
pH = 3
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/grappa
|
||||
name = "Grappa"
|
||||
@@ -356,6 +369,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of grappa"
|
||||
glass_desc = "A fine drink originally made to prevent waste by using the leftovers from winemaking."
|
||||
pH = 3.5
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/cognac
|
||||
name = "Cognac"
|
||||
@@ -369,6 +383,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "Damn, you feel like some kind of French aristocrat just by holding this."
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
pH = 3.5
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/absinthe
|
||||
name = "Absinthe"
|
||||
@@ -381,6 +396,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of absinthe"
|
||||
glass_desc = "It's as strong as it smells."
|
||||
shot_glass_icon_state = "shotglassgreen"
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(10) && !HAS_TRAIT(M, TRAIT_ALCOHOL_TOLERANCE))
|
||||
@@ -415,6 +431,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of ale"
|
||||
glass_desc = "A freezing pint of delicious Ale."
|
||||
pH = 4.5
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/goldschlager
|
||||
name = "Goldschlager"
|
||||
@@ -428,6 +445,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of goldschlager"
|
||||
glass_desc = "100% proof that teen girls will drink anything with gold in it."
|
||||
shot_glass_icon_state = "shotglassgold"
|
||||
value = 0.5
|
||||
|
||||
/datum/reagent/consumable/ethanol/patron
|
||||
name = "Patron"
|
||||
@@ -442,6 +460,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "Drinking patron in the bar, with all the subpar ladies."
|
||||
shot_glass_icon_state = "shotglassclear"
|
||||
pH = 4.5
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/gintonic
|
||||
name = "Gin and Tonic"
|
||||
@@ -455,6 +474,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Gin and Tonic"
|
||||
glass_desc = "A mild but still great cocktail. Drink up, like a true Englishman."
|
||||
pH = 3
|
||||
value = 0.5
|
||||
|
||||
/datum/reagent/consumable/ethanol/rum_coke
|
||||
name = "Rum and Coke"
|
||||
@@ -468,6 +488,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Rum and Coke"
|
||||
glass_desc = "The classic go-to of space-fratboys."
|
||||
pH = 4
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/cuba_libre
|
||||
name = "Cuba Libre"
|
||||
@@ -480,6 +501,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "cubalibreglass"
|
||||
glass_name = "Cuba Libre"
|
||||
glass_desc = "A classic mix of rum, cola, and lime. A favorite of revolutionaries everywhere!"
|
||||
value = 0.5
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/carbon/M)
|
||||
@@ -502,7 +524,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "whiskeycolaglass"
|
||||
glass_name = "whiskey cola"
|
||||
glass_desc = "An innocent-looking mixture of cola and Whiskey. Delicious."
|
||||
|
||||
value = 0.5
|
||||
|
||||
/datum/reagent/consumable/ethanol/martini
|
||||
name = "Classic Martini"
|
||||
@@ -515,6 +537,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "martiniglass"
|
||||
glass_name = "Classic Martini"
|
||||
glass_desc = "Damn, the bartender even stirred it, not shook it."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/vodkamartini
|
||||
name = "Vodka Martini"
|
||||
@@ -527,6 +550,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "martiniglass"
|
||||
glass_name = "Vodka martini"
|
||||
glass_desc ="A bastardisation of the classic martini. Still great."
|
||||
value = 1
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/white_russian
|
||||
@@ -540,6 +564,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "whiterussianglass"
|
||||
glass_name = "White Russian"
|
||||
glass_desc = "A very nice looking drink. But that's just, like, your opinion, man."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/screwdrivercocktail
|
||||
name = "Screwdriver"
|
||||
@@ -552,6 +577,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "screwdriverglass"
|
||||
glass_name = "Screwdriver"
|
||||
glass_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/screwdrivercocktail/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind && M.mind.assigned_role in list("Station Engineer", "Atmospheric Technician", "Chief Engineer")) //Engineers lose radiation poisoning at a massive rate.
|
||||
@@ -568,6 +594,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "booger"
|
||||
glass_name = "Booger"
|
||||
glass_desc = "Ewww..."
|
||||
value = 0.3
|
||||
|
||||
/datum/reagent/consumable/ethanol/bloody_mary
|
||||
name = "Bloody Mary"
|
||||
@@ -580,6 +607,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "bloodymaryglass"
|
||||
glass_name = "Bloody Mary"
|
||||
glass_desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder."
|
||||
value = 1.3
|
||||
|
||||
/datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/carbon/C)
|
||||
if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio))
|
||||
@@ -597,6 +625,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "bravebullglass"
|
||||
glass_name = "Brave Bull"
|
||||
glass_desc = "Tequila and Coffee liqueur, brought together in a mouthwatering mixture. Drink up."
|
||||
value = 2
|
||||
var/tough_text
|
||||
|
||||
/datum/reagent/consumable/ethanol/brave_bull/on_mob_metabolize(mob/living/M)
|
||||
@@ -621,6 +650,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "tequilasunriseglass"
|
||||
glass_name = "tequila Sunrise"
|
||||
glass_desc = "Oh great, now you feel nostalgic about sunrises back on Terra..."
|
||||
value = 2
|
||||
var/obj/effect/light_holder
|
||||
|
||||
/datum/reagent/consumable/ethanol/tequila_sunrise/on_mob_metabolize(mob/living/M)
|
||||
@@ -651,6 +681,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Toxins Special"
|
||||
glass_desc = "Whoah, this thing is on FIRE!"
|
||||
shot_glass_icon_state = "toxinsspecialglass"
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/toxins_special/on_mob_life(var/mob/living/M)
|
||||
M.adjust_bodytemperature(15 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 20) //310.15 is the normal bodytemp.
|
||||
@@ -670,6 +701,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
|
||||
pH = 2
|
||||
overdose_threshold = 40
|
||||
value = 3
|
||||
var/datum/brain_trauma/special/beepsky/B
|
||||
|
||||
/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_metabolize(mob/living/carbon/M)
|
||||
@@ -711,6 +743,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "irishcreamglass"
|
||||
glass_name = "Irish Cream"
|
||||
glass_desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?"
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/manly_dorf
|
||||
name = "The Manly Dorf"
|
||||
@@ -723,6 +756,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "manlydorfglass"
|
||||
glass_name = "The Manly Dorf"
|
||||
glass_desc = "A manly concoction made from Ale and Beer. Intended for true men only."
|
||||
value = 2
|
||||
var/dorf_mode
|
||||
|
||||
/datum/reagent/consumable/ethanol/manly_dorf/on_mob_metabolize(mob/living/M)
|
||||
@@ -750,7 +784,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "longislandicedteaglass"
|
||||
glass_name = "Long Island Iced Tea"
|
||||
glass_desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
|
||||
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/moonshine
|
||||
name = "Moonshine"
|
||||
@@ -762,6 +796,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "glass_clear"
|
||||
glass_name = "Moonshine"
|
||||
glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/b52
|
||||
name = "B-52"
|
||||
@@ -775,6 +810,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "B-52"
|
||||
glass_desc = "Kahlua, Irish Cream, and cognac. You will get bombed."
|
||||
shot_glass_icon_state = "b52glass"
|
||||
value = 5.2
|
||||
|
||||
/datum/reagent/consumable/ethanol/b52/on_mob_metabolize(mob/living/M)
|
||||
playsound(M, 'sound/effects/explosion_distant.ogg', 100, FALSE)
|
||||
@@ -790,6 +826,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "irishcoffeeglass"
|
||||
glass_name = "Irish Coffee"
|
||||
glass_desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/margarita
|
||||
name = "Margarita"
|
||||
@@ -802,6 +839,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "margaritaglass"
|
||||
glass_name = "Margarita"
|
||||
glass_desc = "On the rocks with salt on the rim. Arriba~!"
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/black_russian
|
||||
name = "Black Russian"
|
||||
@@ -814,6 +852,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "blackrussianglass"
|
||||
glass_name = "Black Russian"
|
||||
glass_desc = "For the lactose-intolerant. Still as classy as a White Russian."
|
||||
value = 3
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/manhattan
|
||||
@@ -827,6 +866,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "manhattanglass"
|
||||
glass_name = "Manhattan"
|
||||
glass_desc = "The Detective's undercover drink of choice. He never could stomach gin..."
|
||||
value = 3
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/manhattan_proj
|
||||
@@ -840,6 +880,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "proj_manhattanglass"
|
||||
glass_name = "Manhattan Project"
|
||||
glass_desc = "A scientist's drink of choice, for thinking how to blow up the station."
|
||||
value = 6
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/manhattan_proj/on_mob_life(mob/living/carbon/M)
|
||||
@@ -857,6 +898,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "whiskeysodaglass2"
|
||||
glass_name = "whiskey soda"
|
||||
glass_desc = "Ultimate refreshment."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/antifreeze
|
||||
name = "Anti-freeze"
|
||||
@@ -865,10 +907,11 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
quality = DRINK_NICE
|
||||
taste_description = "Jack Frost's piss"
|
||||
taste_description = "Jack Frost's piss" //Waterspots eeewww
|
||||
glass_icon_state = "antifreeze"
|
||||
glass_name = "Anti-freeze"
|
||||
glass_desc = "The ultimate refreshment."
|
||||
value = 3
|
||||
|
||||
/datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/carbon/M)
|
||||
M.adjust_bodytemperature(20 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 20) //310.15 is the normal bodytemp.
|
||||
@@ -885,6 +928,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "b&p"
|
||||
glass_name = "Barefoot"
|
||||
glass_desc = "Barefoot and pregnant."
|
||||
value = 4
|
||||
|
||||
/datum/reagent/consumable/ethanol/barefoot/on_mob_life(mob/living/carbon/M)
|
||||
if(ishuman(M)) //Barefoot causes the imbiber to quickly regenerate brute trauma if they're not wearing shoes.
|
||||
@@ -905,6 +949,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "snowwhite"
|
||||
glass_name = "Snow White"
|
||||
glass_desc = "A cold refreshment."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/demonsblood //Prevents the imbiber from being dragged into a pool of blood by a slaughter demon.
|
||||
name = "Demon's Blood"
|
||||
@@ -917,6 +962,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "demonsblood"
|
||||
glass_name = "Demons Blood"
|
||||
glass_desc = "Just looking at this thing makes the hair at the back of your neck stand up."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/devilskiss //If eaten by a slaughter demon, the demon will regret it.
|
||||
name = "Devil's Kiss"
|
||||
@@ -929,6 +975,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "devilskiss"
|
||||
glass_name = "Devils Kiss"
|
||||
glass_desc = "Creepy time!"
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/vodkatonic
|
||||
name = "Vodka and Tonic"
|
||||
@@ -941,7 +988,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "vodkatonicglass"
|
||||
glass_name = "vodka and tonic"
|
||||
glass_desc = "For when a gin and tonic isn't Russian enough."
|
||||
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/ginfizz
|
||||
name = "Gin Fizz"
|
||||
@@ -954,7 +1001,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "ginfizzglass"
|
||||
glass_name = "gin fizz"
|
||||
glass_desc = "Refreshingly lemony, deliciously dry."
|
||||
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/bahama_mama
|
||||
name = "Bahama Mama"
|
||||
@@ -967,6 +1014,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "bahama_mama"
|
||||
glass_name = "Bahama Mama"
|
||||
glass_desc = "Tropical cocktail."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/singulo
|
||||
name = "Singulo"
|
||||
@@ -979,6 +1027,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "singulo"
|
||||
glass_name = "Singulo"
|
||||
glass_desc = "A blue-space beverage."
|
||||
value = 4
|
||||
|
||||
/datum/reagent/consumable/ethanol/sbiten
|
||||
name = "Sbiten"
|
||||
@@ -991,6 +1040,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "sbitenglass"
|
||||
glass_name = "Sbiten"
|
||||
glass_desc = "A spicy mix of Vodka and Spice. Very hot."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/carbon/M)
|
||||
M.adjust_bodytemperature(50 * TEMPERATURE_DAMAGE_COEFFICIENT, 0 ,BODYTEMP_HEAT_DAMAGE_LIMIT) //310.15 is the normal bodytemp.
|
||||
@@ -1007,6 +1057,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "red_meadglass"
|
||||
glass_name = "Red Mead"
|
||||
glass_desc = "A True Viking's Beverage, though its color is strange."
|
||||
value = 5
|
||||
|
||||
/datum/reagent/consumable/ethanol/mead
|
||||
name = "Mead"
|
||||
@@ -1020,6 +1071,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "meadglass"
|
||||
glass_name = "Mead"
|
||||
glass_desc = "A Viking's Beverage, though a cheap one."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/iced_beer
|
||||
name = "Iced Beer"
|
||||
@@ -1031,6 +1083,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "iced_beerglass"
|
||||
glass_name = "iced beer"
|
||||
glass_desc = "A beer so frosty, the air around it freezes."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/carbon/M)
|
||||
M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) //310.15 is the normal bodytemp.
|
||||
@@ -1046,7 +1099,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "grogglass"
|
||||
glass_name = "Grog"
|
||||
glass_desc = "A fine and cepa drink for Space."
|
||||
|
||||
value = 2.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/aloe
|
||||
name = "Aloe"
|
||||
@@ -1059,6 +1112,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "aloe"
|
||||
glass_name = "Aloe"
|
||||
glass_desc = "Very, very, very good."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/andalusia
|
||||
name = "Andalusia"
|
||||
@@ -1071,6 +1125,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "andalusia"
|
||||
glass_name = "Andalusia"
|
||||
glass_desc = "A nice, strangely named drink."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/alliescocktail
|
||||
name = "Allies Cocktail"
|
||||
@@ -1083,6 +1138,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "alliescocktail"
|
||||
glass_name = "Allies cocktail"
|
||||
glass_desc = "A drink made from your allies."
|
||||
value = 4
|
||||
|
||||
/datum/reagent/consumable/ethanol/acid_spit
|
||||
name = "Acid Spit"
|
||||
@@ -1095,6 +1151,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "acidspitglass"
|
||||
glass_name = "Acid Spit"
|
||||
glass_desc = "A drink from Nanotrasen. Made from live aliens."
|
||||
value = 3
|
||||
|
||||
/datum/reagent/consumable/ethanol/amasec
|
||||
name = "Amasec"
|
||||
@@ -1107,6 +1164,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "amasecglass"
|
||||
glass_name = "Amasec"
|
||||
glass_desc = "Always handy before COMBAT!!!"
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/changelingsting
|
||||
name = "Changeling Sting"
|
||||
@@ -1119,6 +1177,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "changelingsting"
|
||||
glass_name = "Changeling Sting"
|
||||
glass_desc = "A stingy drink."
|
||||
value = 1.5
|
||||
|
||||
/datum/reagent/consumable/ethanol/changelingsting/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind) //Changeling Sting assists in the recharging of changeling chemicals.
|
||||
@@ -1139,6 +1198,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "irishcarbomb"
|
||||
glass_name = "Irish Car Bomb"
|
||||
glass_desc = "An Irish car bomb."
|
||||
value = 5
|
||||
|
||||
/datum/reagent/consumable/ethanol/syndicatebomb
|
||||
name = "Syndicate Bomb"
|
||||
@@ -1151,6 +1211,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "syndicatebomb"
|
||||
glass_name = "Syndicate Bomb"
|
||||
glass_desc = "A syndicate bomb."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/syndicatebomb/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(5))
|
||||
@@ -1168,6 +1229,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "erikasurprise"
|
||||
glass_name = "Erika Surprise"
|
||||
glass_desc = "The surprise is, it's green!"
|
||||
value = 4
|
||||
|
||||
/datum/reagent/consumable/ethanol/driestmartini
|
||||
name = "Driest Martini"
|
||||
@@ -1181,6 +1243,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "driestmartiniglass"
|
||||
glass_name = "Driest Martini"
|
||||
glass_desc = "Only for the experienced. You think you see sand floating in the glass."
|
||||
value = 5
|
||||
|
||||
/datum/reagent/consumable/ethanol/bananahonk
|
||||
name = "Banana Honk"
|
||||
@@ -1194,6 +1257,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "bananahonkglass"
|
||||
glass_name = "Banana Honk"
|
||||
glass_desc = "A drink from Clown Heaven."
|
||||
value = 8
|
||||
|
||||
/datum/reagent/consumable/ethanol/bananahonk/on_mob_life(mob/living/carbon/M)
|
||||
if((ishuman(M) && M.job == "Clown") || ismonkey(M))
|
||||
@@ -1213,6 +1277,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "silencerglass"
|
||||
glass_name = "Silencer"
|
||||
glass_desc = "A drink from Mime Heaven."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/silencer/on_mob_life(mob/living/carbon/M)
|
||||
if(ishuman(M) && M.job == "Mime")
|
||||
@@ -1231,6 +1296,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "drunkenblumpkin"
|
||||
glass_name = "Drunken Blumpkin"
|
||||
glass_desc = "A drink for the drunks."
|
||||
value = 3
|
||||
|
||||
/datum/reagent/consumable/ethanol/whiskey_sour //Requested since we had whiskey cola and soda but not sour.
|
||||
name = "Whiskey Sour"
|
||||
@@ -1243,6 +1309,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "whiskey_sour"
|
||||
glass_name = "whiskey sour"
|
||||
glass_desc = "Lemon juice mixed with whiskey and a dash of sugar. Surprisingly satisfying."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/hcider
|
||||
name = "Hard Cider"
|
||||
@@ -1256,7 +1323,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "hard cider"
|
||||
glass_desc = "Tastes like autumn... no wait, fall!"
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
|
||||
value = 3
|
||||
|
||||
/datum/reagent/consumable/ethanol/fetching_fizz //A reference to one of my favorite games of all time. Pulls nearby ores to the imbiber!
|
||||
name = "Fetching Fizz"
|
||||
@@ -1270,7 +1337,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "fetching_fizz"
|
||||
glass_name = "Fetching Fizz"
|
||||
glass_desc = "Induces magnetism in the imbiber. Started as a barroom prank but evolved to become popular with miners and scrappers. Metallic aftertaste."
|
||||
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/fetching_fizz/on_mob_life(mob/living/carbon/M)
|
||||
for(var/obj/item/stack/ore/O in orange(3, M))
|
||||
@@ -1290,6 +1357,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "hearty_punch"
|
||||
glass_name = "Hearty Punch"
|
||||
glass_desc = "Aromatic beverage served piping hot. According to folk tales it can almost wake the dead."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/hearty_punch/on_mob_life(mob/living/carbon/M)
|
||||
if(M.health <= 0)
|
||||
@@ -1311,7 +1379,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "glass_brown2"
|
||||
glass_name = "Bacchus' Blessing"
|
||||
glass_desc = "You didn't think it was possible for a liquid to be so utterly revolting. Are you sure about this...?"
|
||||
|
||||
value = 8
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/atomicbomb
|
||||
@@ -1325,6 +1393,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "atomicbombglass"
|
||||
glass_name = "Atomic Bomb"
|
||||
glass_desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing."
|
||||
value = 3.56
|
||||
|
||||
/datum/reagent/consumable/ethanol/atomicbomb/on_mob_life(mob/living/carbon/M)
|
||||
M.set_drugginess(50)
|
||||
@@ -1354,6 +1423,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "gargleblasterglass"
|
||||
glass_name = "Pan-Galactic Gargle Blaster"
|
||||
glass_desc = "Like having your brain smashed out by a slice of lemon wrapped around a large gold brick."
|
||||
value = 5
|
||||
|
||||
/datum/reagent/consumable/ethanol/gargle_blaster/on_mob_life(mob/living/carbon/M)
|
||||
M.dizziness +=1.5
|
||||
@@ -1383,10 +1453,11 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "neurotoxinglass"
|
||||
glass_name = "Neurotoxin"
|
||||
glass_desc = "A drink that is guaranteed to knock you silly."
|
||||
SplitChem = TRUE
|
||||
ImpureChem = "neuroweak"
|
||||
InverseChemVal = 0 //Clear conversion
|
||||
InverseChem = "neuroweak"
|
||||
//SplitChem = TRUE
|
||||
impure_chem = "neuroweak"
|
||||
inverse_chem_val = 0.5 //Clear conversion
|
||||
inverse_chem = "neuroweak"
|
||||
value = 4
|
||||
|
||||
/datum/reagent/consumable/ethanol/neurotoxin/proc/pickt()
|
||||
return (pick(TRAIT_PARALYSIS_L_ARM,TRAIT_PARALYSIS_R_ARM,TRAIT_PARALYSIS_R_LEG,TRAIT_PARALYSIS_L_LEG))
|
||||
@@ -1394,7 +1465,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
/datum/reagent/consumable/ethanol/neurotoxin/on_mob_life(mob/living/carbon/M)
|
||||
M.set_drugginess(50)
|
||||
M.dizziness +=2
|
||||
M.adjustBrainLoss(1*REM, 150)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1*REM, 150)
|
||||
if(prob(20) && !holder.has_reagent("neuroweak"))
|
||||
M.adjustStaminaLoss(10)
|
||||
M.drop_all_held_items()
|
||||
@@ -1405,7 +1476,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
ADD_TRAIT(M, t, type)
|
||||
M.adjustStaminaLoss(10)
|
||||
if(current_cycle > 30)
|
||||
M.adjustBrainLoss(2*REM)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2*REM)
|
||||
if(current_cycle > 50 && prob(15))
|
||||
if(!M.undergoing_cardiac_arrest() && M.can_heartattack())
|
||||
M.set_heartattack(TRUE)
|
||||
@@ -1428,16 +1499,17 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
description = "A mostly safe alcoholic drink for the true daredevils. Counteracts Neurotoxins."
|
||||
boozepwr = 60
|
||||
pH = 8
|
||||
value = 3
|
||||
|
||||
/datum/reagent/consumable/ethanol/neuroweak/on_mob_life(mob/living/carbon/M)
|
||||
if(holder.has_reagent("neurotoxin"))
|
||||
M.adjustBrainLoss(-1*REM, 150)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1*REM, 150)
|
||||
M.reagents.remove_reagent("neurotoxin", 1.5 * REAGENTS_METABOLISM, FALSE)
|
||||
if(holder.has_reagent("fentanyl"))
|
||||
M.adjustBrainLoss(-1*REM, 150)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1*REM, 150)
|
||||
M.reagents.remove_reagent("fentanyl", 0.75 * REAGENTS_METABOLISM, FALSE)
|
||||
else
|
||||
M.adjustBrainLoss(-0.5*REM, 150)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -0.5*REM, 150)
|
||||
M.dizziness +=2
|
||||
..()
|
||||
|
||||
@@ -1454,6 +1526,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "hippiesdelightglass"
|
||||
glass_name = "Hippie's Delight"
|
||||
glass_desc = "A drink enjoyed by people during the 1960's."
|
||||
value = 1.96
|
||||
|
||||
/datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/carbon/M)
|
||||
M.slurring = max(M.slurring,50)
|
||||
@@ -1498,6 +1571,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "nog3"
|
||||
glass_name = "eggnog"
|
||||
glass_desc = "The traditional way to get absolutely hammered at a Christmas party."
|
||||
value = 4
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/narsour
|
||||
@@ -1511,6 +1585,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "narsour"
|
||||
glass_name = "Nar'Sour"
|
||||
glass_desc = "A new hit cocktail inspired by THE ARM Breweries will have you shouting Fuu ma'jin in no time!"
|
||||
value = 6.66
|
||||
|
||||
/datum/reagent/consumable/ethanol/narsour/on_mob_life(mob/living/carbon/M)
|
||||
M.cultslurring = min(M.cultslurring + 3, 3)
|
||||
@@ -1527,6 +1602,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "glass_orange"
|
||||
glass_name = "Triple Sec"
|
||||
glass_desc = "A glass of straight Triple Sec."
|
||||
value = 1.5
|
||||
|
||||
/datum/reagent/consumable/ethanol/creme_de_menthe
|
||||
name = "Creme de Menthe"
|
||||
@@ -1538,6 +1614,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "glass_green"
|
||||
glass_name = "Creme de Menthe"
|
||||
glass_desc = "You can almost feel the first breath of spring just looking at it."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/creme_de_cacao
|
||||
name = "Creme de Cacao"
|
||||
@@ -1549,6 +1626,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "glass_brown"
|
||||
glass_name = "Creme de Cacao"
|
||||
glass_desc = "A million hazing lawsuits and alcohol poisonings have started with this humble ingredient."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/quadruple_sec
|
||||
name = "Quadruple Sec"
|
||||
@@ -1561,6 +1639,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "quadruple_sec"
|
||||
glass_name = "Quadruple Sec"
|
||||
glass_desc = "An intimidating and lawful beverage dares you to violate the law and make its day. Still can't drink it on duty, though."
|
||||
value = 3.04
|
||||
|
||||
/datum/reagent/consumable/ethanol/quadruple_sec/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM)) //Securidrink in line with the screwderiver for engineers or nothing for mimes.
|
||||
@@ -1580,6 +1659,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "quintuple_sec"
|
||||
glass_name = "Quintuple Sec"
|
||||
glass_desc = "Now you are become law, destroyer of clowns."
|
||||
value = 4.01
|
||||
|
||||
/datum/reagent/consumable/ethanol/quintuple_sec/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM)) //Securidrink in line with the screwderiver for engineers or nothing for mimes but STRONG..
|
||||
@@ -1602,6 +1682,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "grasshopper"
|
||||
glass_name = "Grasshopper"
|
||||
glass_desc = "You weren't aware edible beverages could be that green."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/stinger
|
||||
name = "Stinger"
|
||||
@@ -1614,6 +1695,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "stinger"
|
||||
glass_name = "Stinger"
|
||||
glass_desc = "You wonder what would happen if you pointed this at a heat source..."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/bastion_bourbon
|
||||
name = "Bastion Bourbon"
|
||||
@@ -1629,6 +1711,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "If you're feeling low, count on the buttery flavor of our own bastion bourbon."
|
||||
shot_glass_icon_state = "shotglassgreen"
|
||||
pH = 4
|
||||
value = 8
|
||||
|
||||
/datum/reagent/consumable/ethanol/bastion_bourbon/on_mob_metabolize(mob/living/L)
|
||||
var/heal_points = 10
|
||||
@@ -1666,6 +1749,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Squirt Cider"
|
||||
glass_desc = "Squirt cider will toughen you right up. Too bad about the musty aftertaste."
|
||||
shot_glass_icon_state = "shotglassgreen"
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/squirt_cider/on_mob_life(mob/living/carbon/M)
|
||||
M.satiety += 5 //for context, vitamins give 30 satiety per tick
|
||||
@@ -1683,6 +1767,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "fringe_weaver"
|
||||
glass_name = "Fringe Weaver"
|
||||
glass_desc = "It's a wonder it doesn't spill out of the glass."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/sugar_rush
|
||||
name = "Sugar Rush"
|
||||
@@ -1696,6 +1781,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "sugar_rush"
|
||||
glass_name = "Sugar Rush"
|
||||
glass_desc = "If you can't mix a Sugar Rush, you can't tend bar."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/sugar_rush/on_mob_life(mob/living/carbon/M)
|
||||
M.satiety -= 10 //junky as hell! a whole glass will keep you from being able to eat junk food
|
||||
@@ -1713,6 +1799,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "crevice_spike"
|
||||
glass_name = "Crevice Spike"
|
||||
glass_desc = "It'll either knock the drunkenness out of you or knock you out cold. Both, probably."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/crevice_spike/on_mob_metabolize(mob/living/L) //damage only applies when drink first enters system and won't again until drink metabolizes out
|
||||
L.adjustBruteLoss(3 * min(5,volume)) //minimum 3 brute damage on ingestion to limit non-drink means of injury - a full 5 unit gulp of the drink trucks you for the full 15
|
||||
@@ -1727,6 +1814,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "sakecup"
|
||||
glass_name = "cup of sake"
|
||||
glass_desc = "A traditional cup of sake."
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/peppermint_patty
|
||||
name = "Peppermint Patty"
|
||||
@@ -1739,6 +1827,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "peppermint_patty"
|
||||
glass_name = "Peppermint Patty"
|
||||
glass_desc = "A boozy minty hot cocoa that warms your belly on a cold night."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/peppermint_patty/on_mob_life(mob/living/carbon/M)
|
||||
M.apply_status_effect(/datum/status_effect/throat_soothed)
|
||||
@@ -1757,6 +1846,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Alexander"
|
||||
glass_desc = "A creamy, indulgent delight that is stronger than it seems."
|
||||
var/obj/item/shield/mighty_shield
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/alexander/on_mob_metabolize(mob/living/L)
|
||||
if(ishuman(L))
|
||||
@@ -1789,6 +1879,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "sidecar"
|
||||
glass_name = "Sidecar"
|
||||
glass_desc = "The one ride you'll gladly give up the wheel for."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/between_the_sheets
|
||||
name = "Between the Sheets"
|
||||
@@ -1801,6 +1892,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "between_the_sheets"
|
||||
glass_name = "Between the Sheets"
|
||||
glass_desc = "The only drink that comes with a label reminding you of Nanotrasen's zero-tolerance promiscuity policy."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/between_the_sheets/on_mob_life(mob/living/L)
|
||||
..()
|
||||
@@ -1826,6 +1918,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "kamikaze"
|
||||
glass_name = "Kamikaze"
|
||||
glass_desc = "Divinely windy."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/mojito
|
||||
name = "Mojito"
|
||||
@@ -1838,6 +1931,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "mojito"
|
||||
glass_name = "Mojito"
|
||||
glass_desc = "A drink that looks as refreshing as it tastes."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/fernet
|
||||
name = "Fernet"
|
||||
@@ -1847,7 +1941,8 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
boozepwr = 80
|
||||
taste_description = "utter bitterness"
|
||||
glass_name = "glass of fernet"
|
||||
glass_desc = "A glass of pure Fernet. Only an absolute madman would drink this alone." //Hi Kevum
|
||||
glass_desc = "A glass of pure Fernet. Only an absolute madman would drink this alone."
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/fernet/on_mob_life(mob/living/carbon/M)
|
||||
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
|
||||
@@ -1867,6 +1962,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "godlyblend"
|
||||
glass_name = "glass of fernet cola"
|
||||
glass_desc = "A sawed-off cola bottle filled with Fernet Cola. Nothing better after eating like a lardass."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/fernet_cola/on_mob_life(mob/living/carbon/M)
|
||||
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
|
||||
@@ -1887,6 +1983,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "fanciulli"
|
||||
glass_name = "glass of fanciulli"
|
||||
glass_desc = "A glass of Fanciulli. It's just Manhattan with Fernet."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/fanciulli/on_mob_life(mob/living/carbon/M)
|
||||
M.nutrition = max(M.nutrition - 5, 0)
|
||||
@@ -1911,7 +2008,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state= "minted_fernet"
|
||||
glass_name = "glass of branca menta"
|
||||
glass_desc = "A glass of Branca Menta, perfect for those lazy and hot sunday summer afternoons." //Get lazy literally by drinking this
|
||||
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/branca_menta/on_mob_life(mob/living/carbon/M)
|
||||
M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C)
|
||||
@@ -1935,6 +2032,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "blank_paper"
|
||||
glass_name = "glass of blank paper"
|
||||
glass_desc = "A fizzy cocktail for those looking to start fresh."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/blank_paper/on_mob_life(mob/living/carbon/M)
|
||||
if(ishuman(M) && M.job == "Mime")
|
||||
@@ -1952,6 +2050,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "champagne_glass"
|
||||
glass_name = "Champagne"
|
||||
glass_desc = "The flute clearly displays the slowly rising bubbles."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/wizz_fizz
|
||||
name = "Wizz Fizz"
|
||||
@@ -1964,6 +2063,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "wizz_fizz"
|
||||
glass_name = "Wizz Fizz"
|
||||
glass_desc = "The glass bubbles and froths with an almost magical intensity."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/wizz_fizz/on_mob_life(mob/living/carbon/M)
|
||||
//A healing drink similar to Quadruple Sec, Ling Stings, and Screwdrivers for the Wizznerds; the check is consistent with the changeling sting
|
||||
@@ -1984,6 +2084,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "bug_spray"
|
||||
glass_name = "Bug Spray"
|
||||
glass_desc = "Your eyes begin to water as the sting of alcohol reaches them."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/bug_spray/on_mob_life(mob/living/carbon/M)
|
||||
//Bugs should not drink Bug spray.
|
||||
@@ -2006,6 +2107,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "applejack_glass"
|
||||
glass_name = "Applejack"
|
||||
glass_desc = "You feel like you could drink this all neight."
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/jack_rose
|
||||
name = "Jack Rose"
|
||||
@@ -2018,6 +2120,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "jack_rose"
|
||||
glass_name = "Jack Rose"
|
||||
glass_desc = "Enough of these, and you really will start to suppose your toeses are roses."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/turbo
|
||||
name = "Turbo"
|
||||
@@ -2030,6 +2133,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "turbo"
|
||||
glass_name = "Turbo"
|
||||
glass_desc = "A turbulent cocktail for outlaw hoverbikers."
|
||||
value = 0.3
|
||||
|
||||
/datum/reagent/consumable/ethanol/turbo/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(4))
|
||||
@@ -2048,6 +2152,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "old_timer"
|
||||
glass_name = "Old Timer"
|
||||
glass_desc = "WARNING! May cause premature aging!"
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/old_timer/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(20))
|
||||
@@ -2081,6 +2186,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "rubberneck"
|
||||
glass_name = "Rubberneck"
|
||||
glass_desc = "A popular drink amongst those adhering to an all synthetic diet."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/duplex
|
||||
name = "Duplex"
|
||||
@@ -2093,6 +2199,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "duplex"
|
||||
glass_name = "Duplex"
|
||||
glass_desc = "To imbibe one component separately from the other is consider a great faux pas."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/trappist
|
||||
name = "Trappist Beer"
|
||||
@@ -2105,6 +2212,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "trappistglass"
|
||||
glass_name = "Trappist Beer"
|
||||
glass_desc = "boozy Catholicism in a glass."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/trappist/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind.isholy)
|
||||
@@ -2124,6 +2232,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Blazaam"
|
||||
glass_desc = "The glass seems to be sliding between realities. Doubles as a Berenstain remover."
|
||||
var/stored_teleports = 0
|
||||
value = 4
|
||||
|
||||
/datum/reagent/consumable/ethanol/blazaam/on_mob_life(mob/living/carbon/M)
|
||||
if(M.drunkenness > 40)
|
||||
@@ -2146,6 +2255,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "planet_cracker"
|
||||
glass_name = "Planet Cracker"
|
||||
glass_desc = "Although historians believe the drink was originally created to commemorate the end of an important conflict in man's past, its origins have largely been forgotten and it is today seen more as a general symbol of human supremacy."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/commander_and_chief
|
||||
name = "Commander and Chief"
|
||||
@@ -2154,10 +2264,11 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
color = "#ffffc9"
|
||||
boozepwr = 50
|
||||
quality = DRINK_FANTASTIC
|
||||
taste_description = "Tastes like...duty and responsibility?"
|
||||
taste_description = "duty and responsibility"
|
||||
glass_icon_state = "commander_and_chief"
|
||||
glass_name = "Commander and Chief"
|
||||
glass_desc = "The gems of this majestic chalice represent the departments and their Heads."
|
||||
value = 10
|
||||
|
||||
/datum/reagent/consumable/ethanol/commander_and_chief/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind && HAS_TRAIT(M.mind, TRAIT_CAPTAIN_METABOLISM))
|
||||
@@ -2182,6 +2293,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
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
|
||||
value = 4
|
||||
|
||||
/datum/reagent/consumable/ethanol/fruit_wine/on_new(list/data)
|
||||
names = data["names"]
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
description = "The sweet juice of an apple, fit for all ages."
|
||||
color = "#ECFF56" // rgb: 236, 255, 86
|
||||
taste_description = "apples"
|
||||
pH = 3.2 // ~ 2.7 -> 3.7
|
||||
|
||||
/datum/reagent/consumable/poisonberryjuice
|
||||
name = "Poison Berry Juice"
|
||||
@@ -407,10 +408,10 @@
|
||||
|
||||
/datum/reagent/consumable/nuka_cola/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
ADD_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
L.add_movespeed_modifier(id, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
|
||||
/datum/reagent/consumable/nuka_cola/on_mob_end_metabolize(mob/living/L)
|
||||
REMOVE_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
L.remove_movespeed_modifier(id)
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/carbon/M)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/reagent/drug
|
||||
name = "Drug"
|
||||
id = "drug"
|
||||
value = 12
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
taste_description = "bitterness"
|
||||
var/trippy = TRUE //Does this drug make you trip?
|
||||
@@ -80,14 +81,14 @@
|
||||
. = 1
|
||||
|
||||
/datum/reagent/drug/crank/overdose_process(mob/living/M)
|
||||
M.adjustBrainLoss(2*REM)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2*REM)
|
||||
M.adjustToxLoss(2*REM, 0)
|
||||
M.adjustBruteLoss(2*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/drug/crank/addiction_act_stage1(mob/living/M)
|
||||
M.adjustBrainLoss(5*REM)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5*REM)
|
||||
..()
|
||||
|
||||
/datum/reagent/drug/crank/addiction_act_stage2(mob/living/M)
|
||||
@@ -101,7 +102,7 @@
|
||||
. = 1
|
||||
|
||||
/datum/reagent/drug/crank/addiction_act_stage4(mob/living/M)
|
||||
M.adjustBrainLoss(3*REM)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3*REM)
|
||||
M.adjustToxLoss(5*REM, 0)
|
||||
M.adjustBruteLoss(5*REM, 0)
|
||||
..()
|
||||
@@ -125,13 +126,13 @@
|
||||
..()
|
||||
|
||||
/datum/reagent/drug/krokodil/overdose_process(mob/living/M)
|
||||
M.adjustBrainLoss(0.25*REM)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.25*REM)
|
||||
M.adjustToxLoss(0.25*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/drug/krokodil/addiction_act_stage1(mob/living/M)
|
||||
M.adjustBrainLoss(2*REM)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2*REM)
|
||||
M.adjustToxLoss(2*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
@@ -162,7 +163,7 @@
|
||||
/datum/reagent/drug/methamphetamine
|
||||
name = "Methamphetamine"
|
||||
id = "methamphetamine"
|
||||
description = "Reduces stun times by about 300%, speeds the user up, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
|
||||
description = "Reduces stun times by about 300%, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
|
||||
reagent_state = LIQUID
|
||||
color = "#FAFAFA"
|
||||
overdose_threshold = 20
|
||||
@@ -192,7 +193,7 @@
|
||||
if(jitter)
|
||||
M.Jitter(2)
|
||||
if(brain_damage)
|
||||
M.adjustBrainLoss(rand(1,4))
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(1,4))
|
||||
M.heal_overall_damage(2, 2)
|
||||
if(prob(5))
|
||||
M.emote(pick("twitch", "shiver"))
|
||||
@@ -210,7 +211,7 @@
|
||||
M.drop_all_held_items()
|
||||
..()
|
||||
M.adjustToxLoss(1, 0)
|
||||
M.adjustBrainLoss(pick(0.5, 0.6, 0.7, 0.8, 0.9, 1))
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, pick(0.5, 0.6, 0.7, 0.8, 0.9, 1))
|
||||
. = 1
|
||||
|
||||
/datum/reagent/drug/methamphetamine/addiction_act_stage1(mob/living/M)
|
||||
@@ -289,7 +290,7 @@
|
||||
if(prob(5))
|
||||
to_chat(M, "<span class='notice'>[high_message]</span>")
|
||||
M.adjustStaminaLoss(-5, 0)
|
||||
M.adjustBrainLoss(4)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 4)
|
||||
M.hallucination += 5
|
||||
if(M.canmove && !ismovableatom(M.loc))
|
||||
step(M, pick(GLOB.cardinals))
|
||||
@@ -314,7 +315,7 @@
|
||||
for(var/i = 0, i < 8, i++)
|
||||
step(M, pick(GLOB.cardinals))
|
||||
M.Jitter(5)
|
||||
M.adjustBrainLoss(10)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10)
|
||||
if(prob(20))
|
||||
M.emote(pick("twitch","drool","moan"))
|
||||
..()
|
||||
@@ -326,7 +327,7 @@
|
||||
step(M, pick(GLOB.cardinals))
|
||||
M.Jitter(10)
|
||||
M.Dizzy(10)
|
||||
M.adjustBrainLoss(10)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10)
|
||||
if(prob(30))
|
||||
M.emote(pick("twitch","drool","moan"))
|
||||
..()
|
||||
@@ -338,7 +339,7 @@
|
||||
step(M, pick(GLOB.cardinals))
|
||||
M.Jitter(15)
|
||||
M.Dizzy(15)
|
||||
M.adjustBrainLoss(10)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10)
|
||||
if(prob(40))
|
||||
M.emote(pick("twitch","drool","moan"))
|
||||
..()
|
||||
@@ -351,7 +352,7 @@
|
||||
M.Jitter(50)
|
||||
M.Dizzy(50)
|
||||
M.adjustToxLoss(5, 0)
|
||||
M.adjustBrainLoss(10)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10)
|
||||
if(prob(50))
|
||||
M.emote(pick("twitch","drool","moan"))
|
||||
..()
|
||||
@@ -401,7 +402,7 @@
|
||||
M.jitteriness = 0
|
||||
M.confused = 0
|
||||
M.disgust = 0
|
||||
M.adjustBrainLoss(0.2)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.2)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
@@ -418,12 +419,12 @@
|
||||
if(3)
|
||||
M.emote("frown")
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "happiness_drug", /datum/mood_event/happiness_drug_bad_od)
|
||||
M.adjustBrainLoss(0.5)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.5)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/drug/happiness/addiction_act_stage1(mob/living/M)// all work and no play makes jack a dull boy
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, M)
|
||||
var/datum/component/mood/mood = M.GetComponent(/datum/component/mood)
|
||||
mood.setSanity(min(mood.sanity, SANITY_DISTURBED))
|
||||
M.Jitter(5)
|
||||
if(prob(20))
|
||||
@@ -431,7 +432,7 @@
|
||||
..()
|
||||
|
||||
/datum/reagent/drug/happiness/addiction_act_stage2(mob/living/M)
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, M)
|
||||
var/datum/component/mood/mood = M.GetComponent(/datum/component/mood)
|
||||
mood.setSanity(min(mood.sanity, SANITY_UNSTABLE))
|
||||
M.Jitter(10)
|
||||
if(prob(30))
|
||||
@@ -439,7 +440,7 @@
|
||||
..()
|
||||
|
||||
/datum/reagent/drug/happiness/addiction_act_stage3(mob/living/M)
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, M)
|
||||
var/datum/component/mood/mood = M.GetComponent(/datum/component/mood)
|
||||
mood.setSanity(min(mood.sanity, SANITY_CRAZY))
|
||||
M.Jitter(15)
|
||||
if(prob(40))
|
||||
@@ -447,7 +448,7 @@
|
||||
..()
|
||||
|
||||
/datum/reagent/drug/happiness/addiction_act_stage4(mob/living/carbon/human/M)
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, M)
|
||||
var/datum/component/mood/mood = M.GetComponent(/datum/component/mood)
|
||||
mood.setSanity(SANITY_INSANE)
|
||||
M.Jitter(20)
|
||||
if(prob(50))
|
||||
@@ -469,7 +470,7 @@
|
||||
|
||||
/datum/reagent/drug/skooma/on_mob_metabolize(mob/living/L)
|
||||
. = ..()
|
||||
ADD_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
L.add_movespeed_modifier(id, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
L.next_move_modifier *= 2
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
@@ -480,7 +481,7 @@
|
||||
|
||||
/datum/reagent/drug/skooma/on_mob_end_metabolize(mob/living/L)
|
||||
. = ..()
|
||||
REMOVE_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
L.remove_movespeed_modifier(id)
|
||||
L.next_move_modifier *= 0.5
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
@@ -490,7 +491,7 @@
|
||||
H.dna.species.punchdamagehigh *= 0.2
|
||||
|
||||
/datum/reagent/drug/skooma/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustBrainLoss(1*REM)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1*REM)
|
||||
M.adjustToxLoss(1*REM)
|
||||
if(prob(10))
|
||||
M.adjust_blurriness(2)
|
||||
@@ -522,7 +523,7 @@
|
||||
M.Dizzy(50)
|
||||
M.adjust_blurriness(10)
|
||||
if(prob(50)) //This proc will be called about 200 times and the adjustbrainloss() below only has to be called 40 times to kill. This will make surviving skooma addiction pretty rare without mannitol usage.
|
||||
M.adjustBrainLoss(5)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5)
|
||||
if(prob(40))
|
||||
M.emote(pick("twitch","drool","moan"))
|
||||
..()
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
id = "consumable"
|
||||
taste_description = "generic food"
|
||||
taste_mult = 4
|
||||
value = 0.1
|
||||
var/nutriment_factor = 1 * REAGENTS_METABOLISM
|
||||
var/quality = 0 //affects mood, typically higher for mixed drinks with more complex recipes
|
||||
|
||||
@@ -91,6 +92,7 @@
|
||||
name = "Vitamin"
|
||||
id = "vitamin"
|
||||
description = "All the best vitamins, minerals, and carbohydrates the body needs in pure form."
|
||||
value = 0.5
|
||||
|
||||
brute_heal = 1
|
||||
burn_heal = 1
|
||||
@@ -106,6 +108,7 @@
|
||||
description = "A variety of cooking oil derived from fat or plants. Used in food preparation and frying."
|
||||
color = "#EADD6B" //RGB: 234, 221, 107 (based off of canola oil)
|
||||
taste_mult = 0.8
|
||||
value = 1
|
||||
taste_description = "oil"
|
||||
nutriment_factor = 7 * REAGENTS_METABOLISM //Not very healthy on its own
|
||||
metabolization_rate = 10 * REAGENTS_METABOLISM
|
||||
@@ -138,7 +141,7 @@
|
||||
return TRUE
|
||||
|
||||
/datum/reagent/consumable/cooking_oil/reaction_turf(turf/open/T, reac_volume)
|
||||
if(!istype(T))
|
||||
if(!istype(T) || isgroundlessturf(T))
|
||||
return
|
||||
if(reac_volume >= 5)
|
||||
T.MakeSlippery(TURF_WET_LUBE, min_wet_time = 10 SECONDS, wet_time_to_add = reac_volume * 1.5 SECONDS)
|
||||
@@ -156,6 +159,7 @@
|
||||
metabolization_rate = 2 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 200 // Hyperglycaemic shock
|
||||
taste_description = "sweetness"
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/sugar/overdose_start(mob/living/M)
|
||||
to_chat(M, "<span class='userdanger'>You go into hyperglycaemic shock! Lay off the twinkies!</span>")
|
||||
@@ -237,6 +241,7 @@
|
||||
description = "A special oil that noticably chills the body. Extracted from Icepeppers and slimes."
|
||||
color = "#8BA6E9" // rgb: 139, 166, 233
|
||||
taste_description = "mint"
|
||||
value = 2
|
||||
pH = 13 //HMM! I wonder
|
||||
|
||||
/datum/reagent/consumable/frostoil/on_mob_life(mob/living/carbon/M)
|
||||
@@ -438,6 +443,7 @@
|
||||
/datum/reagent/consumable/sprinkles
|
||||
name = "Sprinkles"
|
||||
id = "sprinkles"
|
||||
value = 3
|
||||
description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops."
|
||||
color = "#FF00FF" // rgb: 255, 0, 255
|
||||
taste_description = "childhood whimsy"
|
||||
@@ -453,6 +459,7 @@
|
||||
id = "peanut_butter"
|
||||
description = "A popular food paste made from ground dry-roasted peanuts."
|
||||
color = "#C29261"
|
||||
value = 3
|
||||
nutriment_factor = 15 * REAGENTS_METABOLISM
|
||||
taste_description = "peanuts"
|
||||
|
||||
@@ -461,6 +468,7 @@
|
||||
id = "cornoil"
|
||||
description = "An oil derived from various types of corn."
|
||||
nutriment_factor = 20 * REAGENTS_METABOLISM
|
||||
value = 4
|
||||
color = "#302000" // rgb: 48, 32, 0
|
||||
taste_description = "slime"
|
||||
|
||||
@@ -479,6 +487,7 @@
|
||||
/datum/reagent/consumable/enzyme
|
||||
name = "Universal Enzyme"
|
||||
id = "enzyme"
|
||||
value = 1
|
||||
description = "A universal enzyme used in the preperation of certain chemicals and foods."
|
||||
color = "#365E30" // rgb: 54, 94, 48
|
||||
taste_description = "sweetness"
|
||||
@@ -518,6 +527,7 @@
|
||||
/datum/reagent/consumable/flour
|
||||
name = "Flour"
|
||||
id = "flour"
|
||||
value = 0.5
|
||||
description = "This is what you rub all over yourself to pretend to be a ghost."
|
||||
reagent_state = SOLID
|
||||
color = "#FFFFFF" // rgb: 0, 0, 0
|
||||
@@ -535,6 +545,7 @@
|
||||
id = "cherryjelly"
|
||||
description = "Totally the best. Only to be spread on foods with excellent lateral symmetry."
|
||||
color = "#801E28" // rgb: 128, 30, 40
|
||||
value = 1
|
||||
taste_description = "cherry"
|
||||
|
||||
/datum/reagent/consumable/bluecherryjelly
|
||||
@@ -542,11 +553,13 @@
|
||||
id = "bluecherryjelly"
|
||||
description = "Blue and tastier kind of cherry jelly."
|
||||
color = "#00F0FF"
|
||||
value = 12
|
||||
taste_description = "blue cherry"
|
||||
|
||||
/datum/reagent/consumable/rice
|
||||
name = "Rice"
|
||||
id = "rice"
|
||||
value = 0.5
|
||||
description = "tiny nutritious grains"
|
||||
reagent_state = SOLID
|
||||
nutriment_factor = 3 * REAGENTS_METABOLISM
|
||||
@@ -556,6 +569,7 @@
|
||||
/datum/reagent/consumable/vanilla
|
||||
name = "Vanilla Powder"
|
||||
id = "vanilla"
|
||||
value = 1
|
||||
description = "A fatty, bitter paste made from vanilla pods."
|
||||
reagent_state = SOLID
|
||||
nutriment_factor = 5 * REAGENTS_METABOLISM
|
||||
@@ -565,6 +579,7 @@
|
||||
/datum/reagent/consumable/eggyolk
|
||||
name = "Egg Yolk"
|
||||
id = "eggyolk"
|
||||
value = 1
|
||||
description = "It's full of protein."
|
||||
nutriment_factor = 3 * REAGENTS_METABOLISM
|
||||
color = "#FFB500"
|
||||
@@ -573,6 +588,7 @@
|
||||
/datum/reagent/consumable/corn_starch
|
||||
name = "Corn Starch"
|
||||
id = "corn_starch"
|
||||
value = 2
|
||||
description = "A slippery solution."
|
||||
color = "#f7f6e4"
|
||||
taste_description = "slime"
|
||||
@@ -580,6 +596,7 @@
|
||||
/datum/reagent/consumable/corn_syrup
|
||||
name = "Corn Syrup"
|
||||
id = "corn_syrup"
|
||||
value = 1
|
||||
description = "Decays into sugar."
|
||||
color = "#fff882"
|
||||
metabolization_rate = 3 * REAGENTS_METABOLISM
|
||||
@@ -594,6 +611,7 @@
|
||||
id = "honey"
|
||||
description = "Sweet sweet honey that decays into sugar. Has antibacterial and natural healing properties."
|
||||
color = "#d3a308"
|
||||
value = 15
|
||||
nutriment_factor = 15 * REAGENTS_METABOLISM
|
||||
metabolization_rate = 1 * REAGENTS_METABOLISM
|
||||
taste_description = "sweetness"
|
||||
@@ -608,18 +626,19 @@
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/honey/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(iscarbon(M) && (method in list(TOUCH, VAPOR, PATCH)))
|
||||
var/mob/living/carbon/C = M
|
||||
for(var/s in C.surgeries)
|
||||
var/datum/surgery/S = s
|
||||
S.success_multiplier = max(0.6, S.success_multiplier) // +60% success probability on each step, compared to bacchus' blessing's ~46%
|
||||
..()
|
||||
if(iscarbon(M) && (method in list(TOUCH, VAPOR, PATCH)))
|
||||
var/mob/living/carbon/C = M
|
||||
for(var/s in C.surgeries)
|
||||
var/datum/surgery/S = s
|
||||
S.success_multiplier = max(0.6, S.success_multiplier) // +60% success probability on each step, compared to bacchus' blessing's ~46%
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/mayonnaise
|
||||
name = "Mayonnaise"
|
||||
id = "mayonnaise"
|
||||
description = "An white and oily mixture of mixed egg yolks."
|
||||
color = "#DFDFDF"
|
||||
value = 5
|
||||
taste_description = "mayonnaise"
|
||||
|
||||
/datum/reagent/consumable/tearjuice
|
||||
@@ -691,7 +710,7 @@
|
||||
. = 1
|
||||
if(prob(20))
|
||||
M.losebreath += 4
|
||||
M.adjustBrainLoss(2*REM, 150)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2*REM, 150)
|
||||
M.adjustToxLoss(3*REM,0)
|
||||
M.adjustStaminaLoss(10*REM,0)
|
||||
M.blur_eyes(5)
|
||||
@@ -748,6 +767,7 @@
|
||||
taste_mult = 8
|
||||
taste_description = "sweetness"
|
||||
overdose_threshold = 17
|
||||
value = 0.2
|
||||
|
||||
/datum/reagent/consumable/astrotame/overdose_process(mob/living/carbon/M)
|
||||
if(M.disgust < 80)
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
//Reagents produced by metabolising/reacting fermichems inoptimally, i.e. inverse_chems or impure_chems
|
||||
//Inverse = Splitting
|
||||
//Invert = Whole conversion
|
||||
|
||||
/datum/reagent/impure
|
||||
chemical_flags = REAGENT_INVISIBLE | REAGENT_SNEAKYNAME //by default, it will stay hidden on splitting, but take the name of the source on inverting
|
||||
|
||||
|
||||
/datum/reagent/impure/fermiTox
|
||||
name = "Chemical Isomers"
|
||||
id = "fermiTox"
|
||||
description = "Toxic chemical isomers made from impure reactions. At low volumes will cause light toxin damage, but as the volume increases, it deals larger amounts, damages the liver, then eventually the heart. This is default impure chem for all chems, and changes only if stated."
|
||||
data = "merge"
|
||||
color = "FFFFFF"
|
||||
can_synth = FALSE
|
||||
var/potency = 1 //potency multiplies the volume when added.
|
||||
|
||||
|
||||
//I'm concerned this is too weak, but I also don't want deathmixes.
|
||||
//TODO: liver damage, 100+ heart
|
||||
/datum/reagent/impure/fermiTox/on_mob_life(mob/living/carbon/C, method)
|
||||
if(C.dna && istype(C.dna.species, /datum/species/jelly))
|
||||
C.adjustToxLoss(-2)
|
||||
else
|
||||
C.adjustToxLoss(2)
|
||||
..()
|
||||
@@ -8,6 +8,7 @@
|
||||
/datum/reagent/medicine
|
||||
name = "Medicine"
|
||||
id = "medicine"
|
||||
value = 2
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/medicine/on_mob_life(mob/living/carbon/M)
|
||||
@@ -44,7 +45,7 @@
|
||||
M.heal_bodypart_damage(5,5)
|
||||
M.adjustToxLoss(-5, 0, TRUE)
|
||||
M.hallucination = 0
|
||||
M.setBrainLoss(0)
|
||||
M.setOrganLoss(ORGAN_SLOT_BRAIN, 0)
|
||||
REMOVE_TRAITS_NOT_IN(M, list(SPECIES_TRAIT, ROUNDSTART_TRAIT, ORGAN_TRAIT))
|
||||
M.set_blurriness(0)
|
||||
M.set_blindness(0)
|
||||
@@ -64,6 +65,10 @@
|
||||
if(M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio))
|
||||
M.blood_volume = (BLOOD_VOLUME_NORMAL*M.blood_ratio)
|
||||
|
||||
for(var/organ in M.internal_organs)
|
||||
var/obj/item/organ/O = organ
|
||||
O.setOrganDamage(0)
|
||||
|
||||
for(var/thing in M.diseases)
|
||||
var/datum/disease/D = thing
|
||||
if(D.severity == DISEASE_SEVERITY_POSITIVE)
|
||||
@@ -123,6 +128,7 @@
|
||||
description = "Instantly restores all hearing to the patient, but does not cure deafness."
|
||||
color = "#6600FF" // rgb: 100, 165, 255
|
||||
pH = 2
|
||||
value = 10
|
||||
|
||||
/datum/reagent/medicine/inacusiate/on_mob_life(mob/living/carbon/M)
|
||||
M.restoreEars()
|
||||
@@ -205,6 +211,7 @@
|
||||
overdose_threshold = 30
|
||||
taste_description = "fish"
|
||||
pH = 12.2
|
||||
value = 20
|
||||
|
||||
/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.
|
||||
@@ -232,10 +239,13 @@
|
||||
/datum/reagent/medicine/silver_sulfadiazine
|
||||
name = "Silver Sulfadiazine"
|
||||
id = "silver_sulfadiazine"
|
||||
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."
|
||||
description = "If used in touch-based applications, immediately restores burn wounds as well as restoring more over time. It is mildly poisonous taken orally or by injection. If overdosed, deals brute and minor liver damage."
|
||||
reagent_state = LIQUID
|
||||
pH = 7.2
|
||||
color = "#ffeac9"
|
||||
metabolization_rate = 5 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 50
|
||||
value = 3
|
||||
|
||||
/datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
|
||||
if(iscarbon(M) && M.stat != DEAD)
|
||||
@@ -256,6 +266,15 @@
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/silver_sulfadiazine/overdose_start(mob/living/M)
|
||||
metabolization_rate = 15 * REAGENTS_METABOLISM
|
||||
M.adjustBruteLoss(2*REM, 0)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
C.applyLiverDamage(1)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/oxandrolone
|
||||
name = "Oxandrolone"
|
||||
id = "oxandrolone"
|
||||
@@ -265,9 +284,10 @@
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 25
|
||||
pH = 10.7
|
||||
value = 4
|
||||
|
||||
/datum/reagent/medicine/oxandrolone/on_mob_life(mob/living/carbon/M)
|
||||
if(M.getFireLoss() > 50)
|
||||
if(M.getFireLoss() > 25)
|
||||
M.adjustFireLoss(-4*REM, 0) //Twice as effective as silver sulfadiazine for severe burns
|
||||
else
|
||||
M.adjustFireLoss(-0.5*REM, 0) //But only a quarter as effective for more minor ones
|
||||
@@ -283,10 +303,13 @@
|
||||
/datum/reagent/medicine/styptic_powder
|
||||
name = "Styptic Powder"
|
||||
id = "styptic_powder"
|
||||
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."
|
||||
description = "If used in touch-based applications, immediately restores bruising as well as restoring more over time. It is poisonous if taken orally or by injection. If overdosed, deals brute and minor liver damage."
|
||||
reagent_state = LIQUID
|
||||
color = "#FF9696"
|
||||
pH = 6.7
|
||||
metabolization_rate = 5 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 50
|
||||
value = 3
|
||||
|
||||
/datum/reagent/medicine/styptic_powder/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
|
||||
if(iscarbon(M) && M.stat != DEAD)
|
||||
@@ -308,6 +331,15 @@
|
||||
..()
|
||||
. = 1
|
||||
|
||||
datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
metabolization_rate = 15 * REAGENTS_METABOLISM
|
||||
M.adjustBruteLoss(2*REM, 0)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
C.applyLiverDamage(1)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/salglu_solution
|
||||
name = "Saline-Glucose Solution"
|
||||
id = "salglu_solution"
|
||||
@@ -320,6 +352,7 @@
|
||||
var/last_added = 0
|
||||
var/maximum_reachable = BLOOD_VOLUME_NORMAL - 10 //So that normal blood regeneration can continue with salglu active
|
||||
pH = 5.5
|
||||
value = 1
|
||||
|
||||
/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/M)
|
||||
if(last_added)
|
||||
@@ -394,23 +427,36 @@
|
||||
/datum/reagent/medicine/synthflesh
|
||||
name = "Synthflesh"
|
||||
id = "synthflesh"
|
||||
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."
|
||||
description = "Has a 100% chance of healing large amounts of brute and burn damage very quickly. One unit of the chemical will heal one point of damage. Touch application only."
|
||||
reagent_state = LIQUID
|
||||
color = "#FFEBEB"
|
||||
pH = 11.5
|
||||
metabolization_rate = 5 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 40
|
||||
value = 6
|
||||
|
||||
/datum/reagent/medicine/synthflesh/reaction_mob(mob/living/M, method=TOUCH, reac_volume,show_message = 1)
|
||||
if(iscarbon(M))
|
||||
if (M.stat == DEAD)
|
||||
show_message = 0
|
||||
if(method in list(PATCH, TOUCH))
|
||||
M.adjustBruteLoss(-1.25 * reac_volume)
|
||||
M.adjustFireLoss(-1.25 * reac_volume)
|
||||
if(method in list(INGEST, VAPOR))
|
||||
var/mob/living/carbon/C = M
|
||||
C.losebreath++
|
||||
C.emote("cough")
|
||||
to_chat(M, "<span class='danger'>You feel your throat closing up!</span>")
|
||||
else if(method == INJECT)
|
||||
return
|
||||
else if(method in list(PATCH, TOUCH))
|
||||
M.adjustBruteLoss(-1 * reac_volume)
|
||||
M.adjustFireLoss(-1 * reac_volume)
|
||||
if(show_message)
|
||||
to_chat(M, "<span class='danger'>You feel your burns and bruises healing! It stings like hell!</span>")
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/synthflesh/overdose_start(mob/living/M)
|
||||
metabolization_rate = 15 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/medicine/charcoal
|
||||
name = "Charcoal"
|
||||
id = "charcoal"
|
||||
@@ -420,6 +466,7 @@
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
taste_description = "ash"
|
||||
pH = 5
|
||||
value = 1
|
||||
|
||||
/datum/reagent/medicine/charcoal/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustToxLoss(-2*REM, 0)
|
||||
@@ -438,6 +485,7 @@
|
||||
metabolization_rate = 0.25 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 30
|
||||
pH = 2
|
||||
value = 5
|
||||
|
||||
/datum/reagent/medicine/omnizine/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustToxLoss(-0.5*REM, 0)
|
||||
@@ -541,7 +589,7 @@
|
||||
|
||||
|
||||
/datum/reagent/medicine/sal_acid/on_mob_life(mob/living/carbon/M)
|
||||
if(M.getBruteLoss() > 50)
|
||||
if(M.getBruteLoss() > 25)
|
||||
M.adjustBruteLoss(-4*REM, 0) //Twice as effective as styptic powder for severe bruising
|
||||
else
|
||||
M.adjustBruteLoss(-0.5*REM, 0) //But only a quarter as effective for more minor ones
|
||||
@@ -591,7 +639,7 @@
|
||||
/datum/reagent/medicine/ephedrine
|
||||
name = "Ephedrine"
|
||||
id = "ephedrine"
|
||||
description = "Increases stun resistance and movement speed. Overdose deals toxin damage and inhibits breathing."
|
||||
description = "Increases stun resistance. Overdose deals toxin damage and inhibits breathing."
|
||||
reagent_state = LIQUID
|
||||
color = "#D2FFFA"
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
@@ -852,10 +900,16 @@
|
||||
if(M.notify_ghost_cloning(source = M))
|
||||
spawn (100) //so the ghost has time to re-enter
|
||||
return
|
||||
|
||||
else
|
||||
M.adjustOxyLoss(-20, 0)
|
||||
M.adjustToxLoss(-20, 0)
|
||||
var/mob/living/carbon/H = M
|
||||
for(var/organ in H.internal_organs)
|
||||
var/obj/item/organ/O = organ
|
||||
O.setOrganDamage(0)
|
||||
M.updatehealth()
|
||||
|
||||
if(M.revive())
|
||||
M.emote("gasp")
|
||||
log_combat(M, M, "revived", src)
|
||||
@@ -875,7 +929,7 @@
|
||||
pH = 10.4
|
||||
|
||||
/datum/reagent/medicine/mannitol/on_mob_life(mob/living/carbon/C)
|
||||
C.adjustBrainLoss(-2*REM)
|
||||
C.adjustOrganLoss(ORGAN_SLOT_BRAIN, -2*REM)
|
||||
if(prob(10))
|
||||
C.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC)
|
||||
..()
|
||||
@@ -940,10 +994,10 @@
|
||||
|
||||
/datum/reagent/medicine/stimulants/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
ADD_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
L.add_movespeed_modifier(id, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
|
||||
/datum/reagent/medicine/stimulants/on_mob_end_metabolize(mob/living/L)
|
||||
REMOVE_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
L.remove_movespeed_modifier(id)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/stimulants/on_mob_life(mob/living/carbon/M)
|
||||
@@ -1130,7 +1184,7 @@
|
||||
M.adjustFireLoss(-5*REM, 0)
|
||||
M.adjustOxyLoss(-15, 0)
|
||||
M.adjustToxLoss(-5*REM, 0)
|
||||
M.adjustBrainLoss(-15*REM)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -15*REM)
|
||||
M.adjustCloneLoss(-3*REM, 0)
|
||||
M.adjustStaminaLoss(-20*REM,0)
|
||||
..()
|
||||
@@ -1148,19 +1202,19 @@
|
||||
pH = 11.8
|
||||
|
||||
/datum/reagent/medicine/neo_jelly/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustBruteLoss(-1.5*REM, 0)
|
||||
M.adjustFireLoss(-1.5*REM, 0)
|
||||
M.adjustOxyLoss(-1.5*REM, 0)
|
||||
M.adjustToxLoss(-1.5*REM, 0, TRUE) //heals TOXINLOVERs
|
||||
. = 1
|
||||
..()
|
||||
M.adjustBruteLoss(-1.5*REM, 0)
|
||||
M.adjustFireLoss(-1.5*REM, 0)
|
||||
M.adjustOxyLoss(-1.5*REM, 0)
|
||||
M.adjustToxLoss(-1.5*REM, 0, TRUE) //heals TOXINLOVERs
|
||||
. = 1
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/neo_jelly/overdose_process(mob/living/M)
|
||||
M.adjustOxyLoss(2.6*REM, 0)
|
||||
M.adjustBruteLoss(3.5*REM, 0)
|
||||
M.adjustFireLoss(3.5*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
M.adjustOxyLoss(2.6*REM, 0)
|
||||
M.adjustBruteLoss(3.5*REM, 0)
|
||||
M.adjustFireLoss(3.5*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/earthsblood //Created by ambrosia gaia plants
|
||||
name = "Earthsblood"
|
||||
@@ -1175,7 +1229,7 @@
|
||||
M.adjustFireLoss(-3 * REM, 0)
|
||||
M.adjustOxyLoss(-15 * REM, 0)
|
||||
M.adjustToxLoss(-3 * REM, 0, TRUE) //Heals TOXINLOVERS
|
||||
M.adjustBrainLoss(2 * REM, 150) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that!
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2 * REM, 150) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that!
|
||||
M.adjustCloneLoss(-1 * REM, 0)
|
||||
M.adjustStaminaLoss(-13 * REM, 0)
|
||||
M.jitteriness = min(max(0, M.jitteriness + 3), 30)
|
||||
@@ -1207,7 +1261,7 @@
|
||||
if (M.hallucination >= 5)
|
||||
M.hallucination -= 5
|
||||
if(prob(20))
|
||||
M.adjustBrainLoss(1*REM, 50)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1*REM, 50)
|
||||
M.adjustStaminaLoss(2.5*REM, 0)
|
||||
..()
|
||||
return TRUE
|
||||
@@ -1264,10 +1318,10 @@
|
||||
|
||||
/datum/reagent/medicine/changelinghaste/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
ADD_TRAIT(L, TRAIT_GOTTAGOREALLYFAST, id)
|
||||
L.add_movespeed_modifier(id, update=TRUE, priority=100, multiplicative_slowdown=-2, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
|
||||
/datum/reagent/medicine/changelinghaste/on_mob_end_metabolize(mob/living/L)
|
||||
REMOVE_TRAIT(L, TRAIT_GOTTAGOREALLYFAST, id)
|
||||
L.remove_movespeed_modifier(id)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/carbon/M)
|
||||
@@ -1287,10 +1341,12 @@
|
||||
|
||||
/datum/reagent/medicine/corazone/on_mob_metabolize(mob/living/M)
|
||||
..()
|
||||
ADD_TRAIT(M, TRAIT_STABLEHEART, id)
|
||||
ADD_TRAIT(M, TRAIT_STABLEHEART, type)
|
||||
ADD_TRAIT(M, TRAIT_STABLELIVER, type)
|
||||
|
||||
/datum/reagent/medicine/corazone/on_mob_end_metabolize(mob/living/M)
|
||||
REMOVE_TRAIT(M, TRAIT_STABLEHEART, id)
|
||||
REMOVE_TRAIT(M, TRAIT_STABLEHEART, type)
|
||||
REMOVE_TRAIT(M, TRAIT_STABLELIVER, type)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/muscle_stimulant
|
||||
@@ -1397,7 +1453,7 @@
|
||||
M.dizziness = max(0, M.dizziness-6)
|
||||
M.confused = max(0, M.confused-6)
|
||||
M.disgust = max(0, M.disgust-6)
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, M)
|
||||
var/datum/component/mood/mood = M.GetComponent(/datum/component/mood)
|
||||
if(mood.sanity <= SANITY_NEUTRAL) // only take effect if in negative sanity and then...
|
||||
mood.setSanity(min(mood.sanity+5, SANITY_NEUTRAL)) // set minimum to prevent unwanted spiking over neutral
|
||||
..()
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
/datum/reagent/blood
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"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, "bloodcolor" = BLOOD_COLOR_HUMAN, "blood_type"= null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
name = "Blood"
|
||||
id = "blood"
|
||||
color = "#C80000" // rgb: 200, 0, 0
|
||||
value = 1
|
||||
color = BLOOD_COLOR_HUMAN // rgb: 200, 0, 0
|
||||
description = "Blood from some creature."
|
||||
metabolization_rate = 5 //fast rate so it disappears fast.
|
||||
taste_description = "iron"
|
||||
taste_mult = 1.3
|
||||
@@ -27,27 +29,75 @@
|
||||
|
||||
if(iscarbon(L))
|
||||
var/mob/living/carbon/C = L
|
||||
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)
|
||||
else
|
||||
C.blood_volume = min(C.blood_volume + round(reac_volume, 0.1), BLOOD_VOLUME_MAXIMUM)
|
||||
var/blood_id = C.get_blood_id()
|
||||
if((blood_id == "blood" || blood_id == "jellyblood") && (method == INJECT || (method == INGEST && C.dna && C.dna.species && (DRINKSBLOOD in C.dna.species.species_traits))))
|
||||
C.blood_volume = min(C.blood_volume + round(reac_volume, 0.1), BLOOD_VOLUME_MAXIMUM * C.blood_ratio)
|
||||
// we don't care about bloodtype here, we're just refilling the mob
|
||||
|
||||
if(reac_volume >= 10 && istype(L))
|
||||
if(reac_volume >= 10 && istype(L) && method != INJECT)
|
||||
L.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"]))
|
||||
|
||||
/datum/reagent/blood/on_mob_life(mob/living/carbon/C) //Because lethals are preferred over stamina. damnifino.
|
||||
var/blood_id = C.get_blood_id()
|
||||
if((blood_id == "blood" || blood_id == "jellyblood"))
|
||||
if(!data || !(data["blood_type"] in get_safe_blood(C.dna.blood_type))) //we only care about bloodtype here because this is where the poisoning should be
|
||||
C.adjustToxLoss(rand(2,8)*REM, TRUE, TRUE) //forced to ensure people don't use it to gain beneficial toxin as slime person
|
||||
..()
|
||||
|
||||
/datum/reagent/blood/reaction_obj(obj/O, volume)
|
||||
if(volume >= 3 && istype(O))
|
||||
O.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"]))
|
||||
O.add_blood_DNA(data)
|
||||
|
||||
/datum/reagent/blood/reaction_turf(turf/T, reac_volume)//splash the blood all over the place
|
||||
if(!istype(T))
|
||||
return
|
||||
if(reac_volume < 3)
|
||||
return
|
||||
|
||||
var/obj/effect/decal/cleanable/blood/B = locate() in T //find some blood here
|
||||
if(!B)
|
||||
B = new(T)
|
||||
if(data["blood_DNA"])
|
||||
B.blood_DNA[data["blood_DNA"]] = data["blood_type"]
|
||||
if(!B.reagents)
|
||||
B.reagents.add_reagent(id, reac_volume)
|
||||
B.update_icon()
|
||||
|
||||
/datum/reagent/blood/on_new(list/data)
|
||||
if(istype(data))
|
||||
SetViruses(src, data)
|
||||
color = bloodtype_to_color(data["blood_type"])
|
||||
if(data["blood_type"] == "SY")
|
||||
name = "Synthetic Blood"
|
||||
taste_description = "oil"
|
||||
|
||||
if(data["blood_type"] == "X*")
|
||||
name = "Xenomorph Blood"
|
||||
taste_description = "acidic heresy"
|
||||
shot_glass_icon_state = "shotglassgreen"
|
||||
pH = 2.5
|
||||
|
||||
if(data["blood_type"] == "HF")
|
||||
name = "Hydraulic Blood"
|
||||
taste_description = "burnt oil"
|
||||
pH = 9.75
|
||||
|
||||
if(data["blood_type"] == "BUG")
|
||||
name = "Insect Blood"
|
||||
taste_description = "grease"
|
||||
pH = 7.25
|
||||
|
||||
if(data["blood_type"] == "L")
|
||||
name = "Lizard Blood"
|
||||
taste_description = "something spicy"
|
||||
pH = 6.85
|
||||
|
||||
|
||||
|
||||
/datum/reagent/blood/on_merge(list/mix_data)
|
||||
if(data && mix_data)
|
||||
if(data["blood_DNA"] != mix_data["blood_DNA"])
|
||||
data["cloneable"] = 0 //On mix, consider the genetic sampling unviable for pod cloning if the DNA sample doesn't match.
|
||||
data["cloneable"] = FALSE //On mix, consider the genetic sampling unviable for pod cloning if the DNA sample doesn't match.
|
||||
if(data["viruses"] || mix_data["viruses"])
|
||||
|
||||
var/list/mix1 = data["viruses"]
|
||||
@@ -77,27 +127,111 @@
|
||||
var/datum/disease/D = thing
|
||||
. += D
|
||||
|
||||
/datum/reagent/blood/reaction_turf(turf/T, reac_volume)//splash the blood all over the place
|
||||
if(!istype(T))
|
||||
return
|
||||
if(reac_volume < 3)
|
||||
return
|
||||
/datum/reagent/blood/synthetics
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"="REPLICATED", "bloodcolor" = BLOOD_COLOR_SYNTHETIC, "blood_type"="SY","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
name = "Synthetic Blood"
|
||||
id = "syntheticblood"
|
||||
taste_description = "oily"
|
||||
color = BLOOD_COLOR_SYNTHETIC // rgb: 11, 7, 48
|
||||
|
||||
var/obj/effect/decal/cleanable/blood/B = locate() in T //find some blood here
|
||||
if(!B)
|
||||
B = new(T)
|
||||
if(data["blood_DNA"])
|
||||
B.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"]))
|
||||
/datum/reagent/blood/lizard
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_LIZARD, "blood_type"="L","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
name = "Lizard Blood"
|
||||
id = "lizardblood"
|
||||
taste_description = "spicy"
|
||||
color = BLOOD_COLOR_LIZARD // rgb: 11, 7, 48
|
||||
pH = 6.85
|
||||
|
||||
/datum/reagent/blood/jellyblood
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_SLIME, "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 = BLOOD_COLOR_SLIME
|
||||
taste_description = "slime"
|
||||
taste_mult = 1.3
|
||||
pH = 4
|
||||
|
||||
/datum/reagent/blood/xenomorph
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_XENO, "blood_type"="X*","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
name = "Xenomorph Blood"
|
||||
id = "xenoblood"
|
||||
taste_description = "acidic heresy"
|
||||
color = BLOOD_COLOR_XENO // greenish yellow ooze
|
||||
shot_glass_icon_state = "shotglassgreen"
|
||||
pH = 2.5
|
||||
|
||||
/datum/reagent/blood/oil
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_OIL, "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.
|
||||
pH = 9.75
|
||||
|
||||
/datum/reagent/blood/insect
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_BUG, "blood_type"="BUG","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
name = "Insectoid Blood"
|
||||
id = "bugblood"
|
||||
taste_description = "waxy"
|
||||
color = BLOOD_COLOR_BUG // Bug colored, I guess.
|
||||
pH = 7.25
|
||||
|
||||
|
||||
/datum/reagent/blood/jellyblood/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(10))
|
||||
if(M.dna?.species?.exotic_bloodtype != "GEL")
|
||||
to_chat(M, "<span class='danger'>Your insides are burning!</span>")
|
||||
M.adjustToxLoss(rand(20,60)*REM, 0)
|
||||
. = 1
|
||||
else if(prob(40) && isjellyperson(M))
|
||||
M.heal_bodypart_damage(2*REM)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
/datum/reagent/liquidgibs
|
||||
name = "Liquid gibs"
|
||||
id = "liquidgibs"
|
||||
color = "#FF9966"
|
||||
color = BLOOD_COLOR_HUMAN
|
||||
description = "You don't even want to think about what's in here."
|
||||
taste_description = "gross iron"
|
||||
shot_glass_icon_state = "shotglassred"
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_HUMAN, "blood_type"= "O+","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
pH = 7.45
|
||||
|
||||
/datum/reagent/liquidgibs/xeno
|
||||
name = "Liquid xeno gibs"
|
||||
id = "liquidxenogibs"
|
||||
color = BLOOD_COLOR_XENO
|
||||
taste_description = "blended heresy"
|
||||
shot_glass_icon_state = "shotglassgreen"
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_XENO, "blood_type"="X*","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
pH = 2.5
|
||||
|
||||
/datum/reagent/liquidgibs/slime
|
||||
name = "Slime sludge"
|
||||
id = "liquidslimegibs"
|
||||
color = BLOOD_COLOR_SLIME
|
||||
taste_description = "slime"
|
||||
shot_glass_icon_state = "shotglassgreen"
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_SLIME, "blood_type"="GEL","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
pH = 4
|
||||
|
||||
/datum/reagent/liquidgibs/synth
|
||||
name = "Synthetic sludge"
|
||||
id = "liquidsyntheticgibs"
|
||||
color = BLOOD_COLOR_SYNTHETIC
|
||||
taste_description = "jellied plastic"
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_SYNTHETIC, "blood_type"="SY","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
|
||||
/datum/reagent/liquidgibs/oil
|
||||
name = "Hydraulic sludge"
|
||||
id = "liquidoilgibs"
|
||||
color = BLOOD_COLOR_OIL
|
||||
taste_description = "chunky burnt oil"
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_OIL, "blood_type"="HF","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
pH = 9.75
|
||||
|
||||
/datum/reagent/vaccine
|
||||
//data must contain virus type
|
||||
name = "Vaccine"
|
||||
@@ -296,7 +430,7 @@
|
||||
if(ishuman(M) && M.blood_volume < (BLOOD_VOLUME_NORMAL*M.blood_ratio))
|
||||
M.blood_volume += 3
|
||||
else // Will deal about 90 damage when 50 units are thrown
|
||||
M.adjustBrainLoss(3, 150)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150)
|
||||
M.adjustToxLoss(2, 0)
|
||||
M.adjustFireLoss(2, 0)
|
||||
M.adjustOxyLoss(2, 0)
|
||||
@@ -315,7 +449,7 @@
|
||||
M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
|
||||
M.adjustToxLoss(1, 0)
|
||||
M.adjustFireLoss(1, 0) //Hence the other damages... ain't I a bastard?
|
||||
M.adjustBrainLoss(5, 150)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5, 150)
|
||||
holder.remove_reagent(id, 1)
|
||||
pH = 0.1
|
||||
|
||||
@@ -370,12 +504,20 @@
|
||||
description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
|
||||
color = "#009CA8" // rgb: 0, 156, 168
|
||||
taste_description = "cherry" // by popular demand
|
||||
var/lube_kind = TURF_WET_LUBE ///What kind of slipperiness gets added to turfs.
|
||||
|
||||
/datum/reagent/lube/reaction_turf(turf/open/T, reac_volume)
|
||||
if (!istype(T))
|
||||
return
|
||||
if(reac_volume >= 1)
|
||||
T.MakeSlippery(TURF_WET_LUBE, 15 SECONDS, min(reac_volume * 2 SECONDS, 120))
|
||||
T.MakeSlippery(lube_kind, 15 SECONDS, min(reac_volume * 2 SECONDS, 120))
|
||||
|
||||
///Stronger kind of lube. Applies TURF_WET_SUPERLUBE.
|
||||
/datum/reagent/lube/superlube
|
||||
name = "Super Duper Lube"
|
||||
id = "superlube"
|
||||
description = "This \[REDACTED\] has been outlawed after the incident on \[DATA EXPUNGED\]."
|
||||
lube_kind = TURF_WET_SUPERLUBE
|
||||
|
||||
/datum/reagent/spraytan
|
||||
name = "Spray Tan"
|
||||
@@ -584,6 +726,30 @@
|
||||
race = /datum/species/android
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... artificial.</span>"
|
||||
|
||||
//Citadel Races
|
||||
/datum/reagent/mutationtoxin/mammal
|
||||
name = "Mammal Mutation Toxin"
|
||||
id = "mammalmutationtoxin"
|
||||
description = "A glowing toxin."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/mammal
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... fluffier.</span>"
|
||||
|
||||
/datum/reagent/mutationtoxin/insect
|
||||
name = "Insect Mutation Toxin"
|
||||
id = "insectmutationtoxin"
|
||||
description = "A glowing toxin."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/insect
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... attracted to dark, moist areas.</span>"
|
||||
|
||||
/datum/reagent/mutationtoxin/xenoperson
|
||||
name = "Xeno-Hybrid Mutation Toxin"
|
||||
id = "xenopersonmutationtoxin"
|
||||
description = "A glowing toxin."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/xeno
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... oddly longing for the Queen.</span>" //sadly, not the British one.
|
||||
|
||||
//BLACKLISTED RACES
|
||||
/datum/reagent/mutationtoxin/skeleton
|
||||
@@ -805,7 +971,7 @@
|
||||
step(M, pick(GLOB.cardinals))
|
||||
if(prob(5))
|
||||
M.emote(pick("twitch","drool","moan"))
|
||||
M.adjustBrainLoss(1)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1)
|
||||
..()
|
||||
|
||||
/datum/reagent/sulfur
|
||||
@@ -946,12 +1112,12 @@
|
||||
reagent_state = SOLID
|
||||
taste_description = "iron"
|
||||
pH = 6
|
||||
|
||||
overdose_threshold = 30
|
||||
color = "#c2391d"
|
||||
|
||||
/datum/reagent/iron/on_mob_life(mob/living/carbon/C)
|
||||
if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio))
|
||||
C.blood_volume += 0.5
|
||||
C.blood_volume += 0.01 //we'll have synthetics from medbay.
|
||||
..()
|
||||
|
||||
/datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
@@ -960,6 +1126,17 @@
|
||||
M.reagents.add_reagent("toxin", reac_volume)
|
||||
..()
|
||||
|
||||
/datum/reagent/iron/overdose_start(mob/living/M)
|
||||
to_chat(M, "<span class='userdanger'>You start feeling your guts twisting painfully!</span>")
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/overdose, name)
|
||||
|
||||
/datum/reagent/iron/overdose_process(mob/living/carbon/C)
|
||||
if(prob(20))
|
||||
var/obj/item/organ/liver/L = C.getorganslot(ORGAN_SLOT_LIVER)
|
||||
if (istype(L))
|
||||
C.applyLiverDamage(2) //mild until the fabled med rework comes out. the organ damage galore
|
||||
..()
|
||||
|
||||
/datum/reagent/gold
|
||||
name = "Gold"
|
||||
id = "gold"
|
||||
@@ -1076,17 +1253,19 @@
|
||||
pH = 5.5
|
||||
|
||||
/datum/reagent/space_cleaner/reaction_obj(obj/O, reac_volume)
|
||||
if(istype(O, /obj/effect/decal/cleanable))
|
||||
if(istype(O, /obj/effect/decal/cleanable) || istype(O, /obj/item/projectile/bullet/reusable/foam_dart) || istype(O, /obj/item/ammo_casing/caseless/foam_dart))
|
||||
qdel(O)
|
||||
else
|
||||
if(O)
|
||||
O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
|
||||
SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
O.clean_blood()
|
||||
|
||||
/datum/reagent/space_cleaner/reaction_turf(turf/T, reac_volume)
|
||||
if(reac_volume >= 1)
|
||||
T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
SEND_SIGNAL(T, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
|
||||
SEND_SIGNAL(T, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
T.clean_blood()
|
||||
for(var/obj/effect/decal/cleanable/C in T)
|
||||
qdel(C)
|
||||
|
||||
@@ -1104,26 +1283,33 @@
|
||||
H.lip_style = null
|
||||
H.update_body()
|
||||
for(var/obj/item/I in C.held_items)
|
||||
SEND_SIGNAL(I, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
|
||||
SEND_SIGNAL(I, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
I.clean_blood()
|
||||
if(C.wear_mask)
|
||||
if(SEND_SIGNAL(C.wear_mask, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
|
||||
SEND_SIGNAL(C.wear_mask, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
if(C.wear_mask.clean_blood())
|
||||
C.update_inv_wear_mask()
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(H.head)
|
||||
if(SEND_SIGNAL(H.head, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
|
||||
SEND_SIGNAL(H.head, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
if(H.head.clean_blood())
|
||||
H.update_inv_head()
|
||||
if(H.wear_suit)
|
||||
if(SEND_SIGNAL(H.wear_suit, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
|
||||
SEND_SIGNAL(H.wear_suit, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
if(H.wear_suit.clean_blood())
|
||||
H.update_inv_wear_suit()
|
||||
else if(H.w_uniform)
|
||||
if(SEND_SIGNAL(H.w_uniform, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
|
||||
SEND_SIGNAL(H.w_uniform, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
if(H.w_uniform.clean_blood())
|
||||
H.update_inv_w_uniform()
|
||||
if(H.shoes)
|
||||
if(SEND_SIGNAL(H.shoes, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD))
|
||||
SEND_SIGNAL(H.shoes, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
if(H.shoes.clean_blood())
|
||||
H.update_inv_shoes()
|
||||
H.wash_cream()
|
||||
SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
|
||||
SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK)
|
||||
M.clean_blood()
|
||||
|
||||
/datum/reagent/space_cleaner/ez_clean
|
||||
name = "EZ Clean"
|
||||
@@ -1172,7 +1358,7 @@
|
||||
/datum/reagent/impedrezene/on_mob_life(mob/living/carbon/M)
|
||||
M.jitteriness = max(M.jitteriness-5,0)
|
||||
if(prob(80))
|
||||
M.adjustBrainLoss(2*REM)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2*REM)
|
||||
if(prob(50))
|
||||
M.drowsyness = max(M.drowsyness, 3)
|
||||
if(prob(10))
|
||||
@@ -1222,7 +1408,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
|
||||
pH = 11
|
||||
|
||||
/datum/reagent/foaming_agent// Metal foaming agent. This is lithium hydride. Add other recipes (e.g. LiH + H2O -> LiOH + H2) eventually.
|
||||
name = "Foaming agent"
|
||||
@@ -1231,7 +1417,7 @@
|
||||
reagent_state = SOLID
|
||||
color = "#664B63" // rgb: 102, 75, 99
|
||||
taste_description = "metal"
|
||||
pH = 12.5
|
||||
pH = 11.5
|
||||
|
||||
/datum/reagent/smart_foaming_agent //Smart foaming agent. Functions similarly to metal foam, but conforms to walls.
|
||||
name = "Smart foaming agent"
|
||||
@@ -1352,10 +1538,10 @@
|
||||
|
||||
/datum/reagent/nitryl/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
ADD_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
L.add_movespeed_modifier(id, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
|
||||
/datum/reagent/nitryl/on_mob_end_metabolize(mob/living/L)
|
||||
REMOVE_TRAIT(L, TRAIT_GOTTAGOFAST, id)
|
||||
L.remove_movespeed_modifier(id)
|
||||
..()
|
||||
|
||||
/////////////////////////Coloured Crayon Powder////////////////////////////
|
||||
@@ -1519,20 +1705,6 @@
|
||||
taste_description = "metal"
|
||||
pH = 4.5
|
||||
|
||||
/datum/reagent/carpet
|
||||
name = "Carpet"
|
||||
id = "carpet"
|
||||
description = "For those that need a more creative way to roll out a red carpet."
|
||||
reagent_state = LIQUID
|
||||
color = "#b51d05"
|
||||
taste_description = "carpet" // Your tounge feels furry.
|
||||
|
||||
/datum/reagent/carpet/reaction_turf(turf/T, reac_volume)
|
||||
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
|
||||
var/turf/open/floor/F = T
|
||||
F.PlaceOnTop(/turf/open/floor/carpet)
|
||||
..()
|
||||
|
||||
/datum/reagent/bromine
|
||||
name = "Bromine"
|
||||
id = "bromine"
|
||||
@@ -1686,6 +1858,143 @@
|
||||
qdel(O)
|
||||
new /obj/item/clothing/shoes/galoshes/dry(t_loc)
|
||||
|
||||
// Liquid Carpets
|
||||
/datum/reagent/carpet
|
||||
name = "Liquid Carpet"
|
||||
id = "carpet"
|
||||
description = "For those that need a more creative way to roll out a carpet."
|
||||
reagent_state = LIQUID
|
||||
color = "#b51d05"
|
||||
taste_description = "carpet" // Your tounge feels furry.
|
||||
|
||||
/datum/reagent/carpet/reaction_turf(turf/T, reac_volume)
|
||||
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
|
||||
var/turf/open/floor/F = T
|
||||
F.PlaceOnTop(/turf/open/floor/carpet)
|
||||
..()
|
||||
|
||||
/datum/reagent/carpet/black
|
||||
name = "Liquid Black Carpet"
|
||||
id = "blackcarpet"
|
||||
color = "#363636"
|
||||
|
||||
/datum/reagent/carpet/black/reaction_turf(turf/T, reac_volume)
|
||||
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
|
||||
var/turf/open/floor/F = T
|
||||
F.PlaceOnTop(/turf/open/floor/carpet/black)
|
||||
..()
|
||||
|
||||
/datum/reagent/carpet/blackred
|
||||
name = "Liquid Red Black Carpet"
|
||||
id = "blackredcarpet"
|
||||
color = "#342125"
|
||||
|
||||
/datum/reagent/carpet/blackred/reaction_turf(turf/T, reac_volume)
|
||||
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
|
||||
var/turf/open/floor/F = T
|
||||
F.PlaceOnTop(/turf/open/floor/carpet/blackred)
|
||||
..()
|
||||
|
||||
/datum/reagent/carpet/monochrome
|
||||
name = "Liquid Monochrome Carpet"
|
||||
id = "monochromecarpet"
|
||||
color = "#b4b4b4"
|
||||
|
||||
/datum/reagent/carpet/monochrome/reaction_turf(turf/T, reac_volume)
|
||||
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
|
||||
var/turf/open/floor/F = T
|
||||
F.PlaceOnTop(/turf/open/floor/carpet/monochrome)
|
||||
..()
|
||||
|
||||
/datum/reagent/carpet/blue
|
||||
name = "Liquid Blue Carpet"
|
||||
id = "bluecarpet"
|
||||
color = "#1256ff"
|
||||
|
||||
/datum/reagent/carpet/blue/reaction_turf(turf/T, reac_volume)
|
||||
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
|
||||
var/turf/open/floor/F = T
|
||||
F.PlaceOnTop(/turf/open/floor/carpet/blue)
|
||||
..()
|
||||
|
||||
/datum/reagent/carpet/cyan
|
||||
name = "Liquid Cyan Carpet"
|
||||
id = "cyancarpet"
|
||||
color = "#3acfb9"
|
||||
|
||||
/datum/reagent/carpet/cyan/reaction_turf(turf/T, reac_volume)
|
||||
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
|
||||
var/turf/open/floor/F = T
|
||||
F.PlaceOnTop(/turf/open/floor/carpet/cyan)
|
||||
..()
|
||||
|
||||
/datum/reagent/carpet/green
|
||||
name = "Liquid Green Carpet"
|
||||
id = "greencarpet"
|
||||
color = "#619b62"
|
||||
|
||||
/datum/reagent/carpet/green/reaction_turf(turf/T, reac_volume)
|
||||
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
|
||||
var/turf/open/floor/F = T
|
||||
F.PlaceOnTop(/turf/open/floor/carpet/green)
|
||||
..()
|
||||
|
||||
/datum/reagent/carpet/orange
|
||||
name = "Liquid Orange Carpet"
|
||||
id = "orangecarpet"
|
||||
color = "#cc7900"
|
||||
|
||||
/datum/reagent/carpet/orange/reaction_turf(turf/T, reac_volume)
|
||||
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
|
||||
var/turf/open/floor/F = T
|
||||
F.PlaceOnTop(/turf/open/floor/carpet/orange)
|
||||
..()
|
||||
|
||||
/datum/reagent/carpet/purple
|
||||
name = "Liquid Purple Carpet"
|
||||
id = "purplecarpet"
|
||||
color = "#6d3392"
|
||||
|
||||
/datum/reagent/carpet/purple/reaction_turf(turf/T, reac_volume)
|
||||
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
|
||||
var/turf/open/floor/F = T
|
||||
F.PlaceOnTop(/turf/open/floor/carpet/purple)
|
||||
..()
|
||||
|
||||
/datum/reagent/carpet/red
|
||||
name = "Liquid Red Carpet"
|
||||
id = "redcarpet"
|
||||
color = "#871515"
|
||||
|
||||
/datum/reagent/carpet/red/reaction_turf(turf/T, reac_volume)
|
||||
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
|
||||
var/turf/open/floor/F = T
|
||||
F.PlaceOnTop(/turf/open/floor/carpet/red)
|
||||
..()
|
||||
|
||||
/datum/reagent/carpet/royalblack
|
||||
name = "Liquid Royal Black Carpet"
|
||||
id = "royalblackcarpet"
|
||||
color = "#483d05"
|
||||
|
||||
/datum/reagent/carpet/royalblack/reaction_turf(turf/T, reac_volume)
|
||||
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
|
||||
var/turf/open/floor/F = T
|
||||
F.PlaceOnTop(/turf/open/floor/carpet/royalblack)
|
||||
..()
|
||||
|
||||
/datum/reagent/carpet/royalblue
|
||||
name = "Liquid Royal Blue Carpet"
|
||||
id = "royalbluecarpet"
|
||||
color = "#24227e"
|
||||
|
||||
/datum/reagent/carpet/royalblue/reaction_turf(turf/T, reac_volume)
|
||||
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
|
||||
var/turf/open/floor/F = T
|
||||
F.PlaceOnTop(/turf/open/floor/carpet/royalblue)
|
||||
..()
|
||||
|
||||
|
||||
// Virology virus food chems.
|
||||
|
||||
/datum/reagent/toxin/mutagen/mutagenvirusfood
|
||||
@@ -1965,24 +2274,6 @@
|
||||
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"
|
||||
description = "A patented chemical forumula by Doctor Ronald Hyatt that is guaranteed to bring maximum GROWTH and LENGTH to your penis, today!"
|
||||
color = "#888888"
|
||||
taste_description = "chinese dragon powder"
|
||||
metabolization_rate = INFINITY //So it instantly removes all of itself. Don't want to put strain on the system.
|
||||
|
||||
/datum/reagent/penis_enlargement/on_mob_life(mob/living/carbon/C)
|
||||
var/obj/item/organ/genital/penis/P = C.getorganslot(ORGAN_SLOT_PENIS)
|
||||
if(P)
|
||||
var/added_length = round(volume/30,0.01) //Every 30u gives an extra inch. Rounded to the nearest 0.01 so float fuckery doesn't occur with the division by 30.
|
||||
if(added_length >= 0.20) //Only add the length if it's greater than or equal to 0.2. This is to prevent people from smoking the reagents and causing the penis to update constantly.
|
||||
P.length += added_length
|
||||
P.update()
|
||||
..()
|
||||
|
||||
/datum/reagent/changeling_string
|
||||
name = "UNKNOWN"
|
||||
id = "changeling_sting_real"
|
||||
@@ -1992,29 +2283,25 @@
|
||||
can_synth = FALSE
|
||||
var/datum/dna/original_dna
|
||||
var/reagent_ticks = 0
|
||||
invisible = TRUE
|
||||
chemical_flags = REAGENT_INVISIBLE
|
||||
|
||||
/datum/reagent/changeling_string/on_mob_metabolize(mob/living/carbon/C)
|
||||
if(C && C.dna && data["desired_dna"])
|
||||
if(ishuman(C) && C.dna && data["desired_dna"])
|
||||
original_dna = new C.dna.type
|
||||
C.dna.copy_dna(original_dna)
|
||||
var/datum/dna/new_dna = data["desired_dna"]
|
||||
new_dna.copy_dna(C.dna)
|
||||
new_dna.transfer_identity(C, TRUE)
|
||||
C.real_name = new_dna.real_name
|
||||
C.updateappearance(mutcolor_update=1)
|
||||
C.update_body()
|
||||
C.updateappearance(mutcolor_update = TRUE)
|
||||
C.domutcheck()
|
||||
C.regenerate_icons()
|
||||
..()
|
||||
|
||||
/datum/reagent/changeling_string/on_mob_end_metabolize(mob/living/carbon/C)
|
||||
if(original_dna)
|
||||
original_dna.copy_dna(C.dna)
|
||||
original_dna.transfer_identity(C, TRUE)
|
||||
C.real_name = original_dna.real_name
|
||||
C.updateappearance(mutcolor_update=1)
|
||||
C.update_body()
|
||||
C.updateappearance(mutcolor_update = TRUE)
|
||||
C.domutcheck()
|
||||
C.regenerate_icons()
|
||||
..()
|
||||
|
||||
/datum/reagent/changeling_string/Destroy()
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
/datum/reagent/nitroglycerin
|
||||
name = "Nitroglycerin"
|
||||
id = "nitroglycerin"
|
||||
value = 5
|
||||
description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
|
||||
color = "#808080" // rgb: 128, 128, 128
|
||||
taste_description = "oil"
|
||||
@@ -29,6 +30,7 @@
|
||||
description = "Keeps unstable chemicals stable. This does not work on everything."
|
||||
reagent_state = LIQUID
|
||||
color = "#FFFF00"
|
||||
value = 3
|
||||
taste_description = "metal"
|
||||
|
||||
/datum/reagent/clf3
|
||||
@@ -89,6 +91,7 @@
|
||||
description = "Sucks everything into the detonation point."
|
||||
reagent_state = LIQUID
|
||||
color = "#210021"
|
||||
value = 10
|
||||
taste_description = "compressed bitterness"
|
||||
|
||||
/datum/reagent/blackpowder
|
||||
@@ -97,6 +100,7 @@
|
||||
description = "Explodes. Violently."
|
||||
reagent_state = LIQUID
|
||||
color = "#000000"
|
||||
value = 5
|
||||
metabolization_rate = 0.05
|
||||
taste_description = "salt"
|
||||
|
||||
@@ -164,6 +168,7 @@
|
||||
description = "Very flammable."
|
||||
reagent_state = LIQUID
|
||||
color = "#FA00AF"
|
||||
value = 1
|
||||
taste_description = "burning"
|
||||
|
||||
/datum/reagent/napalm/on_mob_life(mob/living/carbon/M)
|
||||
|
||||
@@ -471,7 +471,7 @@
|
||||
toxpwr = 0
|
||||
|
||||
/datum/reagent/toxin/fentanyl/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustBrainLoss(3*REM, 150)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3*REM, 150)
|
||||
if(M.toxloss <= 60)
|
||||
M.adjustToxLoss(1*REM, 0)
|
||||
if(current_cycle >= 18)
|
||||
@@ -950,3 +950,20 @@
|
||||
to_chat(M, "<span class='warning'>Your missing arm aches from wherever you left it.</span>")
|
||||
M.emote("sigh")
|
||||
return ..()
|
||||
|
||||
/datum/reagent/toxin/brainhurtingjuice //oof ouch
|
||||
name = "Brain Hurting Juice"
|
||||
id = "brainhurtingjuice"
|
||||
color = "#AAAAAA77" //RGBA: 170, 170, 170, 77
|
||||
toxpwr = 0
|
||||
taste_description = "brain hurting"
|
||||
metabolization_rate = 5
|
||||
|
||||
/datum/reagent/toxin/brainhurtingjuice/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(50))
|
||||
M.gain_trauma_type(BRAIN_TRAUMA_MILD)
|
||||
else if(prob(50))
|
||||
M.gain_trauma_type(BRAIN_TRAUMA_SEVERE)
|
||||
else
|
||||
M.gain_trauma_type(BRAIN_TRAUMA_SPECIAL)
|
||||
..()
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
var/RateUpLim = 10 // Optimal/max rate possible if all conditions are perfect
|
||||
var/FermiChem = FALSE // If the chemical uses the Fermichem reaction mechanics//If the chemical uses the Fermichem reaction mechanics
|
||||
var/FermiExplode = FALSE // If the chemical explodes in a special way
|
||||
var/clear_conversion //bitflags for clear conversions; REACTION_CLEAR_IMPURE or REACTION_CLEAR_INVERSE
|
||||
var/PurityMin = 0.15 //If purity is below 0.15, it explodes too. Set to 0 to disable this.
|
||||
|
||||
|
||||
|
||||
@@ -68,6 +68,44 @@
|
||||
results = list("synthflesh" = 3)
|
||||
required_reagents = list("blood" = 1, "carbon" = 1, "styptic_powder" = 1)
|
||||
|
||||
/datum/chemical_reaction/synthtissue
|
||||
name = "Synthtissue"
|
||||
id = "synthtissue"
|
||||
results = list("synthtissue" = 5)
|
||||
required_reagents = list("synthflesh" = 1)
|
||||
required_catalysts = list("nutriment" = 0.1)
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 305 // Lower area of bell curve for determining heat based rate reactions
|
||||
OptimalTempMax = 315 // Upper end for above
|
||||
ExplodeTemp = 1050 // Temperature at which reaction explodes
|
||||
OptimalpHMin = 8.5 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase)
|
||||
OptimalpHMax = 9.5 // Higest value for above
|
||||
ReactpHLim = 2 // How far out pH wil react, giving impurity place (Exponential phase)
|
||||
CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst)
|
||||
CurveSharpT = 1 // How sharp the temperature exponential curve is (to the power of value)
|
||||
CurveSharppH = 2.5 // How sharp the pH exponential curve is (to the power of value)
|
||||
ThermicConstant = 0.01 // Temperature change per 1u produced
|
||||
HIonRelease = 0.015 // pH change per 1u reaction (inverse for some reason)
|
||||
RateUpLim = 0.05 // Optimal/max rate possible if all conditions are perfect
|
||||
FermiChem = TRUE // If the chemical uses the Fermichem reaction mechanics
|
||||
PurityMin = 0
|
||||
|
||||
/datum/chemical_reaction/synthtissue/FermiCreate(datum/reagents/holder, added_volume, added_purity)
|
||||
var/datum/reagent/synthtissue/St = holder.has_reagent("synthtissue")
|
||||
var/datum/reagent/N = holder.has_reagent("nutriment")
|
||||
if(!St)
|
||||
return
|
||||
if(holder.chem_temp > 320)
|
||||
var/temp_ratio = 1-(330 - holder.chem_temp)/10
|
||||
holder.remove_reagent(src.id, added_volume*temp_ratio)
|
||||
if(St.purity < 1)
|
||||
St.volume *= St.purity
|
||||
St.purity = 1
|
||||
var/amount = CLAMP(0.002, 0, N.volume)
|
||||
N.volume -= amount
|
||||
St.data["grown_volume"] = St.data["grown_volume"] + added_volume
|
||||
St.name = "[initial(St.name)] [round(St.data["grown_volume"], 0.1)]u colony"
|
||||
|
||||
/datum/chemical_reaction/styptic_powder
|
||||
name = "Styptic Powder"
|
||||
id = "styptic_powder"
|
||||
@@ -245,6 +283,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"
|
||||
|
||||
@@ -494,12 +494,6 @@
|
||||
results = list("acetone" = 3)
|
||||
required_reagents = list("oil" = 1, "welding_fuel" = 1, "oxygen" = 1)
|
||||
|
||||
/datum/chemical_reaction/carpet
|
||||
name = "carpet"
|
||||
id = "carpet"
|
||||
results = list("carpet" = 2)
|
||||
required_reagents = list("space_drugs" = 1, "blood" = 1)
|
||||
|
||||
/datum/chemical_reaction/oil
|
||||
name = "Oil"
|
||||
id = "oil"
|
||||
@@ -641,3 +635,77 @@
|
||||
results = list("shadowmutationtoxin" = 1)
|
||||
required_reagents = list("liquid_dark_matter" = 5, "synaptizine" = 10, "oculine" = 10, "stablemutationtoxin" = 1)
|
||||
required_temp = 600
|
||||
|
||||
// Liquid Carpets
|
||||
|
||||
/datum/chemical_reaction/carpet
|
||||
name = "carpet"
|
||||
id = "carpet"
|
||||
results = list("carpet" = 2)
|
||||
required_reagents = list("space_drugs" = 1, "blood" = 1)
|
||||
|
||||
/datum/chemical_reaction/carpet/black
|
||||
name = "liquid black carpet"
|
||||
id = "blackcarpet"
|
||||
results = list("blackcarpet" = 2)
|
||||
required_reagents = list("carpet" = 1, "carbon" = 1)
|
||||
|
||||
/datum/chemical_reaction/carpet/blackred
|
||||
name = "liquid red black carpet"
|
||||
id = "blackredcarpet"
|
||||
results = list("blackredcarpet" = 2)
|
||||
required_reagents = list("carpet" = 1, "charcoal" = 1)
|
||||
|
||||
/datum/chemical_reaction/carpet/monochrome
|
||||
name = "liquid monochrome carpet"
|
||||
id = "monochromecarpet"
|
||||
results = list("monochromecarpet" = 2)
|
||||
required_reagents = list("carpet" = 1, "oil" = 1)
|
||||
|
||||
/datum/chemical_reaction/carpet/blue
|
||||
name = "liquid blue carpet"
|
||||
id = "bluecarpet"
|
||||
results = list("bluecarpet" = 2)
|
||||
required_reagents = list("carpet" = 1, "tonic" = 1)
|
||||
|
||||
/datum/chemical_reaction/carpet/cyan
|
||||
name = "liquid cyan carpet"
|
||||
id = "cyancarpet"
|
||||
results = list("cyancarpet" = 2)
|
||||
required_reagents = list("carpet" = 1, "ice" = 1)
|
||||
|
||||
/datum/chemical_reaction/carpet/green
|
||||
name = "liquid green carpet"
|
||||
id = "greencarpet"
|
||||
results = list("greencarpet" = 2)
|
||||
required_reagents = list("carpet" = 1, "sacid" = 1)
|
||||
|
||||
/datum/chemical_reaction/carpet/orange
|
||||
name = "liquid orange carpet"
|
||||
id = "orangecarpet"
|
||||
results = list("orangecarpet" = 2)
|
||||
required_reagents = list("carpet" = 1, "orangejuice" = 1)
|
||||
|
||||
/datum/chemical_reaction/carpet/purple
|
||||
name = "liquid purple carpet"
|
||||
id = "purplecarpet"
|
||||
results = list("purplecarpet" = 2)
|
||||
required_reagents = list("carpet" = 1, "stable_plasma" = 1)
|
||||
|
||||
/datum/chemical_reaction/carpet/red
|
||||
name = "liquid red carpet"
|
||||
id = "redcarpet"
|
||||
results = list("redcarpet" = 2)
|
||||
required_reagents = list("carpet" = 1, "welding_fuel" = 1)
|
||||
|
||||
/datum/chemical_reaction/carpet/royalblack
|
||||
name = "liquid royal black carpet"
|
||||
id = "royalblackcarpet"
|
||||
results = list("royalblackcarpet" = 2)
|
||||
required_reagents = list("carpet" = 1, "blackpepper" = 1)
|
||||
|
||||
/datum/chemical_reaction/carpet/royalblue
|
||||
name = "liquid royal blue carpet"
|
||||
id = "royalbluecarpet"
|
||||
results = list("royalbluecarpet" = 2)
|
||||
required_reagents = list("carpet" = 1, "clonexadone" = 1)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
create_reagents(volume, reagent_flags)
|
||||
if(spawned_disease)
|
||||
var/datum/disease/F = new spawned_disease()
|
||||
var/list/data = list("viruses"= list(F))
|
||||
var/list/data = list("blood_DNA" = "UNKNOWN DNA", "blood_type" = "SY","viruses"= list(F))
|
||||
reagents.add_reagent("blood", disease_amount, data)
|
||||
|
||||
add_initial_reagents()
|
||||
|
||||
@@ -4,13 +4,16 @@
|
||||
icon = 'icons/obj/bloodpack.dmi'
|
||||
icon_state = "bloodpack"
|
||||
volume = 200
|
||||
reagent_flags = DRAINABLE
|
||||
var/blood_type = null
|
||||
var/labelled = 0
|
||||
var/color_to_apply = "#FFFFFF"
|
||||
var/mutable_appearance/fill_overlay
|
||||
|
||||
/obj/item/reagent_containers/blood/Initialize()
|
||||
. = ..()
|
||||
if(blood_type != null)
|
||||
reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
|
||||
reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_colour"=color, "blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
|
||||
update_icon()
|
||||
|
||||
/obj/item/reagent_containers/blood/on_reagent_change(changetype)
|
||||
@@ -18,6 +21,7 @@
|
||||
var/datum/reagent/blood/B = reagents.has_reagent("blood")
|
||||
if(B && B.data && B.data["blood_type"])
|
||||
blood_type = B.data["blood_type"]
|
||||
color_to_apply = bloodtype_to_color(blood_type)
|
||||
else
|
||||
blood_type = null
|
||||
update_pack_name()
|
||||
@@ -45,7 +49,7 @@
|
||||
|
||||
/obj/item/reagent_containers/blood/random/Initialize()
|
||||
icon_state = "bloodpack"
|
||||
blood_type = pick("A+", "A-", "B+", "B-", "O+", "O-", "L")
|
||||
blood_type = pick("A+", "A-", "B+", "B-", "O+", "O-", "L", "SY", "HF", "GEL", "BUG")
|
||||
return ..()
|
||||
|
||||
/obj/item/reagent_containers/blood/APlus
|
||||
@@ -72,6 +76,18 @@
|
||||
/obj/item/reagent_containers/blood/universal
|
||||
blood_type = "U"
|
||||
|
||||
/obj/item/reagent_containers/blood/synthetics
|
||||
blood_type = "SY"
|
||||
|
||||
/obj/item/reagent_containers/blood/oilblood
|
||||
blood_type = "HF"
|
||||
|
||||
/obj/item/reagent_containers/blood/jellyblood
|
||||
blood_type = "GEL"
|
||||
|
||||
/obj/item/reagent_containers/blood/insect
|
||||
blood_type = "BUG"
|
||||
|
||||
/obj/item/reagent_containers/blood/attackby(obj/item/I, mob/user, params)
|
||||
if (istype(I, /obj/item/pen) || istype(I, /obj/item/toy/crayon))
|
||||
if(!user.is_literate())
|
||||
|
||||
@@ -404,3 +404,25 @@
|
||||
/obj/item/reagent_containers/glass/bottle/bromine
|
||||
name = "bromine bottle"
|
||||
list_reagents = list("bromine" = 30)
|
||||
|
||||
//Lewd Stuff
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/crocin
|
||||
name = "Crocin bottle"
|
||||
desc = "A bottle of mild aphrodisiac. Increases libido."
|
||||
list_reagents = list("aphro" = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/hexacrocin
|
||||
name = "Hexacrocin bottle"
|
||||
desc = "A bottle of strong aphrodisiac. Increases libido."
|
||||
list_reagents = list("aphro+" = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/camphor
|
||||
name = "Camphor bottle"
|
||||
desc = "A bottle of mild anaphrodisiac. Reduces libido."
|
||||
list_reagents = list("anaphro" = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/hexacamphor
|
||||
name = "Hexacamphor bottle"
|
||||
desc = "A bottle of strong anaphrodisiac. Reduces libido."
|
||||
list_reagents = list("anaphro+" = 30)
|
||||
@@ -89,7 +89,7 @@
|
||||
reagents.clear_reagents()
|
||||
|
||||
/obj/item/reagent_containers/glass/attackby(obj/item/I, mob/user, params)
|
||||
var/hotness = I.is_hot()
|
||||
var/hotness = I.get_temperature()
|
||||
if(hotness && reagents)
|
||||
reagents.expose_temperature(hotness)
|
||||
to_chat(user, "<span class='notice'>You heat [name] with [I]!</span>")
|
||||
|
||||
@@ -196,3 +196,318 @@
|
||||
volume = 250
|
||||
list_reagents = list("holywater" = 150, "tiresolution" = 50, "dizzysolution" = 50)
|
||||
amount_per_transfer_from_this = 50
|
||||
|
||||
#define HYPO_SPRAY 0
|
||||
#define HYPO_INJECT 1
|
||||
|
||||
#define WAIT_SPRAY 25
|
||||
#define WAIT_INJECT 25
|
||||
#define SELF_SPRAY 15
|
||||
#define SELF_INJECT 15
|
||||
|
||||
#define DELUXE_WAIT_SPRAY 20
|
||||
#define DELUXE_WAIT_INJECT 20
|
||||
#define DELUXE_SELF_SPRAY 10
|
||||
#define DELUXE_SELF_INJECT 10
|
||||
|
||||
#define COMBAT_WAIT_SPRAY 0
|
||||
#define COMBAT_WAIT_INJECT 0
|
||||
#define COMBAT_SELF_SPRAY 0
|
||||
#define COMBAT_SELF_INJECT 0
|
||||
|
||||
//A vial-loaded hypospray. Cartridge-based!
|
||||
/obj/item/hypospray/mkii
|
||||
name = "hypospray mk.II"
|
||||
icon_state = "hypo2"
|
||||
icon = 'icons/obj/syringe.dmi'
|
||||
desc = "A new development from DeForest Medical, this hypospray takes 30-unit vials as the drug supply for easy swapping."
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/list/allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/tiny, /obj/item/reagent_containers/glass/bottle/vial/small)
|
||||
var/mode = HYPO_INJECT
|
||||
var/obj/item/reagent_containers/glass/bottle/vial/vial
|
||||
var/start_vial = /obj/item/reagent_containers/glass/bottle/vial/small
|
||||
var/spawnwithvial = TRUE
|
||||
var/inject_wait = WAIT_INJECT
|
||||
var/spray_wait = WAIT_SPRAY
|
||||
var/spray_self = SELF_SPRAY
|
||||
var/inject_self = SELF_INJECT
|
||||
var/quickload = FALSE
|
||||
var/penetrates = FALSE
|
||||
|
||||
/obj/item/hypospray/mkii/brute
|
||||
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine
|
||||
|
||||
/obj/item/hypospray/mkii/toxin
|
||||
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin
|
||||
|
||||
/obj/item/hypospray/mkii/oxygen
|
||||
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin
|
||||
|
||||
/obj/item/hypospray/mkii/burn
|
||||
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane
|
||||
|
||||
/obj/item/hypospray/mkii/tricord
|
||||
start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord
|
||||
|
||||
/obj/item/hypospray/mkii/enlarge
|
||||
spawnwithvial = FALSE
|
||||
|
||||
/obj/item/hypospray/mkii/CMO
|
||||
name = "hypospray mk.II deluxe"
|
||||
allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/tiny, /obj/item/reagent_containers/glass/bottle/vial/small, /obj/item/reagent_containers/glass/bottle/vial/large)
|
||||
icon_state = "cmo2"
|
||||
desc = "The Deluxe Hypospray can take larger-size vials. It also acts faster and delivers more reagents per spray."
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
start_vial = /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/CMO
|
||||
inject_wait = DELUXE_WAIT_INJECT
|
||||
spray_wait = DELUXE_WAIT_SPRAY
|
||||
spray_self = DELUXE_SELF_SPRAY
|
||||
inject_self = DELUXE_SELF_INJECT
|
||||
|
||||
/obj/item/hypospray/mkii/CMO/combat
|
||||
name = "combat hypospray mk.II"
|
||||
desc = "A combat-ready deluxe hypospray that acts almost instantly. It can be tactically reloaded by using a vial on it."
|
||||
icon_state = "combat2"
|
||||
start_vial = /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat
|
||||
inject_wait = COMBAT_WAIT_INJECT
|
||||
spray_wait = COMBAT_WAIT_SPRAY
|
||||
spray_self = COMBAT_SELF_SPRAY
|
||||
inject_self = COMBAT_SELF_INJECT
|
||||
quickload = TRUE
|
||||
penetrates = TRUE
|
||||
|
||||
/obj/item/hypospray/mkii/Initialize()
|
||||
. = ..()
|
||||
if(!spawnwithvial)
|
||||
update_icon()
|
||||
return
|
||||
if(start_vial)
|
||||
vial = new start_vial
|
||||
update_icon()
|
||||
|
||||
/obj/item/hypospray/mkii/update_icon()
|
||||
..()
|
||||
icon_state = "[initial(icon_state)][vial ? "" : "-e"]"
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.update_inv_hands()
|
||||
return
|
||||
|
||||
/obj/item/hypospray/mkii/examine(mob/user)
|
||||
. = ..()
|
||||
if(vial)
|
||||
to_chat(user, "[vial] has [vial.reagents.total_volume]u remaining.")
|
||||
else
|
||||
to_chat(user, "It has no vial loaded in.")
|
||||
to_chat(user, "[src] is set to [mode ? "Inject" : "Spray"] contents on application.")
|
||||
|
||||
/obj/item/hypospray/mkii/proc/unload_hypo(obj/item/I, mob/user)
|
||||
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
|
||||
var/obj/item/reagent_containers/glass/bottle/vial/V = I
|
||||
V.forceMove(user.loc)
|
||||
user.put_in_hands(V)
|
||||
to_chat(user, "<span class='notice'>You remove [vial] from [src].</span>")
|
||||
vial = null
|
||||
update_icon()
|
||||
playsound(loc, 'sound/weapons/empty.ogg', 50, 1)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>This hypo isn't loaded!</span>")
|
||||
return
|
||||
|
||||
/obj/item/hypospray/mkii/attackby(obj/item/I, mob/living/user)
|
||||
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial) && vial != null))
|
||||
if(!quickload)
|
||||
to_chat(user, "<span class='warning'>[src] can not hold more than one vial!</span>")
|
||||
return FALSE
|
||||
unload_hypo(vial, user)
|
||||
if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
|
||||
var/obj/item/reagent_containers/glass/bottle/vial/V = I
|
||||
if(!is_type_in_list(V, allowed_containers))
|
||||
to_chat(user, "<span class='notice'>[src] doesn't accept this type of vial.</span>")
|
||||
return FALSE
|
||||
if(!user.transferItemToLoc(V,src))
|
||||
return FALSE
|
||||
vial = V
|
||||
user.visible_message("<span class='notice'>[user] has loaded a vial into [src].</span>","<span class='notice'>You have loaded [vial] into [src].</span>")
|
||||
update_icon()
|
||||
playsound(loc, 'sound/weapons/autoguninsert.ogg', 35, 1)
|
||||
return TRUE
|
||||
else
|
||||
to_chat(user, "<span class='notice'>This doesn't fit in [src].</span>")
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
/obj/item/hypospray/mkii/AltClick(mob/user)
|
||||
if(vial)
|
||||
vial.attack_self(user)
|
||||
|
||||
// Gunna allow this for now, still really don't approve - Pooj
|
||||
/obj/item/hypospray/mkii/emag_act(mob/user)
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
to_chat(user, "[src] happens to be already overcharged.")
|
||||
return
|
||||
inject_wait = COMBAT_WAIT_INJECT
|
||||
spray_wait = COMBAT_WAIT_SPRAY
|
||||
spray_self = COMBAT_SELF_INJECT
|
||||
inject_self = COMBAT_SELF_SPRAY
|
||||
penetrates = TRUE
|
||||
to_chat(user, "You overcharge [src]'s control circuit.")
|
||||
obj_flags |= EMAGGED
|
||||
return TRUE
|
||||
|
||||
/obj/item/hypospray/mkii/attack_hand(mob/user)
|
||||
. = ..() //Don't bother changing this or removing it from containers will break.
|
||||
|
||||
/obj/item/hypospray/mkii/attack(obj/item/I, mob/user, params)
|
||||
return
|
||||
|
||||
/obj/item/hypospray/mkii/afterattack(atom/target, mob/user, proximity)
|
||||
if(!vial)
|
||||
return
|
||||
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
if(!ismob(target))
|
||||
return
|
||||
|
||||
var/mob/living/L
|
||||
if(isliving(target))
|
||||
L = target
|
||||
if(!penetrates && !L.can_inject(user, 1)) //This check appears another four times, since otherwise the penetrating sprays will break in do_mob.
|
||||
return
|
||||
|
||||
if(!L && !target.is_injectable()) //only checks on non-living mobs, due to how can_inject() handles
|
||||
to_chat(user, "<span class='warning'>You cannot directly fill [target]!</span>")
|
||||
return
|
||||
|
||||
if(target.reagents.total_volume >= target.reagents.maximum_volume)
|
||||
to_chat(user, "<span class='notice'>[target] is full.</span>")
|
||||
return
|
||||
|
||||
if(ishuman(L))
|
||||
var/obj/item/bodypart/affecting = L.get_bodypart(check_zone(user.zone_selected))
|
||||
if(!affecting)
|
||||
to_chat(user, "<span class='warning'>The limb is missing!</span>")
|
||||
return
|
||||
if(affecting.status != BODYPART_ORGANIC)
|
||||
to_chat(user, "<span class='notice'>Medicine won't work on a robotic limb!</span>")
|
||||
return
|
||||
|
||||
var/contained = vial.reagents.log_list()
|
||||
log_combat(user, L, "attemped to inject", src, addition="which had [contained]")
|
||||
//Always log attemped injections for admins
|
||||
if(vial != null)
|
||||
switch(mode)
|
||||
if(HYPO_INJECT)
|
||||
if(L) //living mob
|
||||
if(L != user)
|
||||
L.visible_message("<span class='danger'>[user] is trying to inject [L] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] is trying to inject [L] with [src]!</span>")
|
||||
if(!do_mob(user, L, inject_wait))
|
||||
return
|
||||
if(!penetrates && !L.can_inject(user, 1))
|
||||
return
|
||||
if(!vial.reagents.total_volume)
|
||||
return
|
||||
if(L.reagents.total_volume >= L.reagents.maximum_volume)
|
||||
return
|
||||
L.visible_message("<span class='danger'>[user] uses the [src] on [L]!</span>", \
|
||||
"<span class='userdanger'>[user] uses the [src] on [L]!</span>")
|
||||
else
|
||||
if(!do_mob(user, L, inject_self))
|
||||
return
|
||||
if(!penetrates && !L.can_inject(user, 1))
|
||||
return
|
||||
if(!vial.reagents.total_volume)
|
||||
return
|
||||
if(L.reagents.total_volume >= L.reagents.maximum_volume)
|
||||
return
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [src.mode])</font>")
|
||||
L.log_message("<font color='orange'>applied [src] to themselves ([contained]).</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
|
||||
var/fraction = min(vial.amount_per_transfer_from_this/vial.reagents.total_volume, 1)
|
||||
vial.reagents.reaction(L, INJECT, fraction)
|
||||
vial.reagents.trans_to(target, vial.amount_per_transfer_from_this)
|
||||
if(vial.amount_per_transfer_from_this >= 15)
|
||||
playsound(loc,'sound/items/hypospray_long.ogg',50, 1, -1)
|
||||
if(vial.amount_per_transfer_from_this < 15)
|
||||
playsound(loc, pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1)
|
||||
to_chat(user, "<span class='notice'>You inject [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units.</span>")
|
||||
|
||||
if(HYPO_SPRAY)
|
||||
if(L) //living mob
|
||||
if(L != user)
|
||||
L.visible_message("<span class='danger'>[user] is trying to spray [L] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] is trying to spray [L] with [src]!</span>")
|
||||
if(!do_mob(user, L, spray_wait))
|
||||
return
|
||||
if(!penetrates && !L.can_inject(user, 1))
|
||||
return
|
||||
if(!vial.reagents.total_volume)
|
||||
return
|
||||
if(L.reagents.total_volume >= L.reagents.maximum_volume)
|
||||
return
|
||||
L.visible_message("<span class='danger'>[user] uses the [src] on [L]!</span>", \
|
||||
"<span class='userdanger'>[user] uses the [src] on [L]!</span>")
|
||||
else
|
||||
if(!do_mob(user, L, spray_self))
|
||||
return
|
||||
if(!penetrates && !L.can_inject(user, 1))
|
||||
return
|
||||
if(!vial.reagents.total_volume)
|
||||
return
|
||||
if(L.reagents.total_volume >= L.reagents.maximum_volume)
|
||||
return
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [src.mode])</font>")
|
||||
L.log_message("<font color='orange'>applied [src] to themselves ([contained]).</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
var/fraction = min(vial.amount_per_transfer_from_this/vial.reagents.total_volume, 1)
|
||||
vial.reagents.reaction(L, PATCH, fraction)
|
||||
vial.reagents.trans_to(target, vial.amount_per_transfer_from_this)
|
||||
if(vial.amount_per_transfer_from_this >= 15)
|
||||
playsound(loc,'sound/items/hypospray_long.ogg',50, 1, -1)
|
||||
if(vial.amount_per_transfer_from_this < 15)
|
||||
playsound(loc, pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1)
|
||||
to_chat(user, "<span class='notice'>You spray [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] doesn't work here!</span>")
|
||||
return
|
||||
|
||||
/obj/item/hypospray/mkii/attack_self(mob/living/user)
|
||||
if(user)
|
||||
if(user.incapacitated())
|
||||
return
|
||||
else if(!vial)
|
||||
to_chat(user, "This Hypo needs to be loaded first!")
|
||||
return
|
||||
else
|
||||
unload_hypo(vial,user)
|
||||
|
||||
/obj/item/hypospray/mkii/verb/modes()
|
||||
set name = "Toggle Application Mode"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
var/mob/M = usr
|
||||
switch(mode)
|
||||
if(HYPO_SPRAY)
|
||||
mode = HYPO_INJECT
|
||||
to_chat(M, "[src] is now set to inject contents on application.")
|
||||
if(HYPO_INJECT)
|
||||
mode = HYPO_SPRAY
|
||||
to_chat(M, "[src] is now set to spray contents on application.")
|
||||
|
||||
#undef HYPO_SPRAY
|
||||
#undef HYPO_INJECT
|
||||
#undef WAIT_SPRAY
|
||||
#undef WAIT_INJECT
|
||||
#undef SELF_SPRAY
|
||||
#undef SELF_INJECT
|
||||
#undef DELUXE_WAIT_SPRAY
|
||||
#undef DELUXE_WAIT_INJECT
|
||||
#undef DELUXE_SELF_SPRAY
|
||||
#undef DELUXE_SELF_INJECT
|
||||
#undef COMBAT_WAIT_SPRAY
|
||||
#undef COMBAT_WAIT_INJECT
|
||||
#undef COMBAT_SELF_SPRAY
|
||||
#undef COMBAT_SELF_INJECT
|
||||
|
||||
@@ -0,0 +1,199 @@
|
||||
//hypovials used with the MkII hypospray. See hypospray.dm.
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial
|
||||
name = "broken hypovial"
|
||||
desc = "A hypovial compatible with most hyposprays."
|
||||
icon_state = "hypovial"
|
||||
spillable = FALSE
|
||||
var/comes_with = list() //Easy way of doing this.
|
||||
volume = 10
|
||||
possible_transfer_amounts = list(1,2,5,10)
|
||||
obj_flags = UNIQUE_RENAME
|
||||
unique_reskin = list("hypovial" = "hypovial",
|
||||
"red hypovial" = "hypovial-b",
|
||||
"blue hypovial" = "hypovial-d",
|
||||
"green hypovial" = "hypovial-a",
|
||||
"orange hypovial" = "hypovial-k",
|
||||
"purple hypovial" = "hypovial-p",
|
||||
"black hypovial" = "hypovial-t",
|
||||
"pink hypovial" = "hypovial-pink"
|
||||
)
|
||||
always_reskinnable = TRUE
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/Initialize()
|
||||
. = ..()
|
||||
if(!icon_state)
|
||||
icon_state = "hypovial"
|
||||
for(var/R in comes_with)
|
||||
reagents.add_reagent(R,comes_with[R])
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/on_reagent_change()
|
||||
update_icon()
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/update_icon()
|
||||
cut_overlays()
|
||||
if(reagents.total_volume)
|
||||
var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "hypovial10")
|
||||
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
switch(percent)
|
||||
if(0 to 9)
|
||||
filling.icon_state = "hypovial10"
|
||||
if(10 to 29)
|
||||
filling.icon_state = "hypovial25"
|
||||
if(30 to 49)
|
||||
filling.icon_state = "hypovial50"
|
||||
if(50 to 85)
|
||||
filling.icon_state = "hypovial75"
|
||||
if(86 to INFINITY)
|
||||
filling.icon_state = "hypovial100"
|
||||
|
||||
filling.color = mix_color_from_reagents(reagents.reagent_list)
|
||||
add_overlay(filling)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/tiny
|
||||
name = "small hypovial"
|
||||
//Shouldn't be possible to get this without adminbuse
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/small
|
||||
name = "hypovial"
|
||||
volume = 60
|
||||
possible_transfer_amounts = list(5,10)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/small/bluespace
|
||||
volume = 120
|
||||
possible_transfer_amounts = list(5,10)
|
||||
name = "bluespace hypovial"
|
||||
icon_state = "hypovialbs"
|
||||
unique_reskin = null
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large
|
||||
name = "large hypovial"
|
||||
desc = "A large hypovial, for deluxe hypospray models."
|
||||
icon_state = "hypoviallarge"
|
||||
volume = 120
|
||||
possible_transfer_amounts = list(5,10,15,20)
|
||||
unique_reskin = list("large hypovial" = "hypoviallarge",
|
||||
"large red hypovial" = "hypoviallarge-b",
|
||||
"large blue hypovial" = "hypoviallarge-d",
|
||||
"large green hypovial" = "hypoviallarge-a",
|
||||
"large orange hypovial" = "hypoviallarge-k",
|
||||
"large purple hypovial" = "hypoviallarge-p",
|
||||
"large black hypovial" = "hypoviallarge-t"
|
||||
)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large/update_icon()
|
||||
cut_overlays()
|
||||
if(reagents.total_volume)
|
||||
var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "hypoviallarge10")
|
||||
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
switch(percent)
|
||||
if(0 to 9)
|
||||
filling.icon_state = "hypoviallarge10"
|
||||
if(10 to 29)
|
||||
filling.icon_state = "hypoviallarge25"
|
||||
if(30 to 49)
|
||||
filling.icon_state = "hypoviallarge50"
|
||||
if(50 to 85)
|
||||
filling.icon_state = "hypoviallarge75"
|
||||
if(86 to INFINITY)
|
||||
filling.icon_state = "hypoviallarge100"
|
||||
|
||||
filling.color = mix_color_from_reagents(reagents.reagent_list)
|
||||
add_overlay(filling)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large/bluespace
|
||||
possible_transfer_amounts = list(5,10,15,20)
|
||||
name = "bluespace large hypovial"
|
||||
volume = 240
|
||||
icon_state = "hypoviallargebs"
|
||||
unique_reskin = null
|
||||
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine
|
||||
name = "red hypovial (bicaridine)"
|
||||
icon_state = "hypovial-b"
|
||||
comes_with = list("bicaridine" = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin
|
||||
name = "green hypovial (Anti-Tox)"
|
||||
icon_state = "hypovial-a"
|
||||
comes_with = list("antitoxin" = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane
|
||||
name = "orange hypovial (kelotane)"
|
||||
icon_state = "hypovial-k"
|
||||
comes_with = list("kelotane" = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin
|
||||
name = "blue hypovial (dexalin)"
|
||||
icon_state = "hypovial-d"
|
||||
comes_with = list("dexalin" = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord
|
||||
name = "hypovial (tricordrazine)"
|
||||
icon_state = "hypovial"
|
||||
comes_with = list("tricordrazine" = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/breastreduction
|
||||
name = "pink hypovial (breast treatment)"
|
||||
icon_state = "hypovial-pink"
|
||||
comes_with = list("BEsmaller_hypo" = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/penisreduction
|
||||
name = "pink hypovial (penis treatment)"
|
||||
icon_state = "hypovial-pink"
|
||||
comes_with = list("PEsmaller_hypo" = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/CMO
|
||||
name = "deluxe hypovial"
|
||||
icon_state = "hypoviallarge-cmos"
|
||||
comes_with = list("omnizine" = 20, "leporazine" = 20, "atropine" = 20)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/bicaridine
|
||||
name = "large red hypovial (bicaridine)"
|
||||
icon_state = "hypoviallarge-b"
|
||||
comes_with = list("bicaridine" = 60)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/antitoxin
|
||||
name = "large green hypovial (anti-tox)"
|
||||
icon_state = "hypoviallarge-a"
|
||||
comes_with = list("antitoxin" = 60)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/kelotane
|
||||
name = "large orange hypovial (kelotane)"
|
||||
icon_state = "hypoviallarge-k"
|
||||
comes_with = list("kelotane" = 60)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/dexalin
|
||||
name = "large blue hypovial (dexalin)"
|
||||
icon_state = "hypoviallarge-d"
|
||||
comes_with = list("dexalin" = 60)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/charcoal
|
||||
name = "large black hypovial (charcoal)"
|
||||
icon_state = "hypoviallarge-t"
|
||||
comes_with = list("charcoal" = 60)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/tricord
|
||||
name = "large hypovial (tricord)"
|
||||
icon_state = "hypoviallarge"
|
||||
comes_with = list("tricordrazine" = 60)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/salglu
|
||||
name = "large green hypovial (salglu)"
|
||||
icon_state = "hypoviallarge-a"
|
||||
comes_with = list("salglu_solution" = 60)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/synthflesh
|
||||
name = "large orange hypovial (synthflesh)"
|
||||
icon_state = "hypoviallarge-k"
|
||||
comes_with = list("synthflesh" = 60)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/combat
|
||||
name = "combat hypovial"
|
||||
icon_state = "hypoviallarge-t"
|
||||
comes_with = list("epinephrine" = 3, "omnizine" = 19, "leporazine" = 19, "atropine" = 19) //Epinephrine's main effect here is to kill suff damage, so we don't need much given atropine
|
||||
@@ -19,8 +19,8 @@
|
||||
var/can_fill_from_container = TRUE
|
||||
var/apply_type = PATCH
|
||||
var/apply_method = "spray"
|
||||
var/self_delay = 30
|
||||
var/squirt_mode = 0
|
||||
var/self_delay = 3 SECONDS
|
||||
var/squirt_mode = FALSE
|
||||
var/squirt_amount = 5
|
||||
|
||||
/obj/item/reagent_containers/medspray/attack_self(mob/user)
|
||||
@@ -31,40 +31,51 @@
|
||||
amount_per_transfer_from_this = initial(amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'>You will now apply the medspray's contents in [squirt_mode ? "short bursts":"extended sprays"]. You'll now use [amount_per_transfer_from_this] units per use.</span>")
|
||||
|
||||
/obj/item/reagent_containers/medspray/attack(mob/M, mob/user, def_zone)
|
||||
/obj/item/reagent_containers/medspray/attack(mob/living/L, mob/user, def_zone)
|
||||
if(!reagents || !reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[src] is empty!</span>")
|
||||
return
|
||||
|
||||
if(M == user)
|
||||
M.visible_message("<span class='notice'>[user] attempts to [apply_method] [src] on [user.p_them()]self.</span>")
|
||||
if(ishuman(L))
|
||||
var/obj/item/bodypart/affecting = L.get_bodypart(check_zone(user.zone_selected))
|
||||
if(!affecting)
|
||||
to_chat(user, "<span class='warning'>The limb is missing!</span>")
|
||||
return
|
||||
if(!L.can_inject(user, TRUE, user.zone_selected, FALSE, TRUE)) //stopped by clothing, like patches
|
||||
return
|
||||
if(affecting.status != BODYPART_ORGANIC)
|
||||
to_chat(user, "<span class='notice'>Medicine won't work on a robotic limb!</span>")
|
||||
return
|
||||
|
||||
if(L == user)
|
||||
L.visible_message("<span class='notice'>[user] attempts to [apply_method] [src] on [user.p_them()]self.</span>")
|
||||
if(self_delay)
|
||||
if(!do_mob(user, M, self_delay))
|
||||
if(!do_mob(user, L, self_delay))
|
||||
return
|
||||
if(!reagents || !reagents.total_volume)
|
||||
return
|
||||
to_chat(M, "<span class='notice'>You [apply_method] yourself with [src].</span>")
|
||||
to_chat(L, "<span class='notice'>You [apply_method] yourself with [src].</span>")
|
||||
|
||||
else
|
||||
log_combat(user, M, "attempted to apply", src, reagents.log_list())
|
||||
M.visible_message("<span class='danger'>[user] attempts to [apply_method] [src] on [M].</span>", \
|
||||
"<span class='userdanger'>[user] attempts to [apply_method] [src] on [M].</span>")
|
||||
if(!do_mob(user, M))
|
||||
log_combat(user, L, "attempted to apply", src, reagents.log_list())
|
||||
L.visible_message("<span class='danger'>[user] attempts to [apply_method] [src] on [L].</span>", \
|
||||
"<span class='userdanger'>[user] attempts to [apply_method] [src] on [L].</span>")
|
||||
if(!do_mob(user, L))
|
||||
return
|
||||
if(!reagents || !reagents.total_volume)
|
||||
return
|
||||
M.visible_message("<span class='danger'>[user] [apply_method]s [M] down with [src].</span>", \
|
||||
"<span class='userdanger'>[user] [apply_method]s [M] down with [src].</span>")
|
||||
L.visible_message("<span class='danger'>[user] [apply_method]s [L] down with [src].</span>", \
|
||||
"<span class='userdanger'>[user] [apply_method]s [L] down with [src].</span>")
|
||||
|
||||
if(!reagents || !reagents.total_volume)
|
||||
return
|
||||
|
||||
else
|
||||
log_combat(user, M, "applied", src, reagents.log_list())
|
||||
log_combat(user, L, "applied", src, reagents.log_list())
|
||||
playsound(src, 'sound/effects/spray2.ogg', 50, 1, -6)
|
||||
var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1)
|
||||
reagents.reaction(M, apply_type, fraction)
|
||||
reagents.trans_to(M, amount_per_transfer_from_this)
|
||||
reagents.reaction(L, apply_type, fraction)
|
||||
reagents.trans_to(L, amount_per_transfer_from_this)
|
||||
return
|
||||
|
||||
/obj/item/reagent_containers/medspray/styptic
|
||||
|
||||
@@ -186,7 +186,6 @@
|
||||
/obj/item/reagent_containers/pill/antirad_plus
|
||||
name = "prussian blue pill"
|
||||
desc = "Used to treat heavy radition poisoning."
|
||||
icon = 'modular_citadel/icons/obj/modularpills.dmi'
|
||||
icon_state = "prussian_blue"
|
||||
list_reagents = list("prussian_blue" = 25, "water" = 10)
|
||||
roundstart = 1
|
||||
@@ -194,7 +193,6 @@
|
||||
/obj/item/reagent_containers/pill/mutarad
|
||||
name = "radiation treatment deluxe pill"
|
||||
desc = "Used to treat heavy radition poisoning and genetic defects."
|
||||
icon = 'modular_citadel/icons/obj/modularpills.dmi'
|
||||
icon_state = "anit_rad_fixgene"
|
||||
list_reagents = list("prussian_blue" = 15, "potass_iodide" = 15, "mutadone" = 15, "water" = 5)
|
||||
roundstart = 1
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
to_chat(user, "<span class='notice'>You switch the nozzle setting to [stream_mode ? "\"stream\"":"\"spray\""]. You'll now use [amount_per_transfer_from_this] units per use.</span>")
|
||||
|
||||
/obj/item/reagent_containers/spray/attackby(obj/item/I, mob/user, params)
|
||||
var/hotness = I.is_hot()
|
||||
var/hotness = I.get_temperature()
|
||||
if(hotness && reagents)
|
||||
reagents.expose_temperature(hotness)
|
||||
to_chat(user, "<span class='notice'>You heat [name] with [I]!</span>")
|
||||
@@ -223,6 +223,15 @@
|
||||
/obj/item/reagent_containers/spray/waterflower/attack_self(mob/user) //Don't allow changing how much the flower sprays
|
||||
return
|
||||
|
||||
///Subtype used for the lavaland clown ruin.
|
||||
/obj/item/reagent_containers/spray/waterflower/superlube
|
||||
name = "clown flower"
|
||||
desc = "A delightly devilish flower... you got a feeling where this is going."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "clownflower"
|
||||
volume = 30
|
||||
list_reagents = list("superlube" = 30)
|
||||
|
||||
/obj/item/reagent_containers/spray/waterflower/cyborg
|
||||
reagent_flags = NONE
|
||||
volume = 100
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
|
||||
|
||||
to_chat(user, "<span class='notice'>You fill [src] with [trans] units of the solution. It now contains [reagents.total_volume] units.</span>")
|
||||
if (reagents.total_volume >= reagents.maximum_volume)
|
||||
if (round(reagents.total_volume, 0.1) >= reagents.maximum_volume)
|
||||
mode=!mode
|
||||
update_icon()
|
||||
|
||||
@@ -307,7 +307,7 @@
|
||||
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
|
||||
|
||||
to_chat(user, "<span class='notice'>You soak the [src] with [trans] units of the solution. It now contains [reagents.total_volume] units.</span>")
|
||||
if (reagents.total_volume >= reagents.maximum_volume)
|
||||
if (round(reagents.total_volume,1) >= reagents.maximum_volume)
|
||||
mode=!mode
|
||||
update_icon()
|
||||
|
||||
@@ -323,8 +323,9 @@
|
||||
|
||||
rounded_vol = "empty"
|
||||
if(reagents && reagents.total_volume)
|
||||
if(volume/reagents.total_volume == 1)
|
||||
if(volume/round(reagents.total_volume, 1) == 1)
|
||||
rounded_vol="full"
|
||||
mode = SYRINGE_INJECT
|
||||
|
||||
icon_state = "[rounded_vol]"
|
||||
item_state = "syringe_[rounded_vol]"
|
||||
|
||||
@@ -39,6 +39,10 @@
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
///////////////
|
||||
//Water Tanks//
|
||||
///////////////
|
||||
|
||||
/obj/structure/reagent_dispensers/watertank
|
||||
name = "water tank"
|
||||
desc = "A water tank."
|
||||
@@ -57,12 +61,52 @@
|
||||
reagent_id = "firefighting_foam"
|
||||
tank_volume = 500
|
||||
|
||||
/obj/structure/reagent_dispensers/water_cooler
|
||||
name = "liquid cooler"
|
||||
desc = "A machine that dispenses liquid to drink."
|
||||
icon = 'icons/obj/vending.dmi'
|
||||
icon_state = "water_cooler"
|
||||
anchored = TRUE
|
||||
tank_volume = 500
|
||||
var/paper_cups = 25 //Paper cups left from the cooler
|
||||
|
||||
/obj/structure/reagent_dispensers/water_cooler/examine(mob/user)
|
||||
..()
|
||||
if (paper_cups > 1)
|
||||
to_chat(user, "There are [paper_cups] paper cups left.")
|
||||
else if (paper_cups == 1)
|
||||
to_chat(user, "There is one paper cup left.")
|
||||
else
|
||||
to_chat(user, "There are no paper cups left.")
|
||||
|
||||
/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/living/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(!paper_cups)
|
||||
to_chat(user, "<span class='warning'>There aren't any cups left!</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] takes a cup from [src].</span>", "<span class='notice'>You take a paper cup from [src].</span>")
|
||||
var/obj/item/reagent_containers/food/drinks/sillycup/S = new(get_turf(src))
|
||||
user.put_in_hands(S)
|
||||
paper_cups--
|
||||
|
||||
//////////////
|
||||
//Fuel Tanks//
|
||||
//////////////
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank
|
||||
name = "fuel tank"
|
||||
desc = "A tank full of industrial welding fuel. Do not consume."
|
||||
icon_state = "fuel"
|
||||
reagent_id = "welding_fuel"
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/high //Unused - Good for ghost roles
|
||||
name = "high-capacity fuel tank"
|
||||
desc = "A now illegal tank, full of highly pressurized industrial welding fuel. Do not consume or have a open flame close to this tank."
|
||||
icon_state = "fuel_high"
|
||||
tank_volume = 3000
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/boom()
|
||||
explosion(get_turf(src), 0, 1, 5, flame_range = 5)
|
||||
qdel(src)
|
||||
@@ -117,6 +161,9 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
///////////////////
|
||||
//Misc Dispenders//
|
||||
///////////////////
|
||||
|
||||
/obj/structure/reagent_dispensers/peppertank
|
||||
name = "pepper spray refiller"
|
||||
@@ -131,36 +178,24 @@
|
||||
if(prob(1))
|
||||
desc = "IT'S PEPPER TIME, BITCH!"
|
||||
|
||||
|
||||
/obj/structure/reagent_dispensers/water_cooler
|
||||
name = "liquid cooler"
|
||||
desc = "A machine that dispenses liquid to drink."
|
||||
icon = 'icons/obj/vending.dmi'
|
||||
icon_state = "water_cooler"
|
||||
/obj/structure/reagent_dispensers/virusfood
|
||||
name = "virus food dispenser"
|
||||
desc = "A dispenser of low-potency virus mutagenic."
|
||||
icon_state = "virus_food"
|
||||
anchored = TRUE
|
||||
tank_volume = 500
|
||||
var/paper_cups = 25 //Paper cups left from the cooler
|
||||
density = FALSE
|
||||
reagent_id = "virusfood"
|
||||
|
||||
/obj/structure/reagent_dispensers/water_cooler/examine(mob/user)
|
||||
..()
|
||||
if (paper_cups > 1)
|
||||
to_chat(user, "There are [paper_cups] paper cups left.")
|
||||
else if (paper_cups == 1)
|
||||
to_chat(user, "There is one paper cup left.")
|
||||
else
|
||||
to_chat(user, "There are no paper cups left.")
|
||||
/obj/structure/reagent_dispensers/cooking_oil
|
||||
name = "vat of cooking oil"
|
||||
desc = "A huge metal vat with a tap on the front. Filled with cooking oil for use in frying food."
|
||||
icon_state = "vat"
|
||||
anchored = TRUE
|
||||
reagent_id = "cooking_oil"
|
||||
|
||||
/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/living/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(!paper_cups)
|
||||
to_chat(user, "<span class='warning'>There aren't any cups left!</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] takes a cup from [src].</span>", "<span class='notice'>You take a paper cup from [src].</span>")
|
||||
var/obj/item/reagent_containers/food/drinks/sillycup/S = new(get_turf(src))
|
||||
user.put_in_hands(S)
|
||||
paper_cups--
|
||||
////////
|
||||
//Kegs//
|
||||
////////
|
||||
|
||||
/obj/structure/reagent_dispensers/beerkeg
|
||||
name = "beer keg"
|
||||
@@ -173,19 +208,47 @@
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/reagent_dispensers/keg
|
||||
name = "keg"
|
||||
desc = "A keg."
|
||||
icon = 'modular_citadel/icons/obj/objects.dmi'
|
||||
icon_state = "keg"
|
||||
reagent_id = "water"
|
||||
|
||||
/obj/structure/reagent_dispensers/virusfood
|
||||
name = "virus food dispenser"
|
||||
desc = "A dispenser of low-potency virus mutagenic."
|
||||
icon_state = "virus_food"
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
reagent_id = "virusfood"
|
||||
/obj/structure/reagent_dispensers/keg/mead
|
||||
name = "keg of mead"
|
||||
desc = "A keg of mead."
|
||||
icon_state = "orangekeg"
|
||||
reagent_id = "mead"
|
||||
|
||||
/obj/structure/reagent_dispensers/keg/aphro
|
||||
name = "keg of aphrodisiac"
|
||||
desc = "A keg of aphrodisiac."
|
||||
icon_state = "pinkkeg"
|
||||
reagent_id = "aphro"
|
||||
tank_volume = 150
|
||||
|
||||
/obj/structure/reagent_dispensers/cooking_oil
|
||||
name = "vat of cooking oil"
|
||||
desc = "A huge metal vat with a tap on the front. Filled with cooking oil for use in frying food."
|
||||
icon_state = "vat"
|
||||
anchored = TRUE
|
||||
reagent_id = "cooking_oil"
|
||||
/obj/structure/reagent_dispensers/keg/aphro/strong
|
||||
name = "keg of strong aphrodisiac"
|
||||
desc = "A keg of strong and addictive aphrodisiac."
|
||||
reagent_id = "aphro+"
|
||||
tank_volume = 120
|
||||
|
||||
/obj/structure/reagent_dispensers/keg/milk
|
||||
name = "keg of milk"
|
||||
desc = "It's not quite what you were hoping for."
|
||||
icon_state = "whitekeg"
|
||||
reagent_id = "milk"
|
||||
|
||||
/obj/structure/reagent_dispensers/keg/semen
|
||||
name = "keg of semen"
|
||||
desc = "Dear lord, where did this even come from?"
|
||||
icon_state = "whitekeg"
|
||||
reagent_id = "semen"
|
||||
|
||||
/obj/structure/reagent_dispensers/keg/gargle
|
||||
name = "keg of pan galactic gargleblaster"
|
||||
desc = "A keg of... wow that's a long name."
|
||||
icon_state = "bluekeg"
|
||||
reagent_id = "gargleblaster"
|
||||
tank_volume = 100
|
||||
Reference in New Issue
Block a user