diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm
index 2f7442a3966..22c2e119dcb 100644
--- a/code/modules/hydroponics/grown/mushrooms.dm
+++ b/code/modules/hydroponics/grown/mushrooms.dm
@@ -20,6 +20,7 @@
oneharvest = 1
growthstages = 4
plant_type = PLANT_MUSHROOM
+ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list("morphine" = 0.35, "charcoal" = 0.35, "nutriment" = 0)
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi
@@ -46,6 +47,7 @@
oneharvest = 1
growthstages = 3
plant_type = PLANT_MUSHROOM
+ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
mutatelist = list(/obj/item/seeds/angel)
reagents_add = list("mushroomhallucinogen" = 0.04, "amatoxin" = 0.35, "nutriment" = 0)
@@ -74,6 +76,7 @@
oneharvest = 1
growthstages = 3
plant_type = PLANT_MUSHROOM
+ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list("mushroomhallucinogen" = 0.04, "amatoxin" = 0.1, "nutriment" = 0, "amanitin" = 0.2)
rarity = 30
origin_tech = "biotech=5"
@@ -101,6 +104,7 @@
oneharvest = 1
growthstages = 3
plant_type = PLANT_MUSHROOM
+ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list("mushroomhallucinogen" = 0.25, "nutriment" = 0.02)
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap
@@ -126,6 +130,7 @@
oneharvest = 1
growthstages = 3
plant_type = PLANT_MUSHROOM
+ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
mutatelist = list(/obj/item/seeds/plump/walkingmushroom)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1)
@@ -149,6 +154,7 @@
endurance = 30
maturation = 5
yield = 1
+ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
mutatelist = list()
reagents_add = list("vitamin" = 0.05, "nutriment" = 0.15)
rarity = 30
@@ -191,6 +197,7 @@
oneharvest = 1
growthstages = 3
plant_type = PLANT_MUSHROOM
+ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list("nutriment" = 0.1)
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle
@@ -220,6 +227,7 @@
plant_type = PLANT_MUSHROOM
rarity = 20
genes = list(/datum/plant_gene/trait/glow)
+ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
mutatelist = list(/obj/item/seeds/glowshroom/glowcap)
reagents_add = list("radium" = 0.1, "phosphorus" = 0.1, "nutriment" = 0.04)
diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm
index 61aabb318da..b403ebee52f 100644
--- a/code/modules/hydroponics/grown/towercap.dm
+++ b/code/modules/hydroponics/grown/towercap.dm
@@ -13,6 +13,7 @@
potency = 50
oneharvest = 1
growthstages = 3
+ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
icon_dead = "towercap-dead"
plant_type = PLANT_MUSHROOM
mutatelist = list(/obj/item/seeds/tower/steel)
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 5bc2eef955a..aa7f785b152 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -247,6 +247,10 @@
// Maybe some day it would be used as unit test.
/proc/check_plants_growth_stages_icons()
var/list/states = icon_states('icons/obj/hydroponics/growing.dmi')
+ states |= icon_states('icons/obj/hydroponics/growing_fruits.dmi')
+ states |= icon_states('icons/obj/hydroponics/growing_flowers.dmi')
+ states |= icon_states('icons/obj/hydroponics/growing_mushrooms.dmi')
+ states |= icon_states('icons/obj/hydroponics/growing_vegetables.dmi')
var/list/paths = typesof(/obj/item/seeds) - /obj/item/seeds - typesof(/obj/item/seeds/sample)
for(var/seedpath in paths)
diff --git a/code/modules/projectiles/guns/projectile/laser_gatling.dm b/code/modules/projectiles/guns/projectile/laser_gatling.dm
new file mode 100644
index 00000000000..9633418413a
--- /dev/null
+++ b/code/modules/projectiles/guns/projectile/laser_gatling.dm
@@ -0,0 +1,154 @@
+
+
+//The ammo/gun is stored in a back slot item
+/obj/item/weapon/minigunpack
+ name = "backpack power source"
+ desc = "The massive external power source for the laser gatling gun"
+ icon = 'icons/obj/guns/minigun.dmi'
+ icon_state = "holstered"
+ item_state = "backpack"
+ slot_flags = SLOT_BACK
+ w_class = 5
+ var/obj/item/weapon/gun/projectile/minigun/gun = null
+ var/armed = 0 //whether the gun is attached, 0 is attached, 1 is the gun is wielded.
+ var/overheat = 0
+ var/overheat_max = 40
+ var/heat_diffusion = 1
+
+/obj/item/weapon/minigunpack/New()
+ gun = new(src)
+ SSobj.processing += src
+ ..()
+
+/obj/item/weapon/minigunpack/Destroy()
+ SSobj.processing -= src
+ ..()
+
+/obj/item/weapon/minigunpack/process()
+ overheat = max(0, overheat - heat_diffusion)
+
+/obj/item/weapon/minigunpack/attack_hand(var/mob/living/carbon/user)
+ if(src.loc == user)
+ if(!armed)
+ if(user.get_item_by_slot(slot_back) == src)
+ armed = 1
+ if(!user.put_in_hands(gun))
+ armed = 0
+ user << "You need a free hand to hold the gun!"
+ return
+ update_icon()
+ gun.forceMove(user)
+ user.update_inv_back()
+ else
+ user << "You are already holding the gun!"
+ else
+ ..()
+
+/obj/item/weapon/minigunpack/attackby(obj/item/weapon/W, mob/user, params)
+ if(W == gun) //Don't need armed check, because if you have the gun assume its armed.
+ user.unEquip(gun,1)
+ else
+ ..()
+
+/obj/item/weapon/minigunpack/dropped(mob/user)
+ if(armed)
+ user.unEquip(gun,1)
+
+/obj/item/weapon/minigunpack/MouseDrop(atom/over_object)
+ if(armed)
+ return
+ if(iscarbon(usr))
+ var/mob/M = usr
+
+ if(!over_object)
+ return
+
+ if(!M.restrained() && !M.stat)
+
+ if(istype(over_object, /obj/screen/inventory/hand))
+ var/obj/screen/inventory/hand/H = over_object
+ if(!M.unEquip(src))
+ return
+ switch(H.slot_id)
+ if(slot_r_hand)
+ M.put_in_r_hand(src)
+ if(slot_l_hand)
+ M.put_in_l_hand(src)
+
+
+/obj/item/weapon/minigunpack/update_icon()
+ if(armed)
+ icon_state = "notholstered"
+ else
+ icon_state = "holstered"
+
+/obj/item/weapon/minigunpack/proc/attach_gun(var/mob/user)
+ if(!gun)
+ gun = new(src)
+ gun.forceMove(src)
+ armed = 0
+ if(user)
+ user << "You attach the [gun.name] to the [name]."
+ else
+ src.visible_message("The [gun.name] snaps back onto the [name]!")
+ update_icon()
+ user.update_inv_back()
+
+
+/obj/item/weapon/gun/projectile/minigun
+ name = "laser gatling gun"
+ desc = "An advanced laser cannon with an incredible rate of fire. Requires a bulky backpack power source to use."
+ icon = 'icons/obj/guns/minigun.dmi'
+ icon_state = "minigun_spin"
+ item_state = "minigun"
+ origin_tech = "combat=6;powerstorage=5;magnets=4"
+ flags = CONDUCT | HANDSLOW
+ slowdown = 1
+ slot_flags = null
+ w_class = 5
+ materials = list()
+ burst_size = 3
+ automatic = 0
+ fire_delay = 1
+ weapon_weight = WEAPON_HEAVY
+ fire_sound = 'sound/weapons/Laser.ogg'
+ mag_type = /obj/item/ammo_box/magazine/internal/minigun
+ var/obj/item/weapon/minigunpack/ammo_pack
+
+/obj/item/weapon/gun/projectile/minigun/attack_self(mob/living/user)
+ return
+
+/obj/item/weapon/gun/projectile/minigun/dropped(mob/user)
+ if(ammo_pack)
+ ammo_pack.attach_gun(user)
+ else
+ qdel(src)
+
+/obj/item/weapon/gun/projectile/minigun/shoot_live_shot(mob/living/user as mob|obj, pointblank = 0, mob/pbtarget = null, message = 1)
+ if(ammo_pack)
+ if(ammo_pack.overheat < ammo_pack.overheat_max)
+ . = ..()
+ ammo_pack.overheat++
+ else
+ user << "The gun's heat sensor locked the trigger to prevent lens damage."
+
+/obj/item/weapon/gun/projectile/minigun/afterattack(atom/target, mob/living/user, flag, params)
+ if(!ammo_pack || ammo_pack.loc != user)
+ user << "You need the backpack power source to fire the gun!"
+ ..()
+
+/obj/item/weapon/gun/projectile/minigun/New()
+ if(!ammo_pack)
+ if(istype(loc,/obj/item/weapon/minigunpack)) //We should spawn inside a ammo pack so let's use that one.
+ ammo_pack = loc
+ else
+ qdel(src)//No pack, no gun
+ ..()
+
+/obj/item/weapon/gun/projectile/minigun/dropped(mob/living/user)
+ ammo_pack.attach_gun(user)
+ return
+
+/obj/item/weapon/gun/projectile/minigun/process_chamber(eject_casing = 0, empty_chamber = 1)
+ ..()
+
diff --git a/icons/obj/hydroponics/growing_flowers.dmi b/icons/obj/hydroponics/growing_flowers.dmi
new file mode 100644
index 00000000000..e1f308c87b4
Binary files /dev/null and b/icons/obj/hydroponics/growing_flowers.dmi differ
diff --git a/icons/obj/hydroponics/growing_fruits.dmi b/icons/obj/hydroponics/growing_fruits.dmi
new file mode 100644
index 00000000000..0f0f7c9b733
Binary files /dev/null and b/icons/obj/hydroponics/growing_fruits.dmi differ
diff --git a/icons/obj/hydroponics/growing_mushrooms.dmi b/icons/obj/hydroponics/growing_mushrooms.dmi
new file mode 100644
index 00000000000..eb4405bf8bf
Binary files /dev/null and b/icons/obj/hydroponics/growing_mushrooms.dmi differ
diff --git a/icons/obj/hydroponics/growing_vegetables.dmi b/icons/obj/hydroponics/growing_vegetables.dmi
new file mode 100644
index 00000000000..070d3531a21
Binary files /dev/null and b/icons/obj/hydroponics/growing_vegetables.dmi differ