From a988d2c6c5f6ef47c552a1e3877f1c90e44cbe0f Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Fri, 28 Nov 2014 21:55:40 -0800 Subject: [PATCH 01/19] Goon Chemistry Commit 1 --- code/datums/uplink_item.dm | 7 + code/modules/mob/living/living.dm | 4 + .../reagents/Chemistry-Goon-Medicine.dm | 346 ++++++++++++++++++ code/modules/reagents/Chemistry-Goon-Other.dm | 97 +++++ .../modules/reagents/Chemistry-Goon-Toxins.dm | 145 ++++++++ code/modules/reagents/Chemistry-Holder.dm | 9 +- code/modules/reagents/Chemistry-Machinery.dm | 51 ++- code/modules/reagents/Chemistry-Reagents.dm | 24 +- code/modules/reagents/Chemistry-Recipes.dm | 3 + .../reagent_containers/glass/bottle.dm | 24 +- tgstation.dme | 3 + 11 files changed, 692 insertions(+), 21 deletions(-) create mode 100644 code/modules/reagents/Chemistry-Goon-Medicine.dm create mode 100644 code/modules/reagents/Chemistry-Goon-Other.dm create mode 100644 code/modules/reagents/Chemistry-Goon-Toxins.dm diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 89427fe1adf..9c1c505ccf6 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -285,6 +285,13 @@ var/list/uplink_items = list() cost = 1 surplus = 50 +/datum/uplink_item/stealthy_weapons/traitor_chem_bottle + name = "Poison Bottle" + desc = "A small bottle. Contains a random nasty chemical." + item = /obj/item/weapon/reagent_containers/glass/bottle/traitor + cost = 2 + surplus = 50 + /datum/uplink_item/stealthy_weapons/detomatix name = "Detomatix PDA Cartridge" desc = "When inserted into a personal digital assistant, this cartridge gives you five opportunities to detonate PDAs of crewmembers who have their message feature enabled. \ diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 83c4e95bbb9..21e9d3628cd 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -185,6 +185,10 @@ /mob/living/proc/setMaxHealth(var/newMaxHealth) maxHealth = newMaxHealth +/mob/living/proc/getTotalLoss(var/amount) + amount = getBruteLoss() + getOxyLoss() + getToxLoss() + getFireLoss() + getCloneLoss() + getBrainLoss() + return amount + // MOB PROCS //END diff --git a/code/modules/reagents/Chemistry-Goon-Medicine.dm b/code/modules/reagents/Chemistry-Goon-Medicine.dm new file mode 100644 index 00000000000..48bd9ac033e --- /dev/null +++ b/code/modules/reagents/Chemistry-Goon-Medicine.dm @@ -0,0 +1,346 @@ +#define SOLID 1 +#define LIQUID 2 +#define GAS 3 + +#define REM REAGENTS_EFFECT_MULTIPLIER + +datum/reagent/silver_sulfadiazine + name = "Silver Sulfadiazine" + id = "silver_sulfadiazine" + description = "100% chance per cycle of healing 2 points of BURN damage." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + metabolize_rate = 2 + +datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume) + if(method == TOUCH) + M.adjustFireLoss((volume-(volume*2))*REM) + M << "You feel your burns healing!" + if(method == INGEST) + M.adjustToxLoss(0.5*volume) + M << "You probably shouldn't of eaten that. Maybe you should of splashed it on, or used a patch?" + ..() + return + +datum/reagent/styptic_powder + name = "Styptic Powder" + id = "styptic_powder" + description = "100% chance per cycle of healing 2 points of BRUTE damage." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + metabolize_rate = 2 + +datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume) + if(method == TOUCH) + M.heal_organ_damage(volume*REM,0) + M << "You feel your wounds knitting back together!" + if(method == INGEST) + M.adjustToxLoss(0.5*volume) + M << "You probably shouldn't of eaten that. Maybe you should of splashed it on, or used a patch?" + ..() + return + +datum/reagent/salglu_solution + name = "Saline-Glucose Solution" + id = "salglu_solution" + description = "100% chance per cycle of healing 1 point each of OXY and TOX damage." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +datum/reagent/salglu_solution/on_mob_life(var/mob/living/M as mob) + if(M.stat == 2.0) + return + if(!M) M = holder.my_atom + if(M.getOxyLoss()) M.adjustOxyLoss(-1*REM) + if(M.getToxLoss()) M.adjustToxLoss(-1*REM) + ..() + return + +datum/reagent/synthflesh + name = "Synthflesh" + id = "synthflesh" + description = "100% chance per cycle of healing 1 point each of BRUTE and BURN damage." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +datum/reagent/synthflesh/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + if(!M) M = holder.my_atom + if(method == TOUCH) + M.heal_organ_damage(volume*REM,0) + M.adjustFireLoss((volume-(volume*2)*REM)) + M << "You feel your burns healing and your flesh knitting together!" + ..() + return + +datum/reagent/charcoal + name = "Charcoal" + id = "charcoal" + description = "Heals 2 TOX damage per cycle." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + overrides_metab = 1 + new_metabolize_rate = 0.5 +datum/reagent/charcoal/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.reagents.remove_all_type(/datum/reagent/toxin, 1*REM, 0, 1) + M.drowsyness = max(M.drowsyness-2*REM, 0) + M.hallucination = max(0, M.hallucination - 5*REM) + M.adjustToxLoss(-2*REM) + ..() + return + +datum/reagent/calomel + name = "Calomel" + id = "calomel" + description = "Increases all depletion rates by 5. +5 TOX damage while health > 20." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + overrides_metab = 1 + new_metabolize_rate = 5 + metabolize_rate = 2 + +datum/reagent/calomel/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(M.getTotalLoss() < 80) + M.adjustToxLoss(5*REM) + ..() + return + +/datum/chemical_reaction/calomel + name = "Calomel" + id = "calomel" + result = "calomel" + required_reagents = list("mercury" = 1, "chlorine" = 1) + result_amount = 2 + mix_message = "Stinging vapors rise from the solution." + required_temp = 380 + +/datum/chemical_reaction/charcoal + name = "Charcoal" + id = "charcoal" + result = "charcoal" + required_reagents = list("ash" = 1, "sodiumchloride" = 1) + result_amount = 2 + mix_message = "The mixture yields a fine black powder." + required_temp = 380 + +/datum/chemical_reaction/silver_sulfadiazine + name = "Silver Sulfadiazine" + id = "silver_sulfadiazine" + result = "silver_sulfadiazine" + required_reagents = list("ammonia" = 1, "silver" = 1, "sulfur" = 1, "oxygen" = 1, "chlorine" = 1) + result_amount = 5 + +/datum/chemical_reaction/salglu_solution + name = "Saline-Glucose Solution" + id = "salglu_solution" + result = "salglu_solution" + required_reagents = list("sodiumchloride" = 1, "water" = 1, "sugar" = 1) + result_amount = 3 + +/datum/chemical_reaction/synthflesh + name = "Synthflesh" + id = "synthflesh" + result = "synthflesh" + required_reagents = list("blood" = 1, "carbon" = 1, "styptic_powder" = 1) + result_amount = 3 + +/datum/chemical_reaction/styptic_powder + name = "Styptic Powder" + id = "styptic_powder" + result = "styptic_powder" + required_reagents = list("aluminium" = 1, "hydrogen" = 1, "oxygen" = 1, "sacid" = 1) + result_amount = 2 + mix_message = "The solution yields an astringent powder." + +datum/reagent/omnizine + name = "Omnizine" + id = "omnizine" + description = "Heals one each of OXY, TOX, BRUTE and BURN per cycle." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + metabolize_rate = 0.2 + +datum/reagent/omnizine/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(-1*REM) + M.adjustOxyLoss(-1*REM) + M.adjustBruteLoss(-1*REM) + M.adjustFireLoss(-1*REM) + ..() + return + +datum/reagent/potass_iodide + name = "Potassium Iodide" + id = "potass_iodide" + description = "80% chance of removing 1 RAD. Radiation is cumulative and causes tox+burn." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +datum/reagent/potass_iodide/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(M.radiation > 0) + if(prob(80)) + M.radiation-- + if(M.radiation < 0) + M.radiation = 0 + ..() + return + +/datum/chemical_reaction/potass_iodide + name = "Potassium Iodide" + id = "potass_iodide" + result = "potass_iodide" + required_reagents = list("potassium" = 1, "iodine" = 1) + result_amount = 2 + +datum/reagent/pen_acid + name = "Pentetic Acid" + id = "pen_acid" + description = "80% chance of removing 1 RAD. Radiation is cumulative and causes tox+burn." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + overrides_metab = 1 + new_metabolize_rate = 4 + +datum/reagent/pen_acid/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(M.radiation > 0) + M.radiation -= 7 + M.adjustToxLoss(-4*REM) + if(prob(33)) + M.adjustBruteLoss(1*REM) + if(M.radiation < 0) + M.radiation = 0 + ..() + return + +/datum/chemical_reaction/pen_acid + name = "Pentetic Acid" + id = "pen_acid" + result = "pen_acid" + required_reagents = list("fuel" = 1, "chlorine" = 1, "ammonia" = 1, "formaldehyde" = 1, "sodium" = 1, "cyanide" = 1) + result_amount = 6 + +datum/reagent/sal_acid + name = "Salicyclic Acid" + id = "sal_acid" + description = "If BRUTE damage is under 50, 50% chance to heal one unit." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +datum/reagent/sal_acid/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(M.getBruteLoss() < 50) + if(prob(50)) + M.adjustBruteLoss(-1*REM) + ..() + return + +/datum/chemical_reaction/sal_acid + name = "Salicyclic Acid" + id = "sal_acid" + result = "sal_acid" + required_reagents = list("sodium" = 1, "phenol" = 1, "carbon" = 1, "oxygen" = 1, "sacid" = 1) + result_amount = 5 + +datum/reagent/salbutamol + name = "Salbutamol" + id = "salbutamol" + description = "Heals 6 OXY damage, reduces LOSEBREATH by 4." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + metabolize_rate = 0.2 + +datum/reagent/salbutamol/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustOxyLoss(6*REM) + ..() + return + +/datum/chemical_reaction/salbutamol + name = "Salbutamol" + id = "salbutamol" + result = "salbutamol" + required_reagents = list("sal_acid" = 1, "lithium" = 1, "aluminium" = 1, "bromine" = 1, "ammonia" = 1) + result_amount = 5 + +datum/reagent/perfluorodecalin + name = "Perfluorodecalin" + id = "perfluorodecalin" + description = "Heals 25 OXY damage, but you can't talk. 33% chance of healing 1 BRUTE and 1 BURN." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + metabolize_rate = 0.2 + +datum/reagent/perfluorodecalin/on_mob_life(var/mob/living/carbon/human/M as mob) + if(!M) M = holder.my_atom + M.adjustOxyLoss(25*REM) + M.silent = max(M.silent, 5) + if(prob(33)) + M.adjustBruteLoss(-1*REM) + M.adjustFireLoss(-1*REM) + ..() + return + +/datum/chemical_reaction/perfluorodecalin + name = "Perfluorodecalin" + id = "perfluorodecalin" + result = "perfluorodecalin" + required_reagents = list("hydrogen" = 1, "fluorine" = 1, "oil" = 1) + result_amount = 3 + required_temp = 370 + +datum/reagent/hairgrownium + name = "Hairgrownium" + id = "hairgrownium" + description = "Will eventually cause the users to grow a full set of hair." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + metabolize_rate = 0.2 + var/cycle_count = 0 + +datum/reagent/hairgrownium/on_mob_life(var/mob/living/carbon/human/M as mob) + if(!M) M = holder.my_atom + cycle_count++ + if(cycle_count == 15) + M << "You suddenly grow a full set of hair!" + M.hair_style = "longest" + M.facial_hair_style = "vlongbeard" + ..() + return + +/datum/chemical_reaction/hairgrownium + name = "Hairgrownium" + id = "hairgrownium" + result = "hairgrownium" + required_reagents = list("carpet" = 1, "synthflesh" = 1, "ephedrine" = 1) + result_amount = 3 + +datum/reagent/ephedrine + name = "Ephedrine" + id = "ephedrine" + description = "Will eventually cause the users to grow a full set of hair." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + metabolize_rate = 0.3 + var/cycle_count = 0 + +datum/reagent/ephedrine/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.status_flags |= GOTTAGOFAST + if(M.losebreath >= 10) + M.losebreath = max(10, M.losebreath-5) + M.AdjustParalysis(-1) + M.AdjustStunned(-1) + M.AdjustWeakened(-1) + M.adjustStaminaLoss(-1*REM) + ..() + return + +/datum/chemical_reaction/ephedrine + name = "Ephedrine" + id = "ephedrine" + result = "ephedrine" + required_reagents = list("sugar" = 1, "oil" = 1, "hydrogen" = 1, "diethylamine" = 1) + result_amount = 4 \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Goon-Other.dm b/code/modules/reagents/Chemistry-Goon-Other.dm new file mode 100644 index 00000000000..5b30a19cfc0 --- /dev/null +++ b/code/modules/reagents/Chemistry-Goon-Other.dm @@ -0,0 +1,97 @@ +#define SOLID 1 +#define LIQUID 2 +#define GAS 3 + +#define REM REAGENTS_EFFECT_MULTIPLIER + +datum/reagent/oil + name = "Oil" + id = "oil" + description = "A slippery solution." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +datum/reagent/iodine + name = "Iodine" + id = "iodine" + description = "A slippery solution." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +datum/reagent/fluorine + name = "Fluorine" + id = "fluorine" + description = "A slippery solution." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +datum/reagent/carpet + name = "Carpet" + id = "carpet" + description = "A slippery solution." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +datum/reagent/bromine + name = "Bromine" + id = "bromine" + description = "A slippery solution." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +datum/reagent/phenol + name = "Phenol" + id = "phenol" + description = "A slippery solution." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +datum/reagent/ash + name = "Ash" + id = "ash" + description = "A burnt solution." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +datum/reagent/acetone + name = "Acetone" + id = "acetone" + description = "A solution." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +/datum/chemical_reaction/acetone + name = "acetone" + id = "acetone" + result = "acetone" + required_reagents = list("oil" = 1, "fuel" = 1, "oxygen" = 1) + result_amount = 3 + +/datum/chemical_reaction/carpet + name = "carpet" + id = "carpet" + result = "carpet" + required_reagents = list("space_drugs" = 1, "blood" = 1) + result_amount = 2 + +/datum/chemical_reaction/oil + name = "Oil" + id = "oil" + result = "oil" + required_reagents = list("fuel" = 1, "carbon" = 1, "hydrogen" = 1) + result_amount = 3 + +/datum/chemical_reaction/phenol + name = "phenol" + id = "phenol" + result = "phenol" + required_reagents = list("water" = 1, "chlorine" = 1, "oil" = 1) + result_amount = 3 + +/datum/chemical_reaction/ash + name = "Ash" + id = "ash" + result = "ash" + required_reagents = list("oil" = 1) + result_amount = 1 + required_temp = 480 \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Goon-Toxins.dm b/code/modules/reagents/Chemistry-Goon-Toxins.dm new file mode 100644 index 00000000000..002edc5f2f1 --- /dev/null +++ b/code/modules/reagents/Chemistry-Goon-Toxins.dm @@ -0,0 +1,145 @@ +#define SOLID 1 +#define LIQUID 2 +#define GAS 3 + +#define REM REAGENTS_EFFECT_MULTIPLIER + +datum/reagent/polonium + name = "Polonium" + id = "polonium" + description = "A toxic chemical." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + metabolize_rate = 0.1 + +datum/reagent/polonium/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.radiation += 8 + ..() + return + + +datum/reagent/histamine + name = "Histamine" + id = "histamine" + description = "A toxic chemical." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + metabolize_rate = 0.2 + +datum/reagent/histamine/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(volume >= 20) + M.adjustOxyLoss(pick(5,10)*REM) + M.adjustBruteLoss(pick(5,10)*REM) + M.adjustToxLoss(pick(5,10)*REM) + if(volume < 20) + switch(pick(1, 2, 3)) + if(1) + M << "You are unable to look straight!" + M.Dizzy(10) + if(2) + M.emote("cough") + var/obj/item/I = M.get_active_hand() + if(I) + M.drop_item() + if(3) + M.adjustBruteLoss(5*REM) + ..() + return + +datum/reagent/formaldehyde + name = "Formaldehyde" + id = "formaldehyde" + description = "A toxic chemical." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + +datum/reagent/formaldehyde/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(1*REM) + if(prob(10)) + M.reagents.add_reagent("histamine",pick(5,10)) + M.reagents.remove_reagent("formaldehyde",1) + ..() + return + +/datum/chemical_reaction/formaldehyde + name = "formaldehyde" + id = "Formaldehyde" + result = "formaldehyde" + required_reagents = list("ethanol" = 1, "oxygen" = 1, "silver" = 1) + result_amount = 3 + required_temp = 420 + +datum/reagent/venom + name = "Venom" + id = "venom" + description = "A toxic chemical." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + metabolize_rate = 0.2 +datum/reagent/venom/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss((0.1*volume)*REM) + M.adjustBruteLoss((0.1*volume)*REM) + if(prob(25)) + M.reagents.add_reagent("histamine",pick(5,10)) + M.reagents.remove_reagent("venom",1) + ..() + return + +datum/reagent/goon_neurotoxin + name = "Neurotoxin" + id = "goon_neurotoxin" + description = "A toxic chemical." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + var/cycle_count = 0 + metabolize_rate = 1 + +datum/reagent/goon_neurotoxin/on_mob_life(var/mob/living/M as mob) + cycle_count++ + if(!M) M = holder.my_atom + if(!(M.brainloss + M.toxloss) >= 60) + M.adjustBrainLoss(1*REM) + M.adjustToxLoss(1*REM) + if(cycle_count == 17) + M.sleeping += 1 + ..() + return + +/datum/chemical_reaction/goon_neurotoxin + name = "goon_neurotoxin" + id = "goon_neurotoxin" + result = "goon_neurotoxin" + required_reagents = list("space_drugs" = 1) + result_amount = 1 + required_temp = 200 + +datum/reagent/cyanide + name = "Cyanide" + id = "cyanide" + description = "A highly toxic chemical." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + metabolize_rate = 0.1 + +datum/reagent/toxin/cyanide/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(1.5*REM) + if(prob(10)) + M.adjustOxyLoss(1*REM) + if(prob(8)) + M.sleeping += 1 + M.adjustToxLoss(4*REM) + ..() + return + +/datum/chemical_reaction/cyanide + name = "Cyanide" + id = "cyanide" + result = "cyanide" + required_reagents = list("oil" = 1, "ammonia" = 1, "oxygen" = 1) + result_amount = 3 + required_temp = 380 \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 9e4da4d8a40..5706ff93f46 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -10,6 +10,7 @@ datum/reagents var/total_volume = 0 var/maximum_volume = 100 var/atom/my_atom = null + var/chem_temp = 100 datum/reagents/New(maximum=100) maximum_volume = maximum @@ -232,6 +233,7 @@ datum/reagents/proc/handle_reactions() var/matching_container = 0 var/matching_other = 0 var/list/multipliers = new/list() + var/required_temp = C.required_temp for(var/B in C.required_reagents) if(!has_reagent(B, C.required_reagents[B])) break @@ -257,10 +259,11 @@ datum/reagents/proc/handle_reactions() if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this matching_other = 1 + if(required_temp == 0) + required_temp = chem_temp - - if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other) + if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other && chem_temp >= required_temp) var/multiplier = min(multipliers) for(var/B in C.required_reagents) remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1) @@ -275,7 +278,7 @@ datum/reagents/proc/handle_reactions() if(!istype(my_atom, /mob)) // No bubbling mobs for(var/mob/M in seen) - M << "\icon[my_atom] The solution begins to bubble." + M << "\icon[my_atom] [C.mix_message]" if(istype(my_atom, /obj/item/slime_extract)) var/obj/item/slime_extract/ME2 = my_atom diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 7fe43b639c3..fd654926f7f 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -19,7 +19,7 @@ var/recharge_delay = 15 //Time it game ticks between recharges var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine", "sodium","aluminium","silicon","phosphorus","sulfur","chlorine","potassium","iron", - "copper","mercury","radium","water","ethanol","sugar","sacid") + "copper","mercury","radium","water","ethanol","sugar","sacid","sodiumchloride","fuel","silver","iodine","bromine","fluorine") /obj/machinery/chem_dispenser/proc/recharge() if(stat & (BROKEN|NOPOWER)) return @@ -1226,3 +1226,52 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) O.reagents.trans_to(beaker, amount) if(!O.reagents.total_volume) remove_object(O) + +/obj/machinery/chem_heater + name = "chemical heater" + density = 1 + anchored = 1 + icon = 'icons/obj/chemical.dmi' + icon_state = "mixer0b" + use_power = 1 + idle_power_usage = 40 + var/energy = 50 + var/max_energy = 50 + var/amount = 30 + var/beaker = null + var/set_temp + +/obj/machinery/chem_heater/attackby(var/obj/item/weapon/reagent_containers/glass/B as obj, var/mob/user as mob) + if(isrobot(user)) + return + + if(!istype(B, /obj/item/weapon/reagent_containers/glass)) + return + + if(src.beaker) + user << "A beaker is already loaded into the machine." + return + + src.beaker = B + user.drop_item() + B.loc = src + user << "You add the beaker to the machine!" + icon_state = "mixer1b" + +/obj/machinery/chem_heater/attack_hand(var/mob/user as mob) + if(!beaker) + user << "Please insert a beaker." + return + var/temperature = input("Please input desired temperature between 1 and 1000.", name, set_temp) as num + if(temperature > 1000 || temperature < 1) + user << "Invalid temperature." + return + user << "Adjusting chemical temperature..." + sleep(50) + var/obj/item/weapon/reagent_containers/B = beaker + B.reagents.chem_temp = temperature + user << "Chemical adjusted to [temperature]K." + B.loc = get_turf(src) + beaker = null + icon_state = "mixer0b" + B.reagents.handle_reactions() \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 0c91110905f..936188a9f8c 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -17,6 +17,9 @@ datum/reagent var/list/data var/volume = 0 var/nutriment_factor = 0 + var/metabolize_rate = 0.4 + var/overrides_metab = 0 + var/new_metabolize_rate = 0.4 //var/list/viruses = list() var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!) @@ -65,7 +68,11 @@ datum/reagent/proc/reaction_turf(var/turf/T, var/volume) datum/reagent/proc/on_mob_life(var/mob/living/M as mob) if(!istype(M, /mob/living)) return //Noticed runtime errors from pacid trying to damage ghosts, this should fix. --NEO - holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears. + for(var/A in M.reagents.reagent_list) + var/datum/reagent/R = A + if(R.overrides_metab) + src.metabolize_rate += R.new_metabolize_rate + holder.remove_reagent(src.id, metabolize_rate) //By default it slowly disappears. return datum/reagent/proc/on_move(var/mob/M) @@ -1412,21 +1419,6 @@ datum/reagent/toxin/slimejelly/on_mob_life(var/mob/living/M as mob) ..() return -datum/reagent/toxin/cyanide - name = "Cyanide" - id = "cyanide" - description = "A highly toxic chemical." - reagent_state = LIQUID - color = "#CF3600" // rgb: 207, 54, 0 - toxpwr = 3 - -datum/reagent/toxin/cyanide/on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.adjustOxyLoss(3*REM) - M.sleeping += 1 - ..() - return - datum/reagent/toxin/minttoxin name = "Mint Toxin" id = "minttoxin" diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index d419e7c2c70..9f8d985a4e5 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -13,6 +13,9 @@ var/result_amount = 0 var/secondary = 0 // set to nonzero if secondary reaction + var/required_temp = 0 + var/mix_message = "The solution begins to bubble." + /datum/chemical_reaction/proc/on_reaction(var/datum/reagents/holder, var/created_volume) return diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index 35707c8792a..cd635eb51d1 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -323,4 +323,26 @@ icon_state = "bottle17" New() ..() - reagents.add_reagent("frostoil", 30) \ No newline at end of file + reagents.add_reagent("frostoil", 30) + +/obj/item/weapon/reagent_containers/glass/bottle/traitor + name = "syndicate bottle" + desc = "A small bottle. Contains a random nasty chemical." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle16" + + New() + ..() + switch(pick(1, 2, 3, 4, 5, 6)) + if(1) + reagents.add_reagent("polonium", 50) + if(2) + reagents.add_reagent("histamine", 50) + if(3) + reagents.add_reagent("formaldehyde", 50) + if(4) + reagents.add_reagent("venom", 50) + if(5) + reagents.add_reagent("goon_neurotoxin", 50) + if(6) + reagents.add_reagent("cyanide", 50) \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index 17ef9c54309..1dc73015cca 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1242,6 +1242,9 @@ #include "code\modules\projectiles\projectile\magic.dm" #include "code\modules\projectiles\projectile\special.dm" #include "code\modules\reagents\Chemistry-Colours.dm" +#include "code\modules\reagents\Chemistry-Goon-Medicine.dm" +#include "code\modules\reagents\Chemistry-Goon-Other.dm" +#include "code\modules\reagents\Chemistry-Goon-Toxins.dm" #include "code\modules\reagents\Chemistry-Holder.dm" #include "code\modules\reagents\Chemistry-Machinery.dm" #include "code\modules\reagents\Chemistry-Readme.dm" From 42973c8b67de27311c8cdd786db1bf1e54a0a034 Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Sat, 29 Nov 2014 17:15:57 -0800 Subject: [PATCH 02/19] Goon Chemistry Commit 2 --- code/datums/supplypacks.dm | 4 + .../objects/items/weapons/cigs_lighters.dm | 1 + code/game/objects/structures/watercloset.dm | 10 +- code/modules/food&drinks/food/snacks_other.dm | 3 +- .../reagents/Chemistry-Goon-420BlazeIt.dm | 121 ++++++++++++++++++ .../reagents/Chemistry-Goon-Medicine.dm | 90 ++++++++----- code/modules/reagents/Chemistry-Goon-Other.dm | 14 ++ .../modules/reagents/Chemistry-Goon-Readme.dm | 8 ++ .../modules/reagents/Chemistry-Goon-Toxins.dm | 32 +++-- code/modules/reagents/Chemistry-Machinery.dm | 2 +- .../reagent_containers/glass/bottle.dm | 29 ++--- tgstation.dme | 2 + 12 files changed, 253 insertions(+), 63 deletions(-) create mode 100644 code/modules/reagents/Chemistry-Goon-420BlazeIt.dm create mode 100644 code/modules/reagents/Chemistry-Goon-Readme.dm diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 8d5738c6bb6..b39868cfd4f 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -526,6 +526,10 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, /obj/item/weapon/reagent_containers/glass/bottle/stoxin, /obj/item/weapon/reagent_containers/glass/bottle/stoxin, + /obj/item/weapon/reagent_containers/glass/bottle/morphine, + /obj/item/weapon/reagent_containers/glass/bottle/morphine, + /obj/item/weapon/reagent_containers/glass/bottle/morphine, + /obj/item/weapon/reagent_containers/glass/bottle/morphine, /obj/item/weapon/reagent_containers/glass/bottle/toxin, /obj/item/weapon/reagent_containers/glass/bottle/toxin, /obj/item/weapon/reagent_containers/glass/beaker/large, diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index a848cb4dc3f..adef345d66b 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -94,6 +94,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM ..() flags |= NOREACT // so it doesn't react until you light it create_reagents(chem_volume) // making the cigarette a chemical holder with a maximum volume of 15 + reagents.add_reagent("nicotine", 15) /obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 62b181272f2..c8cbeaf39d0 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -82,6 +82,11 @@ else user << "You need a tighter grip." + if(istype(I,/obj/item/weapon/reagent_containers/glass/beaker)) + user << "It looks like a botanist dumped some compost in [src] during a previous shift. You scoop it up with [I]." + reagents.add_reagent("compost", 15) + return + if(cistern) if(I.w_class > 3) user << "[I] does not fit." @@ -123,7 +128,10 @@ GM.adjustBruteLoss(8) else user << "You need a tighter grip." - + if(istype(I,/obj/item/weapon/reagent_containers/glass/beaker)) + user << "You scoop up the contained reagents with [I]." + reagents.add_reagent("sewage", 15) + return /obj/machinery/shower diff --git a/code/modules/food&drinks/food/snacks_other.dm b/code/modules/food&drinks/food/snacks_other.dm index 4a4380cfeea..bca39132bc5 100644 --- a/code/modules/food&drinks/food/snacks_other.dm +++ b/code/modules/food&drinks/food/snacks_other.dm @@ -126,8 +126,7 @@ /obj/item/weapon/reagent_containers/food/snacks/badrecipe/New() ..() eatverb = pick("choke down","nibble","gnaw","chomp") - reagents.add_reagent("toxin", 1) - reagents.add_reagent("carbon", 3) + reagents.add_reagent("????", 30) bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff diff --git a/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm new file mode 100644 index 00000000000..543afc07c26 --- /dev/null +++ b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm @@ -0,0 +1,121 @@ +#define SOLID 1 +#define LIQUID 2 +#define GAS 3 + +#define REM REAGENTS_EFFECT_MULTIPLIER + +datum/reagent/nicotine + name = "Nicotine" + id = "nicotine" + description = "A legal chemical compound used as a drug." + reagent_state = LIQUID + color = "#60A584" // rgb: 96, 165, 132 + +datum/reagent/nicotine/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + var/smoke_message = pick("You can just feel your lungs dying!", "You feel relaxed.", "You feel calmed.", "You feel the lung cancer forming.", "You feel the money you wasted.", "You feel like a space cowboy.", "You feel rugged.") + if(prob(30)) + M << smoke_message + M.AdjustStunned(-1) + M.adjustStaminaLoss(-1*REM) + if(volume > 35) + M << "You feel like you smoked too much." + M.adjustToxLoss(1*REM) + return + +datum/reagent/jenkem + name = "Jenkem" + id = "jenkem" + description = "A legal chemical compound used as a drug." + reagent_state = LIQUID + color = "#60A584" // rgb: 96, 165, 132 + +datum/reagent/jenkem/on_mob_life(var/mob/living/carbon/M as mob) + if(!M) M = holder.my_atom + var/high_message = pick("You wonder why the hell you just ingested that.", "You realize you are high as fuck.", "You feel the color blue.", "You ponder the meaning of red.", "You think deeply on the color green.", "You taste a horrible mixture, and you want to throw up, but you hold it back.") + if(prob(30)) + M << high_message + if(prob(25)) + M.adjustToxLoss(1*REM) + M.dizziness += 1 + return + +/datum/chemical_reaction/jenkem + name = "Jenkem" + id = "jenkem" + result = "jenkem" + required_reagents = list("sewage" = 1, "compost" = 1) + result_amount = 2 + mix_message = "The mixture ferments into a filthy morass." + +datum/reagent/crank + name = "Crank" + id = "crank" + description = "A legal chemical compound used as a drug." + reagent_state = LIQUID + color = "#60A584" // rgb: 96, 165, 132 + +datum/reagent/crank/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + var/high_message = pick("You feel jittery.", "You feel like you gotta go fast.", "You feel like you need to step it up.") + if(prob(30)) + M << high_message + M.AdjustParalysis(-2) + M.AdjustStunned(-2) + M.AdjustWeakened(-2) + if(volume > 20) + M.adjustBrainLoss(rand(1,10)*REM) + M.adjustToxLoss(rand(1,10)*REM) + M.adjustBruteLoss(rand(1,10)*REM) + return + +/datum/chemical_reaction/crank + name = "Crank" + id = "crank" + result = "crank" + required_reagents = list("diphenhydramine" = 1, "ammonia" = 1, "lithium" = 1, "sacid" = 1, "fuel" = 1) + result_amount = 5 + mix_message = "The mixture violently reacts, leaving behind a few crystalline shards." + required_temp = 390 + +/datum/reagent/krokodil + name = "Krokodil" + id = "krokodil" + description = "A legal chemical compound used as a drug." + reagent_state = LIQUID + color = "#60A584" // rgb: 96, 165, 132 + var/cycle_count = 0 + var/overdosed + + +/datum/reagent/krokodil/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.") + if(prob(30)) + M << high_message + if(prob(10)) + M.adjustBrainLoss(rand(1,5)*REM) + M.adjustToxLoss(rand(1,5)*REM) + if(cycle_count == 10) + M.adjustBrainLoss(rand(1,10)*REM) + M.adjustToxLoss(rand(1,10)*REM) + if(cycle_count == 20) + M << "Your skin feels loose..." + if(cycle_count == 50) + M << "Your skin falls off!" + M.adjustBruteLoss(rand(10,30)*REM) + hardset_dna(M, null, null, null, null, /datum/species/zombie) + if(volume > 20) + overdosed = 1 + if(overdosed) + cycle_count++ + return + +/datum/chemical_reaction/krokodil + name = "Krokodil" + id = "krokodil" + result = "krokodil" + required_reagents = list("diphenhydramine" = 1, "morphine" = 1, "cleaner" = 1, "potassium" = 1, "phosphorous" = 1, "fuel" = 1) + result_amount = 6 + mix_message = "The mixture dries into a pale blue powder." + required_temp = 380 \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Goon-Medicine.dm b/code/modules/reagents/Chemistry-Goon-Medicine.dm index 48bd9ac033e..f5421ab4698 100644 --- a/code/modules/reagents/Chemistry-Goon-Medicine.dm +++ b/code/modules/reagents/Chemistry-Goon-Medicine.dm @@ -16,6 +16,7 @@ datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/meth if(method == TOUCH) M.adjustFireLoss((volume-(volume*2))*REM) M << "You feel your burns healing!" + M.emote("scream") if(method == INGEST) M.adjustToxLoss(0.5*volume) M << "You probably shouldn't of eaten that. Maybe you should of splashed it on, or used a patch?" @@ -34,6 +35,7 @@ datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TO if(method == TOUCH) M.heal_organ_damage(volume*REM,0) M << "You feel your wounds knitting back together!" + M.emote("scream") if(method == INGEST) M.adjustToxLoss(0.5*volume) M << "You probably shouldn't of eaten that. Maybe you should of splashed it on, or used a patch?" @@ -48,7 +50,7 @@ datum/reagent/salglu_solution color = "#C8A5DC" // rgb: 200, 165, 220 datum/reagent/salglu_solution/on_mob_life(var/mob/living/M as mob) - if(M.stat == 2.0) + if(M.stat == DEAD) return if(!M) M = holder.my_atom if(M.getOxyLoss()) M.adjustOxyLoss(-1*REM) @@ -82,9 +84,6 @@ datum/reagent/charcoal new_metabolize_rate = 0.5 datum/reagent/charcoal/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - M.reagents.remove_all_type(/datum/reagent/toxin, 1*REM, 0, 1) - M.drowsyness = max(M.drowsyness-2*REM, 0) - M.hallucination = max(0, M.hallucination - 5*REM) M.adjustToxLoss(-2*REM) ..() return @@ -254,7 +253,9 @@ datum/reagent/salbutamol datum/reagent/salbutamol/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - M.adjustOxyLoss(6*REM) + M.adjustOxyLoss(-6*REM) + if(M.losebreath >= 4) + M.losebreath -= 4 ..() return @@ -275,7 +276,7 @@ datum/reagent/perfluorodecalin datum/reagent/perfluorodecalin/on_mob_life(var/mob/living/carbon/human/M as mob) if(!M) M = holder.my_atom - M.adjustOxyLoss(25*REM) + M.adjustOxyLoss(-25*REM) M.silent = max(M.silent, 5) if(prob(33)) M.adjustBruteLoss(-1*REM) @@ -290,41 +291,15 @@ datum/reagent/perfluorodecalin/on_mob_life(var/mob/living/carbon/human/M as mob) required_reagents = list("hydrogen" = 1, "fluorine" = 1, "oil" = 1) result_amount = 3 required_temp = 370 - -datum/reagent/hairgrownium - name = "Hairgrownium" - id = "hairgrownium" - description = "Will eventually cause the users to grow a full set of hair." - reagent_state = LIQUID - color = "#C8A5DC" // rgb: 200, 165, 220 - metabolize_rate = 0.2 - var/cycle_count = 0 - -datum/reagent/hairgrownium/on_mob_life(var/mob/living/carbon/human/M as mob) - if(!M) M = holder.my_atom - cycle_count++ - if(cycle_count == 15) - M << "You suddenly grow a full set of hair!" - M.hair_style = "longest" - M.facial_hair_style = "vlongbeard" - ..() - return - -/datum/chemical_reaction/hairgrownium - name = "Hairgrownium" - id = "hairgrownium" - result = "hairgrownium" - required_reagents = list("carpet" = 1, "synthflesh" = 1, "ephedrine" = 1) - result_amount = 3 + mix_message = "The mixture rapidly turns into a dense pink liquid." datum/reagent/ephedrine name = "Ephedrine" id = "ephedrine" - description = "Will eventually cause the users to grow a full set of hair." + description = "Stun reduction per cycle, increases run speed slightly, minor stamina regeneration buff, stabilizes crit." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 metabolize_rate = 0.3 - var/cycle_count = 0 datum/reagent/ephedrine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -343,4 +318,49 @@ datum/reagent/ephedrine/on_mob_life(var/mob/living/M as mob) id = "ephedrine" result = "ephedrine" required_reagents = list("sugar" = 1, "oil" = 1, "hydrogen" = 1, "diethylamine" = 1) - result_amount = 4 \ No newline at end of file + result_amount = 4 + mix_message = "The solution fizzes and gives off toxic fumes." + +datum/reagent/diphenhydramine + name = "Diphenhydramine" + id = "diphenhydramine" + description = "Stun reduction per cycle, increases run speed slightly, minor stamina regeneration buff, stabilizes crit." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + overrides_metab = 1 + new_metabolize_rate = 3 +datum/reagent/diphenhydramine/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.drowsyness -= 1 + M.jitteriness -= 1 + ..() + return + +/datum/chemical_reaction/diphenhydramine + name = "Diphenhydramine" + id = "diphenhydramine" + result = "diphenhydramine" + required_reagents = list("oil" = 1, "carbon" = 1, "bromine" = 1, "diethylamine" = 1, "ethanol" = 1) + result_amount = 4 + mix_message = "The mixture dries into a pale blue powder." + +datum/reagent/morphine + name = "Morphine" + id = "morphine" + description = "100% chance per cycle of healing 1 point each of OXY and TOX damage." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + var/cycle_count = 0 + +datum/reagent/morphine/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.status_flags |= GOTTAGOFAST + if(cycle_count == 36) + M.sleeping += 1 + if(volume > 20) + var/obj/item/I = M.get_active_hand() + if(I) + M.drop_item() + cycle_count++ + ..() + return \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Goon-Other.dm b/code/modules/reagents/Chemistry-Goon-Other.dm index 5b30a19cfc0..afb91ef9636 100644 --- a/code/modules/reagents/Chemistry-Goon-Other.dm +++ b/code/modules/reagents/Chemistry-Goon-Other.dm @@ -11,6 +11,20 @@ datum/reagent/oil reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 +datum/reagent/compost + name = "Compost" + id = "compost" + description = "A slippery solution." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +datum/reagent/sewage + name = "Sewage" + id = "sewage" + description = "A slippery solution." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + datum/reagent/iodine name = "Iodine" id = "iodine" diff --git a/code/modules/reagents/Chemistry-Goon-Readme.dm b/code/modules/reagents/Chemistry-Goon-Readme.dm new file mode 100644 index 00000000000..48dfd2c50f7 --- /dev/null +++ b/code/modules/reagents/Chemistry-Goon-Readme.dm @@ -0,0 +1,8 @@ +/* + Credit goes to Cogwerks, and all the other goonstation coders + for the original idea and implementation of this over at goonstation. + + THE REQUESTED DON'T PORT LIST: IF YOU PORT THESE THE GOONS WILL MURDER US IN OUR SLEEP SO PLEASE DON'T KTHX - Iamgoofball + Any of the Secret Chems + Goon in-joke chems (Eg. Cat Drugs, Hairgrownium) +*/ \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Goon-Toxins.dm b/code/modules/reagents/Chemistry-Goon-Toxins.dm index 002edc5f2f1..90aeb08900a 100644 --- a/code/modules/reagents/Chemistry-Goon-Toxins.dm +++ b/code/modules/reagents/Chemistry-Goon-Toxins.dm @@ -89,16 +89,16 @@ datum/reagent/venom/on_mob_life(var/mob/living/M as mob) ..() return -datum/reagent/goon_neurotoxin +datum/reagent/neurotoxin2 name = "Neurotoxin" - id = "goon_neurotoxin" + id = "neurotoxin2" description = "A toxic chemical." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 var/cycle_count = 0 metabolize_rate = 1 -datum/reagent/goon_neurotoxin/on_mob_life(var/mob/living/M as mob) +datum/reagent/neurotoxin2/on_mob_life(var/mob/living/M as mob) cycle_count++ if(!M) M = holder.my_atom if(!(M.brainloss + M.toxloss) >= 60) @@ -109,10 +109,10 @@ datum/reagent/goon_neurotoxin/on_mob_life(var/mob/living/M as mob) ..() return -/datum/chemical_reaction/goon_neurotoxin - name = "goon_neurotoxin" - id = "goon_neurotoxin" - result = "goon_neurotoxin" +/datum/chemical_reaction/neurotoxin2 + name = "neurotoxin2" + id = "neurotoxin2" + result = "neurotoxin2" required_reagents = list("space_drugs" = 1) result_amount = 1 required_temp = 200 @@ -125,7 +125,7 @@ datum/reagent/cyanide color = "#CF3600" // rgb: 207, 54, 0 metabolize_rate = 0.1 -datum/reagent/toxin/cyanide/on_mob_life(var/mob/living/M as mob) +datum/reagent/cyanide/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom M.adjustToxLoss(1.5*REM) if(prob(10)) @@ -142,4 +142,18 @@ datum/reagent/toxin/cyanide/on_mob_life(var/mob/living/M as mob) result = "cyanide" required_reagents = list("oil" = 1, "ammonia" = 1, "oxygen" = 1) result_amount = 3 - required_temp = 380 \ No newline at end of file + required_temp = 380 + +/datum/reagent/questionmark // food poisoning + name = "????" + id = "????" + description = "????" + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + metabolize_rate = 0.2 + +datum/reagent/questionmark/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + M.adjustToxLoss(1*REM) + ..() + return \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index fd654926f7f..5bd30d1f9ee 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -19,7 +19,7 @@ var/recharge_delay = 15 //Time it game ticks between recharges var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine", "sodium","aluminium","silicon","phosphorus","sulfur","chlorine","potassium","iron", - "copper","mercury","radium","water","ethanol","sugar","sacid","sodiumchloride","fuel","silver","iodine","bromine","fluorine") + "copper","mercury","radium","water","ethanol","sugar","sacid","fuel","silver","iodine","bromine","fluorine") /obj/machinery/chem_dispenser/proc/recharge() if(stat & (BROKEN|NOPOWER)) return diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index cd635eb51d1..33952a72ded 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -57,6 +57,16 @@ ..() reagents.add_reagent("stoxin", 30) +/obj/item/weapon/reagent_containers/glass/bottle/morphine + name = "morphine bottle" + desc = "A small bottle of morphine." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle20" + + New() + ..() + reagents.add_reagent("morphine", 30) + /obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate name = "Chloral Hydrate Bottle" desc = "A small bottle of Choral Hydrate. Mickey's Favorite!" @@ -331,18 +341,7 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle16" - New() - ..() - switch(pick(1, 2, 3, 4, 5, 6)) - if(1) - reagents.add_reagent("polonium", 50) - if(2) - reagents.add_reagent("histamine", 50) - if(3) - reagents.add_reagent("formaldehyde", 50) - if(4) - reagents.add_reagent("venom", 50) - if(5) - reagents.add_reagent("goon_neurotoxin", 50) - if(6) - reagents.add_reagent("cyanide", 50) \ No newline at end of file +/obj/item/weapon/reagent_containers/glass/bottle/traitor/New() + ..() + var/new_reagent = pick("polonium", "histamine", "formaldehyde", "venom", "neurotoxin2", "cyanide") + reagents.add_reagent(new_reagent, 50) \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index 1dc73015cca..eaae86f7926 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1242,8 +1242,10 @@ #include "code\modules\projectiles\projectile\magic.dm" #include "code\modules\projectiles\projectile\special.dm" #include "code\modules\reagents\Chemistry-Colours.dm" +#include "code\modules\reagents\Chemistry-Goon-420BlazeIt.dm" #include "code\modules\reagents\Chemistry-Goon-Medicine.dm" #include "code\modules\reagents\Chemistry-Goon-Other.dm" +#include "code\modules\reagents\Chemistry-Goon-Readme.dm" #include "code\modules\reagents\Chemistry-Goon-Toxins.dm" #include "code\modules\reagents\Chemistry-Holder.dm" #include "code\modules\reagents\Chemistry-Machinery.dm" From 91e5ec9b4eb0b70c7e6c67686e20d7c95a3bea85 Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Sun, 11 Jan 2015 08:49:09 -0800 Subject: [PATCH 03/19] Goon Chemistry Commit 3: Pyrotechnics and other changes --- code/game/objects/structures/watercloset.dm | 9 - .../reagents/Chemistry-Goon-420BlazeIt.dm | 28 +-- .../reagents/Chemistry-Goon-Medicine.dm | 49 +--- code/modules/reagents/Chemistry-Goon-Other.dm | 15 +- .../reagents/Chemistry-Goon-Pyrotechnics.dm | 213 ++++++++++++++++++ .../modules/reagents/Chemistry-Goon-Readme.dm | 26 +++ .../modules/reagents/Chemistry-Goon-Toxins.dm | 14 +- code/modules/reagents/Chemistry-Machinery.dm | 14 +- .../Chemistry-Reagents/Chemistry-Reagents.dm | 1 + .../reagents/reagent_containers/glass.dm | 1 + tgstation.dme | 1 + 11 files changed, 272 insertions(+), 99 deletions(-) create mode 100644 code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 51ab031bdfb..91a1cc97a96 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -87,11 +87,6 @@ else user << "You need a tighter grip." - if(istype(I,/obj/item/weapon/reagent_containers/glass/beaker)) - user << "It looks like a botanist dumped some compost in [src] during a previous shift. You scoop it up with [I]." - reagents.add_reagent("compost", 15) - return - if(cistern) if(I.w_class > 3) user << "[I] does not fit." @@ -133,10 +128,6 @@ GM.adjustBruteLoss(8) else user << "You need a tighter grip." - if(istype(I,/obj/item/weapon/reagent_containers/glass/beaker)) - user << "You scoop up the contained reagents with [I]." - reagents.add_reagent("sewage", 15) - return /obj/machinery/shower diff --git a/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm index 543afc07c26..5d03c9d63db 100644 --- a/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm +++ b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm @@ -21,33 +21,9 @@ datum/reagent/nicotine/on_mob_life(var/mob/living/M as mob) if(volume > 35) M << "You feel like you smoked too much." M.adjustToxLoss(1*REM) + ..() return -datum/reagent/jenkem - name = "Jenkem" - id = "jenkem" - description = "A legal chemical compound used as a drug." - reagent_state = LIQUID - color = "#60A584" // rgb: 96, 165, 132 - -datum/reagent/jenkem/on_mob_life(var/mob/living/carbon/M as mob) - if(!M) M = holder.my_atom - var/high_message = pick("You wonder why the hell you just ingested that.", "You realize you are high as fuck.", "You feel the color blue.", "You ponder the meaning of red.", "You think deeply on the color green.", "You taste a horrible mixture, and you want to throw up, but you hold it back.") - if(prob(30)) - M << high_message - if(prob(25)) - M.adjustToxLoss(1*REM) - M.dizziness += 1 - return - -/datum/chemical_reaction/jenkem - name = "Jenkem" - id = "jenkem" - result = "jenkem" - required_reagents = list("sewage" = 1, "compost" = 1) - result_amount = 2 - mix_message = "The mixture ferments into a filthy morass." - datum/reagent/crank name = "Crank" id = "crank" @@ -67,6 +43,7 @@ datum/reagent/crank/on_mob_life(var/mob/living/M as mob) M.adjustBrainLoss(rand(1,10)*REM) M.adjustToxLoss(rand(1,10)*REM) M.adjustBruteLoss(rand(1,10)*REM) + ..() return /datum/chemical_reaction/crank @@ -109,6 +86,7 @@ datum/reagent/crank/on_mob_life(var/mob/living/M as mob) overdosed = 1 if(overdosed) cycle_count++ + ..() return /datum/chemical_reaction/krokodil diff --git a/code/modules/reagents/Chemistry-Goon-Medicine.dm b/code/modules/reagents/Chemistry-Goon-Medicine.dm index f5421ab4698..ea8b46c4f3c 100644 --- a/code/modules/reagents/Chemistry-Goon-Medicine.dm +++ b/code/modules/reagents/Chemistry-Goon-Medicine.dm @@ -10,7 +10,7 @@ datum/reagent/silver_sulfadiazine description = "100% chance per cycle of healing 2 points of BURN damage." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - metabolize_rate = 2 + metabolization_rate = 2 datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume) if(method == TOUCH) @@ -19,7 +19,7 @@ datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/meth M.emote("scream") if(method == INGEST) M.adjustToxLoss(0.5*volume) - M << "You probably shouldn't of eaten that. Maybe you should of splashed it on, or used a patch?" + M << "You probably shouldn't of eaten that. Maybe you should of splashed it on?" ..() return @@ -29,7 +29,7 @@ datum/reagent/styptic_powder description = "100% chance per cycle of healing 2 points of BRUTE damage." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - metabolize_rate = 2 + metabolization_rate = 2 datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume) if(method == TOUCH) @@ -38,7 +38,7 @@ datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TO M.emote("scream") if(method == INGEST) M.adjustToxLoss(0.5*volume) - M << "You probably shouldn't of eaten that. Maybe you should of splashed it on, or used a patch?" + M << "You probably shouldn't of eaten that. Maybe you should of splashed it on?" ..() return @@ -80,40 +80,13 @@ datum/reagent/charcoal description = "Heals 2 TOX damage per cycle." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - overrides_metab = 1 - new_metabolize_rate = 0.5 + datum/reagent/charcoal/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom M.adjustToxLoss(-2*REM) ..() return -datum/reagent/calomel - name = "Calomel" - id = "calomel" - description = "Increases all depletion rates by 5. +5 TOX damage while health > 20." - reagent_state = LIQUID - color = "#C8A5DC" // rgb: 200, 165, 220 - overrides_metab = 1 - new_metabolize_rate = 5 - metabolize_rate = 2 - -datum/reagent/calomel/on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - if(M.getTotalLoss() < 80) - M.adjustToxLoss(5*REM) - ..() - return - -/datum/chemical_reaction/calomel - name = "Calomel" - id = "calomel" - result = "calomel" - required_reagents = list("mercury" = 1, "chlorine" = 1) - result_amount = 2 - mix_message = "Stinging vapors rise from the solution." - required_temp = 380 - /datum/chemical_reaction/charcoal name = "Charcoal" id = "charcoal" @@ -158,7 +131,7 @@ datum/reagent/omnizine description = "Heals one each of OXY, TOX, BRUTE and BURN per cycle." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - metabolize_rate = 0.2 + metabolization_rate = 0.2 datum/reagent/omnizine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -199,8 +172,6 @@ datum/reagent/pen_acid description = "80% chance of removing 1 RAD. Radiation is cumulative and causes tox+burn." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - overrides_metab = 1 - new_metabolize_rate = 4 datum/reagent/pen_acid/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -249,7 +220,7 @@ datum/reagent/salbutamol description = "Heals 6 OXY damage, reduces LOSEBREATH by 4." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - metabolize_rate = 0.2 + metabolization_rate = 0.2 datum/reagent/salbutamol/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -272,7 +243,7 @@ datum/reagent/perfluorodecalin description = "Heals 25 OXY damage, but you can't talk. 33% chance of healing 1 BRUTE and 1 BURN." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - metabolize_rate = 0.2 + metabolization_rate = 0.2 datum/reagent/perfluorodecalin/on_mob_life(var/mob/living/carbon/human/M as mob) if(!M) M = holder.my_atom @@ -299,7 +270,7 @@ datum/reagent/ephedrine description = "Stun reduction per cycle, increases run speed slightly, minor stamina regeneration buff, stabilizes crit." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - metabolize_rate = 0.3 + metabolization_rate = 0.3 datum/reagent/ephedrine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -327,8 +298,6 @@ datum/reagent/diphenhydramine description = "Stun reduction per cycle, increases run speed slightly, minor stamina regeneration buff, stabilizes crit." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - overrides_metab = 1 - new_metabolize_rate = 3 datum/reagent/diphenhydramine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom M.drowsyness -= 1 diff --git a/code/modules/reagents/Chemistry-Goon-Other.dm b/code/modules/reagents/Chemistry-Goon-Other.dm index afb91ef9636..33752902ea8 100644 --- a/code/modules/reagents/Chemistry-Goon-Other.dm +++ b/code/modules/reagents/Chemistry-Goon-Other.dm @@ -11,17 +11,10 @@ datum/reagent/oil reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 -datum/reagent/compost - name = "Compost" - id = "compost" - description = "A slippery solution." - reagent_state = LIQUID - color = "#C8A5DC" // rgb: 200, 165, 220 - -datum/reagent/sewage - name = "Sewage" - id = "sewage" - description = "A slippery solution." +datum/reagent/stable_plasma + name = "Stable Plasma" + id = "stable_plasma" + description = "Non-flammable plasma locked into a liquid form that cannot ignite or become gaseous/solid." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 diff --git a/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm b/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm new file mode 100644 index 00000000000..9f734b0b4bb --- /dev/null +++ b/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm @@ -0,0 +1,213 @@ +#define SOLID 1 +#define LIQUID 2 +#define GAS 3 + +#define REM REAGENTS_EFFECT_MULTIPLIER + +/datum/reagent/clf3 + name = "Chlorine Trifluoride" + id = "clf3" + description = "Makes a temporary 3x3 fireball when it comes into existence, so be careful when mixing. ClF3 applied to a surface burns things that wouldn't otherwise burn, sometimes through the very floors of the station and exposing it to the vacuum of space." + reagent_state = LIQUID + color = "#60A584" // rgb: 96, 165, 132 + + +/datum/reagent/clf3/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + ..() + return + +/datum/chemical_reaction/clf3 + name = "Chlorine Trifluoride" + id = "clf3" + result = "clf3" + required_reagents = list("chlorine" = 1, "fluorine" = 3) + result_amount = 4 + required_temp = 424 + +/datum/chemical_reaction/clf3/on_reaction(var/datum/reagents/holder, var/created_volume) + var/turf/simulated/T = get_turf(holder.my_atom) + if(istype(T)) + T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, created_volume) + return + +/datum/reagent/clf3/reaction_turf(var/turf/simulated/T, var/volume) + if(istype(T, /turf/simulated/floor/)) + var/turf/simulated/floor/F = T + if(prob(66)) + F.make_plating() + if(prob(11)) + F.ChangeTurf(/turf/space) + return + +/datum/reagent/clf3/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + M.adjust_fire_stacks(20) + return + +/datum/reagent/sorium + name = "Sorium" + id = "sorium" + description = "Sends everything flying from the detonation point." + reagent_state = LIQUID + color = "#60A584" // rgb: 96, 165, 132 + +/datum/chemical_reaction/sorium + name = "Sorium" + id = "sorium" + result = "sorium" + required_reagents = list("mercury" = 1, "oxygen" = 1, "nitrogen" = 1, "carbon" = 1) + result_amount = 4 + required_temp = 474 + +/datum/reagent/sorium/reaction_turf(var/turf/simulated/T, var/volume) + if(istype(T, /turf/simulated/floor/)) + for(var/atom/X in orange(5,T)) + if(istype(X, /atom/movable)) + if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human))) + step_away(X,T) + step_away(X,T) + step_away(X,T) + else if(istype(X,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = X + if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) + var/obj/item/clothing/shoes/magboots/M = H.shoes + if(M.magpulse) + continue + H.apply_effect(1, WEAKEN, 0) + step_away(H,T) + step_away(H,T) + step_away(H,T) + return +/datum/reagent/sorium/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + var/turf/simulated/T = get_turf(M) + for(var/atom/X in orange(5,T)) + if(istype(X, /atom/movable)) + if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human))) + step_away(X,T) + step_away(X,T) + step_away(X,T) + else if(istype(X,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = X + if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) + var/obj/item/clothing/shoes/magboots/S = H.shoes + if(S.magpulse) + continue + H.apply_effect(1, WEAKEN, 0) + step_away(H,T) + step_away(H,T) + step_away(H,T) + return + +/datum/chemical_reaction/sorium/on_reaction(var/datum/reagents/holder, var/created_volume) + var/turf/simulated/T = get_turf(holder.my_atom) + for(var/atom/X in orange(5,T)) + if(istype(X, /atom/movable)) + if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human))) + step_away(X,T) + step_away(X,T) + step_away(X,T) + step_away(X,T) + step_away(X,T) + step_away(X,T) + else if(istype(X,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = X + if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) + var/obj/item/clothing/shoes/magboots/M = H.shoes + if(M.magpulse) + continue + H.apply_effect(1, WEAKEN, 0) + step_away(H,T) + step_away(H,T) + step_away(H,T) + step_away(H,T) + step_away(H,T) + step_away(H,T) + return + +/datum/reagent/liquid_dark_matter + name = "Liquid Dark Matter" + id = "liquid_dark_matter" + description = "Sucks everything into the detonation point." + reagent_state = LIQUID + color = "#60A584" // rgb: 96, 165, 132 + +/datum/chemical_reaction/liquid_dark_matter + name = "Liquid Dark Matter" + id = "liquid_dark_matter" + result = "liquid_dark_matter" + required_reagents = list("stable_plasma" = 1, "radium" = 1, "carbon" = 1) + result_amount = 3 + required_temp = 474 + +/datum/reagent/liquid_dark_matter/reaction_turf(var/turf/simulated/T, var/volume) + if(istype(T, /turf/simulated/floor/)) + for(var/atom/X in orange(5,T)) + if(istype(X, /atom/movable)) + if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human))) + step_towards(X,T) + step_towards(X,T) + step_towards(X,T) + else if(istype(X,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = X + if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) + var/obj/item/clothing/shoes/magboots/M = H.shoes + if(M.magpulse) + continue + H.apply_effect(1, WEAKEN, 0) + step_towards(H,T) + step_towards(H,T) + step_towards(H,T) + return +/datum/reagent/liquid_dark_matter/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + var/turf/simulated/T = get_turf(M) + for(var/atom/X in orange(5,T)) + if(istype(X, /atom/movable)) + if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human))) + step_towards(X,T) + step_towards(X,T) + step_towards(X,T) + else if(istype(X,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = X + if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) + var/obj/item/clothing/shoes/magboots/S = H.shoes + if(S.magpulse) + continue + H.apply_effect(1, WEAKEN, 0) + step_towards(H,T) + step_towards(H,T) + step_towards(H,T) + return +/datum/chemical_reaction/liquid_dark_matter/on_reaction(var/datum/reagents/holder, var/created_volume) + var/turf/simulated/T = get_turf(holder.my_atom) + for(var/atom/X in orange(5,T)) + if(istype(X, /atom/movable)) + if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human))) + step_towards(X,T) + step_towards(X,T) + step_towards(X,T) + step_towards(X,T) + step_towards(X,T) + step_towards(X,T) + else if(istype(X,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = X + if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) + var/obj/item/clothing/shoes/magboots/M = H.shoes + if(M.magpulse) + continue + H.apply_effect(1, WEAKEN, 0) + step_towards(H,T) + step_towards(H,T) + step_towards(H,T) + step_towards(H,T) + step_towards(H,T) + step_towards(H,T) + return \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Goon-Readme.dm b/code/modules/reagents/Chemistry-Goon-Readme.dm index 48dfd2c50f7..0731e28ba93 100644 --- a/code/modules/reagents/Chemistry-Goon-Readme.dm +++ b/code/modules/reagents/Chemistry-Goon-Readme.dm @@ -5,4 +5,30 @@ THE REQUESTED DON'T PORT LIST: IF YOU PORT THESE THE GOONS WILL MURDER US IN OUR SLEEP SO PLEASE DON'T KTHX - Iamgoofball Any of the Secret Chems Goon in-joke chems (Eg. Cat Drugs, Hairgrownium) + Liquid Electricity + Rajajajah + + +/datum/reagent/blankgoonchembase + name = "blank goonchem base" + id = "blankgoonchembase" + description = "A blank chem" + reagent_state = LIQUID + color = "#60A584" // rgb: 96, 165, 132 + + +/datum/reagent/blankgoonchembase/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + ..() + return + +/datum/chemical_reaction/blankgoonchembase + name = "blank goonchem base" + id = "blankgoonchembase" + result = "blankgoonchembase" + required_reagents = list("diphenhydramine" = 1, "morphine" = 1, "cleaner" = 1) + result_amount = 3 + mix_message = "The mixture dries into a pale blue powder." + required_temp = 420 + */ \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Goon-Toxins.dm b/code/modules/reagents/Chemistry-Goon-Toxins.dm index 90aeb08900a..6179a1a7edd 100644 --- a/code/modules/reagents/Chemistry-Goon-Toxins.dm +++ b/code/modules/reagents/Chemistry-Goon-Toxins.dm @@ -10,7 +10,7 @@ datum/reagent/polonium description = "A toxic chemical." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 - metabolize_rate = 0.1 + metabolization_rate = 0.1 datum/reagent/polonium/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -25,7 +25,7 @@ datum/reagent/histamine description = "A toxic chemical." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 - metabolize_rate = 0.2 + metabolization_rate = 0.2 datum/reagent/histamine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -78,7 +78,7 @@ datum/reagent/venom description = "A toxic chemical." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 - metabolize_rate = 0.2 + metabolization_rate = 0.2 datum/reagent/venom/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom M.adjustToxLoss((0.1*volume)*REM) @@ -96,7 +96,7 @@ datum/reagent/neurotoxin2 reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 var/cycle_count = 0 - metabolize_rate = 1 + metabolization_rate = 1 datum/reagent/neurotoxin2/on_mob_life(var/mob/living/M as mob) cycle_count++ @@ -123,7 +123,7 @@ datum/reagent/cyanide description = "A highly toxic chemical." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 - metabolize_rate = 0.1 + metabolization_rate = 0.1 datum/reagent/cyanide/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -145,12 +145,12 @@ datum/reagent/cyanide/on_mob_life(var/mob/living/M as mob) required_temp = 380 /datum/reagent/questionmark // food poisoning - name = "????" + name = "Bad Food" id = "????" description = "????" reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 - metabolize_rate = 0.2 + metabolization_rate = 0.2 datum/reagent/questionmark/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 0e1caeae7ac..842616eeb59 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -11,15 +11,15 @@ icon_state = "dispenser" use_power = 1 idle_power_usage = 40 - var/energy = 50 - var/max_energy = 50 + var/energy = 100 + var/max_energy = 100 var/amount = 30 var/beaker = null var/recharged = 0 - var/recharge_delay = 15 //Time it game ticks between recharges + var/recharge_delay = 5 //Time it game ticks between recharges var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine", "sodium","aluminium","silicon","phosphorus","sulfur","chlorine","potassium","iron", - "copper","mercury","radium","water","ethanol","sugar","sacid","fuel","silver","iodine","bromine","fluorine") + "copper","mercury","radium","water","ethanol","sugar","sacid","fuel","silver","iodine","bromine","fluorine","stable_plasma") /obj/machinery/chem_dispenser/proc/recharge() if(stat & (BROKEN|NOPOWER)) return @@ -1267,8 +1267,8 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) if(!beaker) user << "Please insert a beaker." return - var/temperature = input("Please input desired temperature between 1 and 1000.", name, set_temp) as num - if(temperature > 1000 || temperature < 1) + var/temperature = input("Please input desired temperature between 1 and 3000.", name, set_temp) as num + if(temperature > 3000 || temperature < 1) user << "Invalid temperature." return user << "Adjusting chemical temperature..." @@ -1279,4 +1279,4 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) B.loc = get_turf(src) beaker = null icon_state = "mixer0b" - B.reagents.handle_reactions() + B.reagents.handle_reactions() diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm index 2151bbec53f..daa8f92ccd9 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm @@ -23,6 +23,7 @@ datum/reagent //var/list/viruses = list() var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!) var/metabolization_rate = REAGENTS_METABOLISM + var/overrides_metab = 0 datum/reagent/proc/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //By default we have a chance to transfer some if(!istype(M, /mob/living)) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index ab30aa772f6..7b7f6481c90 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -15,6 +15,7 @@ var/list/can_be_placed_into = list( /obj/machinery/chem_master/, /obj/machinery/chem_dispenser/, + /obj/machinery/chem_heater/, /obj/machinery/reagentgrinder, /obj/structure/table, /obj/structure/closet, diff --git a/tgstation.dme b/tgstation.dme index 871d19aeab2..e06505910d0 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1255,6 +1255,7 @@ #include "code\modules\reagents\Chemistry-Goon-420BlazeIt.dm" #include "code\modules\reagents\Chemistry-Goon-Medicine.dm" #include "code\modules\reagents\Chemistry-Goon-Other.dm" +#include "code\modules\reagents\Chemistry-Goon-Pyrotechnics.dm" #include "code\modules\reagents\Chemistry-Goon-Readme.dm" #include "code\modules\reagents\Chemistry-Goon-Toxins.dm" #include "code\modules\reagents\Chemistry-Holder.dm" From d662ae712983d4da848d10b62c4b0a538fe2b215 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Sun, 11 Jan 2015 09:52:38 -0800 Subject: [PATCH 04/19] Changes up the Chem Heater. --- code/modules/reagents/Chemistry-Holder.dm | 2 +- code/modules/reagents/Chemistry-Machinery.dm | 32 ++++++++++++++------ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 049ae23f053..dde04bfbc43 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -10,7 +10,7 @@ datum/reagents var/total_volume = 0 var/maximum_volume = 100 var/atom/my_atom = null - var/chem_temp = 100 + var/chem_temp = 150 datum/reagents/New(maximum=100) maximum_volume = maximum diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 842616eeb59..3655cceaf5c 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -269,6 +269,7 @@ spawn(rand(0, 15)) stat |= NOPOWER + /obj/machinery/chem_master/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob) if(default_unfasten_wrench(user, B)) @@ -1243,8 +1244,26 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) var/energy = 50 var/max_energy = 50 var/amount = 30 - var/beaker = null + var/obj/item/weapon/reagent_containers/beaker = null var/set_temp + var/temperature + var/on = FALSE + +/obj/machinery/chem_heater/process() + ..() + if(on) + if(beaker) + if(beaker.reagents.chem_temp > temperature) + beaker.reagents.chem_temp-- + if(beaker.reagents.chem_temp < temperature) + beaker.reagents.chem_temp++ + if(beaker.reagents.chem_temp == temperature) + beaker.loc = get_turf(src) + beaker = null + icon_state = "mixer0b" + beaker.reagents.handle_reactions() + on = FALSE + /obj/machinery/chem_heater/attackby(var/obj/item/weapon/reagent_containers/glass/B as obj, var/mob/user as mob) if(isrobot(user)) @@ -1267,16 +1286,9 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) if(!beaker) user << "Please insert a beaker." return - var/temperature = input("Please input desired temperature between 1 and 3000.", name, set_temp) as num + temperature = input("Please input desired temperature between 1 and 3000.", name, set_temp) as num if(temperature > 3000 || temperature < 1) user << "Invalid temperature." return user << "Adjusting chemical temperature..." - sleep(50) - var/obj/item/weapon/reagent_containers/B = beaker - B.reagents.chem_temp = temperature - user << "Chemical adjusted to [temperature]K." - B.loc = get_turf(src) - beaker = null - icon_state = "mixer0b" - B.reagents.handle_reactions() + on = TRUE From 253a3859b9a257288f04b9e8a502fe48bca4532c Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Sun, 11 Jan 2015 09:55:34 -0800 Subject: [PATCH 05/19] Fuck you merge conflicts --- code/modules/reagents/reagent_containers/glass/bottle.dm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index 997b8f3e0f9..efd7b35ccd8 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -205,7 +205,6 @@ icon_state = "bottle3" spawned_disease = /datum/disease/anxiety -<<<<<<< HEAD /obj/item/weapon/reagent_containers/glass/bottle/frostoil name = "Frost Oil Bottle" desc = "A small bottle. Contains cold sauce." @@ -224,11 +223,10 @@ /obj/item/weapon/reagent_containers/glass/bottle/traitor/New() ..() var/new_reagent = pick("polonium", "histamine", "formaldehyde", "venom", "neurotoxin2", "cyanide") - reagents.add_reagent(new_reagent, 50) -======= + reagents.add_reagent(new_reagent, 50) + /obj/item/weapon/reagent_containers/glass/bottle/beesease name = "Beesease culture bottle" desc = "A small bottle. Contains a sample of invasive Apidae." icon_state = "bottle3" spawned_disease = /datum/disease/beesease ->>>>>>> cd3e08f624974076be926c5e311cc488ece7133d From 097689e16a779990fb62d32ff35fa8ea72872108 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Sun, 11 Jan 2015 10:33:19 -0800 Subject: [PATCH 06/19] Makes CLF3 work, fixes the Heater, adds Chemical Patches --- .../reagents/Chemistry-Goon-Pyrotechnics.dm | 4 +-- code/modules/reagents/Chemistry-Machinery.dm | 24 +++++++++++++++--- .../reagents/reagent_containers/patch.dm | 17 +++++++++++++ .../reagents/reagent_containers/pill.dm | 14 +++++----- icons/obj/chemical.dmi | Bin 30781 -> 31123 bytes 5 files changed, 48 insertions(+), 11 deletions(-) create mode 100644 code/modules/reagents/reagent_containers/patch.dm diff --git a/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm b/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm index 9f734b0b4bb..5202f37bf16 100644 --- a/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm +++ b/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm @@ -27,8 +27,8 @@ /datum/chemical_reaction/clf3/on_reaction(var/datum/reagents/holder, var/created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - if(istype(T)) - T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, created_volume) + for(var/turf/simulated/turf in orange(1,T)) + new /obj/effect/hotspot(turf) return /datum/reagent/clf3/reaction_turf(var/turf/simulated/T, var/volume) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 5265d89b3f4..8b5d1b11919 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -423,6 +423,22 @@ else var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc) reagents.trans_to(P,50) + else if (href_list["createpatch"]) //Also used for condiment packs. + if(reagents.total_volume == 0) return + var/amount = 1 + var/vol_each = min(reagents.total_volume, 50) + if(text2num(href_list["many"])) + amount = min(max(round(input(usr, "Amount:", "How many patches?") as num), 1), 10) + vol_each = min(reagents.total_volume/amount, 50) + var/name = reject_bad_text(input(usr,"Name:","Name your patch!", "[reagents.get_master_reagent_name()] ([vol_each]u)")) + var/obj/item/weapon/reagent_containers/pill/P + + for(var/i = 0; i < amount; i++) + P = new/obj/item/weapon/reagent_containers/pill/patch(src.loc) + if(!name) name = reagents.get_master_reagent_name() + P.name = "[name] patch" + P.pixel_x = rand(-7, 7) //random position + P.pixel_y = rand(-7, 7) src.updateUsrDialog() return @@ -480,6 +496,8 @@ if(!condi) dat += "

Create pill (50 units max)
" dat += "Create pills (10 pills max)

" + dat += "

Create patch (50 units max)
" + dat += "Create patches (10 patches max)

" dat += "Create bottle (30 units max)" else dat += "

Create pack (10 units max)
" @@ -1261,14 +1279,14 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) if(on) if(beaker) if(beaker.reagents.chem_temp > temperature) - beaker.reagents.chem_temp-- + beaker.reagents.chem_temp -= 2 if(beaker.reagents.chem_temp < temperature) - beaker.reagents.chem_temp++ + beaker.reagents.chem_temp += 2 if(beaker.reagents.chem_temp == temperature) beaker.loc = get_turf(src) + beaker.reagents.handle_reactions() beaker = null icon_state = "mixer0b" - beaker.reagents.handle_reactions() on = FALSE diff --git a/code/modules/reagents/reagent_containers/patch.dm b/code/modules/reagents/reagent_containers/patch.dm new file mode 100644 index 00000000000..025bebfcb16 --- /dev/null +++ b/code/modules/reagents/reagent_containers/patch.dm @@ -0,0 +1,17 @@ +/obj/item/weapon/reagent_containers/pill/patch + name = "chemical patch" + desc = "A chemical patch for touch based applications." + icon = 'icons/obj/chemical.dmi' + icon_state = "bandaid" + item_state = "bandaid" + possible_transfer_amounts = null + volume = 50 + var/apply_type = TOUCH + var/apply_method = "apply" + +/obj/item/weapon/reagent_containers/pill/patch/New() + ..() + icon_state = "bandaid" // thanks inheritance + +/obj/item/weapon/reagent_containers/pill/patch/afterattack(obj/target, mob/user , proximity) + return // thanks inheritance again \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 8e5959295c4..14bf4ac5a7f 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -9,6 +9,8 @@ item_state = "pill" possible_transfer_amounts = null volume = 50 + var/apply_type = INGEST + var/apply_method = "swallow" /obj/item/weapon/reagent_containers/pill/New() ..() @@ -25,16 +27,16 @@ return 0 if(M == user) - M << "You swallow [src]." + M << "You [apply_method] [src]." else - M.visible_message("[user] attempts to force [M] to swallow [src].", \ - "[user] attempts to force [M] to swallow [src].") + M.visible_message("[user] attempts to force [M] to [apply_method] [src].", \ + "[user] attempts to force [M] to [apply_method] [src].") if(!do_mob(user, M)) return - M.visible_message("[user] forces [M] to swallow [src].", \ - "[user] forces [M] to swallow [src].") + M.visible_message("[user] forces [M] to [apply_method] [src].", \ + "[user] forces [M] to [apply_method] [src].") user.unEquip(src) //icon update @@ -42,7 +44,7 @@ loc = M //Put the pill inside the mob. This fixes the issue where the pill appears to drop to the ground after someone eats it. if(reagents.total_volume) - reagents.reaction(M, INGEST) + reagents.reaction(M, apply_type) spawn(5) reagents.trans_to(M, reagents.total_volume) qdel(src) diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index af5e4e68ac55a0074b61b5f71fc75a42b034ee25..c6e7bd5222de166013e45725da0724a82bef4808 100644 GIT binary patch delta 12778 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 delta 12452 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 UlYLC62B5!(YEM)vRjeca55{7TumAu6 From ea23814a9473fdb9660f45af0fbd5ac88b0ee37b Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Sun, 11 Jan 2015 11:17:32 -0800 Subject: [PATCH 07/19] Goon Chemistry Commit 4 Adds epipen as per request by @quiltyquilty Quick-fix for Krokodil making you into a zombie, your skin falls off, you don't become a zombie Adds a Morphine medipen as per request of @paprika Accidentally added frost oil bottles back in while trying to fix a merge conflict, whoops. forgot to remove cyanide since we replaced it with the goon variant Fixes and Tweaks --- .../reagents/Chemistry-Goon-420BlazeIt.dm | 2 +- .../reagents/Chemistry-Goon-Medicine.dm | 6 ++-- code/modules/reagents/Chemistry-Machinery.dm | 29 ++++++++++--------- .../Chemistry-Reagents/Toxin-Reagents.dm | 13 --------- .../reagent_containers/glass/bottle.dm | 9 ------ .../reagents/reagent_containers/hypospray.dm | 23 +++++++++++---- .../reagents/reagent_containers/patch.dm | 4 +-- tgstation.dme | 1 + 8 files changed, 39 insertions(+), 48 deletions(-) diff --git a/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm index 5d03c9d63db..81352513396 100644 --- a/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm +++ b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm @@ -81,7 +81,7 @@ datum/reagent/crank/on_mob_life(var/mob/living/M as mob) if(cycle_count == 50) M << "Your skin falls off!" M.adjustBruteLoss(rand(10,30)*REM) - hardset_dna(M, null, null, null, null, /datum/species/zombie) + hardset_dna(M, null, null, null, null, /datum/species/skeleton) if(volume > 20) overdosed = 1 if(overdosed) diff --git a/code/modules/reagents/Chemistry-Goon-Medicine.dm b/code/modules/reagents/Chemistry-Goon-Medicine.dm index ea8b46c4f3c..065e634567f 100644 --- a/code/modules/reagents/Chemistry-Goon-Medicine.dm +++ b/code/modules/reagents/Chemistry-Goon-Medicine.dm @@ -19,7 +19,7 @@ datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/meth M.emote("scream") if(method == INGEST) M.adjustToxLoss(0.5*volume) - M << "You probably shouldn't of eaten that. Maybe you should of splashed it on?" + M << "You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?" ..() return @@ -38,7 +38,7 @@ datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TO M.emote("scream") if(method == INGEST) M.adjustToxLoss(0.5*volume) - M << "You probably shouldn't of eaten that. Maybe you should of splashed it on?" + M << "You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?" ..() return @@ -122,7 +122,7 @@ datum/reagent/charcoal/on_mob_life(var/mob/living/M as mob) id = "styptic_powder" result = "styptic_powder" required_reagents = list("aluminium" = 1, "hydrogen" = 1, "oxygen" = 1, "sacid" = 1) - result_amount = 2 + result_amount = 4 mix_message = "The solution yields an astringent powder." datum/reagent/omnizine diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 8b5d1b11919..8626ab7301c 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -423,22 +423,23 @@ else var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc) reagents.trans_to(P,50) - else if (href_list["createpatch"]) //Also used for condiment packs. + else if(href_list["createpatch"]) if(reagents.total_volume == 0) return - var/amount = 1 - var/vol_each = min(reagents.total_volume, 50) - if(text2num(href_list["many"])) - amount = min(max(round(input(usr, "Amount:", "How many patches?") as num), 1), 10) - vol_each = min(reagents.total_volume/amount, 50) - var/name = reject_bad_text(input(usr,"Name:","Name your patch!", "[reagents.get_master_reagent_name()] ([vol_each]u)")) - var/obj/item/weapon/reagent_containers/pill/P + var/amount = 1 + var/vol_each = min(reagents.total_volume, 50) + if(text2num(href_list["many"])) + amount = min(max(round(input(usr, "Amount:", "How many patches?") as num), 1), 10) + vol_each = min(reagents.total_volume/amount, 50) + var/name = reject_bad_text(input(usr,"Name:","Name your patch!", "[reagents.get_master_reagent_name()] ([vol_each]u)")) + var/obj/item/weapon/reagent_containers/pill/P - for(var/i = 0; i < amount; i++) - P = new/obj/item/weapon/reagent_containers/pill/patch(src.loc) - if(!name) name = reagents.get_master_reagent_name() - P.name = "[name] patch" - P.pixel_x = rand(-7, 7) //random position - P.pixel_y = rand(-7, 7) + for(var/i = 0; i < amount; i++) + P = new/obj/item/weapon/reagent_containers/pill/patch(src.loc) + if(!name) name = reagents.get_master_reagent_name() + P.name = "[name] patch" + P.pixel_x = rand(-7, 7) //random position + P.pixel_y = rand(-7, 7) + reagents.trans_to(P,vol_each) src.updateUsrDialog() return diff --git a/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm index d58815700bf..9dccb444c59 100644 --- a/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm @@ -121,19 +121,6 @@ datum/reagent/toxin/slimejelly/on_mob_life(var/mob/living/M as mob) ..() return -datum/reagent/toxin/cyanide - name = "Cyanide" - id = "cyanide" - description = "A highly toxic chemical." - color = "#CF3600" // rgb: 207, 54, 0 - toxpwr = 3 - -datum/reagent/toxin/cyanide/on_mob_life(var/mob/living/M as mob) - M.adjustOxyLoss(3*REM) - M.sleeping += 1 - ..() - return - datum/reagent/toxin/minttoxin name = "Mint Toxin" id = "minttoxin" diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index efd7b35ccd8..8e1a6e0fb4c 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -205,15 +205,6 @@ icon_state = "bottle3" spawned_disease = /datum/disease/anxiety -/obj/item/weapon/reagent_containers/glass/bottle/frostoil - name = "Frost Oil Bottle" - desc = "A small bottle. Contains cold sauce." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle17" - New() - ..() - reagents.add_reagent("frostoil", 30) - /obj/item/weapon/reagent_containers/glass/bottle/traitor name = "syndicate bottle" desc = "A small bottle. Contains a random nasty chemical." diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 96b69d1c9ff..7c4f5909607 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -69,10 +69,11 @@ volume = 10 ignore_flags = 1 //so you can medipen through hardsuits flags = null + var/starting_reagent = "inaprovaline" /obj/item/weapon/reagent_containers/hypospray/medipen/New() ..() - reagents.add_reagent("inaprovaline", 10) + reagents.add_reagent(starting_reagent, 10) update_icon() return @@ -100,11 +101,10 @@ name = "leporazine medipen" desc = "A rapid way to regulate your body's temperature in the event of a hardsuit malfunction at the cost of some shortness of breath." icon_state = "lepopen" + starting_reagent = "leporazine" /obj/item/weapon/reagent_containers/hypospray/medipen/leporazine/New() ..() - reagents.remove_reagent("inaprovaline", 10) - reagents.add_reagent("leporazine", 9) reagents.add_reagent("lexorin", 1) update_icon() return @@ -113,11 +113,22 @@ name = "stimpack medipen" desc = "A rapid way to stimulate your body's adrenaline, allowing for freer movement in restrictive armor at the cost of some shortness of breath." icon_state = "stimpen" + starting_reagent = "hyperzine" /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack/New() ..() - reagents.remove_reagent("inaprovaline", 10) - reagents.add_reagent("hyperzine", 9) reagents.add_reagent("lexorin", 1) update_icon() - return \ No newline at end of file + return + +/obj/item/weapon/reagent_containers/hypospray/medipen/morphine + name = "morphine medipen" + desc = "A rapid way to get you out of a tight situation and fast! You'll feel rather drowsy, though." + icon_state = "medipen" + starting_reagent = "morphine" + +/obj/item/weapon/reagent_containers/hypospray/medipen/ephedrine + name = "ephedrine medipen" + desc = "A rapid way to get you up and out of a tight situation and fast!" + icon_state = "medipen" + starting_reagent = "ephedrine" \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/patch.dm b/code/modules/reagents/reagent_containers/patch.dm index 025bebfcb16..dae7d54156a 100644 --- a/code/modules/reagents/reagent_containers/patch.dm +++ b/code/modules/reagents/reagent_containers/patch.dm @@ -6,8 +6,8 @@ item_state = "bandaid" possible_transfer_amounts = null volume = 50 - var/apply_type = TOUCH - var/apply_method = "apply" + apply_type = TOUCH + apply_method = "apply" /obj/item/weapon/reagent_containers/pill/patch/New() ..() diff --git a/tgstation.dme b/tgstation.dme index a959edb56c0..68d97de77f3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1291,6 +1291,7 @@ #include "code\modules\reagents\reagent_containers\dropper.dm" #include "code\modules\reagents\reagent_containers\glass.dm" #include "code\modules\reagents\reagent_containers\hypospray.dm" +#include "code\modules\reagents\reagent_containers\patch.dm" #include "code\modules\reagents\reagent_containers\pill.dm" #include "code\modules\reagents\reagent_containers\spray.dm" #include "code\modules\reagents\reagent_containers\syringes.dm" From f527d53e3e78e2125141c099276c110a8557e7a2 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Mon, 12 Jan 2015 19:01:52 -0800 Subject: [PATCH 08/19] Increases the cigarette chemical cap as per request by @Miauw62 --- code/game/objects/items/weapons/cigs_lighters.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index e9f9a2f6864..01a96fbf6c6 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -108,7 +108,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/type_butt = /obj/item/weapon/cigbutt var/lastHolder = null var/smoketime = 300 - var/chem_volume = 15 + var/chem_volume = 30 /obj/item/clothing/mask/cigarette/New() ..() From 5a91ce4fee66de58c93fd82dbd386f9abdbe77dc Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Mon, 12 Jan 2015 20:38:56 -0800 Subject: [PATCH 09/19] Requested changes by @Cheridan --- code/datums/uplink_item.dm | 6 +- .../items/weapons/storage/uplink_kits.dm | 13 ++ .../reagents/Chemistry-Goon-Pyrotechnics.dm | 132 +++--------------- .../reagent_containers/glass/bottle.dm | 42 ++++++ 4 files changed, 77 insertions(+), 116 deletions(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 189e87df822..c1ab434fd07 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -314,9 +314,9 @@ var/list/uplink_items = list() surplus = 50 /datum/uplink_item/stealthy_weapons/traitor_chem_bottle - name = "Poison Bottle" - desc = "A small bottle. Contains a random nasty chemical." - item = /obj/item/weapon/reagent_containers/glass/bottle/traitor + name = "Poison Kit" + desc = "An assortment of nasty chemicals." + item = /obj/item/weapon/storage/box/syndie_kit/chemical cost = 2 surplus = 50 diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 95318319f48..e3ed3af1d42 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -161,4 +161,17 @@ new /obj/item/weapon/grenade/empgrenade(src) new /obj/item/weapon/implanter/emp/(src) new /obj/item/device/flashlight/emp/(src) + return + +/obj/item/weapon/storage/box/syndie_kit/chemical + name = "boxed chemical kit" + +/obj/item/weapon/storage/box/syndie_kit/chemical/New() + ..() + new /obj/item/weapon/reagent_containers/glass/bottle/polonium(src) + new /obj/item/weapon/reagent_containers/glass/bottle/venom(src) + new /obj/item/weapon/reagent_containers/glass/bottle/neurotoxin2(src) + new /obj/item/weapon/reagent_containers/glass/bottle/formaldehyde(src) + new /obj/item/weapon/reagent_containers/glass/bottle/cyanide(src) + new /obj/item/weapon/reagent_containers/glass/bottle/histamine(src) return \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm b/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm index 5202f37bf16..6edcc664817 100644 --- a/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm +++ b/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm @@ -64,71 +64,18 @@ /datum/reagent/sorium/reaction_turf(var/turf/simulated/T, var/volume) if(istype(T, /turf/simulated/floor/)) - for(var/atom/X in orange(5,T)) - if(istype(X, /atom/movable)) - if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human))) - step_away(X,T) - step_away(X,T) - step_away(X,T) - else if(istype(X,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = X - if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) - var/obj/item/clothing/shoes/magboots/M = H.shoes - if(M.magpulse) - continue - H.apply_effect(1, WEAKEN, 0) - step_away(H,T) - step_away(H,T) - step_away(H,T) - return + goonchem_vortex(T, 1, 5, 3) /datum/reagent/sorium/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) if(!istype(M, /mob/living)) return if(method == TOUCH) var/turf/simulated/T = get_turf(M) - for(var/atom/X in orange(5,T)) - if(istype(X, /atom/movable)) - if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human))) - step_away(X,T) - step_away(X,T) - step_away(X,T) - else if(istype(X,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = X - if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) - var/obj/item/clothing/shoes/magboots/S = H.shoes - if(S.magpulse) - continue - H.apply_effect(1, WEAKEN, 0) - step_away(H,T) - step_away(H,T) - step_away(H,T) - return + goonchem_vortex(T, 1, 5, 3) + /datum/chemical_reaction/sorium/on_reaction(var/datum/reagents/holder, var/created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - for(var/atom/X in orange(5,T)) - if(istype(X, /atom/movable)) - if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human))) - step_away(X,T) - step_away(X,T) - step_away(X,T) - step_away(X,T) - step_away(X,T) - step_away(X,T) - else if(istype(X,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = X - if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) - var/obj/item/clothing/shoes/magboots/M = H.shoes - if(M.magpulse) - continue - H.apply_effect(1, WEAKEN, 0) - step_away(H,T) - step_away(H,T) - step_away(H,T) - step_away(H,T) - step_away(H,T) - step_away(H,T) - return + goonchem_vortex(T, 1, 5, 6) /datum/reagent/liquid_dark_matter name = "Liquid Dark Matter" @@ -147,67 +94,26 @@ /datum/reagent/liquid_dark_matter/reaction_turf(var/turf/simulated/T, var/volume) if(istype(T, /turf/simulated/floor/)) - for(var/atom/X in orange(5,T)) - if(istype(X, /atom/movable)) - if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human))) - step_towards(X,T) - step_towards(X,T) - step_towards(X,T) - else if(istype(X,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = X - if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) - var/obj/item/clothing/shoes/magboots/M = H.shoes - if(M.magpulse) - continue - H.apply_effect(1, WEAKEN, 0) - step_towards(H,T) - step_towards(H,T) - step_towards(H,T) - return + goonchem_vortex(T, 0, 5, 3) + return /datum/reagent/liquid_dark_matter/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) if(!istype(M, /mob/living)) return if(method == TOUCH) var/turf/simulated/T = get_turf(M) - for(var/atom/X in orange(5,T)) - if(istype(X, /atom/movable)) - if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human))) - step_towards(X,T) - step_towards(X,T) - step_towards(X,T) - else if(istype(X,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = X - if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) - var/obj/item/clothing/shoes/magboots/S = H.shoes - if(S.magpulse) - continue - H.apply_effect(1, WEAKEN, 0) - step_towards(H,T) - step_towards(H,T) - step_towards(H,T) - return + goonchem_vortex(T, 0, 5, 3) + return /datum/chemical_reaction/liquid_dark_matter/on_reaction(var/datum/reagents/holder, var/created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - for(var/atom/X in orange(5,T)) + goonchem_vortex(T, 0, 5, 6) + return + +proc/goonchem_vortex(var/turf/simulated/T, var/setting_type, var/range, var/pull_times) + for(var/atom/movable/X in orange(range, T)) if(istype(X, /atom/movable)) - if((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human))) - step_towards(X,T) - step_towards(X,T) - step_towards(X,T) - step_towards(X,T) - step_towards(X,T) - step_towards(X,T) - else if(istype(X,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = X - if(istype(H.shoes,/obj/item/clothing/shoes/magboots)) - var/obj/item/clothing/shoes/magboots/M = H.shoes - if(M.magpulse) - continue - H.apply_effect(1, WEAKEN, 0) - step_towards(H,T) - step_towards(H,T) - step_towards(H,T) - step_towards(H,T) - step_towards(H,T) - step_towards(H,T) - return \ No newline at end of file + if((X)) + if(setting_type) + for(var/i = 0, i < pull_times, i++) + step_towards(X,T) + else + X.throw_at(T) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index 8e1a6e0fb4c..8beb5518ac3 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -216,6 +216,48 @@ var/new_reagent = pick("polonium", "histamine", "formaldehyde", "venom", "neurotoxin2", "cyanide") reagents.add_reagent(new_reagent, 50) +/obj/item/weapon/reagent_containers/glass/bottle/polonium + name = "polonium bottle" + desc = "A small bottle. Contains Polonium." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle16" + spawned_reagent = "polonium" + +/obj/item/weapon/reagent_containers/glass/bottle/venom + name = "venom bottle" + desc = "A small bottle. Contains Venom." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle16" + spawned_reagent = "venom" + +/obj/item/weapon/reagent_containers/glass/bottle/neurotoxin2 + name = "neurotoxin bottle" + desc = "A small bottle. Contains Neurotoxin." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle16" + spawned_reagent = "neurotoxin2" + +/obj/item/weapon/reagent_containers/glass/bottle/formaldehyde + name = "formaldehyde bottle" + desc = "A small bottle. Contains Formaldehyde." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle16" + spawned_reagent = "formaldehyde" + +/obj/item/weapon/reagent_containers/glass/bottle/cyanide + name = "cyanide bottle" + desc = "A small bottle. Contains Cyanide." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle16" + spawned_reagent = "cyanide" + +/obj/item/weapon/reagent_containers/glass/bottle/histamine + name = "histamine bottle" + desc = "A small bottle. Contains Histamine." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle16" + spawned_reagent = "histamine" + /obj/item/weapon/reagent_containers/glass/bottle/beesease name = "Beesease culture bottle" desc = "A small bottle. Contains a sample of invasive Apidae." From 470ef28c11f5524b2c7a0c28d63714e059adc36b Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Mon, 12 Jan 2015 21:12:38 -0800 Subject: [PATCH 10/19] Adds a changelog and reduces drug text spam. --- code/modules/reagents/Chemistry-Goon-420BlazeIt.dm | 6 +++--- html/changelogs/Iamgoofball.yml | 13 +++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 html/changelogs/Iamgoofball.yml diff --git a/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm index 81352513396..55d67106277 100644 --- a/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm +++ b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm @@ -14,7 +14,7 @@ datum/reagent/nicotine datum/reagent/nicotine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom var/smoke_message = pick("You can just feel your lungs dying!", "You feel relaxed.", "You feel calmed.", "You feel the lung cancer forming.", "You feel the money you wasted.", "You feel like a space cowboy.", "You feel rugged.") - if(prob(30)) + if(prob(5)) M << smoke_message M.AdjustStunned(-1) M.adjustStaminaLoss(-1*REM) @@ -34,7 +34,7 @@ datum/reagent/crank datum/reagent/crank/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom var/high_message = pick("You feel jittery.", "You feel like you gotta go fast.", "You feel like you need to step it up.") - if(prob(30)) + if(prob(5)) M << high_message M.AdjustParalysis(-2) M.AdjustStunned(-2) @@ -68,7 +68,7 @@ datum/reagent/crank/on_mob_life(var/mob/living/M as mob) /datum/reagent/krokodil/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.") - if(prob(30)) + if(prob(5)) M << high_message if(prob(10)) M.adjustBrainLoss(rand(1,5)*REM) diff --git a/html/changelogs/Iamgoofball.yml b/html/changelogs/Iamgoofball.yml new file mode 100644 index 00000000000..33e3b134745 --- /dev/null +++ b/html/changelogs/Iamgoofball.yml @@ -0,0 +1,13 @@ +author: Iamgootball +delete-after: true +changes: + - rscadd: "Added Goonstation Chemistry!" + - rscadd: "Adds 13 medicines!" + - rscadd: "Adds 3 pyrotechnics!" + - rscadd: "Adds 3 drugs with actual gameplay uses!" + - rscadd: "Adds 7 toxins!" + - rscadd: "Adds a Chemical Heater for some new recipes!" + - rscadd: "Adds Chemical Patches for touch based applications!" + - rscadd: "Adds a Traitor Poison Bottle!" + - rscadd: "Adds Morphine Medipens!" + - rscadd: "Adds Morphine bottles to Cargo!" From 5d6a177dda67527949d52b78dabffda7a6c2590d Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Mon, 12 Jan 2015 21:14:00 -0800 Subject: [PATCH 11/19] Whoops, gotta adjust the changelog again. --- html/changelogs/Iamgoofball.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/changelogs/Iamgoofball.yml b/html/changelogs/Iamgoofball.yml index 33e3b134745..523b1f2f49e 100644 --- a/html/changelogs/Iamgoofball.yml +++ b/html/changelogs/Iamgoofball.yml @@ -8,6 +8,6 @@ changes: - rscadd: "Adds 7 toxins!" - rscadd: "Adds a Chemical Heater for some new recipes!" - rscadd: "Adds Chemical Patches for touch based applications!" - - rscadd: "Adds a Traitor Poison Bottle!" + - rscadd: "Adds a Traitor Poison Kit!" - rscadd: "Adds Morphine Medipens!" - rscadd: "Adds Morphine bottles to Cargo!" From 8b39dec424cada030c7e4a5dca2c1edf76ae5c9d Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Tue, 13 Jan 2015 19:06:41 -0800 Subject: [PATCH 12/19] span classes --- code/modules/reagents/Chemistry-Goon-420BlazeIt.dm | 10 +++++----- code/modules/reagents/Chemistry-Goon-Medicine.dm | 10 +++++----- code/modules/reagents/Chemistry-Goon-Toxins.dm | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm index 55d67106277..47d9980482d 100644 --- a/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm +++ b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm @@ -15,7 +15,7 @@ datum/reagent/nicotine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom var/smoke_message = pick("You can just feel your lungs dying!", "You feel relaxed.", "You feel calmed.", "You feel the lung cancer forming.", "You feel the money you wasted.", "You feel like a space cowboy.", "You feel rugged.") if(prob(5)) - M << smoke_message + M << "[high_message]" M.AdjustStunned(-1) M.adjustStaminaLoss(-1*REM) if(volume > 35) @@ -35,7 +35,7 @@ datum/reagent/crank/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom var/high_message = pick("You feel jittery.", "You feel like you gotta go fast.", "You feel like you need to step it up.") if(prob(5)) - M << high_message + M << "[high_message]" M.AdjustParalysis(-2) M.AdjustStunned(-2) M.AdjustWeakened(-2) @@ -69,7 +69,7 @@ datum/reagent/crank/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.") if(prob(5)) - M << high_message + M << "[high_message]" if(prob(10)) M.adjustBrainLoss(rand(1,5)*REM) M.adjustToxLoss(rand(1,5)*REM) @@ -77,9 +77,9 @@ datum/reagent/crank/on_mob_life(var/mob/living/M as mob) M.adjustBrainLoss(rand(1,10)*REM) M.adjustToxLoss(rand(1,10)*REM) if(cycle_count == 20) - M << "Your skin feels loose..." + M << "Your skin feels loose..." if(cycle_count == 50) - M << "Your skin falls off!" + M << "Your skin falls off!" M.adjustBruteLoss(rand(10,30)*REM) hardset_dna(M, null, null, null, null, /datum/species/skeleton) if(volume > 20) diff --git a/code/modules/reagents/Chemistry-Goon-Medicine.dm b/code/modules/reagents/Chemistry-Goon-Medicine.dm index 065e634567f..870fd63c5ec 100644 --- a/code/modules/reagents/Chemistry-Goon-Medicine.dm +++ b/code/modules/reagents/Chemistry-Goon-Medicine.dm @@ -15,11 +15,11 @@ datum/reagent/silver_sulfadiazine datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume) if(method == TOUCH) M.adjustFireLoss((volume-(volume*2))*REM) - M << "You feel your burns healing!" + M << "You feel your burns healing!" M.emote("scream") if(method == INGEST) M.adjustToxLoss(0.5*volume) - M << "You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?" + M << "You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?" ..() return @@ -34,11 +34,11 @@ datum/reagent/styptic_powder datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume) if(method == TOUCH) M.heal_organ_damage(volume*REM,0) - M << "You feel your wounds knitting back together!" + M << "You feel your wounds knitting back together!" M.emote("scream") if(method == INGEST) M.adjustToxLoss(0.5*volume) - M << "You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?" + M << "You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?" ..() return @@ -70,7 +70,7 @@ datum/reagent/synthflesh/reaction_mob(var/mob/living/M, var/method=TOUCH, var/vo if(method == TOUCH) M.heal_organ_damage(volume*REM,0) M.adjustFireLoss((volume-(volume*2)*REM)) - M << "You feel your burns healing and your flesh knitting together!" + M << "You feel your burns healing and your flesh knitting together!" ..() return diff --git a/code/modules/reagents/Chemistry-Goon-Toxins.dm b/code/modules/reagents/Chemistry-Goon-Toxins.dm index 6179a1a7edd..fdce4ac583f 100644 --- a/code/modules/reagents/Chemistry-Goon-Toxins.dm +++ b/code/modules/reagents/Chemistry-Goon-Toxins.dm @@ -36,7 +36,7 @@ datum/reagent/histamine/on_mob_life(var/mob/living/M as mob) if(volume < 20) switch(pick(1, 2, 3)) if(1) - M << "You are unable to look straight!" + M << "You are unable to look straight!" M.Dizzy(10) if(2) M.emote("cough") From 8e9c0080308528105d6ed1e458d7c9459d99e268 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Tue, 13 Jan 2015 19:08:07 -0800 Subject: [PATCH 13/19] forgot to end a span class --- code/modules/reagents/Chemistry-Goon-Medicine.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/Chemistry-Goon-Medicine.dm b/code/modules/reagents/Chemistry-Goon-Medicine.dm index 870fd63c5ec..e5e70cde98e 100644 --- a/code/modules/reagents/Chemistry-Goon-Medicine.dm +++ b/code/modules/reagents/Chemistry-Goon-Medicine.dm @@ -70,7 +70,7 @@ datum/reagent/synthflesh/reaction_mob(var/mob/living/M, var/method=TOUCH, var/vo if(method == TOUCH) M.heal_organ_damage(volume*REM,0) M.adjustFireLoss((volume-(volume*2)*REM)) - M << "You feel your burns healing and your flesh knitting together!" + M << "You feel your burns healing and your flesh knitting together!" ..() return From b80723265d39971065fdd27f46e35dc90b5449e5 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Tue, 13 Jan 2015 20:24:11 -0800 Subject: [PATCH 14/19] Adds an extra chemical, tweaks, fixes, changes to be more accurate to Goonchem. --- .../reagents/Chemistry-Goon-420BlazeIt.dm | 11 ++-- .../reagents/Chemistry-Goon-Medicine.dm | 56 +++++++++++++++++-- .../modules/reagents/Chemistry-Goon-Toxins.dm | 14 ++--- .../reagent_containers/glass/bottle.dm | 5 +- .../reagents/reagent_containers/hypospray.dm | 2 +- 5 files changed, 66 insertions(+), 22 deletions(-) diff --git a/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm index 47d9980482d..3a8a0e7f449 100644 --- a/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm +++ b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm @@ -7,7 +7,7 @@ datum/reagent/nicotine name = "Nicotine" id = "nicotine" - description = "A legal chemical compound used as a drug." + description = "Stun reduction per cycle, slight stamina regeneration buff. Overdoses become rapidly deadly." reagent_state = LIQUID color = "#60A584" // rgb: 96, 165, 132 @@ -15,19 +15,20 @@ datum/reagent/nicotine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom var/smoke_message = pick("You can just feel your lungs dying!", "You feel relaxed.", "You feel calmed.", "You feel the lung cancer forming.", "You feel the money you wasted.", "You feel like a space cowboy.", "You feel rugged.") if(prob(5)) - M << "[high_message]" + M << "[smoke_message]" M.AdjustStunned(-1) M.adjustStaminaLoss(-1*REM) if(volume > 35) M << "You feel like you smoked too much." - M.adjustToxLoss(1*REM) + M.adjustToxLoss(2*REM) + M.adjustOxyLoss(2*REM) ..() return datum/reagent/crank name = "Crank" id = "crank" - description = "A legal chemical compound used as a drug." + description = "2x stun reduction per cycle. Warms you up, makes you jittery as hell." reagent_state = LIQUID color = "#60A584" // rgb: 96, 165, 132 @@ -58,7 +59,7 @@ datum/reagent/crank/on_mob_life(var/mob/living/M as mob) /datum/reagent/krokodil name = "Krokodil" id = "krokodil" - description = "A legal chemical compound used as a drug." + description = "Cools and calms you down, occasional BRAIN and TOX damage." reagent_state = LIQUID color = "#60A584" // rgb: 96, 165, 132 var/cycle_count = 0 diff --git a/code/modules/reagents/Chemistry-Goon-Medicine.dm b/code/modules/reagents/Chemistry-Goon-Medicine.dm index e5e70cde98e..4c83e5a1187 100644 --- a/code/modules/reagents/Chemistry-Goon-Medicine.dm +++ b/code/modules/reagents/Chemistry-Goon-Medicine.dm @@ -23,6 +23,13 @@ datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/meth ..() return +datum/reagent/silver_sulfadiazine/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(prob(55)) + M.adjustFireLoss(-2*REM) + ..() + return + datum/reagent/styptic_powder name = "Styptic Powder" id = "styptic_powder" @@ -42,6 +49,13 @@ datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TO ..() return +datum/reagent/styptic_powder/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + if(prob(55)) + M.adjustBruteLoss(-2*REM) + ..() + return + datum/reagent/salglu_solution name = "Saline-Glucose Solution" id = "salglu_solution" @@ -83,7 +97,10 @@ datum/reagent/charcoal datum/reagent/charcoal/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - M.adjustToxLoss(-2*REM) + M.adjustToxLoss(-1.5*REM) + for(var/datum/reagent/R in M.reagents) + if(M != src) + M.reagents.remove_reagent(R.id,0.5) ..() return @@ -142,6 +159,31 @@ datum/reagent/omnizine/on_mob_life(var/mob/living/M as mob) ..() return +datum/reagent/calomel + name = "Calomel" + id = "calomel" + description = "Increases all depletion rates by 5. +5 TOX damage while health > 20." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + +datum/reagent/calomel/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + for(var/datum/reagent/R in M.reagents) + if(M != src) + M.reagents.remove_reagent(R.id,5) + if(M.health > 20) + M.adjustToxLoss(5*REM) + ..() + return + +/datum/chemical_reaction/calomel + name = "Calomel" + id = "calomel" + result = "calomel" + required_reagents = list("mercury" = 1, "chlorine" = 1) + result_amount = 2 + required_temp = 374 + datum/reagent/potass_iodide name = "Potassium Iodide" id = "potass_iodide" @@ -169,7 +211,7 @@ datum/reagent/potass_iodide/on_mob_life(var/mob/living/M as mob) datum/reagent/pen_acid name = "Pentetic Acid" id = "pen_acid" - description = "80% chance of removing 1 RAD. Radiation is cumulative and causes tox+burn." + description = "Reduces 7 RAD, heals 4 TOX damage, increases all depletion rates by 4. 33% chance of taking 1 unit brute damage" reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 @@ -182,6 +224,9 @@ datum/reagent/pen_acid/on_mob_life(var/mob/living/M as mob) M.adjustBruteLoss(1*REM) if(M.radiation < 0) M.radiation = 0 + for(var/datum/reagent/R in M.reagents) + if(M != src) + M.reagents.remove_reagent(R.id,4) ..() return @@ -295,13 +340,14 @@ datum/reagent/ephedrine/on_mob_life(var/mob/living/M as mob) datum/reagent/diphenhydramine name = "Diphenhydramine" id = "diphenhydramine" - description = "Stun reduction per cycle, increases run speed slightly, minor stamina regeneration buff, stabilizes crit." + description = "Causes a little bit of drowsiness, reduces jitteriness. Raises histamine depletion rates by 3" reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 datum/reagent/diphenhydramine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - M.drowsyness -= 1 + M.drowsyness += 1 M.jitteriness -= 1 + M.reagents.remove_reagent("histamine",3) ..() return @@ -316,7 +362,7 @@ datum/reagent/diphenhydramine/on_mob_life(var/mob/living/M as mob) datum/reagent/morphine name = "Morphine" id = "morphine" - description = "100% chance per cycle of healing 1 point each of OXY and TOX damage." + description = "Dramatically counters movement reduction from severe injury. Reduces jitteriness if someone is shaking like crazy from whatever. Will knock you out within 36 cycles if any remains in you." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 var/cycle_count = 0 diff --git a/code/modules/reagents/Chemistry-Goon-Toxins.dm b/code/modules/reagents/Chemistry-Goon-Toxins.dm index fdce4ac583f..3361df63c77 100644 --- a/code/modules/reagents/Chemistry-Goon-Toxins.dm +++ b/code/modules/reagents/Chemistry-Goon-Toxins.dm @@ -7,7 +7,7 @@ datum/reagent/polonium name = "Polonium" id = "polonium" - description = "A toxic chemical." + description = "+8 RAD." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 metabolization_rate = 0.1 @@ -22,7 +22,7 @@ datum/reagent/polonium/on_mob_life(var/mob/living/M as mob) datum/reagent/histamine name = "Histamine" id = "histamine" - description = "A toxic chemical." + description = "Dose-dependent, ranges from annoying to incredibly lethal." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 metabolization_rate = 0.2 @@ -51,7 +51,7 @@ datum/reagent/histamine/on_mob_life(var/mob/living/M as mob) datum/reagent/formaldehyde name = "Formaldehyde" id = "formaldehyde" - description = "A toxic chemical." + description = "+1 TOX, 10% chance to decay into 5-15 units of histamine." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 @@ -59,7 +59,7 @@ datum/reagent/formaldehyde/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom M.adjustToxLoss(1*REM) if(prob(10)) - M.reagents.add_reagent("histamine",pick(5,10)) + M.reagents.add_reagent("histamine",pick(5,15)) M.reagents.remove_reagent("formaldehyde",1) ..() return @@ -75,7 +75,7 @@ datum/reagent/formaldehyde/on_mob_life(var/mob/living/M as mob) datum/reagent/venom name = "Venom" id = "venom" - description = "A toxic chemical." + description = "Scaling TOX and BRUTE damage with dose. 25% chance to decay into 5-10 histamine." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 metabolization_rate = 0.2 @@ -92,7 +92,7 @@ datum/reagent/venom/on_mob_life(var/mob/living/M as mob) datum/reagent/neurotoxin2 name = "Neurotoxin" id = "neurotoxin2" - description = "A toxic chemical." + description = "+1 TOX, +1 BRAIN up to 60 before it slows down, confusion, knockout after 17 elapsed cycles." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 var/cycle_count = 0 @@ -120,7 +120,7 @@ datum/reagent/neurotoxin2/on_mob_life(var/mob/living/M as mob) datum/reagent/cyanide name = "Cyanide" id = "cyanide" - description = "A highly toxic chemical." + description = "+1.5 TOX, 10% chance of +1 LOSEBREATH, 8% chance of stun and extra +2 TOX." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 metabolization_rate = 0.1 diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index 8beb5518ac3..3092bd960dc 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -53,10 +53,7 @@ desc = "A small bottle of morphine." icon = 'icons/obj/chemical.dmi' icon_state = "bottle20" - - New() - ..() - reagents.add_reagent("morphine", 30) + spawned_reagent = "morphine" /obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate name = "Chloral Hydrate Bottle" diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 7c4f5909607..04037dc52e9 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -73,7 +73,7 @@ /obj/item/weapon/reagent_containers/hypospray/medipen/New() ..() - reagents.add_reagent(starting_reagent, 10) + reagents.add_reagent(starting_reagent, 9) update_icon() return From e332752e41e5fa90a2398e7d9bc6b0dfa18a2665 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Tue, 13 Jan 2015 20:37:49 -0800 Subject: [PATCH 15/19] Updates the changelog. --- html/changelogs/Iamgoofball.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/changelogs/Iamgoofball.yml b/html/changelogs/Iamgoofball.yml index 523b1f2f49e..d3a84182460 100644 --- a/html/changelogs/Iamgoofball.yml +++ b/html/changelogs/Iamgoofball.yml @@ -2,7 +2,7 @@ author: Iamgootball delete-after: true changes: - rscadd: "Added Goonstation Chemistry!" - - rscadd: "Adds 13 medicines!" + - rscadd: "Adds 14 medicines!" - rscadd: "Adds 3 pyrotechnics!" - rscadd: "Adds 3 drugs with actual gameplay uses!" - rscadd: "Adds 7 toxins!" From e8217f7eaeb01eb71e76ef318acda7641d11176c Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Tue, 13 Jan 2015 20:46:38 -0800 Subject: [PATCH 16/19] fixes medipens more --- code/modules/reagents/reagent_containers/hypospray.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 04037dc52e9..06a3165dbe2 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -74,6 +74,7 @@ /obj/item/weapon/reagent_containers/hypospray/medipen/New() ..() reagents.add_reagent(starting_reagent, 9) + reagents.add_reagent("inaprovaline", 1) update_icon() return From a70cfc4c86b2eefb5c0bf1e1ce2fc9ccbd0545d7 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Tue, 13 Jan 2015 20:49:54 -0800 Subject: [PATCH 17/19] fixes medipens even more --- code/modules/reagents/reagent_containers/hypospray.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 06a3165dbe2..9dd614905e5 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -70,11 +70,11 @@ ignore_flags = 1 //so you can medipen through hardsuits flags = null var/starting_reagent = "inaprovaline" + var/starting_amount = 10 /obj/item/weapon/reagent_containers/hypospray/medipen/New() ..() - reagents.add_reagent(starting_reagent, 9) - reagents.add_reagent("inaprovaline", 1) + reagents.add_reagent(starting_reagent, starting_amount) update_icon() return @@ -103,6 +103,7 @@ desc = "A rapid way to regulate your body's temperature in the event of a hardsuit malfunction at the cost of some shortness of breath." icon_state = "lepopen" starting_reagent = "leporazine" + starting_amount = 9 /obj/item/weapon/reagent_containers/hypospray/medipen/leporazine/New() ..() @@ -115,6 +116,7 @@ desc = "A rapid way to stimulate your body's adrenaline, allowing for freer movement in restrictive armor at the cost of some shortness of breath." icon_state = "stimpen" starting_reagent = "hyperzine" + starting_amount = 9 /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack/New() ..() From 57ad61f75f1ed3bcc1cff80ab9eddbb0b38bd6fd Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Tue, 13 Jan 2015 20:56:39 -0800 Subject: [PATCH 18/19] removes scrollbar from chemdispenser nanoui menu due to new chems --- code/modules/reagents/Chemistry-Machinery.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 8626ab7301c..9821c71e5b7 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -108,7 +108,7 @@ if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "chem_dispenser.tmpl", "Chem Dispenser 5000", 390, 610) + ui = new(user, src, ui_key, "chem_dispenser.tmpl", "Chem Dispenser 5000", 490, 710) // when the ui is first opened this is the data it will use ui.set_initial_data(data) // open the new ui window From fecaa06cffd4e0faf713f5d00f2c91e7c374558f Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Tue, 13 Jan 2015 21:02:37 -0800 Subject: [PATCH 19/19] removes getTotalLoss() for REAL THIS TIME --- code/modules/mob/living/living.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 91f48c2716d..4af16d18e77 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -275,10 +275,6 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/setMaxHealth(var/newMaxHealth) maxHealth = newMaxHealth -/mob/living/proc/getTotalLoss(var/amount) - amount = getBruteLoss() + getOxyLoss() + getToxLoss() + getFireLoss() + getCloneLoss() + getBrainLoss() - return amount - // MOB PROCS //END