diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm
index 5f780eca..b0e9956b 100644
--- a/code/game/area/Space_Station_13_areas.dm
+++ b/code/game/area/Space_Station_13_areas.dm
@@ -1334,3 +1334,36 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/tcommsat/lounge
name = "Telecommunications Satellite Lounge"
icon_state = "tcomsatlounge"
+
+/*************
+***XENOARCH***
+*************/
+
+/area/xenoarch
+ icon = 'modular_skyrat/icons/turf/areas.dmi'
+ icon_state = "xenogen"
+ has_gravity = STANDARD_GRAVITY
+
+/area/xenoarch/arch
+ name = "Xenoarchaeology"
+ icon_state = "xenoarch"
+
+/area/xenoarch/bot
+ name = "Xenoarchaeology Botany"
+ icon_state = "xenobot"
+
+/area/xenoarch/eng
+ name = "Xenoarchaeology Engineering"
+ icon_state = "xenoeng"
+
+/area/xenoarch/gen
+ name = "Xenoarchaeology Living Quarters"
+ icon_state = "xenogen"
+
+/area/xenoarch/sec
+ name = "Xenoarchaeology Security"
+ icon_state = "xenosec"
+
+/area/xenoarch/med
+ name = "Xenoarchaeology Medical"
+ icon_state = "xenomed"
diff --git a/code/modules/research/xenoarch/artifact.dm b/code/modules/research/xenoarch/artifact.dm
new file mode 100644
index 00000000..508248a5
--- /dev/null
+++ b/code/modules/research/xenoarch/artifact.dm
@@ -0,0 +1,91 @@
+/obj/item/ancientartifact
+ name = "Admin Debug. Parent Artifact"
+ desc = "You shouldn't have this."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/fossil_and_artifact.dmi'
+
+/obj/item/ancientartifact/Initialize()
+ ..()
+
+//
+
+/datum/export/artifacts
+ cost = 2000 //Big cash
+ unit_name = "useless artifact"
+ export_types = list(/obj/item/ancientartifact/useless)
+
+/datum/export/artifacts
+ cost = 4000 //Big cash
+ unit_name = "fossil artifact"
+ export_types = list(/obj/item/ancientartifact/faunafossil,/obj/item/ancientartifact/florafossil)
+
+//
+
+/obj/item/ancientartifact/useless
+ name = "nonfunctional artifact"
+ desc = "This artifact is nonfunctional... perhaps it can be researched or sold."
+
+/obj/item/ancientartifact/useless/Initialize()
+ icon_state = pick(list("urn","statuette","instrument","unknown1","unknown2","unknown3"))
+ ..()
+
+/obj/item/ancientartifact/useless/attackby(obj/item/W, mob/user, params)
+ if(istype(W,/obj/item/xenoarch/help/research))
+ if(!do_after(user,100,target=src))
+ to_chat(user,"You must stand still to analyze.")
+ return
+ SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = 2000))
+ to_chat(user,"You successfully researched the artifact. You have gained 2000 research points.")
+ qdel(src)
+
+/obj/item/ancientartifact/faunafossil
+ name = "fauna fossil"
+ desc = "This is a fossil of an animal... seems dead."
+
+/obj/item/ancientartifact/faunafossil/Initialize()
+ icon_state = pick(list("bone1","bone2","bone3","bone4","bone5","bone6"))
+ ..()
+
+/obj/item/ancientartifact/faunafossil/attackby(obj/item/W, mob/user, params)
+ if(istype(W,/obj/item/xenoarch/help/research))
+ if(!do_after(user,100,target=src))
+ to_chat(user,"You must stand still to analyze.")
+ return
+ SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = 4000))
+ to_chat(user,"You successfully researched the artifact. You have gained 4000 research points.")
+ qdel(src)
+
+/obj/item/ancientartifact/florafossil
+ name = "flora fossil"
+ desc = "This is a fossil of a plant... seems dead."
+
+/obj/item/ancientartifact/florafossil/Initialize()
+ icon_state = pick(list("plant1","plant2","plant3","plant4","plant5","plant6"))
+ ..()
+
+/obj/item/ancientartifact/florafossil/attackby(obj/item/W, mob/user, params)
+ if(istype(W,/obj/item/xenoarch/help/research))
+ if(!do_after(user,100,target=src))
+ to_chat(user,"You must stand still to analyze.")
+ return
+ SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = 4000))
+ to_chat(user,"You successfully researched the artifact. You have gained 4000 research points.")
+ qdel(src)
+ if(istype(W,/obj/item/xenoarch/help/plant))
+ if(!do_after(user,50,target=src))
+ to_chat(user,"You need to stand still to extract the seeds.")
+ return
+ var/seed = pick(list( /obj/item/seeds/amauri,
+ /obj/item/seeds/gelthi,
+ /obj/item/seeds/jurlmah,
+ /obj/item/seeds/nofruit,
+ /obj/item/seeds/shand,
+ /obj/item/seeds/surik,
+ /obj/item/seeds/telriis,
+ /obj/item/seeds/thaadra,
+ /obj/item/seeds/vale,
+ /obj/item/seeds/vaporsac
+ ))
+
+ new seed(get_turf(user))
+ user.put_in_active_hand(seed)
+ qdel(src)
diff --git a/code/modules/research/xenoarch/artifact_list.dm b/code/modules/research/xenoarch/artifact_list.dm
new file mode 100644
index 00000000..1e2a39f7
--- /dev/null
+++ b/code/modules/research/xenoarch/artifact_list.dm
@@ -0,0 +1,72 @@
+GLOBAL_LIST_INIT(bas_artifact,list( /obj/item/kitchen/fork=1,
+ /obj/item/kitchen/knife=1,
+ /obj/item/toy/gun=1,
+ /obj/item/toy/sword=1,
+ /obj/item/toy/cards/deck=1,
+ /obj/item/toy/seashell=1,
+ /obj/item/shield/riot/roman/fake=1,
+ /obj/item/trash/plate=1,
+ /obj/item/extendohand=1,
+ /obj/item/tea_cup=1,
+ /obj/item/tea_plate=1,
+ /obj/item/ancientartifact/useless=11
+ ))
+
+GLOBAL_LIST_INIT(adv_artifact,list( /obj/item/shield/riot/roman=1,
+ /obj/item/shield/riot/tower=1,
+ /obj/item/toy/figure/miner=1,
+ /obj/item/stack/telecrystal=1,
+ /obj/item/sharpener=1,
+ /obj/item/switchblade=1,
+ /obj/item/laser_pointer=1,
+ /obj/item/instrument/piano_synth=1,
+ /obj/item/megaphone=1,
+ /obj/item/spear/bonespear=1,
+ /obj/item/storage/backpack/satchel/bone=1,
+ /obj/item/gun/ballistic/bow/ashen=1,
+ /obj/item/clothing/accessory/talisman=1,
+ /obj/item/clothing/accessory/skullcodpiece=1,
+ /obj/item/clothing/gloves/bracer=1,
+ /obj/item/clothing/suit/hooded/cloak/goliath=1,
+ /obj/item/fireaxe/boneaxe=1,
+ /obj/item/storage/belt/quiver=1,
+ /obj/item/ammo_casing/caseless/arrow/bone=1,
+ /obj/item/ammo_casing/caseless/arrow/ash=1,
+ /obj/item/kitchen/knife/ritual=1,
+ /obj/item/slime_extract/grey=1,
+ /obj/item/ancientartifact/useless=5,
+ /obj/item/ancientartifact/faunafossil=10,
+ /obj/item/ancientartifact/florafossil=10
+ ))
+
+GLOBAL_LIST_INIT(ult_artifact,list( /obj/item/nuke_core/supermatter_sliver=1,
+ /obj/item/clothing/gloves/thief=1,
+ /obj/item/storage/belt/sabre/rapier=1,
+ /obj/item/storage/box/syndie_kit/guardian=1,
+ /obj/item/flashlight/emp=1,
+ /obj/item/jammer=1,
+ /obj/item/encryptionkey/binary=1,
+ /obj/item/gun/medbeam=1,
+ /obj/item/storage/box/syndie_kit/imp_storage=1,
+ /obj/item/pen/edagger=1,
+ /obj/item/dice/d20/fate=1,
+ /obj/item/instrument/violin/golden=1,
+ /obj/item/healthanalyzer/rad_laser=1,
+ /obj/item/clothing/suit/hooded/cloak/drake=1,
+ /obj/item/crowbar/abductor=1,
+ /obj/item/screwdriver/abductor=1,
+ /obj/item/weldingtool/abductor=1,
+ /obj/item/wirecutters/abductor=1,
+ /obj/item/wrench/abductor=1,
+ /obj/item/multitool/abductor=1,
+ /obj/item/scalpel/alien=1,
+ /obj/item/hemostat/alien=1,
+ /obj/item/retractor/alien=1,
+ /obj/item/circular_saw/alien=1,
+ /obj/item/surgicaldrill/alien=1,
+ /obj/item/cautery/alien=1,
+ /obj/item/compressionkit=1,
+ /obj/item/circuitboard/machine/plantgenes/vault=1,
+ /obj/item/disk/design_disk/golem_shell=1,
+ /obj/item/disk/tech_disk/illegal=1
+ ))
diff --git a/code/modules/research/xenoarch/fossil_and_artifact.dmi b/code/modules/research/xenoarch/fossil_and_artifact.dmi
new file mode 100644
index 00000000..b0526220
Binary files /dev/null and b/code/modules/research/xenoarch/fossil_and_artifact.dmi differ
diff --git a/code/modules/research/xenoarch/strange_rock.dm b/code/modules/research/xenoarch/strange_rock.dm
new file mode 100644
index 00000000..571cf702
--- /dev/null
+++ b/code/modules/research/xenoarch/strange_rock.dm
@@ -0,0 +1,131 @@
+/obj/item/strangerock
+ icon = 'modular_skyrat/code/modules/research/xenoarch/fossil_and_artifact.dmi'
+ name = "strange rock"
+ desc = "This is a strange rock, it appears to have a relic encased."
+ icon_state = "strange"
+ item_state = "strange"
+
+ var/chosenitem = null
+ var/itemsafedepth = null
+ var/itembasedepth = null
+ var/itemactualdepth = null
+ var/dugdepth = null
+
+ var/tryagain = null
+
+/obj/item/strangerock/Initialize()
+ icon_state = pick("strange","strange0","strange1","strange2","strange3")
+ var/randomnumber = rand(1,100)
+ switch(randomnumber)
+ if(1 to 69)
+ chosenitem = pickweight(GLOB.bas_artifact)
+ itembasedepth = rand(30,40)
+ itemsafedepth = rand(3,6)
+ itemactualdepth = rand(itembasedepth - itemsafedepth,itembasedepth)
+ if(70 to 99)
+ chosenitem = pickweight(GLOB.adv_artifact)
+ itembasedepth = rand(40,60)
+ itemsafedepth = rand(6,12)
+ itemactualdepth = rand(itembasedepth - itemsafedepth,itembasedepth)
+ if(100)
+ chosenitem = pickweight(GLOB.ult_artifact)
+ itembasedepth = rand(70,100)
+ itemsafedepth = rand(12,14)
+ itemactualdepth = rand(itembasedepth - itemsafedepth,itembasedepth)
+ ..()
+
+/obj/item/strangerock/attackby(obj/item/W, mob/user, params)
+ if(istype(W,/obj/item/xenoarch/clean/hammer))
+ if(tryagain)
+ to_chat(user,"You are already mining this.")
+ return
+ tryagain = TRUE
+ var/obj/item/xenoarch/clean/hammer/HM = W
+ playsound(loc, HM.usesound, 50, 1, -1)
+ if(!do_after(user,HM.cleanspeed,target = src))
+ to_chat(user,"You must stand still to clean.")
+ tryagain = FALSE
+ return
+ dugdepth += HM.cleandepth
+ playsound(loc, HM.usesound, 50, 1, -1)
+ if(dugdepth > itemactualdepth)
+ to_chat(user,"The strange rock crumbles, destroying anything that could have been recovered.")
+ qdel(src)
+ return
+ tryagain = FALSE
+ if(istype(W,/obj/item/xenoarch/clean/brush))
+ if(tryagain)
+ to_chat(user,"You are already mining this.")
+ return
+ tryagain = TRUE
+ var/obj/item/xenoarch/clean/brush/HM = W
+ playsound(loc, HM.usesound, 50, 1, -1)
+ if(!do_after(user,HM.brushspeed,target = src))
+ to_chat(user,"You must stand still to clean.")
+ tryagain = FALSE
+ return
+ if(dugdepth < itemactualdepth)
+ dugdepth++
+ playsound(loc, HM.usesound, 50, 1, -1)
+ to_chat(user,"You brush away 1cm of debris.")
+ tryagain = FALSE
+ return
+ if(dugdepth > itemactualdepth)
+ to_chat(user,"You somehow managed to destroy a strange rock with a brush... good job?")
+ qdel(src)
+ return
+ if(dugdepth == itemactualdepth)
+ new chosenitem(get_turf(src))
+ playsound(loc, HM.usesound, 50, 1, -1)
+ to_chat(user,"You uncover an artifact!")
+ qdel(src)
+ return
+ if(istype(W,/obj/item/xenoarch/help/scanner))
+ var/obj/item/xenoarch/help/scanner/HM = W
+ playsound(loc, HM.usesound, 50, 1, -1)
+ if(!do_after(user,30,target = src))
+ to_chat(user,"You must stand still to scan.")
+ return
+ playsound(loc, HM.usesound, 50, 1, -1)
+ to_chat(user,"Base Depth: [itembasedepth] centimeters.")
+ to_chat(user,"Safe Depth: [itemsafedepth] centimeters.")
+ if(istype(W,/obj/item/xenoarch/help/scanneradv))
+ var/obj/item/xenoarch/help/scanneradv/HM = W
+ playsound(loc, HM.usesound, 50, 1, -1)
+ if(!do_after(user,10,target = src))
+ to_chat(user,"You must stand still to scan.")
+ return
+ playsound(loc, HM.usesound, 50, 1, -1)
+ to_chat(user,"Base Depth: [itembasedepth] centimeters.")
+ to_chat(user,"Safe Depth: [itemsafedepth] centimeters.")
+ to_chat(user,"Item Depth: [itemactualdepth] centimeters.")
+ if(istype(W,/obj/item/xenoarch/help/measuring))
+ var/obj/item/xenoarch/help/measuring/HM = W
+ playsound(loc, HM.usesound, 50, 1, -1)
+ if(!do_after(user,10,target = src))
+ to_chat(user,"You must stand still to measure.")
+ return
+ if(!dugdepth)
+ to_chat(user,"This rock has not been touched.")
+ playsound(loc, HM.usesound, 50, 1, -1)
+ return
+ to_chat(user,"Current depth dug: [dugdepth] centimeters.")
+ playsound(loc, HM.usesound, 50, 1, -1)
+//
+
+/turf/closed/mineral/strange
+ mineralType = /obj/item/strangerock
+ spreadChance = 5
+ spread = 1
+ mineralAmt = 1
+ scan_state = "rock_Strange"
+/* this is for when we have multiz lavaland. Replace the walls with these.
+/turf/closed/mineral/random/volcanic/strangerock
+ mineralSpawnChanceList = list(
+ /turf/closed/mineral/uranium/volcanic = 3, /turf/closed/mineral/diamond/volcanic = 1, /turf/closed/mineral/gold/volcanic = 8, /turf/closed/mineral/titanium/volcanic = 8,
+ /turf/closed/mineral/silver/volcanic = 20, /turf/closed/mineral/plasma/volcanic = 30, /turf/closed/mineral/bscrystal/volcanic = 1, /turf/closed/mineral/gibtonite/volcanic = 2,
+ /turf/closed/mineral/iron/volcanic = 95, /turf/closed/mineral/strange = 15)
+*/
+/turf/closed/mineral/random/volcanic/New()
+ mineralSpawnChanceList += list(/turf/closed/mineral/strange = 15)
+ . = ..()
diff --git a/code/modules/research/xenoarch/tools.dm b/code/modules/research/xenoarch/tools.dm
new file mode 100644
index 00000000..52754672
--- /dev/null
+++ b/code/modules/research/xenoarch/tools.dm
@@ -0,0 +1,573 @@
+/obj/item/xenoarch
+ name = "Parent Xenoarch"
+ desc = "Debug. Parent Clean"
+ icon = 'modular_skyrat/code/modules/research/xenoarch/tools.dmi'
+
+/obj/item/xenoarch/Initialize()
+ ..()
+
+/obj/item/xenoarch/clean/hammer
+ name = "Parent hammer"
+ desc = "Debug. Parent Hammer."
+ var/cleandepth = 15
+ var/cleanspeed = 15
+ usesound = list('sound/effects/picaxe1.ogg', 'sound/effects/picaxe2.ogg', 'sound/effects/picaxe3.ogg')
+
+/obj/item/xenoarch/clean/hammer/cm1
+ name = "mining hammer cm1"
+ desc = "removes 1cm of material."
+ icon_state = "pick1"
+ cleandepth = 1
+ cleanspeed = 5
+
+/obj/item/xenoarch/clean/hammer/cm2
+ name = "mining hammer cm2"
+ desc = "removes 2cm of material."
+ icon_state = "pick2"
+ cleandepth = 2
+ cleanspeed = 10
+
+/obj/item/xenoarch/clean/hammer/cm3
+ name = "mining hammer cm3"
+ desc = "removes 3cm of material."
+ icon_state = "pick3"
+ cleandepth = 3
+ cleanspeed = 15
+
+/obj/item/xenoarch/clean/hammer/cm4
+ name = "mining hammer cm4"
+ desc = "removes 4cm of material."
+ icon_state = "pick4"
+ cleandepth = 4
+ cleanspeed = 20
+
+/obj/item/xenoarch/clean/hammer/cm5
+ name = "mining hammer cm5"
+ desc = "removes 5cm of material."
+ icon_state = "pick5"
+ cleandepth = 5
+ cleanspeed = 25
+
+/obj/item/xenoarch/clean/hammer/cm6
+ name = "mining hammer cm6"
+ desc = "removes 6cm of material."
+ icon_state = "pick6"
+ cleandepth = 6
+ cleanspeed = 30
+
+/obj/item/xenoarch/clean/hammer/cm15
+ name = "mining hammer cm15"
+ desc = "removes 15cm of material."
+ icon_state = "pick_hand"
+ cleandepth = 15
+ cleanspeed = 75
+
+/obj/item/xenoarch/clean/hammer/advanced
+ name = "advanced hammer"
+ desc = "Removes a custom amount of debris."
+ icon_state = "advpick"
+ cleandepth = 30
+ cleanspeed = 30
+ usesound = 'sound/weapons/drill.ogg'
+
+/obj/item/xenoarch/clean/hammer/advanced/attack_self(mob/living/carbon/user)
+ var/depthchoice = input(user, "What depth would you like to mine with? (1-30)", "Change Dig Depth") as null|num
+ if(depthchoice && (depthchoice > 0 && depthchoice <= 30))
+ cleandepth = depthchoice
+ cleanspeed = depthchoice
+ desc = "Removes a custom amount of debris. It will dig [cleandepth] centimeters."
+ to_chat(user, "You set the dig depth of the hammer to [cleandepth] centimeters.")
+//
+
+/obj/item/xenoarch/clean/brush
+ name = "mining brush"
+ desc = "cleans off the remaining debris."
+ icon_state = "pick_brush"
+ var/brushspeed = 100
+ usesound = 'sound/items/towelwipe.ogg'
+
+/obj/item/xenoarch/clean/brush/basic
+ brushspeed = 50
+
+/obj/item/xenoarch/clean/brush/adv
+ name = "advanced mining brush"
+ icon_state = "advbrush"
+ brushspeed = 10
+
+//
+
+/obj/item/xenoarch/help/scanner
+ name = "mining scanner"
+ desc = "Inaccurately scans a rock's depths."
+ icon_state = "scanner"
+ usesound = 'sound/machines/chime.ogg'
+
+/obj/item/xenoarch/help/scanneradv
+ name = "advanced mining scanner"
+ desc = "Accurately scans a rock's depths."
+ icon_state = "adv_scanner"
+ usesound = 'sound/machines/chime.ogg'
+
+/obj/item/xenoarch/help/measuring
+ name = "measuring tape"
+ desc = "Measures how far a rock has been dug into."
+ icon_state = "measuring"
+ usesound = 'sound/items/poster_ripped.ogg'
+
+/obj/item/xenoarch/help/research
+ name = "research analyzer"
+ desc = "Deconstructs artifacts for research."
+ icon_state = "researchscanner"
+ usesound = 'sound/weapons/resonator_blast.ogg'
+
+/obj/item/xenoarch/help/plant
+ name = "fossil seed extractor"
+ desc = "Takes flora fossils and extracts the prehistoric seeds."
+ icon_state = "plantscanner"
+ usesound = 'sound/weapons/resonator_blast.ogg'
+
+// Eventually, make it work on afterattack(atom/target, mob/user , proximity)
+// I dont want to take more time currently though.
+// Would have to create a list and then check if the item is in the list.
+
+/obj/item/xenoarch/help/cargo
+ name = "dimensional cargo scanner"
+ desc = "teleports items to be sold."
+ icon_state = "cargoscanner"
+ usesound = 'sound/weapons/resonator_blast.ogg'
+
+/obj/item/xenoarch/help/cargo/afterattack(atom/target, mob/user , proximity)
+ if(!proximity)
+ return
+ var/export_categories = EXPORT_CARGO
+ if(!istype(target,/obj/item))
+ return
+ var/datum/export_report/ex = new
+ if(!do_after(user,300,target=target))
+ to_chat(user,"You need to stand still to export items.")
+ return
+ export_item_and_contents(target, export_categories , dry_run = FALSE, external_report = ex)
+ for(var/datum/export/E in ex.total_amount)
+ var/export_text = E.total_printout(ex)
+ if(!export_text)
+ continue
+ var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR)
+ if(D)
+ D.adjust_money(ex.total_value[E])
+ to_chat(user,"The [target] disappears!")
+
+
+// Storage: Belt and Locker and Bag
+
+/obj/item/storage/bag/strangerock
+ name = "strange rock bag"
+ desc = "A bag for strange rocks."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/tools.dmi'
+ icon_state = "rockbag"
+ w_class = WEIGHT_CLASS_TINY
+ resistance_flags = FLAMMABLE
+ var/mob/listeningTo
+ var/range = null
+
+ var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it
+
+/obj/item/storage/bag/strangerock/ComponentInitialize()
+ . = ..()
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.max_w_class = WEIGHT_CLASS_GIGANTIC
+ STR.allow_quick_empty = TRUE
+ STR.max_combined_w_class = 200
+ STR.max_items = 10
+ STR.display_numerical_stacking = FALSE
+ STR.can_hold = typecacheof(list(/obj/item/strangerock))
+
+
+/obj/item/storage/bag/strangerock/equipped(mob/user)
+ . = ..()
+ if(listeningTo == user)
+ return
+ if(listeningTo)
+ UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
+ RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/Pickup_rocks)
+ listeningTo = user
+
+/obj/item/storage/bag/strangerock/dropped(mob/user)
+ . = ..()
+ if(listeningTo)
+ UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
+ listeningTo = null
+
+/obj/item/storage/bag/strangerock/proc/Pickup_rocks(mob/living/user)
+ var/show_message = FALSE
+ var/turf/tile = user.loc
+ if (!isturf(tile))
+ return
+
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ if(STR)
+ for(var/A in tile)
+ if (!is_type_in_typecache(A, STR.can_hold))
+ continue
+ else if(SEND_SIGNAL(src, COMSIG_TRY_STORAGE_INSERT, A, user, TRUE))
+ show_message = TRUE
+ else
+ if(!spam_protection)
+ to_chat(user, "Your [name] is full and can't hold any more!")
+ spam_protection = TRUE
+ continue
+ if(show_message)
+ playsound(user, "rustle", 50, TRUE)
+ user.visible_message("[user] scoops up the rocks beneath [user.p_them()].", \
+ "You scoop up the rocks beneath you with your [name].")
+ spam_protection = FALSE
+
+/obj/item/storage/bag/strangerockadv
+ name = "bluespace strange rock bag"
+ desc = "A bag for strange rocks."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/tools.dmi'
+ icon_state = "rockbagadv"
+ w_class = WEIGHT_CLASS_TINY
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ var/mob/listeningTo
+ var/range = null
+
+ var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it
+
+/obj/item/storage/bag/strangerockadv/ComponentInitialize()
+ . = ..()
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.max_w_class = WEIGHT_CLASS_GIGANTIC
+ STR.allow_quick_empty = TRUE
+ STR.max_combined_w_class = 1000
+ STR.max_items = 50
+ STR.display_numerical_stacking = FALSE
+ STR.can_hold = typecacheof(list(/obj/item/strangerock))
+
+/obj/item/storage/bag/strangerockadv/equipped(mob/user)
+ . = ..()
+ if(listeningTo == user)
+ return
+ if(listeningTo)
+ UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
+ RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/Pickup_rocks)
+ listeningTo = user
+
+/obj/item/storage/bag/strangerockadv/dropped(mob/user)
+ . = ..()
+ if(listeningTo)
+ UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
+ listeningTo = null
+
+/obj/item/storage/bag/strangerockadv/proc/Pickup_rocks(mob/living/user)
+ var/show_message = FALSE
+ var/turf/tile = user.loc
+ if (!isturf(tile))
+ return
+
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ if(STR)
+ for(var/A in tile)
+ if (!is_type_in_typecache(A, STR.can_hold))
+ continue
+ else if(SEND_SIGNAL(src, COMSIG_TRY_STORAGE_INSERT, A, user, TRUE))
+ show_message = TRUE
+ else
+ if(!spam_protection)
+ to_chat(user, "Your [name] is full and can't hold any more!")
+ spam_protection = TRUE
+ continue
+ if(show_message)
+ playsound(user, "rustle", 50, TRUE)
+ user.visible_message("[user] scoops up the rocks beneath [user.p_them()].", \
+ "You scoop up the rocks beneath you with your [name].")
+ spam_protection = FALSE
+
+//
+
+/obj/item/storage/belt/xenoarch
+ name = "xenoarchaeologist belt"
+ desc = "used to store your tools for xenoarchaeology."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/tools.dmi'
+ icon_state = "miningbelt"
+
+/obj/item/storage/belt/xenoarch/ComponentInitialize()
+ . = ..()
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ var/static/list/can_hold = typecacheof(list(
+ /obj/item/xenoarch/help,
+ /obj/item/xenoarch/clean,
+ /obj/item/t_scanner/adv_mining_scanner,
+ /obj/item/gps
+ ))
+ STR.can_hold = can_hold
+ STR.max_items = 12
+ STR.max_w_class = WEIGHT_CLASS_BULKY
+ STR.max_combined_w_class = 200
+
+/obj/item/storage/belt/xenoarch/full/PopulateContents()
+ new /obj/item/xenoarch/help/measuring(src)
+ new /obj/item/xenoarch/help/scanner(src)
+ new /obj/item/xenoarch/clean/brush/basic(src)
+ new /obj/item/xenoarch/clean/hammer/cm15(src)
+ new /obj/item/xenoarch/clean/hammer/cm6(src)
+ new /obj/item/xenoarch/clean/hammer/cm5(src)
+ new /obj/item/xenoarch/clean/hammer/cm4(src)
+ new /obj/item/xenoarch/clean/hammer/cm3(src)
+ new /obj/item/xenoarch/clean/hammer/cm2(src)
+ new /obj/item/xenoarch/clean/hammer/cm1(src)
+ new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
+ new /obj/item/gps(src)
+ return
+
+/obj/structure/closet/wardrobe/xenoarch
+ name = "xenoarchaeologist wardrobe"
+ icon_state = "science"
+ icon_door = "science"
+
+/obj/structure/closet/wardrobe/xenoarch/PopulateContents()
+ new /obj/item/xenoarch/help/measuring(src)
+ new /obj/item/xenoarch/help/scanner(src)
+ new /obj/item/xenoarch/clean/brush/basic(src)
+ new /obj/item/xenoarch/clean/hammer/cm15(src)
+ new /obj/item/xenoarch/clean/hammer/cm6(src)
+ new /obj/item/xenoarch/clean/hammer/cm5(src)
+ new /obj/item/xenoarch/clean/hammer/cm4(src)
+ new /obj/item/xenoarch/clean/hammer/cm3(src)
+ new /obj/item/xenoarch/clean/hammer/cm2(src)
+ new /obj/item/xenoarch/clean/hammer/cm1(src)
+ new /obj/item/pickaxe(src)
+ new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
+ new /obj/item/gps(src)
+ new /obj/item/storage/belt/xenoarch(src)
+ new /obj/item/storage/bag/strangerock(src)
+ return
+
+//
+
+//Research WEB
+
+/datum/techweb_node/xenoarchtools
+ id = "xenoarchtools"
+ display_name = "Xenoarchaeology Tools"
+ description = "Xenoarchaeology tools that are used for xenoarchaeology, who knew."
+ prereq_ids = list("base")
+ design_ids = list("hammercm1","hammercm2","hammercm3","hammercm4","hammercm5","hammercm6","hammercm15","hammerbrush","xenoscanner","xenomeasure","xenobelt","xenorockback")
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 750)
+
+/datum/techweb_node/portxenoarch
+ id = "portxenoarch"
+ display_name = "Portable Xenoarchaeology Tools"
+ description = "Tools for extracting seeds, and for getting some research points."
+ prereq_ids = list("xenoarchtools")
+ design_ids = list("xenoresearch","xenoplant")
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)
+
+/datum/techweb_node/advportcargo
+ id = "advportcargo"
+ display_name = "Advanced Cargo Technology"
+ description = "A tool for selling stuff not through a shuttle. Careful with its use."
+ prereq_ids = list("portxenoarch")
+ design_ids = list("advcargoscanner")
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
+
+/datum/techweb_node/advxenoarch
+ id = "advxenoarch"
+ display_name = "Advanced Xenoarchaeology Tools"
+ description = "Tools that can make your excavation and recovering of artifacts easier."
+ prereq_ids = list("xenoarchtools")
+ design_ids = list("advxenoscanner","hammercmadv","hammerbrushadv","xenorockbackadv")
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000)
+
+//Research DESIGNS
+
+/datum/design/hammercm1
+ name = "Hammer cm1"
+ desc = "A hammer that destroys 1 cm of debris."
+ id = "hammercm1"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 500)
+ build_path = /obj/item/xenoarch/clean/hammer/cm1
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/hammercm2
+ name = "Hammer cm2"
+ desc = "A hammer that destroys 2 cm of debris."
+ id = "hammercm2"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 500)
+ build_path = /obj/item/xenoarch/clean/hammer/cm2
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/hammercm3
+ name = "Hammer cm3"
+ desc = "A hammer that destroys 3 cm of debris."
+ id = "hammercm3"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 500)
+ build_path = /obj/item/xenoarch/clean/hammer/cm3
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/hammercm4
+ name = "Hammer cm4"
+ desc = "A hammer that destroys 4 cm of debris."
+ id = "hammercm4"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 500)
+ build_path = /obj/item/xenoarch/clean/hammer/cm4
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/hammercm5
+ name = "Hammer cm5"
+ desc = "A hammer that destroys 5 cm of debris."
+ id = "hammercm5"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 500)
+ build_path = /obj/item/xenoarch/clean/hammer/cm5
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/hammercm6
+ name = "Hammer cm6"
+ desc = "A hammer that destroys 6 cm of debris."
+ id = "hammercm6"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 500)
+ build_path = /obj/item/xenoarch/clean/hammer/cm6
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/hammercm15
+ name = "Hammer cm15"
+ desc = "A hammer that destroys 15 cm of debris."
+ id = "hammercm15"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 500)
+ build_path = /obj/item/xenoarch/clean/hammer/cm15
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/hammercmadv
+ name = "Advanced Hammer"
+ desc = "A hammer that destroys up to 30 cm of debris."
+ id = "hammercmadv"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 1500)
+ build_path = /obj/item/xenoarch/clean/hammer/advanced
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/cleanbrush
+ name = "Brush"
+ desc = "A brush that cleans debris."
+ id = "hammerbrush"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 500)
+ build_path = /obj/item/xenoarch/clean/brush/basic
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/cleanbrushadv
+ name = "Advanced Brush"
+ desc = "A brush that cleans debris."
+ id = "hammerbrushadv"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 1500)
+ build_path = /obj/item/xenoarch/clean/brush/adv
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+// Designs for tools
+
+/datum/design/xenoscanner
+ name = "Mining Scanner"
+ desc = "A tool that scans depths of rocks."
+ id = "xenoscanner"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 500)
+ build_path = /obj/item/xenoarch/help/scanner
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/advxenoscanner
+ name = "Advanced Mining Scanner"
+ desc = "A tool that scans depths of rocks."
+ id = "advxenoscanner"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 1500)
+ build_path = /obj/item/xenoarch/help/scanneradv
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/xenomeasure
+ name = "Measuring Tape"
+ desc = "A tool to measure the dug depth of rocks."
+ id = "xenomeasure"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 500)
+ build_path = /obj/item/xenoarch/help/measuring
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/xenoresearch
+ name = "Research Scanner"
+ desc = "A tool used to get research points from artifacts."
+ id = "xenoresearch"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 1000)
+ build_path = /obj/item/xenoarch/help/research
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/xenoplant
+ name = "Fossil Seed Extractor"
+ desc = "A tool to extract the seeds from prehistoric fossils."
+ id = "xenoplant"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 1000)
+ build_path = /obj/item/xenoarch/help/plant
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/advcargoscanner
+ name = "Cargo Scanner"
+ desc = "A tool used to sell items, virtually."
+ id = "advcargoscanner"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 1000, /datum/material/bluespace = 1000)
+ build_path = /obj/item/xenoarch/help/cargo
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO
+
+/datum/design/xenobelt
+ name = "Xenoarchaeology Belt"
+ desc = "A belt used to store some xenoarch tools."
+ id = "xenobelt"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 2000)
+ build_path = /obj/item/storage/belt/xenoarch
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/xenorockback
+ name = "Xenoarchaeology Strange Rock Bag"
+ desc = "A bag used to store 10 strange rocks."
+ id = "xenorockback"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 2000)
+ build_path = /obj/item/storage/bag/strangerock
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/xenorockbackadv
+ name = "Xenoarchaeology Bluespace Strange Rock Bag"
+ desc = "A bluespace bag used to store 50 strange rocks."
+ id = "xenorockbackadv"
+ build_type = PROTOLATHE
+ materials = list(/datum/material/plastic = 2000, /datum/material/bluespace = 1000)
+ build_path = /obj/item/storage/bag/strangerockadv
+ category = list("Tool Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
diff --git a/code/modules/research/xenoarch/tools.dmi b/code/modules/research/xenoarch/tools.dmi
new file mode 100644
index 00000000..59b63a45
Binary files /dev/null and b/code/modules/research/xenoarch/tools.dmi differ
diff --git a/code/modules/research/xenoarch/xenobotany/grown/amauri.dm b/code/modules/research/xenoarch/xenobotany/grown/amauri.dm
new file mode 100644
index 00000000..91506bc3
--- /dev/null
+++ b/code/modules/research/xenoarch/xenobotany/grown/amauri.dm
@@ -0,0 +1,28 @@
+/obj/item/seeds/amauri
+ name = "pack of amauri seeds"
+ desc = "These seeds grow into amauri plants."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
+ icon_state = "amauri"
+ species = "amauri"
+ plantname = "Amauri Plant"
+ product = /obj/item/reagent_containers/food/snacks/grown/amauri
+ lifespan = 55
+ endurance = 35
+ yield = 5
+ growing_icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
+ icon_grow = "amauri-stage"
+ growthstages = 3
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ reagents_add = list(/datum/reagent/mutationtoxin/shadow = 0.1)
+
+/obj/item/reagent_containers/food/snacks/grown/amauri
+ seed = /obj/item/seeds/amauri
+ name = "amauri"
+ desc = "It's a little piece of amauri."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "amauri"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/mutationtoxin/shadow = 0)
+ tastes = list("shadow" = 1)
\ No newline at end of file
diff --git a/code/modules/research/xenoarch/xenobotany/grown/gelthi.dm b/code/modules/research/xenoarch/xenobotany/grown/gelthi.dm
new file mode 100644
index 00000000..801417db
--- /dev/null
+++ b/code/modules/research/xenoarch/xenobotany/grown/gelthi.dm
@@ -0,0 +1,28 @@
+/obj/item/seeds/gelthi
+ name = "pack of gelthi seeds"
+ desc = "These seeds grow into gelthi plants."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
+ icon_state = "gelthi"
+ species = "gelthi"
+ plantname = "Gelthi Plant"
+ product = /obj/item/reagent_containers/food/snacks/grown/gelthi
+ lifespan = 55
+ endurance = 35
+ yield = 5
+ growing_icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
+ icon_grow = "gelthi-stage"
+ growthstages = 3
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ reagents_add = list(/datum/reagent/gold = 0.1)
+
+/obj/item/reagent_containers/food/snacks/grown/gelthi
+ seed = /obj/item/seeds/gelthi
+ name = "gelthi"
+ desc = "It's a little piece of gelthi."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "gelthi"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/gold = 0)
+ tastes = list("gold" = 1)
diff --git a/code/modules/research/xenoarch/xenobotany/grown/jurlmah.dm b/code/modules/research/xenoarch/xenobotany/grown/jurlmah.dm
new file mode 100644
index 00000000..8659588d
--- /dev/null
+++ b/code/modules/research/xenoarch/xenobotany/grown/jurlmah.dm
@@ -0,0 +1,28 @@
+/obj/item/seeds/jurlmah
+ name = "pack of jurlmah seeds"
+ desc = "These seeds grow into jurlmah plants."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
+ icon_state = "jurlmah"
+ species = "jurlmah"
+ plantname = "Jurlmah Plant"
+ product = /obj/item/reagent_containers/food/snacks/grown/jurlmah
+ lifespan = 55
+ endurance = 35
+ yield = 5
+ growing_icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
+ icon_grow = "jurlmah-stage"
+ growthstages = 5
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ reagents_add = list(/datum/reagent/medicine/cryoxadone = 0.1)
+
+/obj/item/reagent_containers/food/snacks/grown/jurlmah
+ seed = /obj/item/seeds/jurlmah
+ name = "jurlmah"
+ desc = "It's a little piece of jurlmah."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "jurlmah"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/medicine/cryoxadone = 0)
+ tastes = list("cold" = 1)
diff --git a/code/modules/research/xenoarch/xenobotany/grown/nofruit.dm b/code/modules/research/xenoarch/xenobotany/grown/nofruit.dm
new file mode 100644
index 00000000..ff4adf39
--- /dev/null
+++ b/code/modules/research/xenoarch/xenobotany/grown/nofruit.dm
@@ -0,0 +1,28 @@
+/obj/item/seeds/nofruit
+ name = "pack of nofruit seeds"
+ desc = "These seeds grow into nofruit plants."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
+ icon_state = "nofruit"
+ species = "nofruit"
+ plantname = "Nofruit Plant"
+ product = /obj/item/reagent_containers/food/snacks/grown/nofruit
+ lifespan = 55
+ endurance = 35
+ yield = 5
+ growing_icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
+ icon_grow = "nofruit-stage"
+ growthstages = 4
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ reagents_add = list(/datum/reagent/consumable/nothing = 0.1, /datum/reagent/consumable/laughter = 0.1)
+
+/obj/item/reagent_containers/food/snacks/grown/nofruit
+ seed = /obj/item/seeds/nofruit
+ name = "nofruit"
+ desc = "It's a little piece of nofruit."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "nofruit"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/consumable/nothing = 0)
+ tastes = list("entertainment" = 1)
diff --git a/code/modules/research/xenoarch/xenobotany/grown/shand.dm b/code/modules/research/xenoarch/xenobotany/grown/shand.dm
new file mode 100644
index 00000000..d7ac3488
--- /dev/null
+++ b/code/modules/research/xenoarch/xenobotany/grown/shand.dm
@@ -0,0 +1,28 @@
+/obj/item/seeds/shand
+ name = "pack of shand seeds"
+ desc = "These seeds grow into shand plants."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
+ icon_state = "shand"
+ species = "shand"
+ plantname = "Shand Plant"
+ product = /obj/item/reagent_containers/food/snacks/grown/shand
+ lifespan = 55
+ endurance = 35
+ yield = 5
+ growing_icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
+ icon_grow = "shand-stage"
+ growthstages = 3
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ reagents_add = list(/datum/reagent/pax = 0.1)
+
+/obj/item/reagent_containers/food/snacks/grown/shand
+ seed = /obj/item/seeds/shand
+ name = "shand"
+ desc = "It's a little piece of shand."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "shand"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/pax = 0)
+ tastes = list("peace" = 1)
diff --git a/code/modules/research/xenoarch/xenobotany/grown/surik.dm b/code/modules/research/xenoarch/xenobotany/grown/surik.dm
new file mode 100644
index 00000000..7fbba5e5
--- /dev/null
+++ b/code/modules/research/xenoarch/xenobotany/grown/surik.dm
@@ -0,0 +1,28 @@
+/obj/item/seeds/surik
+ name = "pack of surik seeds"
+ desc = "These seeds grow into surik plants."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
+ icon_state = "surik"
+ species = "surik"
+ plantname = "Surik Plant"
+ product = /obj/item/reagent_containers/food/snacks/grown/surik
+ lifespan = 55
+ endurance = 35
+ yield = 5
+ growing_icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
+ icon_grow = "surik-stage"
+ growthstages = 4
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ reagents_add = list(/datum/reagent/consumable/frostoil = 0.1)
+
+/obj/item/reagent_containers/food/snacks/grown/surik
+ seed = /obj/item/seeds/surik
+ name = "surik"
+ desc = "It's a little piece of surik."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "surik"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/consumable/frostoil = 0)
+ tastes = list("snow" = 1)
diff --git a/code/modules/research/xenoarch/xenobotany/grown/telriis.dm b/code/modules/research/xenoarch/xenobotany/grown/telriis.dm
new file mode 100644
index 00000000..c5c3897c
--- /dev/null
+++ b/code/modules/research/xenoarch/xenobotany/grown/telriis.dm
@@ -0,0 +1,28 @@
+/obj/item/seeds/telriis
+ name = "pack of telriis seeds"
+ desc = "These seeds grow into telriis plants."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
+ icon_state = "telriis"
+ species = "telriis"
+ plantname = "Telriis Plant"
+ product = /obj/item/reagent_containers/food/snacks/grown/telriis
+ lifespan = 55
+ endurance = 35
+ yield = 5
+ growing_icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
+ icon_grow = "telriis-stage"
+ growthstages = 4
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ reagents_add = list(/datum/reagent/mutationtoxin/pod = 0.1)
+
+/obj/item/reagent_containers/food/snacks/grown/telriis
+ seed = /obj/item/seeds/telriis
+ name = "telriis"
+ desc = "It's a little piece of telriis."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "telriis"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/mutationtoxin/pod = 0)
+ tastes = list("plant" = 1)
diff --git a/code/modules/research/xenoarch/xenobotany/grown/thaadra.dm b/code/modules/research/xenoarch/xenobotany/grown/thaadra.dm
new file mode 100644
index 00000000..2210e6af
--- /dev/null
+++ b/code/modules/research/xenoarch/xenobotany/grown/thaadra.dm
@@ -0,0 +1,28 @@
+/obj/item/seeds/thaadra
+ name = "pack of thaadra seeds"
+ desc = "These seeds grow into thaadra plants."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
+ icon_state = "thaadra"
+ species = "thaadra"
+ plantname = "Thaadra Plant"
+ product = /obj/item/reagent_containers/food/snacks/grown/thaadra
+ lifespan = 55
+ endurance = 35
+ yield = 5
+ growing_icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
+ icon_grow = "thaadra-stage"
+ growthstages = 4
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ reagents_add = list(/datum/reagent/silver = 0.1)
+
+/obj/item/reagent_containers/food/snacks/grown/thaadra
+ seed = /obj/item/seeds/thaadra
+ name = "thaadra"
+ desc = "It's a little piece of thaadra."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "thaadra"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/silver = 0)
+ tastes = list("silver" = 1)
diff --git a/code/modules/research/xenoarch/xenobotany/grown/vale.dm b/code/modules/research/xenoarch/xenobotany/grown/vale.dm
new file mode 100644
index 00000000..ca3019a2
--- /dev/null
+++ b/code/modules/research/xenoarch/xenobotany/grown/vale.dm
@@ -0,0 +1,28 @@
+/obj/item/seeds/vale
+ name = "pack of vale seeds"
+ desc = "These seeds grow into vale plants."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
+ icon_state = "vale"
+ species = "vale"
+ plantname = "Vale Plant"
+ product = /obj/item/reagent_containers/food/snacks/grown/vale
+ lifespan = 55
+ endurance = 35
+ yield = 5
+ growing_icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
+ icon_grow = "vale-stage"
+ growthstages = 4
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ reagents_add = list(/datum/reagent/slime_toxin = 0.1)
+
+/obj/item/reagent_containers/food/snacks/grown/vale
+ seed = /obj/item/seeds/vale
+ name = "vale"
+ desc = "It's a little piece of vale."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "vale"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/slime_toxin = 0)
+ tastes = list("slime" = 1)
diff --git a/code/modules/research/xenoarch/xenobotany/grown/vaporsac.dm b/code/modules/research/xenoarch/xenobotany/grown/vaporsac.dm
new file mode 100644
index 00000000..cf58f5ed
--- /dev/null
+++ b/code/modules/research/xenoarch/xenobotany/grown/vaporsac.dm
@@ -0,0 +1,28 @@
+/obj/item/seeds/vaporsac
+ name = "pack of vaporsac seeds"
+ desc = "These seeds grow into vaporsac plants."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/seeds.dmi'
+ icon_state = "vaporsac"
+ species = "vaporsac"
+ plantname = "Vaporsac Plant"
+ product = /obj/item/reagent_containers/food/snacks/grown/vaporsac
+ lifespan = 55
+ endurance = 35
+ yield = 5
+ growing_icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/growing.dmi'
+ icon_grow = "vaporsac-stage"
+ growthstages = 3
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ reagents_add = list(/datum/reagent/nitrous_oxide = 0.1)
+
+/obj/item/reagent_containers/food/snacks/grown/vaporsac
+ seed = /obj/item/seeds/vaporsac
+ name = "vaporsac"
+ desc = "It's a little piece of vaporsac."
+ icon = 'modular_skyrat/code/modules/research/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "vaporsac"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/nitrous_oxide = 0)
+ tastes = list("sleep" = 1)
diff --git a/code/modules/research/xenoarch/xenobotany/icons/growing.dmi b/code/modules/research/xenoarch/xenobotany/icons/growing.dmi
new file mode 100644
index 00000000..c33bab44
Binary files /dev/null and b/code/modules/research/xenoarch/xenobotany/icons/growing.dmi differ
diff --git a/code/modules/research/xenoarch/xenobotany/icons/harvests.dmi b/code/modules/research/xenoarch/xenobotany/icons/harvests.dmi
new file mode 100644
index 00000000..1bdf1e3e
Binary files /dev/null and b/code/modules/research/xenoarch/xenobotany/icons/harvests.dmi differ
diff --git a/code/modules/research/xenoarch/xenobotany/icons/seeds.dmi b/code/modules/research/xenoarch/xenobotany/icons/seeds.dmi
new file mode 100644
index 00000000..e1aa7739
Binary files /dev/null and b/code/modules/research/xenoarch/xenobotany/icons/seeds.dmi differ
diff --git a/icons/effects/ore_visuals.dmi b/icons/effects/ore_visuals.dmi
index 1353a2d8..c9e3a38d 100644
Binary files a/icons/effects/ore_visuals.dmi and b/icons/effects/ore_visuals.dmi differ
diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi
index 992b37cc..a2d27c62 100644
Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ