diff --git a/code/defines/obj/computer.dm b/code/defines/obj/computer.dm
index ff78213008d..af0477f9f77 100644
--- a/code/defines/obj/computer.dm
+++ b/code/defines/obj/computer.dm
@@ -203,6 +203,44 @@
name = "Magix System IV"
desc = "An arcane artifact that holds much magic. Running E-Knock 2.2: Sorceror's Edition"
+/*/obj/machinery/computer/scan_consolenew //Coming Soon
+ name = "DNA Modifier Access Console"
+ desc = "Scand DNA."
+ icon = 'computer.dmi'
+ icon_state = "scanner"
+ density = 1
+ var/uniblock = 1.0
+ var/strucblock = 1.0
+ var/subblock = 1.0
+ var/status = null
+ var/radduration = 2.0
+ var/radstrength = 1.0
+ var/radacc = 1.0
+ var/buffer1 = null
+ var/buffer2 = null
+ var/buffer3 = null
+ var/buffer1owner = null
+ var/buffer2owner = null
+ var/buffer3owner = null
+ var/buffer1label = null
+ var/buffer2label = null
+ var/buffer3label = null
+ var/buffer1type = null
+ var/buffer2type = null
+ var/buffer3type = null
+ var/buffer1iue = 0
+ var/buffer2iue = 0
+ var/buffer3iue = 0
+ var/delete = 0
+ var/injectorready = 1
+ var/temphtml = null
+ var/obj/machinery/dna_scanner/connected = null
+ var/obj/item/weapon/disk/data/diskette = null
+ anchored = 1.0
+ use_power = 1
+ idle_power_usage = 10
+ active_power_usage = 400 */
+
/obj/machinery/computer/secure_data
name = "Security Records"
desc = "Beepsky. ARREST!!!"
@@ -270,4 +308,12 @@
desc = "Use this to set your destination...hopefully..."
icon_state = "teleport"
locked = null
- id = null
\ No newline at end of file
+ id = null
+
+/obj/machinery/computer/crew
+ name = "Crew monitoring computer"
+ icon_state = "crew"
+ use_power = 1
+ idle_power_usage = 250
+ active_power_usage = 500
+ var/list/tracked = list( )
\ No newline at end of file
diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm
index af901083906..cb64dd65a38 100644
--- a/code/defines/obj/decal.dm
+++ b/code/defines/obj/decal.dm
@@ -253,4 +253,23 @@
Del()
for(var/datum/disease/D in viruses)
D.cure(0)
- ..()
\ No newline at end of file
+ ..()
+
+/obj/decal/cleanable/tomato_smudge
+ name = "Tomato smooth"
+ desc = "It's red"
+ density = 0
+ anchored = 1
+ layer = 2
+ icon = 'tomatodecal.dmi'
+ random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3")
+
+/obj/decal/cleanable/egg_smudge
+ name = "Smashed egg"
+ desc = ""
+ density = 0
+ anchored = 1
+ layer = 2
+ icon = 'tomatodecal.dmi'
+ random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3")
+
diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm
index e5ca58a9734..b0755ee6e2d 100644
--- a/code/defines/obj/hydro.dm
+++ b/code/defines/obj/hydro.dm
@@ -1289,6 +1289,13 @@
..()
reagents.add_reagent("nutriment", 2)
+ throw_impact(atom/hit_atom)
+ ..()
+ new/obj/decal/cleanable/tomato_smudge(src.loc)
+ src.visible_message("\red [src.name] has been squashed.","\red You hear a smack.")
+ del(src)
+ return
+
/obj/item/weapon/reagent_containers/food/snacks/grown/killertomato
seed = "/obj/item/seeds/killertomatoseed"
name = "Killer Tomato"
@@ -1844,4 +1851,4 @@
yieldmod = 2
New()
src.pixel_x = rand(-5.0, 5)
- src.pixel_y = rand(-5.0, 5)
\ No newline at end of file
+ src.pixel_y = rand(-5.0, 5)
diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm
new file mode 100644
index 00000000000..f5c8dbe808f
--- /dev/null
+++ b/code/game/machinery/biogenerator.dm
@@ -0,0 +1,177 @@
+/obj/machinery/biogenerator
+ name = "Biogenerator"
+ desc = ""
+ icon = 'biogenerator.dmi'
+ icon_state = "biogen-stand"
+ density = 1
+ anchored = 1
+ use_power = 1
+ idle_power_usage = 40
+ var/processing = 0
+ var/obj/item/weapon/reagent_containers/glass/beaker = null
+ var/points = 0
+ var/menustat = "menu"
+
+ New()
+ ..()
+ var/datum/reagents/R = new/datum/reagents(1000)
+ reagents = R
+ R.my_atom = src
+ beaker = new /obj/item/weapon/reagent_containers/glass/large(src)
+
+ on_reagent_change() //When the reagents change, change the icon as well.
+ update_icon()
+
+ update_icon()
+ if(!src.beaker)
+ icon_state = "biogen-empty"
+ else if(!src.processing)
+ icon_state = "biogen-stand"
+ else
+ icon_state = "biogen-work"
+ return
+
+/obj/machinery/biogenerator/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ if(istype(O, /obj/item/weapon/reagent_containers/glass))
+ if(beaker)
+ user << "\red Biogenerator already occuped."
+ else
+ user.before_take_item(O)
+ O.loc = src
+ beaker = O
+ updateUsrDialog()
+ else if(!istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown))
+ user << "\red You cannot put this in [src.name]"
+ else if(processing)
+ user << "\red Biogenerator is processing."
+ else
+ var/i = 0
+ for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents)
+ i++
+ if(i >= 10)
+ user << "\red Biogenerator is fulled! Activate it."
+ else
+ user.before_take_item(O)
+ O.loc = src
+ user << "\blue You put [O.name] in [src.name]"
+ update_icon()
+ return
+
+/obj/machinery/biogenerator/proc/interact(mob/user as mob)
+ if(stat & BROKEN)
+ return
+ user.machine = src
+ var/dat = "
BiogeneratorBiogenerator:
"
+ if (processing)
+ dat += "Biogenerator is processing! Please wait..."
+ else
+ dat += "Biomass: [points] points.
"
+ switch(menustat)
+ if("menu")
+ if (beaker)
+ dat += "Activate Biogenerator!
"
+ dat += "Detach Container
"
+ dat += "Food
"
+ dat += "10 milk (20)
"
+ dat += "Slab of meat (50)
"
+ dat += "Nutrient
"
+ dat += "E-Z-Nutrient (10)
"
+ dat += "Left 4 Zed (20)
"
+ dat += "Robust Harvest (25)
"
+ //dat += "Other
"
+ //dat += "Monkey (500)
"
+ else
+ dat += "
No beaker inside. Please insert a beaker.
"
+ if("nopoints")
+ dat += "You do not have biomass to create products.
Please, put growns into reactor and activate it.
"
+ dat += "Return to menu"
+ if("complete")
+ dat += "Operation complete.
"
+ dat += "Return to menu"
+ if("void")
+ dat += "Error: No growns inside.
Please, put growns into reactor.
"
+ dat += "Return to menu"
+ user << browse(dat, "window=biogenerator")
+ onclose(user, "biogenerator")
+ return
+
+/obj/machinery/biogenerator/attack_hand(mob/user as mob)
+ interact(user)
+
+/obj/machinery/biogenerator/proc/activate()
+ if (usr.stat != 0)
+ return
+ if (src.stat != 0) //NOPOWER etc
+ return
+ if(src.processing)
+ usr << "\red The biogenerator is in the process of working."
+ return
+ var/S = 0
+ for(var/obj/item/weapon/reagent_containers/food/snacks/grown/I in contents)
+ //I.reagents.trans_to(src)
+ S += 5
+ if(I.potency == -1)
+ points += 10
+ else points += I.potency
+ del(I)
+ if(S)
+ processing = 1
+ update_icon()
+ updateUsrDialog()
+ playsound(src.loc, 'blender.ogg', 50, 1)
+ use_power(S*30)
+ sleep(S+15)
+ //points += src.reagents.get_reagent_amount("nutriment")
+ //src.reagents.del_reagent("nutriment")
+ processing = 0
+ update_icon()
+ else
+ menustat = "void"
+ return
+
+/obj/machinery/biogenerator/proc/create_product(var/item,var/cost)
+ if(cost > points)
+ menustat = "nopoints"
+ return 0
+ processing = 1
+ update_icon()
+ updateUsrDialog()
+ points -= cost
+ sleep(30)
+ switch(item)
+ if("milk")
+ beaker.reagents.add_reagent("milk",10)
+ if("meat")
+ new/obj/item/weapon/reagent_containers/food/snacks/meat(src.loc)
+ if("ez")
+ new/obj/item/nutrient/ez(src.loc)
+ if("l4z")
+ new/obj/item/nutrient/l4z(src.loc)
+ if("rh")
+ new/obj/item/nutrient/rh(src.loc)
+ if("monkey")
+ new/mob/living/carbon/monkey(src.loc)
+ processing = 0
+ menustat = "complete"
+ update_icon()
+ return 1
+
+/obj/machinery/biogenerator/Topic(href, href_list)
+ if(stat & BROKEN) return
+ if(usr.stat || usr.restrained()) return
+ if(!in_range(src, usr)) return
+
+ usr.machine = src
+
+ switch(href_list["action"])
+ if("activate")
+ activate()
+ if("detach")
+ beaker.loc = src.loc
+ beaker = null
+ update_icon()
+ if("create")
+ create_product(href_list["item"],text2num(href_list["cost"]))
+ if("menu")
+ menustat = "menu"
+ updateUsrDialog()
\ No newline at end of file
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index f174124c2d0..2a777d31bec 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -108,6 +108,7 @@
/obj/item/weapon/circuitboard/solar_control
name = "Circuit board (Solar Control)" //name fixed 250810
build_path = "/obj/machinery/power/solar_control"
+ origin_tech = "programming=2;powerstorage=2"
/obj/item/weapon/circuitboard/powermonitor
name = "Circuit board (Power Monitor)" //name fixed 250810
build_path = "/obj/machinery/power/monitor"
@@ -132,7 +133,14 @@
/obj/item/weapon/circuitboard/rdservercontrol
name = "Circuit Board (R&D Server Control)"
build_path = "/obj/machinery/computer/rdservercontrol"
-
+/obj/item/weapon/circuitboard/crew
+ name = "Circuit board (Crew monitoring computer)"
+ build_path = "/obj/machinery/computer/crew"
+ origin_tech = "programming=3;biotech=2;magnets=2"
+/obj/item/weapon/circuitboard/mech_bay_power_console
+ name = "Circuit board (Mech Bay Power Control Console)"
+ build_path = "/obj/machinery/computer/mech_bay_power_console"
+ origin_tech = "programming=2;powerstorage=3"
/obj/computerframe/attackby(obj/item/P as obj, mob/user as mob)
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index 09efa8a8abb..c4ba1bd5de2 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -1,13 +1,35 @@
+/obj/machinery/computer/crew/attackby(I as obj, user as mob)
+ if(istype(I, /obj/item/weapon/screwdriver))
+ playsound(src.loc, 'Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ if (src.stat & BROKEN)
+ user << "\blue The broken glass falls out."
+ var/obj/computerframe/A = new /obj/computerframe( src.loc )
+ new /obj/item/weapon/shard( src.loc )
+ var/obj/item/weapon/circuitboard/crew/M = new /obj/item/weapon/circuitboard/crew( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 3
+ A.icon_state = "3"
+ A.anchored = 1
+ del(src)
+ else
+ user << "\blue You disconnect the monitor."
+ var/obj/computerframe/A = new /obj/computerframe( src.loc )
+ var/obj/item/weapon/circuitboard/crew/M = new /obj/item/weapon/circuitboard/crew( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 4
+ A.icon_state = "4"
+ A.anchored = 1
+ del(src)
+ else
+ src.attack_hand(user)
+ return
+
/obj/machinery/computer/crew
- name = "crew monitoring computer"
- icon_state = "crew"
- use_power = 1
- idle_power_usage = 250
- active_power_usage = 500
-
- var
- list/tracked
-
New()
tracked = list()
..()
diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm
index 7fb0c5e0462..6947f8f34aa 100644
--- a/code/game/mecha/mech_bay.dm
+++ b/code/game/mecha/mech_bay.dm
@@ -171,6 +171,36 @@
if(recharge_port)
recharge_port.stop_charge()
+ attackby(I as obj, user as mob)
+ if(istype(I, /obj/item/weapon/screwdriver))
+ playsound(src.loc, 'Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ if (src.stat & BROKEN)
+ user << "\blue The broken glass falls out."
+ var/obj/computerframe/A = new /obj/computerframe( src.loc )
+ new /obj/item/weapon/shard( src.loc )
+ var/obj/item/weapon/circuitboard/mech_bay_power_console/M = new /obj/item/weapon/circuitboard/mech_bay_power_console( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 3
+ A.icon_state = "3"
+ A.anchored = 1
+ del(src)
+ else
+ user << "\blue You disconnect the monitor."
+ var/obj/computerframe/A = new /obj/computerframe( src.loc )
+ var/obj/item/weapon/circuitboard/mech_bay_power_console/M = new /obj/item/weapon/circuitboard/mech_bay_power_console( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 4
+ A.icon_state = "4"
+ A.anchored = 1
+ del(src)
+ else
+ src.attack_hand(user)
+ return
attack_hand(mob/user as mob)
if(..()) return
diff --git a/code/game/objects/stool.dm b/code/game/objects/stool.dm
index 6f896307f17..34c7d452c22 100644
--- a/code/game/objects/stool.dm
+++ b/code/game/objects/stool.dm
@@ -258,3 +258,67 @@
if (manual_unbuckle_all(user))
src.add_fingerprint(user)
return
+
+//roller bed
+
+/obj/stool/bed/roller
+ name = "roller bed"
+ icon = 'rollerbed.dmi'
+ icon_state = "down"
+ anchored = 0
+
+ Move()
+ ..()
+ for(var/mob/M in src:buckled_mobs)
+ if (M.buckled == src)
+ M.loc = src.loc
+
+ buckle_mob(mob/M as mob, mob/user as mob)
+ if (!ticker)
+ user << "You can't buckle anyone in before the game starts."
+ return 0
+ if ((!( istype(M, /mob) ) || get_dist(src, user) > 1 || M.loc != src.loc || user.restrained() || usr.stat || M.buckled))
+ return 0
+ if (M == usr)
+ M.visible_message(\
+ "\blue [M.name] buckles in!",\
+ "You buckle yourself to [src].",\
+ "You hear metal clanking")
+ else
+ M.visible_message(\
+ "\blue [M.name] is buckled in to [src] by [user.name]!",\
+ "You buckled in to [src] by [user.name].",\
+ "You hear metal clanking")
+ M.anchored = 1
+ M.buckled = src
+ M.loc = src.loc
+ M.pixel_y = 6
+ M.update_clothing()
+ src:buckled_mobs += M
+ src.add_fingerprint(user)
+ density = 1
+ icon_state = "up"
+ return 1
+
+ manual_unbuckle_all(mob/user as mob)
+ var/N = 0;
+ for(var/mob/M in src:buckled_mobs)
+ if (M.buckled == src)
+ if (M != user)
+ M.visible_message(\
+ "\blue [M.name] was unbuckled by [user.name]!",\
+ "You unbuckled from [src] by [user.name].",\
+ "You hear metal clanking")
+ else
+ M.visible_message(\
+ "\blue [M.name] was unbuckled himself!",\
+ "You unbuckle yourself from [src].",\
+ "You hear metal clanking")
+ M.pixel_y = 0
+ M.anchored = 0
+ M.buckled = null
+ N++
+ if(N)
+ density = 0
+ icon_state = "down"
+ return N
diff --git a/code/game/research/designs.dm b/code/game/research/designs.dm
index 1584faff732..9dd11ed81c7 100644
--- a/code/game/research/designs.dm
+++ b/code/game/research/designs.dm
@@ -147,6 +147,15 @@ datum
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/card"
+ crewconsole
+ name = "Circuit Design (Crew monitoring computer)"
+ desc = "Allows for the construction of circuit boards used to build an Crew monitoring computer."
+ id = "crewconsole"
+ req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "acid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/crew"
+
teleconsole
name = "Circuit Design (Teleporter Console)"
desc = "Allows for the construction of circuit boards used to build a teleporter control console."
@@ -228,6 +237,15 @@ datum
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/powermonitor"
+ solarcontrol
+ name = "Circuit Design (Solar Control)"
+ desc = "Allows for the construction of circuit boards used to build a solar control console"
+ id = "solarcontrol"
+ req_tech = list("programming" = 2, "powerstorage" = 2)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "acid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/solar_control"
+
prisonmanage
name = "Circuit Design (Prisoner Management Console)"
desc = "Allows for the construction of circuit boards used to build a prisoner management console."
@@ -246,6 +264,24 @@ datum
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/mecha_control"
+ mechapower
+ name = "Circuit Design (Mech Bay Power Control Console)"
+ desc = "Allows for the construction of circuit boards used to build an mech bay power control console."
+ id = "mechapower"
+ req_tech = list("programming" = 2, "powerstorage" = 3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "acid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/mech_bay_power_console"
+
+ rdconsole
+ name = "Circuit Design (R&D Console)"
+ desc = "Allows for the construction of circuit boards used to build an new R&D console."
+ id = "rdconsole"
+ req_tech = list("programming" = 6)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "acid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/rdconsole"
+
///////////////////////////////////
//////////AI Module Disks//////////
///////////////////////////////////
@@ -561,7 +597,6 @@ datum
req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 3)
build_path = "/obj/item/mecha_parts/mecha_equipment/repair_droid"
-
////////////////////////////////////////
//////////Disk Construction Disks///////
////////////////////////////////////////
diff --git a/code/modules/food/food.dm b/code/modules/food/food.dm
index 5c9980221ea..f5f294cda31 100644
--- a/code/modules/food/food.dm
+++ b/code/modules/food/food.dm
@@ -30,6 +30,7 @@
name = "candy"
desc = "Nougat love it or hate it."
icon_state = "candy"
+ trash = "candy"
New()
..()
reagents.add_reagent("nutriment", 1)
@@ -50,6 +51,7 @@
name = "chips"
desc = "Commander Riker's What-The-Crisps"
icon_state = "chips"
+ trash = "chips"
New()
..()
reagents.add_reagent("nutriment", 3)
@@ -88,6 +90,12 @@
..()
reagents.add_reagent("nutriment", 1)
+ throw_impact(atom/hit_atom)
+ ..()
+ new/obj/decal/cleanable/egg_smudge(src.loc)
+ src.visible_message("\red [src.name] has been squashed.","\red You hear a smack.")
+ del(src)
+
/obj/item/weapon/reagent_containers/food/snacks/flour
name = "flour"
desc = "Some flour"
@@ -381,6 +389,7 @@
name = "Berry Clafoutis"
desc = "No black birds, this is a good sign."
icon_state = "berryclafoutis"
+ trash = "plate"
New()
..()
reagents.add_reagent("nutriment", 4)
@@ -391,6 +400,7 @@
name = "waffles"
desc = "Mmm, waffles"
icon_state = "waffles"
+ trash = "waffles"
New()
..()
reagents.add_reagent("nutriment", 8)
@@ -400,6 +410,7 @@
name = "Eggplant Parmigiana"
desc = "The only good recipe for eggplant."
icon_state = "eggplantparm"
+ trash = "plate"
New()
..()
reagents.add_reagent("nutriment", 6)
@@ -446,6 +457,7 @@
// var/job = null
icon_state = "meatpie"
desc = "The best meatpies on station."
+ trash = "plate"
New()
..()
reagents.add_reagent("nutriment", 10)
@@ -455,6 +467,7 @@
name = "Meat-pie"
icon_state = "meatpie"
desc = "A delicious meatpie."
+ trash = "plate"
New()
..()
reagents.add_reagent("nutriment", 10)
@@ -464,6 +477,7 @@
name = "Tofu-pie"
icon_state = "meatpie"
desc = "A delicious tofu pie."
+ trash = "plate"
New()
..()
reagents.add_reagent("nutriment", 10)
@@ -499,6 +513,7 @@
name = "Xeno-pie"
icon_state = "xenomeatpie"
desc = "A delicious meatpie. Probably heretical."
+ trash = "plate"
New()
..()
reagents.add_reagent("nutriment", 2)
@@ -509,6 +524,7 @@
name = "Wing Fang Chu"
desc = "A savory dish of alien wing wang in soy."
icon_state = "wingfangchu"
+ trash = "snack_bowl"
New()
..()
reagents.add_reagent("nutriment", 1)
@@ -578,6 +594,7 @@
name = "Cuban Carp"
desc = "A grifftastic sandwich that burns your tongue and then leaves it numb!"
icon_state = "cubancarp"
+ trash = "plate"
New()
..()
reagents.add_reagent("nutriment", 6)
@@ -589,6 +606,7 @@
name = "Popcorm" //not a typo
desc = "Now let's find some cinema."
icon_state = "popcorn"
+ trash = "popcorn"
var/unpopped = 0
New()
..()
@@ -599,12 +617,14 @@
if(prob(unpopped))
usr << "\red You bite down on an un-popped kernel!"
unpopped = max(0, unpopped-1)
+ ..()
/obj/item/weapon/reagent_containers/food/snacks/sosjerky
name = "Scaredy's Private Reserve Beef Jerky"
icon_state = "sosjerky"
desc = "Beef jerky made from the finest space cows."
+ trash = "sosjerky"
New()
..()
reagents.add_reagent("nutriment", 4)
@@ -614,6 +634,7 @@
name = "4no Raisins"
icon_state = "4no_raisins"
desc = "Best raisins in the universe. Not sure why."
+ trash = "raisins"
New()
..()
reagents.add_reagent("nutriment", 6)
@@ -631,6 +652,7 @@
name = "Cheesie Honkers"
icon_state = "cheesie_honkers"
desc = "Bite sized cheesie snacks that will honk all over your mouth"
+ trash = "cheesie"
New()
..()
reagents.add_reagent("nutriment", 4)
@@ -640,6 +662,7 @@
name = "Syndi-Cakes"
icon_state = "syndi_cakes"
desc = "An extremely moist snack cake that tastes just as good after being nuked."
+ trash = "syndi_cakes"
New()
..()
reagents.add_reagent("nutriment", 4)
@@ -650,6 +673,7 @@
name = "Loaded Baked Potato"
desc = "Totally baked."
icon_state = "loadedbakedpotato"
+ trash = "loadedbakedpotato"
New()
..()
reagents.add_reagent("nutriment", 6)
@@ -688,6 +712,7 @@
name = "Cheesy Fries"
desc = "Fries. Covered in cheese. Duh."
icon_state = "cheesyfries"
+ trash = "plate"
New()
..()
reagents.add_reagent("nutriment", 6)
@@ -726,6 +751,7 @@
name = "Meat steak"
desc = "A piece of hot spicy meat."
icon_state = "meatstake"
+ trash = "plate"
New()
..()
reagents.add_reagent("nutriment", 4)
@@ -737,6 +763,7 @@
name = "Spacy Liberty Duff"
desc = "Jello gelatin, if Alfred Hubbard were a confectionist" //TODO
icon_state = "spacylibertyduff"
+ trash = "snack_bowl"
New()
..()
reagents.add_reagent("nutriment", 6)
@@ -747,6 +774,7 @@
name = "Amanita Jelly"
desc = "Looks curiously toxic"
icon_state = "amanitajelly"
+ trash = "snack_bowl"
New()
..()
reagents.add_reagent("nutriment", 6)
@@ -769,6 +797,7 @@
name = "Meatball soup"
desc = "" //TODO
icon_state = "meatballsoup"
+ trash = "snack_bowl"
New()
..()
reagents.add_reagent("nutriment", 10)
@@ -811,6 +840,7 @@
name = "Vegetable soup"
desc = "" //TODO
icon_state = "vegetablesoup"
+ trash = "snack_bowl"
New()
..()
reagents.add_reagent("nutriment", 10)
@@ -821,6 +851,7 @@
name = "Nettle soup"
desc = "" //TODO
icon_state = "nettlesoup"
+ trash = "snack_bowl"
New()
..()
reagents.add_reagent("nutriment", 10)
@@ -842,6 +873,7 @@
name = "Hot Chili"
desc = "" //TODO
icon_state = "hotchili"
+ trash = "snack_bowl"
New()
..()
reagents.add_reagent("nutriment", 6)
@@ -854,6 +886,7 @@
name = "Cold Chili"
desc = "" //TODO
icon_state = "coldchili"
+ trash = "snack_bowl"
New()
..()
reagents.add_reagent("nutriment", 6)
@@ -1231,6 +1264,7 @@
name = "meatbread slice"
desc = "A slice of delicious meatbread."
icon_state = "meatbreadslice"
+ trash = "plate"
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread
@@ -1249,6 +1283,7 @@
name = "xenomeatbread slice"
desc = "A slice of delicious meatbread. Extra Heretical."
icon_state = "xenobreadslice"
+ trash = "plate"
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread
@@ -1267,6 +1302,7 @@
name = "Banana-nut bread slice"
desc = "A slice of delicious banana bread."
icon_state = "bananabreadslice"
+ trash = "plate"
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread
@@ -1284,6 +1320,7 @@
name = "Tofubread slice"
desc = "A slice of delicious tofubread."
icon_state = "tofubreadslice"
+ trash = "plate"
bitesize = 2
@@ -1303,6 +1340,7 @@
name = "Carrot Cake slice"
desc = "Carrotty slice of Carrot Cake, carrots are good for your eyes! Also not a lie."
icon_state = "carrotcake_slice"
+ trash = "plate"
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake
@@ -1320,6 +1358,7 @@
name = "Cheese Cake slice"
desc = "Slice of pure cheestisfaction"
icon_state = "cheesecake_slice"
+ trash = "plate"
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake
@@ -1336,6 +1375,7 @@
name = "Vanilla Cake slice"
desc = "Just a slice of cake, it is enough for everyone."
icon_state = "plaincake_slice"
+ trash = "plate"
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index cc4336ffec0..0a121e65281 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -158,6 +158,37 @@
interact(user)
+/obj/machinery/power/solar_control/attackby(I as obj, user as mob)
+ if(istype(I, /obj/item/weapon/screwdriver))
+ playsound(src.loc, 'Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ if (src.stat & BROKEN)
+ user << "\blue The broken glass falls out."
+ var/obj/computerframe/A = new /obj/computerframe( src.loc )
+ new /obj/item/weapon/shard( src.loc )
+ var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 3
+ A.icon_state = "3"
+ A.anchored = 1
+ del(src)
+ else
+ user << "\blue You disconnect the monitor."
+ var/obj/computerframe/A = new /obj/computerframe( src.loc )
+ var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 4
+ A.icon_state = "4"
+ A.anchored = 1
+ del(src)
+ else
+ src.attack_hand(user)
+ return
+
/obj/machinery/power/solar_control/process()
lastgen = gen
gen = 0
diff --git a/icons/obj/biogenerator.dmi b/icons/obj/biogenerator.dmi
new file mode 100644
index 00000000000..c65a9571b09
Binary files /dev/null and b/icons/obj/biogenerator.dmi differ
diff --git a/icons/obj/rollerbed.dmi b/icons/obj/rollerbed.dmi
new file mode 100644
index 00000000000..67a843283fa
Binary files /dev/null and b/icons/obj/rollerbed.dmi differ
diff --git a/icons/obj/tomatodecal.dmi b/icons/obj/tomatodecal.dmi
new file mode 100644
index 00000000000..f37bfc7f792
Binary files /dev/null and b/icons/obj/tomatodecal.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index e5e41a9c437..7dcfa7f43e4 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -41,6 +41,7 @@
#define FILE_DIR "code/game/gamemodes/revolution"
#define FILE_DIR "code/game/gamemodes/sandbox"
#define FILE_DIR "code/game/gamemodes/traitor"
+#define FILE_DIR "code/game/gamemodes/traitor_pair"
#define FILE_DIR "code/game/gamemodes/wizard"
#define FILE_DIR "code/game/jobs"
#define FILE_DIR "code/game/machinery"
@@ -361,6 +362,7 @@
#include "code\game\machinery\alarm.dm"
#include "code\game\machinery\atmo_control.dm"
#include "code\game\machinery\autolathe.dm"
+#include "code\game\machinery\biogenerator.dm"
#include "code\game\machinery\camera.dm"
#include "code\game\machinery\cell_charger.dm"
#include "code\game\machinery\constructable_frame.dm"