diff --git a/code/WorkInProgress/Chemistry-Machinery.dm b/code/WorkInProgress/Chemistry-Machinery.dm index fb61bdf3cc6..6a0ec9f0a80 100644 --- a/code/WorkInProgress/Chemistry-Machinery.dm +++ b/code/WorkInProgress/Chemistry-Machinery.dm @@ -10,8 +10,7 @@ icon_state = "dispenser" var/energy = 25 var/max_energy = 25 - var/list/dispensable_reagents = list("water","oxygen","nitrogen","hydrogen","potassium","sodium","mercury","copper","sulfur","carbon","chlorine","fluorine","phosphorus","lithium","acid","radium","iron","aluminum","silicon","plasma","sugar","ethanol") - + var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine","sodium","aluminum","silicon","phosphorus","sulfur","chlorine","potassium","iron","copper","mercury","radium","water","ethanol","sugar","acid",) proc recharge() if(stat & BROKEN) return @@ -485,4 +484,171 @@ else ..() - return \ No newline at end of file + return +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// +/obj/machinery/reagentgrinder + name = "Reagent Grinder" + icon = 'kitchen.dmi' + icon_state = "juicer1" + layer = 2.9 + density = 1 + anchored = 1 + use_power = 1 + idle_power_usage = 5 + active_power_usage = 100 + var/obj/item/weapon/reagent_containers/beaker = null + var/global/list/allowed_items = list ( + /obj/item/stack/sheet/plasma = "plasma", + /obj/item/stack/sheet/plasma = "uranium", + /obj/item/stack/sheet/clown = "banana", + /obj/item/stack/sheet/silver = "silver", + /obj/item/stack/sheet/gold = "gold", + /obj/item/weapon/reagent_containers/food/snacks/grown/corn = "cornoil", + ) + +/obj/machinery/reagentgrinder/New() + beaker = new /obj/item/weapon/reagent_containers/glass/large(src) + +/obj/machinery/reagentgrinder/update_icon() + icon_state = "juicer"+num2text(!isnull(beaker)) + return + + +/obj/machinery/reagentgrinder/attackby(var/obj/item/O as obj, var/mob/user as mob) + if (istype(O,/obj/item/weapon/reagent_containers/glass) || \ + istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass)) + if (beaker) + return 1 + else + user.before_take_item(O) + O.loc = src + beaker = O + src.verbs += /obj/machinery/reagentgrinder/verb/detach + update_icon() + src.updateUsrDialog() + return 0 + if (!is_type_in_list(O, allowed_items)) + user << "Cannot refine into a reagent." + return 1 + user.before_take_item(O) + O.loc = src + src.updateUsrDialog() + return 0 + +/obj/machinery/reagentgrinder/attack_paw(mob/user as mob) + return src.attack_hand(user) + +/obj/machinery/reagentgrinder/attack_ai(mob/user as mob) + return 0 + +/obj/machinery/reagentgrinder/attack_hand(mob/user as mob) + user.machine = src + interact(user) + +/obj/machinery/reagentgrinder/proc/interact(mob/user as mob) // The microwave Menu + var/is_chamber_empty = 0 + var/is_beaker_ready = 0 + var/processing_chamber = "" + var/beaker_contents = "" + + for (var/i in allowed_items) + for (var/obj/item/O in src.contents) + if (!istype(O,i)) + continue + processing_chamber+= "some [O]
" + break + if (!processing_chamber) + is_chamber_empty = 1 + processing_chamber = "Nothing." + if (!beaker) + beaker_contents = "\The [src] has no beaker attached." + else if (!beaker.reagents.total_volume) + beaker_contents = "\The [src] has attached an empty beaker." + is_beaker_ready = 1 + else if (beaker.reagents.total_volume < beaker.reagents.maximum_volume) + beaker_contents = "\The [src] has attached a beaker with something." + is_beaker_ready = 1 + else + beaker_contents = "\The [src] has attached a beaker and beaker is full!" + + var/dat = {" +Processing chamber contains:
+[processing_chamber]
+[beaker_contents]
+"} + if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) + dat += "Turn on!
" + if (beaker) + dat += "
Detach a beacker!
" + user << browse("Reagent Grinder[dat]", "window=reagentgrinder") + onclose(user, "reagentgrinder") + return + + +/obj/machinery/reagentgrinder/Topic(href, href_list) + if(..()) + return + usr.machine = src + switch(href_list["action"]) + if ("grind") + grind() + + if ("detach") + detach() + src.updateUsrDialog() + return + +/obj/machinery/reagentgrinder/verb/detach() + set category = "Object" + set name = "Detach Beaker from the grinder" + set src in oview(1) + if (usr.stat != 0) + return + if (!beaker) + return + src.verbs -= /obj/machinery/reagentgrinder/verb/detach + beaker.loc = src.loc + beaker = null + update_icon() + +/obj/machinery/reagentgrinder/proc/get_juice_id(var/obj/item/weapon/reagent_containers/food/snacks/grown/O) + for (var/i in allowed_items) + if (istype(O, i)) + return allowed_items[i] + +/obj/machinery/reagentgrinder/proc/get_juice_amount(var/obj/item/weapon/reagent_containers/food/snacks/grown/O) + if (!istype(O)) + return 5 + else if (O.potency == -1) + return 5 + else + return round(5*sqrt(O.potency)) + +/obj/machinery/reagentgrinder/proc/get_grind_id(var/obj/item/stack/sheet/O) + for (var/i in allowed_items) + if (istype(O, i)) + return allowed_items[i] + +/obj/machinery/reagentgrinder/proc/get_grind_amount(var/obj/item/stack/sheet/O) + return 20 + +/obj/machinery/reagentgrinder/proc/grind() + power_change() //it is a portable machine + if(stat & (NOPOWER|BROKEN)) + return + if (!beaker || beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + return + playsound(src.loc, 'juicer.ogg', 50, 1) + for (var/obj/item/weapon/reagent_containers/food/snacks/O in src.contents) + var/r_id = get_juice_id(O) + beaker.reagents.add_reagent(r_id,get_juice_amount(O)) + del(O) + if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break + for (var/obj/item/stack/sheet/O in src.contents) + var/g_id = get_grind_id(O) + beaker.reagents.add_reagent(g_id,get_grind_amount(O)) + del(O) + if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break \ No newline at end of file diff --git a/code/datums/diseases/cold9.dm b/code/datums/diseases/cold9.dm new file mode 100644 index 00000000000..f8af3aab217 --- /dev/null +++ b/code/datums/diseases/cold9.dm @@ -0,0 +1,39 @@ +/datum/disease/cold9 + name = "The Cold" + max_stages = 3 + spread = "On contact" + spread_type = CONTACT_GENERAL + cure = "Common Cold Anti-bodies & Spaceacillin" + cure_id = "spaceacillin" + agent = "ICE9-rhinovirus" + affected_species = list("Human") + desc = "If left untreated the subject will slow, as if partly frozen." + severity = "Moderate" + +/datum/disease/cold/stage_act() + ..() + switch(stage) + if(2) + affected_mob.bodytemperature -= 5 + if(prob(1) && prob(10)) + affected_mob << "\blue You feel better." + affected_mob.virus.cure() + return + if(prob(1)) + affected_mob.emote("sneeze") + if(prob(1)) + affected_mob.emote("cough") + if(prob(1)) + affected_mob << "\red Your throat feels sore." + if(prob(1)) + affected_mob << "\red You feel stiff." + if(3) + affected_mob.bodytemperature -= 10 + if(prob(1)) + affected_mob.emote("sneeze") + if(prob(1)) + affected_mob.emote("cough") + if(prob(1)) + affected_mob << "\red Your throat feels sore." + if(prob(1)) + affected_mob << "\red You feel stiff." \ No newline at end of file diff --git a/code/datums/diseases/fake_gbs.dm b/code/datums/diseases/fake_gbs.dm index 3a264f5ca04..2ef958bc04a 100644 --- a/code/datums/diseases/fake_gbs.dm +++ b/code/datums/diseases/fake_gbs.dm @@ -6,7 +6,7 @@ cure = "Synaptizine & Sulfur" cure_id = list("synaptizine","sulfur") agent = "Gravitokinetic Bipotential SADS-" - affected_species = list("Human") + affected_species = list("Human", "Monkey") desc = "If left untreated death will occur." severity = "Major" diff --git a/code/datums/diseases/flu.dm b/code/datums/diseases/flu.dm index 094ed4aea52..ee8a5d8d387 100644 --- a/code/datums/diseases/flu.dm +++ b/code/datums/diseases/flu.dm @@ -6,7 +6,7 @@ cure_id = "spaceacillin" cure_chance = 10 agent = "H13N1 flu virion" - affected_species = list("Human") + affected_species = list("Human", "Monkey") permeability_mod = 0.75 desc = "If left untreated the subject will feel quite unwell." severity = "Medium" diff --git a/code/datums/diseases/fluspanish.dm b/code/datums/diseases/fluspanish.dm new file mode 100644 index 00000000000..4bbd8a15a1d --- /dev/null +++ b/code/datums/diseases/fluspanish.dm @@ -0,0 +1,38 @@ +/datum/disease/fluspanish + name = "Spanish inquisition Flu" + max_stages = 3 + spread = "Airborne" + cure = "Spaceacillin & Anti-bodies to the common flu" + cure_id = "spaceacillin" + cure_chance = 10 + agent = "1nqu1s1t10n flu virion" + affected_species = list("Human") + permeability_mod = 0.75 + desc = "If left untreated the subject will burn to death for being a heretic." + severity = "Serious" + +/datum/disease/flu/stage_act() + ..() + switch(stage) + if(2) + affected_mob.bodytemperature += 5 + if(prob(1)) + affected_mob.emote("sneeze") + if(prob(1)) + affected_mob.emote("cough") + if(prob(1)) + affected_mob << "\red You're burning in your own skin!" + if(prob(20)) + affected_mob.take_organ_damage(0,3) + + if(3) + affected_mob.bodytemperature += 10 + if(prob(1)) + affected_mob.emote("sneeze") + if(prob(1)) + affected_mob.emote("cough") + if(prob(1)) + affected_mob << "\red You're soul feels on fire!" + if(prob(20)) + affected_mob.take_organ_damage(0,5) + return diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 9eb3d7a91bc..1c17533d21b 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -151,7 +151,7 @@ access_tox, access_tox_storage, access_chemistry, access_medical, access_medlab, access_engine, access_emergency_storage, access_change_ids, access_ai_upload, access_eva, access_heads, access_all_personal_lockers, access_tech_storage, access_maint_tunnels, access_bar, access_janitor, - access_crematorium, access_kitchen, access_robotics, access_cargo, access_cargo_bot, access_hydroponics, access_lawyer, access_virology, access_surgery, + access_crematorium, access_kitchen, access_robotics, access_cargo, access_cargo_bot, access_hydroponics, access_lawyer, access_theatre, access_research, access_mining_office, access_mining, access_heads_vault, access_mining_station, access_hop) if("Atmospheric Technician") return list(access_atmospherics, access_maint_tunnels, access_emergency_storage) @@ -180,10 +180,10 @@ access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva, access_heads, access_ai_upload, access_construction, access_robotics, access_mint, access_ce) - if("Research Director") // added hydroponics access -- Skie + if("Research Director") // removed hydroponics access, they are a supply field, not science return list(access_medical, access_morgue, access_medlab, access_rd, access_tech_storage, access_maint_tunnels, access_heads, access_tox, - access_tox_storage, access_chemistry, access_teleporter, access_hydroponics, access_virology, access_research, access_robotics, access_xenobiology) + access_tox_storage, access_chemistry, access_teleporter, access_virology, access_research, access_robotics, access_xenobiology) if("Virologist") return list(access_medical, access_morgue, access_virology, access_research) if("Chief Medical Officer") diff --git a/maps/tgstation.2.0.7.dmm b/maps/tgstation.2.0.7.dmm index 943002a302e..bae0d93a4b1 100644 --- a/maps/tgstation.2.0.7.dmm +++ b/maps/tgstation.2.0.7.dmm @@ -2885,7 +2885,7 @@ "bdy" = (/obj/stool/chair{dir = 1},/obj/item/device/radio/intercom{pixel_x = -25},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "bdz" = (/obj/machinery/chem_dispenser,/obj/cable{icon_state = "0-2"; d2 = 2},/obj/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "bdA" = (/obj/machinery/chem_master,/obj/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) -"bdB" = (/obj/secure_closet/chemical,/obj/machinery/camera{c_tag = "Chemistry"},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) +"bdB" = (/obj/machinery/camera{c_tag = "Chemistry"},/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "bdC" = (/obj/table{dir = 10; icon_state = "tabledir"},/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "bdD" = (/obj/table{dir = 2; icon_state = "tabledir"},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "bdE" = (/obj/table{dir = 2; icon_state = "tabledir"},/obj/machinery/alarm{frequency = 1437; pixel_y = 23},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) diff --git a/tgstation.dme b/tgstation.dme index b9ea4572d53..92c43a4fc58 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -191,9 +191,11 @@ #include "code\datums\diseases\beesease.dm" #include "code\datums\diseases\brainrot.dm" #include "code\datums\diseases\cold.dm" +#include "code\datums\diseases\cold9.dm" #include "code\datums\diseases\dna_spread.dm" #include "code\datums\diseases\fake_gbs.dm" #include "code\datums\diseases\flu.dm" +#include "code\datums\diseases\fluspanish.dm" #include "code\datums\diseases\gbs.dm" #include "code\datums\diseases\jungle_fever.dm" #include "code\datums\diseases\magnitis.dm" @@ -489,7 +491,6 @@ #include "code\game\objects\toys.dm" #include "code\game\objects\traps.dm" #include "code\game\objects\weapons.dm" -#include "code\game\objects\window.dm" #include "code\game\objects\alien\acid.dm" #include "code\game\objects\alien\defines.dm" #include "code\game\objects\alien\egg.dm"