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"