diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index f2fdcf5c..9ade24bc 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -450,3 +450,209 @@
/obj/structure/flora/redgrass/redg/Initialize()
icon_state = "tallgrass[rand(1, 4)]bb"
. = ..()
+
+
+//lavaland trees
+
+/obj/structure/flora/ashtree
+ name = "Ashtree"
+ desc = "A small native lavaland tree."
+ max_integrity = 80
+ density = TRUE
+ pixel_x = -16
+ layer = FLY_LAYER
+ var/log_amount = 10
+
+/obj/structure/flora/ashtree/attackby(obj/item/W, mob/user, params)
+ if(log_amount && (!(flags_1 & NODECONSTRUCT_1)))
+ if(W.sharpness && W.force > 0)
+ if(W.hitsound)
+ playsound(get_turf(src), W.hitsound, 100, 0, 0)
+ user.visible_message("[user] begins to cut down [src] with [W].","You begin to cut down [src] with [W].", "You hear the sound of sawing.")
+ if(do_after(user, 1000/W.force, target = src)) //5 seconds with 20 force, 8 seconds with a hatchet, 20 seconds with a shard.
+ user.visible_message("[user] fells [src] with the [W].","You fell [src] with the [W].", "You hear the sound of a tree falling.")
+ playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0)
+ for(var/i=1 to log_amount)
+ new /obj/item/grown/log/ashtree(get_turf(src))
+
+ var/obj/structure/ashtree/ashstump/S = new(loc)
+ S.name = "[name] stump"
+
+ qdel(src)
+
+ else
+ return ..()
+
+/obj/structure/ashtree/ashstump
+ name = "Ashtree stump"
+ desc = "Return to ashes."
+ icon = 'icons/obj/flora/ashtree.dmi'
+ icon_state = "ashtree_stump"
+ density = FALSE
+ pixel_x = -16
+
+/obj/structure/flora/ashtree/ashtreee
+ name = "Ashtree"
+ desc = "A small native lavaland tree."
+ icon = 'icons/obj/flora/ashtree.dmi'
+ icon_state = "ashtree_1"
+ var/list/icon_states = list("ashtree_1", "ashtree_2")
+
+/obj/structure/flora/ashtree/ashtreee/Initialize()
+ . = ..()
+
+ if(islist(icon_states && icon_states.len))
+ icon_state = pick(icon_states)
+
+//
+/obj/structure/flora/gmushroom
+ name = "Giant mushroom"
+ desc = "An impressive overgrown mushroom."
+ max_integrity = 80
+ density = TRUE
+ pixel_x = -16
+ layer = FLY_LAYER
+ var/log_amount = 10
+
+/obj/structure/flora/gmushroom/attackby(obj/item/W, mob/user, params)
+ if(log_amount && (!(flags_1 & NODECONSTRUCT_1)))
+ if(W.sharpness && W.force > 0)
+ if(W.hitsound)
+ playsound(get_turf(src), W.hitsound, 100, 0, 0)
+ user.visible_message("[user] begins to cut down [src] with [W].","You begin to cut down [src] with [W].", "You hear the sound of sawing.")
+ if(do_after(user, 1000/W.force, target = src)) //5 seconds with 20 force, 8 seconds with a hatchet, 20 seconds with a shard.
+ user.visible_message("[user] fells [src] with the [W].","You fell [src] with the [W].", "You hear the sound of a tree falling.")
+ playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0)
+ for(var/i=1 to log_amount)
+ new /obj/item/grown/log/gmushroom(get_turf(src))
+
+ var/obj/structure/gmushroom/gmushroomstump/S = new(loc)
+ S.name = "[name] stump"
+
+ qdel(src)
+
+ else
+ return ..()
+
+/obj/structure/gmushroom/gmushroomstump
+ name = "Giant mushroom stump"
+ desc = "It will grow back. Maybe. One day."
+ icon = 'icons/obj/flora/gmushroom.dmi'
+ icon_state = "gmushroom_stump"
+ density = FALSE
+ pixel_x = -16
+
+/obj/structure/flora/gmushroom/gggmushroom
+ name = "Giant mushroom"
+ desc = "An impressive overgrown mushroom."
+ icon = 'icons/obj/flora/gmushroom.dmi'
+ icon_state = "gmushroom_1"
+ var/list/icon_states = list("gmushroom_1", "gmushroom_2")
+
+/obj/structure/flora/gmushroom/gggmushroom/Initialize()
+ . = ..()
+
+ if(islist(icon_states && icon_states.len))
+ icon_state = pick(icon_states)
+
+//
+/obj/structure/flora/shadowtree
+ name = "Shadow tree"
+ desc = "A native lavaland tree, with a remarkable purple color."
+ max_integrity = 80
+ density = TRUE
+ pixel_x = -16
+ layer = FLY_LAYER
+ var/log_amount = 10
+
+/obj/structure/flora/shadowtree/attackby(obj/item/W, mob/user, params)
+ if(log_amount && (!(flags_1 & NODECONSTRUCT_1)))
+ if(W.sharpness && W.force > 0)
+ if(W.hitsound)
+ playsound(get_turf(src), W.hitsound, 100, 0, 0)
+ user.visible_message("[user] begins to cut down [src] with [W].","You begin to cut down [src] with [W].", "You hear the sound of sawing.")
+ if(do_after(user, 1000/W.force, target = src)) //5 seconds with 20 force, 8 seconds with a hatchet, 20 seconds with a shard.
+ user.visible_message("[user] fells [src] with the [W].","You fell [src] with the [W].", "You hear the sound of a tree falling.")
+ playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0)
+ for(var/i=1 to log_amount)
+ new /obj/item/grown/log/shadowtree(get_turf(src))
+
+ var/obj/structure/shadowtree/shadowtreestump/S = new(loc)
+ S.name = "[name] stump"
+
+ qdel(src)
+
+ else
+ return ..()
+
+/obj/structure/shadowtree/shadowtreestump
+ name = "Shadow tree stump"
+ desc = "Hidden in the shadowns."
+ icon = 'icons/obj/flora/shadowtree.dmi'
+ icon_state = "shadowtree_stump"
+ density = FALSE
+ pixel_x = -16
+
+/obj/structure/flora/shadowtree/shadowtreee
+ name = "Shadow tree"
+ desc = "A native Lavaland tree, with a remarkable purple color."
+ icon = 'icons/obj/flora/shadowtree.dmi'
+ icon_state = "shadowtree_1"
+ var/list/icon_states = list("shadowtree_1", "shadowtree_2")
+
+/obj/structure/flora/shadowtree/shadowtreee/Initialize()
+ . = ..()
+
+ if(islist(icon_states && icon_states.len))
+ icon_state = pick(icon_states)
+
+//
+/obj/structure/flora/plasmatree
+ name = "Plasma tree"
+ desc = "A tree that has absorved plasma from the ground, making its wood strong like metal."
+ max_integrity = 100
+ density = TRUE
+ pixel_x = -16
+ layer = FLY_LAYER
+ var/log_amount = 10
+
+/obj/structure/flora/plasmatree/attackby(obj/item/W, mob/user, params)
+ if(log_amount && (!(flags_1 & NODECONSTRUCT_1)))
+ if(W.sharpness && W.force > 0)
+ if(W.hitsound)
+ playsound(get_turf(src), W.hitsound, 100, 0, 0)
+ user.visible_message("[user] begins to cut down [src] with [W].","You begin to cut down [src] with [W].", "You hear the sound of sawing.")
+ if(do_after(user, 1000/W.force, target = src)) //5 seconds with 20 force, 8 seconds with a hatchet, 20 seconds with a shard.
+ user.visible_message("[user] fells [src] with the [W].","You fell [src] with the [W].", "You hear the sound of a tree falling.")
+ playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0)
+ for(var/i=1 to log_amount)
+ new /obj/item/grown/log/plasmatree(get_turf(src))
+
+ var/obj/structure/plasmatree/plasmatreestump/S = new(loc)
+ S.name = "[name] stump"
+
+ qdel(src)
+
+ else
+ return ..()
+
+/obj/structure/plasmatree/plasmatreestump
+ name = "Plasma tree stump"
+ desc = "Pointy and sharp."
+ icon = 'icons/obj/flora/plasmatree.dmi'
+ icon_state = "plasmatree_stump"
+ density = FALSE
+ pixel_x = -16
+
+/obj/structure/flora/plasmatree/plasmatreee
+ name = "Plasma tree"
+ desc = "A tree that has absorved plasma from the ground, making its wood strong like metal."
+ icon = 'icons/obj/flora/plasmatree.dmi'
+ icon_state = "plasmatree_1"
+ var/list/icon_states = list("plasmatree_1", "plasmatree_2")
+
+/obj/structure/flora/plasmatree/plasmatreee/Initialize()
+ . = ..()
+
+ if(islist(icon_states && icon_states.len))
+ icon_state = pick(icon_states)
diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm
index bbb1afcd..4a6419d8 100644
--- a/code/game/turfs/simulated/floor/plating/asteroid.dm
+++ b/code/game/turfs/simulated/floor/plating/asteroid.dm
@@ -169,7 +169,7 @@
if (!megafauna_spawn_list)
megafauna_spawn_list = list(/mob/living/simple_animal/hostile/megafauna/dragon = 4, /mob/living/simple_animal/hostile/megafauna/colossus = 2, /mob/living/simple_animal/hostile/megafauna/bubblegum = SPAWN_BUBBLEGUM)
if (!flora_spawn_list)
- flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2, /obj/structure/flora/redgrass/redg = 1)
+ flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2, /obj/structure/flora/redgrass/redg = 2, /obj/structure/flora/ashtree/ashtreee = 2, /obj/structure/flora/gmushroom/gggmushroom = 2, /obj/structure/flora/shadowtree/shadowtreee = 2, /obj/structure/flora/plasmatree/plasmatreee = 2)
. = ..()
diff --git a/code/modules/cargo/bounties/mining.dm b/code/modules/cargo/bounties/mining.dm
index 1f3266af..8328075a 100644
--- a/code/modules/cargo/bounties/mining.dm
+++ b/code/modules/cargo/bounties/mining.dm
@@ -63,3 +63,10 @@
reward = 1000
required_count = 1
wanted_types = list(/obj/item/seeds/lavaland/cactus)
+
+datum/bounty/item/mining/plaswood
+ name = "Plaswood Planks"
+ description = "Central Command's carpentry department needs more exotic wood, send us some plaswood planks!"
+ reward = 5500
+ required_count = 50
+ wanted_types = list(/obj/item/stack/sheet/mineral/plaswood)
diff --git a/code/modules/cargo/packs/materials.dm b/code/modules/cargo/packs/materials.dm
index 63207822..929700f4 100644
--- a/code/modules/cargo/packs/materials.dm
+++ b/code/modules/cargo/packs/materials.dm
@@ -30,6 +30,13 @@
contains = list(/obj/item/stack/sheet/metal/fifty)
crate_name = "metal sheets crate"
+/datum/supply_pack/materials/gmushroom50
+ name = "50 Mushroom Planks"
+ desc = "Looks like wood AND is fire proof? Of course you need fifty mushroom planks!"
+ cost = 1700
+ contains = list(/obj/item/stack/sheet/mineral/gmushroom/fifty)
+ crate_name = "mushroom planks crate"
+
/datum/supply_pack/materials/plasteel20
name = "20 Plasteel Sheets"
desc = "Reinforce the station's integrity with twenty plasteel sheets!"
@@ -51,6 +58,13 @@
contains = list(/obj/item/stack/sheet/plastic/fifty)
crate_name = "plastic sheets crate"
+/datum/supply_pack/materials/plaswood50
+ name = "50 Plaswood Planks"
+ desc = "Who need metal when you can have fifty plaswood planks?"
+ cost = 9000
+ contains = list(/obj/item/stack/sheet/mineral/plaswood/fifty)
+ crate_name = "Plaswood crate"
+
/datum/supply_pack/materials/sandstone30
name = "30 Sandstone Blocks"
desc = "Neither sandy nor stoney, these thirty blocks will still get the job done."
@@ -58,6 +72,13 @@
contains = list(/obj/item/stack/sheet/mineral/sandstone/thirty)
crate_name = "sandstone blocks crate"
+/datum/supply_pack/materials/shadoww50
+ name = "50 Shadow Wood Planks"
+ desc = "Time to bring the dark side with fifty shadow wooden planks!"
+ cost = 1450
+ contains = list(/obj/item/stack/sheet/mineral/shadoww/fifty)
+ crate_name = "Shadown wood planks crate"
+
/datum/supply_pack/materials/wood50
name = "50 Wood Planks"
desc = "Turn cargo's boring metal groundwork into beautiful panelled flooring and much more with fifty wooden planks!"
@@ -79,7 +100,7 @@
name = "Bulk Raw Cotton Crate"
desc = "Plushies are more down in the market than ever before; bulk cotton now for use! Contains 100 raw cotton sheets."
cost = 1700 //Same math as before, but since it's bulk, you get a 100 credit discount to encourage bulk buys. Welcome to space Costco.
- contains = list(/obj/item/stack/sheet/cotton/thirty,
+ contains = list(/obj/item/stack/sheet/cotton/thirty,
/obj/item/stack/sheet/cotton/thirty,
/obj/item/stack/sheet/cotton/thirty,
/obj/item/stack/sheet/cotton/ten
diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm
index b120e592..36be0a4b 100644
--- a/code/modules/hydroponics/grown/towercap.dm
+++ b/code/modules/hydroponics/grown/towercap.dm
@@ -98,6 +98,45 @@
/obj/item/grown/log/steel/CheckAccepted(obj/item/I)
return FALSE
+/obj/item/grown/log/ashtree
+ seed = null
+ name = "ashtree log"
+ desc = "A piece of log."
+ icon_state = "ashtree_log"
+
+/obj/item/grown/log/gmushroom
+ seed = null
+ name = "mushroom log"
+ desc = "Looks like candy! Do not eat it."
+ icon_state = "mushroom_log"
+ plank_type = /obj/item/stack/sheet/mineral/gmushroom
+ plank_name = "mushroom planks"
+
+/obj/item/grown/log/gmushroom/CheckAccepted(obj/item/I)
+ return FALSE
+
+/obj/item/grown/log/shadowtree
+ seed = null
+ name = "shadow log"
+ desc = "A piece of dark log."
+ icon_state = "shadow_log"
+ plank_type = /obj/item/stack/sheet/mineral/shadoww
+ plank_name = "shadow planks"
+
+/obj/item/grown/log/gmushroom/CheckAccepted(obj/item/I)
+ return FALSE
+
+/obj/item/grown/log/plasmatree
+ seed = null
+ name = "plasma tree log"
+ desc = "A heavy piece log."
+ icon_state = "plasmatree_log"
+ plank_type = /obj/item/stack/sheet/mineral/plaswood
+ plank_name = "plaswood planks"
+
+/obj/item/grown/log/plasmatree/CheckAccepted(obj/item/I)
+ return FALSE
+
/obj/item/seeds/bamboo
name = "pack of bamboo seeds"
desc = "A plant known for its flexible and resistant logs."
@@ -163,7 +202,7 @@
/obj/structure/bonfire/prelit/Initialize()
. = ..()
StartBurning()
-
+
/obj/structure/bonfire/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && (mover.pass_flags & PASSTABLE))
return TRUE
diff --git a/icons/obj/flora/ashtree.dmi b/icons/obj/flora/ashtree.dmi
new file mode 100644
index 00000000..3f3a860d
Binary files /dev/null and b/icons/obj/flora/ashtree.dmi differ
diff --git a/icons/obj/flora/gmushroom.dmi b/icons/obj/flora/gmushroom.dmi
new file mode 100644
index 00000000..d53cbd20
Binary files /dev/null and b/icons/obj/flora/gmushroom.dmi differ
diff --git a/icons/obj/flora/plasmatree.dmi b/icons/obj/flora/plasmatree.dmi
new file mode 100644
index 00000000..17f75a9c
Binary files /dev/null and b/icons/obj/flora/plasmatree.dmi differ
diff --git a/icons/obj/flora/shadowtree.dmi b/icons/obj/flora/shadowtree.dmi
new file mode 100644
index 00000000..40bf44d9
Binary files /dev/null and b/icons/obj/flora/shadowtree.dmi differ
diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi
index af19d5d1..4a47f01e 100644
Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ