diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 1c3e24152da..d5f47e7827e 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -529,6 +529,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/datums/uplink_item.dm b/code/datums/uplink_item.dm index 781f3ff9009..c1ab434fd07 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -313,6 +313,13 @@ var/list/uplink_items = list() cost = 1 surplus = 50 +/datum/uplink_item/stealthy_weapons/traitor_chem_bottle + name = "Poison Kit" + desc = "An assortment of nasty chemicals." + item = /obj/item/weapon/storage/box/syndie_kit/chemical + 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/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 9fcfad2d30f..01a96fbf6c6 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -108,12 +108,13 @@ 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() ..() 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/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/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 775656ead7d..91a1cc97a96 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -130,7 +130,6 @@ user << "You need a tighter grip." - /obj/machinery/shower name = "shower" desc = "The HS-451. Installed in the 2550s by the Nanotrasen Hygiene Division." diff --git a/code/modules/food&drinks/food/snacks_other.dm b/code/modules/food&drinks/food/snacks_other.dm index df65352f4dc..ce6a4650934 100644 --- a/code/modules/food&drinks/food/snacks_other.dm +++ b/code/modules/food&drinks/food/snacks_other.dm @@ -128,8 +128,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 @@ -254,4 +253,4 @@ ..() reagents.add_reagent("nutriment", 4) reagents.add_reagent("sugar", 2) - reagents.add_reagent("coco", 2) \ No newline at end of file + reagents.add_reagent("coco", 2) diff --git a/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm new file mode 100644 index 00000000000..3a8a0e7f449 --- /dev/null +++ b/code/modules/reagents/Chemistry-Goon-420BlazeIt.dm @@ -0,0 +1,100 @@ +#define SOLID 1 +#define LIQUID 2 +#define GAS 3 + +#define REM REAGENTS_EFFECT_MULTIPLIER + +datum/reagent/nicotine + name = "Nicotine" + id = "nicotine" + description = "Stun reduction per cycle, slight stamina regeneration buff. Overdoses become rapidly deadly." + 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(5)) + M << "[smoke_message]" + M.AdjustStunned(-1) + M.adjustStaminaLoss(-1*REM) + if(volume > 35) + M << "You feel like you smoked too much." + M.adjustToxLoss(2*REM) + M.adjustOxyLoss(2*REM) + ..() + return + +datum/reagent/crank + name = "Crank" + id = "crank" + description = "2x stun reduction per cycle. Warms you up, makes you jittery as hell." + 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(5)) + 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 = "Cools and calms you down, occasional BRAIN and TOX damage." + 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(5)) + 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/skeleton) + 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 new file mode 100644 index 00000000000..4c83e5a1187 --- /dev/null +++ b/code/modules/reagents/Chemistry-Goon-Medicine.dm @@ -0,0 +1,381 @@ +#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 + metabolization_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!" + 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?" + ..() + 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" + description = "100% chance per cycle of healing 2 points of BRUTE damage." + reagent_state = LIQUID + color = "#C8A5DC" // rgb: 200, 165, 220 + metabolization_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!" + 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?" + ..() + 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" + 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 == DEAD) + 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 + +datum/reagent/charcoal/on_mob_life(var/mob/living/M as mob) + if(!M) M = holder.my_atom + 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 + +/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 = 4 + 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 + metabolization_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/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" + 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 = "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 + +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 + for(var/datum/reagent/R in M.reagents) + if(M != src) + M.reagents.remove_reagent(R.id,4) + ..() + 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 + metabolization_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) + if(M.losebreath >= 4) + M.losebreath -= 4 + ..() + 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 + metabolization_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 + mix_message = "The mixture rapidly turns into a dense pink liquid." + +datum/reagent/ephedrine + name = "Ephedrine" + id = "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 + metabolization_rate = 0.3 + +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 + mix_message = "The solution fizzes and gives off toxic fumes." + +datum/reagent/diphenhydramine + name = "Diphenhydramine" + id = "diphenhydramine" + 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.jitteriness -= 1 + M.reagents.remove_reagent("histamine",3) + ..() + 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 = "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 + +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 new file mode 100644 index 00000000000..33752902ea8 --- /dev/null +++ b/code/modules/reagents/Chemistry-Goon-Other.dm @@ -0,0 +1,104 @@ +#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/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 + +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-Pyrotechnics.dm b/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm new file mode 100644 index 00000000000..6edcc664817 --- /dev/null +++ b/code/modules/reagents/Chemistry-Goon-Pyrotechnics.dm @@ -0,0 +1,119 @@ +#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) + 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) + 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/)) + 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) + 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) + goonchem_vortex(T, 1, 5, 6) + +/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/)) + 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) + 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) + 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)) + 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/Chemistry-Goon-Readme.dm b/code/modules/reagents/Chemistry-Goon-Readme.dm new file mode 100644 index 00000000000..0731e28ba93 --- /dev/null +++ b/code/modules/reagents/Chemistry-Goon-Readme.dm @@ -0,0 +1,34 @@ +/* + 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) + 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 new file mode 100644 index 00000000000..3361df63c77 --- /dev/null +++ b/code/modules/reagents/Chemistry-Goon-Toxins.dm @@ -0,0 +1,159 @@ +#define SOLID 1 +#define LIQUID 2 +#define GAS 3 + +#define REM REAGENTS_EFFECT_MULTIPLIER + +datum/reagent/polonium + name = "Polonium" + id = "polonium" + description = "+8 RAD." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + metabolization_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 = "Dose-dependent, ranges from annoying to incredibly lethal." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + metabolization_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 = "+1 TOX, 10% chance to decay into 5-15 units of histamine." + 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,15)) + 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 = "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 +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/neurotoxin2 + name = "Neurotoxin" + id = "neurotoxin2" + 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 + metabolization_rate = 1 + +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) + M.adjustBrainLoss(1*REM) + M.adjustToxLoss(1*REM) + if(cycle_count == 17) + M.sleeping += 1 + ..() + return + +/datum/chemical_reaction/neurotoxin2 + name = "neurotoxin2" + id = "neurotoxin2" + result = "neurotoxin2" + required_reagents = list("space_drugs" = 1) + result_amount = 1 + required_temp = 200 + +datum/reagent/cyanide + name = "Cyanide" + id = "cyanide" + 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 + +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)) + 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 + +/datum/reagent/questionmark // food poisoning + name = "Bad Food" + id = "????" + description = "????" + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + metabolization_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-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 254b10db479..dde04bfbc43 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 = 150 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 @@ -259,10 +261,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) @@ -277,7 +280,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 46b6ccc971b..9821c71e5b7 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -11,16 +11,16 @@ 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/image/icon_beaker = null //cached overlay 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","fuel","silver","iodine","bromine","fluorine","stable_plasma") /obj/machinery/chem_dispenser/proc/recharge() if(stat & (BROKEN|NOPOWER)) return @@ -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 @@ -276,6 +276,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)) @@ -422,6 +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"]) + 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) + reagents.trans_to(P,vol_each) src.updateUsrDialog() return @@ -479,6 +497,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)
" @@ -1238,3 +1258,63 @@ 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/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 -= 2 + if(beaker.reagents.chem_temp < temperature) + 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" + 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)) + 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 + 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..." + on = TRUE diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm index 02983913ee8..d8f1fd0d318 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/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/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index e174ee01f2f..4b06fe9e1e6 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -14,6 +14,9 @@ var/secondary = 0 // set to nonzero if secondary reaction var/mob_react = 0 //Determines if a chemical reaction can occur inside a mob + 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.dm b/code/modules/reagents/reagent_containers/glass.dm index 73e97fa6b9b..174770a6af0 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -12,6 +12,7 @@ can_be_placed_into = list( /obj/machinery/chem_master/, /obj/machinery/chem_dispenser/, + /obj/machinery/chem_heater/, /obj/machinery/reagentgrinder, /obj/machinery/biogenerator, /obj/structure/table, diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index 8bdb9492d2e..3092bd960dc 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -48,6 +48,13 @@ icon_state = "bottle20" spawned_reagent = "stoxin" +/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" + spawned_reagent = "morphine" + /obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate name = "Chloral Hydrate Bottle" desc = "A small bottle of Choral Hydrate. Mickey's Favorite!" @@ -195,6 +202,59 @@ icon_state = "bottle3" spawned_disease = /datum/disease/anxiety +/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" + +/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) + +/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." diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 96b69d1c9ff..9dd614905e5 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -69,10 +69,12 @@ volume = 10 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("inaprovaline", 10) + reagents.add_reagent(starting_reagent, starting_amount) update_icon() return @@ -100,11 +102,11 @@ 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" + starting_amount = 9 /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 +115,23 @@ 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" + starting_amount = 9 /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 new file mode 100644 index 00000000000..dae7d54156a --- /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 + apply_type = TOUCH + 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/html/changelogs/Iamgoofball.yml b/html/changelogs/Iamgoofball.yml new file mode 100644 index 00000000000..d3a84182460 --- /dev/null +++ b/html/changelogs/Iamgoofball.yml @@ -0,0 +1,13 @@ +author: Iamgootball +delete-after: true +changes: + - rscadd: "Added Goonstation Chemistry!" + - rscadd: "Adds 14 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 Kit!" + - rscadd: "Adds Morphine Medipens!" + - rscadd: "Adds Morphine bottles to Cargo!" diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index af5e4e68ac5..c6e7bd5222d 100644 Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ diff --git a/tgstation.dme b/tgstation.dme index eb8b0429b53..5b616fa2ee8 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1269,6 +1269,12 @@ #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-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" #include "code\modules\reagents\Chemistry-Machinery.dm" #include "code\modules\reagents\Chemistry-Readme.dm" @@ -1288,6 +1294,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"