From 6dfbb1cda3fec6e76e127ac3e26208cc9ebe910e Mon Sep 17 00:00:00 2001 From: Ketrai Date: Tue, 5 Sep 2017 15:57:11 +0200 Subject: [PATCH] adds a chem for grubs grubs use this chem to burn people --- code/modules/reagents/Chemistry-Recipes_vr.dm | 372 ++++++------------ 1 file changed, 113 insertions(+), 259 deletions(-) diff --git a/code/modules/reagents/Chemistry-Recipes_vr.dm b/code/modules/reagents/Chemistry-Recipes_vr.dm index de7f707ac56..9788c70cc6a 100644 --- a/code/modules/reagents/Chemistry-Recipes_vr.dm +++ b/code/modules/reagents/Chemistry-Recipes_vr.dm @@ -1,286 +1,140 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// Micro/Macro chemicals -/datum/chemical_reaction/sizeoxadone - name = "sizeoxadone" - id = "sizeoxadone" - result = "sizeoxadone" - required_reagents = list("clonexadone" = 1, "tramadol" = 3, "phoron" = 1) - catalysts = list("phoron" = 5) - result_amount = 5 +//////////////////////////// +/// NW's shrinking serum /// +//////////////////////////// -/datum/chemical_reaction/macrocillin +/datum/reagent/macrocillin name = "Macrocillin" id = "macrocillin" - result = "macrocillin" - // POLARISTODO requires_heating = 1 - required_reagents = list("sizeoxadone" = 20, "diethylamine" = 20) - result_amount = 1 + description = "Glowing yellow liquid." + reagent_state = LIQUID + color = "#FFFF00" // rgb: 255, 255, 0 + metabolism = 0.01 -/datum/chemical_reaction/microcillin +/datum/reagent/macrocillin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + ..() + if(M.size_multiplier < RESIZE_HUGE) + M.resize(M.size_multiplier+0.01)//Incrrease 1% per tick. + return + +/datum/reagent/microcillin name = "Microcillin" id = "microcillin" - result = "microcillin" - // POLARISTODO requires_heating = 1 - required_reagents = list("sizeoxadone" = 20, "sodiumchloride" = 20) - result_amount = 1 + description = "Murky purple liquid." + reagent_state = LIQUID + color = "#800080" + metabolism = 0.01 -/datum/chemical_reaction/normalcillin +/datum/reagent/microcillin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + ..() + if(M.size_multiplier > RESIZE_TINY) + M.resize(M.size_multiplier-0.01) //Decrease 1% per tick. + return + + +/datum/reagent/normalcillin name = "Normalcillin" id = "normalcillin" - result = "normalcillin" - // POLARISTODO requires_heating = 1 - required_reagents = list("sizeoxadone" = 20, "leporazine" = 20) - result_amount = 1 + description = "Translucent cyan liquid." + reagent_state = LIQUID + color = "#00FFFF" + metabolism = 0.01 //One unit will be just enough to bring someone from 200% to 100% -/datum/chemical_reaction/dontcrossthebeams - name = "Don't Cross The Beams" - id = "dontcrossthebeams" - result = null - required_reagents = list("microcillin" = 1, "macrocillin" = 1) +/datum/reagent/normalcillin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + ..() + if(M.size_multiplier > RESIZE_NORMAL) + M.resize(M.size_multiplier-0.01) //Decrease by 1% size per tick. + else if(M.size_multiplier < RESIZE_NORMAL) + M.resize(M.size_multiplier+0.01) //Increase 1% per tick. + return -/datum/chemical_reaction/dontcrossthebeams/on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - playsound(location, 'sound/weapons/gauss_shoot.ogg', 50, 1) - var/datum/effect/effect/system/grav_pull/s = new /datum/effect/effect/system/grav_pull - s.set_up(3, 3, location) - s.start() - holder.clear_reagents() -/////////////////////////////////////////////////////////////////////////////////// -/// Vore Drugs +/datum/reagent/sizeoxadone + name = "Sizeoxadone" + id = "sizeoxadone" + description = "A volatile liquid used as a precursor to size-altering chemicals. Causes dizziness if taken unprocessed." + reagent_state = LIQUID + color = "#1E90FF" + overdose = REAGENTS_OVERDOSE -/datum/chemical_reaction/ickypak +/datum/reagent/sizeoxadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + ..() + M.make_dizzy(1) + if(!M.confused) M.confused = 1 + M.confused = max(M.confused, 20) + return + + +////////////////////////// Anti-Noms Drugs ////////////////////////// + +/datum/reagent/ickypak name = "Ickypak" id = "ickypak" - result = "ickypak" - required_reagents = list("hyperzine" = 4, "fluorosurfactant" = 1) - result_amount = 5 + description = "A foul-smelling green liquid, for inducing muscle contractions to expel accidentally ingested things." + reagent_state = LIQUID + color = "#0E900E" + overdose = REAGENTS_OVERDOSE -/datum/chemical_reaction/unsorbitol +/datum/reagent/ickypak/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + ..() + M.make_dizzy(1) + M.adjustHalLoss(2) + + for(var/I in M.vore_organs) + var/datum/belly/B = M.vore_organs[I] + for(var/atom/movable/A in B.internal_contents) + if(isliving(A)) + var/mob/living/P = A + if(P.absorbed) + continue + if(prob(5)) + playsound(M, 'sound/effects/splat.ogg', 50, 1) + B.release_specific_contents(A) + return + + +/datum/reagent/unsorbitol name = "Unsorbitol" id = "unsorbitol" - result = "unsorbitol" - required_reagents = list("mutagen" = 3, "lipozine" = 2) - result_amount = 5 + description = "A frothy pink liquid, for causing cellular-level hetrogenous structure separation." + reagent_state = LIQUID + color = "#EF77E5" + overdose = REAGENTS_OVERDOSE -/////////////////////////////////////////////////////////////////////////////////// -/// Other Drugs -/datum/chemical_reaction/adranol - name = "Adranol" - id = "adranol" - result = "adranol" - required_reagents = list("milk" = 2, "hydrogen" = 1, "potassium" = 1) - result_amount = 3 +/datum/reagent/unsorbitol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + ..() + M.make_dizzy(1) + M.adjustHalLoss(1) + if(!M.confused) M.confused = 1 + M.confused = max(M.confused, 20) + M.hallucination += 15 -/////////////////////////////// -//SLIME CORES BELOW HERE/////// -/////////////////////////////// + for(var/I in M.vore_organs) + var/datum/belly/B = M.vore_organs[I] + if(B.digest_mode == DM_ABSORB) //Turn off absorbing on bellies + B.digest_mode = DM_HOLD + for(var/mob/living/P in B.internal_contents) + if(!P.absorbed) + continue -/datum/chemical_reaction/slime_food - name = "Slime Bork" - id = "m_tele2" - result = null - required_reagents = list("phoron" = 10, "slimejelly" = 10, "nutriment" = 10) - result_amount = 1 - on_reaction(var/datum/reagents/holder) + else if(prob(1)) + playsound(M, 'sound/vore/schlorp.ogg', 50, 1) + P.absorbed = 0 + M.visible_message("Something spills into [M]'s [lowertext(B.name)]!") + return - var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks // BORK BORK BORK +//Special toxins for solargrubs - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) -/* Removed at some point, unsure what to replace with - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) -*/ - for(var/i = 1, i <= 4 + rand(1,2), i++) - var/chosen = pick(borks) - var/obj/B = new chosen - if(B) - B.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(B, pick(NORTH,SOUTH,EAST,WEST)) +/datum/reagent/grubshock + name = "200 V" //in other words a painful shock + id = "shockchem" + description = "A liquid that quickly dissapates to deliver a painful shock." + reagent_state = LIQUID + color = "#E4EC2F" + metabolism = 2.50 + var/power = 11 - - - -/datum/chemical_reaction/materials - name = "Slime materials" - id = "slimematerial" - result = null - required_reagents = list("phoron" = 20, "slimejelly" = 40, "aluminum" = 20) //Woah there! You have the possibility of making diamonds! 8 ground up slimes required for one of these, and you still have a 10% chance for it to fail. - result_amount = 1 - on_reaction(var/datum/reagents/holder) - var/fail_chance = rand(1,1000) - if(fail_chance == 1) // 0.1% chance of exploding, so scientists don't exclusively abuse this to obtain materials. - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The solution begins to vibrate violently!"), 1) // It was at this moment, the Xenobiologist knew... he fucked up. - sleep(30) - playsound(get_turf(holder.my_atom), 'sound/items/Welder2.ogg', 100, 1) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The reaction begins to rapidly sizzle and swell outwards!"), 1) - sleep(20) - explosion(get_turf(holder.my_atom), 0 ,4, 8) //Enough to cause severe damage in the area, but not so much that it'll instantly gib the person. - empulse(get_turf(holder.my_atom), 3, 7) //Uh oh, it produced some uranium, too! EMP blast! - return - - if(fail_chance < 101) // 10% chance of it not working at all. - playsound(get_turf(holder.my_atom), 'sound/items/Welder.ogg', 100, 1) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime core fizzles disappointingly."), 1) - return - - var/blocked = list(/obj/item/stack/material, /obj/item/stack/material/cyborg, /obj/item/stack/material/cyborg/plastic, /obj/item/stack/material/cyborg/plasteel, /obj/item/stack/material/cyborg/glass/reinforced, /obj/item/stack/material/cyborg/wood, /obj/item/stack/material/animalhide/human, /obj/item/stack/material/animalhide/corgi, /obj/item/stack/material/animalhide/cat, /obj/item/stack/material/animalhide/monkey, /obj/item/stack/material/animalhide/lizard , /obj/item/stack/material/animalhide/xeno, /obj/item/stack/material/cyborg, /obj/item/stack/material/cyborg/glass/reinforced) - var/list/material = typesof(/obj/item/stack/material) - blocked - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) -/* Removed at some point, unsure what to replace with - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) -*/ - var/spawn_amount = rand(1,50) - var/chosen = pick(material) - var/obj/item/stack/material/C = new chosen - C.amount = spawn_amount - C.loc = get_turf(holder.my_atom) - - -/datum/chemical_reaction/slimelight - name = "Slime Glow" - id = "m_glow" - result = null - required_reagents = list("phoron" = 5, "slimejelly" = 5, "water" = 10) //Takes 10 water so it doesn't mess with the frost oil. - result_amount = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text(" The contents of the slime core harden and begin to emit a warm, bright light."), 1) - var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime - F.loc = get_turf(holder.my_atom) - - -/datum/chemical_reaction/slimephoron - name = "Slime Phoron" - id = "m_plasma" - result = null - required_reagents = list("phoron" = 20, "uranium" = 20, "slimejelly" = 20) - result_amount = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/stack/material/phoron/P = new /obj/item/stack/material/phoron - P.amount = 10 - P.loc = get_turf(holder.my_atom) - -/datum/chemical_reaction/slimefreeze - name = "Slime Freeze" - id = "m_freeze" - result = null - required_reagents = list("phoron" = 10, "coolant" = 10, "slimejelly" = 10) - result_amount = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate violently!"), 1) - sleep(50) - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/M in range (get_turf(holder.my_atom), 7)) - M.bodytemperature -= 140 - M << " You suddenly feel a chill!" - - - - -/datum/chemical_reaction/slimefrost - name = "Slime Frost Oil" - id = "m_frostoil" - result = "frostoil" - required_reagents = list("phoron" = 5, "slimejelly" = 5, "water" = 5, "coolant" = 5) - result_amount = 10 - - - - -/datum/chemical_reaction/slimefire - name = "Slime fire" - id = "m_fire" - result = null - required_reagents = list("phoron" = 60, "slimejelly" = 30, "potassium" = 30) - result_amount = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate violently!"), 1) - sleep(50) - var/turf/location = get_turf(holder.my_atom.loc) - for(var/turf/simulated/floor/target_tile in range(0,location)) - target_tile.assume_gas("phoron", 25, 1400) - spawn (0) target_tile.hotspot_expose(700, 400) - - -/datum/chemical_reaction/slimeify - name = "Advanced Mutation Toxin" - id = "advmutationtoxin2" - result = "advmutationtoxin" - required_reagents = list("phoron" = 15, "slimejelly" = 15, "mutationtoxin" = 15) //In case a xenobiologist wants to become a fully fledged slime person. - result_amount = 1 - - - - - -/datum/chemical_reaction/slimeheal //A slime healing mixture. Why not. - name = "Slime Health" - id = "slimeheal" - result = "null" - required_reagents = list("phoron" = 10, "bicaridine" = 10, "kelotane" = 10, "inaprovaline" = 10, "slimejelly" = 10) - on_reaction(var/datum/reagents/holder, var/created_volume) - for (var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null)) - C << "A wave of energy suddenly invigorates you." - C.adjustBruteLoss(-25) - C.adjustFireLoss(-25) - C.adjustToxLoss(-25) - C.adjustOxyLoss(-25) - C.adjustBrainLoss(-25) - C.adjustCloneLoss(-25) - C.updatehealth() - -/datum/chemical_reaction/slimejelly - name = "Slime Jam" - id = "m_jam" - result = "slimejelly" - required_reagents = list("phoron" = 20, "sugar" = 50, "lithium" = 50) //In case a xenobiologist is impatient and is willing to drain their dispenser resources, along with plasma! - result_amount = 5 - - - - - -/datum/chemical_reaction/slimevore - name = "Slime Vore" // Hostile vore mobs only - id = "m_tele" - result = null - required_reagents = list("phoron" = 20, "nutriment" = 20, "sugar" = 20, "mutationtoxin" = 20) //Can't do slime jelly as it'll conflict with another, but mutation toxin will do. - result_amount = 1 - on_reaction(var/datum/reagents/holder) - var/mob_path = /mob/living/simple_animal - var/blocked = list( - /mob/living/simple_animal/hostile/mimic, - /mob/living/simple_animal/hostile/alien/queen - )//exclusion list for things you don't want the reaction to create. - var/list/voremobs = typesof(mob_path) - mob_path - blocked // list of possible hostile mobs - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) -/* Removed at some point, unsure what to replace with - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) -*/ - var/spawn_count = rand(1,3) - for(var/i = 1, i <= spawn_count, i++) - var/chosen = pick(voremobs) - var/mob/living/simple_animal/hostile/C = new chosen - C.faction = "slimesummon" - C.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(C, pick(NORTH,SOUTH,EAST,WEST)) +/datum/reagent/grubshock/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + M.take_organ_damage(0, removed * power * 0.2)