diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index f8661d168e8..29a67ffe492 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -5,621 +5,618 @@ var/const/INGEST = 2 /////////////////////////////////////////////////////////////////////////////////// -datum - reagents - var/list/datum/reagent/reagent_list = new/list() - var/total_volume = 0 - var/maximum_volume = 100 - var/atom/my_atom = null +/datum/reagents + var/list/datum/reagent/reagent_list = new/list() + var/total_volume = 0 + var/maximum_volume = 100 + var/atom/my_atom = null - New(maximum=100) - maximum_volume = maximum +/datum/reagents/New(maximum=100) + maximum_volume = maximum - //I dislike having these here but map-objects are initialised before world/New() is called. >_> - if(!chemical_reagents_list) - //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id - var/paths = subtypesof(/datum/reagent) - chemical_reagents_list = list() - for(var/path in paths) - var/datum/reagent/D = new path() - chemical_reagents_list[D.id] = D - if(!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 + //I dislike having these here but map-objects are initialised before world/New() is called. >_> + if(!chemical_reagents_list) + //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id + var/paths = subtypesof(/datum/reagent) + chemical_reagents_list = list() + for(var/path in paths) + var/datum/reagent/D = new path() + chemical_reagents_list[D.id] = D + if(!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 - var/paths = subtypesof(/datum/chemical_reaction) - chemical_reactions_list = list() + var/paths = subtypesof(/datum/chemical_reaction) + chemical_reactions_list = list() - for(var/path in paths) + for(var/path in paths) - var/datum/chemical_reaction/D = new path() - var/list/reaction_ids = list() + var/datum/chemical_reaction/D = new path() + var/list/reaction_ids = list() - if(D && D.required_reagents && D.required_reagents.len) - for(var/reaction in D.required_reagents) - reaction_ids += reaction + if(D && 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 - for(var/id in reaction_ids) - if(!chemical_reactions_list[id]) - chemical_reactions_list[id] = list() - chemical_reactions_list[id] += D - break // Don't bother adding ourselves to other reagent ids, it is redundant. + // Create filters based on each reagent id in the required reagents list + for(var/id in reaction_ids) + if(!chemical_reactions_list[id]) + chemical_reactions_list[id] = list() + chemical_reactions_list[id] += D + break // Don't bother adding ourselves to other reagent ids, it is redundant. - proc +/datum/reagents/proc/remove_any(var/amount=1) + var/total_transfered = 0 + var/current_list_element = 1 - remove_any(var/amount=1) - var/total_transfered = 0 - var/current_list_element = 1 + current_list_element = rand(1,reagent_list.len) - current_list_element = rand(1,reagent_list.len) + while(total_transfered != amount) + if(total_transfered >= amount) break + if(total_volume <= 0 || !reagent_list.len) break - while(total_transfered != amount) - if(total_transfered >= amount) break - if(total_volume <= 0 || !reagent_list.len) break + if(current_list_element > reagent_list.len) current_list_element = 1 + var/datum/reagent/current_reagent = reagent_list[current_list_element] - if(current_list_element > reagent_list.len) current_list_element = 1 - var/datum/reagent/current_reagent = reagent_list[current_list_element] + src.remove_reagent(current_reagent.id, min(1, amount - total_transfered)) - src.remove_reagent(current_reagent.id, min(1, amount - total_transfered)) + current_list_element++ + total_transfered++ + src.update_total() - current_list_element++ - total_transfered++ - src.update_total() + handle_reactions() + return total_transfered - handle_reactions() - return total_transfered +/datum/reagents/proc/get_master_reagent_name() + var/the_name = null + var/the_volume = 0 + for(var/datum/reagent/A in reagent_list) + if(A.volume > the_volume) + the_volume = A.volume + the_name = A.name - get_master_reagent_name() - var/the_name = null - var/the_volume = 0 - for(var/datum/reagent/A in reagent_list) - if(A.volume > the_volume) - the_volume = A.volume - the_name = A.name + return the_name - return the_name +/datum/reagents/proc/get_master_reagent_id() + var/the_id = null + var/the_volume = 0 + for(var/datum/reagent/A in reagent_list) + if(A.volume > the_volume) + the_volume = A.volume + the_id = A.id - get_master_reagent_id() - var/the_id = null - var/the_volume = 0 - for(var/datum/reagent/A in reagent_list) - if(A.volume > the_volume) - the_volume = A.volume - the_id = A.id + return the_id - return the_id +/datum/reagents/proc/trans_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred. + if (!target ) + return + if (!target.reagents || src.total_volume<=0) + return + var/datum/reagents/R = target.reagents + amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) + var/part = amount / src.total_volume + var/trans_data = null + for (var/datum/reagent/current_reagent in src.reagent_list) + if (!current_reagent) + continue + if (current_reagent.id == "blood" && ishuman(target)) + var/mob/living/carbon/human/H = target + H.inject_blood(my_atom, amount) + continue + var/current_reagent_transfer = current_reagent.volume * part + if(preserve_data) + trans_data = copy_data(current_reagent) - trans_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred. - if (!target ) - return - if (!target.reagents || src.total_volume<=0) - return - var/datum/reagents/R = target.reagents - amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) - var/part = amount / src.total_volume - var/trans_data = null - for (var/datum/reagent/current_reagent in src.reagent_list) - if (!current_reagent) - continue - if (current_reagent.id == "blood" && ishuman(target)) - var/mob/living/carbon/human/H = target - H.inject_blood(my_atom, amount) - continue - var/current_reagent_transfer = current_reagent.volume * part - if(preserve_data) - trans_data = copy_data(current_reagent) + R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, src.chem_temp) + src.remove_reagent(current_reagent.id, current_reagent_transfer) - R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, src.chem_temp) - src.remove_reagent(current_reagent.id, current_reagent_transfer) + src.update_total() + R.update_total() + R.handle_reactions() + src.handle_reactions() + return amount - src.update_total() - R.update_total() - R.handle_reactions() - src.handle_reactions() - return amount +/datum/reagents/proc/trans_to_ingest(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//For items ingested. A delay is added between ingestion and addition of the reagents + if (!target ) + return + if (!target.reagents || src.total_volume<=0) + return - trans_to_ingest(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//For items ingested. A delay is added between ingestion and addition of the reagents - if (!target ) - return - if (!target.reagents || src.total_volume<=0) - return + var/obj/item/weapon/reagent_containers/glass/beaker/noreact/B = new /obj/item/weapon/reagent_containers/glass/beaker/noreact //temporary holder + B.volume = 1000 - var/obj/item/weapon/reagent_containers/glass/beaker/noreact/B = new /obj/item/weapon/reagent_containers/glass/beaker/noreact //temporary holder - B.volume = 1000 + var/datum/reagents/BR = B.reagents + var/datum/reagents/R = target.reagents - var/datum/reagents/BR = B.reagents - var/datum/reagents/R = target.reagents + amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) - amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) + src.trans_to(B, amount) - src.trans_to(B, amount) + spawn(-1) + src = null // Survive through deletion of the reagent holder + sleep(100) + if(!target) + return + BR.trans_to(target, BR.total_volume) + qdel(B) - spawn(-1) - src = null // Survive through deletion of the reagent holder - sleep(100) - if(!target) - return - BR.trans_to(target, BR.total_volume) - qdel(B) + return amount - return amount +/datum/reagents/proc/copy_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1, var/safety = 0) + if(!target) + return + if(!target.reagents || src.total_volume<=0) + return + var/datum/reagents/R = target.reagents + amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) + var/part = amount / src.total_volume + var/trans_data = null + for (var/datum/reagent/current_reagent in src.reagent_list) + var/current_reagent_transfer = current_reagent.volume * part + if(preserve_data) + trans_data = copy_data(current_reagent) + R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data) - copy_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1, var/safety = 0) - if(!target) - return - if(!target.reagents || src.total_volume<=0) - return - var/datum/reagents/R = target.reagents - amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume) - var/part = amount / src.total_volume - var/trans_data = null - for (var/datum/reagent/current_reagent in src.reagent_list) - var/current_reagent_transfer = current_reagent.volume * part - if(preserve_data) - trans_data = copy_data(current_reagent) - R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data) + src.update_total() + R.update_total() + R.handle_reactions() + src.handle_reactions() + return amount - src.update_total() - R.update_total() - R.handle_reactions() - src.handle_reactions() - return amount +/datum/reagents/proc/trans_id_to(var/obj/target, var/reagent, var/amount=1, var/preserve_data=1)//Not sure why this proc didn't exist before. It does now! /N + if (!target) + return + if (!target.reagents || src.total_volume<=0 || !src.get_reagent_amount(reagent)) + return - trans_id_to(var/obj/target, var/reagent, var/amount=1, var/preserve_data=1)//Not sure why this proc didn't exist before. It does now! /N - if (!target) - return - if (!target.reagents || src.total_volume<=0 || !src.get_reagent_amount(reagent)) - return + var/datum/reagents/R = target.reagents + if(src.get_reagent_amount(reagent) R.maximum_volume) return 0 + if (!target) return + var/total_transfered = 0 + var/current_list_element = 1 + var/datum/reagents/R = target.reagents + var/trans_data = null + //if(R.total_volume + amount > R.maximum_volume) return 0 - current_list_element = rand(1,reagent_list.len) //Eh, bandaid fix. + current_list_element = rand(1,reagent_list.len) //Eh, bandaid fix. - while(total_transfered != amount) - if(total_transfered >= amount) break //Better safe than sorry. - if(total_volume <= 0 || !reagent_list.len) break - if(R.total_volume >= R.maximum_volume) break + while(total_transfered != amount) + if(total_transfered >= amount) break //Better safe than sorry. + if(total_volume <= 0 || !reagent_list.len) break + if(R.total_volume >= R.maximum_volume) break - if(current_list_element > reagent_list.len) current_list_element = 1 - var/datum/reagent/current_reagent = reagent_list[current_list_element] - if(preserve_data) - trans_data = current_reagent.data - R.add_reagent(current_reagent.id, (1 * multiplier), trans_data) - src.remove_reagent(current_reagent.id, 1) + if(current_list_element > reagent_list.len) current_list_element = 1 + var/datum/reagent/current_reagent = reagent_list[current_list_element] + if(preserve_data) + trans_data = current_reagent.data + R.add_reagent(current_reagent.id, (1 * multiplier), trans_data) + src.remove_reagent(current_reagent.id, 1) - current_list_element++ - total_transfered++ - src.update_total() - R.update_total() - R.handle_reactions() - handle_reactions() + current_list_element++ + total_transfered++ + src.update_total() + R.update_total() + R.handle_reactions() + handle_reactions() - return total_transfered + return total_transfered */ - conditional_update_move(var/atom/A, var/Running = 0) - for(var/datum/reagent/R in reagent_list) - R.on_move (A, Running) - update_total() +/datum/reagents/proc/conditional_update_move(var/atom/A, var/Running = 0) + for(var/datum/reagent/R in reagent_list) + R.on_move (A, Running) + update_total() - conditional_update(var/atom/A, ) - for(var/datum/reagent/R in reagent_list) - R.on_update (A) - update_total() +/datum/reagents/proc/conditional_update(var/atom/A, ) + for(var/datum/reagent/R in reagent_list) + R.on_update (A) + update_total() + +/datum/reagents/proc/handle_reactions() + if(my_atom.flags & NOREACT) return //Yup, no reactions here. No siree. + + var/reaction_occured = 0 + do + reaction_occured = 0 + for(var/datum/reagent/R in reagent_list) // Usually a small list + for(var/reaction in chemical_reactions_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id + + if(!reaction) + continue + + var/datum/chemical_reaction/C = reaction + + var/total_required_reagents = C.required_reagents.len + var/total_matching_reagents = 0 + var/total_required_catalysts = C.required_catalysts.len + var/total_matching_catalysts= 0 + var/matching_container = 0 + var/matching_other = 0 + var/list/multipliers = new/list() + var/min_temp = C.min_temp //Minimum temperature required for the reaction to occur (heat to/above this) + var/max_temp = C.max_temp //Maximum temperature allowed for the reaction to occur (cool to/below this) + for(var/B in C.required_reagents) + if(!has_reagent(B, C.required_reagents[B])) break + total_matching_reagents++ + multipliers += round(get_reagent_amount(B) / C.required_reagents[B]) + for(var/B in C.required_catalysts) + if(!has_reagent(B, C.required_catalysts[B])) break + total_matching_catalysts++ + + if(!C.required_container) + matching_container = 1 + + else + if(my_atom.type == C.required_container) + matching_container = 1 + + if(!C.required_other) + matching_other = 1 + + else + /*if(istype(my_atom, /obj/item/slime_core)) + var/obj/item/slime_core/M = my_atom + + if(M.POWERFLAG == C.required_other && M.Uses > 0) // added a limit to slime cores -- Muskets requested this + matching_other = 1*/ + if(istype(my_atom, /obj/item/slime_extract)) + var/obj/item/slime_extract/M = my_atom + + if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this + matching_other = 1 + + if(min_temp == 0) + min_temp = chem_temp + + if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other && chem_temp <= max_temp && chem_temp >= min_temp) + var/multiplier = min(multipliers) + var/preserved_data = null + for(var/B in C.required_reagents) + if(!preserved_data) + preserved_data = get_data(B) + remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1) + + var/created_volume = C.result_amount*multiplier + if(C.result) + feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]") + multiplier = max(multiplier, 1) //this shouldnt happen ... + add_reagent(C.result, C.result_amount*multiplier) + set_data(C.result, preserved_data) + + //add secondary products + for(var/S in C.secondary_results) + add_reagent(S, C.result_amount * C.secondary_results[S] * multiplier) + + var/list/seen = viewers(4, get_turf(my_atom)) + for(var/mob/M in seen) + if(!C.no_message) + M << "\blue \icon[my_atom] [C.mix_message]" + + /* if(istype(my_atom, /obj/item/slime_core)) + var/obj/item/slime_core/ME = my_atom + ME.Uses-- + if(ME.Uses <= 0) // give the notification that the slime core is dead + for(var/mob/M in viewers(4, get_turf(my_atom)) ) + M << "\blue \icon[my_atom] The innards begin to boil!" + */ + if(istype(my_atom, /obj/item/slime_extract)) + var/obj/item/slime_extract/ME2 = my_atom + ME2.Uses-- + if(ME2.Uses <= 0) // give the notification that the slime core is dead + for(var/mob/M in seen) + M << "\blue \icon[my_atom] The [my_atom]'s power is consumed in the reaction." + ME2.name = "used slime extract" + ME2.desc = "This extract has been used up." + + playsound(get_turf(my_atom), C.mix_sound, 80, 1) + + C.on_reaction(src, created_volume) + reaction_occured = 1 + break + + while(reaction_occured) + update_total() + return 0 + +/datum/reagents/proc/isolate_reagent(var/reagent) + for(var/A in reagent_list) + var/datum/reagent/R = A + if (R.id != reagent) + del_reagent(R.id) + update_total() + +/datum/reagents/proc/del_reagent(var/reagent) + for(var/A in reagent_list) + var/datum/reagent/R = A + if (R.id == reagent) + if(istype(my_atom, /mob/living)) + var/mob/living/M = my_atom + R.reagent_deleted(M) + reagent_list -= A + qdel(A) + update_total() + my_atom.on_reagent_change() + check_ignoreslow(my_atom) + check_gofast(my_atom) + check_goreallyfast(my_atom) + return 0 + + + return 1 + +/datum/reagents/proc/update_total() + total_volume = 0 + for(var/datum/reagent/R in reagent_list) + if(R.volume < 0.1) + del_reagent(R.id) + else + total_volume += R.volume + + return 0 + +/datum/reagents/proc/clear_reagents() + for(var/datum/reagent/R in reagent_list) + del_reagent(R.id) + return 0 + +/datum/reagents/proc/reaction_check(var/mob/M, var/datum/reagent/R) + var/can_process = 0 + if(!istype(M, /mob/living)) //Non-living mobs can't metabolize reagents, so don't bother trying (runtime safety check) + return can_process + if(ishuman(M)) + var/mob/living/carbon/human/H = M + //Check if this mob's species is set and can process this type of reagent + if(H.species && H.species.reagent_tag) + if((R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN + can_process = 1 + if((R.process_flags & ORGANIC) && (H.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG + can_process = 1 + //Species with PROCESS_DUO are only affected by reagents that affect both organics and synthetics, like acid and hellwater + if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_DUO)) + can_process = 1 + //We'll assume that non-human mobs lack the ability to process synthetic-oriented reagents (adjust this if we need to change that assumption) + else + if(R.process_flags != SYNTHETIC) + can_process = 1 + return can_process + +/datum/reagents/proc/reaction(var/atom/A, var/method=TOUCH, var/volume_modifier=0) + + switch(method) + if(TOUCH) + for(var/datum/reagent/R in reagent_list) + if(ismob(A)) + spawn(0) + if(!R) return + var/check = reaction_check(A, R) + if(!check) + continue + else + R.reaction_mob(A, TOUCH, R.volume+volume_modifier) + if(isturf(A)) + spawn(0) + if(!R) return + else R.reaction_turf(A, R.volume+volume_modifier) + if(isobj(A)) + spawn(0) + if(!R) return + else R.reaction_obj(A, R.volume+volume_modifier) + if(INGEST) + for(var/datum/reagent/R in reagent_list) + if(ismob(A) && R) + spawn(0) + if(!R) return + var/check = reaction_check(A, R) + if(!check) + continue + else + R.reaction_mob(A, INGEST, R.volume+volume_modifier) + if(isturf(A) && R) + spawn(0) + if(!R) return + else R.reaction_turf(A, R.volume+volume_modifier) + if(isobj(A) && R) + spawn(0) + if(!R) return + else R.reaction_obj(A, R.volume+volume_modifier) + return + +/datum/reagents/proc/add_reagent(var/reagent, var/amount, var/list/data=null, var/reagtemp = 300) + if(!isnum(amount)) return 1 + update_total() + if(total_volume + amount > maximum_volume) amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen. + if(amount <= 0) return 0 + chem_temp = round(((amount * reagtemp) + (total_volume * chem_temp)) / (total_volume + amount)) //equalize with new chems + + for(var/A in reagent_list) + + var/datum/reagent/R = A + if (R.id == reagent) + R.volume += amount + update_total() + my_atom.on_reagent_change() +/* + // mix dem viruses + if(R.id == "blood" && reagent == "blood") + if(R.data && data) + + if(R.data["viruses"] || data["viruses"]) + + var/list/mix1 = R.data["viruses"] + var/list/mix2 = data["viruses"] + + // Stop issues with the list changing during mixing. + var/list/to_mix = list() + + for(var/datum/disease/advance/AD in mix1) + to_mix += AD + for(var/datum/disease/advance/AD in mix2) + to_mix += AD + + var/datum/disease/advance/AD = Advance_Mix(to_mix) + if(AD) + var/list/preserve = list(AD) + for(var/D in R.data["viruses"]) + if(!istype(D, /datum/disease/advance)) + preserve += D + R.data["viruses"] = preserve +*/ handle_reactions() - if(my_atom.flags & NOREACT) return //Yup, no reactions here. No siree. + return 0 - var/reaction_occured = 0 - do - reaction_occured = 0 - for(var/datum/reagent/R in reagent_list) // Usually a small list - for(var/reaction in chemical_reactions_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id + var/datum/reagent/D = chemical_reagents_list[reagent] + if(D) - if(!reaction) - continue - - var/datum/chemical_reaction/C = reaction - - var/total_required_reagents = C.required_reagents.len - var/total_matching_reagents = 0 - var/total_required_catalysts = C.required_catalysts.len - var/total_matching_catalysts= 0 - var/matching_container = 0 - var/matching_other = 0 - var/list/multipliers = new/list() - var/min_temp = C.min_temp //Minimum temperature required for the reaction to occur (heat to/above this) - var/max_temp = C.max_temp //Maximum temperature allowed for the reaction to occur (cool to/below this) - for(var/B in C.required_reagents) - if(!has_reagent(B, C.required_reagents[B])) break - total_matching_reagents++ - multipliers += round(get_reagent_amount(B) / C.required_reagents[B]) - for(var/B in C.required_catalysts) - if(!has_reagent(B, C.required_catalysts[B])) break - total_matching_catalysts++ - - if(!C.required_container) - matching_container = 1 - - else - if(my_atom.type == C.required_container) - matching_container = 1 - - if(!C.required_other) - matching_other = 1 - - else - /*if(istype(my_atom, /obj/item/slime_core)) - var/obj/item/slime_core/M = my_atom - - if(M.POWERFLAG == C.required_other && M.Uses > 0) // added a limit to slime cores -- Muskets requested this - matching_other = 1*/ - if(istype(my_atom, /obj/item/slime_extract)) - var/obj/item/slime_extract/M = my_atom - - if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this - matching_other = 1 - - if(min_temp == 0) - min_temp = chem_temp - - if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other && chem_temp <= max_temp && chem_temp >= min_temp) - var/multiplier = min(multipliers) - var/preserved_data = null - for(var/B in C.required_reagents) - if(!preserved_data) - preserved_data = get_data(B) - remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1) - - var/created_volume = C.result_amount*multiplier - if(C.result) - feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]") - multiplier = max(multiplier, 1) //this shouldnt happen ... - add_reagent(C.result, C.result_amount*multiplier) - set_data(C.result, preserved_data) - - //add secondary products - for(var/S in C.secondary_results) - add_reagent(S, C.result_amount * C.secondary_results[S] * multiplier) - - var/list/seen = viewers(4, get_turf(my_atom)) - for(var/mob/M in seen) - if(!C.no_message) - M << "\blue \icon[my_atom] [C.mix_message]" - - /* if(istype(my_atom, /obj/item/slime_core)) - var/obj/item/slime_core/ME = my_atom - ME.Uses-- - if(ME.Uses <= 0) // give the notification that the slime core is dead - for(var/mob/M in viewers(4, get_turf(my_atom)) ) - M << "\blue \icon[my_atom] The innards begin to boil!" - */ - if(istype(my_atom, /obj/item/slime_extract)) - var/obj/item/slime_extract/ME2 = my_atom - ME2.Uses-- - if(ME2.Uses <= 0) // give the notification that the slime core is dead - for(var/mob/M in seen) - M << "\blue \icon[my_atom] The [my_atom]'s power is consumed in the reaction." - ME2.name = "used slime extract" - ME2.desc = "This extract has been used up." - - playsound(get_turf(my_atom), C.mix_sound, 80, 1) - - C.on_reaction(src, created_volume) - reaction_occured = 1 - break - - while(reaction_occured) - update_total() - return 0 - - isolate_reagent(var/reagent) - for(var/A in reagent_list) - var/datum/reagent/R = A - if (R.id != reagent) - del_reagent(R.id) - update_total() - - del_reagent(var/reagent) - for(var/A in reagent_list) - var/datum/reagent/R = A - if (R.id == reagent) - if(istype(my_atom, /mob/living)) - var/mob/living/M = my_atom - R.reagent_deleted(M) - reagent_list -= A - qdel(A) - update_total() - my_atom.on_reagent_change() - check_ignoreslow(my_atom) - check_gofast(my_atom) - check_goreallyfast(my_atom) - return 0 - - - return 1 - - update_total() - total_volume = 0 - for(var/datum/reagent/R in reagent_list) - if(R.volume < 0.1) - del_reagent(R.id) - else - total_volume += R.volume - - return 0 - - clear_reagents() - for(var/datum/reagent/R in reagent_list) - del_reagent(R.id) - return 0 - - reaction_check(var/mob/M, var/datum/reagent/R) - var/can_process = 0 - if(!istype(M, /mob/living)) //Non-living mobs can't metabolize reagents, so don't bother trying (runtime safety check) - return can_process - if(ishuman(M)) - var/mob/living/carbon/human/H = M - //Check if this mob's species is set and can process this type of reagent - if(H.species && H.species.reagent_tag) - if((R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN - can_process = 1 - if((R.process_flags & ORGANIC) && (H.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG - can_process = 1 - //Species with PROCESS_DUO are only affected by reagents that affect both organics and synthetics, like acid and hellwater - if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_DUO)) - can_process = 1 - //We'll assume that non-human mobs lack the ability to process synthetic-oriented reagents (adjust this if we need to change that assumption) - else - if(R.process_flags != SYNTHETIC) - can_process = 1 - return can_process - - reaction(var/atom/A, var/method=TOUCH, var/volume_modifier=0) - - switch(method) - if(TOUCH) - for(var/datum/reagent/R in reagent_list) - if(ismob(A)) - spawn(0) - if(!R) return - var/check = reaction_check(A, R) - if(!check) - continue - else - R.reaction_mob(A, TOUCH, R.volume+volume_modifier) - if(isturf(A)) - spawn(0) - if(!R) return - else R.reaction_turf(A, R.volume+volume_modifier) - if(isobj(A)) - spawn(0) - if(!R) return - else R.reaction_obj(A, R.volume+volume_modifier) - if(INGEST) - for(var/datum/reagent/R in reagent_list) - if(ismob(A) && R) - spawn(0) - if(!R) return - var/check = reaction_check(A, R) - if(!check) - continue - else - R.reaction_mob(A, INGEST, R.volume+volume_modifier) - if(isturf(A) && R) - spawn(0) - if(!R) return - else R.reaction_turf(A, R.volume+volume_modifier) - if(isobj(A) && R) - spawn(0) - if(!R) return - else R.reaction_obj(A, R.volume+volume_modifier) - return - - add_reagent(var/reagent, var/amount, var/list/data=null, var/reagtemp = 300) - if(!isnum(amount)) return 1 - update_total() - if(total_volume + amount > maximum_volume) amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen. - if(amount <= 0) return 0 - chem_temp = round(((amount * reagtemp) + (total_volume * chem_temp)) / (total_volume + amount)) //equalize with new chems - - for(var/A in reagent_list) - - var/datum/reagent/R = A - if (R.id == reagent) - R.volume += amount - update_total() - my_atom.on_reagent_change() -/* - // mix dem viruses - if(R.id == "blood" && reagent == "blood") - if(R.data && data) - - if(R.data["viruses"] || data["viruses"]) - - var/list/mix1 = R.data["viruses"] - var/list/mix2 = data["viruses"] - - // Stop issues with the list changing during mixing. - var/list/to_mix = list() - - for(var/datum/disease/advance/AD in mix1) - to_mix += AD - for(var/datum/disease/advance/AD in mix2) - to_mix += AD - - var/datum/disease/advance/AD = Advance_Mix(to_mix) - if(AD) - var/list/preserve = list(AD) - for(var/D in R.data["viruses"]) - if(!istype(D, /datum/disease/advance)) - preserve += D - R.data["viruses"] = preserve -*/ - - handle_reactions() - return 0 - - var/datum/reagent/D = chemical_reagents_list[reagent] - if(D) - - var/datum/reagent/R = new D.type() - reagent_list += R - R.holder = src - R.volume = amount + var/datum/reagent/R = new D.type() + reagent_list += R + R.holder = src + R.volume = amount // SetViruses(R, data) // Includes setting data - if(data) R.data = data - //debug - //world << "Adding data" - //for(var/D in R.data) - // world << "Container data: [D] = [R.data[D]]" - //debug - update_total() - my_atom.on_reagent_change() - handle_reactions() - return 0 - else - warning("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])") + if(data) R.data = data + //debug + //world << "Adding data" + //for(var/D in R.data) + // world << "Container data: [D] = [R.data[D]]" + //debug + update_total() + my_atom.on_reagent_change() + handle_reactions() + return 0 + else + warning("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])") + handle_reactions() + + return 1 + +/datum/reagents/proc/remove_reagent(var/reagent, var/amount, var/safety)//Added a safety check for the trans_id_to + + if(!isnum(amount)) return 1 + + for(var/A in reagent_list) + var/datum/reagent/R = A + if (R.id == reagent) + R.volume -= amount + update_total() + if(!safety)//So it does not handle reactions when it need not to handle_reactions() + my_atom.on_reagent_change() + return 0 - return 1 + return 1 - remove_reagent(var/reagent, var/amount, var/safety)//Added a safety check for the trans_id_to +/datum/reagents/proc/has_reagent(var/reagent, var/amount = -1) - if(!isnum(amount)) return 1 + for(var/A in reagent_list) + var/datum/reagent/R = A + if (R.id == reagent) + if(!amount) return R + else + if(R.volume >= amount) return R + else return 0 - for(var/A in reagent_list) - var/datum/reagent/R = A - if (R.id == reagent) - R.volume -= amount - update_total() - if(!safety)//So it does not handle reactions when it need not to - handle_reactions() - my_atom.on_reagent_change() - return 0 + return 0 - return 1 +/datum/reagents/proc/get_reagent_amount(var/reagent) + for(var/A in reagent_list) + var/datum/reagent/R = A + if (R.id == reagent) + return R.volume - has_reagent(var/reagent, var/amount = -1) + return 0 - for(var/A in reagent_list) - var/datum/reagent/R = A - if (R.id == reagent) - if(!amount) return R - else - if(R.volume >= amount) return R - else return 0 +/datum/reagents/proc/get_reagents() + var/res = "" + for(var/datum/reagent/A in reagent_list) + if (res != "") res += "," + res += A.name - return 0 + return res - get_reagent_amount(var/reagent) - for(var/A in reagent_list) - var/datum/reagent/R = A - if (R.id == reagent) - return R.volume +/datum/reagents/proc/remove_all_type(var/reagent_type, var/amount, var/strict = 0, var/safety = 1) // Removes all reagent of X type. @strict set to 1 determines whether the childs of the type are included. + if(!isnum(amount)) return 1 - return 0 + var/has_removed_reagent = 0 - get_reagents() - var/res = "" - for(var/datum/reagent/A in reagent_list) - if (res != "") res += "," - res += A.name + for(var/datum/reagent/R in reagent_list) + var/matches = 0 + // Switch between how we check the reagent type + if(strict) + if(R.type == reagent_type) + matches = 1 + else + if(istype(R, reagent_type)) + matches = 1 + // 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) - return res + return has_removed_reagent - remove_all_type(var/reagent_type, var/amount, var/strict = 0, var/safety = 1) // Removes all reagent of X type. @strict set to 1 determines whether the childs of the type are included. - if(!isnum(amount)) return 1 +// Admin logging. +/datum/reagents/proc/get_reagent_ids(var/and_amount=0) + var/list/stuff = list() + for(var/datum/reagent/A in reagent_list) + if(and_amount) + stuff += "[get_reagent_amount(A.id)]U of [A.id]" + else + stuff += A.id + return english_list(stuff) - var/has_removed_reagent = 0 +//two helper functions to preserve data across reactions (needed for xenoarch) +/datum/reagents/proc/get_data(var/reagent_id) + for(var/datum/reagent/D in reagent_list) + if(D.id == reagent_id) + //world << "proffering a data-carrying reagent ([reagent_id])" + return D.data - for(var/datum/reagent/R in reagent_list) - var/matches = 0 - // Switch between how we check the reagent type - if(strict) - if(R.type == reagent_type) - matches = 1 - else - if(istype(R, reagent_type)) - matches = 1 - // 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) +/datum/reagents/proc/set_data(var/reagent_id, var/new_data) + for(var/datum/reagent/D in reagent_list) + if(D.id == reagent_id) + //world << "reagent data set ([reagent_id])" + D.data = new_data - return has_removed_reagent +/datum/reagents/proc/copy_data(var/datum/reagent/current_reagent) + if (!current_reagent || !current_reagent.data) return null + if (!istype(current_reagent.data, /list)) return current_reagent.data - // Admin logging. - get_reagent_ids(var/and_amount=0) - var/list/stuff = list() - for(var/datum/reagent/A in reagent_list) - if(and_amount) - stuff += "[get_reagent_amount(A.id)]U of [A.id]" - else - stuff += A.id - return english_list(stuff) + var/list/trans_data = current_reagent.data.Copy() - //two helper functions to preserve data across reactions (needed for xenoarch) - get_data(var/reagent_id) - for(var/datum/reagent/D in reagent_list) - if(D.id == reagent_id) - //world << "proffering a data-carrying reagent ([reagent_id])" - return D.data + // We do this so that introducing a virus to a blood sample + // doesn't automagically infect all other blood samples from + // the same donor. + // + // Technically we should probably copy all data lists, but + // that could possibly eat up a lot of memory needlessly + // if most data lists are read-only. + if (trans_data["virus2"]) + var/list/v = trans_data["virus2"] + trans_data["virus2"] = v.Copy() - set_data(var/reagent_id, var/new_data) - for(var/datum/reagent/D in reagent_list) - if(D.id == reagent_id) - //world << "reagent data set ([reagent_id])" - D.data = new_data - - copy_data(var/datum/reagent/current_reagent) - if (!current_reagent || !current_reagent.data) return null - if (!istype(current_reagent.data, /list)) return current_reagent.data - - var/list/trans_data = current_reagent.data.Copy() - - // We do this so that introducing a virus to a blood sample - // doesn't automagically infect all other blood samples from - // the same donor. - // - // Technically we should probably copy all data lists, but - // that could possibly eat up a lot of memory needlessly - // if most data lists are read-only. - if (trans_data["virus2"]) - var/list/v = trans_data["virus2"] - trans_data["virus2"] = v.Copy() - - return trans_data + return trans_data /////////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm deleted file mode 100644 index 238724c0b09..00000000000 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ /dev/null @@ -1,3283 +0,0 @@ -#define SOLID 1 -#define LIQUID 2 -#define GAS 3 -#define FOOD_METABOLISM 0.4 -#define REM REAGENTS_EFFECT_MULTIPLIER - -//The reaction procs must ALWAYS set src = null, this detaches the proc from the object (the reagent) -//so that it can continue working when the reagent is deleted while the proc is still active. - -datum - reagent - var/name = "Reagent" - var/id = "reagent" - var/description = "" - var/datum/reagents/holder = null - var/reagent_state = SOLID - var/list/data = null - var/volume = 0 - var/nutriment_factor = 0 - var/metabolization_rate = REAGENTS_METABOLISM - //var/list/viruses = list() - var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!) - var/shock_reduction = 0 - var/penetrates_skin = 0 //Whether or not a reagent penetrates the skin - //Processing flags, defines the type of mobs the reagent will affect - //By default, all reagents will ONLY affect organics, not synthetics. Re-define in the reagent's definition if the reagent is meant to affect synths - var/process_flags = ORGANIC - proc - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //Some reagents transfer on touch, others don't; dependent on if they penetrate the skin or not. - if(!istype(M, /mob/living)) return 0 - var/datum/reagent/self = src - src = null - - if(self.holder) //for catching rare runtimes - if(method == TOUCH && self.penetrates_skin) - var/block = 0 - for(var/obj/item/clothing/C in M.get_equipped_items()) - if(istype(C, /obj/item/clothing/suit/bio_suit)) - block += 1 - if(istype(C, /obj/item/clothing/head/bio_hood)) - block += 1 - if(block < 2) - if(M.reagents) - M.reagents.add_reagent(self.id,self.volume) - -/* - if(method == INGEST && istype(M, /mob/living/carbon)) - if(prob(1 * self.addictiveness)) - if(prob(5 * volume)) - var/datum/disease/addiction/A = new /datum/disease/addiction - A.addicted_to = self - A.name = "[self.name] Addiction" - A.addiction ="[self.name]" - A.cure = self.id - M.viruses += A - A.affected_mob = M - A.holder = M -*/ - return 1 - - reaction_obj(var/obj/O, var/volume) //By default we transfer a small part of the reagent to the object - src = null //if it can hold reagents. nope! - //if(O.reagents) - // O.reagents.add_reagent(id,volume/3) - return - - reaction_turf(var/turf/T, var/volume) - src = null - return - - on_mob_life(var/mob/living/M as mob, var/alien) - if(!istype(M, /mob/living)) // YOU'RE A FUCKING RETARD NEO WHY CAN'T YOU JUST FIX THE PROBLEM ON THE REAGENT - Iamgoofball - return //Noticed runtime errors from facid trying to damage ghosts, this should fix. --NEO - // Certain elements in too large amounts cause side-effects - holder.remove_reagent(src.id, metabolization_rate) //By default it slowly disappears. - current_cycle++ - return - - // Called when two reagents of the same are mixing. - on_merge(var/data) - return - - on_move(var/mob/M) - return - - on_update(var/atom/A) - return - - slimejelly - name = "Slime Jelly" - id = "slimejelly" - description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL." - reagent_state = LIQUID - color = "#801E28" // rgb: 128, 30, 40 - on_mob_life(var/mob/living/M as mob) - if(prob(10)) - M << "\red Your insides are burning!" - M.adjustToxLoss(rand(20,60)*REM) - else if(prob(40)) - M.heal_organ_damage(5*REM,0) - ..() - return - - - blood - data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"blood_colour"= "#A10808","resistances"=null,"trace_chem"=null, "antibodies" = null) - name = "Blood" - id = "blood" - reagent_state = LIQUID - color = "#C80000" // rgb: 200, 0, 0 - - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - var/datum/reagent/blood/self = src - src = null - if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting... - var/list/vlist = self.data["virus2"] - if (vlist.len) - for (var/ID in vlist) - var/datum/disease2/disease/V = vlist[ID] - - if(method == TOUCH) - infect_virus2(M,V.getcopy()) - else - infect_virus2(M,V.getcopy(),1) //injected, force infection! - if(self.data && self.data["antibodies"] && istype(M, /mob/living/carbon))//... and curing - var/mob/living/carbon/C = M - C.antibodies |= self.data["antibodies"] - - on_merge(var/data) - if(data["blood_colour"]) - color = data["blood_colour"] - return ..() - - on_update(var/atom/A) - if(data["blood_colour"]) - color = data["blood_colour"] - return ..() - - - - reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place - if(!istype(T)) return - var/datum/reagent/blood/self = src - src = null - if(!(volume >= 3)) return - //var/datum/disease/D = self.data["virus"] - if(!self.data["donor"] || istype(self.data["donor"], /mob/living/carbon/human)) - var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T //find some blood here - if(!blood_prop) //first blood! - blood_prop = new(T) - blood_prop.blood_DNA[self.data["blood_DNA"]] = self.data["blood_type"] - - if(self.data["virus2"]) - blood_prop.virus2 = virus_copylist(self.data["virus2"]) - - else if(istype(self.data["donor"], /mob/living/carbon/alien)) - var/obj/effect/decal/cleanable/blood/xeno/blood_prop = locate() in T - if(!blood_prop) - blood_prop = new(T) - blood_prop.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*" - return - -/* Must check the transfering of reagents and their data first. They all can point to one disease datum. - - Destroy() - if(src.data["virus"]) - var/datum/disease/D = src.data["virus"] - D.cure(0) - return ..() -*/ - -/* - vaccine - //data must contain virus type - name = "Vaccine" - id = "vaccine" - reagent_state = LIQUID - color = "#C81040" // rgb: 200, 16, 64 - - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - var/datum/reagent/vaccine/self = src - src = null - if(self.data&&method == INGEST) - for(var/datum/disease/D in M.viruses) - if(istype(D, /datum/disease/advance)) - var/datum/disease/advance/A = D - if(A.GetDiseaseID() == self.data) - D.cure() - else - if(D.type == self.data) - D.cure() - - M.resistances += self.data - return -*/ - - // Ported from Bay as part of the Botany Update - // Allows you to make planks from any plant that has this reagent in it. - // Also vines with this reagent are considered dense. - woodpulp - name = "Wood Pulp" - id = "woodpulp" - description = "A mass of wood fibers." - reagent_state = LIQUID - color = "#B97A57" - - fishwater - name = "Fish Water" - id = "fishwater" - description = "Smelly water from a fish tank. Gross!" - reagent_state = LIQUID - color = "#757547" - - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - if(!istype(M, /mob/living)) - return - if(method == INGEST) - M << "Oh god, why did you drink that?" - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(prob(30)) // Nasty, you drank this stuff? 30% chance of the fakevomit (non-stunning version) - if(prob(50)) // 50/50 chance of green vomit vs normal vomit - M.fakevomit(1) - else - M.fakevomit(0) - ..() - return - - water - name = "Water" - id = "water" - description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen." - reagent_state = LIQUID - color = "#0064C8" // rgb: 0, 100, 200 - var/cooling_temperature = 2 - process_flags = ORGANIC | SYNTHETIC - - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) - if(!istype(M, /mob/living)) - return - - // Put out fire - if(method == TOUCH) - M.adjust_fire_stacks(-(volume / 10)) - if(M.fire_stacks <= 0) - M.ExtinguishMob() - return - - reaction_turf(var/turf/simulated/T, var/volume) - if (!istype(T)) return - src = null - if(volume >= 3) - if(T.wet >= 1) return - T.wet = 1 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor") - T.overlays += T.wet_overlay - - spawn(800) - if (!istype(T)) return - if(T.wet >= 2) return - T.wet = 0 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - - for(var/mob/living/carbon/slime/M in T) - M.apply_water() - - var/hotspot = (locate(/obj/effect/hotspot) in T) - if(hotspot && !istype(T, /turf/space)) - var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) - lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) - lowertemp.react() - T.assume_air(lowertemp) - qdel(hotspot) - return - - reaction_obj(var/obj/O, var/volume) - src = null - var/turf/T = get_turf(O) - var/hotspot = (locate(/obj/effect/hotspot) in T) - if(hotspot && !istype(T, /turf/space)) - var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) - lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) - lowertemp.react() - T.assume_air(lowertemp) - qdel(hotspot) - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube)) - var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O - if(!cube.wrapped) - cube.Expand() - // Dehydrated carp - if(istype(O,/obj/item/toy/carpplushie/dehy_carp)) - var/obj/item/toy/carpplushie/dehy_carp/dehy = O - dehy.Swell() // Makes a carp - return - - hellwater - name = "Hell Water" - id = "hell_water" - description = "YOUR FLESH! IT BURNS!" - process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL. - - on_mob_life(var/mob/living/M as mob) - M.fire_stacks = min(5,M.fire_stacks + 3) - M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire - M.adjustToxLoss(1) - M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard? - M.adjustBrainLoss(5) - holder.remove_reagent(src.id, 1) - - lube - name = "Space Lube" - id = "lube" - description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity." - reagent_state = LIQUID - color = "#1BB1AB" - - reaction_turf(var/turf/simulated/T, var/volume) - if (!istype(T)) return - src = null - if(volume >= 1) - if(T.wet >= 2) return - T.wet = 2 - spawn(800) - if (!istype(T)) return - T.wet = 0 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - return - - toxin - name = "Toxin" - id = "toxin" - description = "A Toxic chemical." - reagent_state = LIQUID - color = "#CF3600" // rgb: 207, 54, 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustToxLoss(2) - ..() - return - - spider_venom - name = "Spider venom" - id = "spidertoxin" - description = "A toxic venom injected by spacefaring arachnids." - reagent_state = LIQUID - color = "#CF3600" // rgb: 207, 54, 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustToxLoss(1.5) - ..() - return - - plasticide - name = "Plasticide" - id = "plasticide" - description = "Liquid plastic, do not eat." - reagent_state = LIQUID - color = "#CF3600" // rgb: 207, 54, 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustToxLoss(1.5) - ..() - return - - minttoxin - name = "Mint Toxin" - id = "minttoxin" - description = "Useful for dealing with undesirable customers." - reagent_state = LIQUID - color = "#CF3600" // rgb: 207, 54, 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if (FAT in M.mutations) - M.gib() - ..() - return - - slimetoxin - name = "Mutation Toxin" - id = "mutationtoxin" - description = "A corruptive toxin produced by slimes." - reagent_state = LIQUID - color = "#13BC5E" // rgb: 19, 188, 94 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(ishuman(M)) - var/mob/living/carbon/human/human = M - if(human.species.name != "Shadow") - M << "\red Your flesh rapidly mutates!" - M << "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids." - M << "\red Your body reacts violently to light. \green However, it naturally heals in darkness." - M << "Aside from your new traits, you are mentally unchanged and retain your prior obligations." - human.set_species("Shadow") - ..() - return - - - - aslimetoxin - name = "Advanced Mutation Toxin" - id = "amutationtoxin" - description = "An advanced corruptive toxin produced by slimes." - reagent_state = LIQUID - color = "#13BC5E" // rgb: 19, 188, 94 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(istype(M, /mob/living/carbon) && M.stat != DEAD) - M << "\red Your flesh rapidly mutates!" - if(M.notransform) return - M.notransform = 1 - M.canmove = 0 - M.icon = null - M.overlays.Cut() - M.invisibility = 101 - for(var/obj/item/W in M) - if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something - qdel(W) - continue - W.layer = initial(W.layer) - W.loc = M.loc - W.dropped(M) - var/mob/living/carbon/slime/new_mob = new /mob/living/carbon/slime(M.loc) - new_mob.a_intent = "harm" - new_mob.universal_speak = 1 - if(M.mind) - M.mind.transfer_to(new_mob) - else - new_mob.key = M.key - qdel(M) - ..() - return - - space_drugs - name = "Space drugs" - id = "space_drugs" - description = "An illegal chemical compound used as drug." - reagent_state = LIQUID - color = "#9087A2" - metabolization_rate = 0.2 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.druggy = max(M.druggy, 15) - if(isturf(M.loc) && !istype(M.loc, /turf/space)) - if(M.canmove && !M.restrained()) - if(prob(10)) step(M, pick(cardinal)) - if(prob(7)) M.emote(pick("twitch","drool","moan","giggle")) - ..() - return - - holywater - name = "Water" - id = "holywater" - description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen." - reagent_state = LIQUID - color = "#0064C8" // rgb: 0, 100, 200 - process_flags = ORGANIC | SYNTHETIC - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.jitteriness = max(M.jitteriness-5,0) - if(data >= 30) // 12 units, 60 seconds @ metabolism 0.4 units & tick rate 2.0 sec - if (!M.stuttering) M.stuttering = 1 - M.stuttering += 4 - M.Dizzy(5) - if(iscultist(M) && prob(5)) - M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","Egkau'haom'nai en Chaous","Ho Diak'nos tou Ap'iron","R'ge Na'sie","Diabo us Vo'iscum","Si gn'um Co'nu")) - if(data >= 75 && prob(33)) // 30 units, 150 seconds - if (!M.confused) M.confused = 1 - M.confused += 3 - if(iscultist(M)) - ticker.mode.remove_cultist(M.mind) - holder.remove_reagent(src.id, src.volume) // maybe this is a little too perfect and a max() cap on the statuses would be better?? - M.jitteriness = 0 - M.stuttering = 0 - M.confused = 0 - if(ishuman(M)) . - if(((M.mind in ticker.mode.vampires) || M.mind.vampire) && (!(VAMP_FULL in M.mind.vampire.powers)) && prob(80)) - switch(data) - if(1 to 4) - M << "Something sizzles in your veins!" - M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) - if(5 to 12) - M << "You feel an intense burning inside of you!" - M.adjustFireLoss(1) - M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) - if(13 to INFINITY) - M << "You suddenly ignite in a holy fire!" - for(var/mob/O in viewers(M, null)) - O.show_message(text("[] suddenly bursts into flames!", M), 1) - M.fire_stacks = min(5,M.fire_stacks + 3) - M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire - M.adjustFireLoss(3) //Hence the other damages... ain't I a bastard? - M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) - ..() - return - - - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) - // Vampires have their powers weakened by holy water applied to the skin. - if(ishuman(M)) - if((M.mind in ticker.mode.vampires) && !(VAMP_FULL in M.mind.vampire.powers)) - var/mob/living/carbon/human/H=M - if(method == TOUCH) - if(H.wear_mask) - H << "\red Your mask protects you from the holy water!" - return - else if(H.head) - H << "\red Your helmet protects you from the holy water!" - return - else - M << "Something holy interferes with your powers!" - M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) - return - - - reaction_turf(var/turf/simulated/T, var/volume) - ..() - if(!istype(T)) return - if(volume>=10) - for(var/obj/effect/rune/R in T) - qdel(R) - T.Bless() - - serotrotium - name = "Serotrotium" - id = "serotrotium" - description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans." - reagent_state = LIQUID - color = "#202040" // rgb: 20, 20, 40 - - on_mob_life(var/mob/living/M as mob) - if(ishuman(M)) - if(prob(7)) M.emote(pick("twitch","drool","moan","gasp")) - holder.remove_reagent(src.id, 0.25 * REAGENTS_METABOLISM) - return - -/* silicate - name = "Silicate" - id = "silicate" - description = "A compound that can be used to reinforce glass." - reagent_state = LIQUID - color = "#C7FFFF" // rgb: 199, 255, 255 - - reaction_obj(var/obj/O, var/volume) - src = null - if(istype(O,/obj/structure/window)) - if(O:silicate <= 200) - - O:silicate += volume - O:health += volume * 3 - - if(!O:silicateIcon) - var/icon/I = icon(O.icon,O.icon_state,O.dir) - - var/r = (volume / 100) + 1 - var/g = (volume / 70) + 1 - var/b = (volume / 50) + 1 - I.SetIntensity(r,g,b) - O.icon = I - O:silicateIcon = I - else - var/icon/I = O:silicateIcon - - var/r = (volume / 100) + 1 - var/g = (volume / 70) + 1 - var/b = (volume / 50) + 1 - I.SetIntensity(r,g,b) - O.icon = I - O:silicateIcon = I - - return*/ - - oxygen - name = "Oxygen" - id = "oxygen" - description = "A colorless, odorless gas." - reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 - - on_mob_life(var/mob/living/M as mob, var/alien) - if(M.stat == 2) return - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis")) - M.adjustToxLoss(REAGENTS_METABOLISM) - holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears. - return - ..() - - copper - name = "Copper" - id = "copper" - description = "A highly ductile metal." - color = "#6E3B08" // rgb: 110, 59, 8 - - - nitrogen - name = "Nitrogen" - id = "nitrogen" - description = "A colorless, odorless, tasteless gas." - reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 - - - on_mob_life(var/mob/living/M as mob, var/alien) - if(M.stat == 2) return - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis")) - M.adjustOxyLoss(-2*REM) - holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears. - return - ..() - - hydrogen - name = "Hydrogen" - id = "hydrogen" - description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas." - reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 - - - potassium - name = "Potassium" - id = "potassium" - description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water." - reagent_state = SOLID - color = "#A0A0A0" // rgb: 160, 160, 160 - - - mercury - name = "Mercury" - id = "mercury" - description = "A chemical element." - reagent_state = LIQUID - color = "#484848" // rgb: 72, 72, 72 - metabolization_rate = 0.2 - penetrates_skin = 1 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(prob(70)) - M.adjustBrainLoss(1) - ..() - return - - sulfur - name = "Sulfur" - id = "sulfur" - description = "A chemical element." - reagent_state = SOLID - color = "#BF8C00" // rgb: 191, 140, 0 - - carbon - name = "Carbon" - id = "carbon" - description = "A chemical element." - reagent_state = SOLID - color = "#1C1300" // rgb: 30, 20, 0 - - - reaction_turf(var/turf/T, var/volume) - src = null - // Only add one dirt per turf. Was causing people to crash. - if(!istype(T, /turf/space) && !(locate(/obj/effect/decal/cleanable/dirt) in T)) - new /obj/effect/decal/cleanable/dirt(T) - - chlorine - name = "Chlorine" - id = "chlorine" - description = "A chemical element." - reagent_state = GAS - color = "#808080" // rgb: 128, 128, 128 - penetrates_skin = 1 - process_flags = ORGANIC | SYNTHETIC - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustFireLoss(1) - ..() - return - - fluorine - name = "Fluorine" - id = "fluorine" - description = "A highly-reactive chemical element." - reagent_state = GAS - color = "#6A6054" - penetrates_skin = 1 - process_flags = ORGANIC | SYNTHETIC - - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustFireLoss(1) - M.adjustToxLoss(1*REM) - ..() - return - - sodium - name = "Sodium" - id = "sodium" - description = "A chemical element." - reagent_state = SOLID - color = "#808080" // rgb: 128, 128, 128 - - - phosphorus - name = "Phosphorus" - id = "phosphorus" - description = "A chemical element." - reagent_state = SOLID - color = "#832828" // rgb: 131, 40, 40 - - - lithium - name = "Lithium" - id = "lithium" - description = "A chemical element." - reagent_state = SOLID - color = "#808080" // rgb: 128, 128, 128 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(M.canmove && !M.restrained() && istype(M.loc, /turf/space)) - step(M, pick(cardinal)) - if(prob(5)) M.emote(pick("twitch","drool","moan")) - ..() - return - - sugar - name = "Sugar" - id = "sugar" - description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste." - reagent_state = SOLID - color = "#FFFFFF" // rgb: 255, 255, 255 - overdose_threshold = 200 // Hyperglycaemic shock - - on_mob_life(var/mob/living/M as mob) - if(prob(4)) - M.reagents.add_reagent("epinephrine", 1.2) - if(prob(50)) - M.AdjustParalysis(-1) - M.AdjustStunned(-1) - M.AdjustWeakened(-1) - if(current_cycle >= 90) - M.jitteriness += 10 - ..() - return - - overdose_process(var/mob/living/M as mob) - if(volume > 200) - M << "You pass out from hyperglycemic shock!" - M.Paralyse(1) - if(prob(8)) - M.adjustToxLoss(rand(1,2)) - ..() - return - - sacid - name = "Sulphuric acid" - id = "sacid" - description = "A strong mineral acid with the molecular formula H2SO4." - reagent_state = LIQUID - color = "#00D72B" - process_flags = ORGANIC | SYNTHETIC - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustFireLoss(1) - ..() - return - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) - if(!istype(M, /mob/living)) - return - if(method == TOUCH) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - if(volume > 25) - - if(H.wear_mask) - H << "\red Your mask protects you from the acid!" - return - - if(H.head) - H << "\red Your helmet protects you from the acid!" - return - - if(!M.unacidable) - if(prob(75)) - var/obj/item/organ/external/affecting = H.get_organ("head") - if(affecting) - affecting.take_damage(20, 0) - H.UpdateDamageIcon() - H.emote("scream") - else - M.take_organ_damage(15,0) - else - M.take_organ_damage(15,0) - - if(method == INGEST) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - if(volume < 10) - M << "The greenish acidic substance stings you, but isn't concentrated enough to harm you!" - - if(volume >=10 && volume <=25) - if(!H.unacidable) - M.take_organ_damage(min(max(volume-10,2)*2,20),0) - M.emote("scream") - - - if(volume > 25) - if(!M.unacidable) - if(prob(75)) - var/obj/item/organ/external/affecting = H.get_organ("head") - if(affecting) - affecting.take_damage(20, 0) - H.UpdateDamageIcon() - H.emote("scream") - else - M.take_organ_damage(15,0) - - reaction_obj(var/obj/O, var/volume) - if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(40)) - if(!O.unacidable) - var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc) - I.desc = "Looks like this was \an [O] some time ago." - for(var/mob/M in viewers(5, O)) - M << "\red \the [O] melts." - qdel(O) - - glycerol - name = "Glycerol" - id = "glycerol" - description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity." - reagent_state = LIQUID - color = "#808080" // rgb: 128, 128, 128 - - - nitroglycerin - name = "Nitroglycerin" - id = "nitroglycerin" - description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol." - reagent_state = LIQUID - color = "#808080" // rgb: 128, 128, 128 - - radium - name = "Radium" - id = "radium" - description = "Radium is an alkaline earth metal. It is extremely radioactive." - reagent_state = SOLID - color = "#C7C7C7" // rgb: 199,199,199 - metabolization_rate = 0.4 - penetrates_skin = 1 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.apply_effect(4*REM,IRRADIATE,0) - // radium may increase your chances to cure a disease - if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs - var/mob/living/carbon/C = M - if(C.virus2.len) - for (var/ID in C.virus2) - var/datum/disease2/disease/V = C.virus2[ID] - if(prob(5)) - if(prob(50)) - M.apply_effect(50,IRRADIATE,0) // curing it that way may kill you instead - M.adjustToxLoss(100) - C.antibodies |= V.antigen - ..() - return - - reaction_turf(var/turf/T, var/volume) - src = null - if(volume >= 3) - if(!istype(T, /turf/space)) - new /obj/effect/decal/cleanable/greenglow(T) - return - - thermite - name = "Thermite" - id = "thermite" - description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls." - reagent_state = SOLID - color = "#673910" // rgb: 103, 57, 16 - process_flags = ORGANIC | SYNTHETIC - - reaction_turf(var/turf/T, var/volume) - src = null - if(volume >= 5) - if(istype(T, /turf/simulated/wall)) - T:thermite = 1 - T.overlays.Cut() - T.overlays = image('icons/effects/effects.dmi',icon_state = "thermite") - return - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustFireLoss(1) - ..() - return - - mutagen - name = "Unstable mutagen" - id = "mutagen" - description = "Might cause unpredictable mutations. Keep away from children." - reagent_state = LIQUID - color = "#04DF27" - metabolization_rate = 0.3 - - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - if(!..()) return - if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this. - src = null - if((method==TOUCH && prob(33)) || method==INGEST) - if(prob(98)) - randmutb(M) - else - randmutg(M) - domutcheck(M, null) - M.UpdateAppearance() - return - on_mob_life(var/mob/living/M as mob) - if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this. - if(!M) M = holder.my_atom - M.apply_effect(2*REM,IRRADIATE,0) - if(prob(4)) - randmutb(M) - ..() - return - - hydrocodone - name = "Hydrocodone" - id = "hydrocodone" - description = "An extremely effective painkiller; may have long term abuse consequences." - reagent_state = LIQUID - color = "#C805DC" - metabolization_rate = 0.3 // Lasts 1.5 minutes for 15 units - shock_reduction = 200 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - ..() - return - - virus_food - name = "Virus Food" - id = "virusfood" - description = "A mixture of water, milk, and oxygen. Virus cells can use this mixture to reproduce." - reagent_state = LIQUID - nutriment_factor = 2 * REAGENTS_METABOLISM - color = "#899613" // rgb: 137, 150, 19 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.nutrition += nutriment_factor*REM - ..() - return - - sterilizine - name = "Sterilizine" - id = "sterilizine" - description = "Sterilizes wounds in preparation for surgery." - reagent_state = LIQUID - color = "#C8A5DC" // rgb: 200, 165, 220 - - //makes you squeaky clean - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) - if (method == TOUCH) - M.germ_level -= min(volume*20, M.germ_level) - - reaction_obj(var/obj/O, var/volume) - O.germ_level -= min(volume*20, O.germ_level) - - reaction_turf(var/turf/T, var/volume) - T.germ_level -= min(volume*20, T.germ_level) - - iron - name = "Iron" - id = "iron" - description = "Pure iron is a metal." - reagent_state = SOLID - color = "#C8A5DC" // rgb: 200, 165, 220 -/* - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if((M.virus) && (prob(8) && (M.virus.name=="Magnitis"))) - if(M.virus.spread == "Airborne") - M.virus.spread = "Remissive" - M.virus.stage-- - if(M.virus.stage <= 0) - M.resistances += M.virus.type - M.virus = null - holder.remove_reagent(src.id, 0.2) - return -*/ - - gold - name = "Gold" - id = "gold" - description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known." - reagent_state = SOLID - color = "#F7C430" // rgb: 247, 196, 48 - - silver - name = "Silver" - id = "silver" - description = "A lustrous metallic element regarded as one of the precious metals." - reagent_state = SOLID - color = "#D0D0D0" // rgb: 208, 208, 208 - - uranium - name ="Uranium" - id = "uranium" - description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive." - reagent_state = SOLID - color = "#B8B8C0" // rgb: 184, 184, 192 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.apply_effect(2,IRRADIATE,0) - ..() - return - - - reaction_turf(var/turf/T, var/volume) - src = null - if(volume >= 3) - if(!istype(T, /turf/space)) - new /obj/effect/decal/cleanable/greenglow(T) - - aluminum - name = "Aluminum" - id = "aluminum" - description = "A silvery white and ductile member of the boron group of chemical elements." - reagent_state = SOLID - color = "#A8A8A8" // rgb: 168, 168, 168 - - silicon - name = "Silicon" - id = "silicon" - description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon." - reagent_state = SOLID - color = "#A8A8A8" // rgb: 168, 168, 168 - - fuel - name = "Welding fuel" - id = "fuel" - description = "A highly flammable blend of basic hydrocarbons, mostly Acetylene. Useful for both welding and organic chemistry, and can be fortified into a heavier oil." - reagent_state = LIQUID - color = "#060606" - - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite! - if(!istype(M, /mob/living)) - return - if(method == TOUCH) - M.adjust_fire_stacks(volume / 10) - return - ..() - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustToxLoss(1) - ..() - return - - unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke - name = "Unholy Water" - id = "unholywater" - description = "Something that shouldn't exist on this plane of existance." - process_flags = ORGANIC | SYNTHETIC //ethereal means everything processes it. - - on_mob_life(mob/living/M) - M.adjustBrainLoss(3) - if(iscultist(M)) - M.status_flags |= GOTTAGOFAST - M.drowsyness = max(M.drowsyness-5, 0) - M.AdjustParalysis(-2) - M.AdjustStunned(-2) - M.AdjustWeakened(-2) - else - M.adjustToxLoss(2) - M.adjustFireLoss(2) - M.adjustOxyLoss(2) - M.adjustBruteLoss(2) - holder.remove_reagent(src.id, 1) - - incendiary_fuel //copy-pasta of welding fuel; allow incendiary grenades to function better without the headache of people spraying fuel everywhere with regular welding fuel. - name = "Incendiary fuel" - id = "incendiaryfuel" - description = "A highly flammable compound used in incendiary grenades." - reagent_state = LIQUID - color = "#660000" // rgb: 102, 0, 0 - - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite! - if(!istype(M, /mob/living)) - return - if(method == TOUCH) - M.adjust_fire_stacks(volume / 10) - return - - reaction_obj(var/obj/O, var/volume) - var/turf/the_turf = get_turf(O) - if(!the_turf) - return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO - new /obj/effect/decal/cleanable/liquid_fuel(the_turf, volume) - reaction_turf(var/turf/T, var/volume) - new /obj/effect/decal/cleanable/liquid_fuel(T, volume) - return - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustToxLoss(1) - ..() - return - - space_cleaner - name = "Space cleaner" - id = "cleaner" - description = "A compound used to clean things. Now with 50% more sodium hypochlorite!" - reagent_state = LIQUID - color = "#61C2C2" - - reaction_obj(var/obj/O, var/volume) - if(istype(O,/obj/effect/decal/cleanable)) - qdel(O) - else - if(O) - O.clean_blood() - reaction_turf(var/turf/T, var/volume) - if(volume >= 1) - T.overlays.Cut() - T.clean_blood() - for(var/obj/effect/decal/cleanable/C in src) - qdel(C) - - for(var/mob/living/carbon/slime/M in T) - M.adjustToxLoss(rand(5,10)) - reaction_turf(var/turf/simulated/S, var/volume) - if(volume >= 1) - S.dirt = 0 - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(H.lip_style) - H.lip_style = null - H.update_body() - if(C.r_hand) - C.r_hand.clean_blood() - if(C.l_hand) - C.l_hand.clean_blood() - if(C.wear_mask) - if(C.wear_mask.clean_blood()) - C.update_inv_wear_mask(0) - if(ishuman(M)) - var/mob/living/carbon/human/H = C - if(H.head) - if(H.head.clean_blood()) - H.update_inv_head(0,0) - if(H.wear_suit) - if(H.wear_suit.clean_blood()) - H.update_inv_wear_suit(0,0) - else if(H.w_uniform) - if(H.w_uniform.clean_blood()) - H.update_inv_w_uniform(0,0) - if(H.shoes) - if(H.shoes.clean_blood()) - H.update_inv_shoes(0,0) - M.clean_blood() - ..() - return - - plasma - name = "Plasma" - id = "plasma" - description = "The liquid phase of an unusual extraterrestrial compound." - reagent_state = LIQUID - color = "#7A2B94" - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustToxLoss(1*REM) - if(holder.has_reagent("epinephrine")) - holder.remove_reagent("epinephrine", 2) - ..() - return - - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with plasma is stronger than fuel! - if(!istype(M, /mob/living)) - return - if(method == TOUCH) - M.adjust_fire_stacks(volume / 5) - ..() - return - lexorin - name = "Lexorin" - id = "lexorin" - description = "Lexorin temporarily stops respiration. Causes tissue damage." - reagent_state = LIQUID - color = "#52685D" - metabolization_rate = 0.2 - - on_mob_life(var/mob/living/M as mob) - if(M.stat == 2.0) - return - if(!M) M = holder.my_atom - M.adjustToxLoss(1) - ..() - return - - adminordrazine //An OP chemical for admins - name = "Adminordrazine" - id = "adminordrazine" - description = "It's magic. We don't have to explain it." - reagent_state = LIQUID - color = "#C8A5DC" // rgb: 200, 165, 220 - process_flags = ORGANIC | SYNTHETIC //Adminbuse knows no bounds! - - on_mob_life(var/mob/living/carbon/M as mob) - if(!M) M = holder.my_atom ///This can even heal dead people. - for(var/datum/reagent/R in M.reagents.reagent_list) - if(R != src) - M.reagents.remove_reagent(R.id,5) - M.setCloneLoss(0) - M.setOxyLoss(0) - M.radiation = 0 - M.heal_organ_damage(5,5) - M.adjustToxLoss(-5) - M.hallucination = 0 - M.setBrainLoss(0) - M.disabilities = 0 - M.sdisabilities = 0 - M.eye_blurry = 0 - M.eye_blind = 0 - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] - if(istype(E)) - E.damage = max(E.damage-5 , 0) - M.SetWeakened(0) - M.SetStunned(0) - M.SetParalysis(0) - M.silent = 0 - M.dizziness = 0 - M.drowsyness = 0 - M.stuttering = 0 - M.slurring = 0 - M.confused = 0 - M.sleeping = 0 - M.jitteriness = 0 - if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs - var/mob/living/carbon/C = M - if(C.virus2.len) - for (var/ID in C.virus2) - var/datum/disease2/disease/V = C.virus2[ID] - C.antibodies |= V.antigen - ..() - return - - nanites - name = "Nanites" - id = "nanites" - description = "Nanomachines that aid in rapid cellular regeneration." - - - synaptizine - name = "Synaptizine" - id = "synaptizine" - description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as paralysis." - reagent_state = LIQUID - color = "#FA46FA" - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.AdjustParalysis(-1) - M.AdjustStunned(-1) - M.AdjustWeakened(-1) - if(prob(50)) - M.adjustBrainLoss(-1.0) - ..() - return - - audioline - name = "Audioline" - id = "audioline" - description = "Heals ear damage." - reagent_state = LIQUID - color = "#6600FF" // rgb: 100, 165, 255 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.ear_damage = 0 - M.ear_deaf = 0 - ..() - return - - mitocholide - name = "Mitocholide" - id = "mitocholide" - description = "A specialized drug that stimulates the mitochondria of cells to encourage healing of internal organs." - reagent_state = LIQUID - color = "#C8A5DC" // rgb: 200, 165, 220 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - //Mitocholide is hard enough to get, it's probably fair to make this all internal organs - for(var/name in H.internal_organs_by_name) - var/obj/item/organ/I = H.internal_organs_by_name[name] - if(I.damage > 0) - I.damage -= 0.20 - ..() - return - - cryoxadone - name = "Cryoxadone" - id = "cryoxadone" - description = "A plasma mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 265K for it to metabolise correctly." - reagent_state = LIQUID - color = "#0000C8" // rgb: 200, 165, 220 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(M.bodytemperature < 265) - M.adjustCloneLoss(-4) - M.adjustOxyLoss(-10) - M.heal_organ_damage(12,12) - M.adjustToxLoss(-3) - M.status_flags &= ~DISFIGURED - ..() - return - - rezadone - name = "Rezadone" - id = "rezadone" - description = "A powder derived from fish toxin, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects." - reagent_state = SOLID - color = "#669900" // rgb: 102, 153, 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(!data) data = 1 - data++ - switch(data) - if(1 to 15) - M.adjustCloneLoss(-1) - M.heal_organ_damage(1,1) - if(15 to 35) - M.adjustCloneLoss(-2) - M.heal_organ_damage(2,1) - M.status_flags &= ~DISFIGURED - if(35 to INFINITY) - M.adjustToxLoss(1) - M.Dizzy(5) - M.Jitter(5) - - ..() - return - - spaceacillin - name = "Spaceacillin" - id = "spaceacillin" - description = "An all-purpose antibiotic agent extracted from space fungus." - reagent_state = LIQUID - color = "#0AB478" - - on_mob_life(var/mob/living/M as mob) - ..() - return - - carpotoxin - name = "Carpotoxin" - id = "carpotoxin" - description = "A deadly neurotoxin produced by the dreaded spess carp." - reagent_state = LIQUID - color = "#003333" // rgb: 0, 51, 51 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustToxLoss(2*REM) - ..() - return - - staminatoxin - name = "Tirizene" - id = "tirizene" - description = "A toxin that affects the stamina of a person when injected into the bloodstream." - reagent_state = LIQUID - color = "#6E2828" - data = 13 - - on_mob_life(var/mob/living/M) - M.adjustStaminaLoss(REM * data) - data = max(data - 1, 3) - ..() - - lsd - name = "Lysergic acid diethylamide" - id = "lsd" - description = "A highly potent hallucinogenic substance. Far out, maaaan." - reagent_state = LIQUID - color = "#0000D8" - - on_mob_life(var/mob/living/M) - if(!M) M = holder.my_atom - M.hallucination += 10 - ..() - return - - - spores - name = "Spore Toxin" - id = "spores" - description = "A toxic spore cloud which blocks vision when ingested." - color = "#9ACD32" - - on_mob_life(var/mob/living/M as mob) - M.adjustToxLoss(0.5) - M.damageoverlaytemp = 60 - M.eye_blurry = max(M.eye_blurry, 3) - ..() - return - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////// -/* - nanomachines - name = "Nanomachines" - id = "nanomachines" - description = "Microscopic construction robots." - reagent_state = LIQUID - color = "#535E66" // rgb: 83, 94, 102 - - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - src = null - if( (prob(10) && method==TOUCH) || method==INGEST) - M.contract_disease(new /datum/disease/robotic_transformation(0),1) - - xenomicrobes - name = "Xenomicrobes" - id = "xenomicrobes" - description = "Microbes with an entirely alien cellular structure." - reagent_state = LIQUID - color = "#535E66" // rgb: 83, 94, 102 - - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - src = null - if( (prob(10) && method==TOUCH) || method==INGEST) - M.contract_disease(new /datum/disease/xeno_transformation(0),1) -*/ - - spore - name = "Blob Spores" - id = "spore" - description = "Spores of some blob creature thingy." - reagent_state = LIQUID - color = "#CE760A" // rgb: 206, 118, 10 - var/client/blob_client = null - var/blob_point_rate = 3 - - on_mob_life(var/mob/living/M) - if(!M) M = holder.my_atom - if (holder.has_reagent("atrazine",45)) - holder.del_reagent("spore") - if (prob(1)) - M << "\red Your mouth tastes funny." - if (prob(1) && prob(25)) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(directory[ckey(C.key)]) - blob_client = directory[ckey(C.key)] - C.gib() - if(blob_client) - var/obj/effect/blob/core/core = new(get_turf(C), 200, blob_client, blob_point_rate) - if(core.overmind && core.overmind.mind) - core.overmind.mind.name = C.name - - return - -//foam - - fluorosurfactant - name = "Fluorosurfactant" - id = "fluorosurfactant" - description = "A perfluoronated sulfonic acid that forms a foam when mixed with water." - reagent_state = LIQUID - color = "#9E6B38" // rgb: 158, 107, 56 - -// metal foaming agent -// this is lithium hydride. Add other recipies (e.g. LiH + H2O -> LiOH + H2) eventually - - ammonia - name = "Ammonia" - id = "ammonia" - description = "A caustic substance commonly used in fertilizer or household cleaners." - reagent_state = GAS - color = "#404030" // rgb: 64, 64, 48 - - - diethylamine - name = "Diethylamine" - id = "diethylamine" - description = "A secondary amine, useful as a plant nutrient and as building block for other compounds." - reagent_state = LIQUID - color = "#322D00" - - beer2 //disguised as normal beer for use by emagged brobots - name = "Beer" - id = "beer2" - description = "An alcoholic beverage made from malted grains, hops, yeast, and water." - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!data) - data = 1 - switch(data) - if(1 to 50) - M.sleeping += 1 - if(51 to INFINITY) - M.sleeping += 1 - M.adjustToxLoss((data - 50)*REM) - data++ - holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM) - ..() - return - -/////////////////////////Food Reagents//////////////////////////// -// Part of the food code. Nutriment is used instead of the old "heal_amt" code. Also is where all the food -// condiments, additives, and such go. - nutriment // Pure nutriment, universally digestable and thus slightly less effective - name = "Nutriment" - id = "nutriment" - description = "A questionable mixture of various pure nutrients commonly found in processed foods." - reagent_state = SOLID - nutriment_factor = 12 * REAGENTS_METABOLISM - color = "#664330" // rgb: 102, 67, 48 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(!(M.mind in ticker.mode.vampires)) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species && H.species.dietflags) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients - H.nutrition += nutriment_factor // For hunger and fatness - if(prob(50)) M.heal_organ_damage(1,0) - if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals - if(prob(50)) M.heal_organ_damage(1,0) - ..() - return - - protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores - name = "Protein" - id = "protein" - description = "Various essential proteins and fats commonly found in animal flesh and blood." - reagent_state = SOLID - nutriment_factor = 15 * REAGENTS_METABOLISM - color = "#664330" // rgb: 102, 67, 48 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(!(M.mind in ticker.mode.vampires)) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_HERB)) //Make sure the species has it's dietflag set, and that it is not a herbivore - H.nutrition += nutriment_factor // For hunger and fatness - if(prob(50)) M.heal_organ_damage(1,0) - if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals - if(prob(50)) M.heal_organ_damage(1,0) - ..() - return - - plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores - name = "Plant-matter" - id = "plantmatter" - description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce." - reagent_state = SOLID - nutriment_factor = 15 * REAGENTS_METABOLISM - color = "#664330" // rgb: 102, 67, 48 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(!(M.mind in ticker.mode.vampires)) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_CARN)) //Make sure the species has it's dietflag set, and that it is not a carnivore - H.nutrition += nutriment_factor // For hunger and fatness - if(prob(50)) M.heal_organ_damage(1,0) - if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals - if(prob(50)) M.heal_organ_damage(1,0) - ..() - return - - soysauce - name = "Soysauce" - id = "soysauce" - description = "A salty sauce made from the soy plant." - reagent_state = LIQUID - nutriment_factor = 2 * REAGENTS_METABOLISM - color = "#792300" // rgb: 121, 35, 0 - - ketchup - name = "Ketchup" - id = "ketchup" - description = "Ketchup, catsup, whatever. It's tomato paste." - reagent_state = LIQUID - nutriment_factor = 5 * REAGENTS_METABOLISM - color = "#731008" // rgb: 115, 16, 8 - - - capsaicin - name = "Capsaicin Oil" - id = "capsaicin" - description = "This is what makes chilis hot." - reagent_state = LIQUID - color = "#B31008" // rgb: 179, 16, 8 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(!data) data = 1 - switch(data) - if(1 to 15) - M.bodytemperature += 5 * TEMPERATURE_DAMAGE_COEFFICIENT - if(holder.has_reagent("frostoil")) - holder.remove_reagent("frostoil", 5) - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature += rand(5,20) - if(15 to 25) - M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature += rand(10,20) - if(25 to INFINITY) - M.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature += rand(15,20) - holder.remove_reagent(src.id, FOOD_METABOLISM) - data++ - ..() - return - - condensedcapsaicin - name = "Condensed Capsaicin" - id = "condensedcapsaicin" - description = "This shit goes in pepperspray." - reagent_state = LIQUID - color = "#B31008" // rgb: 179, 16, 8 - - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) - if(!istype(M, /mob/living)) - return - if(method == TOUCH) - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/victim = M - var/mouth_covered = 0 - var/eyes_covered = 0 - var/obj/item/safe_thing = null - if( victim.wear_mask ) - if ( victim.wear_mask.flags & MASKCOVERSEYES ) - eyes_covered = 1 - safe_thing = victim.wear_mask - if ( victim.wear_mask.flags & MASKCOVERSMOUTH ) - mouth_covered = 1 - safe_thing = victim.wear_mask - if( victim.head ) - if ( victim.head.flags & MASKCOVERSEYES ) - eyes_covered = 1 - safe_thing = victim.head - if ( victim.head.flags & MASKCOVERSMOUTH ) - mouth_covered = 1 - safe_thing = victim.head - if(victim.glasses) - eyes_covered = 1 - if ( !safe_thing ) - safe_thing = victim.glasses - if ( eyes_covered && mouth_covered ) - victim << "\red Your [safe_thing] protects you from the pepperspray!" - return - else if ( mouth_covered ) // Reduced effects if partially protected - victim << "\red Your [safe_thing] protect you from most of the pepperspray!" - if(prob(5)) - victim.emote("scream") - victim.eye_blurry = max(M.eye_blurry, 3) - victim.eye_blind = max(M.eye_blind, 1) - victim.confused = max(M.confused, 3) - victim.damageoverlaytemp = 60 - victim.Weaken(3) - victim.drop_item() - return - else if ( eyes_covered ) // Eye cover is better than mouth cover - victim << "\red Your [safe_thing] protects your eyes from the pepperspray!" - victim.eye_blurry = max(M.eye_blurry, 3) - victim.damageoverlaytemp = 30 - return - else // Oh dear :D - if(prob(5)) - victim.emote("scream") - victim << "\red You're sprayed directly in the eyes with pepperspray!" - victim.eye_blurry = max(M.eye_blurry, 5) - victim.eye_blind = max(M.eye_blind, 2) - victim.confused = max(M.confused, 6) - victim.damageoverlaytemp = 75 - victim.Weaken(5) - victim.drop_item() - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(prob(5)) - M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]") - ..() - return - - frostoil - name = "Frost Oil" - id = "frostoil" - description = "A special oil that noticably chills the body. Extraced from Icepeppers." - reagent_state = LIQUID - color = "#B31008" // rgb: 139, 166, 233 - process_flags = ORGANIC | SYNTHETIC - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(!data) data = 1 - switch(data) - if(1 to 15) - M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT - if(holder.has_reagent("capsaicin")) - holder.remove_reagent("capsaicin", 5) - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature -= rand(5,20) - if(15 to 25) - M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature -= rand(10,20) - if(25 to INFINITY) - M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT - if(prob(1)) - M.emote("shiver") - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature -= rand(15,20) - data++ - holder.remove_reagent(src.id, FOOD_METABOLISM) - ..() - return - - reaction_turf(var/turf/simulated/T, var/volume) - for(var/mob/living/carbon/slime/M in T) - M.adjustToxLoss(rand(15,30)) - - sodiumchloride - name = "Salt" - id = "sodiumchloride" - description = "Sodium chloride, common table salt." - reagent_state = SOLID - color = "#B1B0B0" - - overdose_process(var/mob/living/M as mob) - if(volume > 100) - if(prob(70)) - M.adjustBrainLoss(1) - if(prob(8)) - M.adjustToxLoss(rand(1,2)) - ..() - return - - blackpepper - name = "Black Pepper" - id = "blackpepper" - description = "A powder ground from peppercorns. *AAAACHOOO*" - reagent_state = SOLID - // no color (ie, black) - - coco - name = "Coco Powder" - id = "coco" - description = "A fatty, bitter paste made from coco beans." - reagent_state = SOLID - nutriment_factor = 5 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - ..() - return - - hot_coco - name = "Hot Chocolate" - id = "hot_coco" - description = "Made with love! And coco beans." - reagent_state = LIQUID - nutriment_factor = 2 * REAGENTS_METABOLISM - color = "#403010" // rgb: 64, 48, 16 - - on_mob_life(var/mob/living/M as mob) - if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) - M.nutrition += nutriment_factor - ..() - return - - psilocybin - name = "Psilocybin" - id = "psilocybin" - description = "A strong psycotropic derived from certain species of mushroom." - color = "#E700E7" // rgb: 231, 0, 231 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.druggy = max(M.druggy, 30) - if(!data) data = 1 - switch(data) - if(1 to 5) - if (!M.stuttering) M.stuttering = 1 - M.Dizzy(5) - if(prob(10)) M.emote(pick("twitch","giggle")) - if(5 to 10) - if (!M.stuttering) M.stuttering = 1 - M.Jitter(10) - M.Dizzy(10) - M.druggy = max(M.druggy, 35) - if(prob(20)) M.emote(pick("twitch","giggle")) - if (10 to INFINITY) - if (!M.stuttering) M.stuttering = 1 - M.Jitter(20) - M.Dizzy(20) - M.druggy = max(M.druggy, 40) - if(prob(30)) M.emote(pick("twitch","giggle")) - data++ - ..() - return - - sprinkles - name = "Sprinkles" - id = "sprinkles" - description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops." - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#FF00FF" // rgb: 255, 0, 255 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden")) - if(!M) M = holder.my_atom - M.heal_organ_damage(1,1) - M.nutrition += nutriment_factor - ..() - return - ..() - - cornoil - name = "Corn Oil" - id = "cornoil" - description = "An oil derived from various types of corn." - reagent_state = LIQUID - nutriment_factor = 20 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - ..() - return - reaction_turf(var/turf/simulated/T, var/volume) - if (!istype(T)) return - src = null - if(volume >= 3) - if(T.wet >= 1) return - T.wet = 1 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor") - T.overlays += T.wet_overlay - - spawn(800) - if (!istype(T)) return - if(T.wet >= 2) return - T.wet = 0 - if(T.wet_overlay) - T.overlays -= T.wet_overlay - T.wet_overlay = null - var/hotspot = (locate(/obj/effect/hotspot) in T) - if(hotspot) - var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) - lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) - lowertemp.react() - T.assume_air(lowertemp) - qdel(hotspot) - - enzyme - name = "Denatured Enzyme" - id = "enzyme" - description = "Heated beyond usefulness, this enzyme is now worthless." - reagent_state = LIQUID - color = "#282314" // rgb: 54, 94, 48 - - dry_ramen - name = "Dry Ramen" - id = "dry_ramen" - description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water." - reagent_state = SOLID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - ..() - return - - hot_ramen - name = "Hot Ramen" - id = "hot_ramen" - description = "The noodles are boiled, the flavors are artificial, just like being back in school." - reagent_state = LIQUID - nutriment_factor = 5 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT)) - ..() - return - - hell_ramen - name = "Hell Ramen" - id = "hell_ramen" - description = "The noodles are boiled, the flavors are artificial, just like being back in school." - reagent_state = LIQUID - nutriment_factor = 5 * REAGENTS_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT - ..() - return - - - flour - name = "flour" - id = "flour" - description = "This is what you rub all over yourself to pretend to be a ghost." - reagent_state = SOLID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#FFFFFF" // rgb: 0, 0, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - ..() - return - - reaction_turf(var/turf/T, var/volume) - src = null - if(!istype(T, /turf/space)) - new /obj/effect/decal/cleanable/flour(T) - - rice - name = "Rice" - id = "rice" - description = "Enjoy the great taste of nothing." - reagent_state = SOLID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#FFFFFF" // rgb: 0, 0, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - ..() - return - - cherryjelly - name = "Cherry Jelly" - id = "cherryjelly" - description = "Totally the best. Only to be spread on foods with excellent lateral symmetry." - reagent_state = LIQUID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#801E28" // rgb: 128, 30, 40 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - ..() - return - - toxin/coffeepowder - name = "Coffee Grounds" - id = "coffeepowder" - description = "Finely ground Coffee beans, used to make coffee." - reagent_state = SOLID - color = "#5B2E0D" // rgb: 91, 46, 13 - - toxin/teapowder - name = "Ground Tea Leaves" - id = "teapowder" - description = "Finely shredded Tea leaves, used for making tea." - reagent_state = SOLID - color = "#7F8400" // rgb: 127, 132, 0 - - //Reagents used for plant fertilizers. - toxin/fertilizer - name = "fertilizer" - id = "fertilizer" - description = "A chemical mix good for growing plants with." - reagent_state = LIQUID -// toxpwr = 0.2 //It's not THAT poisonous. - color = "#664330" // rgb: 102, 67, 48 - - - toxin/fertilizer/eznutrient - name = "EZ Nutrient" - id = "eznutrient" - - toxin/fertilizer/left4zed - name = "Left-4-Zed" - id = "left4zed" - - toxin/fertilizer/robustharvest - name = "Robust Harvest" - id = "robustharvest" - - -///////////////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////// DRINKS BELOW, Beer is up there though, along with cola. Cap'n Pete's Cuban Spiced Rum//////////////////////////////// -///////////////////////////////////////////////////////////////////////////////////////////////////////// - - drink - name = "Drink" - id = "drink" - description = "Uh, some kind of drink." - reagent_state = LIQUID - nutriment_factor = 1 * REAGENTS_METABOLISM - color = "#E78108" // rgb: 231, 129, 8 - var/adj_dizzy = 0 - var/adj_drowsy = 0 - var/adj_sleepy = 0 - var/adj_temp = 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.nutrition += nutriment_factor - holder.remove_reagent(src.id, FOOD_METABOLISM) - if (adj_dizzy) M.dizziness = max(0,M.dizziness + adj_dizzy) - if (adj_drowsy) M.drowsyness = max(0,M.drowsyness + adj_drowsy) - if (adj_sleepy) M.sleeping = max(0,M.sleeping + adj_sleepy) - if (adj_temp) - if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT)) - // Drinks should be used up faster than other reagents. - holder.remove_reagent(src.id, FOOD_METABOLISM) - ..() - return - - orangejuice - name = "Orange juice" - id = "orangejuice" - description = "Both delicious AND rich in Vitamin C, what more do you need?" - color = "#E78108" // rgb: 231, 129, 8 - - on_mob_life(var/mob/living/M as mob) - ..() - if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1*REM) - return - - tomatojuice - name = "Tomato Juice" - id = "tomatojuice" - description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?" - color = "#731008" // rgb: 115, 16, 8 - - on_mob_life(var/mob/living/M as mob) - ..() - if(M.getFireLoss() && prob(20)) M.heal_organ_damage(0,1) - return - - limejuice - name = "Lime Juice" - id = "limejuice" - description = "The sweet-sour juice of limes." - color = "#365E30" // rgb: 54, 94, 48 - on_mob_life(var/mob/living/M as mob) - ..() - if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1) - return - - - carrotjuice - name = "Carrot juice" - id = "carrotjuice" - description = "It is just like a carrot but without crunching." - color = "#973800" // rgb: 151, 56, 0 - - on_mob_life(var/mob/living/M as mob) - ..() - M.eye_blurry = max(M.eye_blurry-1 , 0) - M.eye_blind = max(M.eye_blind-1 , 0) - if(!data) data = 1 - switch(data) - if(1 to 20) - //nothing - if(21 to INFINITY) - if (prob(data-10)) - M.disabilities &= ~NEARSIGHTED - data++ - return - - doctor_delight - name = "The Doctor's Delight" - id = "doctorsdelight" - description = "A gulp a day keeps the MediBot away. That's probably for the best." - reagent_state = LIQUID - color = "#FF8CFF" // rgb: 255, 140, 255 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1) - ..() - return - - berryjuice - name = "Berry Juice" - id = "berryjuice" - description = "A delicious blend of several different kinds of berries." - color = "#863333" // rgb: 134, 51, 51 - - poisonberryjuice - name = "Poison Berry Juice" - id = "poisonberryjuice" - description = "A tasty juice blended from various kinds of very deadly and toxic berries." - color = "#863353" // rgb: 134, 51, 83 - - on_mob_life(var/mob/living/M as mob) - ..() - M.adjustToxLoss(1) - return - - watermelonjuice - name = "Watermelon Juice" - id = "watermelonjuice" - description = "Delicious juice made from watermelon." - color = "#863333" // rgb: 134, 51, 51 - - lemonjuice - name = "Lemon Juice" - id = "lemonjuice" - description = "This juice is VERY sour." - color = "#863333" // rgb: 175, 175, 0 - - grapejuice - name = "Grape Juice" - id = "grapejuice" - description = "This juice is known to stain shirts." - color = "#993399" // rgb: 153, 51, 153 - - banana - name = "Banana Juice" - id = "banana" - description = "The raw essence of a banana." - color = "#863333" // rgb: 175, 175, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - if(istype(M, /mob/living/carbon/human) && M.job in list("Clown")) - if(!M) M = holder.my_atom - M.heal_organ_damage(1,1) - M.nutrition += nutriment_factor - ..() - return - ..() - - nothing - name = "Nothing" - id = "nothing" - description = "Absolutely nothing." - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - if(istype(M, /mob/living/carbon/human) && M.job in list("Mime")) - if(!M) M = holder.my_atom - M.heal_organ_damage(1,1) - M.nutrition += nutriment_factor - ..() - return - ..() - - potato_juice - name = "Potato Juice" - id = "potato" - description = "Juice of the potato. Bleh." - nutriment_factor = 2 * FOOD_METABOLISM - color = "#302000" // rgb: 48, 32, 0 - - milk - name = "Milk" - id = "milk" - description = "An opaque white liquid produced by the mammary glands of mammals." - color = "#DFDFDF" // rgb: 223, 223, 223 - - on_mob_life(var/mob/living/M as mob) - if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0) - if(holder.has_reagent("capsaicin")) - holder.remove_reagent("capsaicin", 10*REAGENTS_METABOLISM) - ..() - return - - soymilk - name = "Soy Milk" - id = "soymilk" - description = "An opaque white liquid made from soybeans." - color = "#DFDFC7" // rgb: 223, 223, 199 - - cream - name = "Cream" - id = "cream" - description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?" - color = "#DFD7AF" // rgb: 223, 215, 175 - - chocolate_milk - name = "Chocolate milk" - id ="chocolate_milk" - description = "Chocolate-flavored milk, tastes like being a kid again." - color = "#85432C" - - hot_coco - name = "Hot Chocolate" - id = "hot_coco" - description = "Made with love! And coco beans." - nutriment_factor = 2 * FOOD_METABOLISM - color = "#403010" // rgb: 64, 48, 16 - adj_temp = 5 - - coffee - name = "Coffee" - id = "coffee" - description = "Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant." - color = "#482000" // rgb: 72, 32, 0 - adj_dizzy = -5 - adj_drowsy = -3 - adj_sleepy = -2 - adj_temp = 25 - overdose_threshold = 45 - - on_mob_life(var/mob/living/M as mob) - if(adj_temp > 0 && holder.has_reagent("frostoil")) - holder.remove_reagent("frostoil", 10*REAGENTS_METABOLISM) - if(prob(50)) - M.AdjustParalysis(-1) - M.AdjustStunned(-1) - M.AdjustWeakened(-1) - ..() - return - - overdose_process(var/mob/living/M as mob) - if(volume > 45) - M.Jitter(5) - - ..() - return - - icecoffee - name = "Iced Coffee" - id = "icecoffee" - description = "Coffee and ice, refreshing and cool." - color = "#102838" // rgb: 16, 40, 56 - adj_temp = -5 - - soy_latte - name = "Soy Latte" - id = "soy_latte" - description = "A nice and tasty beverage while you are reading your hippie books." - color = "#664300" // rgb: 102, 67, 0 - adj_sleepy = 0 - adj_temp = 5 - - on_mob_life(var/mob/living/M as mob) - ..() - M.sleeping = 0 - if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0) - return - - cafe_latte - name = "Cafe Latte" - id = "cafe_latte" - description = "A nice, strong and tasty beverage while you are reading." - color = "#664300" // rgb: 102, 67, 0 - adj_sleepy = 0 - adj_temp = 5 - - on_mob_life(var/mob/living/M as mob) - ..() - M.sleeping = 0 - if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0) - return - - tea - name = "Tea" - id = "tea" - description = "Tasty black tea: It has antioxidants. It's good for you!" - color = "#101000" // rgb: 16, 16, 0 - adj_dizzy = -2 - adj_drowsy = -1 - adj_sleepy = -3 - adj_temp = 20 - - on_mob_life(var/mob/living/M as mob) - ..() - if(M.getToxLoss() && prob(20)) - M.adjustToxLoss(-1) - return - - icetea - name = "Iced Tea" - id = "icetea" - description = "No relation to a certain rap artist/ actor." - color = "#104038" // rgb: 16, 64, 56 - adj_temp = -5 - - kahlua - name = "Kahlua" - id = "kahlua" - description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!" - color = "#664300" // rgb: 102, 67, 0 - adj_dizzy = -5 - adj_drowsy = -3 - adj_sleepy = -2 - - on_mob_life(var/mob/living/M as mob) - ..() - M.Jitter(5) - return - - cold - name = "Cold drink" - adj_temp = -5 - - tonic - name = "Tonic Water" - id = "tonic" - description = "It tastes strange but at least the quinine keeps the Space Malaria at bay." - color = "#664300" // rgb: 102, 67, 0 - adj_dizzy = -5 - adj_drowsy = -3 - adj_sleepy = -2 - - sodawater - name = "Soda Water" - id = "sodawater" - description = "A can of club soda. Why not make a scotch and soda?" - color = "#619494" // rgb: 97, 148, 148 - adj_dizzy = -5 - adj_drowsy = -3 - - ice - name = "Ice" - id = "ice" - description = "Frozen water, your dentist wouldn't like you chewing this." - reagent_state = SOLID - color = "#619494" // rgb: 97, 148, 148 - - space_cola - name = "Cola" - id = "cola" - description = "A refreshing beverage." - reagent_state = LIQUID - color = "#100800" // rgb: 16, 8, 0 - adj_drowsy = -3 - - nuka_cola - name = "Nuka Cola" - id = "nuka_cola" - description = "Cola, cola never changes." - color = "#100800" // rgb: 16, 8, 0 - adj_sleepy = -2 - - on_mob_life(var/mob/living/M as mob) - M.Jitter(20) - M.druggy = max(M.druggy, 30) - M.dizziness +=5 - M.drowsyness = 0 - M.status_flags |= GOTTAGOFAST - ..() - return - - spacemountainwind - name = "Space Mountain Wind" - id = "spacemountainwind" - description = "Blows right through you like a space wind." - color = "#102000" // rgb: 16, 32, 0 - adj_drowsy = -7 - adj_sleepy = -1 - - dr_gibb - name = "Dr. Gibb" - id = "dr_gibb" - description = "A delicious blend of 42 different flavours" - color = "#102000" // rgb: 16, 32, 0 - adj_drowsy = -6 - - space_up - name = "Space-Up" - id = "space_up" - description = "Tastes like a hull breach in your mouth." - color = "#202800" // rgb: 32, 40, 0 - adj_temp = -8 - - lemon_lime - name = "Lemon Lime" - description = "A tangy substance made of 0.5% natural citrus!" - id = "lemon_lime" - color = "#878F00" // rgb: 135, 40, 0 - adj_temp = -8 - - lemonade - name = "Lemonade" - description = "Oh the nostalgia..." - id = "lemonade" - color = "#FFFF00" // rgb: 255, 255, 0 - - kiraspecial - name = "Kira Special" - description = "Long live the guy who everyone had mistaken for a girl. Baka!" - id = "kiraspecial" - color = "#CCCC99" // rgb: 204, 204, 153 - - brownstar - name = "Brown Star" - description = "Its not what it sounds like..." - id = "brownstar" - color = "#9F3400" // rgb: 159, 052, 000 - adj_temp = - 2 - - milkshake - name = "Milkshake" - description = "Glorious brainfreezing mixture." - id = "milkshake" - color = "#AEE5E4" // rgb" 174, 229, 228 - adj_temp = -9 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(!data) data = 1 - switch(data) - if(1 to 15) - M.bodytemperature -= 5 * TEMPERATURE_DAMAGE_COEFFICIENT - if(holder.has_reagent("capsaicin")) - holder.remove_reagent("capsaicin", 5) - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature -= rand(5,20) - if(15 to 25) - M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature -= rand(10,20) - if(25 to INFINITY) - M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT - if(prob(1)) M.emote("shiver") - if(istype(M, /mob/living/carbon/slime)) - M.bodytemperature -= rand(15,20) - data++ - holder.remove_reagent(src.id, FOOD_METABOLISM) - ..() - return - - rewriter - name = "Rewriter" - description = "The secert of the sanctuary of the Libarian..." - id = "rewriter" - color = "#485000" // rgb:72, 080, 0 - - on_mob_life(var/mob/living/M as mob) - ..() - M.Jitter(5) - return - - hippies_delight - name = "Hippie's Delight" - id = "hippiesdelight" - description = "You just don't get it maaaan." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.druggy = max(M.druggy, 50) - if(!data) data = 1 - switch(data) - if(1 to 5) - if (!M.stuttering) M.stuttering = 1 - M.Dizzy(10) - if(prob(10)) M.emote(pick("twitch","giggle")) - if(5 to 10) - if (!M.stuttering) M.stuttering = 1 - M.Jitter(20) - M.Dizzy(20) - M.druggy = max(M.druggy, 45) - if(prob(20)) M.emote(pick("twitch","giggle")) - if (10 to INFINITY) - if (!M.stuttering) M.stuttering = 1 - M.Jitter(40) - M.Dizzy(40) - M.druggy = max(M.druggy, 60) - if(prob(30)) M.emote(pick("twitch","giggle")) - holder.remove_reagent(src.id, 0.2) - data++ - ..() - return - -//ALCOHOL WOO - ethanol - name = "Ethanol" //Parent class for all alcoholic reagents. - id = "ethanol" - description = "A well-known alcohol with a variety of applications." - reagent_state = LIQUID - nutriment_factor = 0 //So alcohol can fill you up! If they want to. - color = "#404030" // rgb: 64, 64, 48 - var/datum/martial_art/drunk_brawling/F = new - var/dizzy_adj = 3 - var/slurr_adj = 3 - var/confused_adj = 2 - var/slur_start = 65 //amount absorbed after which mob starts slurring - var/brawl_start = 75 //amount absorbed after which mob switches to drunken brawling as a fighting style - var/confused_start = 130 //amount absorbed after which mob starts confusing directions - var/vomit_start = 180 //amount absorbed after which mob starts vomitting - var/blur_start = 260 //amount absorbed after which mob starts getting blurred vision - var/pass_out = 325 //amount absorbed after which mob starts passing out - - on_mob_life(var/mob/living/M as mob, var/alien) - // Sobering multiplier. - // Sober block makes it more difficult to get drunk - var/sober_str=!(SOBER in M.mutations)?1:2 - M:nutrition += nutriment_factor - holder.remove_reagent(src.id, FOOD_METABOLISM) - if(!src.data) data = 1 - src.data++ - - var/d = data - - // make all the beverages work together - for(var/datum/reagent/ethanol/A in holder.reagent_list) - if(isnum(A.data)) d += A.data - - d/=sober_str - - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species && (H.species.name == "Skrell" || H.species.name =="Neara")) //Skrell and Neara get very drunk very quickly. - d*=5 - - M.dizziness += dizzy_adj. - if(d >= slur_start && d < pass_out) - if (!M:slurring) M:slurring = 1 - M:slurring += slurr_adj/sober_str - if(d >= brawl_start && ishuman(M)) - var/mob/living/carbon/human/H = M - F.teach(H,1) - if(src.volume < 3) - if(H.martial_art == F) - F.remove(H) - if(d >= confused_start && prob(33)) - if (!M:confused) M:confused = 1 - M.confused = max(M:confused+(confused_adj/sober_str),0) - if(d >= blur_start) - M.eye_blurry = max(M.eye_blurry, 10/sober_str) - M:drowsyness = max(M:drowsyness, 0) - if(d >= vomit_start) - if(prob(8)) - M.fakevomit() - if(d >= pass_out) - M:paralysis = max(M:paralysis, 20/sober_str) - M:drowsyness = max(M:drowsyness, 30/sober_str) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/liver/L = H.internal_organs_by_name["liver"] - if (istype(L)) - L.take_damage(0.1, 1) - H.adjustToxLoss(0.1) - holder.remove_reagent(src.id, 0.4) - ..() - return - - reaction_obj(var/obj/O, var/volume) - if(istype(O,/obj/item/weapon/paper)) - var/obj/item/weapon/paper/paperaffected = O - paperaffected.clearpaper() - usr << "The solution melts away the ink on the paper." - if(istype(O,/obj/item/weapon/book)) - if(volume >= 5) - var/obj/item/weapon/book/affectedbook = O - affectedbook.dat = null - usr << "The solution melts away the ink on the book." - else - usr << "It wasn't enough..." - return - - reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with ethanol isn't quite as good as fuel. - if(!istype(M, /mob/living)) - return - if(method == TOUCH) - M.adjust_fire_stacks(volume / 15) - return - - beer //It's really much more stronger than other drinks. - name = "Beer" - id = "beer" - description = "An alcoholic beverage made from malted grains, hops, yeast, and water." - nutriment_factor = 2 * FOOD_METABOLISM - color = "#664300" // rgb: 102, 67, 0 - on_mob_life(var/mob/living/M as mob) - ..() - M:jitteriness = max(M:jitteriness-3,0) - return - - cider - name = "Cider" - id = "cider" - description = "An alcoholic beverage derived from apples." - color = "#174116" - - whiskey - name = "Whiskey" - id = "whiskey" - description = "A superb and well-aged single-malt whiskey. Damn." - color = "#664300" // rgb: 102, 67, 0 - dizzy_adj = 4 - - specialwhiskey - name = "Special Blend Whiskey" - id = "specialwhiskey" - description = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything." - color = "#664300" // rgb: 102, 67, 0 - slur_start = 30 //amount absorbed after which mob starts slurring - brawl_start = 40 - - gin - name = "Gin" - id = "gin" - description = "It's gin. In space. I say, good sir." - color = "#664300" // rgb: 102, 67, 0 - dizzy_adj = 3 - - absinthe - name = "Absinthe" - id = "absinthe" - description = "Watch out that the Green Fairy doesn't come for you!" - color = "#33EE00" // rgb: lots, ??, ?? - overdose_threshold = 30 - dizzy_adj = 5 - slur_start = 25 - brawl_start = 40 - confused_start = 100 - - //copy paste from LSD... shoot me - on_mob_life(var/mob/M) - if(!M) M = holder.my_atom - if(!data) data = 1 - data++ - M:hallucination += 5 - if(volume > overdose_threshold) - M:adjustToxLoss(1) - ..() - return - - rum - name = "Rum" - id = "rum" - description = "Popular with the sailors. Not very popular with everyone else." - color = "#664300" // rgb: 102, 67, 0 - overdose_threshold = 30 - - on_mob_life(var/mob/living/M as mob) - ..() - M.dizziness +=5 - if(volume > overdose_threshold) - M:adjustToxLoss(1) - return - - mojito - name = "Mojito" - id = "mojito" - description = "If it's good enough for Spesscuba, it's good enough for you." - color = "#664300" // rgb: 102, 67, 0 - - vodka - name = "Vodka" - id = "vodka" - description = "Number one drink AND fueling choice for Russians worldwide." - color = "#664300" // rgb: 102, 67, 0 - - sake - name = "Sake" - id = "sake" - description = "Anime's favorite drink." - color = "#664300" // rgb: 102, 67, 0 - - tequilla - name = "Tequila" - id = "tequilla" - description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?" - color = "#A8B0B7" // rgb: 168, 176, 183 - - vermouth - name = "Vermouth" - id = "vermouth" - description = "You suddenly feel a craving for a martini..." - color = "#664300" // rgb: 102, 67, 0 - - wine - name = "Wine" - id = "wine" - description = "An premium alchoholic beverage made from distilled grape juice." - color = "#7E4043" // rgb: 126, 64, 67 - dizzy_adj = 2 - slur_start = 65 //amount absorbed after which mob starts slurring - confused_start = 145 //amount absorbed after which mob starts confusing directions - - cognac - name = "Cognac" - id = "cognac" - description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication." - color = "#664300" // rgb: 102, 67, 0 - dizzy_adj = 4 - confused_start = 115 //amount absorbed after which mob starts confusing directions - - suicider //otherwise known as "I want to get so smashed my liver gives out and I die from alcohol poisoning". - name = "Suicider" - id = "suicider" - description = "An unbelievably strong and potent variety of Cider." - color = "#CF3811" - dizzy_adj = 20 - slurr_adj = 20 - confused_adj = 3 - slur_start = 15 - brawl_start = 25 - confused_start = 40 - blur_start = 60 - pass_out = 80 - - ale - name = "Ale" - id = "ale" - description = "A dark alchoholic beverage made by malted barley and yeast." - color = "#664300" // rgb: 102, 67, 0 - - thirteenloko - name = "Thirteen Loko" - id = "thirteenloko" - description = "A potent mixture of caffeine and alcohol." - reagent_state = LIQUID - color = "#102000" // rgb: 16, 32, 0 - - on_mob_life(var/mob/living/M as mob) - ..() - M:nutrition += nutriment_factor - holder.remove_reagent(src.id, FOOD_METABOLISM) - M:drowsyness = max(0,M:drowsyness-7) - //if(!M:sleeping_willingly) - // M:sleeping = max(0,M.sleeping-2) - if (M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature-5) - M.Jitter(1) - return - - -/////////////////////////////////////////////////////////////////cocktail entities////////////////////////////////////////////// - - bilk - name = "Bilk" - id = "bilk" - description = "This appears to be beer mixed with milk. Disgusting." - reagent_state = LIQUID - color = "#895C4C" // rgb: 137, 92, 76 - - atomicbomb - name = "Atomic Bomb" - id = "atomicbomb" - description = "Nuclear proliferation never tasted so good." - reagent_state = LIQUID - color = "#666300" // rgb: 102, 99, 0 - - threemileisland - name = "THree Mile Island Iced Tea" - id = "threemileisland" - description = "Made for a woman, strong enough for a man." - reagent_state = LIQUID - color = "#666340" // rgb: 102, 99, 64 - - goldschlager - name = "Goldschlager" - id = "goldschlager" - description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - patron - name = "Patron" - id = "patron" - description = "Tequila with silver in it, a favorite of alcoholic women in the club scene." - reagent_state = LIQUID - color = "#585840" // rgb: 88, 88, 64 - - gintonic - name = "Gin and Tonic" - id = "gintonic" - description = "An all time classic, mild cocktail." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - cuba_libre - name = "Cuba Libre" - id = "cubalibre" - description = "Rum, mixed with cola. Viva la revolution." - reagent_state = LIQUID - color = "#3E1B00" // rgb: 62, 27, 0 - - whiskey_cola - name = "Whiskey Cola" - id = "whiskeycola" - description = "Whiskey, mixed with cola. Surprisingly refreshing." - reagent_state = LIQUID - color = "#3E1B00" // rgb: 62, 27, 0 - - martini - name = "Classic Martini" - id = "martini" - description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - vodkamartini - name = "Vodka Martini" - id = "vodkamartini" - description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - white_russian - name = "White Russian" - id = "whiterussian" - description = "That's just, like, your opinion, man..." - reagent_state = LIQUID - color = "#A68340" // rgb: 166, 131, 64 - - screwdrivercocktail - name = "Screwdriver" - id = "screwdrivercocktail" - description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious." - reagent_state = LIQUID - color = "#A68310" // rgb: 166, 131, 16 - - booger - name = "Booger" - id = "booger" - description = "Ewww..." - reagent_state = LIQUID - color = "#A68310" // rgb: 166, 131, 16 - - bloody_mary - name = "Bloody Mary" - id = "bloodymary" - description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - gargle_blaster - name = "Pan-Galactic Gargle Blaster" - id = "gargleblaster" - description = "Whoah, this stuff looks volatile!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - brave_bull - name = "Brave Bull" - id = "bravebull" - description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - tequilla_sunrise - name = "Tequila Sunrise" - id = "tequillasunrise" - description = "Tequila and orange juice. Much like a Screwdriver, only Mexican~" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - toxins_special - name = "Toxins Special" - id = "toxinsspecial" - description = "This thing is FLAMING!. CALL THE DAMN SHUTTLE!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - beepsky_smash - name = "Beepsky Smash" - id = "beepskysmash" - description = "Deny drinking this and prepare for THE LAW." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - changelingsting - name = "Changeling Sting" - id = "changelingsting" - description = "You take a tiny sip and feel a burning sensation..." - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - - irish_cream - name = "Irish Cream" - id = "irishcream" - description = "Whiskey-imbued cream, what else would you expect from the Irish." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - manly_dorf - name = "The Manly Dorf" - id = "manlydorf" - description = "Beer and Ale, brought together in a delicious mix. Intended for true men only." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - longislandicedtea - name = "Long Island Iced Tea" - id = "longislandicedtea" - description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - moonshine - name = "Moonshine" - id = "moonshine" - description = "You've really hit rock bottom now... your liver packed its bags and left last night." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - b52 - name = "B-52" - id = "b52" - description = "Coffee, Irish Cream, and congac. You will get bombed." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - irishcoffee - name = "Irish Coffee" - id = "irishcoffee" - description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - margarita - name = "Margarita" - id = "margarita" - description = "On the rocks with salt on the rim. Arriba~!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - black_russian - name = "Black Russian" - id = "blackrussian" - description = "For the lactose-intolerant. Still as classy as a White Russian." - reagent_state = LIQUID - color = "#360000" // rgb: 54, 0, 0 - - manhattan - name = "Manhattan" - id = "manhattan" - description = "The Detective's undercover drink of choice. He never could stomach gin..." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - manhattan_proj - name = "Manhattan Project" - id = "manhattan_proj" - description = "A scienitst's drink of choice, for pondering ways to blow up the station." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - whiskeysoda - name = "Whiskey Soda" - id = "whiskeysoda" - description = "Ultimate refreshment." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - antifreeze - name = "Anti-freeze" - id = "antifreeze" - description = "Ultimate refreshment." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - barefoot - name = "Barefoot" - id = "barefoot" - description = "Barefoot and pregnant" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - snowwhite - name = "Snow White" - id = "snowwhite" - description = "A cold refreshment" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - demonsblood - name = "Demons Blood" - id = "demonsblood" - description = "AHHHH!!!!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - dizzy_adj = 10 - slurr_adj = 10 - - vodkatonic - name = "Vodka and Tonic" - id = "vodkatonic" - description = "For when a gin and tonic isn't russian enough." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - dizzy_adj = 4 - slurr_adj = 3 - - ginfizz - name = "Gin Fizz" - id = "ginfizz" - description = "Refreshingly lemony, deliciously dry." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - dizzy_adj = 4 - slurr_adj = 3 - - bahama_mama - name = "Bahama mama" - id = "bahama_mama" - description = "Tropic cocktail." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - singulo - name = "Singulo" - id = "singulo" - description = "A blue-space beverage!" - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - dizzy_adj = 15 - slurr_adj = 15 - - sbiten - name = "Sbiten" - id = "sbiten" - description = "A spicy Vodka! Might be a little hot for the little guys!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - ..() - if (M.bodytemperature < 360) - M.bodytemperature = min(360, M.bodytemperature+50) //310 is the normal bodytemp. 310.055 - return - - devilskiss - name = "Devils Kiss" - id = "devilskiss" - description = "Creepy time!" - reagent_state = LIQUID - color = "#A68310" // rgb: 166, 131, 16 - - red_mead - name = "Red Mead" - id = "red_mead" - description = "The true Viking drink! Even though it has a strange red color." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - mead - name = "Mead" - id = "mead" - description = "A Vikings drink, though a cheap one." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - iced_beer - name = "Iced Beer" - id = "iced_beer" - description = "A beer which is so cold the air around it freezes." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - ..() - if (M.bodytemperature < 270) - M.bodytemperature = min(270, M.bodytemperature-40) //310 is the normal bodytemp. 310.055 - return - - grog - name = "Grog" - id = "grog" - description = "Watered down rum, Nanotrasen approves!" - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - aloe - name = "Aloe" - id = "aloe" - description = "So very, very, very good." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - andalusia - name = "Andalusia" - id = "andalusia" - description = "A nice, strange named drink." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - alliescocktail - name = "Allies Cocktail" - id = "alliescocktail" - description = "A drink made from your allies." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - acid_spit - name = "Acid Spit" - id = "acidspit" - description = "A drink by Nanotrasen. Made from live aliens." - reagent_state = LIQUID - color = "#365000" // rgb: 54, 80, 0 - - amasec - name = "Amasec" - id = "amasec" - description = "Official drink of the Imperium." - reagent_state = LIQUID - color = "#664300" // rgb: 102, 67, 0 - - - neurotoxin - name = "Neurotoxin" - id = "neurotoxin" - description = "A strong neurotoxin that puts the subject into a death-like state." - reagent_state = LIQUID - color = "#2E2E61" // rgb: 46, 46, 97 - - on_mob_life(var/mob/living/M as mob) - M.weakened = max(M.weakened, 3) - if(!data) - data = 1 - data++ - M.dizziness +=6 - if(data >= 15 && data <45) - if (!M.slurring) - M.slurring = 1 - M.slurring += 3 - else if(data >= 45 && prob(50) && data <55) - M.confused = max(M.confused+3,0) - else if(data >=55) - M.druggy = max(M.druggy, 55) - else if(data >=200) - M.adjustToxLoss(2) - ..() - return - - bananahonk - name = "Banana Mama" - id = "bananahonk" - description = "A drink from Clown Heaven." - nutriment_factor = 1 * FOOD_METABOLISM - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - if(istype(M, /mob/living/carbon/human) && M.job in list("Clown")) - if(!M) M = holder.my_atom - M.heal_organ_damage(1,1) - M.nutrition += nutriment_factor - ..() - return - ..() - - silencer - name = "Silencer" - id = "silencer" - description = "A drink from Mime Heaven." - nutriment_factor = 1 * FOOD_METABOLISM - color = "#664300" // rgb: 102, 67, 0 - - on_mob_life(var/mob/living/M as mob) - M.nutrition += nutriment_factor - if(istype(M, /mob/living/carbon/human) && M.job in list("Mime")) - if(!M) M = holder.my_atom - M.heal_organ_damage(1,1) - M.nutrition += nutriment_factor - ..() - return - ..() - - changelingsting - name = "Changeling Sting" - id = "changelingsting" - description = "A stingy drink." - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - - on_mob_life(var/mob/living/M as mob) - ..() - M.dizziness +=5 - return - - erikasurprise - name = "Erika Surprise" - id = "erikasurprise" - description = "The surprise is, it's green!" - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - - irishcarbomb - name = "Irish Car Bomb" - id = "irishcarbomb" - description = "Mmm, tastes like chocolate cake..." - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - - on_mob_life(var/mob/living/M as mob) - ..() - M.dizziness +=5 - return - - syndicatebomb - name = "Syndicate Bomb" - id = "syndicatebomb" - description = "A Syndicate bomb" - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - - erikasurprise - name = "Erika Surprise" - id = "erikasurprise" - description = "The surprise is, it's green!" - reagent_state = LIQUID - color = "#2E6671" // rgb: 46, 102, 113 - - driestmartini - name = "Driest Martini" - id = "driestmartini" - description = "Only for the experienced. You think you see sand floating in the glass." - nutriment_factor = 1 * FOOD_METABOLISM - color = "#2E6671" // rgb: 46, 102, 113 - - on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=10 - if(data >= 55 && data <115) - if (!M.stuttering) M.stuttering = 1 - M.stuttering += 10 - else if(data >= 115 && prob(33)) - M.confused = max(M.confused+15,15) - ..() - - return - -// Undefine the alias for REAGENTS_EFFECT_MULTIPLER -#undef REM - - -/datum/reagent/Destroy() - holder = null - return ..() diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm deleted file mode 100644 index 8fcd9e8117b..00000000000 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ /dev/null @@ -1,1576 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -datum - chemical_reaction - var/name = null - var/id = null - var/result = null - var/list/required_reagents = list() - var/list/required_catalysts = list() - - // Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things - var/atom/required_container = null // the container required for the reaction to happen - var/required_other = 0 // an integer required for the reaction to happen - - var/result_amount = 0 - var/secondary = 0 // set to nonzero if secondary reaction - var/list/secondary_results = list() //additional reagents produced by the reaction - var/min_temp = 0 //Minimum temperature required for the reaction to occur (heat to/above this). min_temp = 0 means no requirement - var/max_temp = 9999 //Maximum temperature allowed for the reaction to occur (cool to/below this). - var/mix_message = "The solution begins to bubble." - var/mix_sound = 'sound/effects/bubbles.ogg' - var/no_message = 0 - - - proc - on_reaction(var/datum/reagents/holder, var/created_volume) - return - - //I recommend you set the result amount to the total volume of all components. - - explosion_potassium - name = "Explosion" - id = "explosion_potassium" - result = null - required_reagents = list("water" = 1, "potassium" = 1) - result_amount = 2 - mix_message = "The mixture explodes!" - - on_reaction(var/datum/reagents/holder, var/created_volume) - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0) - e.start() - holder.clear_reagents() - return - - emp_pulse - name = "EMP Pulse" - id = "emp_pulse" - result = null - required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense - result_amount = 2 - - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - // 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes. - // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades. - empulse(location, round(created_volume / 24), round(created_volume / 14), 1) - holder.clear_reagents() - return -/* - silicate - name = "Silicate" - id = "silicate" - result = "silicate" - required_reagents = list("aluminum" = 1, "silicon" = 1, "oxygen" = 1) - result_amount = 3 -*/ - - ice - name = "Ice" - id = "ice" - result = "ice" - required_reagents = list("water" = 1) - result_amount = 1 - max_temp = 273 - mix_message = "Ice forms as the water freezes." - mix_sound = null - - sterilizine - name = "Sterilizine" - id = "sterilizine" - result = "sterilizine" - required_reagents = list("ethanol" = 1, "charcoal" = 1, "chlorine" = 1) - result_amount = 3 - - mutagen - name = "Unstable mutagen" - id = "mutagen" - result = "mutagen" - required_reagents = list("radium" = 1, "plasma" = 1, "chlorine" = 1) - result_amount = 3 - mix_message = "The substance turns neon green and bubbles unnervingly." - - hydrocodone - name = "Hydrocodone" - id = "hydrocodone" - result = "hydrocodone" - required_reagents = list("morphine" = 1, "sacid" = 1, "water" = 1, "oil" = 1) - result_amount = 2 - - thermite - name = "Thermite" - id = "thermite" - result = "thermite" - required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1) - result_amount = 3 - - space_drugs - name = "Space Drugs" - id = "space_drugs" - result = "space_drugs" - required_reagents = list("mercury" = 1, "sugar" = 1, "lithium" = 1) - result_amount = 3 - mix_message = "Slightly dizzying fumes drift from the solution." - - lube - name = "Space Lube" - id = "lube" - result = "lube" - required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1) - result_amount = 3 - mix_message = "The substance turns a striking cyan and becomes oily." - - mitocholide - name = "mitocholide" - id = "mitocholide" - result = "mitocholide" - required_reagents = list("synthflesh" = 1, "cryoxadone" = 1, "plasma" = 1) - result_amount = 3 - - holy_water - name = "Holy Water" - id = "holywater" - result = "holywater" - required_reagents = list("water" = 1, "mercury" = 1, "wine" = 1) - result_amount = 3 - mix_message = "The water somehow seems purified. Or maybe defiled." - - cryoxadone - name = "Cryoxadone" - id = "cryoxadone" - result = "cryoxadone" - required_reagents = list("cryostylane" = 1, "plasma" = 1, "acetone" = 1, "mutagen" = 1) - result_amount = 4 - mix_message = "The solution bubbles softly." - - spaceacillin - name = "Spaceacillin" - id = "spaceacillin" - result = "spaceacillin" - required_reagents = list("fungus" = 1, "ethanol" = 1) - result_amount = 2 - mix_message = "The solvent extracts an antibiotic compound from the fungus." - - Audioline - name = "Audioline" - id = "audioline" - result = "audioline" - required_reagents = list("spaceacillin" = 1, "salglu_solution" = 1, "epinephrine" = 1) - result_amount = 3 - - glycerol - name = "Glycerol" - id = "glycerol" - result = "glycerol" - required_reagents = list("cornoil" = 3, "sacid" = 1) - result_amount = 1 - - nitroglycerin - name = "Nitroglycerin" - id = "nitroglycerin" - result = "nitroglycerin" - required_reagents = list("glycerol" = 1, "facid" = 1, "sacid" = 1) - result_amount = 2 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0) - e.start() - - holder.clear_reagents() - return - - sodiumchloride - name = "Sodium Chloride" - id = "sodiumchloride" - result = "sodiumchloride" - required_reagents = list("sodium" = 1, "chlorine" = 1, "water" = 1) - result_amount = 3 - mix_message = "The solution crystallizes with a brief flare of light." - - rezadone - name = "Rezadone" - id = "rezadone" - result = "rezadone" - required_reagents = list("carpotoxin" = 1, "spaceacillin" = 1, "copper" = 1) - result_amount = 3 - - lsd - name = "Lysergic acid diethylamide" - id = "lsd" - result = "lsd" - required_reagents = list("diethylamine" = 1, "fungus" = 1) - result_amount = 3 - mix_message = "The mixture turns a rather unassuming color and settles." - - plastication - name = "Plastic" - id = "solidplastic" - result = null - required_reagents = list("facid" = 10, "plasticide" = 20) - result_amount = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/mineral/plastic - M.amount = 10 - M.loc = get_turf(holder.my_atom) - return - - virus_food - name = "Virus Food" - id = "virusfood" - result = "virusfood" - required_reagents = list("water" = 1, "milk" = 1, "oxygen" = 1) - result_amount = 3 -/* - mix_virus - name = "Mix Virus" - id = "mixvirus" - result = "blood" - required_reagents = list("virusfood" = 5) - required_catalysts = list("blood") - var/level = 2 - - on_reaction(var/datum/reagents/holder, var/created_volume) - - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list - if(B && B.data) - var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] - if(D) - D.Evolve(level - rand(0, 1)) - - - mix_virus_2 - - name = "Mix Virus 2" - id = "mixvirus2" - required_reagents = list("mutagen" = 5) - level = 4 - - rem_virus - - name = "Devolve Virus" - id = "remvirus" - required_reagents = list("synaptizine" = 5) - - on_reaction(var/datum/reagents/holder, var/created_volume) - - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list - if(B && B.data) - var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] - if(D) - D.Devolve() -*/ - condensedcapsaicin - name = "Condensed Capsaicin" - id = "condensedcapsaicin" - result = "condensedcapsaicin" - required_reagents = list("capsaicin" = 2) - required_catalysts = list("plasma" = 5) - result_amount = 1 -/////////////////////////////////////////////////////////////////////////////////// - -// foam and foam precursor - - surfactant - name = "Foam surfactant" - id = "foam surfactant" - result = "fluorosurfactant" - required_reagents = list("fluorine" = 2, "carbon" = 2, "sacid" = 1) - result_amount = 5 - mix_message = "A head of foam results from the mixture's constant fizzing." - - - foam - name = "Foam" - id = "foam" - result = null - required_reagents = list("fluorosurfactant" = 1, "water" = 1) - result_amount = 2 - - on_reaction(var/datum/reagents/holder, var/created_volume) - - - var/location = get_turf(holder.my_atom) - for(var/mob/M in viewers(5, location)) - M << "\red The solution violently bubbles!" - - location = get_turf(holder.my_atom) - - for(var/mob/M in viewers(5, location)) - M << "\red The solution spews out foam!" - - //world << "Holder volume is [holder.total_volume]" - //for(var/datum/reagent/R in holder.reagent_list) - // world << "[R.name] = [R.volume]" - - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 0) - s.start() - holder.clear_reagents() - return - - metalfoam - name = "Metal Foam" - id = "metalfoam" - result = null - required_reagents = list("aluminum" = 3, "fluorosurfactant" = 1, "sacid" = 1) - result_amount = 5 - - on_reaction(var/datum/reagents/holder, var/created_volume) - - - var/location = get_turf(holder.my_atom) - - for(var/mob/M in viewers(5, location)) - M << "\red The solution spews out a metalic foam!" - - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 1) - s.start() - return - - ironfoam - name = "Iron Foam" - id = "ironlfoam" - result = null - required_reagents = list("iron" = 3, "fluorosurfactant" = 1, "sacid" = 1) - result_amount = 5 - - on_reaction(var/datum/reagents/holder, var/created_volume) - - - var/location = get_turf(holder.my_atom) - - for(var/mob/M in viewers(5, location)) - M << "\red The solution spews out a metalic foam!" - - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 2) - s.start() - return - - // Synthesizing these three chemicals is pretty complex in real life, but fuck it, it's just a game! - ammonia - name = "Ammonia" - id = "ammonia" - result = "ammonia" - required_reagents = list("hydrogen" = 3, "nitrogen" = 1) - result_amount = 3 - mix_message = "The mixture bubbles, emitting an acrid reek." - - diethylamine - name = "Diethylamine" - id = "diethylamine" - result = "diethylamine" - required_reagents = list ("ammonia" = 1, "ethanol" = 1) - result_amount = 2 - min_temp = 374 - mix_message = "A horrible smell pours forth from the mixture." - - space_cleaner - name = "Space cleaner" - id = "cleaner" - result = "cleaner" - required_reagents = list("ammonia" = 1, "water" = 1, "ethanol" = 1) - result_amount = 3 - mix_message = "Ick, this stuff really stinks. Sure does make the container sparkle though!" - - sulfuric_acid - name = "Sulfuric Acid" - id = "sacid" - result = "sacid" - required_reagents = list("sulfur" = 1, "oxygen" = 1, "hydrogen" = 1) - result_amount = 2 - mix_message = "The mixture gives off a sharp acidic tang." - -///////Changeling Blood Test///////////// -/* - changeling_test - name = "Changeling blood test" - id = "changelingblood" - result = "blood" - required_reagents = list("blood" = 5) - required_catalysts = list("fuel") - result_amount = 1 //Needs this in order to check the donor, as the data var in the reacted blood gets transferred. - on_reaction(var/datum/reagents/holder, var/created_volume) - if(!holder.reagent_list) //reagent_list is not null - return - var/datum/reagent/blood/B = locate() in holder.reagent_list - if(!B) //B is not null - return - var/mob/living/carbon/human/H = B.data["donor"] - if(!H) //H is not null. - return - if(H.mind && H.mind.changeling) //Checks if H, the blood donor is a ling. - for(var/mob/M in viewers(get_turf(holder.my_atom), null)) - M.show_message( "The blood writhes and wriggles and sizzles away from the container!", 1, "You hear bubbling and sizzling.", 2) - else - for(var/mob/M in viewers(get_turf(holder.my_atom), null)) - M.show_message( "The blood seems to break apart in the fuel.", 1) - holder.del_reagent("blood") - return -*/ - -/////////////////////////////////////////////NEW SLIME CORE REACTIONS///////////////////////////////////////////// - -//Grey - slimespawn - name = "Slime Spawn" - id = "m_spawn" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/grey - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1) - var/mob/living/carbon/slime/S = new /mob/living/carbon/slime - S.loc = get_turf(holder.my_atom) - - - slimeinaprov - name = "Slime Epinephrine" - id = "m_epinephrine" - result = "epinephrine" - required_reagents = list("water" = 5) - result_amount = 3 - required_other = 1 - required_container = /obj/item/slime_extract/grey - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - - - slimemonkey - name = "Slime Monkey" - id = "m_monkey" - result = null - required_reagents = list("blood" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/grey - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/i = 1, i <= 3, i++) - var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube - M.loc = get_turf(holder.my_atom) - -//Green - slimemutate - name = "Mutation Toxin" - id = "mutationtoxin" - result = "mutationtoxin" - required_reagents = list("plasma" = 5) - result_amount = 1 - required_other = 1 - required_container = /obj/item/slime_extract/green - -//Metal - slimemetal - name = "Slime Metal" - id = "m_metal" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/metal - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal - M.amount = 15 - M.loc = get_turf(holder.my_atom) - var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel - P.amount = 5 - P.loc = get_turf(holder.my_atom) - -//Gold - slimecrit - name = "Slime Crit" - id = "m_tele" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/gold - required_other = 1 - on_reaction(var/datum/reagents/holder) - - var/blocked = blocked_mobs //global variable of blocked mobs - - var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) - - for(var/i = 1, i <= 5, i++) - var/chosen = pick(critters) - var/mob/living/simple_animal/hostile/C = new chosen - C.faction |= "slimesummon" - C.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(C, pick(NORTH,SOUTH,EAST,WEST)) -// for(var/mob/O in viewers(get_turf(holder.my_atom), null)) -// O.show_message(text("\red The slime core fizzles disappointingly,"), 1) - - - slimecritlesser - name = "Slime Crit Lesser" - id = "m_tele3" - result = null - required_reagents = list("blood" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/gold - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate violently!"), 1) - spawn(50) - - if(holder && holder.my_atom) - - var/blocked = blocked_mobs - - var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) - - var/chosen = pick(critters) - var/mob/living/simple_animal/hostile/C = new chosen - C.faction |= "neutral" - C.loc = get_turf(holder.my_atom) - -//Silver - slimebork - name = "Slime Bork" - id = "m_tele2" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/silver - required_other = 1 - on_reaction(var/datum/reagents/holder) - - var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/snacks) - // BORK BORK BORK - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) - - for(var/i = 1, i <= 4 + rand(1,2), i++) - var/chosen = pick(borks) - var/obj/B = new chosen - if(B) - B.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(B, pick(NORTH,SOUTH,EAST,WEST)) - slimedrinks - name = "Slime Drinks" - id = "m_tele3" - result = null - required_reagents = list("water" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/silver - required_other = 1 - on_reaction(var/datum/reagents/holder) - - var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/drinks) - // BORK BORK BORK - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) - - for(var/i = 1, i <= 4 + rand(1,2), i++) - var/chosen = pick(borks) - var/obj/B = new chosen - if(B) - B.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(B, pick(NORTH,SOUTH,EAST,WEST)) - - -//Blue - slimefrost - name = "Slime Frost Oil" - id = "m_frostoil" - result = "frostoil" - required_reagents = list("plasma" = 5) - result_amount = 10 - required_container = /obj/item/slime_extract/blue - required_other = 1 -//Dark Blue - slimefreeze - name = "Slime Freeze" - id = "m_freeze" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/darkblue - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) - sleep(50) - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/M in range (get_turf(holder.my_atom), 7)) - M.bodytemperature -= 140 - M << "\blue You feel a chill!" - -//Orange - slimecasp - name = "Slime Capsaicin Oil" - id = "m_capsaicinoil" - result = "capsaicin" - required_reagents = list("blood" = 5) - result_amount = 10 - required_container = /obj/item/slime_extract/orange - required_other = 1 - - slimefire - name = "Slime fire" - id = "m_fire" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/orange - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) - sleep(50) - var/turf/simulated/T = get_turf(holder.my_atom) - if(istype(T)) - T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50) - -//Yellow - slimeoverload - name = "Slime EMP" - id = "m_emp" - result = null - required_reagents = list("blood" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/yellow - required_other = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - empulse(get_turf(holder.my_atom), 3, 7) - - - slimecell - name = "Slime Powercell" - id = "m_cell" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/yellow - required_other = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/obj/item/weapon/stock_parts/cell/slime/P = new /obj/item/weapon/stock_parts/cell/slime - P.loc = get_turf(holder.my_atom) - - slimeglow - name = "Slime Glow" - id = "m_glow" - result = null - required_reagents = list("water" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/yellow - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The contents of the slime core harden and begin to emit a warm, bright light."), 1) - var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime - F.loc = get_turf(holder.my_atom) - -//Purple - - slimepsteroid - name = "Slime Steroid" - id = "m_steroid" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/purple - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/weapon/slimesteroid/P = new /obj/item/weapon/slimesteroid - P.loc = get_turf(holder.my_atom) - - - - slimejam - name = "Slime Jam" - id = "m_jam" - result = "slimejelly" - required_reagents = list("sugar" = 5) - result_amount = 10 - required_container = /obj/item/slime_extract/purple - required_other = 1 - - -//Dark Purple - slimeplasma - name = "Slime Plasma" - id = "m_plasma" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/darkpurple - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma - P.amount = 10 - P.loc = get_turf(holder.my_atom) - -//Red - slimeglycerol - name = "Slime Glycerol" - id = "m_glycerol" - result = "glycerol" - required_reagents = list("plasma" = 5) - result_amount = 8 - required_container = /obj/item/slime_extract/red - required_other = 1 - - - slimebloodlust - name = "Bloodlust" - id = "m_bloodlust" - result = null - required_reagents = list("blood" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/red - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null)) - slime.rabid = 1 - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The [slime] is driven into a frenzy!."), 1) - -//Pink - slimeppotion - name = "Slime Potion" - id = "m_potion" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/pink - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion - P.loc = get_turf(holder.my_atom) - - -//Black - slimemutate2 - name = "Advanced Mutation Toxin" - id = "mutationtoxin2" - result = "amutationtoxin" - required_reagents = list("plasma" = 5) - result_amount = 1 - required_other = 1 - required_container = /obj/item/slime_extract/black - -//Oil - slimeexplosion - name = "Slime Explosion" - id = "m_explosion" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/oil - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) - sleep(50) - explosion(get_turf(holder.my_atom), 1 ,3, 6) -//Light Pink - slimepotion2 - name = "Slime Potion 2" - id = "m_potion2" - result = null - result_amount = 1 - required_container = /obj/item/slime_extract/lightpink - required_reagents = list("plasma" = 5) - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/weapon/slimepotion2/P = new /obj/item/weapon/slimepotion2 - P.loc = get_turf(holder.my_atom) -//Adamantine - slimegolem - name = "Slime Golem" - id = "m_golem" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/adamantine - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/effect/goleRUNe/Z = new /obj/effect/goleRUNe - Z.loc = get_turf(holder.my_atom) - Z.announce_to_ghosts() -//Bluespace - slimecrystal - name = "Slime Crystal" - id = "m_crystal" - result = null - required_reagents = list("blood" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/bluespace - required_other = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - if(holder.my_atom) - var/obj/item/bluespace_crystal/BC = new(get_turf(holder.my_atom)) - BC.visible_message("The [BC.name] appears out of thin air!") -//Cerulean - slimepsteroid2 - name = "Slime Steroid 2" - id = "m_steroid2" - result = null - required_reagents = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/cerulean - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/weapon/slimesteroid2/P = new /obj/item/weapon/slimesteroid2 - P.loc = get_turf(holder.my_atom) -//Sepia - slimecamera - name = "Slime Camera" - id = "m_camera" - result = null - required_reagents = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/sepia - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/device/camera/P = new /obj/item/device/camera - P.loc = get_turf(holder.my_atom) - - - slimefilm - name = "Slime Film" - id = "m_film" - result = null - required_reagents = list("blood" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/sepia - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/device/camera_film/P = new /obj/item/device/camera_film - P.loc = get_turf(holder.my_atom) -//Pyrite - slimepaint - name = "Slime Paint" - id = "s_paint" - result = null - required_reagents = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/pyrite - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/list/paints = subtypesof(/obj/item/weapon/reagent_containers/glass/paint) - var/chosen = pick(paints) - var/obj/P = new chosen - if(P) - P.loc = get_turf(holder.my_atom) - - -//////////////////////////////////////////FOOD MIXTURES//////////////////////////////////// - - tofu - name = "Tofu" - id = "tofu" - result = null - required_reagents = list("soymilk" = 10) - required_catalysts = list("enzyme" = 5) - result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/weapon/reagent_containers/food/snacks/tofu(location) - return - - chocolate_bar - name = "Chocolate Bar" - id = "chocolate_bar" - result = null - required_reagents = list("soymilk" = 2, "coco" = 2, "sugar" = 2) - result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) - return - - chocolate_bar2 - name = "Chocolate Bar" - id = "chocolate_bar" - result = null - required_reagents = list("milk" = 2, "coco" = 2, "sugar" = 2) - result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - for(var/i = 1, i <= created_volume, i++) - new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) - return - - hot_coco - name = "Hot Coco" - id = "hot_coco" - result = "hot_coco" - required_reagents = list("water" = 5, "coco" = 1) - result_amount = 5 - - chocolate_milk - name = "Chocolate Milk" - id = "chocolate_milk" - result = "chocolate_milk" - required_reagents = list("chocolate" = 1, "milk" = 1) - result_amount = 2 - mix_message = "The mixture turns a nice brown color." - - coffee - name = "Coffee" - id = "coffee" - result = "coffee" - required_reagents = list("coffeepowder" = 1, "water" = 5) - result_amount = 5 - - tea - name = "Tea" - id = "tea" - result = "tea" - required_reagents = list("teapowder" = 1, "water" = 5) - result_amount = 5 - - soysauce - name = "Soy Sauce" - id = "soysauce" - result = "soysauce" - required_reagents = list("soymilk" = 2, "flour" = 1, "sodiumchloride" = 1, "water" = 3) - result_amount = 7 - - cheesewheel - name = "Cheesewheel" - id = "cheesewheel" - result = null - required_reagents = list("milk" = 40) - required_catalysts = list("enzyme" = 5) - result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location) - return - - syntiflesh - name = "Syntiflesh" - id = "syntiflesh" - result = null - required_reagents = list("blood" = 5, "cryoxadone" = 1) - result_amount = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location) - return - - hot_ramen - name = "Hot Ramen" - id = "hot_ramen" - result = "hot_ramen" - required_reagents = list("water" = 1, "dry_ramen" = 3) - result_amount = 3 - - hell_ramen - name = "Hell Ramen" - id = "hell_ramen" - result = "hell_ramen" - required_reagents = list("capsaicin" = 1, "hot_ramen" = 6) - result_amount = 6 - - doughball - name = "Ball of dough" - id = "dough_ball" - result = "dough_ball" - required_reagents = list("flour" = 15, "water" = 5) - required_catalysts = list("enzyme" = 5) - - -////////////////////////////////////////// COCKTAILS ////////////////////////////////////// - - - goldschlager - name = "Goldschlager" - id = "goldschlager" - result = "goldschlager" - required_reagents = list("vodka" = 10, "gold" = 1) - result_amount = 10 - - patron - name = "Patron" - id = "patron" - result = "patron" - required_reagents = list("tequilla" = 10, "silver" = 1) - result_amount = 10 - - bilk - name = "Bilk" - id = "bilk" - result = "bilk" - required_reagents = list("milk" = 1, "beer" = 1) - result_amount = 2 - - icetea - name = "Iced Tea" - id = "icetea" - result = "icetea" - required_reagents = list("ice" = 1, "tea" = 3) - result_amount = 4 - - icecoffee - name = "Iced Coffee" - id = "icecoffee" - result = "icecoffee" - required_reagents = list("ice" = 1, "coffee" = 3) - result_amount = 4 - - nuka_cola - name = "Nuka Cola" - id = "nuka_cola" - result = "nuka_cola" - required_reagents = list("uranium" = 1, "cola" = 6) - result_amount = 6 - - moonshine - name = "Moonshine" - id = "moonshine" - result = "moonshine" - required_reagents = list("nutriment" = 10) - required_catalysts = list("enzyme" = 5) - result_amount = 10 - - wine - name = "Wine" - id = "wine" - result = "wine" - required_reagents = list("berryjuice" = 10) - required_catalysts = list("enzyme" = 5) - result_amount = 10 - - spacebeer - name = "Space Beer" - id = "spacebeer" - result = "beer" - required_reagents = list("cornoil" = 10) - required_catalysts = list("enzyme" = 5) - result_amount = 10 - - vodka - name = "Vodka" - id = "vodka" - result = "vodka" - required_reagents = list("potato" = 10) - required_catalysts = list("enzyme" = 5) - result_amount = 10 - sake - name = "Sake" - id = "sake" - result = "sake" - required_reagents = list("rice" = 10,"water" = 5) - required_catalysts = list("enzyme" = 5) - result_amount = 15 - - kahlua - name = "Kahlua" - id = "kahlua" - result = "kahlua" - required_reagents = list("coffee" = 5, "sugar" = 5, "rum" = 5) - required_catalysts = list("enzyme" = 5) - result_amount = 5 - - kahluaVodka - name = "KahluaVodka" - id = "kahlauVodka" - result = "kahlua" - required_reagents = list("coffee" = 5, "sugar" = 5, "vodka" = 5) - required_catalysts = list("enzyme" = 5) - result_amount = 5 - gin_tonic - name = "Gin and Tonic" - id = "gintonic" - result = "gintonic" - required_reagents = list("gin" = 2, "tonic" = 1) - result_amount = 3 - mix_message = "The tonic water and gin mix together perfectly." - - cuba_libre - name = "Cuba Libre" - id = "cubalibre" - result = "cubalibre" - required_reagents = list("rum" = 2, "cola" = 1) - result_amount = 3 - - mojito - name = "Mojito" - id = "mojito" - result = "mojito" - required_reagents = list("rum" = 1, "sugar" = 1, "limejuice" = 1, "sodawater" = 1) - result_amount = 4 - - martini - name = "Classic Martini" - id = "martini" - result = "martini" - required_reagents = list("gin" = 2, "vermouth" = 1) - result_amount = 3 - - vodkamartini - name = "Vodka Martini" - id = "vodkamartini" - result = "vodkamartini" - required_reagents = list("vodka" = 2, "vermouth" = 1) - result_amount = 3 - - white_russian - name = "White Russian" - id = "whiterussian" - result = "whiterussian" - required_reagents = list("blackrussian" = 3, "cream" = 2) - result_amount = 5 - - whiskey_cola - name = "Whiskey Cola" - id = "whiskeycola" - result = "whiskeycola" - required_reagents = list("whiskey" = 2, "cola" = 1) - result_amount = 3 - - screwdriver - name = "Screwdriver" - id = "screwdrivercocktail" - result = "screwdrivercocktail" - required_reagents = list("vodka" = 2, "orangejuice" = 1) - result_amount = 3 - - bloody_mary - name = "Bloody Mary" - id = "bloodymary" - result = "bloodymary" - required_reagents = list("vodka" = 1, "tomatojuice" = 2, "limejuice" = 1) - result_amount = 4 - - gargle_blaster - name = "Pan-Galactic Gargle Blaster" - id = "gargleblaster" - result = "gargleblaster" - required_reagents = list("vodka" = 1, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1) - result_amount = 5 - - brave_bull - name = "Brave Bull" - id = "bravebull" - result = "bravebull" - required_reagents = list("tequilla" = 2, "kahlua" = 1) - result_amount = 3 - - tequilla_sunrise - name = "Tequilla Sunrise" - id = "tequillasunrise" - result = "tequillasunrise" - required_reagents = list("tequilla" = 2, "orangejuice" = 1) - result_amount = 3 - - toxins_special - name = "Toxins Special" - id = "toxinsspecial" - result = "toxinsspecial" - required_reagents = list("rum" = 2, "vermouth" = 1, "plasma" = 2) - result_amount = 5 - - beepsky_smash - name = "Beepksy Smash" - id = "beepksysmash" - result = "beepskysmash" - required_reagents = list("limejuice" = 2, "whiskey" = 2, "iron" = 1) - result_amount = 4 - - doctor_delight - name = "The Doctor's Delight" - id = "doctordelight" - result = "doctorsdelight" - required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1) - result_amount = 5 - - irish_cream - name = "Irish Cream" - id = "irishcream" - result = "irishcream" - required_reagents = list("whiskey" = 2, "cream" = 1) - result_amount = 3 - - manly_dorf - name = "The Manly Dorf" - id = "manlydorf" - result = "manlydorf" - required_reagents = list ("beer" = 1, "ale" = 2) - result_amount = 3 - - suicider - name = "Suicider" - id = "suicider" - result = "suicider" - required_reagents = list ("vodka" = 1, "cider" = 1, "fuel" = 1, "epinephrine" = 1) - result_amount = 4 - mix_message = "The drinks and chemicals mix together, emitting a potent smell." - - irish_coffee - name = "Irish Coffee" - id = "irishcoffee" - result = "irishcoffee" - required_reagents = list("irishcream" = 1, "coffee" = 1) - result_amount = 2 - - b52 - name = "B-52" - id = "b52" - result = "b52" - required_reagents = list("irishcream" = 1, "kahlua" = 1, "cognac" = 1) - result_amount = 3 - - atomicbomb - name = "Atomic Bomb" - id = "atomicbomb" - result = "atomicbomb" - required_reagents = list("b52" = 10, "uranium" = 1) - result_amount = 10 - - margarita - name = "Margarita" - id = "margarita" - result = "margarita" - required_reagents = list("tequilla" = 2, "limejuice" = 1) - result_amount = 3 - - longislandicedtea - name = "Long Island Iced Tea" - id = "longislandicedtea" - result = "longislandicedtea" - required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 1) - result_amount = 4 - - threemileisland - name = "Three Mile Island Iced Tea" - id = "threemileisland" - result = "threemileisland" - required_reagents = list("longislandicedtea" = 10, "uranium" = 1) - result_amount = 10 - - whiskeysoda - name = "Whiskey Soda" - id = "whiskeysoda" - result = "whiskeysoda" - required_reagents = list("whiskey" = 2, "sodawater" = 1) - result_amount = 3 - - black_russian - name = "Black Russian" - id = "blackrussian" - result = "blackrussian" - required_reagents = list("vodka" = 3, "kahlua" = 2) - result_amount = 5 - - manhattan - name = "Manhattan" - id = "manhattan" - result = "manhattan" - required_reagents = list("whiskey" = 2, "vermouth" = 1) - result_amount = 3 - - manhattan_proj - name = "Manhattan Project" - id = "manhattan_proj" - result = "manhattan_proj" - required_reagents = list("manhattan" = 10, "uranium" = 1) - result_amount = 10 - - vodka_tonic - name = "Vodka and Tonic" - id = "vodkatonic" - result = "vodkatonic" - required_reagents = list("vodka" = 2, "tonic" = 1) - result_amount = 3 - - gin_fizz - name = "Gin Fizz" - id = "ginfizz" - result = "ginfizz" - required_reagents = list("gin" = 2, "sodawater" = 1, "limejuice" = 1) - result_amount = 4 - - bahama_mama - name = "Bahama mama" - id = "bahama_mama" - result = "bahama_mama" - required_reagents = list("rum" = 2, "orangejuice" = 2, "limejuice" = 1, "ice" = 1) - result_amount = 6 - - singulo - name = "Singulo" - id = "singulo" - result = "singulo" - required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5) - result_amount = 10 - - alliescocktail - name = "Allies Cocktail" - id = "alliescocktail" - result = "alliescocktail" - required_reagents = list("martini" = 1, "vodka" = 1) - result_amount = 2 - - demonsblood - name = "Demons Blood" - id = "demonsblood" - result = "demonsblood" - required_reagents = list("rum" = 1, "spacemountainwind" = 1, "blood" = 1, "dr_gibb" = 1) - result_amount = 4 - - booger - name = "Booger" - id = "booger" - result = "booger" - required_reagents = list("cream" = 1, "banana" = 1, "rum" = 1, "watermelonjuice" = 1) - result_amount = 4 - - antifreeze - name = "Anti-freeze" - id = "antifreeze" - result = "antifreeze" - required_reagents = list("vodka" = 2, "cream" = 1, "ice" = 1) - result_amount = 4 - - barefoot - name = "Barefoot" - id = "barefoot" - result = "barefoot" - required_reagents = list("berryjuice" = 1, "cream" = 1, "vermouth" = 1) - result_amount = 3 - - -////DRINKS THAT REQUIRED IMPROVED SPRITES BELOW:: -Agouri///// - - sbiten - name = "Sbiten" - id = "sbiten" - result = "sbiten" - required_reagents = list("vodka" = 10, "capsaicin" = 1) - result_amount = 10 - - red_mead - name = "Red Mead" - id = "red_mead" - result = "red_mead" - required_reagents = list("blood" = 1, "mead" = 1) - result_amount = 2 - - mead - name = "Mead" - id = "mead" - result = "mead" - required_reagents = list("sugar" = 1, "water" = 1) - required_catalysts = list("enzyme" = 5) - result_amount = 2 - - iced_beer - name = "Iced Beer" - id = "iced_beer" - result = "iced_beer" - required_reagents = list("beer" = 10, "frostoil" = 1) - result_amount = 10 - - iced_beer2 - name = "Iced Beer" - id = "iced_beer" - result = "iced_beer" - required_reagents = list("beer" = 5, "ice" = 1) - result_amount = 6 - - grog - name = "Grog" - id = "grog" - result = "grog" - required_reagents = list("rum" = 1, "water" = 1) - result_amount = 2 - - soy_latte - name = "Soy Latte" - id = "soy_latte" - result = "soy_latte" - required_reagents = list("coffee" = 1, "soymilk" = 1) - result_amount = 2 - - cafe_latte - name = "Cafe Latte" - id = "cafe_latte" - result = "cafe_latte" - required_reagents = list("coffee" = 1, "milk" = 1) - result_amount = 2 - - acidspit - name = "Acid Spit" - id = "acidspit" - result = "acidspit" - required_reagents = list("sacid" = 1, "wine" = 5) - result_amount = 6 - - amasec - name = "Amasec" - id = "amasec" - result = "amasec" - required_reagents = list("iron" = 1, "wine" = 5, "vodka" = 5) - result_amount = 10 - - changelingsting - name = "Changeling Sting" - id = "changelingsting" - result = "changelingsting" - required_reagents = list("screwdrivercocktail" = 1, "limejuice" = 1, "lemonjuice" = 1) - result_amount = 5 - - aloe - name = "Aloe" - id = "aloe" - result = "aloe" - required_reagents = list("cream" = 1, "whiskey" = 1, "watermelonjuice" = 1) - result_amount = 2 - - andalusia - name = "Andalusia" - id = "andalusia" - result = "andalusia" - required_reagents = list("rum" = 1, "whiskey" = 1, "lemonjuice" = 1) - result_amount = 3 - - neurotoxin - name = "Neurotoxin" - id = "neurotoxin" - result = "neurotoxin" - required_reagents = list("gargleblaster" = 1, "ether" = 1) - result_amount = 2 - - snowwhite - name = "Snow White" - id = "snowwhite" - result = "snowwhite" - required_reagents = list("beer" = 1, "lemon_lime" = 1) - result_amount = 2 - - irishcarbomb - name = "Irish Car Bomb" - id = "irishcarbomb" - result = "irishcarbomb" - required_reagents = list("ale" = 1, "irishcream" = 1) - result_amount = 2 - - syndicatebomb - name = "Syndicate Bomb" - id = "syndicatebomb" - result = "syndicatebomb" - required_reagents = list("beer" = 1, "whiskeycola" = 1) - result_amount = 2 - - erikasurprise - name = "Erika Surprise" - id = "erikasurprise" - result = "erikasurprise" - required_reagents = list("ale" = 1, "limejuice" = 1, "whiskey" = 1, "banana" = 1, "ice" = 1) - result_amount = 5 - - devilskiss - name = "Devils Kiss" - id = "devilskiss" - result = "devilskiss" - required_reagents = list("blood" = 1, "kahlua" = 1, "rum" = 1) - result_amount = 3 - - hippiesdelight - name = "Hippies Delight" - id = "hippiesdelight" - result = "hippiesdelight" - required_reagents = list("psilocybin" = 1, "gargleblaster" = 1) - result_amount = 2 - - bananahonk - name = "Banana Honk" - id = "bananahonk" - result = "bananahonk" - required_reagents = list("banana" = 1, "cream" = 1, "sugar" = 1) - result_amount = 3 - - silencer - name = "Silencer" - id = "silencer" - result = "silencer" - required_reagents = list("nothing" = 1, "cream" = 1, "sugar" = 1) - result_amount = 3 - - driestmartini - name = "Driest Martini" - id = "driestmartini" - result = "driestmartini" - required_reagents = list("nothing" = 1, "gin" = 1) - result_amount = 2 - - lemonade - name = "Lemonade" - id = "lemonade" - result = "lemonade" - required_reagents = list("lemonjuice" = 1, "sugar" = 1, "water" = 1) - result_amount = 3 - - kiraspecial - name = "Kira Special" - id = "kiraspecial" - result = "kiraspecial" - required_reagents = list("orangejuice" = 1, "limejuice" = 1, "sodawater" = 1) - result_amount = 2 - - brownstar - name = "Brown Star" - id = "brownstar" - result = "brownstar" - required_reagents = list("orangejuice" = 2, "cola" = 1) - result_amount = 2 - - milkshake - name = "Milkshake" - id = "milkshake" - result = "milkshake" - required_reagents = list("cream" = 1, "ice" = 2, "milk" = 2) - result_amount = 5 - - rewriter - name = "Rewriter" - id = "rewriter" - result = "rewriter" - required_reagents = list("spacemountainwind" = 1, "coffee" = 1) - result_amount = 2 diff --git a/code/modules/reagents/grenade_launcher.dm b/code/modules/reagents/grenade_launcher.dm index 3107faaae69..48c467fed02 100644 --- a/code/modules/reagents/grenade_launcher.dm +++ b/code/modules/reagents/grenade_launcher.dm @@ -17,57 +17,57 @@ materials = list(MAT_METAL=2000) - examine() - set src in view() - ..() - if (!(usr in view(2)) && usr!=src.loc) return - usr << "\icon [name]:" - usr << "\blue [grenades.len] / [max_grenades] [ammo_name]s." +/obj/item/weapon/gun/grenadelauncher/examine() + set src in view() + ..() + if (!(usr in view(2)) && usr!=src.loc) return + usr << "\icon [name]:" + usr << "\blue [grenades.len] / [max_grenades] [ammo_name]s." - attackby(obj/item/I as obj, mob/user as mob, params) +/obj/item/weapon/gun/grenadelauncher/attackby(obj/item/I as obj, mob/user as mob, params) - if((istype(I, ammo_type))) - if(grenades.len < max_grenades) - user.drop_item() - I.loc = src - grenades += I - user << "\blue You put the [ammo_name] in the [name]." - user << "\blue [grenades.len] / [max_grenades] [ammo_name]s." - else - usr << "\red The grenade launcher cannot hold more [ammo_name]s." - - afterattack(obj/target, mob/user , flag) - - if (istype(target, /obj/item/weapon/storage/backpack )) - return - - else if (locate (/obj/structure/table, src.loc)) - return - - else if(target == user) - return - - if(grenades.len) - spawn(0) fire_grenade(target,user) + if((istype(I, ammo_type))) + if(grenades.len < max_grenades) + user.drop_item() + I.loc = src + grenades += I + user << "\blue You put the [ammo_name] in the [name]." + user << "\blue [grenades.len] / [max_grenades] [ammo_name]s." else - usr << "\red The [name] is empty." + usr << "\red The grenade launcher cannot hold more [ammo_name]s." + +/obj/item/weapon/gun/grenadelauncher/afterattack(obj/target, mob/user , flag) + + if (istype(target, /obj/item/weapon/storage/backpack )) + return + + else if (locate (/obj/structure/table, src.loc)) + return + + else if(target == user) + return + + if(grenades.len) + spawn(0) fire_grenade(target,user) + else + usr << "\red The [name] is empty." + +/obj/item/weapon/gun/grenadelauncher/proc/fire_grenade(atom/target, mob/user) + for(var/mob/O in viewers(world.view, user)) + O.show_message(text("\red [] fired a [ammo_name]!", user), 1) + user << "\red You fire the [name]!" + var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta! + grenades -= F + F.loc = user.loc + F.throw_at(target, 30, 2, user) + message_admins("[key_name_admin(user)] fired a [ammo_name] ([F.name]) from a launcher ([name]).") + log_game("[key_name_admin(user)] used a [ammo_name] ([name]).") + F.active = 1 + F.icon_state = initial(icon_state) + "_active" + playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) + spawn(15) + F.prime() - proc - fire_grenade(atom/target, mob/user) - for(var/mob/O in viewers(world.view, user)) - O.show_message(text("\red [] fired a [ammo_name]!", user), 1) - user << "\red You fire the [name]!" - var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta! - grenades -= F - F.loc = user.loc - F.throw_at(target, 30, 2, user) - message_admins("[key_name_admin(user)] fired a [ammo_name] ([F.name]) from a launcher ([name]).") - log_game("[key_name_admin(user)] used a [ammo_name] ([name]).") - F.active = 1 - F.icon_state = initial(icon_state) + "_active" - playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - spawn(15) - F.prime() /obj/item/weapon/gun/grenadelauncher/piecannon name = "pie cannon" diff --git a/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm b/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm new file mode 100644 index 00000000000..6b5656c8dc5 --- /dev/null +++ b/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm @@ -0,0 +1,23 @@ +/////////////////////////////////////////////////////////////////////////////////// +/datum/chemical_reaction + var/name = null + var/id = null + var/result = null + var/list/required_reagents = list() + var/list/required_catalysts = list() + + // Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things + var/atom/required_container = null // the container required for the reaction to happen + var/required_other = 0 // an integer required for the reaction to happen + + var/result_amount = 0 + var/secondary = 0 // set to nonzero if secondary reaction + var/list/secondary_results = list() //additional reagents produced by the reaction + var/min_temp = 0 //Minimum temperature required for the reaction to occur (heat to/above this). min_temp = 0 means no requirement + var/max_temp = 9999 //Maximum temperature allowed for the reaction to occur (cool to/below this). + var/mix_message = "The solution begins to bubble." + var/mix_sound = 'sound/effects/bubbles.ogg' + var/no_message = 0 + +/datum/chemical_reaction/proc/on_reaction(var/datum/reagents/holder, var/created_volume) + return \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm new file mode 100644 index 00000000000..d56cdcf5644 --- /dev/null +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm @@ -0,0 +1,590 @@ +/datum/chemical_reaction/ + + hot_coco + name = "Hot Coco" + id = "hot_coco" + result = "hot_coco" + required_reagents = list("water" = 5, "coco" = 1) + result_amount = 5 + + chocolate_milk + name = "Chocolate Milk" + id = "chocolate_milk" + result = "chocolate_milk" + required_reagents = list("chocolate" = 1, "milk" = 1) + result_amount = 2 + mix_message = "The mixture turns a nice brown color." + + coffee + name = "Coffee" + id = "coffee" + result = "coffee" + required_reagents = list("coffeepowder" = 1, "water" = 5) + result_amount = 5 + + tea + name = "Tea" + id = "tea" + result = "tea" + required_reagents = list("teapowder" = 1, "water" = 5) + result_amount = 5 + + + + + goldschlager + name = "Goldschlager" + id = "goldschlager" + result = "goldschlager" + required_reagents = list("vodka" = 10, "gold" = 1) + result_amount = 10 + + patron + name = "Patron" + id = "patron" + result = "patron" + required_reagents = list("tequilla" = 10, "silver" = 1) + result_amount = 10 + + bilk + name = "Bilk" + id = "bilk" + result = "bilk" + required_reagents = list("milk" = 1, "beer" = 1) + result_amount = 2 + + icetea + name = "Iced Tea" + id = "icetea" + result = "icetea" + required_reagents = list("ice" = 1, "tea" = 3) + result_amount = 4 + + icecoffee + name = "Iced Coffee" + id = "icecoffee" + result = "icecoffee" + required_reagents = list("ice" = 1, "coffee" = 3) + result_amount = 4 + + nuka_cola + name = "Nuka Cola" + id = "nuka_cola" + result = "nuka_cola" + required_reagents = list("uranium" = 1, "cola" = 6) + result_amount = 6 + + moonshine + name = "Moonshine" + id = "moonshine" + result = "moonshine" + required_reagents = list("nutriment" = 10) + required_catalysts = list("enzyme" = 5) + result_amount = 10 + + wine + name = "Wine" + id = "wine" + result = "wine" + required_reagents = list("berryjuice" = 10) + required_catalysts = list("enzyme" = 5) + result_amount = 10 + + spacebeer + name = "Space Beer" + id = "spacebeer" + result = "beer" + required_reagents = list("cornoil" = 10) + required_catalysts = list("enzyme" = 5) + result_amount = 10 + + vodka + name = "Vodka" + id = "vodka" + result = "vodka" + required_reagents = list("potato" = 10) + required_catalysts = list("enzyme" = 5) + result_amount = 10 + sake + name = "Sake" + id = "sake" + result = "sake" + required_reagents = list("rice" = 10,"water" = 5) + required_catalysts = list("enzyme" = 5) + result_amount = 15 + + kahlua + name = "Kahlua" + id = "kahlua" + result = "kahlua" + required_reagents = list("coffee" = 5, "sugar" = 5, "rum" = 5) + required_catalysts = list("enzyme" = 5) + result_amount = 5 + + kahluaVodka + name = "KahluaVodka" + id = "kahlauVodka" + result = "kahlua" + required_reagents = list("coffee" = 5, "sugar" = 5, "vodka" = 5) + required_catalysts = list("enzyme" = 5) + result_amount = 5 + gin_tonic + name = "Gin and Tonic" + id = "gintonic" + result = "gintonic" + required_reagents = list("gin" = 2, "tonic" = 1) + result_amount = 3 + mix_message = "The tonic water and gin mix together perfectly." + + cuba_libre + name = "Cuba Libre" + id = "cubalibre" + result = "cubalibre" + required_reagents = list("rum" = 2, "cola" = 1) + result_amount = 3 + + mojito + name = "Mojito" + id = "mojito" + result = "mojito" + required_reagents = list("rum" = 1, "sugar" = 1, "limejuice" = 1, "sodawater" = 1) + result_amount = 4 + + martini + name = "Classic Martini" + id = "martini" + result = "martini" + required_reagents = list("gin" = 2, "vermouth" = 1) + result_amount = 3 + + vodkamartini + name = "Vodka Martini" + id = "vodkamartini" + result = "vodkamartini" + required_reagents = list("vodka" = 2, "vermouth" = 1) + result_amount = 3 + + white_russian + name = "White Russian" + id = "whiterussian" + result = "whiterussian" + required_reagents = list("blackrussian" = 3, "cream" = 2) + result_amount = 5 + + whiskey_cola + name = "Whiskey Cola" + id = "whiskeycola" + result = "whiskeycola" + required_reagents = list("whiskey" = 2, "cola" = 1) + result_amount = 3 + + screwdriver + name = "Screwdriver" + id = "screwdrivercocktail" + result = "screwdrivercocktail" + required_reagents = list("vodka" = 2, "orangejuice" = 1) + result_amount = 3 + + bloody_mary + name = "Bloody Mary" + id = "bloodymary" + result = "bloodymary" + required_reagents = list("vodka" = 1, "tomatojuice" = 2, "limejuice" = 1) + result_amount = 4 + + gargle_blaster + name = "Pan-Galactic Gargle Blaster" + id = "gargleblaster" + result = "gargleblaster" + required_reagents = list("vodka" = 1, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1) + result_amount = 5 + + brave_bull + name = "Brave Bull" + id = "bravebull" + result = "bravebull" + required_reagents = list("tequilla" = 2, "kahlua" = 1) + result_amount = 3 + + tequilla_sunrise + name = "Tequilla Sunrise" + id = "tequillasunrise" + result = "tequillasunrise" + required_reagents = list("tequilla" = 2, "orangejuice" = 1) + result_amount = 3 + + toxins_special + name = "Toxins Special" + id = "toxinsspecial" + result = "toxinsspecial" + required_reagents = list("rum" = 2, "vermouth" = 1, "plasma" = 2) + result_amount = 5 + + beepsky_smash + name = "Beepksy Smash" + id = "beepksysmash" + result = "beepskysmash" + required_reagents = list("limejuice" = 2, "whiskey" = 2, "iron" = 1) + result_amount = 4 + + doctor_delight + name = "The Doctor's Delight" + id = "doctordelight" + result = "doctorsdelight" + required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1) + result_amount = 5 + + irish_cream + name = "Irish Cream" + id = "irishcream" + result = "irishcream" + required_reagents = list("whiskey" = 2, "cream" = 1) + result_amount = 3 + + manly_dorf + name = "The Manly Dorf" + id = "manlydorf" + result = "manlydorf" + required_reagents = list ("beer" = 1, "ale" = 2) + result_amount = 3 + + suicider + name = "Suicider" + id = "suicider" + result = "suicider" + required_reagents = list ("vodka" = 1, "cider" = 1, "fuel" = 1, "epinephrine" = 1) + result_amount = 4 + mix_message = "The drinks and chemicals mix together, emitting a potent smell." + + irish_coffee + name = "Irish Coffee" + id = "irishcoffee" + result = "irishcoffee" + required_reagents = list("irishcream" = 1, "coffee" = 1) + result_amount = 2 + + b52 + name = "B-52" + id = "b52" + result = "b52" + required_reagents = list("irishcream" = 1, "kahlua" = 1, "cognac" = 1) + result_amount = 3 + + atomicbomb + name = "Atomic Bomb" + id = "atomicbomb" + result = "atomicbomb" + required_reagents = list("b52" = 10, "uranium" = 1) + result_amount = 10 + + margarita + name = "Margarita" + id = "margarita" + result = "margarita" + required_reagents = list("tequilla" = 2, "limejuice" = 1) + result_amount = 3 + + longislandicedtea + name = "Long Island Iced Tea" + id = "longislandicedtea" + result = "longislandicedtea" + required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 1) + result_amount = 4 + + threemileisland + name = "Three Mile Island Iced Tea" + id = "threemileisland" + result = "threemileisland" + required_reagents = list("longislandicedtea" = 10, "uranium" = 1) + result_amount = 10 + + whiskeysoda + name = "Whiskey Soda" + id = "whiskeysoda" + result = "whiskeysoda" + required_reagents = list("whiskey" = 2, "sodawater" = 1) + result_amount = 3 + + black_russian + name = "Black Russian" + id = "blackrussian" + result = "blackrussian" + required_reagents = list("vodka" = 3, "kahlua" = 2) + result_amount = 5 + + manhattan + name = "Manhattan" + id = "manhattan" + result = "manhattan" + required_reagents = list("whiskey" = 2, "vermouth" = 1) + result_amount = 3 + + manhattan_proj + name = "Manhattan Project" + id = "manhattan_proj" + result = "manhattan_proj" + required_reagents = list("manhattan" = 10, "uranium" = 1) + result_amount = 10 + + vodka_tonic + name = "Vodka and Tonic" + id = "vodkatonic" + result = "vodkatonic" + required_reagents = list("vodka" = 2, "tonic" = 1) + result_amount = 3 + + gin_fizz + name = "Gin Fizz" + id = "ginfizz" + result = "ginfizz" + required_reagents = list("gin" = 2, "sodawater" = 1, "limejuice" = 1) + result_amount = 4 + + bahama_mama + name = "Bahama mama" + id = "bahama_mama" + result = "bahama_mama" + required_reagents = list("rum" = 2, "orangejuice" = 2, "limejuice" = 1, "ice" = 1) + result_amount = 6 + + singulo + name = "Singulo" + id = "singulo" + result = "singulo" + required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5) + result_amount = 10 + + alliescocktail + name = "Allies Cocktail" + id = "alliescocktail" + result = "alliescocktail" + required_reagents = list("martini" = 1, "vodka" = 1) + result_amount = 2 + + demonsblood + name = "Demons Blood" + id = "demonsblood" + result = "demonsblood" + required_reagents = list("rum" = 1, "spacemountainwind" = 1, "blood" = 1, "dr_gibb" = 1) + result_amount = 4 + + booger + name = "Booger" + id = "booger" + result = "booger" + required_reagents = list("cream" = 1, "banana" = 1, "rum" = 1, "watermelonjuice" = 1) + result_amount = 4 + + antifreeze + name = "Anti-freeze" + id = "antifreeze" + result = "antifreeze" + required_reagents = list("vodka" = 2, "cream" = 1, "ice" = 1) + result_amount = 4 + + barefoot + name = "Barefoot" + id = "barefoot" + result = "barefoot" + required_reagents = list("berryjuice" = 1, "cream" = 1, "vermouth" = 1) + result_amount = 3 + + +////DRINKS THAT REQUIRED IMPROVED SPRITES BELOW:: -Agouri///// + + sbiten + name = "Sbiten" + id = "sbiten" + result = "sbiten" + required_reagents = list("vodka" = 10, "capsaicin" = 1) + result_amount = 10 + + red_mead + name = "Red Mead" + id = "red_mead" + result = "red_mead" + required_reagents = list("blood" = 1, "mead" = 1) + result_amount = 2 + + mead + name = "Mead" + id = "mead" + result = "mead" + required_reagents = list("sugar" = 1, "water" = 1) + required_catalysts = list("enzyme" = 5) + result_amount = 2 + + iced_beer + name = "Iced Beer" + id = "iced_beer" + result = "iced_beer" + required_reagents = list("beer" = 10, "frostoil" = 1) + result_amount = 10 + + iced_beer2 + name = "Iced Beer" + id = "iced_beer" + result = "iced_beer" + required_reagents = list("beer" = 5, "ice" = 1) + result_amount = 6 + + grog + name = "Grog" + id = "grog" + result = "grog" + required_reagents = list("rum" = 1, "water" = 1) + result_amount = 2 + + soy_latte + name = "Soy Latte" + id = "soy_latte" + result = "soy_latte" + required_reagents = list("coffee" = 1, "soymilk" = 1) + result_amount = 2 + + cafe_latte + name = "Cafe Latte" + id = "cafe_latte" + result = "cafe_latte" + required_reagents = list("coffee" = 1, "milk" = 1) + result_amount = 2 + + acidspit + name = "Acid Spit" + id = "acidspit" + result = "acidspit" + required_reagents = list("sacid" = 1, "wine" = 5) + result_amount = 6 + + amasec + name = "Amasec" + id = "amasec" + result = "amasec" + required_reagents = list("iron" = 1, "wine" = 5, "vodka" = 5) + result_amount = 10 + + changelingsting + name = "Changeling Sting" + id = "changelingsting" + result = "changelingsting" + required_reagents = list("screwdrivercocktail" = 1, "limejuice" = 1, "lemonjuice" = 1) + result_amount = 5 + + aloe + name = "Aloe" + id = "aloe" + result = "aloe" + required_reagents = list("cream" = 1, "whiskey" = 1, "watermelonjuice" = 1) + result_amount = 2 + + andalusia + name = "Andalusia" + id = "andalusia" + result = "andalusia" + required_reagents = list("rum" = 1, "whiskey" = 1, "lemonjuice" = 1) + result_amount = 3 + + neurotoxin + name = "Neurotoxin" + id = "neurotoxin" + result = "neurotoxin" + required_reagents = list("gargleblaster" = 1, "ether" = 1) + result_amount = 2 + + snowwhite + name = "Snow White" + id = "snowwhite" + result = "snowwhite" + required_reagents = list("beer" = 1, "lemon_lime" = 1) + result_amount = 2 + + irishcarbomb + name = "Irish Car Bomb" + id = "irishcarbomb" + result = "irishcarbomb" + required_reagents = list("ale" = 1, "irishcream" = 1) + result_amount = 2 + + syndicatebomb + name = "Syndicate Bomb" + id = "syndicatebomb" + result = "syndicatebomb" + required_reagents = list("beer" = 1, "whiskeycola" = 1) + result_amount = 2 + + erikasurprise + name = "Erika Surprise" + id = "erikasurprise" + result = "erikasurprise" + required_reagents = list("ale" = 1, "limejuice" = 1, "whiskey" = 1, "banana" = 1, "ice" = 1) + result_amount = 5 + + devilskiss + name = "Devils Kiss" + id = "devilskiss" + result = "devilskiss" + required_reagents = list("blood" = 1, "kahlua" = 1, "rum" = 1) + result_amount = 3 + + hippiesdelight + name = "Hippies Delight" + id = "hippiesdelight" + result = "hippiesdelight" + required_reagents = list("psilocybin" = 1, "gargleblaster" = 1) + result_amount = 2 + + bananahonk + name = "Banana Honk" + id = "bananahonk" + result = "bananahonk" + required_reagents = list("banana" = 1, "cream" = 1, "sugar" = 1) + result_amount = 3 + + silencer + name = "Silencer" + id = "silencer" + result = "silencer" + required_reagents = list("nothing" = 1, "cream" = 1, "sugar" = 1) + result_amount = 3 + + driestmartini + name = "Driest Martini" + id = "driestmartini" + result = "driestmartini" + required_reagents = list("nothing" = 1, "gin" = 1) + result_amount = 2 + + lemonade + name = "Lemonade" + id = "lemonade" + result = "lemonade" + required_reagents = list("lemonjuice" = 1, "sugar" = 1, "water" = 1) + result_amount = 3 + + kiraspecial + name = "Kira Special" + id = "kiraspecial" + result = "kiraspecial" + required_reagents = list("orangejuice" = 1, "limejuice" = 1, "sodawater" = 1) + result_amount = 2 + + brownstar + name = "Brown Star" + id = "brownstar" + result = "brownstar" + required_reagents = list("orangejuice" = 2, "cola" = 1) + result_amount = 2 + + milkshake + name = "Milkshake" + id = "milkshake" + result = "milkshake" + required_reagents = list("cream" = 1, "ice" = 2, "milk" = 2) + result_amount = 5 + + rewriter + name = "Rewriter" + id = "rewriter" + result = "rewriter" + required_reagents = list("spacemountainwind" = 1, "coffee" = 1) + result_amount = 2 \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm new file mode 100644 index 00000000000..146dc1da95c --- /dev/null +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm @@ -0,0 +1,108 @@ +/datum/chemical_reaction/ + + tofu + name = "Tofu" + id = "tofu" + result = null + required_reagents = list("soymilk" = 10) + required_catalysts = list("enzyme" = 5) + result_amount = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + for(var/i = 1, i <= created_volume, i++) + new /obj/item/weapon/reagent_containers/food/snacks/tofu(location) + return + + chocolate_bar + name = "Chocolate Bar" + id = "chocolate_bar" + result = null + required_reagents = list("soymilk" = 2, "coco" = 2, "sugar" = 2) + result_amount = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + for(var/i = 1, i <= created_volume, i++) + new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) + return + + chocolate_bar2 + name = "Chocolate Bar" + id = "chocolate_bar" + result = null + required_reagents = list("milk" = 2, "coco" = 2, "sugar" = 2) + result_amount = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + for(var/i = 1, i <= created_volume, i++) + new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location) + return + + + soysauce + name = "Soy Sauce" + id = "soysauce" + result = "soysauce" + required_reagents = list("soymilk" = 2, "flour" = 1, "sodiumchloride" = 1, "water" = 3) + result_amount = 7 + + cheesewheel + name = "Cheesewheel" + id = "cheesewheel" + result = null + required_reagents = list("milk" = 40) + required_catalysts = list("enzyme" = 5) + result_amount = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location) + return + + syntiflesh + name = "Syntiflesh" + id = "syntiflesh" + result = null + required_reagents = list("blood" = 5, "cryoxadone" = 1) + result_amount = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location) + return + + hot_ramen + name = "Hot Ramen" + id = "hot_ramen" + result = "hot_ramen" + required_reagents = list("water" = 1, "dry_ramen" = 3) + result_amount = 3 + + hell_ramen + name = "Hell Ramen" + id = "hell_ramen" + result = "hell_ramen" + required_reagents = list("capsaicin" = 1, "hot_ramen" = 6) + result_amount = 6 + + doughball + name = "Ball of dough" + id = "dough_ball" + result = "dough_ball" + required_reagents = list("flour" = 15, "water" = 5) + required_catalysts = list("enzyme" = 5) + + sodiumchloride + name = "Sodium Chloride" + id = "sodiumchloride" + result = "sodiumchloride" + required_reagents = list("sodium" = 1, "chlorine" = 1, "water" = 1) + result_amount = 3 + mix_message = "The solution crystallizes with a brief flare of light." + + ice + name = "Ice" + id = "ice" + result = "ice" + required_reagents = list("water" = 1) + result_amount = 1 + max_temp = 273 + mix_message = "Ice forms as the water freezes." + mix_sound = null \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm new file mode 100644 index 00000000000..4ec4c1bb9e4 --- /dev/null +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm @@ -0,0 +1,76 @@ +//Anything for harm or hostile intents go here (explosions, EMPs, thermite, mutagen) +/datum/chemical_reaction + + explosion_potassium + name = "Explosion" + id = "explosion_potassium" + result = null + required_reagents = list("water" = 1, "potassium" = 1) + result_amount = 2 + mix_message = "The mixture explodes!" + + on_reaction(var/datum/reagents/holder, var/created_volume) + var/datum/effect/effect/system/reagents_explosion/e = new() + e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0) + e.start() + holder.clear_reagents() + return + + emp_pulse + name = "EMP Pulse" + id = "emp_pulse" + result = null + required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense + result_amount = 2 + + on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + // 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes. + // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades. + empulse(location, round(created_volume / 24), round(created_volume / 14), 1) + holder.clear_reagents() + return + + mutagen + name = "Unstable mutagen" + id = "mutagen" + result = "mutagen" + required_reagents = list("radium" = 1, "plasma" = 1, "chlorine" = 1) + result_amount = 3 + mix_message = "The substance turns neon green and bubbles unnervingly." + + thermite + name = "Thermite" + id = "thermite" + result = "thermite" + required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1) + result_amount = 3 + + glycerol + name = "Glycerol" + id = "glycerol" + result = "glycerol" + required_reagents = list("cornoil" = 3, "sacid" = 1) + result_amount = 1 + + nitroglycerin + name = "Nitroglycerin" + id = "nitroglycerin" + result = "nitroglycerin" + required_reagents = list("glycerol" = 1, "facid" = 1, "sacid" = 1) + result_amount = 2 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/datum/effect/effect/system/reagents_explosion/e = new() + e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0) + e.start() + + holder.clear_reagents() + return + + condensedcapsaicin + name = "Condensed Capsaicin" + id = "condensedcapsaicin" + result = "condensedcapsaicin" + required_reagents = list("capsaicin" = 2) + required_catalysts = list("plasma" = 5) + result_amount = 1 \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm new file mode 100644 index 00000000000..02e1f4a65cd --- /dev/null +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm @@ -0,0 +1,98 @@ +/datum/chemical_reaction/ + + hydrocodone + name = "Hydrocodone" + id = "hydrocodone" + result = "hydrocodone" + required_reagents = list("morphine" = 1, "sacid" = 1, "water" = 1, "oil" = 1) + result_amount = 2 + + mitocholide + name = "mitocholide" + id = "mitocholide" + result = "mitocholide" + required_reagents = list("synthflesh" = 1, "cryoxadone" = 1, "plasma" = 1) + result_amount = 3 + + cryoxadone + name = "Cryoxadone" + id = "cryoxadone" + result = "cryoxadone" + required_reagents = list("cryostylane" = 1, "plasma" = 1, "acetone" = 1, "mutagen" = 1) + result_amount = 4 + mix_message = "The solution bubbles softly." + + spaceacillin + name = "Spaceacillin" + id = "spaceacillin" + result = "spaceacillin" + required_reagents = list("fungus" = 1, "ethanol" = 1) + result_amount = 2 + mix_message = "The solvent extracts an antibiotic compound from the fungus." + + audioline + name = "Audioline" + id = "audioline" + result = "audioline" + required_reagents = list("spaceacillin" = 1, "salglu_solution" = 1, "epinephrine" = 1) + result_amount = 3 + + rezadone + name = "Rezadone" + id = "rezadone" + result = "rezadone" + required_reagents = list("carpotoxin" = 1, "spaceacillin" = 1, "copper" = 1) + result_amount = 3 + + virus_food + name = "Virus Food" + id = "virusfood" + result = "virusfood" + required_reagents = list("water" = 1, "milk" = 1, "oxygen" = 1) + result_amount = 3 +/* + mix_virus + name = "Mix Virus" + id = "mixvirus" + result = "blood" + required_reagents = list("virusfood" = 5) + required_catalysts = list("blood") + var/level = 2 + + on_reaction(var/datum/reagents/holder, var/created_volume) + + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list + if(B && B.data) + var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] + if(D) + D.Evolve(level - rand(0, 1)) + + + mix_virus_2 + + name = "Mix Virus 2" + id = "mixvirus2" + required_reagents = list("mutagen" = 5) + level = 4 + + rem_virus + + name = "Devolve Virus" + id = "remvirus" + required_reagents = list("synaptizine" = 5) + + on_reaction(var/datum/reagents/holder, var/created_volume) + + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list + if(B && B.data) + var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] + if(D) + D.Devolve() +*/ + + sterilizine + name = "Sterilizine" + id = "sterilizine" + result = "sterilizine" + required_reagents = list("ethanol" = 1, "charcoal" = 1, "chlorine" = 1) + result_amount = 3 \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm new file mode 100644 index 00000000000..020caed47ee --- /dev/null +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm @@ -0,0 +1,199 @@ +/datum/chemical_reaction/ +// foam and foam precursor + + surfactant + name = "Foam surfactant" + id = "foam surfactant" + result = "fluorosurfactant" + required_reagents = list("fluorine" = 2, "carbon" = 2, "sacid" = 1) + result_amount = 5 + mix_message = "A head of foam results from the mixture's constant fizzing." + + + foam + name = "Foam" + id = "foam" + result = null + required_reagents = list("fluorosurfactant" = 1, "water" = 1) + result_amount = 2 + + on_reaction(var/datum/reagents/holder, var/created_volume) + + + var/location = get_turf(holder.my_atom) + for(var/mob/M in viewers(5, location)) + M << "\red The solution violently bubbles!" + + location = get_turf(holder.my_atom) + + for(var/mob/M in viewers(5, location)) + M << "\red The solution spews out foam!" + + //world << "Holder volume is [holder.total_volume]" + //for(var/datum/reagent/R in holder.reagent_list) + // world << "[R.name] = [R.volume]" + + var/datum/effect/effect/system/foam_spread/s = new() + s.set_up(created_volume, location, holder, 0) + s.start() + holder.clear_reagents() + return + + metalfoam + name = "Metal Foam" + id = "metalfoam" + result = null + required_reagents = list("aluminum" = 3, "fluorosurfactant" = 1, "sacid" = 1) + result_amount = 5 + + on_reaction(var/datum/reagents/holder, var/created_volume) + + + var/location = get_turf(holder.my_atom) + + for(var/mob/M in viewers(5, location)) + M << "\red The solution spews out a metalic foam!" + + var/datum/effect/effect/system/foam_spread/s = new() + s.set_up(created_volume, location, holder, 1) + s.start() + return + + ironfoam + name = "Iron Foam" + id = "ironlfoam" + result = null + required_reagents = list("iron" = 3, "fluorosurfactant" = 1, "sacid" = 1) + result_amount = 5 + + on_reaction(var/datum/reagents/holder, var/created_volume) + + + var/location = get_turf(holder.my_atom) + + for(var/mob/M in viewers(5, location)) + M << "\red The solution spews out a metalic foam!" + + var/datum/effect/effect/system/foam_spread/s = new() + s.set_up(created_volume, location, holder, 2) + s.start() + return + + // Synthesizing these three chemicals is pretty complex in real life, but fuck it, it's just a game! + ammonia + name = "Ammonia" + id = "ammonia" + result = "ammonia" + required_reagents = list("hydrogen" = 3, "nitrogen" = 1) + result_amount = 3 + mix_message = "The mixture bubbles, emitting an acrid reek." + + diethylamine + name = "Diethylamine" + id = "diethylamine" + result = "diethylamine" + required_reagents = list ("ammonia" = 1, "ethanol" = 1) + result_amount = 2 + min_temp = 374 + mix_message = "A horrible smell pours forth from the mixture." + + space_cleaner + name = "Space cleaner" + id = "cleaner" + result = "cleaner" + required_reagents = list("ammonia" = 1, "water" = 1, "ethanol" = 1) + result_amount = 3 + mix_message = "Ick, this stuff really stinks. Sure does make the container sparkle though!" + + sulfuric_acid + name = "Sulfuric Acid" + id = "sacid" + result = "sacid" + required_reagents = list("sulfur" = 1, "oxygen" = 1, "hydrogen" = 1) + result_amount = 2 + mix_message = "The mixture gives off a sharp acidic tang." + +///////Changeling Blood Test///////////// +/* + changeling_test + name = "Changeling blood test" + id = "changelingblood" + result = "blood" + required_reagents = list("blood" = 5) + required_catalysts = list("fuel") + result_amount = 1 //Needs this in order to check the donor, as the data var in the reacted blood gets transferred. + on_reaction(var/datum/reagents/holder, var/created_volume) + if(!holder.reagent_list) //reagent_list is not null + return + var/datum/reagent/blood/B = locate() in holder.reagent_list + if(!B) //B is not null + return + var/mob/living/carbon/human/H = B.data["donor"] + if(!H) //H is not null. + return + if(H.mind && H.mind.changeling) //Checks if H, the blood donor is a ling. + for(var/mob/M in viewers(get_turf(holder.my_atom), null)) + M.show_message( "The blood writhes and wriggles and sizzles away from the container!", 1, "You hear bubbling and sizzling.", 2) + else + for(var/mob/M in viewers(get_turf(holder.my_atom), null)) + M.show_message( "The blood seems to break apart in the fuel.", 1) + holder.del_reagent("blood") + return +*/ + + plastication + name = "Plastic" + id = "solidplastic" + result = null + required_reagents = list("facid" = 10, "plasticide" = 20) + result_amount = 1 + on_reaction(var/datum/reagents/holder) + var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/mineral/plastic + M.amount = 10 + M.loc = get_turf(holder.my_atom) + return + + + +//Not really misc chems, but not enough to deserve their own file +/* + silicate + name = "Silicate" + id = "silicate" + result = "silicate" + required_reagents = list("aluminum" = 1, "silicon" = 1, "oxygen" = 1) + result_amount = 3 +*/ + + space_drugs + name = "Space Drugs" + id = "space_drugs" + result = "space_drugs" + required_reagents = list("mercury" = 1, "sugar" = 1, "lithium" = 1) + result_amount = 3 + mix_message = "Slightly dizzying fumes drift from the solution." + + lube + name = "Space Lube" + id = "lube" + result = "lube" + required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1) + result_amount = 3 + mix_message = "The substance turns a striking cyan and becomes oily." + + holy_water + name = "Holy Water" + id = "holywater" + result = "holywater" + required_reagents = list("water" = 1, "mercury" = 1, "wine" = 1) + result_amount = 3 + mix_message = "The water somehow seems purified. Or maybe defiled." + + + lsd + name = "Lysergic acid diethylamide" + id = "lsd" + result = "lsd" + required_reagents = list("diethylamine" = 1, "fungus" = 1) + result_amount = 3 + mix_message = "The mixture turns a rather unassuming color and settles." \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm new file mode 100644 index 00000000000..a1d8b033672 --- /dev/null +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm @@ -0,0 +1,487 @@ +/////////////////////////////////////////////NEW SLIME CORE REACTIONS///////////////////////////////////////////// + +//Grey +/datum/chemical_reaction/ + + slimespawn + name = "Slime Spawn" + id = "m_spawn" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/grey + required_other = 1 + + on_reaction(var/datum/reagents/holder) + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1) + var/mob/living/carbon/slime/S = new /mob/living/carbon/slime + S.loc = get_turf(holder.my_atom) + + + slimeinaprov + name = "Slime Epinephrine" + id = "m_epinephrine" + result = "epinephrine" + required_reagents = list("water" = 5) + result_amount = 3 + required_other = 1 + required_container = /obj/item/slime_extract/grey + + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + + + slimemonkey + name = "Slime Monkey" + id = "m_monkey" + result = null + required_reagents = list("blood" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/grey + required_other = 1 + on_reaction(var/datum/reagents/holder) + for(var/i = 1, i <= 3, i++) + var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube + M.loc = get_turf(holder.my_atom) + +//Green + slimemutate + name = "Mutation Toxin" + id = "mutationtoxin" + result = "mutationtoxin" + required_reagents = list("plasma" = 5) + result_amount = 1 + required_other = 1 + required_container = /obj/item/slime_extract/green + +//Metal + slimemetal + name = "Slime Metal" + id = "m_metal" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/metal + required_other = 1 + on_reaction(var/datum/reagents/holder) + var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal + M.amount = 15 + M.loc = get_turf(holder.my_atom) + var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel + P.amount = 5 + P.loc = get_turf(holder.my_atom) + +//Gold + slimecrit + name = "Slime Crit" + id = "m_tele" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/gold + required_other = 1 + on_reaction(var/datum/reagents/holder) + + var/blocked = blocked_mobs //global variable of blocked mobs + + var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs + + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) + + for(var/i = 1, i <= 5, i++) + var/chosen = pick(critters) + var/mob/living/simple_animal/hostile/C = new chosen + C.faction |= "slimesummon" + C.loc = get_turf(holder.my_atom) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(C, pick(NORTH,SOUTH,EAST,WEST)) +// for(var/mob/O in viewers(get_turf(holder.my_atom), null)) +// O.show_message(text("\red The slime core fizzles disappointingly,"), 1) + + + slimecritlesser + name = "Slime Crit Lesser" + id = "m_tele3" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/gold + required_other = 1 + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("The slime extract begins to vibrate violently!"), 1) + spawn(50) + + if(holder && holder.my_atom) + + var/blocked = blocked_mobs + + var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs + + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) + + var/chosen = pick(critters) + var/mob/living/simple_animal/hostile/C = new chosen + C.faction |= "neutral" + C.loc = get_turf(holder.my_atom) + +//Silver + slimebork + name = "Slime Bork" + id = "m_tele2" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/silver + required_other = 1 + on_reaction(var/datum/reagents/holder) + + var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/snacks) + // BORK BORK BORK + + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) + + for(var/i = 1, i <= 4 + rand(1,2), i++) + var/chosen = pick(borks) + var/obj/B = new chosen + if(B) + B.loc = get_turf(holder.my_atom) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(B, pick(NORTH,SOUTH,EAST,WEST)) + slimedrinks + name = "Slime Drinks" + id = "m_tele3" + result = null + required_reagents = list("water" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/silver + required_other = 1 + on_reaction(var/datum/reagents/holder) + + var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/drinks) + // BORK BORK BORK + + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + + for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) + if(M:eyecheck() <= 0) + flick("e_flash", M.flash) + + for(var/i = 1, i <= 4 + rand(1,2), i++) + var/chosen = pick(borks) + var/obj/B = new chosen + if(B) + B.loc = get_turf(holder.my_atom) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(B, pick(NORTH,SOUTH,EAST,WEST)) + + +//Blue + slimefrost + name = "Slime Frost Oil" + id = "m_frostoil" + result = "frostoil" + required_reagents = list("plasma" = 5) + result_amount = 10 + required_container = /obj/item/slime_extract/blue + required_other = 1 +//Dark Blue + slimefreeze + name = "Slime Freeze" + id = "m_freeze" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/darkblue + required_other = 1 + on_reaction(var/datum/reagents/holder) + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) + sleep(50) + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + for(var/mob/living/M in range (get_turf(holder.my_atom), 7)) + M.bodytemperature -= 140 + M << "\blue You feel a chill!" + +//Orange + slimecasp + name = "Slime Capsaicin Oil" + id = "m_capsaicinoil" + result = "capsaicin" + required_reagents = list("blood" = 5) + result_amount = 10 + required_container = /obj/item/slime_extract/orange + required_other = 1 + + slimefire + name = "Slime fire" + id = "m_fire" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/orange + required_other = 1 + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) + sleep(50) + var/turf/simulated/T = get_turf(holder.my_atom) + if(istype(T)) + T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50) + +//Yellow + slimeoverload + name = "Slime EMP" + id = "m_emp" + result = null + required_reagents = list("blood" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/yellow + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + empulse(get_turf(holder.my_atom), 3, 7) + + + slimecell + name = "Slime Powercell" + id = "m_cell" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/yellow + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/obj/item/weapon/stock_parts/cell/slime/P = new /obj/item/weapon/stock_parts/cell/slime + P.loc = get_turf(holder.my_atom) + + slimeglow + name = "Slime Glow" + id = "m_glow" + result = null + required_reagents = list("water" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/yellow + required_other = 1 + on_reaction(var/datum/reagents/holder) + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The contents of the slime core harden and begin to emit a warm, bright light."), 1) + var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime + F.loc = get_turf(holder.my_atom) + +//Purple + + slimepsteroid + name = "Slime Steroid" + id = "m_steroid" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/purple + required_other = 1 + on_reaction(var/datum/reagents/holder) + var/obj/item/weapon/slimesteroid/P = new /obj/item/weapon/slimesteroid + P.loc = get_turf(holder.my_atom) + + + + slimejam + name = "Slime Jam" + id = "m_jam" + result = "slimejelly" + required_reagents = list("sugar" = 5) + result_amount = 10 + required_container = /obj/item/slime_extract/purple + required_other = 1 + + +//Dark Purple + slimeplasma + name = "Slime Plasma" + id = "m_plasma" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/darkpurple + required_other = 1 + on_reaction(var/datum/reagents/holder) + var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma + P.amount = 10 + P.loc = get_turf(holder.my_atom) + +//Red + slimeglycerol + name = "Slime Glycerol" + id = "m_glycerol" + result = "glycerol" + required_reagents = list("plasma" = 5) + result_amount = 8 + required_container = /obj/item/slime_extract/red + required_other = 1 + + + slimebloodlust + name = "Bloodlust" + id = "m_bloodlust" + result = null + required_reagents = list("blood" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/red + required_other = 1 + on_reaction(var/datum/reagents/holder) + for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null)) + slime.rabid = 1 + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The [slime] is driven into a frenzy!."), 1) + +//Pink + slimeppotion + name = "Slime Potion" + id = "m_potion" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/pink + required_other = 1 + on_reaction(var/datum/reagents/holder) + var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion + P.loc = get_turf(holder.my_atom) + + +//Black + slimemutate2 + name = "Advanced Mutation Toxin" + id = "mutationtoxin2" + result = "amutationtoxin" + required_reagents = list("plasma" = 5) + result_amount = 1 + required_other = 1 + required_container = /obj/item/slime_extract/black + +//Oil + slimeexplosion + name = "Slime Explosion" + id = "m_explosion" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/oil + required_other = 1 + on_reaction(var/datum/reagents/holder) + for(var/mob/O in viewers(get_turf(holder.my_atom), null)) + O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) + sleep(50) + explosion(get_turf(holder.my_atom), 1 ,3, 6) +//Light Pink + slimepotion2 + name = "Slime Potion 2" + id = "m_potion2" + result = null + result_amount = 1 + required_container = /obj/item/slime_extract/lightpink + required_reagents = list("plasma" = 5) + required_other = 1 + on_reaction(var/datum/reagents/holder) + var/obj/item/weapon/slimepotion2/P = new /obj/item/weapon/slimepotion2 + P.loc = get_turf(holder.my_atom) +//Adamantine + slimegolem + name = "Slime Golem" + id = "m_golem" + result = null + required_reagents = list("plasma" = 5) + result_amount = 1 + required_container = /obj/item/slime_extract/adamantine + required_other = 1 + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/effect/goleRUNe/Z = new /obj/effect/goleRUNe + Z.loc = get_turf(holder.my_atom) + Z.announce_to_ghosts() +//Bluespace + slimecrystal + name = "Slime Crystal" + id = "m_crystal" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/bluespace + required_other = 1 + on_reaction(var/datum/reagents/holder, var/created_volume) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + if(holder.my_atom) + var/obj/item/bluespace_crystal/BC = new(get_turf(holder.my_atom)) + BC.visible_message("The [BC.name] appears out of thin air!") +//Cerulean + slimepsteroid2 + name = "Slime Steroid 2" + id = "m_steroid2" + result = null + required_reagents = list("plasma" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/cerulean + required_other = 1 + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/weapon/slimesteroid2/P = new /obj/item/weapon/slimesteroid2 + P.loc = get_turf(holder.my_atom) +//Sepia + slimecamera + name = "Slime Camera" + id = "m_camera" + result = null + required_reagents = list("plasma" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/sepia + required_other = 1 + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/device/camera/P = new /obj/item/device/camera + P.loc = get_turf(holder.my_atom) + + + slimefilm + name = "Slime Film" + id = "m_film" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/sepia + required_other = 1 + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/obj/item/device/camera_film/P = new /obj/item/device/camera_film + P.loc = get_turf(holder.my_atom) +//Pyrite + slimepaint + name = "Slime Paint" + id = "s_paint" + result = null + required_reagents = list("plasma" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/pyrite + required_other = 1 + on_reaction(var/datum/reagents/holder) + feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") + var/list/paints = subtypesof(/obj/item/weapon/reagent_containers/glass/paint) + var/chosen = pick(paints) + var/obj/P = new chosen + if(P) + P.loc = get_turf(holder.my_atom) \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/__oldchem_defines.dm b/code/modules/reagents/oldchem/reagents/__oldchem_defines.dm new file mode 100644 index 00000000000..815c1208dd9 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/__oldchem_defines.dm @@ -0,0 +1,5 @@ +#define SOLID 1 +#define LIQUID 2 +#define GAS 3 +#define FOOD_METABOLISM 0.4 +#define REM REAGENTS_EFFECT_MULTIPLIER \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/_reagent_base.dm b/code/modules/reagents/oldchem/reagents/_reagent_base.dm new file mode 100644 index 00000000000..2b2a94ee149 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/_reagent_base.dm @@ -0,0 +1,82 @@ +/datum/reagent + var/name = "Reagent" + var/id = "reagent" + var/description = "" + var/datum/reagents/holder = null + var/reagent_state = SOLID + var/list/data = null + var/volume = 0 + var/nutriment_factor = 0 + var/metabolization_rate = REAGENTS_METABOLISM + //var/list/viruses = list() + var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!) + var/shock_reduction = 0 + var/penetrates_skin = 0 //Whether or not a reagent penetrates the skin + //Processing flags, defines the type of mobs the reagent will affect + //By default, all reagents will ONLY affect organics, not synthetics. Re-define in the reagent's definition if the reagent is meant to affect synths + var/process_flags = ORGANIC + + +/datum/reagent/proc/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //Some reagents transfer on touch, others don't; dependent on if they penetrate the skin or not. + if(!istype(M, /mob/living)) return 0 + var/datum/reagent/self = src + src = null + + if(self.holder) //for catching rare runtimes + if(method == TOUCH && self.penetrates_skin) + var/block = 0 + for(var/obj/item/clothing/C in M.get_equipped_items()) + if(istype(C, /obj/item/clothing/suit/bio_suit)) + block += 1 + if(istype(C, /obj/item/clothing/head/bio_hood)) + block += 1 + if(block < 2) + if(M.reagents) + M.reagents.add_reagent(self.id,self.volume) + +/* + if(method == INGEST && istype(M, /mob/living/carbon)) + if(prob(1 * self.addictiveness)) + if(prob(5 * volume)) + var/datum/disease/addiction/A = new /datum/disease/addiction + A.addicted_to = self + A.name = "[self.name] Addiction" + A.addiction ="[self.name]" + A.cure = self.id + M.viruses += A + A.affected_mob = M + A.holder = M +*/ + return 1 + +/datum/reagent/proc/reaction_obj(var/obj/O, var/volume) //By default we transfer a small part of the reagent to the object + src = null //if it can hold reagents. nope! + //if(O.reagents) + // O.reagents.add_reagent(id,volume/3) + return + +/datum/reagent/proc/reaction_turf(var/turf/T, var/volume) + src = null + return + +/datum/reagent/proc/on_mob_life(var/mob/living/M as mob, var/alien) + if(!istype(M, /mob/living)) // YOU'RE A FUCKING RETARD NEO WHY CAN'T YOU JUST FIX THE PROBLEM ON THE REAGENT - Iamgoofball + return //Noticed runtime errors from facid trying to damage ghosts, this should fix. --NEO + // Certain elements in too large amounts cause side-effects + holder.remove_reagent(src.id, metabolization_rate) //By default it slowly disappears. + current_cycle++ + return + +// Called when two reagents of the same are mixing. +/datum/reagent/proc/on_merge(var/data) + return + +/datum/reagent/proc/on_move(var/mob/M) + return + +/datum/reagent/proc/on_update(var/atom/A) + return + +/datum/reagent/Destroy() + holder = null + return ..() \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm new file mode 100644 index 00000000000..b07cd8355e3 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm @@ -0,0 +1,748 @@ +//ALCOHOL WOO +/datum/reagent/ethanol + name = "Ethanol" //Parent class for all alcoholic reagents. + id = "ethanol" + description = "A well-known alcohol with a variety of applications." + reagent_state = LIQUID + nutriment_factor = 0 //So alcohol can fill you up! If they want to. + color = "#404030" // rgb: 64, 64, 48 + var/datum/martial_art/drunk_brawling/F = new + var/dizzy_adj = 3 + var/slurr_adj = 3 + var/confused_adj = 2 + var/slur_start = 65 //amount absorbed after which mob starts slurring + var/brawl_start = 75 //amount absorbed after which mob switches to drunken brawling as a fighting style + var/confused_start = 130 //amount absorbed after which mob starts confusing directions + var/vomit_start = 180 //amount absorbed after which mob starts vomitting + var/blur_start = 260 //amount absorbed after which mob starts getting blurred vision + var/pass_out = 325 //amount absorbed after which mob starts passing out + +/datum/reagent/ethanol/on_mob_life(var/mob/living/M as mob, var/alien) + // Sobering multiplier. + // Sober block makes it more difficult to get drunk + var/sober_str=!(SOBER in M.mutations)?1:2 + M:nutrition += nutriment_factor + holder.remove_reagent(src.id, FOOD_METABOLISM) + if(!src.data) data = 1 + src.data++ + + var/d = data + + // make all the beverages work together + for(var/datum/reagent/ethanol/A in holder.reagent_list) + if(isnum(A.data)) d += A.data + + d/=sober_str + + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species && (H.species.name == "Skrell" || H.species.name =="Neara")) //Skrell and Neara get very drunk very quickly. + d*=5 + + M.dizziness += dizzy_adj. + if(d >= slur_start && d < pass_out) + if (!M:slurring) M:slurring = 1 + M:slurring += slurr_adj/sober_str + if(d >= brawl_start && ishuman(M)) + var/mob/living/carbon/human/H = M + F.teach(H,1) + if(src.volume < 3) + if(H.martial_art == F) + F.remove(H) + if(d >= confused_start && prob(33)) + if (!M:confused) M:confused = 1 + M.confused = max(M:confused+(confused_adj/sober_str),0) + if(d >= blur_start) + M.eye_blurry = max(M.eye_blurry, 10/sober_str) + M:drowsyness = max(M:drowsyness, 0) + if(d >= vomit_start) + if(prob(8)) + M.fakevomit() + if(d >= pass_out) + M:paralysis = max(M:paralysis, 20/sober_str) + M:drowsyness = max(M:drowsyness, 30/sober_str) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/liver/L = H.internal_organs_by_name["liver"] + if (istype(L)) + L.take_damage(0.1, 1) + H.adjustToxLoss(0.1) + holder.remove_reagent(src.id, 0.4) + ..() + return + +/datum/reagent/ethanol/reaction_obj(var/obj/O, var/volume) + if(istype(O,/obj/item/weapon/paper)) + var/obj/item/weapon/paper/paperaffected = O + paperaffected.clearpaper() + usr << "The solution melts away the ink on the paper." + if(istype(O,/obj/item/weapon/book)) + if(volume >= 5) + var/obj/item/weapon/book/affectedbook = O + affectedbook.dat = null + usr << "The solution melts away the ink on the book." + else + usr << "It wasn't enough..." + return + +/datum/reagent/ethanol/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with ethanol isn't quite as good as fuel. + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + M.adjust_fire_stacks(volume / 15) + return + + +/datum/reagent/ethanol/beer //It's really much more stronger than other drinks. + name = "Beer" + id = "beer" + description = "An alcoholic beverage made from malted grains, hops, yeast, and water." + nutriment_factor = 2 * FOOD_METABOLISM + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/beer/on_mob_life(var/mob/living/M as mob) + ..() + M:jitteriness = max(M:jitteriness-3,0) + return + +/datum/reagent/ethanol/cider + name = "Cider" + id = "cider" + description = "An alcoholic beverage derived from apples." + color = "#174116" + +/datum/reagent/ethanol/whiskey + name = "Whiskey" + id = "whiskey" + description = "A superb and well-aged single-malt whiskey. Damn." + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 4 + +/datum/reagent/ethanol/specialwhiskey + name = "Special Blend Whiskey" + id = "specialwhiskey" + description = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything." + color = "#664300" // rgb: 102, 67, 0 + slur_start = 30 //amount absorbed after which mob starts slurring + brawl_start = 40 + +/datum/reagent/ethanol/gin + name = "Gin" + id = "gin" + description = "It's gin. In space. I say, good sir." + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 3 + +/datum/reagent/ethanol/absinthe + name = "Absinthe" + id = "absinthe" + description = "Watch out that the Green Fairy doesn't come for you!" + color = "#33EE00" // rgb: lots, ??, ?? + overdose_threshold = 30 + dizzy_adj = 5 + slur_start = 25 + brawl_start = 40 + confused_start = 100 + +//copy paste from LSD... shoot me +/datum/reagent/ethanol/absinthe/on_mob_life(var/mob/M) + if(!M) M = holder.my_atom + if(!data) data = 1 + data++ + M:hallucination += 5 + if(volume > overdose_threshold) + M:adjustToxLoss(1) + ..() + return + +/datum/reagent/ethanol/rum + name = "Rum" + id = "rum" + description = "Popular with the sailors. Not very popular with everyone else." + color = "#664300" // rgb: 102, 67, 0 + overdose_threshold = 30 + +/datum/reagent/ethanol/rum/on_mob_life(var/mob/living/M as mob) + ..() + M.dizziness +=5 + if(volume > overdose_threshold) + M:adjustToxLoss(1) + return + +/datum/reagent/ethanol/mojito + name = "Mojito" + id = "mojito" + description = "If it's good enough for Spesscuba, it's good enough for you." + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/vodka + name = "Vodka" + id = "vodka" + description = "Number one drink AND fueling choice for Russians worldwide." + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/sake + name = "Sake" + id = "sake" + description = "Anime's favorite drink." + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/tequilla + name = "Tequila" + id = "tequilla" + description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?" + color = "#A8B0B7" // rgb: 168, 176, 183 + +/datum/reagent/ethanol/vermouth + name = "Vermouth" + id = "vermouth" + description = "You suddenly feel a craving for a martini..." + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/wine + name = "Wine" + id = "wine" + description = "An premium alchoholic beverage made from distilled grape juice." + color = "#7E4043" // rgb: 126, 64, 67 + dizzy_adj = 2 + slur_start = 65 //amount absorbed after which mob starts slurring + confused_start = 145 //amount absorbed after which mob starts confusing directions + +/datum/reagent/ethanol/cognac + name = "Cognac" + id = "cognac" + description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication." + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 4 + confused_start = 115 //amount absorbed after which mob starts confusing directions + +/datum/reagent/ethanol/suicider //otherwise known as "I want to get so smashed my liver gives out and I die from alcohol poisoning". + name = "Suicider" + id = "suicider" + description = "An unbelievably strong and potent variety of Cider." + color = "#CF3811" + dizzy_adj = 20 + slurr_adj = 20 + confused_adj = 3 + slur_start = 15 + brawl_start = 25 + confused_start = 40 + blur_start = 60 + pass_out = 80 + +/datum/reagent/ethanol/ale + name = "Ale" + id = "ale" + description = "A dark alchoholic beverage made by malted barley and yeast." + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/thirteenloko + name = "Thirteen Loko" + id = "thirteenloko" + description = "A potent mixture of caffeine and alcohol." + reagent_state = LIQUID + color = "#102000" // rgb: 16, 32, 0 + +/datum/reagent/ethanol/thirteenloko/on_mob_life(var/mob/living/M as mob) + ..() + M:nutrition += nutriment_factor + holder.remove_reagent(src.id, FOOD_METABOLISM) + M:drowsyness = max(0,M:drowsyness-7) + //if(!M:sleeping_willingly) + // M:sleeping = max(0,M.sleeping-2) + if (M.bodytemperature > 310) + M.bodytemperature = max(310, M.bodytemperature-5) + M.Jitter(1) + return + + +/////////////////////////////////////////////////////////////////cocktail entities////////////////////////////////////////////// + +/datum/reagent/ethanol/bilk + name = "Bilk" + id = "bilk" + description = "This appears to be beer mixed with milk. Disgusting." + reagent_state = LIQUID + color = "#895C4C" // rgb: 137, 92, 76 + +/datum/reagent/ethanol/atomicbomb + name = "Atomic Bomb" + id = "atomicbomb" + description = "Nuclear proliferation never tasted so good." + reagent_state = LIQUID + color = "#666300" // rgb: 102, 99, 0 + +/datum/reagent/ethanol/threemileisland + name = "THree Mile Island Iced Tea" + id = "threemileisland" + description = "Made for a woman, strong enough for a man." + reagent_state = LIQUID + color = "#666340" // rgb: 102, 99, 64 + +/datum/reagent/ethanol/goldschlager + name = "Goldschlager" + id = "goldschlager" + description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/patron + name = "Patron" + id = "patron" + description = "Tequila with silver in it, a favorite of alcoholic women in the club scene." + reagent_state = LIQUID + color = "#585840" // rgb: 88, 88, 64 + +/datum/reagent/ethanol/gintonic + name = "Gin and Tonic" + id = "gintonic" + description = "An all time classic, mild cocktail." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/cuba_libre + name = "Cuba Libre" + id = "cubalibre" + description = "Rum, mixed with cola. Viva la revolution." + reagent_state = LIQUID + color = "#3E1B00" // rgb: 62, 27, 0 + +/datum/reagent/ethanol/whiskey_cola + name = "Whiskey Cola" + id = "whiskeycola" + description = "Whiskey, mixed with cola. Surprisingly refreshing." + reagent_state = LIQUID + color = "#3E1B00" // rgb: 62, 27, 0 + +/datum/reagent/ethanol/martini + name = "Classic Martini" + id = "martini" + description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/vodkamartini + name = "Vodka Martini" + id = "vodkamartini" + description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/white_russian + name = "White Russian" + id = "whiterussian" + description = "That's just, like, your opinion, man..." + reagent_state = LIQUID + color = "#A68340" // rgb: 166, 131, 64 + +/datum/reagent/ethanol/screwdrivercocktail + name = "Screwdriver" + id = "screwdrivercocktail" + description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious." + reagent_state = LIQUID + color = "#A68310" // rgb: 166, 131, 16 + +/datum/reagent/ethanol/booger + name = "Booger" + id = "booger" + description = "Ewww..." + reagent_state = LIQUID + color = "#A68310" // rgb: 166, 131, 16 + +/datum/reagent/ethanol/bloody_mary + name = "Bloody Mary" + id = "bloodymary" + description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/gargle_blaster + name = "Pan-Galactic Gargle Blaster" + id = "gargleblaster" + description = "Whoah, this stuff looks volatile!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/brave_bull + name = "Brave Bull" + id = "bravebull" + description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/tequilla_sunrise + name = "Tequila Sunrise" + id = "tequillasunrise" + description = "Tequila and orange juice. Much like a Screwdriver, only Mexican~" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/toxins_special + name = "Toxins Special" + id = "toxinsspecial" + description = "This thing is FLAMING!. CALL THE DAMN SHUTTLE!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/beepsky_smash + name = "Beepsky Smash" + id = "beepskysmash" + description = "Deny drinking this and prepare for THE LAW." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/changelingsting + name = "Changeling Sting" + id = "changelingsting" + description = "You take a tiny sip and feel a burning sensation..." + reagent_state = LIQUID + color = "#2E6671" // rgb: 46, 102, 113 + +/datum/reagent/ethanol/irish_cream + name = "Irish Cream" + id = "irishcream" + description = "Whiskey-imbued cream, what else would you expect from the Irish." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/manly_dorf + name = "The Manly Dorf" + id = "manlydorf" + description = "Beer and Ale, brought together in a delicious mix. Intended for true men only." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/longislandicedtea + name = "Long Island Iced Tea" + id = "longislandicedtea" + description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/moonshine + name = "Moonshine" + id = "moonshine" + description = "You've really hit rock bottom now... your liver packed its bags and left last night." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/b52 + name = "B-52" + id = "b52" + description = "Coffee, Irish Cream, and congac. You will get bombed." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/irishcoffee + name = "Irish Coffee" + id = "irishcoffee" + description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/margarita + name = "Margarita" + id = "margarita" + description = "On the rocks with salt on the rim. Arriba~!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/black_russian + name = "Black Russian" + id = "blackrussian" + description = "For the lactose-intolerant. Still as classy as a White Russian." + reagent_state = LIQUID + color = "#360000" // rgb: 54, 0, 0 + +/datum/reagent/ethanol/manhattan + name = "Manhattan" + id = "manhattan" + description = "The Detective's undercover drink of choice. He never could stomach gin..." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/manhattan_proj + name = "Manhattan Project" + id = "manhattan_proj" + description = "A scienitst's drink of choice, for pondering ways to blow up the station." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/whiskeysoda + name = "Whiskey Soda" + id = "whiskeysoda" + description = "Ultimate refreshment." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/antifreeze + name = "Anti-freeze" + id = "antifreeze" + description = "Ultimate refreshment." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/barefoot + name = "Barefoot" + id = "barefoot" + description = "Barefoot and pregnant" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/snowwhite + name = "Snow White" + id = "snowwhite" + description = "A cold refreshment" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/demonsblood + name = "Demons Blood" + id = "demonsblood" + description = "AHHHH!!!!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 10 + slurr_adj = 10 + +/datum/reagent/ethanol/vodkatonic + name = "Vodka and Tonic" + id = "vodkatonic" + description = "For when a gin and tonic isn't russian enough." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 4 + slurr_adj = 3 + +/datum/reagent/ethanol/ginfizz + name = "Gin Fizz" + id = "ginfizz" + description = "Refreshingly lemony, deliciously dry." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 4 + slurr_adj = 3 + +/datum/reagent/ethanol/bahama_mama + name = "Bahama mama" + id = "bahama_mama" + description = "Tropic cocktail." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/singulo + name = "Singulo" + id = "singulo" + description = "A blue-space beverage!" + reagent_state = LIQUID + color = "#2E6671" // rgb: 46, 102, 113 + dizzy_adj = 15 + slurr_adj = 15 + +/datum/reagent/ethanol/sbiten + name = "Sbiten" + id = "sbiten" + description = "A spicy Vodka! Might be a little hot for the little guys!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/sbiten/on_mob_life(var/mob/living/M as mob) + ..() + if (M.bodytemperature < 360) + M.bodytemperature = min(360, M.bodytemperature+50) //310 is the normal bodytemp. 310.055 + return + +/datum/reagent/ethanol/devilskiss + name = "Devils Kiss" + id = "devilskiss" + description = "Creepy time!" + reagent_state = LIQUID + color = "#A68310" // rgb: 166, 131, 16 + +/datum/reagent/ethanol/red_mead + name = "Red Mead" + id = "red_mead" + description = "The true Viking drink! Even though it has a strange red color." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/mead + name = "Mead" + id = "mead" + description = "A Vikings drink, though a cheap one." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/iced_beer + name = "Iced Beer" + id = "iced_beer" + description = "A beer which is so cold the air around it freezes." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/iced_beer/on_mob_life(var/mob/living/M as mob) + ..() + if (M.bodytemperature < 270) + M.bodytemperature = min(270, M.bodytemperature-40) //310 is the normal bodytemp. 310.055 + return + +/datum/reagent/ethanol/grog + name = "Grog" + id = "grog" + description = "Watered down rum, Nanotrasen approves!" + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/aloe + name = "Aloe" + id = "aloe" + description = "So very, very, very good." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/andalusia + name = "Andalusia" + id = "andalusia" + description = "A nice, strange named drink." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/alliescocktail + name = "Allies Cocktail" + id = "alliescocktail" + description = "A drink made from your allies." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/acid_spit + name = "Acid Spit" + id = "acidspit" + description = "A drink by Nanotrasen. Made from live aliens." + reagent_state = LIQUID + color = "#365000" // rgb: 54, 80, 0 + +/datum/reagent/ethanol/amasec + name = "Amasec" + id = "amasec" + description = "Official drink of the Imperium." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + + +/datum/reagent/ethanol/neurotoxin + name = "Neurotoxin" + id = "neurotoxin" + description = "A strong neurotoxin that puts the subject into a death-like state." + reagent_state = LIQUID + color = "#2E2E61" // rgb: 46, 46, 97 + +/datum/reagent/ethanol/neurotoxin/on_mob_life(var/mob/living/M as mob) + M.weakened = max(M.weakened, 3) + if(!data) + data = 1 + data++ + M.dizziness +=6 + if(data >= 15 && data <45) + if (!M.slurring) + M.slurring = 1 + M.slurring += 3 + else if(data >= 45 && prob(50) && data <55) + M.confused = max(M.confused+3,0) + else if(data >=55) + M.druggy = max(M.druggy, 55) + else if(data >=200) + M.adjustToxLoss(2) + ..() + return + +/datum/reagent/ethanol/bananahonk + name = "Banana Mama" + id = "bananahonk" + description = "A drink from Clown Heaven." + nutriment_factor = 1 * FOOD_METABOLISM + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/bananahonk/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + if(istype(M, /mob/living/carbon/human) && M.job in list("Clown")) + if(!M) M = holder.my_atom + M.heal_organ_damage(1,1) + M.nutrition += nutriment_factor + ..() + return + ..() + +/datum/reagent/ethanol/silencer + name = "Silencer" + id = "silencer" + description = "A drink from Mime Heaven." + nutriment_factor = 1 * FOOD_METABOLISM + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/ethanol/silencer/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + if(istype(M, /mob/living/carbon/human) && M.job in list("Mime")) + if(!M) M = holder.my_atom + M.heal_organ_damage(1,1) + M.nutrition += nutriment_factor + ..() + return + ..() + +/datum/reagent/ethanol/changelingsting + name = "Changeling Sting" + id = "changelingsting" + description = "A stingy drink." + reagent_state = LIQUID + color = "#2E6671" // rgb: 46, 102, 113 + +/datum/reagent/ethanol/changelingsting/on_mob_life(var/mob/living/M as mob) + ..() + M.dizziness +=5 + return + +/datum/reagent/ethanol/irishcarbomb + name = "Irish Car Bomb" + id = "irishcarbomb" + description = "Mmm, tastes like chocolate cake..." + reagent_state = LIQUID + color = "#2E6671" // rgb: 46, 102, 113 + +/datum/reagent/ethanol/irishcarbomb/on_mob_life(var/mob/living/M as mob) + ..() + M.dizziness +=5 + return + +/datum/reagent/ethanol/syndicatebomb + name = "Syndicate Bomb" + id = "syndicatebomb" + description = "A Syndicate bomb" + reagent_state = LIQUID + color = "#2E6671" // rgb: 46, 102, 113 + +/datum/reagent/ethanol/erikasurprise + name = "Erika Surprise" + id = "erikasurprise" + description = "The surprise is, it's green!" + reagent_state = LIQUID + color = "#2E6671" // rgb: 46, 102, 113 + +/datum/reagent/ethanol/driestmartini + name = "Driest Martini" + id = "driestmartini" + description = "Only for the experienced. You think you see sand floating in the glass." + nutriment_factor = 1 * FOOD_METABOLISM + color = "#2E6671" // rgb: 46, 102, 113 + +/datum/reagent/ethanol/driestmartini/on_mob_life(var/mob/living/M as mob) + if(!data) data = 1 + data++ + M.dizziness +=10 + if(data >= 55 && data <115) + if (!M.stuttering) M.stuttering = 1 + M.stuttering += 10 + else if(data >= 115 && prob(33)) + M.confused = max(M.confused+15,15) + ..() + + return \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm new file mode 100644 index 00000000000..e66e48fbdfe --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm @@ -0,0 +1,279 @@ +/datum/reagent/drink/orangejuice + name = "Orange juice" + id = "orangejuice" + description = "Both delicious AND rich in Vitamin C, what more do you need?" + color = "#E78108" // rgb: 231, 129, 8 + +/datum/reagent/drink/orangejuicde/on_mob_life(var/mob/living/M as mob) + ..() + if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1*REM) + return + +/datum/reagent/drink/tomatojuice + name = "Tomato Juice" + id = "tomatojuice" + description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?" + color = "#731008" // rgb: 115, 16, 8 + +/datum/reagent/drink/tomatojuice/on_mob_life(var/mob/living/M as mob) + ..() + if(M.getFireLoss() && prob(20)) M.heal_organ_damage(0,1) + return + +/datum/reagent/drink/limejuice + name = "Lime Juice" + id = "limejuice" + description = "The sweet-sour juice of limes." + color = "#365E30" // rgb: 54, 94, 48 + +/datum/reagent/drink/limejuice/on_mob_life(var/mob/living/M as mob) + ..() + if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1) + return + + +/datum/reagent/drink/carrotjuice + name = "Carrot juice" + id = "carrotjuice" + description = "It is just like a carrot but without crunching." + color = "#973800" // rgb: 151, 56, 0 + +/datum/reagent/drink/carrotjuicde/on_mob_life(var/mob/living/M as mob) + ..() + M.eye_blurry = max(M.eye_blurry-1 , 0) + M.eye_blind = max(M.eye_blind-1 , 0) + if(!data) data = 1 + switch(data) + if(1 to 20) + //nothing + if(21 to INFINITY) + if (prob(data-10)) + M.disabilities &= ~NEARSIGHTED + data++ + return + +/datum/reagent/drink/doctor_delight + name = "The Doctor's Delight" + id = "doctorsdelight" + description = "A gulp a day keeps the MediBot away. That's probably for the best." + reagent_state = LIQUID + color = "#FF8CFF" // rgb: 255, 140, 255 + +/datum/reagent/drink/doctors_delight/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1) + ..() + return + +/datum/reagent/drink/berryjuice + name = "Berry Juice" + id = "berryjuice" + description = "A delicious blend of several different kinds of berries." + color = "#863333" // rgb: 134, 51, 51 + +/datum/reagent/drink/poisonberryjuice + name = "Poison Berry Juice" + id = "poisonberryjuice" + description = "A tasty juice blended from various kinds of very deadly and toxic berries." + color = "#863353" // rgb: 134, 51, 83 + +/datum/reagent/drink/poisonberryjuice/on_mob_life(var/mob/living/M as mob) + ..() + M.adjustToxLoss(1) + return + +/datum/reagent/drink/watermelonjuice + name = "Watermelon Juice" + id = "watermelonjuice" + description = "Delicious juice made from watermelon." + color = "#863333" // rgb: 134, 51, 51 + +/datum/reagent/drink/lemonjuice + name = "Lemon Juice" + id = "lemonjuice" + description = "This juice is VERY sour." + color = "#863333" // rgb: 175, 175, 0 + +/datum/reagent/drink/grapejuice + name = "Grape Juice" + id = "grapejuice" + description = "This juice is known to stain shirts." + color = "#993399" // rgb: 153, 51, 153 + +/datum/reagent/drink/banana + name = "Banana Juice" + id = "banana" + description = "The raw essence of a banana." + color = "#863333" // rgb: 175, 175, 0 + +/datum/reagent/drink/banana/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + if(istype(M, /mob/living/carbon/human) && M.job in list("Clown")) + if(!M) M = holder.my_atom + M.heal_organ_damage(1,1) + M.nutrition += nutriment_factor + ..() + return + ..() + +/datum/reagent/drink/nothing + name = "Nothing" + id = "nothing" + description = "Absolutely nothing." + +/datum/reagent/drink/nothing/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + if(istype(M, /mob/living/carbon/human) && M.job in list("Mime")) + if(!M) M = holder.my_atom + M.heal_organ_damage(1,1) + M.nutrition += nutriment_factor + ..() + return + ..() + +/datum/reagent/drink/potato_juice + name = "Potato Juice" + id = "potato" + description = "Juice of the potato. Bleh." + nutriment_factor = 2 * FOOD_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/drink/milk + name = "Milk" + id = "milk" + description = "An opaque white liquid produced by the mammary glands of mammals." + color = "#DFDFDF" // rgb: 223, 223, 223 + +/datum/reagent/drink/milk/on_mob_life(var/mob/living/M as mob) + if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0) + if(holder.has_reagent("capsaicin")) + holder.remove_reagent("capsaicin", 10*REAGENTS_METABOLISM) + ..() + return + +/datum/reagent/drink/milk/soymilk + name = "Soy Milk" + id = "soymilk" + description = "An opaque white liquid made from soybeans." + color = "#DFDFC7" // rgb: 223, 223, 199 + +/datum/reagent/drink/milk/cream + name = "Cream" + id = "cream" + description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?" + color = "#DFD7AF" // rgb: 223, 215, 175 + +/datum/reagent/drink/milk/chocolate_milk + name = "Chocolate milk" + id ="chocolate_milk" + description = "Chocolate-flavored milk, tastes like being a kid again." + color = "#85432C" + +/datum/reagent/drink/hot_coco + name = "Hot Chocolate" + id = "hot_coco" + description = "Made with love! And coco beans." + nutriment_factor = 2 * FOOD_METABOLISM + color = "#403010" // rgb: 64, 48, 16 + adj_temp = 5 + +/datum/reagent/drink/coffee + name = "Coffee" + id = "coffee" + description = "Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant." + color = "#482000" // rgb: 72, 32, 0 + adj_dizzy = -5 + adj_drowsy = -3 + adj_sleepy = -2 + adj_temp = 25 + overdose_threshold = 45 + +/datum/reagent/drink/coffee/on_mob_life(var/mob/living/M as mob) + if(adj_temp > 0 && holder.has_reagent("frostoil")) + holder.remove_reagent("frostoil", 10*REAGENTS_METABOLISM) + if(prob(50)) + M.AdjustParalysis(-1) + M.AdjustStunned(-1) + M.AdjustWeakened(-1) + ..() + return + +/datum/reagent/drink/coffee/overdose_process(var/mob/living/M as mob) + if(volume > 45) + M.Jitter(5) + + ..() + return + +/datum/reagent/drink/coffee/icecoffee + name = "Iced Coffee" + id = "icecoffee" + description = "Coffee and ice, refreshing and cool." + color = "#102838" // rgb: 16, 40, 56 + adj_temp = -5 + +/datum/reagent/drink/coffee/soy_latte + name = "Soy Latte" + id = "soy_latte" + description = "A nice and tasty beverage while you are reading your hippie books." + color = "#664300" // rgb: 102, 67, 0 + adj_sleepy = 0 + adj_temp = 5 + +/datum/reagent/drink/coffee/soy_latte/on_mob_life(var/mob/living/M as mob) + ..() + M.sleeping = 0 + if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0) + return + +/datum/reagent/drink/coffee/cafe_latte + name = "Cafe Latte" + id = "cafe_latte" + description = "A nice, strong and tasty beverage while you are reading." + color = "#664300" // rgb: 102, 67, 0 + adj_sleepy = 0 + adj_temp = 5 + +/datum/reagent/drink/coffee/cafe_latte/on_mob_life(var/mob/living/M as mob) + ..() + M.sleeping = 0 + if(M.getBruteLoss() && prob(20)) + M.heal_organ_damage(1,0) + return + +/datum/reagent/drink/tea + name = "Tea" + id = "tea" + description = "Tasty black tea: It has antioxidants. It's good for you!" + color = "#101000" // rgb: 16, 16, 0 + adj_dizzy = -2 + adj_drowsy = -1 + adj_sleepy = -3 + adj_temp = 20 + +/datum/reagent/drink/tea/on_mob_life(var/mob/living/M as mob) + ..() + if(M.getToxLoss() && prob(20)) + M.adjustToxLoss(-1) + return + +/datum/reagent/drink/tea/icetea + name = "Iced Tea" + id = "icetea" + description = "No relation to a certain rap artist/ actor." + color = "#104038" // rgb: 16, 64, 56 + adj_temp = -5 + +/datum/reagent/drink/kahlua + name = "Kahlua" + id = "kahlua" + description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!" + color = "#664300" // rgb: 102, 67, 0 + adj_dizzy = -5 + adj_drowsy = -3 + adj_sleepy = -2 + +/datum/reagent/drink/kahlua/on_mob_life(var/mob/living/M as mob) + ..() + M.Jitter(5) + return \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm new file mode 100644 index 00000000000..3bc3b364929 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm @@ -0,0 +1,26 @@ +/datum/reagent/drink + name = "Drink" + id = "drink" + description = "Uh, some kind of drink." + reagent_state = LIQUID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#E78108" // rgb: 231, 129, 8 + var/adj_dizzy = 0 + var/adj_drowsy = 0 + var/adj_sleepy = 0 + var/adj_temp = 0 + +/datum/reagent/drink/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.nutrition += nutriment_factor + holder.remove_reagent(src.id, FOOD_METABOLISM) + if (adj_dizzy) M.dizziness = max(0,M.dizziness + adj_dizzy) + if (adj_drowsy) M.drowsyness = max(0,M.drowsyness + adj_drowsy) + if (adj_sleepy) M.sleeping = max(0,M.sleeping + adj_sleepy) + if (adj_temp) + if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 + M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT)) + // Drinks should be used up faster than other reagents. + holder.remove_reagent(src.id, FOOD_METABOLISM) + ..() + return diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm new file mode 100644 index 00000000000..e9acef2da7d --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm @@ -0,0 +1,141 @@ +/datum/reagent/drink/cold + name = "Cold drink" + adj_temp = -5 + +/datum/reagent/drink/cold/tonic + name = "Tonic Water" + id = "tonic" + description = "It tastes strange but at least the quinine keeps the Space Malaria at bay." + color = "#664300" // rgb: 102, 67, 0 + adj_dizzy = -5 + adj_drowsy = -3 + adj_sleepy = -2 + +/datum/reagent/drink/cold/sodawater + name = "Soda Water" + id = "sodawater" + description = "A can of club soda. Why not make a scotch and soda?" + color = "#619494" // rgb: 97, 148, 148 + adj_dizzy = -5 + adj_drowsy = -3 + +/datum/reagent/drink/cold/ice + name = "Ice" + id = "ice" + description = "Frozen water, your dentist wouldn't like you chewing this." + reagent_state = SOLID + color = "#619494" // rgb: 97, 148, 148 + +/datum/reagent/drink/cold/space_cola + name = "Cola" + id = "cola" + description = "A refreshing beverage." + reagent_state = LIQUID + color = "#100800" // rgb: 16, 8, 0 + adj_drowsy = -3 + +/datum/reagent/drink/cold/nuka_cola + name = "Nuka Cola" + id = "nuka_cola" + description = "Cola, cola never changes." + color = "#100800" // rgb: 16, 8, 0 + adj_sleepy = -2 + +/datum/reagent/drink/cold/nuka_cola/on_mob_life(var/mob/living/M as mob) + M.Jitter(20) + M.druggy = max(M.druggy, 30) + M.dizziness +=5 + M.drowsyness = 0 + M.status_flags |= GOTTAGOFAST + ..() + return + +/datum/reagent/drink/cold/spacemountainwind + name = "Space Mountain Wind" + id = "spacemountainwind" + description = "Blows right through you like a space wind." + color = "#102000" // rgb: 16, 32, 0 + adj_drowsy = -7 + adj_sleepy = -1 + +/datum/reagent/drink/cold/dr_gibb + name = "Dr. Gibb" + id = "dr_gibb" + description = "A delicious blend of 42 different flavours" + color = "#102000" // rgb: 16, 32, 0 + adj_drowsy = -6 + +/datum/reagent/drink/cold/space_up + name = "Space-Up" + id = "space_up" + description = "Tastes like a hull breach in your mouth." + color = "#202800" // rgb: 32, 40, 0 + adj_temp = -8 + +/datum/reagent/drink/cold/lemon_lime + name = "Lemon Lime" + description = "A tangy substance made of 0.5% natural citrus!" + id = "lemon_lime" + color = "#878F00" // rgb: 135, 40, 0 + adj_temp = -8 + +/datum/reagent/drink/cold/lemonade + name = "Lemonade" + description = "Oh the nostalgia..." + id = "lemonade" + color = "#FFFF00" // rgb: 255, 255, 0 + +/datum/reagent/drink/cold/kiraspecial + name = "Kira Special" + description = "Long live the guy who everyone had mistaken for a girl. Baka!" + id = "kiraspecial" + color = "#CCCC99" // rgb: 204, 204, 153 + +/datum/reagent/drink/cold/brownstar + name = "Brown Star" + description = "Its not what it sounds like..." + id = "brownstar" + color = "#9F3400" // rgb: 159, 052, 000 + adj_temp = - 2 + +/datum/reagent/drink/cold/milkshake + name = "Milkshake" + description = "Glorious brainfreezing mixture." + id = "milkshake" + color = "#AEE5E4" // rgb" 174, 229, 228 + adj_temp = -9 + +/datum/reagent/drink/cold/milkshake/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(!data) data = 1 + switch(data) + if(1 to 15) + M.bodytemperature -= 5 * TEMPERATURE_DAMAGE_COEFFICIENT + if(holder.has_reagent("capsaicin")) + holder.remove_reagent("capsaicin", 5) + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature -= rand(5,20) + if(15 to 25) + M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature -= rand(10,20) + if(25 to INFINITY) + M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT + if(prob(1)) M.emote("shiver") + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature -= rand(15,20) + data++ + holder.remove_reagent(src.id, FOOD_METABOLISM) + ..() + return + +/datum/reagent/drink/cold/rewriter + name = "Rewriter" + description = "The secert of the sanctuary of the Libarian..." + id = "rewriter" + color = "#485000" // rgb:72, 080, 0 + +/datum/reagent/drink/cold/rewriter/on_mob_life(var/mob/living/M as mob) + ..() + M.Jitter(5) + return \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_admin.dm b/code/modules/reagents/oldchem/reagents/reagents_admin.dm new file mode 100644 index 00000000000..dd9e73a96b1 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_admin.dm @@ -0,0 +1,54 @@ +/datum/reagent/adminordrazine //An OP chemical for admins + name = "Adminordrazine" + id = "adminordrazine" + description = "It's magic. We don't have to explain it." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + process_flags = ORGANIC | SYNTHETIC //Adminbuse knows no bounds! + +/datum/reagent/adminordrazine/on_mob_life(var/mob/living/carbon/M as mob) + if(!M) M = holder.my_atom ///This can even heal dead people. + for(var/datum/reagent/R in M.reagents.reagent_list) + if(R != src) + M.reagents.remove_reagent(R.id,5) + M.setCloneLoss(0) + M.setOxyLoss(0) + M.radiation = 0 + M.heal_organ_damage(5,5) + M.adjustToxLoss(-5) + M.hallucination = 0 + M.setBrainLoss(0) + M.disabilities = 0 + M.sdisabilities = 0 + M.eye_blurry = 0 + M.eye_blind = 0 + if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] + if(istype(E)) + E.damage = max(E.damage-5 , 0) + M.SetWeakened(0) + M.SetStunned(0) + M.SetParalysis(0) + M.silent = 0 + M.dizziness = 0 + M.drowsyness = 0 + M.stuttering = 0 + M.slurring = 0 + M.confused = 0 + M.sleeping = 0 + M.jitteriness = 0 + if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs + var/mob/living/carbon/C = M + if(C.virus2.len) + for (var/ID in C.virus2) + var/datum/disease2/disease/V = C.virus2[ID] + C.antibodies |= V.antigen + ..() + return + + +/datum/reagent/adminordrazine/nanites + name = "Nanites" + id = "nanites" + description = "Nanomachines that aid in rapid cellular regeneration." \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_drugs.dm b/code/modules/reagents/oldchem/reagents/reagents_drugs.dm new file mode 100644 index 00000000000..a00da8f283a --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_drugs.dm @@ -0,0 +1,95 @@ +/datum/reagent/serotrotium + name = "Serotrotium" + id = "serotrotium" + description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans." + reagent_state = LIQUID + color = "#202040" // rgb: 20, 20, 40 + +/datum/reagent/serotrotium/on_mob_life(var/mob/living/M as mob) + if(ishuman(M)) + if(prob(7)) M.emote(pick("twitch","drool","moan","gasp")) + holder.remove_reagent(src.id, 0.25 * REAGENTS_METABOLISM) + return + + +/datum/reagent/lithium + name = "Lithium" + id = "lithium" + description = "A chemical element." + reagent_state = SOLID + color = "#808080" // rgb: 128, 128, 128 + +/datum/reagent/lithium/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(M.canmove && !M.restrained() && istype(M.loc, /turf/space)) + step(M, pick(cardinal)) + if(prob(5)) M.emote(pick("twitch","drool","moan")) + ..() + return + + +/datum/reagent/hippies_delight + name = "Hippie's Delight" + id = "hippiesdelight" + description = "You just don't get it maaaan." + reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/hippies_delight/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.druggy = max(M.druggy, 50) + if(!data) data = 1 + switch(data) + if(1 to 5) + if (!M.stuttering) M.stuttering = 1 + M.Dizzy(10) + if(prob(10)) M.emote(pick("twitch","giggle")) + if(5 to 10) + if (!M.stuttering) M.stuttering = 1 + M.Jitter(20) + M.Dizzy(20) + M.druggy = max(M.druggy, 45) + if(prob(20)) M.emote(pick("twitch","giggle")) + if (10 to INFINITY) + if (!M.stuttering) M.stuttering = 1 + M.Jitter(40) + M.Dizzy(40) + M.druggy = max(M.druggy, 60) + if(prob(30)) M.emote(pick("twitch","giggle")) + holder.remove_reagent(src.id, 0.2) + data++ + ..() + return + + +/datum/reagent/lsd + name = "Lysergic acid diethylamide" + id = "lsd" + description = "A highly potent hallucinogenic substance. Far out, maaaan." + reagent_state = LIQUID + color = "#0000D8" + +/datum/reagent/lsd/on_mob_life(var/mob/living/M) + if(!M) M = holder.my_atom + M.hallucination += 10 + ..() + return + + +/datum/reagent/space_drugs + name = "Space drugs" + id = "space_drugs" + description = "An illegal chemical compound used as drug." + reagent_state = LIQUID + color = "#9087A2" + metabolization_rate = 0.2 + +/datum/reagent/space_drugs/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.druggy = max(M.druggy, 15) + if(isturf(M.loc) && !istype(M.loc, /turf/space)) + if(M.canmove && !M.restrained()) + if(prob(10)) step(M, pick(cardinal)) + if(prob(7)) M.emote(pick("twitch","drool","moan","giggle")) + ..() + return \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_flammable.dm b/code/modules/reagents/oldchem/reagents/reagents_flammable.dm new file mode 100644 index 00000000000..4603aa6c238 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_flammable.dm @@ -0,0 +1,136 @@ +/datum/reagent/fuel + name = "Welding fuel" + id = "fuel" + description = "A highly flammable blend of basic hydrocarbons, mostly Acetylene. Useful for both welding and organic chemistry, and can be fortified into a heavier oil." + reagent_state = LIQUID + color = "#060606" + +/datum/reagent/fuel/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite! + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + M.adjust_fire_stacks(volume / 10) + return + ..() + +/datum/reagent/fuel/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(1) + ..() + return + +/datum/reagent/fuel/unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke + name = "Unholy Water" + id = "unholywater" + description = "Something that shouldn't exist on this plane of existance." + process_flags = ORGANIC | SYNTHETIC //ethereal means everything processes it. + +/datum/reagent/fuel/unholywater/on_mob_life(mob/living/M) + M.adjustBrainLoss(3) + if(iscultist(M)) + M.status_flags |= GOTTAGOFAST + M.drowsyness = max(M.drowsyness-5, 0) + M.AdjustParalysis(-2) + M.AdjustStunned(-2) + M.AdjustWeakened(-2) + else + M.adjustToxLoss(2) + M.adjustFireLoss(2) + M.adjustOxyLoss(2) + M.adjustBruteLoss(2) + holder.remove_reagent(src.id, 1) + + +/datum/reagent/incendiary_fuel //copy-pasta of welding fuel; allow incendiary grenades to function better without the headache of people spraying fuel everywhere with regular welding fuel. + name = "Incendiary fuel" + id = "incendiaryfuel" + description = "A highly flammable compound used in incendiary grenades." + reagent_state = LIQUID + color = "#660000" // rgb: 102, 0, 0 + +/datum/reagent/incendiary_fuel/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite! + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + M.adjust_fire_stacks(volume / 10) + return + +/datum/reagent/incendiary_fuel/reaction_obj(var/obj/O, var/volume) + var/turf/the_turf = get_turf(O) + if(!the_turf) + return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO + new /obj/effect/decal/cleanable/liquid_fuel(the_turf, volume) + +/datum/reagent/incendiary_fuel/reaction_turf(var/turf/T, var/volume) + new /obj/effect/decal/cleanable/liquid_fuel(T, volume) + return + +/datum/reagent/incendiary_fuel/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(1) + ..() + return + + +/datum/reagent/plasma + name = "Plasma" + id = "plasma" + description = "The liquid phase of an unusual extraterrestrial compound." + reagent_state = LIQUID + color = "#7A2B94" + +/datum/reagent/plasma/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(1*REM) + if(holder.has_reagent("epinephrine")) + holder.remove_reagent("epinephrine", 2) + ..() + return + +/datum/reagent/plasma/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with plasma is stronger than fuel! + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + M.adjust_fire_stacks(volume / 5) + ..() + return + + +/datum/reagent/thermite + name = "Thermite" + id = "thermite" + description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls." + reagent_state = SOLID + color = "#673910" // rgb: 103, 57, 16 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/thermite/reaction_turf(var/turf/T, var/volume) + src = null + if(volume >= 5) + if(istype(T, /turf/simulated/wall)) + T:thermite = 1 + T.overlays.Cut() + T.overlays = image('icons/effects/effects.dmi',icon_state = "thermite") + return + +/datum/reagent/thermite/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustFireLoss(1) + ..() + return + + +/datum/reagent/glycerol + name = "Glycerol" + id = "glycerol" + description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity." + reagent_state = LIQUID + color = "#808080" // rgb: 128, 128, 128 + + +/datum/reagent/nitroglycerin + name = "Nitroglycerin" + id = "nitroglycerin" + description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol." + reagent_state = LIQUID + color = "#808080" // rgb: 128, 128, 128 \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_food.dm b/code/modules/reagents/oldchem/reagents/reagents_food.dm new file mode 100644 index 00000000000..485a42e7ca7 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_food.dm @@ -0,0 +1,425 @@ +/////////////////////////Food Reagents//////////////////////////// +// Part of the food code. Nutriment is used instead of the old "heal_amt" code. Also is where all the food +// condiments, additives, and such go. +/datum/reagent/nutriment // Pure nutriment, universally digestable and thus slightly less effective + name = "Nutriment" + id = "nutriment" + description = "A questionable mixture of various pure nutrients commonly found in processed foods." + reagent_state = SOLID + nutriment_factor = 12 * REAGENTS_METABOLISM + color = "#664330" // rgb: 102, 67, 48 + +/datum/reagent/nutriment/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(!(M.mind in ticker.mode.vampires)) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species && H.species.dietflags) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients + H.nutrition += nutriment_factor // For hunger and fatness + if(prob(50)) M.heal_organ_damage(1,0) + if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals + if(prob(50)) M.heal_organ_damage(1,0) + ..() + return + + +/datum/reagent/protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores + name = "Protein" + id = "protein" + description = "Various essential proteins and fats commonly found in animal flesh and blood." + reagent_state = SOLID + nutriment_factor = 15 * REAGENTS_METABOLISM + color = "#664330" // rgb: 102, 67, 48 + +/datum/reagent/protein/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(!(M.mind in ticker.mode.vampires)) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_HERB)) //Make sure the species has it's dietflag set, and that it is not a herbivore + H.nutrition += nutriment_factor // For hunger and fatness + if(prob(50)) M.heal_organ_damage(1,0) + if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals + if(prob(50)) M.heal_organ_damage(1,0) + ..() + return + + +/datum/reagent/plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores + name = "Plant-matter" + id = "plantmatter" + description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce." + reagent_state = SOLID + nutriment_factor = 15 * REAGENTS_METABOLISM + color = "#664330" // rgb: 102, 67, 48 + +/datum/reagent/plantmatter/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(!(M.mind in ticker.mode.vampires)) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_CARN)) //Make sure the species has it's dietflag set, and that it is not a carnivore + H.nutrition += nutriment_factor // For hunger and fatness + if(prob(50)) M.heal_organ_damage(1,0) + if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals + if(prob(50)) M.heal_organ_damage(1,0) + ..() + return + + +/datum/reagent/soysauce + name = "Soysauce" + id = "soysauce" + description = "A salty sauce made from the soy plant." + reagent_state = LIQUID + nutriment_factor = 2 * REAGENTS_METABOLISM + color = "#792300" // rgb: 121, 35, 0 + +/datum/reagent/ketchup + name = "Ketchup" + id = "ketchup" + description = "Ketchup, catsup, whatever. It's tomato paste." + reagent_state = LIQUID + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#731008" // rgb: 115, 16, 8 + + +/datum/reagent/capsaicin + name = "Capsaicin Oil" + id = "capsaicin" + description = "This is what makes chilis hot." + reagent_state = LIQUID + color = "#B31008" // rgb: 179, 16, 8 + +/datum/reagent/capsaicin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(!data) data = 1 + switch(data) + if(1 to 15) + M.bodytemperature += 5 * TEMPERATURE_DAMAGE_COEFFICIENT + if(holder.has_reagent("frostoil")) + holder.remove_reagent("frostoil", 5) + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature += rand(5,20) + if(15 to 25) + M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature += rand(10,20) + if(25 to INFINITY) + M.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature += rand(15,20) + holder.remove_reagent(src.id, FOOD_METABOLISM) + data++ + ..() + return + + +/datum/reagent/sodiumchloride + name = "Salt" + id = "sodiumchloride" + description = "Sodium chloride, common table salt." + reagent_state = SOLID + color = "#B1B0B0" + +/datum/reagent/sodiumchloride/overdose_process(var/mob/living/M as mob) + if(volume > 100) + if(prob(70)) + M.adjustBrainLoss(1) + if(prob(8)) + M.adjustToxLoss(rand(1,2)) + ..() + return + + +/datum/reagent/blackpepper + name = "Black Pepper" + id = "blackpepper" + description = "A powder ground from peppercorns. *AAAACHOOO*" + reagent_state = SOLID + // no color (ie, black) + +/datum/reagent/coco + name = "Coco Powder" + id = "coco" + description = "A fatty, bitter paste made from coco beans." + reagent_state = SOLID + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/coco/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + ..() + return + +/datum/reagent/hot_coco + name = "Hot Chocolate" + id = "hot_coco" + description = "Made with love! And coco beans." + reagent_state = LIQUID + nutriment_factor = 2 * REAGENTS_METABOLISM + color = "#403010" // rgb: 64, 48, 16 + +/datum/reagent/hot_coco/on_mob_life(var/mob/living/M as mob) + if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 + M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + M.nutrition += nutriment_factor + ..() + return + + +/datum/reagent/psilocybin + name = "Psilocybin" + id = "psilocybin" + description = "A strong psycotropic derived from certain species of mushroom." + color = "#E700E7" // rgb: 231, 0, 231 + +/datum/reagent/psilocybin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.druggy = max(M.druggy, 30) + if(!data) data = 1 + switch(data) + if(1 to 5) + if (!M.stuttering) M.stuttering = 1 + M.Dizzy(5) + if(prob(10)) M.emote(pick("twitch","giggle")) + if(5 to 10) + if (!M.stuttering) M.stuttering = 1 + M.Jitter(10) + M.Dizzy(10) + M.druggy = max(M.druggy, 35) + if(prob(20)) M.emote(pick("twitch","giggle")) + if (10 to INFINITY) + if (!M.stuttering) M.stuttering = 1 + M.Jitter(20) + M.Dizzy(20) + M.druggy = max(M.druggy, 40) + if(prob(30)) M.emote(pick("twitch","giggle")) + data++ + ..() + return + + +/datum/reagent/sprinkles + name = "Sprinkles" + id = "sprinkles" + description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops." + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#FF00FF" // rgb: 255, 0, 255 + +/datum/reagent/sprinkles/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden")) + if(!M) M = holder.my_atom + M.heal_organ_damage(1,1) + M.nutrition += nutriment_factor + ..() + return + ..() + + +/datum/reagent/cornoil + name = "Corn Oil" + id = "cornoil" + description = "An oil derived from various types of corn." + reagent_state = LIQUID + nutriment_factor = 20 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/cornoil/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + ..() + return + +/datum/reagent/cornoil/reaction_turf(var/turf/simulated/T, var/volume) + if (!istype(T)) return + src = null + if(volume >= 3) + if(T.wet >= 1) return + T.wet = 1 + if(T.wet_overlay) + T.overlays -= T.wet_overlay + T.wet_overlay = null + T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor") + T.overlays += T.wet_overlay + + spawn(800) + if (!istype(T)) return + if(T.wet >= 2) return + T.wet = 0 + if(T.wet_overlay) + T.overlays -= T.wet_overlay + T.wet_overlay = null + var/hotspot = (locate(/obj/effect/hotspot) in T) + if(hotspot) + var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) + lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) + lowertemp.react() + T.assume_air(lowertemp) + qdel(hotspot) + + +/datum/reagent/enzyme + name = "Denatured Enzyme" + id = "enzyme" + description = "Heated beyond usefulness, this enzyme is now worthless." + reagent_state = LIQUID + color = "#282314" // rgb: 54, 94, 48 + + +/datum/reagent/dry_ramen + name = "Dry Ramen" + id = "dry_ramen" + description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water." + reagent_state = SOLID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/dry_ramen/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + ..() + return + + +/datum/reagent/hot_ramen + name = "Hot Ramen" + id = "hot_ramen" + description = "The noodles are boiled, the flavors are artificial, just like being back in school." + reagent_state = LIQUID + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/hot_ramen/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 + M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT)) + ..() + return + + +/datum/reagent/hell_ramen + name = "Hell Ramen" + id = "hell_ramen" + description = "The noodles are boiled, the flavors are artificial, just like being back in school." + reagent_state = LIQUID + nutriment_factor = 5 * REAGENTS_METABOLISM + color = "#302000" // rgb: 48, 32, 0 + +/datum/reagent/hell_ramen/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT + ..() + return + + +/datum/reagent/flour + name = "flour" + id = "flour" + description = "This is what you rub all over yourself to pretend to be a ghost." + reagent_state = SOLID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#FFFFFF" // rgb: 0, 0, 0 + +/datum/reagent/flour/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + ..() + return + +/datum/reagent/flour/reaction_turf(var/turf/T, var/volume) + src = null + if(!istype(T, /turf/space)) + new /obj/effect/decal/cleanable/flour(T) + + +/datum/reagent/rice + name = "Rice" + id = "rice" + description = "Enjoy the great taste of nothing." + reagent_state = SOLID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#FFFFFF" // rgb: 0, 0, 0 + +/datum/reagent/rice/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + ..() + return + + +/datum/reagent/cherryjelly + name = "Cherry Jelly" + id = "cherryjelly" + description = "Totally the best. Only to be spread on foods with excellent lateral symmetry." + reagent_state = LIQUID + nutriment_factor = 1 * REAGENTS_METABOLISM + color = "#801E28" // rgb: 128, 30, 40 + +/datum/reagent/cherryjelly/on_mob_life(var/mob/living/M as mob) + M.nutrition += nutriment_factor + ..() + return + + +/datum/reagent/toxin/coffeepowder + name = "Coffee Grounds" + id = "coffeepowder" + description = "Finely ground Coffee beans, used to make coffee." + reagent_state = SOLID + color = "#5B2E0D" // rgb: 91, 46, 13 + +/datum/reagent/toxin/teapowder + name = "Ground Tea Leaves" + id = "teapowder" + description = "Finely shredded Tea leaves, used for making tea." + reagent_state = SOLID + color = "#7F8400" // rgb: 127, 132, 0 + +//Reagents used for plant fertilizers. +/datum/reagent/toxin/fertilizer + name = "fertilizer" + id = "fertilizer" + description = "A chemical mix good for growing plants with." + reagent_state = LIQUID +// toxpwr = 0.2 //It's not THAT poisonous. + color = "#664330" // rgb: 102, 67, 48 + +/datum/reagent/toxin/fertilizer/eznutrient + name = "EZ Nutrient" + id = "eznutrient" + +/datum/reagent/toxin/fertilizer/left4zed + name = "Left-4-Zed" + id = "left4zed" + +/datum/reagent/toxin/fertilizer/robustharvest + name = "Robust Harvest" + id = "robustharvest" + + +/datum/reagent/sugar + name = "Sugar" + id = "sugar" + description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste." + reagent_state = SOLID + color = "#FFFFFF" // rgb: 255, 255, 255 + overdose_threshold = 200 // Hyperglycaemic shock + +/datum/reagent/sugar/on_mob_life(var/mob/living/M as mob) + if(prob(4)) + M.reagents.add_reagent("epinephrine", 1.2) + if(prob(50)) + M.AdjustParalysis(-1) + M.AdjustStunned(-1) + M.AdjustWeakened(-1) + if(current_cycle >= 90) + M.jitteriness += 10 + ..() + return + +/datum/reagent/sugar/overdose_process(var/mob/living/M as mob) + if(volume > 200) + M << "You pass out from hyperglycemic shock!" + M.Paralyse(1) + if(prob(8)) + M.adjustToxLoss(rand(1,2)) + ..() + return diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm new file mode 100644 index 00000000000..696fa6354a5 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm @@ -0,0 +1,152 @@ +/datum/reagent/hydrocodone + name = "Hydrocodone" + id = "hydrocodone" + description = "An extremely effective painkiller; may have long term abuse consequences." + reagent_state = LIQUID + color = "#C805DC" + metabolization_rate = 0.3 // Lasts 1.5 minutes for 15 units + shock_reduction = 200 + +/datum/reagent/hydrocodone/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + ..() + return + +/datum/reagent/virus_food + name = "Virus Food" + id = "virusfood" + description = "A mixture of water, milk, and oxygen. Virus cells can use this mixture to reproduce." + reagent_state = LIQUID + nutriment_factor = 2 * REAGENTS_METABOLISM + color = "#899613" // rgb: 137, 150, 19 + +/datum/reagent/virus_food/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.nutrition += nutriment_factor*REM + ..() + return + +/datum/reagent/sterilizine + name = "Sterilizine" + id = "sterilizine" + description = "Sterilizes wounds in preparation for surgery." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + + //makes you squeaky clean +/datum/reagent/sterilizine/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + if (method == TOUCH) + M.germ_level -= min(volume*20, M.germ_level) + +/datum/reagent/sterilizine/reaction_obj(var/obj/O, var/volume) + O.germ_level -= min(volume*20, O.germ_level) + +/datum/reagent/sterilizine/reaction_turf(var/turf/T, var/volume) + T.germ_level -= min(volume*20, T.germ_level) + +/datum/reagent/synaptizine + name = "Synaptizine" + id = "synaptizine" + description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as paralysis." + reagent_state = LIQUID + color = "#FA46FA" + +/datum/reagent/synaptizine/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.AdjustParalysis(-1) + M.AdjustStunned(-1) + M.AdjustWeakened(-1) + if(prob(50)) + M.adjustBrainLoss(-1.0) + ..() + return + +/datum/reagent/audioline + name = "Audioline" + id = "audioline" + description = "Heals ear damage." + reagent_state = LIQUID + color = "#6600FF" // rgb: 100, 165, 255 + +/datum/reagent/audioline/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.ear_damage = 0 + M.ear_deaf = 0 + ..() + return + +/datum/reagent/mitocholide + name = "Mitocholide" + id = "mitocholide" + description = "A specialized drug that stimulates the mitochondria of cells to encourage healing of internal organs." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +/datum/reagent/mitocholide/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(ishuman(M)) + var/mob/living/carbon/human/H = M + + //Mitocholide is hard enough to get, it's probably fair to make this all internal organs + for(var/name in H.internal_organs_by_name) + var/obj/item/organ/I = H.internal_organs_by_name[name] + if(I.damage > 0) + I.damage -= 0.20 + ..() + return + +/datum/reagent/cryoxadone + name = "Cryoxadone" + id = "cryoxadone" + description = "A plasma mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 265K for it to metabolise correctly." + reagent_state = LIQUID + color = "#0000C8" // rgb: 200, 165, 220 + +/datum/reagent/cryoxadone/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(M.bodytemperature < 265) + M.adjustCloneLoss(-4) + M.adjustOxyLoss(-10) + M.heal_organ_damage(12,12) + M.adjustToxLoss(-3) + M.status_flags &= ~DISFIGURED + ..() + return + +/datum/reagent/rezadone + name = "Rezadone" + id = "rezadone" + description = "A powder derived from fish toxin, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects." + reagent_state = SOLID + color = "#669900" // rgb: 102, 153, 0 + +/datum/reagent/rezadone/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(!data) data = 1 + data++ + switch(data) + if(1 to 15) + M.adjustCloneLoss(-1) + M.heal_organ_damage(1,1) + if(15 to 35) + M.adjustCloneLoss(-2) + M.heal_organ_damage(2,1) + M.status_flags &= ~DISFIGURED + if(35 to INFINITY) + M.adjustToxLoss(1) + M.Dizzy(5) + M.Jitter(5) + + ..() + return + +/datum/reagent/spaceacillin + name = "Spaceacillin" + id = "spaceacillin" + description = "An all-purpose antibiotic agent extracted from space fungus." + reagent_state = LIQUID + color = "#0AB478" + +/datum/reagent/spaceacillin/on_mob_life(var/mob/living/M as mob) + ..() + return \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_misc.dm b/code/modules/reagents/oldchem/reagents/reagents_misc.dm new file mode 100644 index 00000000000..8c3352243eb --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_misc.dm @@ -0,0 +1,222 @@ +/*/datum/reagent/silicate + name = "Silicate" + id = "silicate" + description = "A compound that can be used to reinforce glass." + reagent_state = LIQUID + color = "#C7FFFF" // rgb: 199, 255, 255 + +/datum/reagent/silicate/reaction_obj(var/obj/O, var/volume) + src = null + if(istype(O,/obj/structure/window)) + if(O:silicate <= 200) + + O:silicate += volume + O:health += volume * 3 + + if(!O:silicateIcon) + var/icon/I = icon(O.icon,O.icon_state,O.dir) + + var/r = (volume / 100) + 1 + var/g = (volume / 70) + 1 + var/b = (volume / 50) + 1 + I.SetIntensity(r,g,b) + O.icon = I + O:silicateIcon = I + else + var/icon/I = O:silicateIcon + + var/r = (volume / 100) + 1 + var/g = (volume / 70) + 1 + var/b = (volume / 50) + 1 + I.SetIntensity(r,g,b) + O.icon = I + O:silicateIcon = I + + return*/ + + +/datum/reagent/oxygen + name = "Oxygen" + id = "oxygen" + description = "A colorless, odorless gas." + reagent_state = GAS + color = "#808080" // rgb: 128, 128, 128 + +/datum/reagent/oxygen/on_mob_life(var/mob/living/M as mob, var/alien) + if(M.stat == 2) return + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis")) + M.adjustToxLoss(REAGENTS_METABOLISM) + holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears. + return + ..() + + +/datum/reagent/nitrogen + name = "Nitrogen" + id = "nitrogen" + description = "A colorless, odorless, tasteless gas." + reagent_state = GAS + color = "#808080" // rgb: 128, 128, 128 + +/datum/reagent/nitrogen/on_mob_life(var/mob/living/M as mob, var/alien) + if(M.stat == 2) return + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis")) + M.adjustOxyLoss(-2*REM) + holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears. + return + ..() + + +/datum/reagent/hydrogen + name = "Hydrogen" + id = "hydrogen" + description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas." + reagent_state = GAS + color = "#808080" // rgb: 128, 128, 128 + + +/datum/reagent/potassium + name = "Potassium" + id = "potassium" + description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water." + reagent_state = SOLID + color = "#A0A0A0" // rgb: 160, 160, 160 + + +/datum/reagent/sulfur + name = "Sulfur" + id = "sulfur" + description = "A chemical element." + reagent_state = SOLID + color = "#BF8C00" // rgb: 191, 140, 0 + + +/datum/reagent/sodium + name = "Sodium" + id = "sodium" + description = "A chemical element." + reagent_state = SOLID + color = "#808080" // rgb: 128, 128, 128 + + +/datum/reagent/phosphorus + name = "Phosphorus" + id = "phosphorus" + description = "A chemical element." + reagent_state = SOLID + color = "#832828" // rgb: 131, 40, 40 + + +/datum/reagent/carbon + name = "Carbon" + id = "carbon" + description = "A chemical element." + reagent_state = SOLID + color = "#1C1300" // rgb: 30, 20, 0 + +/datum/reagent/carbon/reaction_turf(var/turf/T, var/volume) + src = null + // Only add one dirt per turf. Was causing people to crash. + if(!istype(T, /turf/space) && !(locate(/obj/effect/decal/cleanable/dirt) in T)) + new /obj/effect/decal/cleanable/dirt(T) + + +/datum/reagent/gold + name = "Gold" + id = "gold" + description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known." + reagent_state = SOLID + color = "#F7C430" // rgb: 247, 196, 48 + + +/datum/reagent/silver + name = "Silver" + id = "silver" + description = "A lustrous metallic element regarded as one of the precious metals." + reagent_state = SOLID + color = "#D0D0D0" // rgb: 208, 208, 208 + + +/datum/reagent/aluminum + name = "Aluminum" + id = "aluminum" + description = "A silvery white and ductile member of the boron group of chemical elements." + reagent_state = SOLID + color = "#A8A8A8" // rgb: 168, 168, 168 + + +/datum/reagent/silicon + name = "Silicon" + id = "silicon" + description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon." + reagent_state = SOLID + color = "#A8A8A8" // rgb: 168, 168, 168 + + +/datum/reagent/copper + name = "Copper" + id = "copper" + description = "A highly ductile metal." + color = "#6E3B08" // rgb: 110, 59, 8 + + +/datum/reagent/iron + name = "Iron" + id = "iron" + description = "Pure iron is a metal." + reagent_state = SOLID + color = "#C8A5DC" // rgb: 200, 165, 220 +/* +/datum/reagent/iron/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if((M.virus) && (prob(8) && (M.virus.name=="Magnitis"))) + if(M.virus.spread == "Airborne") + M.virus.spread = "Remissive" + M.virus.stage-- + if(M.virus.stage <= 0) + M.resistances += M.virus.type + M.virus = null + holder.remove_reagent(src.id, 0.2) + return +*/ + + + +//foam +/datum/reagent/fluorosurfactant + name = "Fluorosurfactant" + id = "fluorosurfactant" + description = "A perfluoronated sulfonic acid that forms a foam when mixed with water." + reagent_state = LIQUID + color = "#9E6B38" // rgb: 158, 107, 56 + +// metal foaming agent +// this is lithium hydride. Add other recipies (e.g. LiH + H2O -> LiOH + H2) eventually +/datum/reagent/ammonia + name = "Ammonia" + id = "ammonia" + description = "A caustic substance commonly used in fertilizer or household cleaners." + reagent_state = GAS + color = "#404030" // rgb: 64, 64, 48 + +/datum/reagent/diethylamine + name = "Diethylamine" + id = "diethylamine" + description = "A secondary amine, useful as a plant nutrient and as building block for other compounds." + reagent_state = LIQUID + color = "#322D00" + + +// Ported from Bay as part of the Botany Update +// Allows you to make planks from any plant that has this reagent in it. +// Also vines with this reagent are considered dense. +/datum/reagent/woodpulp + name = "Wood Pulp" + id = "woodpulp" + description = "A mass of wood fibers." + reagent_state = LIQUID + color = "#B97A57" \ No newline at end of file diff --git a/code/modules/reagents/oldchem/reagents/reagents_toxin.dm b/code/modules/reagents/oldchem/reagents/reagents_toxin.dm new file mode 100644 index 00000000000..89bc66cda68 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_toxin.dm @@ -0,0 +1,597 @@ +/datum/reagent/toxin + name = "Toxin" + id = "toxin" + description = "A Toxic chemical." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + +/datum/reagent/toxin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(2) + ..() + return + + +/datum/reagent/spider_venom + name = "Spider venom" + id = "spidertoxin" + description = "A toxic venom injected by spacefaring arachnids." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + +/datum/reagent/spider_venom/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(1.5) + ..() + return + + +/datum/reagent/plasticide + name = "Plasticide" + id = "plasticide" + description = "Liquid plastic, do not eat." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + +/datum/reagent/plasticide/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(1.5) + ..() + return + + +/datum/reagent/minttoxin + name = "Mint Toxin" + id = "minttoxin" + description = "Useful for dealing with undesirable customers." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + +/datum/reagent/minttoxin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if (FAT in M.mutations) + M.gib() + ..() + return + + +/datum/reagent/slimejelly + name = "Slime Jelly" + id = "slimejelly" + description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL." + reagent_state = LIQUID + color = "#801E28" // rgb: 128, 30, 40 + +/datum/reagent/slimejelly/on_mob_life(var/mob/living/M as mob) + if(prob(10)) + M << "\red Your insides are burning!" + M.adjustToxLoss(rand(20,60)*REM) + else if(prob(40)) + M.heal_organ_damage(5*REM,0) + ..() + return + +/datum/reagent/slimetoxin + name = "Mutation Toxin" + id = "mutationtoxin" + description = "A corruptive toxin produced by slimes." + reagent_state = LIQUID + color = "#13BC5E" // rgb: 19, 188, 94 + +/datum/reagent/slimetoxin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(ishuman(M)) + var/mob/living/carbon/human/human = M + if(human.species.name != "Shadow") + M << "\red Your flesh rapidly mutates!" + M << "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids." + M << "\red Your body reacts violently to light. \green However, it naturally heals in darkness." + M << "Aside from your new traits, you are mentally unchanged and retain your prior obligations." + human.set_species("Shadow") + ..() + return + +/datum/reagent/aslimetoxin + name = "Advanced Mutation Toxin" + id = "amutationtoxin" + description = "An advanced corruptive toxin produced by slimes." + reagent_state = LIQUID + color = "#13BC5E" // rgb: 19, 188, 94 + +/datum/reagent/aslimetoxin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(istype(M, /mob/living/carbon) && M.stat != DEAD) + M << "\red Your flesh rapidly mutates!" + if(M.notransform) return + M.notransform = 1 + M.canmove = 0 + M.icon = null + M.overlays.Cut() + M.invisibility = 101 + for(var/obj/item/W in M) + if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something + qdel(W) + continue + W.layer = initial(W.layer) + W.loc = M.loc + W.dropped(M) + var/mob/living/carbon/slime/new_mob = new /mob/living/carbon/slime(M.loc) + new_mob.a_intent = "harm" + new_mob.universal_speak = 1 + if(M.mind) + M.mind.transfer_to(new_mob) + else + new_mob.key = M.key + qdel(M) + ..() + return + + +/datum/reagent/mercury + name = "Mercury" + id = "mercury" + description = "A chemical element." + reagent_state = LIQUID + color = "#484848" // rgb: 72, 72, 72 + metabolization_rate = 0.2 + penetrates_skin = 1 + +/datum/reagent/mercury/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(prob(70)) + M.adjustBrainLoss(1) + ..() + return + + +/datum/reagent/chlorine + name = "Chlorine" + id = "chlorine" + description = "A chemical element." + reagent_state = GAS + color = "#808080" // rgb: 128, 128, 128 + penetrates_skin = 1 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/chlorine/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustFireLoss(1) + ..() + return + +/datum/reagent/fluorine + name = "Fluorine" + id = "fluorine" + description = "A highly-reactive chemical element." + reagent_state = GAS + color = "#6A6054" + penetrates_skin = 1 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/fluorine/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustFireLoss(1) + M.adjustToxLoss(1*REM) + ..() + return + + +/datum/reagent/radium + name = "Radium" + id = "radium" + description = "Radium is an alkaline earth metal. It is extremely radioactive." + reagent_state = SOLID + color = "#C7C7C7" // rgb: 199,199,199 + metabolization_rate = 0.4 + penetrates_skin = 1 + +/datum/reagent/radium/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.apply_effect(4*REM,IRRADIATE,0) + // radium may increase your chances to cure a disease + if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs + var/mob/living/carbon/C = M + if(C.virus2.len) + for (var/ID in C.virus2) + var/datum/disease2/disease/V = C.virus2[ID] + if(prob(5)) + if(prob(50)) + M.apply_effect(50,IRRADIATE,0) // curing it that way may kill you instead + M.adjustToxLoss(100) + C.antibodies |= V.antigen + ..() + return + +/datum/reagent/radium/reaction_turf(var/turf/T, var/volume) + src = null + if(volume >= 3) + if(!istype(T, /turf/space)) + new /obj/effect/decal/cleanable/greenglow(T) + return + + +/datum/reagent/mutagen + name = "Unstable mutagen" + id = "mutagen" + description = "Might cause unpredictable mutations. Keep away from children." + reagent_state = LIQUID + color = "#04DF27" + metabolization_rate = 0.3 + +/datum/reagent/mutagen/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + if(!..()) return + if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this. + src = null + if((method==TOUCH && prob(33)) || method==INGEST) + if(prob(98)) + randmutb(M) + else + randmutg(M) + domutcheck(M, null) + M.UpdateAppearance() + return + +/datum/reagent/mutagen/on_mob_life(var/mob/living/M as mob) + if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this. + if(!M) M = holder.my_atom + M.apply_effect(2*REM,IRRADIATE,0) + if(prob(4)) + randmutb(M) + ..() + return + + +/datum/reagent/uranium + name ="Uranium" + id = "uranium" + description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive." + reagent_state = SOLID + color = "#B8B8C0" // rgb: 184, 184, 192 + +/datum/reagent/uranium/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.apply_effect(2,IRRADIATE,0) + ..() + return + +/datum/reagent/uranium/reaction_turf(var/turf/T, var/volume) + src = null + if(volume >= 3) + if(!istype(T, /turf/space)) + new /obj/effect/decal/cleanable/greenglow(T) + + +/datum/reagent/lexorin + name = "Lexorin" + id = "lexorin" + description = "Lexorin temporarily stops respiration. Causes tissue damage." + reagent_state = LIQUID + color = "#52685D" + metabolization_rate = 0.2 + +/datum/reagent/lexorin/on_mob_life(var/mob/living/M as mob) + if(M.stat == 2.0) + return + if(!M) M = holder.my_atom + M.adjustToxLoss(1) + ..() + return + + +/datum/reagent/sacid + name = "Sulphuric acid" + id = "sacid" + description = "A strong mineral acid with the molecular formula H2SO4." + reagent_state = LIQUID + color = "#00D72B" + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/sacid/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustFireLoss(1) + ..() + return + +/datum/reagent/sacid/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + + if(volume > 25) + + if(H.wear_mask) + H << "\red Your mask protects you from the acid!" + return + + if(H.head) + H << "\red Your helmet protects you from the acid!" + return + + if(!M.unacidable) + if(prob(75)) + var/obj/item/organ/external/affecting = H.get_organ("head") + if(affecting) + affecting.take_damage(20, 0) + H.UpdateDamageIcon() + H.emote("scream") + else + M.take_organ_damage(15,0) + else + M.take_organ_damage(15,0) + + if(method == INGEST) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + + if(volume < 10) + M << "The greenish acidic substance stings you, but isn't concentrated enough to harm you!" + + if(volume >=10 && volume <=25) + if(!H.unacidable) + M.take_organ_damage(min(max(volume-10,2)*2,20),0) + M.emote("scream") + + + if(volume > 25) + if(!M.unacidable) + if(prob(75)) + var/obj/item/organ/external/affecting = H.get_organ("head") + if(affecting) + affecting.take_damage(20, 0) + H.UpdateDamageIcon() + H.emote("scream") + else + M.take_organ_damage(15,0) + +/datum/reagent/sacid/reaction_obj(var/obj/O, var/volume) + if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(40)) + if(!O.unacidable) + var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc) + I.desc = "Looks like this was \an [O] some time ago." + for(var/mob/M in viewers(5, O)) + M << "\red \the [O] melts." + qdel(O) + + +/datum/reagent/hellwater + name = "Hell Water" + id = "hell_water" + description = "YOUR FLESH! IT BURNS!" + process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL. + +/datum/reagent/hellwater/on_mob_life(var/mob/living/M as mob) + M.fire_stacks = min(5,M.fire_stacks + 3) + M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire + M.adjustToxLoss(1) + M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard? + M.adjustBrainLoss(5) + holder.remove_reagent(src.id, 1) + + +/datum/reagent/carpotoxin + name = "Carpotoxin" + id = "carpotoxin" + description = "A deadly neurotoxin produced by the dreaded spess carp." + reagent_state = LIQUID + color = "#003333" // rgb: 0, 51, 51 + +/datum/reagent/carpotoxin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(2*REM) + ..() + return + + +/datum/reagent/staminatoxin + name = "Tirizene" + id = "tirizene" + description = "A toxin that affects the stamina of a person when injected into the bloodstream." + reagent_state = LIQUID + color = "#6E2828" + data = 13 + +/datum/reagent/staminatoxin/on_mob_life(var/mob/living/M) + M.adjustStaminaLoss(REM * data) + data = max(data - 1, 3) + ..() + + +/datum/reagent/spores + name = "Spore Toxin" + id = "spores" + description = "A toxic spore cloud which blocks vision when ingested." + color = "#9ACD32" + +/datum/reagent/spores/on_mob_life(var/mob/living/M as mob) + M.adjustToxLoss(0.5) + M.damageoverlaytemp = 60 + M.eye_blurry = max(M.eye_blurry, 3) + ..() + return + + +/datum/reagent/beer2 //disguised as normal beer for use by emagged brobots + name = "Beer" + id = "beer2" + description = "An alcoholic beverage made from malted grains, hops, yeast, and water." + color = "#664300" // rgb: 102, 67, 0 + +/datum/reagent/beer2/on_mob_life(var/mob/living/M as mob) + if(!data) + data = 1 + switch(data) + if(1 to 50) + M.sleeping += 1 + if(51 to INFINITY) + M.sleeping += 1 + M.adjustToxLoss((data - 50)*REM) + data++ + holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM) + ..() + return + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/* +/datum/reagent/nanomachines + name = "Nanomachines" + id = "nanomachines" + description = "Microscopic construction robots." + reagent_state = LIQUID + color = "#535E66" // rgb: 83, 94, 102 + +/datum/reagent/nanomachines/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + src = null + if( (prob(10) && method==TOUCH) || method==INGEST) + M.contract_disease(new /datum/disease/robotic_transformation(0),1) + +/datum/reagent/xenomicrobes + name = "Xenomicrobes" + id = "xenomicrobes" + description = "Microbes with an entirely alien cellular structure." + reagent_state = LIQUID + color = "#535E66" // rgb: 83, 94, 102 + +/datum/reagent/xenomicrobes/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + src = null + if( (prob(10) && method==TOUCH) || method==INGEST) + M.contract_disease(new /datum/disease/xeno_transformation(0),1) +*/ + +/datum/reagent/spore + name = "Blob Spores" + id = "spore" + description = "Spores of some blob creature thingy." + reagent_state = LIQUID + color = "#CE760A" // rgb: 206, 118, 10 + var/client/blob_client = null + var/blob_point_rate = 3 + +/datum/reagent/spore/on_mob_life(var/mob/living/M) + if(!M) M = holder.my_atom + if (holder.has_reagent("atrazine",45)) + holder.del_reagent("spore") + if (prob(1)) + M << "\red Your mouth tastes funny." + if (prob(1) && prob(25)) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(directory[ckey(C.key)]) + blob_client = directory[ckey(C.key)] + C.gib() + if(blob_client) + var/obj/effect/blob/core/core = new(get_turf(C), 200, blob_client, blob_point_rate) + if(core.overmind && core.overmind.mind) + core.overmind.mind.name = C.name + + return + +/datum/reagent/condensedcapsaicin + name = "Condensed Capsaicin" + id = "condensedcapsaicin" + description = "This shit goes in pepperspray." + reagent_state = LIQUID + color = "#B31008" // rgb: 179, 16, 8 + +/datum/reagent/condensedcapsaicin/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/victim = M + var/mouth_covered = 0 + var/eyes_covered = 0 + var/obj/item/safe_thing = null + if( victim.wear_mask ) + if ( victim.wear_mask.flags & MASKCOVERSEYES ) + eyes_covered = 1 + safe_thing = victim.wear_mask + if ( victim.wear_mask.flags & MASKCOVERSMOUTH ) + mouth_covered = 1 + safe_thing = victim.wear_mask + if( victim.head ) + if ( victim.head.flags & MASKCOVERSEYES ) + eyes_covered = 1 + safe_thing = victim.head + if ( victim.head.flags & MASKCOVERSMOUTH ) + mouth_covered = 1 + safe_thing = victim.head + if(victim.glasses) + eyes_covered = 1 + if ( !safe_thing ) + safe_thing = victim.glasses + if ( eyes_covered && mouth_covered ) + victim << "\red Your [safe_thing] protects you from the pepperspray!" + return + else if ( mouth_covered ) // Reduced effects if partially protected + victim << "\red Your [safe_thing] protect you from most of the pepperspray!" + if(prob(5)) + victim.emote("scream") + victim.eye_blurry = max(M.eye_blurry, 3) + victim.eye_blind = max(M.eye_blind, 1) + victim.confused = max(M.confused, 3) + victim.damageoverlaytemp = 60 + victim.Weaken(3) + victim.drop_item() + return + else if ( eyes_covered ) // Eye cover is better than mouth cover + victim << "\red Your [safe_thing] protects your eyes from the pepperspray!" + victim.eye_blurry = max(M.eye_blurry, 3) + victim.damageoverlaytemp = 30 + return + else // Oh dear :D + if(prob(5)) + victim.emote("scream") + victim << "\red You're sprayed directly in the eyes with pepperspray!" + victim.eye_blurry = max(M.eye_blurry, 5) + victim.eye_blind = max(M.eye_blind, 2) + victim.confused = max(M.confused, 6) + victim.damageoverlaytemp = 75 + victim.Weaken(5) + victim.drop_item() + +/datum/reagent/condensedcapsaicin/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(prob(5)) + M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]") + ..() + return + +/datum/reagent/frostoil + name = "Frost Oil" + id = "frostoil" + description = "A special oil that noticably chills the body. Extraced from Icepeppers." + reagent_state = LIQUID + color = "#B31008" // rgb: 139, 166, 233 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/frostoil/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(!data) data = 1 + switch(data) + if(1 to 15) + M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT + if(holder.has_reagent("capsaicin")) + holder.remove_reagent("capsaicin", 5) + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature -= rand(5,20) + if(15 to 25) + M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature -= rand(10,20) + if(25 to INFINITY) + M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT + if(prob(1)) + M.emote("shiver") + if(istype(M, /mob/living/carbon/slime)) + M.bodytemperature -= rand(15,20) + data++ + holder.remove_reagent(src.id, FOOD_METABOLISM) + ..() + return + +/datum/reagent/frostoil/reaction_turf(var/turf/simulated/T, var/volume) + for(var/mob/living/carbon/slime/M in T) + M.adjustToxLoss(rand(15,30)) diff --git a/code/modules/reagents/oldchem/reagents/reagents_water.dm b/code/modules/reagents/oldchem/reagents/reagents_water.dm new file mode 100644 index 00000000000..a94ab397cd8 --- /dev/null +++ b/code/modules/reagents/oldchem/reagents/reagents_water.dm @@ -0,0 +1,348 @@ +/* +// Frankly, this is just for chemicals that are sortof 'watery', which really didn't seem to fit under any other file +// Current chems: Water, Space Lube, Space Cleaner, Blood, Fish Water, Holy water +// +// +*/ + + + +/datum/reagent/water + name = "Water" + id = "water" + description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen." + reagent_state = LIQUID + color = "#0064C8" // rgb: 0, 100, 200 + var/cooling_temperature = 2 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/water/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + if(!istype(M, /mob/living)) + return + +// Put out fire + if(method == TOUCH) + M.adjust_fire_stacks(-(volume / 10)) + if(M.fire_stacks <= 0) + M.ExtinguishMob() + return + +/datum/reagent/water/reaction_turf(var/turf/simulated/T, var/volume) + if (!istype(T)) return + src = null + if(volume >= 3) + if(T.wet >= 1) return + T.wet = 1 + if(T.wet_overlay) + T.overlays -= T.wet_overlay + T.wet_overlay = null + T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor") + T.overlays += T.wet_overlay + + spawn(800) + if (!istype(T)) return + if(T.wet >= 2) return + T.wet = 0 + if(T.wet_overlay) + T.overlays -= T.wet_overlay + T.wet_overlay = null + + for(var/mob/living/carbon/slime/M in T) + M.apply_water() + + var/hotspot = (locate(/obj/effect/hotspot) in T) + if(hotspot && !istype(T, /turf/space)) + var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) + lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) + lowertemp.react() + T.assume_air(lowertemp) + qdel(hotspot) + return + +/datum/reagent/water/reaction_obj(var/obj/O, var/volume) + src = null + var/turf/T = get_turf(O) + var/hotspot = (locate(/obj/effect/hotspot) in T) + if(hotspot && !istype(T, /turf/space)) + var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) + lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) + lowertemp.react() + T.assume_air(lowertemp) + qdel(hotspot) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube)) + var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O + if(!cube.wrapped) + cube.Expand() + // Dehydrated carp + if(istype(O,/obj/item/toy/carpplushie/dehy_carp)) + var/obj/item/toy/carpplushie/dehy_carp/dehy = O + dehy.Swell() // Makes a carp + return + + +/datum/reagent/lube + name = "Space Lube" + id = "lube" + description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity." + reagent_state = LIQUID + color = "#1BB1AB" + +/datum/reagent/lube/reaction_turf(var/turf/simulated/T, var/volume) + if (!istype(T)) return + src = null + if(volume >= 1) + if(T.wet >= 2) return + T.wet = 2 + spawn(800) + if (!istype(T)) return + T.wet = 0 + if(T.wet_overlay) + T.overlays -= T.wet_overlay + T.wet_overlay = null + return + + +/datum/reagent/space_cleaner + name = "Space cleaner" + id = "cleaner" + description = "A compound used to clean things. Now with 50% more sodium hypochlorite!" + reagent_state = LIQUID + color = "#61C2C2" + +/datum/reagent/space_cleaner/reaction_obj(var/obj/O, var/volume) + if(istype(O,/obj/effect/decal/cleanable)) + qdel(O) + else + if(O) + O.clean_blood() + +/datum/reagent/space_cleaner/reaction_turf(var/turf/T, var/volume) + if(volume >= 1) + T.overlays.Cut() + T.clean_blood() + for(var/obj/effect/decal/cleanable/C in src) + qdel(C) + + for(var/mob/living/carbon/slime/M in T) + M.adjustToxLoss(rand(5,10)) + +/datum/reagent/space_cleaner/reaction_turf(var/turf/simulated/S, var/volume) + if(volume >= 1) + S.dirt = 0 + +/datum/reagent/space_cleaner/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.lip_style) + H.lip_style = null + H.update_body() + if(C.r_hand) + C.r_hand.clean_blood() + if(C.l_hand) + C.l_hand.clean_blood() + if(C.wear_mask) + if(C.wear_mask.clean_blood()) + C.update_inv_wear_mask(0) + if(ishuman(M)) + var/mob/living/carbon/human/H = C + if(H.head) + if(H.head.clean_blood()) + H.update_inv_head(0,0) + if(H.wear_suit) + if(H.wear_suit.clean_blood()) + H.update_inv_wear_suit(0,0) + else if(H.w_uniform) + if(H.w_uniform.clean_blood()) + H.update_inv_w_uniform(0,0) + if(H.shoes) + if(H.shoes.clean_blood()) + H.update_inv_shoes(0,0) + M.clean_blood() + ..() + return + + +/datum/reagent/blood + data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"blood_colour"= "#A10808","resistances"=null,"trace_chem"=null, "antibodies" = null) + name = "Blood" + id = "blood" + reagent_state = LIQUID + color = "#C80000" // rgb: 200, 0, 0 + +/datum/reagent/blood/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + var/datum/reagent/blood/self = src + src = null + if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting... + var/list/vlist = self.data["virus2"] + if (vlist.len) + for (var/ID in vlist) + var/datum/disease2/disease/V = vlist[ID] + + if(method == TOUCH) + infect_virus2(M,V.getcopy()) + else + infect_virus2(M,V.getcopy(),1) //injected, force infection! + if(self.data && self.data["antibodies"] && istype(M, /mob/living/carbon))//... and curing + var/mob/living/carbon/C = M + C.antibodies |= self.data["antibodies"] + +/datum/reagent/blood/on_merge(var/data) + if(data["blood_colour"]) + color = data["blood_colour"] + return ..() + +/datum/reagent/blood/on_update(var/atom/A) + if(data["blood_colour"]) + color = data["blood_colour"] + return ..() + + + +/datum/reagent/blood/reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place + if(!istype(T)) return + var/datum/reagent/blood/self = src + src = null + if(!(volume >= 3)) return + //var/datum/disease/D = self.data["virus"] + if(!self.data["donor"] || istype(self.data["donor"], /mob/living/carbon/human)) + var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T //find some blood here + if(!blood_prop) //first blood! + blood_prop = new(T) + blood_prop.blood_DNA[self.data["blood_DNA"]] = self.data["blood_type"] + + if(self.data["virus2"]) + blood_prop.virus2 = virus_copylist(self.data["virus2"]) + + else if(istype(self.data["donor"], /mob/living/carbon/alien)) + var/obj/effect/decal/cleanable/blood/xeno/blood_prop = locate() in T + if(!blood_prop) + blood_prop = new(T) + blood_prop.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*" + return + + +/datum/reagent/fishwater + name = "Fish Water" + id = "fishwater" + description = "Smelly water from a fish tank. Gross!" + reagent_state = LIQUID + color = "#757547" + +/datum/reagent/fishwater/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + if(!istype(M, /mob/living)) + return + if(method == INGEST) + M << "Oh god, why did you drink that?" + +/datum/reagent/fishwater/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(prob(30)) // Nasty, you drank this stuff? 30% chance of the fakevomit (non-stunning version) + if(prob(50)) // 50/50 chance of green vomit vs normal vomit + M.fakevomit(1) + else + M.fakevomit(0) + ..() + return + + +/datum/reagent/holywater + name = "Water" + id = "holywater" + description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen." + reagent_state = LIQUID + color = "#0064C8" // rgb: 0, 100, 200 + process_flags = ORGANIC | SYNTHETIC + +/datum/reagent/holywater/on_mob_life(var/mob/living/M as mob) + if(!data) data = 1 + data++ + M.jitteriness = max(M.jitteriness-5,0) + if(data >= 30) // 12 units, 60 seconds @ metabolism 0.4 units & tick rate 2.0 sec + if (!M.stuttering) M.stuttering = 1 + M.stuttering += 4 + M.Dizzy(5) + if(iscultist(M) && prob(5)) + M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","Egkau'haom'nai en Chaous","Ho Diak'nos tou Ap'iron","R'ge Na'sie","Diabo us Vo'iscum","Si gn'um Co'nu")) + if(data >= 75 && prob(33)) // 30 units, 150 seconds + if (!M.confused) M.confused = 1 + M.confused += 3 + if(iscultist(M)) + ticker.mode.remove_cultist(M.mind) + holder.remove_reagent(src.id, src.volume) // maybe this is a little too perfect and a max() cap on the statuses would be better?? + M.jitteriness = 0 + M.stuttering = 0 + M.confused = 0 + if(ishuman(M)) . + if(((M.mind in ticker.mode.vampires) || M.mind.vampire) && (!(VAMP_FULL in M.mind.vampire.powers)) && prob(80)) + switch(data) + if(1 to 4) + M << "Something sizzles in your veins!" + M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) + if(5 to 12) + M << "You feel an intense burning inside of you!" + M.adjustFireLoss(1) + M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) + if(13 to INFINITY) + M << "You suddenly ignite in a holy fire!" + for(var/mob/O in viewers(M, null)) + O.show_message(text("[] suddenly bursts into flames!", M), 1) + M.fire_stacks = min(5,M.fire_stacks + 3) + M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire + M.adjustFireLoss(3) //Hence the other damages... ain't I a bastard? + M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) + ..() + return + + +/datum/reagent/holywater/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + // Vampires have their powers weakened by holy water applied to the skin. + if(ishuman(M)) + if((M.mind in ticker.mode.vampires) && !(VAMP_FULL in M.mind.vampire.powers)) + var/mob/living/carbon/human/H=M + if(method == TOUCH) + if(H.wear_mask) + H << "\red Your mask protects you from the holy water!" + return + else if(H.head) + H << "\red Your helmet protects you from the holy water!" + return + else + M << "Something holy interferes with your powers!" + M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) + return + + +/datum/reagent/holywater/reaction_turf(var/turf/simulated/T, var/volume) + ..() + if(!istype(T)) return + if(volume>=10) + for(var/obj/effect/rune/R in T) + qdel(R) + T.Bless() + +/* +/datum/reagent/vaccine + //data must contain virus type + name = "Vaccine" + id = "vaccine" + reagent_state = LIQUID + color = "#C81040" // rgb: 200, 16, 64 + +/datum/reagent/vaccine/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) + var/datum/reagent/vaccine/self = src + src = null + if(self.data&&method == INGEST) + for(var/datum/disease/D in M.viruses) + if(istype(D, /datum/disease/advance)) + var/datum/disease/advance/A = D + if(A.GetDiseaseID() == self.data) + D.cure() + else + if(D.type == self.data) + D.cure() + + M.resistances += self.data + return +*/ \ No newline at end of file diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index cd306a78e49..6c3b0db41e0 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -12,60 +12,60 @@ var/amount_per_transfer_from_this = 10 var/possible_transfer_amounts = list(10,25,50,100) - attackby(obj/item/weapon/W as obj, mob/user as mob, params) +/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob, params) + return + +/obj/structure/reagent_dispensers/New() + var/datum/reagents/R = new/datum/reagents(1000) + reagents = R + R.my_atom = src + if (!possible_transfer_amounts) + src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT + ..() + +/obj/structure/reagent_dispensers/examine() + set src in view() + ..() + if (!(usr in view(2)) && usr!=src.loc) return + usr << "\blue It contains:" + if(reagents && reagents.reagent_list.len) + for(var/datum/reagent/R in reagents.reagent_list) + usr << "\blue [R.volume] units of [R.name]" + else + usr << "\blue Nothing." + +/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this + set name = "Set transfer amount" + set category = "Object" + set src in view(1) + if(usr.stat || !usr.canmove || usr.restrained()) return + var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts + if (N) + amount_per_transfer_from_this = N - New() - var/datum/reagents/R = new/datum/reagents(1000) - reagents = R - R.my_atom = src - if (!possible_transfer_amounts) - src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT - ..() - - examine() - set src in view() - ..() - if (!(usr in view(2)) && usr!=src.loc) return - usr << "\blue It contains:" - if(reagents && reagents.reagent_list.len) - for(var/datum/reagent/R in reagents.reagent_list) - usr << "\blue [R.volume] units of [R.name]" - else - usr << "\blue Nothing." - - verb/set_APTFT() //set amount_per_transfer_from_this - set name = "Set transfer amount" - set category = "Object" - set src in view(1) - if(usr.stat || !usr.canmove || usr.restrained()) +/obj/structure/reagent_dispensers/ex_act(severity) + switch(severity) + if(1.0) + qdel(src) return - var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts - if (N) - amount_per_transfer_from_this = N - - ex_act(severity) - switch(severity) - if(1.0) + if(2.0) + if (prob(50)) + new /obj/effect/effect/water(src.loc) qdel(src) return - if(2.0) - if (prob(50)) - new /obj/effect/effect/water(src.loc) - qdel(src) - return - if(3.0) - if (prob(5)) - new /obj/effect/effect/water(src.loc) - qdel(src) - return - else - return + if(3.0) + if (prob(5)) + new /obj/effect/effect/water(src.loc) + qdel(src) + return + else + return - blob_act() - if(prob(50)) - new /obj/effect/effect/water(src.loc) - qdel(src) +/obj/structure/reagent_dispensers/blob_act() + if(prob(50)) + new /obj/effect/effect/water(src.loc) + qdel(src) @@ -80,9 +80,11 @@ icon = 'icons/obj/objects.dmi' icon_state = "watertank" amount_per_transfer_from_this = 10 - New() - ..() - reagents.add_reagent("water",1000) + +/obj/structure/reagent_dispensers/watertank/New() + ..() + reagents.add_reagent("water",1000) + /obj/structure/reagent_dispensers/fueltank name = "fueltank" @@ -91,22 +93,23 @@ icon_state = "weldtank" amount_per_transfer_from_this = 10 var/obj/item/device/assembly_holder/rig = null - New() - ..() - reagents.add_reagent("fuel",1000) - bullet_act(var/obj/item/projectile/Proj) - if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet)) - if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)) - message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.") - log_game("[key_name(Proj.firer)] triggered a fueltank explosion.") - explode() +/obj/structure/reagent_dispensers/fueltank/New() + ..() + reagents.add_reagent("fuel",1000) - blob_act() - explosion(src.loc,0,1,5,7,10, flame_range = 5) +/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) + if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet)) + if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)) + message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.") + log_game("[key_name(Proj.firer)] triggered a fueltank explosion.") + explode() - ex_act() - explode() +/obj/structure/reagent_dispensers/fueltank/blob_act() + explosion(src.loc,0,1,5,7,10, flame_range = 5) + +/obj/structure/reagent_dispensers/fueltank/ex_act() + explode() /obj/structure/reagent_dispensers/fueltank/examine() set src in view() @@ -180,6 +183,7 @@ if(rig) rig.process_movement() + /obj/structure/reagent_dispensers/peppertank name = "Pepper Spray Refiller" desc = "Refill pepper spray canisters." @@ -188,9 +192,10 @@ anchored = 1 density = 0 amount_per_transfer_from_this = 45 - New() - ..() - reagents.add_reagent("condensedcapsaicin",1000) + +/obj/structure/reagent_dispensers/peppertank/New() + ..() + reagents.add_reagent("condensedcapsaicin",1000) /obj/structure/reagent_dispensers/water_cooler @@ -201,9 +206,10 @@ icon_state = "water_cooler" possible_transfer_amounts = null anchored = 1 - New() - ..() - reagents.add_reagent("water",500) + +/obj/structure/reagent_dispensers/water_cooler/New() + ..() + reagents.add_reagent("water",500) /obj/structure/reagent_dispensers/beerkeg @@ -212,9 +218,10 @@ icon = 'icons/obj/objects.dmi' icon_state = "beertankTEMP" amount_per_transfer_from_this = 10 - New() - ..() - reagents.add_reagent("beer",1000) + +/obj/structure/reagent_dispensers/beerkeg/New() + ..() + reagents.add_reagent("beer",1000) /obj/structure/reagent_dispensers/beerkeg/blob_act() explosion(src.loc,0,3,5,7,10) @@ -229,9 +236,9 @@ anchored = 1 density = 0 - New() - ..() - reagents.add_reagent("virusfood", 1000) +/obj/structure/reagent_dispensers/virusfood/New() + ..() + reagents.add_reagent("virusfood", 1000) /obj/structure/reagent_dispensers/spacecleanertank name = "space cleaner refiller" @@ -241,6 +248,7 @@ anchored = 1 density = 0 amount_per_transfer_from_this = 250 - New() - ..() - reagents.add_reagent("cleaner",5000) + +/obj/structure/reagent_dispensers/spacecleanertank/New() + ..() + reagents.add_reagent("cleaner",5000) diff --git a/paradise.dme b/paradise.dme index b8184ad6713..6b0e84f845d 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1624,8 +1624,6 @@ #include "code\modules\reagents\Chemistry-Holder.dm" #include "code\modules\reagents\Chemistry-Machinery.dm" #include "code\modules\reagents\Chemistry-Readme.dm" -#include "code\modules\reagents\Chemistry-Reagents.dm" -#include "code\modules\reagents\Chemistry-Recipes.dm" #include "code\modules\reagents\dartgun.dm" #include "code\modules\reagents\grenade_launcher.dm" #include "code\modules\reagents\reagent_containers.dm" @@ -1642,6 +1640,27 @@ #include "code\modules\reagents\newchem\patch.dm" #include "code\modules\reagents\newchem\pyro.dm" #include "code\modules\reagents\newchem\toxins.dm" +#include "code\modules\reagents\oldchem\chemical_reaction\_chemical_reaction_base.dm" +#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_drink.dm" +#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_food.dm" +#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_harm.dm" +#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_med.dm" +#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_misc.dm" +#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_slime.dm" +#include "code\modules\reagents\oldchem\reagents\__oldchem_defines.dm" +#include "code\modules\reagents\oldchem\reagents\_reagent_base.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_admin.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_drugs.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_flammable.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_food.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_med.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_misc.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_toxin.dm" +#include "code\modules\reagents\oldchem\reagents\reagents_water.dm" +#include "code\modules\reagents\oldchem\reagents\drink\reagents_alcohol.dm" +#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink.dm" +#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink_base.dm" +#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink_cold.dm" #include "code\modules\reagents\reagent_containers\blood_pack.dm" #include "code\modules\reagents\reagent_containers\borghydro.dm" #include "code\modules\reagents\reagent_containers\dropper.dm"