From 3f7f6704c8c3f6b45ba7abea41d3cad118d8b6a0 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 6 Apr 2016 01:37:04 -0400 Subject: [PATCH 1/2] Xenobio Refactor/Changes --- _maps/map_files/cyberiad/cyberiad.dmm | 2 +- code/game/machinery/kitchen/processor.dm | 2 +- .../game/objects/items/weapons/power_cells.dm | 8 +- code/modules/mining/equipment_locker.dm | 2 +- code/modules/mob/living/carbon/slime/life.dm | 9 +- .../modules/mob/living/carbon/slime/powers.dm | 11 +- code/modules/mob/living/carbon/slime/slime.dm | 2 +- code/modules/reagents/Chemistry-Machinery.dm | 2 +- code/modules/reagents/newchem/disease.dm | 8 +- code/modules/reagents/newchem/pyro.dm | 30 + .../chemical_reaction_slime.dm | 1060 +++++++++-------- .../oldchem/reagents/reagents_flammable.dm | 2 +- .../reagent_containers/glass/bottle.dm | 6 +- .../research/xenobiology/xenobiology.dm | 404 ++++--- 14 files changed, 849 insertions(+), 699 deletions(-) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index c66079312ed..1ed7089ef1b 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -6978,7 +6978,7 @@ "cEj" = (/turf/simulated/wall/r_wall,/area/medical/patient_b) "cEk" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) "cEl" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) -"cEm" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/stack/sheet/mineral/plasma{amount = 8; layer = 2.9},/obj/machinery/media/receiver/boombox,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) +"cEm" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/stack/sheet/mineral/plasma{pixel_x = -2; pixel_y = -2},/obj/item/stack/sheet/mineral/plasma,/obj/item/stack/sheet/mineral/plasma{pixel_x = 2; pixel_y = 2},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cEn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cEo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) "cEp" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) diff --git a/code/game/machinery/kitchen/processor.dm b/code/game/machinery/kitchen/processor.dm index 0b739e2b269..57e1aecf514 100644 --- a/code/game/machinery/kitchen/processor.dm +++ b/code/game/machinery/kitchen/processor.dm @@ -85,7 +85,7 @@ S.loc = loc S.visible_message("[S] crawls free of the processor!") return - for(var/i = 1, i <= C + processor.rating_amount, i++) + for(var/i in 1 to (C+processor.rating_amount-1)) new S.coretype(loc) feedback_add_details("slime_core_harvested","[replacetext(S.colour," ","_")]") ..() diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index 0cb5e3c54ef..d2598a4036f 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -115,14 +115,12 @@ minor_fault = 1 -/obj/item/weapon/stock_parts/cell/slime +/obj/item/weapon/stock_parts/cell/high/slime name = "charged slime core" desc = "A yellow slime core infused with plasma, it crackles with power." origin_tech = "powerstorage=2;biotech=4" - icon = 'icons/mob/slimes.dmi' //'icons/obj/harvest.dmi' - icon_state = "yellow slime extract" //"potato_battery" - maxcharge = 10000 - rating = 3 + icon = 'icons/mob/slimes.dmi' + icon_state = "yellow slime extract" materials = list() /obj/item/weapon/stock_parts/cell/pulse/carbine diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 60044582dec..7bd4fd1ad47 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -20,7 +20,7 @@ var/sheet_per_ore = 1 var/point_upgrade = 1 var/list/ore_values = list(("sand" = 1), ("iron" = 1), ("plasma" = 15), ("silver" = 16), ("gold" = 18), ("uranium" = 30), ("diamond" = 50), ("bananium" = 60), ("tranquillite" = 60)) - var/list/supply_consoles = list("Science", "Robotics", "Research Director's Desk", "Mechanic", "Engineering" = list("metal", "glass", "plasma"), "Chief Engineer's Desk" = list("metal", "glass", "plasma"), "Atmospherics" = list("metal", "glass", "plasma"), "Bar" = list("uranium", "plasma"), "Virology" = list("uranium", "gold")) + var/list/supply_consoles = list("Science", "Robotics", "Research Director's Desk", "Mechanic", "Engineering" = list("metal", "glass", "plasma"), "Chief Engineer's Desk" = list("metal", "glass", "plasma"), "Atmospherics" = list("metal", "glass", "plasma"), "Bar" = list("uranium", "plasma"), "Virology" = list("plasma", "uranium", "gold")) /obj/machinery/mineral/ore_redemption/New() ..() diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/carbon/slime/life.dm index 1e3d901755a..6dce9aba656 100644 --- a/code/modules/mob/living/carbon/slime/life.dm +++ b/code/modules/mob/living/carbon/slime/life.dm @@ -151,13 +151,8 @@ /mob/living/carbon/slime/handle_chemicals_in_body() - if(reagents) reagents.metabolize(src) - if (reagents.get_reagent_amount("plasma")>=5) - mutation_chance = min(mutation_chance + 5,50) //Prevents mutation chance going >50% - reagents.remove_reagent("plasma", 5) - if (reagents.get_reagent_amount("epinephrine")>=5) - mutation_chance = max(mutation_chance - 5,0) //Prevents muation chance going <0% - reagents.remove_reagent("epinephrine", 5) + if(reagents) + reagents.metabolize(src) src.updatehealth() return //TODO: DEFERRED diff --git a/code/modules/mob/living/carbon/slime/powers.dm b/code/modules/mob/living/carbon/slime/powers.dm index d0ced0684a3..829c56ba004 100644 --- a/code/modules/mob/living/carbon/slime/powers.dm +++ b/code/modules/mob/living/carbon/slime/powers.dm @@ -207,15 +207,20 @@ var/new_powerlevel = round(powerlevel / 4) for(var/i=1,i<=4,i++) var/mob/living/carbon/slime/M = new /mob/living/carbon/slime/(loc) - if(prob(mutation_chance)) + if(mutation_chance >= 100) + M.colour = "rainbow" + else if(prob(mutation_chance)) M.colour = slime_mutation[rand(1,4)] else M.colour = colour - if(ckey) M.nutrition = new_nutrition //Player slimes are more robust at spliting. Once an oversight of poor copypasta, now a feature! + if(ckey) + M.nutrition = new_nutrition //Player slimes are more robust at spliting. Once an oversight of poor copypasta, now a feature! M.powerlevel = new_powerlevel - if(i != 1) step_away(M,src) + if(i != 1) + step_away(M,src) M.Friends = Friends.Copy() babies += M + M.mutation_chance = Clamp(mutation_chance+(rand(5,-5)),0,100) feedback_add_details("slime_babies_born","slimebirth_[replacetext(M.colour," ","_")]") var/mob/living/carbon/slime/new_slime = pick(babies) diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index 532f6a4aba0..9ed50676e75 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -46,6 +46,7 @@ var/is_adult = 0 var/core_removal_stage = 0 //For removing cores. + var/mutator_used = FALSE //So you can't shove a dozen mutators into a single slime ///////////TIME FOR SUBSPECIES @@ -61,7 +62,6 @@ icon_state = "[colour] [is_adult ? "adult" : "baby"] slime" real_name = name slime_mutation = mutation_table(colour) - mutation_chance = rand(25, 35) var/sanitizedcolour = replacetext(colour, " ", "") coretype = text2path("/obj/item/slime_extract/[sanitizedcolour]") ..() diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 59efbc9970b..15ea3a5343f 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -817,7 +817,7 @@ var/list/blend_items = list ( //Sheets - /obj/item/stack/sheet/mineral/plasma = list("plasma" = 20), + /obj/item/stack/sheet/mineral/plasma = list("plasma_dust" = 20), /obj/item/stack/sheet/mineral/uranium = list("uranium" = 20), /obj/item/stack/sheet/mineral/bananium = list("banana" = 20), /obj/item/stack/sheet/mineral/tranquillite = list("nothing" = 20), diff --git a/code/modules/reagents/newchem/disease.dm b/code/modules/reagents/newchem/disease.dm index 18fbc812a28..9c18efe308d 100644 --- a/code/modules/reagents/newchem/disease.dm +++ b/code/modules/reagents/newchem/disease.dm @@ -106,13 +106,13 @@ description = "mutates blood" color = "#D18AA5" // rgb: 209,138,165 -/datum/reagent/plasma/plasmavirusfood +/datum/reagent/plasma_dust/plasmavirusfood name = "virus plasma" id = "plasmavirusfood" description = "mutates blood" color = "#A69DA9" // rgb: 166,157,169 -/datum/reagent/plasma/plasmavirusfood/weak +/datum/reagent/plasma_dust/plasmavirusfood/weak name = "weakened virus plasma" id = "weakplasmavirusfood" color = "#CEC3C6" // rgb: 206,195,198 @@ -143,7 +143,7 @@ name = "virus plasma" id = "plasmavirusfood" result = "plasmavirusfood" - required_reagents = list("plasma" = 1, "virusfood" = 1) + required_reagents = list("plasma_dust" = 1, "virusfood" = 1) result_amount = 1 /datum/chemical_reaction/virus_food_plasma_diphenhydramine @@ -195,7 +195,7 @@ /datum/chemical_reaction/mix_virus/mix_virus_3 name = "Mix Virus 3" id = "mixvirus3" - required_reagents = list("plasma" = 1) + required_reagents = list("plasma_dust" = 1) level_min = 4 level_max = 6 diff --git a/code/modules/reagents/newchem/pyro.dm b/code/modules/reagents/newchem/pyro.dm index 31623753852..b4070440ab3 100644 --- a/code/modules/reagents/newchem/pyro.dm +++ b/code/modules/reagents/newchem/pyro.dm @@ -626,3 +626,33 @@ datum/reagent/firefighting_foam/reaction_obj(var/obj/O, var/volume) holder.del_reagent("teslium") //Clear all remaining Teslium and Uranium, but leave all other reagents untouched. holder.del_reagent("uranium") return + +/datum/reagent/plasma_dust + name = "Plasma Dust" + id = "plasma_dust" + description = "A fine dust of plasma. This chemical has unusual mutagenic properties for viruses and slimes alike." + color = "#500064" // rgb: 80, 0, 100 + +/datum/reagent/plasma_dust/on_mob_life(mob/living/M) + M.adjustToxLoss(3) + if(iscarbon(M)) + var/mob/living/carbon/C = M + C.adjustPlasma(20) + ..() + +/datum/reagent/plasma_dust/reaction_obj(obj/O, volume) + if((!O) || (!volume)) + return 0 + O.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C, volume) + +/datum/reagent/plasma_dust/reaction_turf(turf/simulated/T, volume) + if(istype(T)) + T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C, volume) + +/datum/reagent/plasma_dust/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with plasma dust is stronger than fuel! + if(!istype(M, /mob/living)) + return + if(method == TOUCH) + M.adjust_fire_stacks(volume / 5) + return + ..() \ No newline at end of file diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm index cbcb53a5689..ee51efe2b1e 100644 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm @@ -1,554 +1,664 @@ -/////////////////////////////////////////////NEW SLIME CORE REACTIONS///////////////////////////////////////////// //Grey -/datum/chemical_reaction/ +/datum/chemical_reaction/slimespawn + name = "Slime Spawn" + id = "m_spawn" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/grey + required_other = 1 - slimespawn - name = "Slime Spawn" - id = "m_spawn" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/grey - required_other = 1 +/datum/chemical_reaction/slimespawn/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/mob/living/carbon/slime/S = new /mob/living/carbon/slime + S.forceMove(get_turf(holder.my_atom)) + S.visible_message("Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!") - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1) - var/mob/living/carbon/slime/S = new /mob/living/carbon/slime - S.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimeinaprov + name = "Slime epinephrine" + id = "m_inaprov" + result = "epinephrine" + required_reagents = list("water" = 5) + result_amount = 3 + required_other = 1 + required_container = /obj/item/slime_extract/grey +/datum/chemical_reaction/slimeinaprov/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") - slimeinaprov - name = "Slime Epinephrine" - id = "m_epinephrine" - result = "epinephrine" - required_reagents = list("water" = 5) - result_amount = 3 - required_other = 1 - required_container = /obj/item/slime_extract/grey +/datum/chemical_reaction/slimemonkey + name = "Slime Monkey" + id = "m_monkey" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/grey + required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - - - slimemonkey - name = "Slime Monkey" - id = "m_monkey" - result = null - required_reagents = list("blood" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/grey - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/i = 1, i <= 3, i++) - var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube - M.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimemonkey/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + for(var/i = 1, i <= 3, i++) + var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube + M.forceMove(get_turf(holder.my_atom)) //Green - slimemutate - name = "Mutation Toxin" - id = "mutationtoxin" - result = "mutationtoxin" - required_reagents = list("plasma" = 5) - result_amount = 1 - required_other = 1 - required_container = /obj/item/slime_extract/green +/datum/chemical_reaction/slimemutate + name = "Mutation Toxin" + id = "mutationtoxin" + result = "mutationtoxin" + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_other = 1 + required_container = /obj/item/slime_extract/green + +/datum/chemical_reaction/slimemutate/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") //Metal - slimemetal - name = "Slime Metal" - id = "m_metal" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/metal - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal - M.amount = 15 - M.loc = get_turf(holder.my_atom) - var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel - P.amount = 5 - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimemetal + name = "Slime Metal" + id = "m_metal" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/metal + required_other = 1 + +/datum/chemical_reaction/slimemetal/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal + M.amount = 15 + M.forceMove(get_turf(holder.my_atom)) + var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel + P.amount = 5 + P.forceMove(get_turf(holder.my_atom)) //Gold - slimecrit - name = "Slime Crit" - id = "m_tele" - result = null - required_reagents = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/gold - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[type]") - var/turf/T = get_turf(holder.my_atom) - T.visible_message("The slime extract begins to vibrate violently !") - spawn(50) - chemical_mob_spawn(holder, 5, "Gold Slime") +/datum/chemical_reaction/slimecrit + name = "Slime Crit" + id = "m_tele" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/gold + required_other = 1 +/datum/chemical_reaction/slimecrit/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate violently !") + spawn(50) + chemical_mob_spawn(holder, 5, "Gold Slime") - slimecritlesser - name = "Slime Crit Lesser" - id = "m_tele3" - result = null - required_reagents = list("blood" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/gold - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[type]") - var/turf/T = get_turf(holder.my_atom) - T.visible_message("The slime extract begins to vibrate violently !") - spawn(50) - chemical_mob_spawn(holder, 3, "Lesser Gold Slime", "neutral") +/datum/chemical_reaction/slimecritlesser + name = "Slime Crit Lesser" + id = "m_tele3" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/gold + required_other = 1 +/datum/chemical_reaction/slimecritlesser/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate violently !") + spawn(50) + chemical_mob_spawn(holder, 3, "Lesser Gold Slime", "neutral") - slimecritfriendly - name = "Slime Crit Friendly" - id = "m_tele5" - result = null - required_reagents = list("water" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/gold - required_other = 1 - on_reaction(datum/reagents/holder) - feedback_add_details("slime_cores_used","[type]") - var/turf/T = get_turf(holder.my_atom) - T.visible_message("The slime extract begins to vibrate adorably !") - spawn(50) - chemical_mob_spawn(holder, 1, "Friendly Gold Slime", "neutral") +/datum/chemical_reaction/slimecritfriendly + name = "Slime Crit Friendly" + id = "m_tele5" + result = null + required_reagents = list("water" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/gold + required_other = 1 +/datum/chemical_reaction/slimecritfriendly/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate adorably !") + spawn(50) + chemical_mob_spawn(holder, 1, "Friendly Gold Slime", "neutral") //Silver - slimebork - name = "Slime Bork" - id = "m_tele2" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/silver - required_other = 1 - on_reaction(var/datum/reagents/holder) +/datum/chemical_reaction/slimebork + name = "Slime Bork" + id = "m_tele2" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/silver + required_other = 1 - var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/snacks) - borks = adminReagentCheck(borks) - // BORK BORK BORK +/datum/chemical_reaction/slimebork/on_reaction(datum/reagents/holder) - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + feedback_add_details("slime_cores_used","[type]") + var/list/blocked = list(/obj/item/weapon/reagent_containers/food/snacks, + /obj/item/weapon/reagent_containers/food/snacks/breadslice, + /obj/item/weapon/reagent_containers/food/snacks/sliceable, + /obj/item/weapon/reagent_containers/food/snacks/margheritaslice, + /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice, + /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice, + /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat/slab, + /obj/item/weapon/reagent_containers/food/snacks/grown, + /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, + ) + blocked |= typesof(/obj/item/weapon/reagent_containers/food/snacks/customizable) - for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null)) - C.flash_eyes() + var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - blocked + // BORK BORK BORK - for(var/i = 1, i <= 4 + rand(1,2), i++) - var/chosen = pick(borks) - var/obj/B = new chosen - if(B) - B.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(B, pick(NORTH,SOUTH,EAST,WEST)) - slimedrinks - name = "Slime Drinks" - id = "m_tele3" - result = null - required_reagents = list("water" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/silver - required_other = 1 - on_reaction(var/datum/reagents/holder) + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/drinks) - borks = adminReagentCheck(borks) - // BORK BORK BORK + for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null)) + C.flash_eyes() - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + for(var/i = 1, i <= 4 + rand(1,2), i++) + var/chosen = pick(borks) + var/obj/B = new chosen + if(B) + B.forceMove(get_turf(holder.my_atom)) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(B, pick(NORTH,SOUTH,EAST,WEST)) - for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null)) - C.flash_eyes() - 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/chemical_reaction/slimebork2 + name = "Slime Bork 2" + id = "m_tele4" + result = null + required_reagents = list("water" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/silver + required_other = 1 + +/datum/chemical_reaction/slimebork2/on_reaction(datum/reagents/holder) + + feedback_add_details("slime_cores_used","[type]") + var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/drinks) + // BORK BORK BORK + + playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) + + for(var/mob/living/carbon/M in viewers(get_turf(holder.my_atom), null)) + M.flash_eyes() + + for(var/i = 1, i <= 4 + rand(1,2), i++) + var/chosen = pick(borks) + var/obj/B = new chosen + if(B) + B.forceMove(get_turf(holder.my_atom)) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(B, pick(NORTH,SOUTH,EAST,WEST)) //Blue - slimefrost - name = "Slime Frost Oil" - id = "m_frostoil" - result = "frostoil" - required_reagents = list("plasma" = 5) - result_amount = 10 - required_container = /obj/item/slime_extract/blue - required_other = 1 +/datum/chemical_reaction/slimefrost + name = "Slime Frost Oil" + id = "m_frostoil" + result = "frostoil" + required_reagents = list("plasma_dust" = 1) + result_amount = 10 + required_container = /obj/item/slime_extract/blue + required_other = 1 + +/datum/chemical_reaction/slimefrost/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + + +/datum/chemical_reaction/slimestabilizer + name = "Slime Stabilizer" + id = "m_slimestabilizer" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/blue + required_other = 1 + +/datum/chemical_reaction/slimestabilizer/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/slimepotion/stabilizer/P = new /obj/item/slimepotion/stabilizer + P.forceMove(get_turf(holder.my_atom)) + + //Dark Blue - slimefreeze - name = "Slime Freeze" - id = "m_freeze" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/darkblue - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) - spawn(50) - if(holder && holder.my_atom) - 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 - to_chat(M, "\blue You feel a chill!") +/datum/chemical_reaction/slimefreeze + name = "Slime Freeze" + id = "m_freeze" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/darkblue + required_other = 1 + +/datum/chemical_reaction/slimefreeze/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate adorably !") + spawn(50) + if(holder && holder.my_atom) + 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 -= 240 + to_chat(M, "You feel a chill!") - slimefireproof - name = "Slime Fireproof" - id = "m_fireproof" - result = null - required_reagents = list("water" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/darkblue - required_other = 1 +/datum/chemical_reaction/slimefireproof + name = "Slime Fireproof" + id = "m_fireproof" + result = null + required_reagents = list("water" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/darkblue + required_other = 1 - on_reaction(datum/reagents/holder) - feedback_add_details("slime_cores_used","[type]") - var/obj/item/weapon/slimefireproof/P = new /obj/item/weapon/slimefireproof - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimefireproof/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/slimepotion/fireproof/P = new /obj/item/slimepotion/fireproof + P.forceMove(get_turf(holder.my_atom)) //Orange - slimecasp - name = "Slime Capsaicin Oil" - id = "m_capsaicinoil" - result = "capsaicin" - required_reagents = list("blood" = 5) - result_amount = 10 - required_container = /obj/item/slime_extract/orange - required_other = 1 +/datum/chemical_reaction/slimecasp + name = "Slime Capsaicin Oil" + id = "m_capsaicinoil" + result = "capsaicin" + required_reagents = list("blood" = 1) + result_amount = 10 + required_container = /obj/item/slime_extract/orange + required_other = 1 - slimefire - name = "Slime fire" - id = "m_fire" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/orange - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) - spawn(50) - if(holder && holder.my_atom) - var/turf/simulated/T = get_turf(holder.my_atom) - if(istype(T)) - T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50) +/datum/chemical_reaction/slimecasp/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + +/datum/chemical_reaction/slimefire + name = "Slime fire" + id = "m_fire" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/orange + required_other = 1 + +/datum/chemical_reaction/slimefire/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/turf/TU = get_turf(holder.my_atom) + TU.visible_message("The slime extract begins to vibrate adorably !") + spawn(50) + if(holder && holder.my_atom) + var/turf/simulated/T = get_turf(holder.my_atom) + if(istype(T)) + T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50) //Yellow - slimeoverload - name = "Slime EMP" - id = "m_emp" - result = null - required_reagents = list("blood" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/yellow - required_other = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - empulse(get_turf(holder.my_atom), 3, 7) + +/datum/chemical_reaction/slimeoverload + name = "Slime EMP" + id = "m_emp" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/yellow + required_other = 1 + +/datum/chemical_reaction/slimeoverload/on_reaction(datum/reagents/holder, created_volume) + feedback_add_details("slime_cores_used","[type]") + empulse(get_turf(holder.my_atom), 3, 7) - slimecell - name = "Slime Powercell" - id = "m_cell" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/yellow - required_other = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - var/obj/item/weapon/stock_parts/cell/slime/P = new /obj/item/weapon/stock_parts/cell/slime - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimecell + name = "Slime Powercell" + id = "m_cell" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/yellow + required_other = 1 - slimeglow - name = "Slime Glow" - id = "m_glow" - result = null - required_reagents = list("water" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/yellow - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The contents of the slime core harden and begin to emit a warm, bright light."), 1) - var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime - F.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimecell/on_reaction(datum/reagents/holder, created_volume) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/weapon/stock_parts/cell/high/slime/P = new /obj/item/weapon/stock_parts/cell/high/slime + P.forceMove(get_turf(holder.my_atom)) + +/datum/chemical_reaction/slimeglow + name = "Slime Glow" + id = "m_glow" + result = null + required_reagents = list("water" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/yellow + required_other = 1 + +/datum/chemical_reaction/slimeglow/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime begins to emit a soft light. Squeezing it will cause it to grow brightly.") + var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime + F.forceMove(get_turf(holder.my_atom)) //Purple - slimepsteroid - name = "Slime Steroid" - id = "m_steroid" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/purple - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/weapon/slimesteroid/P = new /obj/item/weapon/slimesteroid - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimepsteroid + name = "Slime Steroid" + id = "m_steroid" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/purple + required_other = 1 +/datum/chemical_reaction/slimepsteroid/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/slimepotion/steroid/P = new /obj/item/slimepotion/steroid + P.forceMove(get_turf(holder.my_atom)) +/datum/chemical_reaction/slimejam + name = "Slime Jam" + id = "m_jam" + result = "slimejelly" + required_reagents = list("sugar" = 1) + result_amount = 10 + required_container = /obj/item/slime_extract/purple + required_other = 1 - slimejam - name = "Slime Jam" - id = "m_jam" - result = "slimejelly" - required_reagents = list("sugar" = 5) - result_amount = 10 - required_container = /obj/item/slime_extract/purple - required_other = 1 +/datum/chemical_reaction/slimejam/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") //Dark Purple - slimeplasma - name = "Slime Plasma" - id = "m_plasma" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/darkpurple - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma - P.amount = 10 - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimeplasma + name = "Slime Plasma" + id = "m_plasma" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/darkpurple + required_other = 1 + +/datum/chemical_reaction/slimeplasma/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma + P.amount = 3 + P.forceMove(get_turf(holder.my_atom)) //Red - slimeglycerol - name = "Slime Glycerol" - id = "m_glycerol" - result = "glycerol" - required_reagents = list("plasma" = 5) - result_amount = 8 - required_container = /obj/item/slime_extract/red - required_other = 1 + +/datum/chemical_reaction/slimemutator + name = "Slime Mutator" + id = "m_slimemutator" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/red + required_other = 1 + +/datum/chemical_reaction/slimemutator/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/slimepotion/mutator/P = new /obj/item/slimepotion/mutator + P.forceMove(get_turf(holder.my_atom)) + +/datum/chemical_reaction/slimebloodlust + name = "Bloodlust" + id = "m_bloodlust" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/red + required_other = 1 + +/datum/chemical_reaction/slimebloodlust/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null)) + slime.rabid = 1 + slime.visible_message("The [slime] is driven into a frenzy!") - slimebloodlust - name = "Bloodlust" - id = "m_bloodlust" - result = null - required_reagents = list("blood" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/red - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null)) - slime.rabid = 1 - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The [slime] is driven into a frenzy!."), 1) +/datum/chemical_reaction/slimespeed + name = "Slime Speed" + id = "m_speed" + result = null + required_reagents = list("water" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/red + required_other = 1 +/datum/chemical_reaction/slimespeed/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/slimepotion/speed/P = new /obj/item/slimepotion/speed + P.forceMove(get_turf(holder.my_atom)) - slimespeed - name = "Slime Speed" - id = "m_speed" - result = null - required_reagents = list("water" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/red - required_other = 1 - - on_reaction(datum/reagents/holder) - feedback_add_details("slime_cores_used","[type]") - var/obj/item/weapon/slimespeed/P = new /obj/item/weapon/slimespeed - P.loc = get_turf(holder.my_atom) //Pink - slimeppotion - name = "Slime Potion" - id = "m_potion" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/pink - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/docility + name = "Docility Potion" + id = "m_potion" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/pink + required_other = 1 + +/datum/chemical_reaction/docility/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/slimepotion/docility/P = new /obj/item/slimepotion/docility + P.forceMove(get_turf(holder.my_atom)) //Black - slimemutate2 - name = "Advanced Mutation Toxin" - id = "mutationtoxin2" - result = "amutationtoxin" - required_reagents = list("plasma" = 5) - result_amount = 1 - required_other = 1 - required_container = /obj/item/slime_extract/black +/datum/chemical_reaction/slimemutate2 + name = "Advanced Mutation Toxin" + id = "mutationtoxin2" + result = "amutationtoxin" + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_other = 1 + required_container = /obj/item/slime_extract/black + +/datum/chemical_reaction/slimemutate2/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") //Oil - slimeexplosion - name = "Slime Explosion" - id = "m_explosion" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/oil - required_other = 1 - on_reaction(var/datum/reagents/holder) - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("\red The slime extract begins to vibrate violently !"), 1) - spawn(50) - if(holder && holder.my_atom) - explosion(get_turf(holder.my_atom), 1 ,3, 6) +/datum/chemical_reaction/slimeexplosion + name = "Slime Explosion" + id = "m_explosion" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/oil + required_other = 1 + +/datum/chemical_reaction/slimeexplosion/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate violently !") + spawn(50) + if(holder && holder.my_atom) + explosion(get_turf(holder.my_atom), 1 ,3, 6) + //Light Pink - slimepotion2 - name = "Slime Potion 2" - id = "m_potion2" - result = null - result_amount = 1 - required_container = /obj/item/slime_extract/lightpink - required_reagents = list("plasma" = 5) - required_other = 1 - on_reaction(var/datum/reagents/holder) - var/obj/item/weapon/sentience_potion/P = new /obj/item/weapon/sentience_potion - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimepotion2 + name = "Slime Potion 2" + id = "m_potion2" + result = null + result_amount = 1 + required_container = /obj/item/slime_extract/lightpink + required_reagents = list("plasma_dust" = 1) + required_other = 1 + +/datum/chemical_reaction/slimepotion2/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/slimepotion/sentience/P = new /obj/item/slimepotion/sentience + P.forceMove(get_turf(holder.my_atom)) + //Adamantine - slimegolem - name = "Slime Golem" - id = "m_golem" - result = null - required_reagents = list("plasma" = 5) - result_amount = 1 - required_container = /obj/item/slime_extract/adamantine - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/effect/goleRUNe/Z = new /obj/effect/goleRUNe - Z.loc = get_turf(holder.my_atom) - Z.announce_to_ghosts() +/datum/chemical_reaction/slimegolem + name = "Slime Golem" + id = "m_golem" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/adamantine + required_other = 1 + +/datum/chemical_reaction/slimegolem/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/effect/golemrune/Z = new /obj/effect/golemrune + Z.forceMove(get_turf(holder.my_atom)) + notify_ghosts("Golem rune created in [get_area(Z)].", 'sound/effects/ghost2.ogg') + //Bluespace - slimefloor2 - name = "Bluespace Floor" - id = "m_floor2" - result = null - required_reagents = list("blood" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/bluespace - required_other = 1 - on_reaction(datum/reagents/holder, created_volume) - feedback_add_details("slime_cores_used","[type]") - var/obj/item/stack/tile/bluespace/P = new /obj/item/stack/tile/bluespace - P.amount = 25 - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimefloor2 + name = "Bluespace Floor" + id = "m_floor2" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/bluespace + required_other = 1 + +/datum/chemical_reaction/slimefloor2/on_reaction(datum/reagents/holder, created_volume) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/stack/tile/bluespace/P = new /obj/item/stack/tile/bluespace + P.amount = 25 + P.forceMove(get_turf(holder.my_atom)) + + +/datum/chemical_reaction/slimecrystal + name = "Slime Crystal" + id = "m_crystal" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/bluespace + required_other = 1 + +/datum/chemical_reaction/slimecrystal/on_reaction(datum/reagents/holder, created_volume) + feedback_add_details("slime_cores_used","[type]") + if(holder.my_atom) + var/obj/item/weapon/ore/bluespace_crystal/BC = new(get_turf(holder.my_atom)) + BC.visible_message("The [BC.name] appears out of thin air!") - slimecrystal - name = "Slime Crystal" - id = "m_crystal" - result = null - required_reagents = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/bluespace - required_other = 1 - on_reaction(var/datum/reagents/holder, var/created_volume) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - if(holder.my_atom) - var/obj/item/weapon/ore/bluespace_crystal/BC = new(get_turf(holder.my_atom)) - BC.visible_message("The [BC.name] appears out of thin air!") //Cerulean - slimepsteroid2 - name = "Slime Steroid 2" - id = "m_steroid2" - result = null - required_reagents = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/cerulean - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/weapon/slimesteroid2/P = new /obj/item/weapon/slimesteroid2 - P.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimepsteroid2 + name = "Slime Steroid 2" + id = "m_steroid2" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/cerulean + required_other = 1 - slime_territory - name = "Slime Territory" - id = "s_territory" - result = null - required_reagents = list("blood" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/cerulean - required_other = 1 - on_reaction(datum/reagents/holder) - feedback_add_details("slime_cores_used","[type]") - var/obj/item/areaeditor/blueprints/slime/P = new /obj/item/areaeditor/blueprints/slime - P.forceMove(get_turf(holder.my_atom)) +/datum/chemical_reaction/slimepsteroid2/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/slimepotion/enhancer/P = new /obj/item/slimepotion/enhancer + P.forceMove(get_turf(holder.my_atom)) + + + +/datum/chemical_reaction/slime_territory + name = "Slime Territory" + id = "s_territory" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/cerulean + required_other = 1 + +/datum/chemical_reaction/slime_territory/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/areaeditor/blueprints/slime/P = new /obj/item/areaeditor/blueprints/slime + P.forceMove(get_turf(holder.my_atom)) //Sepia - slimestop - name = "Slime Stop" - id = "m_stop" - result = null - required_reagents = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/sepia - required_other = 1 - on_reaction(datum/reagents/holder) - feedback_add_details("slime_cores_used","[type]") - spawn(0) //otherwise the reagent won't be used up until after the full timstop is gone through. - var/mob/mob = get_mob_by_key(holder.my_atom.fingerprintslast) - var/obj/effect/timestop/T = new (get_turf(holder.my_atom)) - T.immune += mob - T.timestop() +/datum/chemical_reaction/slimestop + name = "Slime Stop" + id = "m_stop" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/sepia + required_other = 1 + +/datum/chemical_reaction/slimestop/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/mob/mob = get_mob_by_key(holder.my_atom.fingerprintslast) + var/obj/effect/timestop/T = new /obj/effect/timestop + T.forceMove(get_turf(holder.my_atom)) + T.immune += mob + T.timestop() - slimecamera - name = "Slime Camera" - id = "m_camera" - result = null - required_reagents = list("water" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/sepia - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/obj/item/device/camera/P = new /obj/item/device/camera - P.loc = get_turf(holder.my_atom) - var/obj/item/device/camera_film/Z = new /obj/item/device/camera_film - Z.loc = get_turf(holder.my_atom) +/datum/chemical_reaction/slimecamera + name = "Slime Camera" + id = "m_camera" + result = null + required_reagents = list("water" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/sepia + required_other = 1 + +/datum/chemical_reaction/slimecamera/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/device/camera/P = new /obj/item/device/camera + P.forceMove(get_turf(holder.my_atom)) + var/obj/item/device/camera_film/Z = new /obj/item/device/camera_film + Z.forceMove(get_turf(holder.my_atom)) + +/datum/chemical_reaction/slimefloor + name = "Sepia Floor" + id = "m_floor" + result = null + required_reagents = list("blood" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/sepia + required_other = 1 + +/datum/chemical_reaction/slimefloor/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/obj/item/stack/tile/sepia/P = new /obj/item/stack/tile/sepia + P.amount = 25 + P.forceMove(get_turf(holder.my_atom)) - slimefloor - name = "Sepia Floor" - id = "m_floor" - result = null - required_reagents = list("blood" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/sepia - required_other = 1 - on_reaction(datum/reagents/holder) - feedback_add_details("slime_cores_used","[type]") - var/obj/item/stack/tile/sepia/P = new /obj/item/stack/tile/sepia - P.amount = 25 - P.loc = get_turf(holder.my_atom) //Pyrite - slimepaint - name = "Slime Paint" - id = "s_paint" - result = null - required_reagents = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_extract/pyrite - required_other = 1 - on_reaction(var/datum/reagents/holder) - feedback_add_details("slime_cores_used","[replacetext(name," ","_")]") - var/list/paints = subtypesof(/obj/item/weapon/reagent_containers/glass/paint) - var/chosen = pick(paints) - var/obj/P = new chosen - if(P) - P.loc = get_turf(holder.my_atom) \ No newline at end of file + + +/datum/chemical_reaction/slimepaint + name = "Slime Paint" + id = "s_paint" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_container = /obj/item/slime_extract/pyrite + required_other = 1 + +/datum/chemical_reaction/slimepaint/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/list/paints = subtypesof(/obj/item/weapon/reagent_containers/glass/paint) + var/chosen = pick(paints) + var/obj/P = new chosen + if(P) + P.forceMove(get_turf(holder.my_atom)) + +//Rainbow :o) +/datum/chemical_reaction/slimeRNG + name = "Random Core" + id = "slimerng" + result = null + required_reagents = list("plasma_dust" = 1) + result_amount = 1 + required_other = 1 + required_container = /obj/item/slime_extract/rainbow + +/datum/chemical_reaction/slimeRNG/on_reaction(datum/reagents/holder) + feedback_add_details("slime_cores_used","[type]") + var/mob/living/carbon/slime/S = new /mob/living/carbon/slime + S.colour = pick("grey","orange", "metal", "blue", "purple", "dark purple", "dark blue", "green", "silver", "yellow", "gold", "yellow", "red", "silver", "pink", "cerulean", "sepia", "bluespace", "pyrite", "light pink", "oil", "adamantine", "black") + S.forceMove(get_turf(holder.my_atom)) + S.visible_message("Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!") diff --git a/code/modules/reagents/oldchem/reagents/reagents_flammable.dm b/code/modules/reagents/oldchem/reagents/reagents_flammable.dm index 361507d19e6..8494ff3957b 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_flammable.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_flammable.dm @@ -48,7 +48,7 @@ holder.remove_reagent("epinephrine", 2) if(iscarbon(M)) var/mob/living/carbon/C = M - C.adjustPlasma(20) + C.adjustPlasma(10) ..() return diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index de13b500f33..d37460b4949 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -303,10 +303,10 @@ /obj/item/weapon/reagent_containers/glass/bottle/plasma - name = "liquid plasma bottle" - desc = "A small bottle of liquid plasma. Extremely toxic and reacts with micro-organisms inside blood." + name = "plasma dust bottle" + desc = "A small bottle of plasma in dust form. Extremely toxic and reacts with micro-organisms inside blood." icon_state = "bottle8" - list_reagents = list("plasma" = 30) + list_reagents = list("plasma_dust" = 30) /obj/item/weapon/reagent_containers/glass/bottle/diphenhydramine name = "diphenhydramine bottle" diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index cf6927a6e0d..44384db8187 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -6,120 +6,95 @@ desc = "Goo extracted from a slime. Legends claim these to have \"magical powers\"." icon = 'icons/mob/slimes.dmi' icon_state = "grey slime extract" - force = 1.0 - w_class = 1.0 + force = 1 + w_class = 1 throwforce = 0 throw_speed = 3 throw_range = 6 - origin_tech = "biotech=4" - item_color = "grey" + origin_tech = "biotech=3" var/Uses = 1 // uses before it goes inert - var/enhanced = 0 //has it been enhanced before? - attackby(obj/item/O as obj, mob/user as mob, params) - if(istype(O, /obj/item/weapon/slimesteroid2)) - if(enhanced == 1) - to_chat(user, " This extract has already been enhanced!") - return ..() - if(Uses == 0) - to_chat(user, " You can't enhance a used extract!") - return ..() - to_chat(user, "You apply the enhancer. It now has triple the amount of uses.") - Uses = 3 - enhanced = 1 - qdel(O) - if(istype(O,/obj/item/weapon/storage/bag)) - ..() +/obj/item/slime_extract/attackby(obj/item/O, mob/user) + if(istype(O, /obj/item/slimepotion/enhancer)) + if(Uses >= 5) + to_chat(user, "You cannot enhance this extract further!") + return ..() + to_chat(user, "You apply the enhancer to the slime extract. It may now be reused one more time.") + Uses++ + qdel(O) + ..() /obj/item/slime_extract/New() ..() create_reagents(100) - /obj/item/slime_extract/grey name = "grey slime extract" icon_state = "grey slime extract" - item_color = "grey" /obj/item/slime_extract/gold name = "gold slime extract" icon_state = "gold slime extract" - item_color = "gold" /obj/item/slime_extract/silver name = "silver slime extract" icon_state = "silver slime extract" - item_color = "silver" /obj/item/slime_extract/metal name = "metal slime extract" icon_state = "metal slime extract" - item_color = "metal" /obj/item/slime_extract/purple name = "purple slime extract" icon_state = "purple slime extract" - item_color = "purple" /obj/item/slime_extract/darkpurple name = "dark purple slime extract" icon_state = "dark purple slime extract" - item_color = "darkpurple" /obj/item/slime_extract/orange name = "orange slime extract" icon_state = "orange slime extract" - item_color = "orange" /obj/item/slime_extract/yellow name = "yellow slime extract" icon_state = "yellow slime extract" - item_color = "yellow" /obj/item/slime_extract/red name = "red slime extract" icon_state = "red slime extract" - item_color = "red" /obj/item/slime_extract/blue name = "blue slime extract" icon_state = "blue slime extract" - item_color = "blue" /obj/item/slime_extract/darkblue name = "dark blue slime extract" icon_state = "dark blue slime extract" - item_color = "darkblue" /obj/item/slime_extract/pink name = "pink slime extract" icon_state = "pink slime extract" - item_color = "pink" /obj/item/slime_extract/green name = "green slime extract" icon_state = "green slime extract" - item_color = "green" /obj/item/slime_extract/lightpink name = "light pink slime extract" icon_state = "light pink slime extract" - item_color = "lightpink" /obj/item/slime_extract/black name = "black slime extract" icon_state = "black slime extract" - item_color = "black" /obj/item/slime_extract/oil name = "oil slime extract" icon_state = "oil slime extract" - item_color = "oil" /obj/item/slime_extract/adamantine name = "adamantine slime extract" icon_state = "adamantine slime extract" - item_color = "adamantine" /obj/item/slime_extract/bluespace name = "bluespace slime extract" @@ -141,57 +116,66 @@ name = "rainbow slime extract" icon_state = "rainbow slime extract" -////Pet Slime Creation/// +////Slime-derived potions/// -/obj/item/weapon/slimepotion - name = "docility potion" - desc = "A potent chemical mix that will nullify a slime's powers, causing it to become docile and tame." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle19" +/obj/item/slimepotion + name = "slime potion" + desc = "A hard yet gelatinous capsule excreted by a slime, containing mysterious substances." w_class = 1 origin_tech = "biotech=4" - attack(mob/living/carbon/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/carbon/slime))//If target is not a slime. - to_chat(user, " The potion only works on slimes!") - return ..() - if(M.stat) - to_chat(user, " The slime is dead!") - return..() - if(M.mind) - to_chat(user, " The slime resists!") - return ..() - if(M.is_adult) - var/mob/living/simple_animal/adultslime/pet = new /mob/living/simple_animal/adultslime(M.loc) - pet.icon_state = "[M.colour] adult slime" - pet.icon_living = "[M.colour] adult slime" - pet.icon_dead = "[M.colour] baby slime dead" - pet.colour = "[M.colour]" - qdel(M) - var/newname = sanitize(copytext(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text,1,MAX_NAME_LEN)) +/obj/item/slimepotion/afterattack(obj/item/weapon/reagent_containers/target, mob/user , proximity) + if (istype(target)) + to_chat(user, "You cannot transfer [src] to [target]! It appears the potion must be given directly to a slime to absorb.") // le fluff faec + return - if (!newname) - newname = "pet slime" - pet.name = newname - pet.real_name = newname - qdel(src) - else - var/mob/living/simple_animal/slime/pet = new /mob/living/simple_animal/slime(M.loc) - pet.icon_state = "[M.colour] baby slime" - pet.icon_living = "[M.colour] baby slime" - pet.icon_dead = "[M.colour] baby slime dead" - pet.colour = "[M.colour]" - qdel(M) - var/newname = sanitize(copytext(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text,1,MAX_NAME_LEN)) +/obj/item/slimepotion/docility + name = "docility potion" + desc = "A potent chemical mix that nullifies a slime's hunger, causing it to become docile and tame." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle19" - if (!newname) - newname = "pet slime" - pet.name = newname - pet.real_name = newname - qdel(src) - to_chat(user, "You feed the slime the potion, removing it's powers and calming it.") +/obj/item/slimepotion/docility/attack(mob/living/carbon/slime/M, mob/user) + if(!isslime(M)) + to_chat(user, " The potion only works on slimes!") + return ..() + if(M.stat) + to_chat(user, " The slime is dead!") + return..() + if(M.mind) + to_chat(user, " The slime resists!") + return ..() + if(M.is_adult) + var/mob/living/simple_animal/adultslime/pet = new /mob/living/simple_animal/adultslime(M.loc) + pet.icon_state = "[M.colour] adult slime" + pet.icon_living = "[M.colour] adult slime" + pet.icon_dead = "[M.colour] baby slime dead" + pet.colour = "[M.colour]" + qdel(M) + var/newname = sanitize(copytext(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text,1,MAX_NAME_LEN)) -/obj/item/weapon/sentience_potion + if (!newname) + newname = "pet slime" + pet.name = newname + pet.real_name = newname + qdel(src) + else + var/mob/living/simple_animal/slime/pet = new /mob/living/simple_animal/slime(M.loc) + pet.icon_state = "[M.colour] baby slime" + pet.icon_living = "[M.colour] baby slime" + pet.icon_dead = "[M.colour] baby slime dead" + pet.colour = "[M.colour]" + qdel(M) + var/newname = sanitize(copytext(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text,1,MAX_NAME_LEN)) + + if (!newname) + newname = "pet slime" + pet.name = newname + pet.real_name = newname + qdel(src) + to_chat(user, "You feed the slime the potion, removing it's powers and calming it.") + +/obj/item/slimepotion/sentience name = "sentience potion" desc = "A miraculous chemical mix that can raise the intelligence of creatures to human levels. Unlike normal slime potions, it can be absorbed by any nonsentient being." icon = 'icons/obj/chemical.dmi' @@ -199,11 +183,9 @@ origin_tech = "biotech=5" var/list/not_interested = list() var/being_used = 0 - w_class = 1 var/sentience_type = SENTIENCE_ORGANIC - -/obj/item/weapon/sentience_potion/afterattack(mob/living/M, mob/user) +/obj/item/slimepotion/sentience/afterattack(mob/living/M, mob/user) if(being_used || !ismob(M)) return if(!isanimal(M) || M.ckey) //only works on animals that aren't player controlled @@ -242,51 +224,89 @@ ..() -/obj/item/weapon/slimesteroid +/obj/item/slimepotion/steroid name = "slime steroid" - desc = "A potent chemical mix that will cause a slime to generate more extract." + desc = "A potent chemical mix that will cause a baby slime to generate more extract." icon = 'icons/obj/chemical.dmi' icon_state = "bottle16" - w_class = 1 - origin_tech = "biotech=4" +/obj/item/slimepotion/steroid/attack(mob/living/carbon/slime/M, mob/user) + if(!isslime(M))//If target is not a slime. + to_chat(user, "The steroid only works on baby slimes!") + return ..() + if(M.is_adult) //Can't steroidify adults + to_chat(user, "Only baby slimes can use the steroid!") + return ..() + if(M.stat) + to_chat(user, "The slime is dead!") + return ..() + if(M.cores >= 5) + to_chat(user, "The slime already has the maximum amount of extract!") + return ..() - attack(mob/living/carbon/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/carbon/slime))//If target is not a slime. - to_chat(user, " The steroid only works on baby slimes!") - return ..() - if(M.is_adult) //Can't tame adults - to_chat(user, " Only baby slimes can use the steroid!") - return..() - if(M.stat) - to_chat(user, " The slime is dead!") - return..() - if(M.cores == 3) - to_chat(user, " The slime already has the maximum amount of extract!") - return..() + to_chat(user, "You feed the slime the steroid. It will now produce one more extract.") + M.cores++ + qdel(src) - to_chat(user, "You feed the slime the steroid. It now has triple the amount of extract.") - M.cores = 3 - qdel(src) - -/obj/item/weapon/slimesteroid2 +/obj/item/slimepotion/enhancer name = "extract enhancer" - desc = "A potent chemical mix that will give a slime extract three uses." + desc = "A potent chemical mix that will give a slime extract an additional use." icon = 'icons/obj/chemical.dmi' icon_state = "bottle17" - w_class = 1 - origin_tech = "biotech=4" +/obj/item/slimepotion/stabilizer + name = "slime stabilizer" + desc = "A potent chemical mix that will reduce the chance of a slime mutating." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle15" -/obj/item/weapon/slimespeed +/obj/item/slimepotion/stabilizer/attack(mob/living/carbon/slime/M, mob/user) + if(!isslime(M)) + to_chat(user, "The stabilizer only works on slimes!") + return ..() + if(M.stat) + to_chat(user, "The slime is dead!") + return ..() + if(M.mutation_chance == 0) + to_chat(user, "The slime already has no chance of mutating!") + return ..() + + to_chat(user, "You feed the slime the stabilizer. It is now less likely to mutate.") + M.mutation_chance = Clamp(M.mutation_chance-15,0,100) + qdel(src) + +/obj/item/slimepotion/mutator + name = "slime mutator" + desc = "A potent chemical mix that will increase the chance of a slime mutating." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle3" + +/obj/item/slimepotion/mutator/attack(mob/living/carbon/slime/M, mob/user) + if(!isslime(M)) + to_chat(user, "The mutator only works on slimes!") + return ..() + if(M.stat) + to_chat(user, "The slime is dead!") + return ..() + if(M.mutator_used) + to_chat(user, "This slime has already consumed a mutator, any more would be far too unstable!") + return ..() + if(M.mutation_chance == 100) + to_chat(user, "The slime is already guaranteed to mutate!") + return ..() + + to_chat(user, "You feed the slime the mutator. It is now more likely to mutate.") + M.mutation_chance = Clamp(M.mutation_chance+12,0,100) + M.mutator_used = TRUE + qdel(src) + +/obj/item/slimepotion/speed name = "slime speed potion" desc = "A potent chemical mix that will remove the slowdown from any item." icon = 'icons/obj/chemical.dmi' icon_state = "bottle3" - w_class = 1 - origin_tech = "biotech=4" -/obj/item/weapon/slimespeed/afterattack(obj/item/C, mob/user) +/obj/item/slimepotion/speed/afterattack(obj/item/C, mob/user) ..() if(!istype(C)) to_chat(user, "The potion can only be used on items!") @@ -299,17 +319,14 @@ C.slowdown = 0 qdel(src) -/obj/item/weapon/slimefireproof +/obj/item/slimepotion/fireproof name = "slime chill potion" desc = "A potent chemical mix that will fireproof any article of clothing. Has three uses." icon = 'icons/obj/chemical.dmi' icon_state = "bottle17" var/uses = 3 - w_class = 1 - origin_tech = "biotech=4" - -/obj/item/weapon/slimefireproof/afterattack(obj/item/clothing/C, mob/user) +/obj/item/slimepotion/fireproof/afterattack(obj/item/clothing/C, mob/user) ..() if(!uses) qdel(src) @@ -319,7 +336,7 @@ return if(C.max_heat_protection_temperature == FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT) to_chat(user, "The [C] is already fireproof!") - return..() + return ..() to_chat(user, "You slather the blue gunk over the [C], fireproofing it.") C.name = "fireproofed [C.name]" C.color = "#000080" @@ -329,6 +346,78 @@ if(!uses) qdel(src) +////////Adamantine Golem stuff I dunno where else to put it + +/obj/effect/golemrune + anchored = 1 + desc = "a strange rune used to create golems. It glows when spirits are nearby." + name = "rune" + icon = 'icons/obj/rune.dmi' + icon_state = "golem" + unacidable = 1 + layer = TURF_LAYER + var/list/mob/dead/observer/ghosts[0] + +/obj/effect/golemrune/New() + ..() + processing_objects.Add(src) + +/obj/effect/golemrune/process() + if(ghosts.len>0) + icon_state = "golem2" + else + icon_state = "golem" + +/obj/effect/golemrune/attack_hand(mob/living/user as mob) + var/mob/dead/observer/ghost + for(var/mob/dead/observer/O in src.loc) + if(!check_observer(O)) + to_chat(O, "\red You are not eligible to become a golem.") + continue + ghost = O + break + if(!ghost) + to_chat(user, "The rune fizzles uselessly. There is no spirit nearby.") + return + var/mob/living/carbon/human/golem/G = new /mob/living/carbon/human/golem + G.change_gender(pick(MALE,FEMALE)) + G.loc = src.loc + G.key = ghost.key + to_chat(G, "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost.") + qdel(src) + +/obj/effect/golemrune/Topic(href,href_list) + if("signup" in href_list) + var/mob/dead/observer/O = locate(href_list["signup"]) + volunteer(O) + +/obj/effect/golemrune/attack_ghost(var/mob/dead/observer/O) + if(!O) return + volunteer(O) + +/obj/effect/golemrune/proc/check_observer(var/mob/dead/observer/O) + if(!O) + return 0 + if(!O.client) + return 0 + if(O.mind && O.mind.current && O.mind.current.stat != DEAD) + return 0 + if(O.has_enabled_antagHUD == 1 && config.antag_hud_restricted) + return 0 + return 1 + +/obj/effect/golemrune/proc/volunteer(var/mob/dead/observer/O) + if(O in ghosts) + ghosts.Remove(O) + to_chat(O, "\red You are no longer signed up to be a golem.") + else + if(!check_observer(O)) + to_chat(O, "\red You are not eligible to become a golem.") + return + ghosts.Add(O) + to_chat(O, "\blue You are signed up to be a golem.") + + /obj/effect/timestop @@ -460,80 +549,3 @@ icon_state = "sepia" desc = "Time seems to flow very slowly around these tiles." floor_tile = /obj/item/stack/tile/sepia - -/obj/effect/goleRUNe - anchored = 1 - desc = "a strange rune used to create golems. It glows when spirits are nearby." - name = "rune" - icon = 'icons/obj/rune.dmi' - icon_state = "golem" - unacidable = 1 - layer = TURF_LAYER - var/list/mob/dead/observer/ghosts[0] - - New() - ..() - processing_objects.Add(src) - - process() - if(ghosts.len>0) - icon_state = "golem2" - else - icon_state = "golem" - - attack_hand(mob/living/user as mob) - var/mob/dead/observer/ghost - for(var/mob/dead/observer/O in src.loc) - if(!check_observer(O)) - to_chat(O, "\red You are not eligible to become a golem.") - continue - ghost = O - break - if(!ghost) - to_chat(user, "The rune fizzles uselessly. There is no spirit nearby.") - return - var/mob/living/carbon/human/golem/G = new /mob/living/carbon/human/golem - G.change_gender(pick(MALE,FEMALE)) - G.loc = src.loc - G.key = ghost.key - to_chat(G, "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost.") - qdel(src) - - - proc/announce_to_ghosts() - for(var/mob/dead/observer/O in player_list) - if(O.client) - var/area/A = get_area(src) - if(A) - to_chat(O, "\blue Golem rune created in [A.name]. (Teleport | Sign Up)") - - Topic(href,href_list) - if("signup" in href_list) - var/mob/dead/observer/O = locate(href_list["signup"]) - volunteer(O) - - attack_ghost(var/mob/dead/observer/O) - if(!O) return - volunteer(O) - - proc/check_observer(var/mob/dead/observer/O) - if(!O) - return 0 - if(!O.client) - return 0 - if(O.mind && O.mind.current && O.mind.current.stat != DEAD) - return 0 - if(O.has_enabled_antagHUD == 1 && config.antag_hud_restricted) - return 0 - return 1 - - proc/volunteer(var/mob/dead/observer/O) - if(O in ghosts) - ghosts.Remove(O) - to_chat(O, "\red You are no longer signed up to be a golem.") - else - if(!check_observer(O)) - to_chat(O, "\red You are not eligible to become a golem.") - return - ghosts.Add(O) - to_chat(O, "\blue You are signed up to be a golem.") From bea90a5cd1f82b53ce633c18bf893cdf93c03909 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Thu, 7 Apr 2016 09:29:54 -0400 Subject: [PATCH 2/2] monkey recycler QoL --- code/game/machinery/kitchen/monkeyrecycler.dm | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/kitchen/monkeyrecycler.dm b/code/game/machinery/kitchen/monkeyrecycler.dm index d41558c161e..12feba6cf17 100644 --- a/code/game/machinery/kitchen/monkeyrecycler.dm +++ b/code/game/machinery/kitchen/monkeyrecycler.dm @@ -12,6 +12,8 @@ var/grinded = 0 var/required_grind = 5 var/cube_production = 1 + var/cycle_through = 0 + var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube_type = /obj/item/weapon/reagent_containers/food/snacks/monkeycube /obj/machinery/monkey_recycler/New() ..() @@ -44,6 +46,22 @@ default_deconstruction_crowbar(O) + if(istype(O, /obj/item/device/multitool)) + cycle_through++ + switch(cycle_through) + if(1) + cube_type = /obj/item/weapon/reagent_containers/food/snacks/monkeycube/farwacube + if(2) + cube_type = /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wolpincube + if(3) + cube_type = /obj/item/weapon/reagent_containers/food/snacks/monkeycube/stokcube + if(4) + cube_type = /obj/item/weapon/reagent_containers/food/snacks/monkeycube/neaeracube + if(5) + cube_type = /obj/item/weapon/reagent_containers/food/snacks/monkeycube + cycle_through = 0 + to_chat(user, "You change the monkeycube type to [cube_type.name].") + if (src.stat != 0) //NOPOWER etc return if (istype(O, /obj/item/weapon/grab)) @@ -80,7 +98,7 @@ playsound(src.loc, 'sound/machines/hiss.ogg', 50, 1) grinded -= required_grind for(var/i = 0, i < cube_production, i++) // Forgot to fix this bit the first time through - new /obj/item/weapon/reagent_containers/food/snacks/monkeycube(src.loc) + new cube_type(src.loc) to_chat(user, "The machine's display flashes that it has [grinded] monkey\s worth of material left.") else // I'm not sure if the \s macro works with a word in between; I'll play it safe to_chat(user, "The machine needs at least [required_grind] monkey\s worth of material to compress [cube_production] monkey\s. It only has [grinded].")