Jfc that's a lot of work!
This commit is contained in:
@@ -332,11 +332,11 @@
|
||||
//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")
|
||||
if(R.impure_chem && R.impure_chem != /datum/reagent/impure/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")
|
||||
if(R.inverse_chem && R.impure_chem != /datum/reagent/impure/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>":"")] "
|
||||
|
||||
|
||||
@@ -11,13 +11,13 @@
|
||||
|
||||
for(var/path in paths)
|
||||
var/datum/reagent/D = new path()
|
||||
GLOB.chemical_reagents_list[D.id] = D
|
||||
GLOB.chemical_reagents_list[path] = D
|
||||
|
||||
/proc/build_chemical_reactions_list()
|
||||
//Chemical Reactions - Initialises all /datum/chemical_reaction into a list
|
||||
// It is filtered into multiple lists within a list.
|
||||
// For example:
|
||||
// chemical_reaction_list["plasma"] is a list of all reactions relating to plasma
|
||||
// chemical_reaction_list[/datum/reagent/toxin/plasma] is a list of all reactions relating to plasma
|
||||
|
||||
if(GLOB.chemical_reactions_list)
|
||||
return
|
||||
@@ -32,14 +32,11 @@
|
||||
var/datum/chemical_reaction/D = new path()
|
||||
var/list/reaction_ids = list()
|
||||
|
||||
if(!D.id)
|
||||
continue
|
||||
|
||||
if(D.required_reagents && D.required_reagents.len)
|
||||
for(var/reaction in D.required_reagents)
|
||||
reaction_ids += reaction
|
||||
|
||||
// Create filters based on each reagent id in the required reagents list
|
||||
// Create filters based on each reagent type in the required reagents list
|
||||
for(var/id in reaction_ids)
|
||||
if(!GLOB.chemical_reactions_list[id])
|
||||
GLOB.chemical_reactions_list[id] = list()
|
||||
@@ -63,7 +60,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 //ID of the chem being made during a fermireaction, kept here so it's cache isn't lost between loops/procs.
|
||||
var/fermiReactID //instance of the chem reaction used 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
|
||||
@@ -96,7 +93,7 @@
|
||||
var/list/data = list()
|
||||
for(var/r in reagent_list) //no reagents will be left behind
|
||||
var/datum/reagent/R = r
|
||||
data += "[R.id] ([round(R.volume, CHEMICAL_QUANTISATION_LEVEL)]u)"
|
||||
data += "[R.type] ([round(R.volume, CHEMICAL_QUANTISATION_LEVEL)]u)"
|
||||
//Using IDs because SOME chemicals (I'm looking at you, chlorhydrate-beer) have the same names as other chemicals.
|
||||
return english_list(data)
|
||||
|
||||
@@ -117,7 +114,7 @@
|
||||
current_list_element = 1
|
||||
|
||||
var/datum/reagent/R = cached_reagents[current_list_element]
|
||||
remove_reagent(R.id, 1)
|
||||
remove_reagent(R.type, 1)
|
||||
|
||||
current_list_element++
|
||||
total_transfered++
|
||||
@@ -132,7 +129,7 @@
|
||||
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)
|
||||
remove_reagent(R.type, R.volume * part, ignore_pH = TRUE)
|
||||
pH = REAGENT_NORMAL_PH
|
||||
update_total()
|
||||
handle_reactions()
|
||||
@@ -152,15 +149,15 @@
|
||||
|
||||
/datum/reagents/proc/get_master_reagent_id()
|
||||
var/list/cached_reagents = reagent_list
|
||||
var/id
|
||||
var/max_type
|
||||
var/max_volume = 0
|
||||
for(var/reagent in cached_reagents)
|
||||
var/datum/reagent/R = reagent
|
||||
if(R.volume > max_volume)
|
||||
max_volume = R.volume
|
||||
id = R.id
|
||||
max_type = R.type
|
||||
|
||||
return id
|
||||
return max_type
|
||||
|
||||
/datum/reagents/proc/get_master_reagent()
|
||||
var/list/cached_reagents = reagent_list
|
||||
@@ -198,9 +195,9 @@
|
||||
trans_data = copy_data(T)
|
||||
|
||||
|
||||
R.add_reagent(T.id, transfer_amount * multiplier, trans_data, chem_temp, T.purity, pH, no_react = TRUE, ignore_pH = TRUE) //we only handle reaction after every reagent has been transfered.
|
||||
R.add_reagent(T.type, transfer_amount * multiplier, trans_data, chem_temp, T.purity, pH, no_react = TRUE, ignore_pH = TRUE) //we only handle reaction after every reagent has been transfered.
|
||||
|
||||
remove_reagent(T.id, transfer_amount, ignore_pH = TRUE)
|
||||
remove_reagent(T.type, transfer_amount, ignore_pH = TRUE)
|
||||
|
||||
update_total()
|
||||
R.update_total()
|
||||
@@ -232,7 +229,7 @@
|
||||
var/copy_amount = T.volume * part
|
||||
if(preserve_data)
|
||||
trans_data = T.data
|
||||
R.add_reagent(T.id, copy_amount * multiplier, trans_data)
|
||||
R.add_reagent(T.type, copy_amount * multiplier, trans_data)
|
||||
|
||||
src.update_total()
|
||||
R.update_total()
|
||||
@@ -256,12 +253,12 @@
|
||||
var/trans_data = null
|
||||
for (var/CR in cached_reagents)
|
||||
var/datum/reagent/current_reagent = CR
|
||||
if(current_reagent.id == reagent)
|
||||
if(current_reagent.type == reagent)
|
||||
if(preserve_data)
|
||||
trans_data = current_reagent.data
|
||||
R.add_reagent(current_reagent.id, amount, trans_data, chem_temp, current_reagent.purity, pH, no_react = TRUE)
|
||||
R.add_reagent(current_reagent.type, amount, trans_data, chem_temp, current_reagent.purity, pH, no_react = TRUE)
|
||||
|
||||
remove_reagent(current_reagent.id, amount, 1)
|
||||
remove_reagent(current_reagent.type, amount, 1)
|
||||
break
|
||||
|
||||
src.update_total()
|
||||
@@ -313,18 +310,21 @@
|
||||
var/datum/reagent/R = addiction
|
||||
if(C && R)
|
||||
R.addiction_stage++
|
||||
if(1 <= R.addiction_stage && R.addiction_stage <= R.addiction_stage1_end)
|
||||
need_mob_update += R.addiction_act_stage1(C)
|
||||
else if(R.addiction_stage1_end <= R.addiction_stage && R.addiction_stage <= R.addiction_stage2_end)
|
||||
need_mob_update += R.addiction_act_stage2(C)
|
||||
else if(R.addiction_stage2_end <= R.addiction_stage && R.addiction_stage <= R.addiction_stage3_end)
|
||||
need_mob_update += R.addiction_act_stage3(C)
|
||||
else if(R.addiction_stage3_end <= R.addiction_stage && R.addiction_stage <= R.addiction_stage4_end)
|
||||
need_mob_update += R.addiction_act_stage4(C)
|
||||
else if(R.addiction_stage4_end <= R.addiction_stage)
|
||||
to_chat(C, "<span class='notice'>You feel like you've gotten over your need for [R.name].</span>")
|
||||
SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "[R.id]_addiction")
|
||||
cached_addictions.Remove(R)
|
||||
switch(R.addiction_stage)
|
||||
if(1 to R.addiction_stage1_end)
|
||||
need_mob_update += R.addiction_act_stage1(C)
|
||||
if(R.addiction_stage1_end to R.addiction_stage2_end)
|
||||
need_mob_update += R.addiction_act_stage2(C)
|
||||
if(R.addiction_stage2_end to R.addiction_stage3_end)
|
||||
need_mob_update += R.addiction_act_stage3(C)
|
||||
if(R.addiction_stage3_end to R.addiction_stage4_end)
|
||||
need_mob_update += R.addiction_act_stage4(C)
|
||||
if(R.addiction_stage4_end to INFINITY)
|
||||
to_chat(C, "<span class='notice'>You feel like you've gotten over your need for [R.name].</span>")
|
||||
SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "[R.type]_addiction")
|
||||
cached_addictions.Remove(R)
|
||||
else
|
||||
SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "[R.type]_overdose")
|
||||
addiction_tick++
|
||||
if(C && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates.
|
||||
C.updatehealth()
|
||||
@@ -381,7 +381,7 @@
|
||||
reaction_occurred = 0
|
||||
for(var/reagent in cached_reagents)
|
||||
var/datum/reagent/R = reagent
|
||||
for(var/reaction in cached_reactions[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id
|
||||
for(var/reaction in cached_reactions[R.type]) // Was a big list but now it should be smaller since we filtered it with our reagent type
|
||||
if(!reaction)
|
||||
continue
|
||||
|
||||
@@ -630,7 +630,7 @@
|
||||
deltapH = 1
|
||||
//This should never proc:
|
||||
else
|
||||
WARNING("[my_atom] attempted to determine FermiChem pH for '[C.id]' which broke for some reason! ([usr])")
|
||||
WARNING("[my_atom] attempted to determine FermiChem pH for '[C.type]' which broke for some reason! ([usr])")
|
||||
|
||||
//Calculate DeltaT (Deviation of T from optimal)
|
||||
if (cached_temp < C.OptimalTempMax && cached_temp >= C.OptimalTempMin)
|
||||
@@ -679,7 +679,7 @@
|
||||
//Above should reduce yeild based on holder purity.
|
||||
//Purity Check
|
||||
for(var/datum/reagent/R in my_atom.reagents.reagent_list)
|
||||
if(P == R.id)
|
||||
if(P == R.type)
|
||||
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"))
|
||||
@@ -724,7 +724,7 @@
|
||||
return cachedPurity/i
|
||||
|
||||
/datum/reagents/proc/uncache_purity(id)
|
||||
var/datum/reagent/R = has_reagent("[id]")
|
||||
var/datum/reagent/R = has_reagent(id)
|
||||
if(!R)
|
||||
return
|
||||
if(R.cached_purity == 1)
|
||||
@@ -735,15 +735,15 @@
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/_reagent in cached_reagents)
|
||||
var/datum/reagent/R = _reagent
|
||||
if(R.id != reagent)
|
||||
del_reagent(R.id)
|
||||
if(R.type != reagent)
|
||||
del_reagent(R.type)
|
||||
update_total()
|
||||
|
||||
/datum/reagents/proc/del_reagent(reagent)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/_reagent in cached_reagents)
|
||||
var/datum/reagent/R = _reagent
|
||||
if(R.id == reagent)
|
||||
if(R.type == reagent)
|
||||
if(my_atom && isliving(my_atom))
|
||||
var/mob/living/M = my_atom
|
||||
if(R.metabolizing)
|
||||
@@ -763,9 +763,9 @@
|
||||
for(var/reagent in cached_reagents)
|
||||
var/datum/reagent/R = reagent
|
||||
if(R.volume <= 0)//For clarity
|
||||
del_reagent(R.id)
|
||||
del_reagent(R.type)
|
||||
if((R.volume < 0.01) && !fermiIsReacting)
|
||||
del_reagent(R.id)
|
||||
del_reagent(R.type)
|
||||
else
|
||||
total_volume += R.volume
|
||||
if(!reagent_list || !total_volume)
|
||||
@@ -776,7 +776,7 @@
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/reagent in cached_reagents)
|
||||
var/datum/reagent/R = reagent
|
||||
del_reagent(R.id)
|
||||
del_reagent(R.type)
|
||||
pH = REAGENT_NORMAL_PH
|
||||
return 0
|
||||
|
||||
@@ -842,13 +842,13 @@
|
||||
WARNING("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])")
|
||||
return FALSE
|
||||
|
||||
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 (D.type == /datum/reagent/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
|
||||
var/turf/T = get_turf(my_atom)
|
||||
var/datum/reagents/R = new/datum/reagents(3000)
|
||||
R.add_reagent("fermiAcid", amount)
|
||||
R.add_reagent(/datum/reagent/fermi/fermiAcid, amount)
|
||||
for (var/datum/reagent/reagentgas in reagent_list)
|
||||
R.add_reagent(reagentgas, amount/5)
|
||||
remove_reagent(reagentgas, amount/5)
|
||||
@@ -895,7 +895,7 @@
|
||||
//add the reagent to the existing if it exists
|
||||
for(var/A in cached_reagents)
|
||||
var/datum/reagent/R = A
|
||||
if (R.id == reagent) //IF MERGING
|
||||
if (R.type == reagent) //IF MERGING
|
||||
//Add amount and equalize purity
|
||||
R.volume += round(amount, CHEMICAL_QUANTISATION_LEVEL)
|
||||
R.purity = ((R.purity * R.volume) + (other_purity * amount)) /((R.volume + amount)) //This should add the purity to the product
|
||||
@@ -937,7 +937,7 @@
|
||||
return TRUE
|
||||
|
||||
|
||||
/datum/reagents/proc/add_reagent_list(list/list_reagents, list/data=null) // Like add_reagent but you can enter a list. Format it like this: list("toxin" = 10, "beer" = 15)
|
||||
/datum/reagents/proc/add_reagent_list(list/list_reagents, list/data=null) // Like add_reagent but you can enter a list. Format it like this: list(/datum/reagent/toxin = 10, /datum/reagent/consumable/ethanol/beer = 15)
|
||||
for(var/r_id in list_reagents)
|
||||
var/amt = list_reagents[r_id]
|
||||
add_reagent(r_id, amt, data)
|
||||
@@ -959,7 +959,7 @@
|
||||
|
||||
for(var/A in cached_reagents)
|
||||
var/datum/reagent/R = A
|
||||
if (R.id == reagent)
|
||||
if (R.type == reagent)
|
||||
if((total_volume - amount) <= 0)//Because this can result in 0, I don't want it to crash.
|
||||
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.
|
||||
@@ -986,7 +986,7 @@
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/_reagent in cached_reagents)
|
||||
var/datum/reagent/R = _reagent
|
||||
if (R.id == reagent)
|
||||
if (R.type == reagent)
|
||||
if(!amount)
|
||||
return R
|
||||
else
|
||||
@@ -1001,7 +1001,7 @@
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/_reagent in cached_reagents)
|
||||
var/datum/reagent/R = _reagent
|
||||
if (R.id == reagent)
|
||||
if (R.type == reagent)
|
||||
return round(R.volume, CHEMICAL_QUANTISATION_LEVEL)
|
||||
|
||||
return 0
|
||||
@@ -1034,7 +1034,7 @@
|
||||
// We found a match, proceed to remove the reagent. Keep looping, we might find other reagents of the same type.
|
||||
if(matches)
|
||||
// Have our other proc handle removement
|
||||
has_removed_reagent = remove_reagent(R.id, amount, safety)
|
||||
has_removed_reagent = remove_reagent(R.type, amount, safety)
|
||||
|
||||
return has_removed_reagent
|
||||
|
||||
@@ -1043,14 +1043,14 @@
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/reagent in cached_reagents)
|
||||
var/datum/reagent/R = reagent
|
||||
if(R.id == reagent_id)
|
||||
if(R.type == reagent_id)
|
||||
return R.data
|
||||
|
||||
/datum/reagents/proc/set_data(reagent_id, new_data)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/reagent in cached_reagents)
|
||||
var/datum/reagent/R = reagent
|
||||
if(R.id == reagent_id)
|
||||
if(R.type == reagent_id)
|
||||
R.data = new_data
|
||||
|
||||
/datum/reagents/proc/copy_data(datum/reagent/current_reagent)
|
||||
@@ -1143,12 +1143,12 @@
|
||||
reagents = new/datum/reagents(max_vol, flags)
|
||||
reagents.my_atom = src
|
||||
|
||||
/proc/get_random_reagent_id() // Returns a random reagent ID minus blacklisted reagents
|
||||
/proc/get_random_reagent_id() // Returns a random reagent type minus blacklisted reagents
|
||||
var/static/list/random_reagents = list()
|
||||
if(!random_reagents.len)
|
||||
for(var/thing in subtypesof(/datum/reagent))
|
||||
var/datum/reagent/R = thing
|
||||
if(initial(R.can_synth))
|
||||
random_reagents += initial(R.id)
|
||||
random_reagents += R
|
||||
var/picked_reagent = pick(random_reagents)
|
||||
return picked_reagent
|
||||
|
||||
@@ -1,3 +1,16 @@
|
||||
/proc/translate_legacy_chem_id(id)
|
||||
switch (id)
|
||||
if ("sacid")
|
||||
return "sulphuricacid"
|
||||
if ("facid")
|
||||
return "fluorosulfuricacid"
|
||||
if ("co2")
|
||||
return "carbondioxide"
|
||||
if ("mine_salve")
|
||||
return "minerssalve"
|
||||
else
|
||||
return ckey(id)
|
||||
|
||||
/obj/machinery/chem_dispenser
|
||||
name = "chem dispenser"
|
||||
desc = "Creates and dispenses chemicals."
|
||||
@@ -21,65 +34,66 @@
|
||||
var/macrotier = 1
|
||||
var/obj/item/reagent_containers/beaker = null
|
||||
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"
|
||||
/datum/reagent/hydrogen,
|
||||
/datum/reagent/lithium,
|
||||
/datum/reagent/carbon,
|
||||
/datum/reagent/nitrogen,
|
||||
/datum/reagent/oxygen,
|
||||
/datum/reagent/fluorine,
|
||||
/datum/reagent/sodium,
|
||||
/datum/reagent/aluminium,
|
||||
/datum/reagent/silicon,
|
||||
/datum/reagent/phosphorus,
|
||||
/datum/reagent/sulfur,
|
||||
/datum/reagent/chlorine,
|
||||
/datum/reagent/potassium,
|
||||
/datum/reagent/iron,
|
||||
/datum/reagent/copper,
|
||||
/datum/reagent/mercury,
|
||||
/datum/reagent/radium,
|
||||
/datum/reagent/water,
|
||||
/datum/reagent/consumable/ethanol,
|
||||
/datum/reagent/consumable/sugar,
|
||||
/datum/reagent/toxin/acid,
|
||||
/datum/reagent/fuel,
|
||||
/datum/reagent/silver,
|
||||
/datum/reagent/iodine,
|
||||
/datum/reagent/bromine,
|
||||
/datum/reagent/stable_plasma
|
||||
)
|
||||
//these become available once upgraded.
|
||||
var/list/upgrade_reagents = list(
|
||||
"oil",
|
||||
"ammonia",
|
||||
"ash"
|
||||
/datum/reagent/oil,
|
||||
/datum/reagent/ammonia,
|
||||
/datum/reagent/ash
|
||||
)
|
||||
|
||||
var/list/upgrade_reagents2 = list(
|
||||
"acetone",
|
||||
"phenol",
|
||||
"diethylamine"
|
||||
/datum/reagent/acetone,
|
||||
/datum/reagent/phenol,
|
||||
/datum/reagent/diethylamine
|
||||
)
|
||||
|
||||
var/list/upgrade_reagents3 = list(
|
||||
"mine_salve",
|
||||
"toxin"
|
||||
/datum/reagent/medicine/mine_salve,
|
||||
/datum/reagent/toxin
|
||||
)
|
||||
|
||||
var/list/emagged_reagents = list(
|
||||
"space_drugs",
|
||||
"plasma",
|
||||
"frostoil",
|
||||
"carpotoxin",
|
||||
"histamine",
|
||||
"morphine"
|
||||
/datum/reagent/drug/space_drugs,
|
||||
/datum/reagent/toxin/plasma,
|
||||
/datum/reagent/consumable/frostoil,
|
||||
/datum/reagent/toxin/carpotoxin,
|
||||
/datum/reagent/toxin/histamine,
|
||||
/datum/reagent/medicine/morphine
|
||||
)
|
||||
|
||||
var/list/saved_recipes = list()
|
||||
|
||||
/obj/machinery/chem_dispenser/Initialize()
|
||||
. = ..()
|
||||
dispensable_reagents = sortList(dispensable_reagents)
|
||||
for(var/list/L in list(dispensable_reagents, emagged_reagents, upgrade_reagents, upgrade_reagents2, upgrade_reagents3))
|
||||
L = sortList(L, /proc/cmp_reagents_asc)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/chem_dispenser/Destroy()
|
||||
@@ -235,7 +249,7 @@
|
||||
if("dispense")
|
||||
if(!is_operational() || QDELETED(cell))
|
||||
return
|
||||
var/reagent = params["reagent"]
|
||||
var/reagent = GLOB.name2reagent[params["reagent"]]
|
||||
if(beaker && dispensable_reagents.Find(reagent))
|
||||
var/datum/reagents/R = beaker.reagents
|
||||
var/free = R.maximum_volume - R.total_volume
|
||||
@@ -267,7 +281,7 @@
|
||||
var/res = get_macro_resolution()
|
||||
for(var/key in chemicals_to_dispense) // i suppose you could edit the list locally before passing it
|
||||
var/list/keysplit = splittext(key," ")
|
||||
var/r_id = keysplit[1]
|
||||
var/r_id = GLOB.name2reagent[translate_legacy_chem_id(keysplit[1])]
|
||||
if(beaker && dispensable_reagents.Find(r_id)) // but since we verify we have the reagent, it'll be fine
|
||||
var/datum/reagents/R = beaker.reagents
|
||||
var/free = R.maximum_volume - R.total_volume
|
||||
@@ -299,7 +313,8 @@
|
||||
var/resmismatch = FALSE
|
||||
for(var/reagents in first_process)
|
||||
var/list/reagent = splittext(reagents, "=")
|
||||
if(dispensable_reagents.Find(reagent[1]))
|
||||
var/reagent_id = GLOB.name2reagent[translate_legacy_chem_id(reagent[1])]
|
||||
if(dispensable_reagents.Find(reagent_id))
|
||||
if (!resmismatch && !check_macro_part(reagents, res))
|
||||
resmismatch = TRUE
|
||||
continue
|
||||
@@ -475,45 +490,45 @@
|
||||
nopower_state = null
|
||||
pass_flags = PASSTABLE
|
||||
dispensable_reagents = 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"
|
||||
/datum/reagent/water,
|
||||
/datum/reagent/consumable/ice,
|
||||
/datum/reagent/consumable/coffee,
|
||||
/datum/reagent/consumable/cream,
|
||||
/datum/reagent/consumable/tea,
|
||||
/datum/reagent/consumable/icetea,
|
||||
/datum/reagent/consumable/space_cola,
|
||||
/datum/reagent/consumable/spacemountainwind,
|
||||
/datum/reagent/consumable/dr_gibb,
|
||||
/datum/reagent/consumable/space_up,
|
||||
/datum/reagent/consumable/tonic,
|
||||
/datum/reagent/consumable/sodawater,
|
||||
/datum/reagent/consumable/lemon_lime,
|
||||
/datum/reagent/consumable/pwr_game,
|
||||
/datum/reagent/consumable/shamblers,
|
||||
/datum/reagent/consumable/sugar,
|
||||
/datum/reagent/consumable/orangejuice,
|
||||
/datum/reagent/consumable/grenadine,
|
||||
/datum/reagent/consumable/limejuice,
|
||||
/datum/reagent/consumable/tomatojuice,
|
||||
/datum/reagent/consumable/lemonjuice,
|
||||
/datum/reagent/consumable/menthol
|
||||
)
|
||||
upgrade_reagents = list(
|
||||
"mushroomhallucinogen",
|
||||
"nothing",
|
||||
"cryoxadone"
|
||||
/datum/reagent/drug/mushroomhallucinogen,
|
||||
/datum/reagent/consumable/nothing,
|
||||
/datum/reagent/medicine/cryoxadone
|
||||
)
|
||||
upgrade_reagents2 = list(
|
||||
"banana",
|
||||
"berryjuice"
|
||||
/datum/reagent/consumable/banana,
|
||||
/datum/reagent/consumable/berryjuice
|
||||
)
|
||||
upgrade_reagents3 = null
|
||||
emagged_reagents = list(
|
||||
"thirteenloko",
|
||||
"changelingsting",
|
||||
"whiskeycola",
|
||||
"mindbreaker",
|
||||
"tirizene"
|
||||
/datum/reagent/consumable/ethanol/thirteenloko,
|
||||
/datum/reagent/consumable/ethanol/changelingsting,
|
||||
/datum/reagent/consumable/ethanol/whiskey_cola,
|
||||
/datum/reagent/toxin/mindbreaker,
|
||||
/datum/reagent/toxin/staminatoxin
|
||||
)
|
||||
|
||||
|
||||
@@ -542,39 +557,39 @@
|
||||
icon_state = "booze_dispenser"
|
||||
circuit = /obj/item/circuitboard/machine/chem_dispenser/drinks/beer
|
||||
dispensable_reagents = list(
|
||||
"beer",
|
||||
"kahlua",
|
||||
"whiskey",
|
||||
"wine",
|
||||
"vodka",
|
||||
"gin",
|
||||
"rum",
|
||||
"tequila",
|
||||
"vermouth",
|
||||
"cognac",
|
||||
"ale",
|
||||
"absinthe",
|
||||
"hcider",
|
||||
"creme_de_menthe",
|
||||
"creme_de_cacao",
|
||||
"triple_sec",
|
||||
"sake",
|
||||
"applejack"
|
||||
/datum/reagent/consumable/ethanol/beer,
|
||||
/datum/reagent/consumable/ethanol/kahlua,
|
||||
/datum/reagent/consumable/ethanol/whiskey,
|
||||
/datum/reagent/consumable/ethanol/wine,
|
||||
/datum/reagent/consumable/ethanol/vodka,
|
||||
/datum/reagent/consumable/ethanol/gin,
|
||||
/datum/reagent/consumable/ethanol/rum,
|
||||
/datum/reagent/consumable/ethanol/tequila,
|
||||
/datum/reagent/consumable/ethanol/vermouth,
|
||||
/datum/reagent/consumable/ethanol/cognac,
|
||||
/datum/reagent/consumable/ethanol/ale,
|
||||
/datum/reagent/consumable/ethanol/absinthe,
|
||||
/datum/reagent/consumable/ethanol/hcider,
|
||||
/datum/reagent/consumable/ethanol/creme_de_menthe,
|
||||
/datum/reagent/consumable/ethanol/creme_de_cacao,
|
||||
/datum/reagent/consumable/ethanol/triple_sec,
|
||||
/datum/reagent/consumable/ethanol/sake,
|
||||
/datum/reagent/consumable/ethanol/applejack
|
||||
)
|
||||
upgrade_reagents = list(
|
||||
"ethanol",
|
||||
"fernet"
|
||||
/datum/reagent/consumable/ethanol,
|
||||
/datum/reagent/consumable/ethanol/fernet
|
||||
)
|
||||
upgrade_reagents2 = null
|
||||
upgrade_reagents3 = null
|
||||
emagged_reagents = list(
|
||||
"iron",
|
||||
"alexander",
|
||||
"clownstears",
|
||||
"minttoxin",
|
||||
"atomicbomb",
|
||||
"aphro",
|
||||
"aphro+"
|
||||
/datum/reagent/iron,
|
||||
/datum/reagent/consumable/ethanol/alexander,
|
||||
/datum/reagent/consumable/clownstears,
|
||||
/datum/reagent/toxin/minttoxin,
|
||||
/datum/reagent/consumable/ethanol/atomicbomb,
|
||||
/datum/reagent/drug/aphrodisiac,
|
||||
/datum/reagent/drug/aphrodisiacplus
|
||||
)
|
||||
|
||||
/obj/machinery/chem_dispenser/drinks/beer/fullupgrade //fully ugpraded stock parts, emagged
|
||||
@@ -598,9 +613,9 @@
|
||||
/obj/machinery/chem_dispenser/mutagen
|
||||
name = "mutagen dispenser"
|
||||
desc = "Creates and dispenses mutagen."
|
||||
dispensable_reagents = list("mutagen")
|
||||
dispensable_reagents = list(/datum/reagent/toxin/mutagen)
|
||||
upgrade_reagents = null
|
||||
emagged_reagents = list("plasma")
|
||||
emagged_reagents = list(/datum/reagent/toxin/plasma)
|
||||
|
||||
|
||||
/obj/machinery/chem_dispenser/mutagensaltpeter
|
||||
@@ -609,19 +624,19 @@
|
||||
flags_1 = NODECONSTRUCT_1
|
||||
|
||||
dispensable_reagents = list(
|
||||
"mutagen",
|
||||
"saltpetre",
|
||||
"eznutriment",
|
||||
"left4zednutriment",
|
||||
"robustharvestnutriment",
|
||||
"water",
|
||||
"plantbgone",
|
||||
"weedkiller",
|
||||
"pestkiller",
|
||||
"cryoxadone",
|
||||
"ammonia",
|
||||
"ash",
|
||||
"diethylamine")
|
||||
/datum/reagent/toxin/mutagen,
|
||||
/datum/reagent/saltpetre,
|
||||
/datum/reagent/plantnutriment/eznutriment,
|
||||
/datum/reagent/plantnutriment/left4zednutriment,
|
||||
/datum/reagent/plantnutriment/robustharvestnutriment,
|
||||
/datum/reagent/water,
|
||||
/datum/reagent/toxin/plantbgone,
|
||||
/datum/reagent/toxin/plantbgone/weedkiller,
|
||||
/datum/reagent/toxin/pestkiller,
|
||||
/datum/reagent/medicine/cryoxadone,
|
||||
/datum/reagent/ammonia,
|
||||
/datum/reagent/ash,
|
||||
/datum/reagent/diethylamine)
|
||||
//same as above.
|
||||
upgrade_reagents = null
|
||||
upgrade_reagents2 = null
|
||||
@@ -667,46 +682,46 @@
|
||||
working_state = null
|
||||
nopower_state = null
|
||||
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",
|
||||
"oil",
|
||||
"ammonia",
|
||||
"ash",
|
||||
"acetone",
|
||||
"phenol",
|
||||
"diethylamine",
|
||||
"mine_salve",
|
||||
"toxin",
|
||||
"space_drugs",
|
||||
"plasma",
|
||||
"frostoil",
|
||||
"uranium",
|
||||
"histamine",
|
||||
"morphine"
|
||||
/datum/reagent/hydrogen,
|
||||
/datum/reagent/lithium,
|
||||
/datum/reagent/carbon,
|
||||
/datum/reagent/nitrogen,
|
||||
/datum/reagent/oxygen,
|
||||
/datum/reagent/fluorine,
|
||||
/datum/reagent/sodium,
|
||||
/datum/reagent/aluminium,
|
||||
/datum/reagent/silicon,
|
||||
/datum/reagent/phosphorus,
|
||||
/datum/reagent/sulfur,
|
||||
/datum/reagent/chlorine,
|
||||
/datum/reagent/potassium,
|
||||
/datum/reagent/iron,
|
||||
/datum/reagent/copper,
|
||||
/datum/reagent/mercury,
|
||||
/datum/reagent/radium,
|
||||
/datum/reagent/water,
|
||||
/datum/reagent/consumable/ethanol,
|
||||
/datum/reagent/consumable/sugar,
|
||||
/datum/reagent/toxin/acid,
|
||||
/datum/reagent/fuel,
|
||||
/datum/reagent/silver,
|
||||
/datum/reagent/iodine,
|
||||
/datum/reagent/bromine,
|
||||
/datum/reagent/stable_plasma,
|
||||
/datum/reagent/oil,
|
||||
/datum/reagent/ammonia,
|
||||
/datum/reagent/ash,
|
||||
/datum/reagent/acetone,
|
||||
/datum/reagent/phenol,
|
||||
/datum/reagent/diethylamine,
|
||||
/datum/reagent/medicine/mine_salve,
|
||||
/datum/reagent/toxin,
|
||||
/datum/reagent/drug/space_drugs,
|
||||
/datum/reagent/toxin/plasma,
|
||||
/datum/reagent/consumable/frostoil,
|
||||
/datum/reagent/uranium,
|
||||
/datum/reagent/toxin/histamine,
|
||||
/datum/reagent/medicine/morphine
|
||||
)
|
||||
|
||||
/obj/machinery/chem_dispenser/abductor/Initialize()
|
||||
@@ -719,4 +734,4 @@
|
||||
component_parts += new /obj/item/stock_parts/manipulator/femto(null)
|
||||
component_parts += new /obj/item/stack/sheet/glass(null)
|
||||
component_parts += new /obj/item/stock_parts/cell/bluespace(null)
|
||||
RefreshParts()
|
||||
RefreshParts()
|
||||
|
||||
@@ -214,34 +214,34 @@
|
||||
|
||||
if("transferToBuffer")
|
||||
if(beaker)
|
||||
var/id = params["id"]
|
||||
var/reagent = GLOB.name2reagent[params["id"]]
|
||||
var/amount = text2num(params["amount"])
|
||||
if (amount > 0)
|
||||
end_fermi_reaction()
|
||||
beaker.reagents.trans_id_to(src, id, amount)
|
||||
beaker.reagents.trans_id_to(src, reagent, amount)
|
||||
. = TRUE
|
||||
else if (amount == -1) // -1 means custom amount
|
||||
useramount = input("Enter the Amount you want to transfer:", name, useramount) as num|null
|
||||
if (useramount > 0)
|
||||
end_fermi_reaction()
|
||||
beaker.reagents.trans_id_to(src, id, useramount)
|
||||
beaker.reagents.trans_id_to(src, reagent, useramount)
|
||||
. = TRUE
|
||||
|
||||
if("transferFromBuffer")
|
||||
var/id = params["id"]
|
||||
var/reagent = GLOB.name2reagent[params["id"]]
|
||||
var/amount = text2num(params["amount"])
|
||||
if (amount > 0)
|
||||
if(mode)
|
||||
reagents.trans_id_to(beaker, id, amount)
|
||||
reagents.trans_id_to(beaker, reagent, amount)
|
||||
. = TRUE
|
||||
else
|
||||
reagents.remove_reagent(id, amount)
|
||||
reagents.remove_reagent(reagent, amount)
|
||||
. = TRUE
|
||||
else if (amount == -1) // -1 means custom amount
|
||||
useramount = input("Enter the Amount you want to transfer:", name, useramount) as num|null
|
||||
if (useramount > 0)
|
||||
end_fermi_reaction()
|
||||
reagents.trans_id_to(beaker, id, useramount)
|
||||
reagents.trans_id_to(beaker, reagent, useramount)
|
||||
. = TRUE
|
||||
|
||||
if("toggleMode")
|
||||
@@ -423,7 +423,7 @@
|
||||
|
||||
//END CITADEL ADDITIONS
|
||||
if("analyzeBeak")
|
||||
var/datum/reagent/R = GLOB.chemical_reagents_list[params["id"]]
|
||||
var/datum/reagent/R = GLOB.name2reagent[params["id"]]
|
||||
if(R)
|
||||
var/state = "Unknown"
|
||||
if(initial(R.reagent_state) == 1)
|
||||
@@ -434,11 +434,11 @@
|
||||
state = "Gas"
|
||||
var/const/P = 3 //The number of seconds between life ticks
|
||||
var/T = initial(R.metabolization_rate) * (60 / P)
|
||||
var/datum/chemical_reaction/Rcr = get_chemical_reaction(R.id)
|
||||
var/datum/chemical_reaction/Rcr = get_chemical_reaction(R.type)
|
||||
if(Rcr && Rcr.FermiChem)
|
||||
fermianalyze = TRUE
|
||||
var/pHpeakCache = (Rcr.OptimalpHMin + Rcr.OptimalpHMax)/2
|
||||
var/datum/reagent/targetReagent = beaker.reagents.has_reagent("[R.id]")
|
||||
var/datum/reagent/targetReagent = beaker.reagents.has_reagent(R.type)
|
||||
|
||||
if(!targetReagent)
|
||||
CRASH("Tried to find a reagent that doesn't exist in the chem_master!")
|
||||
@@ -450,7 +450,7 @@
|
||||
return
|
||||
|
||||
if("analyzeBuff")
|
||||
var/datum/reagent/R = GLOB.chemical_reagents_list[params["id"]]
|
||||
var/datum/reagent/R = GLOB.name2reagent[params["id"]]
|
||||
if(R)
|
||||
var/state = "Unknown"
|
||||
if(initial(R.reagent_state) == 1)
|
||||
@@ -463,9 +463,9 @@
|
||||
var/T = initial(R.metabolization_rate) * (60 / P)
|
||||
if(istype(R, /datum/reagent/fermi))
|
||||
fermianalyze = TRUE
|
||||
var/datum/chemical_reaction/Rcr = get_chemical_reaction(R.id)
|
||||
var/datum/chemical_reaction/Rcr = get_chemical_reaction(R.type)
|
||||
var/pHpeakCache = (Rcr.OptimalpHMin + Rcr.OptimalpHMax)/2
|
||||
var/datum/reagent/targetReagent = reagents.has_reagent("[R.id]")
|
||||
var/datum/reagent/targetReagent = reagents.has_reagent(R.type)
|
||||
|
||||
if(!targetReagent)
|
||||
CRASH("Tried to find a reagent that doesn't exist in the chem_master!")
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
flags_1 = NODECONSTRUCT_1
|
||||
use_power = NO_POWER_USE
|
||||
var/static/list/shortcuts = list(
|
||||
"meth" = "methamphetamine",
|
||||
"tricord" = "tricordrazine"
|
||||
"meth" = /datum/reagent/drug/methamphetamine,
|
||||
"tricord" = /datum/reagent/medicine/tricordrazine
|
||||
)
|
||||
|
||||
/obj/machinery/chem_dispenser/chem_synthesizer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
@@ -31,13 +31,13 @@
|
||||
beaker = null
|
||||
. = TRUE
|
||||
if("input")
|
||||
var/input_reagent = replacetext(lowertext(input("Enter the name of any liquid", "Input") as text), " ", "") //95% of the time, the reagent id is a lowercase/no spaces version of the name
|
||||
var/input_reagent = replacetext(lowertext(input("Enter the name of any reagent", "Input") as text), " ", "") //95% of the time, the reagent id is a lowercase/no spaces version of the name
|
||||
if(shortcuts[input_reagent])
|
||||
input_reagent = shortcuts[input_reagent]
|
||||
else
|
||||
input_reagent = find_reagent(input_reagent)
|
||||
if(!input_reagent || !GLOB.chemical_reagents_list[input_reagent])
|
||||
say("OUT OF RANGE")
|
||||
if(!input_reagent)
|
||||
say("REAGENT NOT FOUND")
|
||||
return
|
||||
else
|
||||
if(!beaker)
|
||||
|
||||
@@ -144,9 +144,9 @@
|
||||
var/datum/reagent/blood/B = locate() in beaker.reagents.reagent_list
|
||||
if(B)
|
||||
data["has_blood"] = TRUE
|
||||
data["blood"] = list()
|
||||
data["blood"]["dna"] = B.data["blood_DNA"] || "none"
|
||||
data["blood"]["type"] = B.data["blood_type"] || "none"
|
||||
data[/datum/reagent/blood] = list()
|
||||
data[/datum/reagent/blood]["dna"] = B.data["blood_DNA"] || "none"
|
||||
data[/datum/reagent/blood]["type"] = B.data["blood_type"] || "none"
|
||||
data["viruses"] = get_viruses_data(B)
|
||||
data["resistances"] = get_resistance_data(B)
|
||||
if(SYMPTOM_DETAILS)
|
||||
@@ -192,7 +192,7 @@
|
||||
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)
|
||||
B.reagents.add_reagent(/datum/reagent/blood, 20, data)
|
||||
wait = TRUE
|
||||
update_icon()
|
||||
var/turf/source_turf = get_turf(src)
|
||||
@@ -204,7 +204,7 @@
|
||||
var/datum/disease/D = SSdisease.archive_diseases[id]
|
||||
var/obj/item/reagent_containers/glass/bottle/B = new(drop_location())
|
||||
B.name = "[D.name] vaccine bottle"
|
||||
B.reagents.add_reagent("vaccine", 15, list(id))
|
||||
B.reagents.add_reagent(/datum/reagent/vaccine, 15, list(id))
|
||||
wait = TRUE
|
||||
update_icon()
|
||||
addtimer(CALLBACK(src, .proc/reset_replicator_cooldown), 200)
|
||||
|
||||
@@ -299,18 +299,18 @@
|
||||
/obj/machinery/reagentgrinder/proc/mix_complete()
|
||||
if(beaker?.reagents.total_volume)
|
||||
//Recipe to make Butter
|
||||
var/butter_amt = FLOOR(beaker.reagents.get_reagent_amount("milk") / MILK_TO_BUTTER_COEFF, 1)
|
||||
beaker.reagents.remove_reagent("milk", MILK_TO_BUTTER_COEFF * butter_amt)
|
||||
var/butter_amt = FLOOR(beaker.reagents.get_reagent_amount(/datum/reagent/consumable/milk) / MILK_TO_BUTTER_COEFF, 1)
|
||||
beaker.reagents.remove_reagent(/datum/reagent/consumable/milk, MILK_TO_BUTTER_COEFF * butter_amt)
|
||||
for(var/i in 1 to butter_amt)
|
||||
new /obj/item/reagent_containers/food/snacks/butter(drop_location())
|
||||
//Recipe to make Mayonnaise
|
||||
if (beaker.reagents.has_reagent("eggyolk"))
|
||||
var/amount = beaker.reagents.get_reagent_amount("eggyolk")
|
||||
beaker.reagents.remove_reagent("eggyolk", amount)
|
||||
beaker.reagents.add_reagent("mayonnaise", amount)
|
||||
if (beaker.reagents.has_reagent(/datum/reagent/consumable/eggyolk))
|
||||
var/amount = beaker.reagents.get_reagent_amount(/datum/reagent/consumable/eggyolk)
|
||||
beaker.reagents.remove_reagent(/datum/reagent/consumable/eggyolk, amount)
|
||||
beaker.reagents.add_reagent(/datum/reagent/consumable/mayonnaise, amount)
|
||||
//Moonsugar for skooma
|
||||
if(beaker.reagents.has_reagent("sugar") && beaker.reagents.has_reagent("moonshine"))
|
||||
var/amount = min(beaker.reagents.get_reagent_amount("sugar"), beaker.reagents.get_reagent_amount("moonshine"))
|
||||
beaker.reagents.remove_reagent("sugar", amount)
|
||||
beaker.reagents.remove_reagent("moonshine", amount)
|
||||
beaker.reagents.add_reagent("moonsugar", amount*2)
|
||||
if(beaker.reagents.has_reagent(/datum/reagent/consumable/sugar) && beaker.reagents.has_reagent(/datum/reagent/consumable/ethanol/moonshine))
|
||||
var/amount = min(beaker.reagents.get_reagent_amount(/datum/reagent/consumable/sugar), beaker.reagents.get_reagent_amount(/datum/reagent/consumable/ethanol/moonshine))
|
||||
beaker.reagents.remove_reagent(/datum/reagent/consumable/sugar, amount)
|
||||
beaker.reagents.remove_reagent(/datum/reagent/consumable/ethanol/moonshine, amount)
|
||||
beaker.reagents.add_reagent(/datum/reagent/moonsugar, amount*2)
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
#define REM REAGENTS_EFFECT_MULTIPLIER
|
||||
|
||||
GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
|
||||
|
||||
/proc/build_name2reagent()
|
||||
. = list()
|
||||
for (var/t in subtypesof(/datum/reagent))
|
||||
var/datum/reagent/R = t
|
||||
if (length(initial(R.name)))
|
||||
.[ckey(initial(R.name))] = t
|
||||
|
||||
//Various reagents
|
||||
//Toxin & acid reagents
|
||||
//Hydroponics stuff
|
||||
@@ -58,7 +67,7 @@
|
||||
var/modifier = CLAMP((1 - touch_protection), 0, 1)
|
||||
var/amount = round(reac_volume*modifier, 0.1)
|
||||
if(amount >= 0.5)
|
||||
M.reagents.add_reagent(id, amount)
|
||||
M.reagents.add_reagent(type, amount)
|
||||
return 1
|
||||
|
||||
/datum/reagent/proc/reaction_obj(obj/O, volume)
|
||||
@@ -70,7 +79,7 @@
|
||||
/datum/reagent/proc/on_mob_life(mob/living/carbon/M)
|
||||
current_cycle++
|
||||
if(holder)
|
||||
holder.remove_reagent(src.id, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears.
|
||||
holder.remove_reagent(type, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears.
|
||||
return
|
||||
|
||||
//called when a mob processes chems when dead.
|
||||
@@ -79,7 +88,7 @@
|
||||
return
|
||||
current_cycle++
|
||||
if(holder)
|
||||
holder.remove_reagent(src.id, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears.
|
||||
holder.remove_reagent(type, metabolization_rate * M.metabolism_efficiency) //By default it slowly disappears.
|
||||
return
|
||||
|
||||
// Called when this reagent is first added to a mob
|
||||
@@ -98,9 +107,9 @@
|
||||
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.remove_reagent(type, 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]")
|
||||
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)
|
||||
@@ -110,7 +119,7 @@
|
||||
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.remove_reagent(type, (impureVol), FALSE)
|
||||
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]")
|
||||
@@ -149,9 +158,9 @@
|
||||
return
|
||||
|
||||
if ((inverse_chem_val > purity) && (inverse_chem)) //INVERT
|
||||
M.reagents.remove_reagent(id, amount, FALSE)
|
||||
M.reagents.remove_reagent(type, 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]")
|
||||
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)
|
||||
@@ -161,7 +170,7 @@
|
||||
else if (impure_chem) //SPLIT
|
||||
var/impureVol = amount * (1 - purity)
|
||||
if(!(chemical_flags & REAGENT_SPLITRETAINVOL))
|
||||
M.reagents.remove_reagent(id, impureVol, FALSE)
|
||||
M.reagents.remove_reagent(type, impureVol, FALSE)
|
||||
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]")
|
||||
|
||||
@@ -662,7 +662,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
|
||||
/datum/reagent/consumable/ethanol/tequila_sunrise/on_mob_life(mob/living/carbon/M)
|
||||
if(QDELETED(light_holder))
|
||||
M.reagents.del_reagent("tequilasunrise") //If we lost our light object somehow, remove the reagent
|
||||
M.reagents.del_reagent(type) //If we lost our light object somehow, remove the reagent
|
||||
else if(light_holder.loc != M)
|
||||
light_holder.forceMove(M)
|
||||
return ..()
|
||||
@@ -1456,9 +1456,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Neurotoxin"
|
||||
glass_desc = "A drink that is guaranteed to knock you silly."
|
||||
//SplitChem = TRUE
|
||||
impure_chem = "neuroweak"
|
||||
impure_chem = /datum/reagent/consumable/ethanol/neuroweak
|
||||
inverse_chem_val = 0.5 //Clear conversion
|
||||
inverse_chem = "neuroweak"
|
||||
inverse_chem = /datum/reagent/consumable/ethanol/neuroweak
|
||||
value = 4
|
||||
|
||||
/datum/reagent/consumable/ethanol/neurotoxin/proc/pickt()
|
||||
@@ -1468,12 +1468,12 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
M.set_drugginess(50)
|
||||
M.dizziness +=2
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1*REM, 150)
|
||||
if(prob(20) && !holder.has_reagent("neuroweak"))
|
||||
if(prob(20) && !holder.has_reagent(/datum/reagent/consumable/ethanol/neuroweak))
|
||||
M.adjustStaminaLoss(10)
|
||||
M.drop_all_held_items()
|
||||
to_chat(M, "<span class='notice'>You cant feel your hands!</span>")
|
||||
if(current_cycle > 5)
|
||||
if(prob(20) && !holder.has_reagent("neuroweak"))
|
||||
if(prob(20) && !holder.has_reagent(/datum/reagent/consumable/ethanol/neuroweak))
|
||||
var/t = pickt()
|
||||
ADD_TRAIT(M, t, type)
|
||||
M.adjustStaminaLoss(10)
|
||||
@@ -1504,12 +1504,12 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
value = 3
|
||||
|
||||
/datum/reagent/consumable/ethanol/neuroweak/on_mob_life(mob/living/carbon/M)
|
||||
if(holder.has_reagent("neurotoxin"))
|
||||
if(holder.has_reagent(/datum/reagent/consumable/ethanol/neurotoxin))
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1*REM, 150)
|
||||
M.reagents.remove_reagent("neurotoxin", 1.5 * REAGENTS_METABOLISM, FALSE)
|
||||
if(holder.has_reagent("fentanyl"))
|
||||
M.reagents.remove_reagent(/datum/reagent/consumable/ethanol/neurotoxin, 1.5 * REAGENTS_METABOLISM, FALSE)
|
||||
else if(holder.has_reagent(/datum/reagent/toxin/fentanyl))
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1*REM, 150)
|
||||
M.reagents.remove_reagent("fentanyl", 0.75 * REAGENTS_METABOLISM, FALSE)
|
||||
M.reagents.remove_reagent(/datum/reagent/toxin/fentanyl, 0.75 * REAGENTS_METABOLISM, FALSE)
|
||||
else
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -0.5*REM, 150)
|
||||
M.dizziness +=2
|
||||
@@ -1862,7 +1862,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
/datum/reagent/consumable/ethanol/alexander/on_mob_life(mob/living/L)
|
||||
..()
|
||||
if(mighty_shield && !(mighty_shield in L.contents)) //If you had a shield and lose it, you lose the reagent as well. Otherwise this is just a normal drink.
|
||||
L.reagents.del_reagent("alexander")
|
||||
L.reagents.del_reagent(type)
|
||||
|
||||
/datum/reagent/consumable/ethanol/alexander/on_mob_end_metabolize(mob/living/L)
|
||||
if(mighty_shield)
|
||||
|
||||
@@ -195,8 +195,8 @@
|
||||
reac_volume = ..()
|
||||
M.adjust_drugginess(reac_volume)
|
||||
if(M.reagents)
|
||||
M.reagents.add_reagent("regenerative_materia", 0.2*reac_volume)
|
||||
M.reagents.add_reagent("spore", 0.2*reac_volume)
|
||||
M.reagents.add_reagent(/datum/reagent/blob/regenerative_materia, 0.2*reac_volume)
|
||||
M.reagents.add_reagent(/datum/reagent/toxin/spore, 0.2*reac_volume)
|
||||
M.apply_damage(0.7*reac_volume, TOX)
|
||||
|
||||
/datum/reagent/blob/regenerative_materia/on_mob_life(mob/living/carbon/C)
|
||||
@@ -339,9 +339,9 @@
|
||||
/datum/reagent/blob/cryogenic_poison/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
if(M.reagents)
|
||||
M.reagents.add_reagent("frostoil", 0.3*reac_volume)
|
||||
M.reagents.add_reagent("ice", 0.3*reac_volume)
|
||||
M.reagents.add_reagent("cryogenic_poison", 0.3*reac_volume)
|
||||
M.reagents.add_reagent(/datum/reagent/consumable/frostoil, 0.3*reac_volume)
|
||||
M.reagents.add_reagent(/datum/reagent/consumable/ice, 0.3*reac_volume)
|
||||
M.reagents.add_reagent(/datum/reagent/blob/cryogenic_poison, 0.3*reac_volume)
|
||||
M.apply_damage(0.2*reac_volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/cryogenic_poison/on_mob_life(mob/living/carbon/M)
|
||||
|
||||
@@ -227,8 +227,8 @@
|
||||
if(M.getBruteLoss() && prob(20))
|
||||
M.heal_bodypart_damage(1,0, 0)
|
||||
. = 1
|
||||
if(holder.has_reagent("capsaicin"))
|
||||
holder.remove_reagent("capsaicin", 2)
|
||||
if(holder.has_reagent(/datum/reagent/consumable/capsaicin))
|
||||
holder.remove_reagent(/datum/reagent/consumable/capsaicin, 2)
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/soymilk
|
||||
@@ -285,8 +285,8 @@
|
||||
M.AdjustSleeping(-40, FALSE)
|
||||
//310.15 is the normal bodytemp.
|
||||
M.adjust_bodytemperature(25 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL)
|
||||
if(holder.has_reagent("frostoil"))
|
||||
holder.remove_reagent("frostoil", 5)
|
||||
if(holder.has_reagent(/datum/reagent/consumable/frostoil))
|
||||
holder.remove_reagent(/datum/reagent/consumable/frostoil, 5)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
@@ -523,9 +523,9 @@
|
||||
glass_desc = "Stinging with flavour."
|
||||
|
||||
/datum/reagent/consumable/buzz_fuzz/on_mob_life(mob/living/carbon/M)
|
||||
M.reagents.add_reagent("sugar",1)
|
||||
M.reagents.add_reagent(/datum/reagent/consumable/sugar,1)
|
||||
if(prob(5))
|
||||
M.reagents.add_reagent("honey",1)
|
||||
M.reagents.add_reagent(/datum/reagent/consumable/honey,1)
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/buzz_fuzz/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/datum/reagent/consumable/on_mob_life(mob/living/carbon/M)
|
||||
current_cycle++
|
||||
M.nutrition += nutriment_factor
|
||||
holder.remove_reagent(src.id, metabolization_rate)
|
||||
holder.remove_reagent(type, metabolization_rate)
|
||||
|
||||
/datum/reagent/consumable/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(method == INGEST)
|
||||
@@ -121,7 +121,7 @@
|
||||
O.loc.visible_message("<span class='warning'>[O] rapidly fries as it's splashed with hot oil! Somehow.</span>")
|
||||
var/obj/item/reagent_containers/food/snacks/deepfryholder/F = new(O.drop_location(), O)
|
||||
F.fry(volume)
|
||||
F.reagents.add_reagent("cooking_oil", reac_volume)
|
||||
F.reagents.add_reagent(/datum/reagent/consumable/cooking_oil, reac_volume)
|
||||
|
||||
/datum/reagent/consumable/cooking_oil/reaction_mob(mob/living/M, method = TOUCH, reac_volume, show_message = 1, touch_protection = 0)
|
||||
if(!istype(M))
|
||||
@@ -216,8 +216,8 @@
|
||||
switch(current_cycle)
|
||||
if(1 to 15)
|
||||
heating = 5 * TEMPERATURE_DAMAGE_COEFFICIENT
|
||||
if(holder.has_reagent("cryostylane"))
|
||||
holder.remove_reagent("cryostylane", 5)
|
||||
if(holder.has_reagent(/datum/reagent/cryostylane))
|
||||
holder.remove_reagent(/datum/reagent/cryostylane, 5)
|
||||
if(isslime(M))
|
||||
heating = rand(5,20)
|
||||
if(15 to 25)
|
||||
@@ -249,8 +249,8 @@
|
||||
switch(current_cycle)
|
||||
if(1 to 15)
|
||||
cooling = -10 * TEMPERATURE_DAMAGE_COEFFICIENT
|
||||
if(holder.has_reagent("capsaicin"))
|
||||
holder.remove_reagent("capsaicin", 5)
|
||||
if(holder.has_reagent(/datum/reagent/consumable/capsaicin))
|
||||
holder.remove_reagent(/datum/reagent/consumable/capsaicin, 5)
|
||||
if(isslime(M))
|
||||
cooling = -rand(5,20)
|
||||
if(15 to 25)
|
||||
@@ -538,7 +538,7 @@
|
||||
var/obj/effect/decal/cleanable/flour/reagentdecal = new/obj/effect/decal/cleanable/flour(T)
|
||||
reagentdecal = locate() in T //Might have merged with flour already there.
|
||||
if(reagentdecal)
|
||||
reagentdecal.reagents.add_reagent("flour", reac_volume)
|
||||
reagentdecal.reagents.add_reagent(/datum/reagent/consumable/flour, reac_volume)
|
||||
|
||||
/datum/reagent/consumable/cherryjelly
|
||||
name = "Cherry Jelly"
|
||||
@@ -603,7 +603,7 @@
|
||||
taste_description = "sweet slime"
|
||||
|
||||
/datum/reagent/consumable/corn_syrup/on_mob_life(mob/living/carbon/M)
|
||||
holder.add_reagent("sugar", 3)
|
||||
holder.add_reagent(/datum/reagent/consumable/sugar, 3)
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/honey
|
||||
@@ -617,7 +617,7 @@
|
||||
taste_description = "sweetness"
|
||||
|
||||
/datum/reagent/consumable/honey/on_mob_life(mob/living/carbon/M)
|
||||
M.reagents.add_reagent("sugar",3)
|
||||
M.reagents.add_reagent(/datum/reagent/consumable/sugar,3)
|
||||
if(prob(55))
|
||||
M.adjustBruteLoss(-1*REM, 0)
|
||||
M.adjustFireLoss(-1*REM, 0)
|
||||
@@ -767,7 +767,7 @@
|
||||
/* //We don't have ethereals here, so I'll just comment it out.
|
||||
/datum/reagent/consumable/liquidelectricity/reaction_mob(mob/living/M, method=TOUCH, reac_volume) //can't be on life because of the way blood works.
|
||||
if((method == INGEST || method == INJECT || method == PATCH) && iscarbon(M))
|
||||
|
||||
|
||||
var/mob/living/carbon/C = M
|
||||
var/obj/item/organ/stomach/ethereal/stomach = C.getorganslot(ORGAN_SLOT_STOMACH)
|
||||
if(istype(stomach))
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
/datum/reagent/medicine/on_mob_life(mob/living/carbon/M)
|
||||
current_cycle++
|
||||
holder.remove_reagent(src.id, metabolization_rate / M.metabolism_efficiency) //medicine reagents stay longer if you have a better metabolism
|
||||
holder.remove_reagent(type, metabolization_rate / M.metabolism_efficiency) //medicine reagents stay longer if you have a better metabolism
|
||||
|
||||
/datum/reagent/medicine/leporazine
|
||||
name = "Leporazine"
|
||||
@@ -95,8 +95,8 @@
|
||||
M.AdjustStun(-20, 0)
|
||||
M.AdjustKnockdown(-20, 0)
|
||||
M.AdjustUnconscious(-20, 0)
|
||||
if(holder.has_reagent("mindbreaker"))
|
||||
holder.remove_reagent("mindbreaker", 5)
|
||||
if(holder.has_reagent(/datum/reagent/toxin/mindbreaker))
|
||||
holder.remove_reagent(/datum/reagent/toxin/mindbreaker, 5)
|
||||
M.hallucination = max(0, M.hallucination - 10)
|
||||
if(prob(30))
|
||||
M.adjustToxLoss(1, 0)
|
||||
@@ -112,10 +112,10 @@
|
||||
|
||||
/datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/carbon/M)
|
||||
M.drowsyness = max(M.drowsyness-5, 0)
|
||||
if(holder.has_reagent("mindbreaker"))
|
||||
holder.remove_reagent("mindbreaker", 5)
|
||||
if(holder.has_reagent("histamine"))
|
||||
holder.remove_reagent("histamine", 5)
|
||||
if(holder.has_reagent(/datum/reagent/toxin/mindbreaker))
|
||||
holder.remove_reagent(/datum/reagent/toxin/mindbreaker, 5)
|
||||
if(holder.has_reagent(/datum/reagent/toxin/histamine))
|
||||
holder.remove_reagent(/datum/reagent/toxin/histamine, 5)
|
||||
M.hallucination = max(0, M.hallucination - 10)
|
||||
if(prob(30))
|
||||
M.adjustToxLoss(1, 0)
|
||||
@@ -374,12 +374,12 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
/datum/reagent/medicine/salglu_solution/overdose_process(mob/living/M)
|
||||
if(prob(3))
|
||||
to_chat(M, "<span class = 'warning'>You feel salty.</span>")
|
||||
holder.add_reagent("sodiumchloride", 1)
|
||||
holder.remove_reagent("salglu_solution", 0.5)
|
||||
holder.add_reagent(/datum/reagent/consumable/sodiumchloride, 1)
|
||||
holder.remove_reagent(/datum/reagent/medicine/salglu_solution, 0.5)
|
||||
else if(prob(3))
|
||||
to_chat(M, "<span class = 'warning'>You feel sweet.</span>")
|
||||
holder.add_reagent("sugar", 1)
|
||||
holder.remove_reagent("salglu_solution", 0.5)
|
||||
holder.add_reagent(/datum/reagent/consumable/sugar, 1)
|
||||
holder.remove_reagent(/datum/reagent/medicine/salglu_solution, 0.5)
|
||||
if(prob(33))
|
||||
M.adjustBruteLoss(0.5*REM, 0)
|
||||
M.adjustFireLoss(0.5*REM, 0)
|
||||
@@ -473,9 +473,10 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
/datum/reagent/medicine/charcoal/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustToxLoss(-2*REM, 0)
|
||||
. = 1
|
||||
for(var/datum/reagent/R in M.reagents.reagent_list)
|
||||
for(var/A in M.reagents.reagent_list)
|
||||
var/datum/reagent/R = A
|
||||
if(R != src)
|
||||
M.reagents.remove_reagent(R.id,1)
|
||||
M.reagents.remove_reagent(R.type,1)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/omnizine
|
||||
@@ -516,9 +517,10 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
pH = 1.5
|
||||
|
||||
/datum/reagent/medicine/calomel/on_mob_life(mob/living/carbon/M)
|
||||
for(var/datum/reagent/R in M.reagents.reagent_list)
|
||||
for(var/A in M.reagents.reagent_list)
|
||||
var/datum/reagent/R = A
|
||||
if(R != src)
|
||||
M.reagents.remove_reagent(R.id,2.5)
|
||||
M.reagents.remove_reagent(R.type,2.5)
|
||||
if(M.health > 20)
|
||||
M.adjustToxLoss(2.5*REM, 0)
|
||||
. = 1
|
||||
@@ -565,9 +567,10 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
/datum/reagent/medicine/pen_acid/on_mob_life(mob/living/carbon/M)
|
||||
M.radiation -= max(M.radiation-RAD_MOB_SAFE, 0)/50
|
||||
M.adjustToxLoss(-2*REM, 0, healtoxinlover)
|
||||
for(var/datum/reagent/R in M.reagents.reagent_list)
|
||||
for(var/A in M.reagents.reagent_list)
|
||||
var/datum/reagent/R = A
|
||||
if(R != src)
|
||||
M.reagents.remove_reagent(R.id,2)
|
||||
M.reagents.remove_reagent(R.type,2)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
@@ -708,7 +711,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
if(prob(10))
|
||||
M.drowsyness += 1
|
||||
M.jitteriness -= 1
|
||||
M.reagents.remove_reagent("histamine",3)
|
||||
M.reagents.remove_reagent(/datum/reagent/toxin/histamine,3)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/morphine
|
||||
@@ -966,8 +969,8 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
|
||||
|
||||
/datum/reagent/medicine/neurine/on_mob_life(mob/living/carbon/C)
|
||||
if(holder.has_reagent("neurotoxin"))
|
||||
holder.remove_reagent("neurotoxin", 5)
|
||||
if(holder.has_reagent(/datum/reagent/consumable/ethanol/neurotoxin))
|
||||
holder.remove_reagent(/datum/reagent/consumable/ethanol/neurotoxin, 5)
|
||||
if(prob(15))
|
||||
C.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC)
|
||||
..()
|
||||
@@ -1058,7 +1061,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
/datum/reagent/medicine/insulin/on_mob_life(mob/living/carbon/M)
|
||||
if(M.AdjustSleeping(-20, FALSE))
|
||||
. = 1
|
||||
M.reagents.remove_reagent("sugar", 3)
|
||||
M.reagents.remove_reagent(/datum/reagent/consumable/sugar, 3)
|
||||
..()
|
||||
|
||||
//Trek Chems, used primarily by medibots. Only heals a specific damage type, but is very efficient.
|
||||
@@ -1132,7 +1135,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
/datum/reagent/medicine/antitoxin/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustToxLoss(-2*REM, 0)
|
||||
for(var/datum/reagent/toxin/R in M.reagents.reagent_list)
|
||||
M.reagents.remove_reagent(R.id,1)
|
||||
M.reagents.remove_reagent(R.type,1)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
@@ -1302,7 +1305,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
|
||||
/datum/reagent/medicine/haloperidol/on_mob_life(mob/living/carbon/M)
|
||||
for(var/datum/reagent/drug/R in M.reagents.reagent_list)
|
||||
M.reagents.remove_reagent(R.id,5)
|
||||
M.reagents.remove_reagent(R.type,5)
|
||||
M.drowsyness += 2
|
||||
if(M.jitteriness >= 3)
|
||||
M.jitteriness -= 3
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
if(data["blood_DNA"])
|
||||
B.blood_DNA[data["blood_DNA"]] = data["blood_type"]
|
||||
if(!B.reagents)
|
||||
B.reagents.add_reagent(id, reac_volume)
|
||||
B.reagents.add_reagent(type, reac_volume)
|
||||
B.update_icon()
|
||||
|
||||
/datum/reagent/blood/on_new(list/data)
|
||||
@@ -392,9 +392,9 @@
|
||||
remove_servant_of_ratvar(M)
|
||||
M.jitteriness = 0
|
||||
M.stuttering = 0
|
||||
holder.remove_reagent(id, volume) // maybe this is a little too perfect and a max() cap on the statuses would be better??
|
||||
holder.del_reagent(type) // maybe this is a little too perfect and a max() cap on the statuses would be better??
|
||||
return
|
||||
holder.remove_reagent(id, 0.4) //fixed consumption to prevent balancing going out of whack
|
||||
holder.remove_reagent(type, 0.4) //fixed consumption to prevent balancing going out of whack
|
||||
|
||||
/datum/reagent/water/holywater/reaction_turf(turf/T, reac_volume)
|
||||
..()
|
||||
@@ -414,7 +414,7 @@
|
||||
|
||||
/datum/reagent/fuel/unholywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
M.reagents.add_reagent(id,reac_volume/4)
|
||||
M.reagents.add_reagent(type, reac_volume/4)
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -437,7 +437,7 @@
|
||||
M.adjustFireLoss(2, 0)
|
||||
M.adjustOxyLoss(2, 0)
|
||||
M.adjustBruteLoss(2, 0)
|
||||
holder.remove_reagent(id, 1)
|
||||
holder.remove_reagent(type, 1)
|
||||
return TRUE
|
||||
|
||||
/datum/reagent/hellwater //if someone has this in their system they've really pissed off an eldrich god
|
||||
@@ -452,7 +452,7 @@
|
||||
M.adjustToxLoss(1, 0)
|
||||
M.adjustFireLoss(1, 0) //Hence the other damages... ain't I a bastard?
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5, 150)
|
||||
holder.remove_reagent(id, 1)
|
||||
holder.remove_reagent(type, 1)
|
||||
pH = 0.1
|
||||
|
||||
/datum/reagent/fuel/holyoil //Its oil
|
||||
@@ -481,7 +481,7 @@
|
||||
M.adjustToxLoss(3, 0)
|
||||
M.adjustOxyLoss(2, 0)
|
||||
M.adjustStaminaLoss(10, 0)
|
||||
holder.remove_reagent(id, 1)
|
||||
holder.remove_reagent(type, 1)
|
||||
return TRUE
|
||||
|
||||
//We only get 30u to start with...
|
||||
@@ -815,7 +815,7 @@
|
||||
to_chat(H, "<span class='warning'>Your jelly shifts and morphs, turning you into another subspecies!</span>")
|
||||
var/species_type = pick(subtypesof(/datum/species/jelly))
|
||||
H.set_species(species_type)
|
||||
H.reagents.del_reagent(id)
|
||||
H.reagents.del_reagent(type)
|
||||
|
||||
switch(current_cycle)
|
||||
if(1 to 6)
|
||||
@@ -830,7 +830,7 @@
|
||||
if(20 to INFINITY)
|
||||
var/species_type = pick(subtypesof(/datum/species/jelly))
|
||||
H.set_species(species_type)
|
||||
H.reagents.del_reagent(id)
|
||||
H.reagents.del_reagent(type)
|
||||
to_chat(H, "<span class='warning'>You've become \a jellyperson!</span>")
|
||||
|
||||
/datum/reagent/mulligan
|
||||
@@ -1089,7 +1089,7 @@
|
||||
var/obj/effect/decal/cleanable/greenglow/GG = locate() in T.contents
|
||||
if(!GG)
|
||||
GG = new/obj/effect/decal/cleanable/greenglow(T)
|
||||
GG.reagents.add_reagent("radium", reac_volume)
|
||||
GG.reagents.add_reagent(/datum/reagent/radium, reac_volume)
|
||||
|
||||
/datum/reagent/space_cleaner/sterilizine
|
||||
name = "Sterilizine"
|
||||
@@ -1127,7 +1127,7 @@
|
||||
/datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(M.has_bane(BANE_IRON)) //If the target is weak to cold iron, then poison them.
|
||||
if(holder && holder.chem_temp < 100) // COLD iron.
|
||||
M.reagents.add_reagent("toxin", reac_volume)
|
||||
M.reagents.add_reagent(/datum/reagent/toxin, reac_volume)
|
||||
..()
|
||||
|
||||
/datum/reagent/iron/overdose_start(mob/living/M)
|
||||
@@ -1159,7 +1159,7 @@
|
||||
|
||||
/datum/reagent/silver/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(M.has_bane(BANE_SILVER))
|
||||
M.reagents.add_reagent("toxin", reac_volume)
|
||||
M.reagents.add_reagent(/datum/reagent/toxin, reac_volume)
|
||||
..()
|
||||
|
||||
/datum/reagent/uranium
|
||||
@@ -1181,7 +1181,7 @@
|
||||
var/obj/effect/decal/cleanable/greenglow/GG = locate() in T.contents
|
||||
if(!GG)
|
||||
GG = new/obj/effect/decal/cleanable/greenglow(T)
|
||||
GG.reagents.add_reagent("uranium", reac_volume)
|
||||
GG.reagents.add_reagent(/datum/reagent/uranium, reac_volume)
|
||||
|
||||
/datum/reagent/bluespace
|
||||
name = "Bluespace Dust"
|
||||
@@ -1527,7 +1527,7 @@
|
||||
/datum/reagent/stimulum/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustStaminaLoss(-2*REM, 0)
|
||||
current_cycle++
|
||||
holder.remove_reagent(id, 0.99) //Gives time for the next tick of life().
|
||||
holder.remove_reagent(type, 0.99) //Gives time for the next tick of life().
|
||||
. = TRUE //Update status effects.
|
||||
|
||||
/datum/reagent/nitryl
|
||||
|
||||
@@ -190,8 +190,8 @@
|
||||
|
||||
|
||||
/datum/reagent/cryostylane/on_mob_life(mob/living/carbon/M) //TODO: code freezing into an ice cube
|
||||
if(M.reagents.has_reagent("oxygen"))
|
||||
M.reagents.remove_reagent("oxygen", 0.5)
|
||||
if(M.reagents.has_reagent(/datum/reagent/oxygen))
|
||||
M.reagents.remove_reagent(/datum/reagent/oxygen, 0.5)
|
||||
M.adjust_bodytemperature(-15)
|
||||
..()
|
||||
|
||||
@@ -209,8 +209,8 @@
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/pyrosium/on_mob_life(mob/living/carbon/M)
|
||||
if(M.reagents.has_reagent("oxygen"))
|
||||
M.reagents.remove_reagent("oxygen", 0.5)
|
||||
if(M.reagents.has_reagent(/datum/reagent/oxygen))
|
||||
M.reagents.remove_reagent(/datum/reagent/oxygen, 0.5)
|
||||
M.adjust_bodytemperature(15)
|
||||
..()
|
||||
|
||||
|
||||
@@ -66,8 +66,8 @@
|
||||
pH = 4
|
||||
|
||||
/datum/reagent/toxin/plasma/on_mob_life(mob/living/carbon/C)
|
||||
if(holder.has_reagent("epinephrine"))
|
||||
holder.remove_reagent("epinephrine", 2*REM)
|
||||
if(holder.has_reagent(/datum/reagent/medicine/epinephrine))
|
||||
holder.remove_reagent(/datum/reagent/medicine/epinephrine, 2*REM)
|
||||
C.adjustPlasma(20)
|
||||
return ..()
|
||||
|
||||
@@ -437,8 +437,8 @@
|
||||
|
||||
/datum/reagent/toxin/formaldehyde/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(5))
|
||||
holder.add_reagent("histamine", pick(5,15))
|
||||
holder.remove_reagent("formaldehyde", 1.2)
|
||||
holder.add_reagent(/datum/reagent/toxin/histamine, pick(5,15))
|
||||
holder.remove_reagent(type, 1.2)
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -456,8 +456,8 @@
|
||||
M.adjustBruteLoss((0.3*volume)*REM, 0)
|
||||
. = 1
|
||||
if(prob(15))
|
||||
M.reagents.add_reagent("histamine", pick(5,10))
|
||||
M.reagents.remove_reagent("venom", 1.1)
|
||||
M.reagents.add_reagent(/datum/reagent/toxin/histamine, pick(5,10))
|
||||
M.reagents.remove_reagent(type, 1.1)
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -518,7 +518,7 @@
|
||||
|
||||
/datum/reagent/toxin/itching_powder/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
M.reagents.add_reagent("itching_powder", reac_volume)
|
||||
M.reagents.add_reagent(/datum/reagent/toxin/itching_powder, reac_volume)
|
||||
|
||||
/datum/reagent/toxin/itching_powder/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(15))
|
||||
@@ -534,8 +534,8 @@
|
||||
M.adjustBruteLoss(0.2*REM, 0)
|
||||
. = 1
|
||||
if(prob(3))
|
||||
M.reagents.add_reagent("histamine",rand(1,3))
|
||||
M.reagents.remove_reagent("itching_powder",1.2)
|
||||
M.reagents.add_reagent(/datum/reagent/toxin/histamine,rand(1,3))
|
||||
M.reagents.remove_reagent(type,1.2)
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -680,7 +680,7 @@
|
||||
C.vomit(10, prob(10), prob(50), rand(0,4), TRUE, prob(30))
|
||||
for(var/datum/reagent/toxin/R in C.reagents.reagent_list)
|
||||
if(R != src)
|
||||
C.reagents.remove_reagent(R.id,1)
|
||||
C.reagents.remove_reagent(R.type,1)
|
||||
|
||||
/datum/reagent/toxin/spewium/overdose_process(mob/living/carbon/C)
|
||||
. = ..()
|
||||
@@ -799,10 +799,10 @@
|
||||
|
||||
/datum/reagent/toxin/anacea/on_mob_life(mob/living/carbon/M)
|
||||
var/remove_amt = 5
|
||||
if(holder.has_reagent("calomel") || holder.has_reagent("pen_acid") || holder.has_reagent("pen_jelly"))
|
||||
if(holder.has_reagent(/datum/reagent/medicine/calomel) || holder.has_reagent(/datum/reagent/medicine/pen_acid) || holder.has_reagent(/datum/reagent/medicine/pen_acid/pen_jelly))
|
||||
remove_amt = 0.5
|
||||
for(var/datum/reagent/medicine/R in M.reagents.reagent_list)
|
||||
M.reagents.remove_reagent(R.id,remove_amt)
|
||||
M.reagents.remove_reagent(R.type,remove_amt)
|
||||
return ..()
|
||||
|
||||
//ACID
|
||||
@@ -869,7 +869,7 @@
|
||||
|
||||
/datum/reagent/toxin/delayed/on_mob_life(mob/living/carbon/M)
|
||||
if(current_cycle > delay)
|
||||
holder.remove_reagent(id, actual_metaboliztion_rate * M.metabolism_efficiency)
|
||||
holder.remove_reagent(type, actual_metaboliztion_rate * M.metabolism_efficiency)
|
||||
M.adjustToxLoss(actual_toxpwr*REM, 0)
|
||||
if(prob(10))
|
||||
M.Knockdown(20, 0)
|
||||
|
||||
@@ -70,10 +70,10 @@
|
||||
|
||||
/datum/chemical_reaction/synthtissue
|
||||
name = "Synthtissue"
|
||||
id = "synthtissue"
|
||||
results = list("synthtissue" = 5)
|
||||
required_reagents = list("synthflesh" = 1)
|
||||
required_catalysts = list("sugar" = 0.1)
|
||||
id = /datum/reagent/synthtissue
|
||||
results = list(/datum/reagent/synthtissue = 5)
|
||||
required_reagents = list(/datum/reagent/medicine/synthflesh = 1)
|
||||
required_catalysts = list(/datum/reagent/consumable/sugar = 0.1)
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 305 // Lower area of bell curve for determining heat based rate reactions
|
||||
OptimalTempMax = 315 // Upper end for above
|
||||
@@ -91,13 +91,13 @@
|
||||
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("sugar")
|
||||
var/datum/reagent/synthtissue/St = holder.has_reagent(/datum/reagent/synthtissue)
|
||||
var/datum/reagent/N = holder.has_reagent(/datum/reagent/consumable/sugar)
|
||||
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)
|
||||
holder.remove_reagent(id, added_volume*temp_ratio)
|
||||
if(St.purity < 1)
|
||||
St.volume *= St.purity
|
||||
St.purity = 1
|
||||
|
||||
@@ -33,9 +33,9 @@
|
||||
strengthdiv = 2
|
||||
|
||||
/datum/chemical_reaction/reagent_explosion/nitroglycerin/on_reaction(datum/reagents/holder, created_volume)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
|
||||
return
|
||||
holder.remove_reagent("nitroglycerin", created_volume*2)
|
||||
holder.remove_reagent(/datum/reagent/nitroglycerin, created_volume*2)
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/reagent_explosion/nitroglycerin_explosion
|
||||
@@ -191,9 +191,9 @@
|
||||
required_reagents = list("mercury" = 1, "oxygen" = 1, "nitrogen" = 1, "carbon" = 1)
|
||||
|
||||
/datum/chemical_reaction/sorium/on_reaction(datum/reagents/holder, created_volume)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
|
||||
return
|
||||
holder.remove_reagent("sorium", created_volume*4)
|
||||
holder.remove_reagent(/datum/reagent/sorium, created_volume*4)
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
var/range = CLAMP(sqrt(created_volume*4), 1, 6)
|
||||
goonchem_vortex(T, 1, range)
|
||||
@@ -216,9 +216,9 @@
|
||||
required_reagents = list("stable_plasma" = 1, "radium" = 1, "carbon" = 1)
|
||||
|
||||
/datum/chemical_reaction/liquid_dark_matter/on_reaction(datum/reagents/holder, created_volume)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
|
||||
return
|
||||
holder.remove_reagent("liquid_dark_matter", created_volume*3)
|
||||
holder.remove_reagent(/datum/reagent/liquid_dark_matter, created_volume*3)
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
var/range = CLAMP(sqrt(created_volume*3), 1, 6)
|
||||
goonchem_vortex(T, 0, range)
|
||||
@@ -241,7 +241,7 @@
|
||||
required_reagents = list("aluminium" = 1, "potassium" = 1, "sulfur" = 1 )
|
||||
|
||||
/datum/chemical_reaction/flash_powder/on_reaction(datum/reagents/holder, created_volume)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
|
||||
return
|
||||
var/location = get_turf(holder.my_atom)
|
||||
do_sparks(2, TRUE, location)
|
||||
@@ -255,7 +255,7 @@
|
||||
C.Knockdown(60)
|
||||
else
|
||||
C.Stun(100)
|
||||
holder.remove_reagent("flash_powder", created_volume*3)
|
||||
holder.remove_reagent(/datum/reagent/flash_powder, created_volume*3)
|
||||
|
||||
/datum/chemical_reaction/flash_powder_flash
|
||||
name = "Flash powder activation"
|
||||
@@ -284,9 +284,9 @@
|
||||
required_reagents = list("potassium" = 1, "sugar" = 1, "phosphorus" = 1)
|
||||
|
||||
/datum/chemical_reaction/smoke_powder/on_reaction(datum/reagents/holder, created_volume)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
|
||||
return
|
||||
holder.remove_reagent("smoke_powder", created_volume*3)
|
||||
holder.remove_reagent(/datum/reagent/smoke_powder, created_volume*3)
|
||||
var/smoke_radius = round(sqrt(created_volume * 1.5), 1)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
var/datum/effect_system/smoke_spread/chem/S = new
|
||||
@@ -301,7 +301,7 @@
|
||||
/datum/chemical_reaction/smoke_powder_smoke
|
||||
name = "smoke_powder_smoke"
|
||||
id = "smoke_powder_smoke"
|
||||
required_reagents = list("smoke_powder" = 1)
|
||||
required_reagents = list(/datum/reagent/smoke_powder = 1)
|
||||
required_temp = 374
|
||||
mob_react = FALSE
|
||||
|
||||
@@ -324,9 +324,9 @@
|
||||
required_reagents = list("oxygen" = 1, "cola" = 1, "phosphorus" = 1)
|
||||
|
||||
/datum/chemical_reaction/sonic_powder/on_reaction(datum/reagents/holder, created_volume)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
|
||||
return
|
||||
holder.remove_reagent("sonic_powder", created_volume*3)
|
||||
holder.remove_reagent(/datum/reagent/sonic_powder, created_volume*3)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
playsound(location, 'sound/effects/bang.ogg', 25, 1)
|
||||
for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/3, location))
|
||||
@@ -351,7 +351,7 @@
|
||||
required_reagents = list("phosphorus" = 1, "sacid" = 1, "stable_plasma" = 1)
|
||||
|
||||
/datum/chemical_reaction/phlogiston/on_reaction(datum/reagents/holder, created_volume)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
|
||||
return
|
||||
var/turf/open/T = get_turf(holder.my_atom)
|
||||
if(istype(T))
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
if(spawned_disease)
|
||||
var/datum/disease/F = new spawned_disease()
|
||||
var/list/data = list("blood_DNA" = "UNKNOWN DNA", "blood_type" = "SY","viruses"= list(F))
|
||||
reagents.add_reagent("blood", disease_amount, data)
|
||||
reagents.add_reagent(/datum/reagent/blood, disease_amount, data)
|
||||
|
||||
add_initial_reagents()
|
||||
|
||||
|
||||
@@ -13,12 +13,12 @@
|
||||
/obj/item/reagent_containers/blood/Initialize()
|
||||
. = ..()
|
||||
if(blood_type != 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))
|
||||
reagents.add_reagent(/datum/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)
|
||||
if(reagents)
|
||||
var/datum/reagent/blood/B = reagents.has_reagent("blood")
|
||||
var/datum/reagent/blood/B = reagents.has_reagent(/datum/reagent/blood)
|
||||
if(B && B.data && B.data["blood_type"])
|
||||
blood_type = B.data["blood_type"]
|
||||
color_to_apply = bloodtype_to_color(blood_type)
|
||||
|
||||
@@ -26,7 +26,8 @@ Borg Hypospray
|
||||
var/bypass_protection = 0 //If the hypospray can go through armor or thick material
|
||||
|
||||
var/list/datum/reagents/reagent_list = list()
|
||||
var/list/reagent_ids = list("dexalin", "kelotane", "bicaridine", "antitoxin", "epinephrine", "spaceacillin", "salglu_solution")
|
||||
var/list/reagent_ids = list(/datum/reagent/medicine/dexalin, /datum/reagent/medicine/kelotane, /datum/reagent/medicine/bicaridine, /datum/reagent/medicine/antitoxin,
|
||||
/datum/reagent/medicine/epinephrine, /datum/reagent/medicine/spaceacillin, /datum/reagent/medicine/salglu_solution)
|
||||
var/accepts_reagent_upgrades = TRUE //If upgrades can increase number of reagents dispensed.
|
||||
var/list/modes = list() //Basically the inverse of reagent_ids. Instead of having numbers as "keys" and strings as values it has strings as keys and numbers as values.
|
||||
//Used as list for input() in shakers.
|
||||
@@ -141,19 +142,19 @@ Borg Hypospray
|
||||
|
||||
/obj/item/reagent_containers/borghypo/hacked
|
||||
icon_state = "borghypo_s"
|
||||
reagent_ids = list ("facid", "mutetoxin", "cyanide", "sodium_thiopental", "heparin", "lexorin")
|
||||
reagent_ids = list (/datum/reagent/toxin/acid, /datum/reagent/toxin/mutetoxin, /datum/reagent/toxin/cyanide, /datum/reagent/toxin/sodium_thiopental, /datum/reagent/toxin/heparin, /datum/reagent/toxin/lexorin)
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
/obj/item/reagent_containers/borghypo/clown
|
||||
name = "laughter injector"
|
||||
desc = "Keeps the crew happy and productive!"
|
||||
reagent_ids = list("laughter")
|
||||
reagent_ids = list(/datum/reagent/consumable/laughter)
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
/obj/item/reagent_containers/borghypo/clown/hacked
|
||||
name = "laughter injector"
|
||||
desc = "Keeps the crew so happy they don't work!"
|
||||
reagent_ids = list("superlaughter")
|
||||
reagent_ids = list(/datum/reagent/consumable/superlaughter)
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
/obj/item/reagent_containers/borghypo/syndicate
|
||||
@@ -162,7 +163,7 @@ Borg Hypospray
|
||||
icon_state = "borghypo_s"
|
||||
charge_cost = 20
|
||||
recharge_time = 2
|
||||
reagent_ids = list("syndicate_nanites", "potass_iodide", "morphine")
|
||||
reagent_ids = list(/datum/reagent/medicine/syndicate_nanites, /datum/reagent/medicine/potass_iodide, /datum/reagent/medicine/morphine)
|
||||
bypass_protection = 1
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
@@ -179,7 +180,14 @@ Borg Shaker
|
||||
recharge_time = 3
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
reagent_ids = list("beer", "orangejuice", "grenadine", "limejuice", "tomatojuice", "cola", "tonic", "sodawater", "ice", "cream", "whiskey", "vodka", "rum", "gin", "tequila", "vermouth", "wine", "kahlua", "cognac", "ale", "milk", "coffee", "banana", "lemonjuice")
|
||||
reagent_ids = list(/datum/reagent/consumable/ethanol/beer, /datum/reagent/consumable/orangejuice, /datum/reagent/consumable/grenadine,
|
||||
/datum/reagent/consumable/limejuice, /datum/reagent/consumable/tomatojuice, /datum/reagent/consumable/space_cola,
|
||||
/datum/reagent/consumable/tonic, /datum/reagent/consumable/sodawater, /datum/reagent/consumable/ice,
|
||||
/datum/reagent/consumable/cream, /datum/reagent/consumable/ethanol/whiskey, /datum/reagent/consumable/ethanol/vodka,
|
||||
/datum/reagent/consumable/ethanol/rum, /datum/reagent/consumable/ethanol/gin, /datum/reagent/consumable/ethanol/tequila,
|
||||
/datum/reagent/consumable/ethanol/vermouth, /datum/reagent/consumable/ethanol/wine, /datum/reagent/consumable/ethanol/kahlua,
|
||||
/datum/reagent/consumable/ethanol/cognac, /datum/reagent/consumable/ethanol/ale, /datum/reagent/consumable/milk,
|
||||
/datum/reagent/consumable/coffee, /datum/reagent/consumable/banana, /datum/reagent/consumable/lemonjuice)
|
||||
|
||||
/obj/item/reagent_containers/borghypo/borgshaker/attack(mob/M, mob/user)
|
||||
return //Can't inject stuff with a shaker, can we? //not with that attitude
|
||||
@@ -235,22 +243,24 @@ Borg Shaker
|
||||
recharge_time = 3
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
reagent_ids = list("fakebeer", "fernet")
|
||||
reagent_ids = list(/datum/reagent/toxin/fakebeer, /datum/reagent/consumable/ethanol/fernet)
|
||||
|
||||
/obj/item/reagent_containers/borghypo/peace
|
||||
name = "Peace Hypospray"
|
||||
|
||||
reagent_ids = list("dizzysolution","tiresolution","synthpax")
|
||||
reagent_ids = list(/datum/reagent/peaceborg_confuse, /datum/reagent/peaceborg_tire, /datum/reagent/pax/peaceborg)
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
/obj/item/reagent_containers/borghypo/peace/hacked
|
||||
desc = "Everything's peaceful in death!"
|
||||
icon_state = "borghypo_s"
|
||||
reagent_ids = list("dizzysolution","tiresolution","synthpax","tirizene","sulfonal","sodium_thiopental","cyanide","fentanyl")
|
||||
reagent_ids = list(/datum/reagent/peaceborg_confuse, /datum/reagent/peaceborg_tire, /datum/reagent/pax/peaceborg,
|
||||
/datum/reagent/toxin/staminatoxin,/datum/reagent/toxin/sulfonal,/datum/reagent/toxin/sodium_thiopental,
|
||||
/datum/reagent/toxin/cyanide,/datum/reagent/toxin/fentanyl)
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
/obj/item/reagent_containers/borghypo/epi
|
||||
name = "epinephrine injector"
|
||||
desc = "An advanced chemical synthesizer and injection system, designed to stabilize patients."
|
||||
reagent_ids = list("epinephrine")
|
||||
reagent_ids = list(/datum/reagent/medicine/epinephrine)
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
@@ -142,8 +142,9 @@
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/traitor/Initialize()
|
||||
. = ..()
|
||||
extra_reagent = pick("polonium", "histamine", "formaldehyde", "venom", "fentanyl", "cyanide")
|
||||
reagents.add_reagent("[extra_reagent]", 3)
|
||||
extra_reagent = pick(/datum/reagent/toxin/polonium, /datum/reagent/toxin/histamine, /datum/reagent/toxin/formaldehyde,
|
||||
/datum/reagent/toxin/venom, /datum/reagent/toxin/fentanyl, /datum/reagent/toxin/cyanide)
|
||||
reagents.add_reagent(extra_reagent, 3)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/polonium
|
||||
name = "polonium bottle"
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
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
|
||||
@@ -24,8 +23,6 @@
|
||||
. = ..()
|
||||
if(!icon_state)
|
||||
icon_state = "hypovial"
|
||||
for(var/R in comes_with)
|
||||
reagents.add_reagent(R,comes_with[R])
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -116,84 +113,84 @@
|
||||
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine
|
||||
name = "red hypovial (bicaridine)"
|
||||
icon_state = "hypovial-b"
|
||||
comes_with = list("bicaridine" = 30)
|
||||
list_reagents = 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)
|
||||
list_reagents = 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)
|
||||
list_reagents = 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)
|
||||
list_reagents = list("dexalin" = 30)
|
||||
|
||||
/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricord
|
||||
name = "hypovial (tricordrazine)"
|
||||
icon_state = "hypovial"
|
||||
comes_with = list("tricordrazine" = 30)
|
||||
list_reagents = 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)
|
||||
list_reagents = 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)
|
||||
list_reagents = 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)
|
||||
list_reagents = 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)
|
||||
list_reagents = 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)
|
||||
list_reagents = 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)
|
||||
list_reagents = 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)
|
||||
list_reagents = 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)
|
||||
list_reagents = 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)
|
||||
list_reagents = 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)
|
||||
list_reagents = 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)
|
||||
list_reagents = 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
|
||||
list_reagents = 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
|
||||
|
||||
@@ -73,9 +73,9 @@
|
||||
if(M.fire_stacks)
|
||||
var/minus_plus = M.fire_stacks < 0 ? 1 : -1
|
||||
var/amount = min(abs(M.fire_stacks), soak_efficiency)
|
||||
var/r_id = "fuel"
|
||||
var/r_id = /datum/reagent/fuel
|
||||
if(M.fire_stacks < 0)
|
||||
r_id = "water"
|
||||
r_id = /datum/reagent/water
|
||||
reagents.add_reagent(r_id, amount * 0.3)
|
||||
M.adjust_fire_stacks(minus_plus * amount)
|
||||
M.wash_cream()
|
||||
|
||||
@@ -52,13 +52,13 @@
|
||||
user.changeNext_move(CLICK_CD_RANGE*2)
|
||||
user.newtonian_move(get_dir(A, user))
|
||||
var/turf/T = get_turf(src)
|
||||
if(reagents.has_reagent("sacid"))
|
||||
if(reagents.has_reagent(/datum/reagent/toxin/acid))
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] fired sulphuric acid from \a [src] at [ADMIN_VERBOSEJMP(T)].")
|
||||
log_game("[key_name(user)] fired sulphuric acid from \a [src] at [AREACOORD(T)].")
|
||||
if(reagents.has_reagent("facid"))
|
||||
if(reagents.has_reagent(/datum/reagent/toxin/acid/fluacid))
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] fired Fluacid from \a [src] at [ADMIN_VERBOSEJMP(T)].")
|
||||
log_game("[key_name(user)] fired Fluacid from \a [src] at [AREACOORD(T)].")
|
||||
if(reagents.has_reagent("lube"))
|
||||
if(reagents.has_reagent(/datum/reagent/lube))
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] fired Space lube from \a [src] at [ADMIN_VERBOSEJMP(T)].")
|
||||
log_game("[key_name(user)] fired Space lube from \a [src] at [AREACOORD(T)].")
|
||||
return
|
||||
@@ -235,9 +235,9 @@
|
||||
/obj/item/reagent_containers/spray/waterflower/cyborg
|
||||
reagent_flags = NONE
|
||||
volume = 100
|
||||
list_reagents = list("water" = 100)
|
||||
list_reagents = list(/datum/reagent/water = 100)
|
||||
var/generate_amount = 5
|
||||
var/generate_type = "water"
|
||||
var/generate_type = /datum/reagent/water
|
||||
var/last_generate = 0
|
||||
var/generate_delay = 10 //deciseconds
|
||||
can_fill_from_container = FALSE
|
||||
@@ -245,9 +245,9 @@
|
||||
/obj/item/reagent_containers/spray/waterflower/cyborg/hacked
|
||||
name = "nova flower"
|
||||
desc = "This doesn't look safe at all..."
|
||||
list_reagents = list("clf3" = 3)
|
||||
list_reagents = list(/datum/reagent/clf3 = 3)
|
||||
volume = 3
|
||||
generate_type = "clf3"
|
||||
generate_type = /datum/reagent/clf3
|
||||
generate_amount = 1
|
||||
generate_delay = 40 //deciseconds
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
pressure_resistance = 2*ONE_ATMOSPHERE
|
||||
max_integrity = 300
|
||||
var/tank_volume = 1000 //In units, how much the dispenser can hold
|
||||
var/reagent_id = "water" //The ID of the reagent that the dispenser uses
|
||||
var/reagent_id = /datum/reagent/water //The ID of the reagent that the dispenser uses
|
||||
|
||||
/obj/structure/reagent_dispensers/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
|
||||
. = ..()
|
||||
@@ -58,7 +58,7 @@
|
||||
name = "firefighting foam tank"
|
||||
desc = "A tank full of firefighting foam."
|
||||
icon_state = "foam"
|
||||
reagent_id = "firefighting_foam"
|
||||
reagent_id = /datum/reagent/firefighting_foam
|
||||
tank_volume = 500
|
||||
|
||||
/obj/structure/reagent_dispensers/water_cooler
|
||||
@@ -99,7 +99,7 @@
|
||||
name = "fuel tank"
|
||||
desc = "A tank full of industrial welding fuel. Do not consume."
|
||||
icon_state = "fuel"
|
||||
reagent_id = "welding_fuel"
|
||||
reagent_id = /datum/reagent/fuel
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/high //Unused - Good for ghost roles
|
||||
name = "high-capacity fuel tank"
|
||||
@@ -136,12 +136,12 @@
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/living/user, params)
|
||||
if(istype(I, /obj/item/weldingtool))
|
||||
if(!reagents.has_reagent("welding_fuel"))
|
||||
if(!reagents.has_reagent(/datum/reagent/fuel))
|
||||
to_chat(user, "<span class='warning'>[src] is out of fuel!</span>")
|
||||
return
|
||||
var/obj/item/weldingtool/W = I
|
||||
if(!W.welding)
|
||||
if(W.reagents.has_reagent("welding_fuel", W.max_fuel))
|
||||
if(W.reagents.has_reagent(/datum/reagent/fuel, W.max_fuel))
|
||||
to_chat(user, "<span class='warning'>Your [W.name] is already full!</span>")
|
||||
return
|
||||
reagents.trans_to(W, W.max_fuel)
|
||||
@@ -171,7 +171,7 @@
|
||||
icon_state = "pepper"
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
reagent_id = "condensedcapsaicin"
|
||||
reagent_id = /datum/reagent/consumable/condensedcapsaicin
|
||||
|
||||
/obj/structure/reagent_dispensers/peppertank/Initialize()
|
||||
. = ..()
|
||||
@@ -191,7 +191,7 @@
|
||||
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"
|
||||
reagent_id = /datum/reagent/consumable/cooking_oil
|
||||
|
||||
////////
|
||||
//Kegs//
|
||||
@@ -201,7 +201,7 @@
|
||||
name = "beer keg"
|
||||
desc = "Beer is liquid bread, it's good for you..."
|
||||
icon_state = "beer"
|
||||
reagent_id = "beer"
|
||||
reagent_id = /datum/reagent/consumable/ethanol/beer
|
||||
|
||||
/obj/structure/reagent_dispensers/beerkeg/blob_act(obj/structure/blob/B)
|
||||
explosion(src.loc,0,3,5,7,10)
|
||||
@@ -213,42 +213,41 @@
|
||||
desc = "A keg."
|
||||
icon = 'modular_citadel/icons/obj/objects.dmi'
|
||||
icon_state = "keg"
|
||||
reagent_id = "water"
|
||||
|
||||
/obj/structure/reagent_dispensers/keg/mead
|
||||
name = "keg of mead"
|
||||
desc = "A keg of mead."
|
||||
icon_state = "orangekeg"
|
||||
reagent_id = "mead"
|
||||
reagent_id = /datum/reagent/consumable/ethanol/mead
|
||||
|
||||
/obj/structure/reagent_dispensers/keg/aphro
|
||||
name = "keg of aphrodisiac"
|
||||
desc = "A keg of aphrodisiac."
|
||||
icon_state = "pinkkeg"
|
||||
reagent_id = "aphro"
|
||||
reagent_id = /datum/reagent/drug/aphrodisiac
|
||||
tank_volume = 150
|
||||
|
||||
/obj/structure/reagent_dispensers/keg/aphro/strong
|
||||
name = "keg of strong aphrodisiac"
|
||||
desc = "A keg of strong and addictive aphrodisiac."
|
||||
reagent_id = "aphro+"
|
||||
reagent_id = /datum/reagent/drug/aphrodisiacplus
|
||||
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"
|
||||
reagent_id = /datum/reagent/consumable/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"
|
||||
reagent_id = /datum/reagent/consumable/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"
|
||||
reagent_id = /datum/reagent/consumable/ethanol/gargle_blaster
|
||||
tank_volume = 100
|
||||
Reference in New Issue
Block a user