diff --git a/GainStation13/code/mechanics/calorite.dm b/GainStation13/code/mechanics/calorite.dm
index 7981404f56..51dc5b2904 100644
--- a/GainStation13/code/mechanics/calorite.dm
+++ b/GainStation13/code/mechanics/calorite.dm
@@ -2,8 +2,22 @@
name = "calorite"
sheet_type = /obj/item/stack/sheet/mineral/calorite
+/turf/closed/mineral/calorite //GS13
+ mineralType = /obj/item/stack/ore/calorite
+
+/obj/item/stack/ore/calorite //GS13
+ name = "calorite ore"
+ icon = 'GainStation13/icons/obj/mining.dmi'
+ icon_state = "calorite ore"
+ item_state = "calorite ore"
+ singular_name = "Calorite ore chunk"
+ points = 40
+ custom_materials = list(/datum/material/calorite=MINERAL_MATERIAL_AMOUNT)
+ refined_type = /obj/item/stack/sheet/mineral/calorite
+
/obj/item/stack/sheet/mineral/calorite
name = "calorite"
+ icon = 'GainStation13/icons/obj/stack_objects.dmi'
icon_state = "sheet-calorite"
item_state = "sheet-calorite"
singular_name = "calorite sheet"
diff --git a/GainStation13/code/xenoarch/artifact.dm b/GainStation13/code/xenoarch/artifact.dm
new file mode 100644
index 0000000000..ed5282ffb1
--- /dev/null
+++ b/GainStation13/code/xenoarch/artifact.dm
@@ -0,0 +1,97 @@
+/obj/item/ancientartifact
+ name = "Admin Debug. Parent Artifact"
+ desc = "You shouldn't have this."
+ icon = 'GainStation13/code/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,
+ /obj/item/seeds/lipoplant, //GS13
+ /obj/item/seeds/cherry/bomb,
+ /obj/item/seeds/gatfruit,
+ /obj/item/seeds/kudzu,
+ /obj/item/seeds/firelemon,
+ /obj/item/seeds/random
+ ))
+
+ new seed(get_turf(user))
+ user.put_in_active_hand(seed)
+ qdel(src)
diff --git a/GainStation13/code/xenoarch/artifact_list.dm b/GainStation13/code/xenoarch/artifact_list.dm
new file mode 100644
index 0000000000..61fb58230d
--- /dev/null
+++ b/GainStation13/code/xenoarch/artifact_list.dm
@@ -0,0 +1,70 @@
+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/shield/riot/roman/fake=1,
+ /obj/item/trash/plate=1,
+ /obj/item/extendohand=1,
+ /obj/item/toy/plush/random=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/storage/backpack/satchel/bone=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/kitchen/knife/ritual=1,
+ /obj/item/clockwork/slab=1,
+ /obj/item/gun/ballistic/shotgun/boltaction=1,
+ /obj/item/reagent_containers/pill/floorpill=1,
+ /obj/item/survivalcapsule/luxury=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/guardiancreator=1,
+ /obj/item/flashlight/emp=1,
+ /obj/item/encryptionkey/binary=1,
+ /obj/item/gun/medbeam=1,
+ /obj/item/storage/box/syndie_kit/chameleon=1,
+ /obj/item/clothing/glasses/phantomthief/syndicate=1,
+ /obj/item/organ/brain/alien=1,
+ /obj/item/organ/alien/plasmavessel/large/queen=1,
+ /obj/item/organ/alien/plasmavessel/small=1,
+ /obj/item/grenade/clusterbuster/cleaner=1,
+ /obj/item/clothing/gloves/combat=1,
+ /obj/item/storage/toolbox/syndicate=1,
+ /obj/item/storage/toolbox/brass/prefilled/ratvar=1,
+ /obj/item/stack/sheet/mineral/abductor=1,
+ /obj/item/dice/d20/fate/one_use=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/disk/design_disk/golem_shell=1,
+ /obj/item/disk/tech_disk/illegal=1
+ ))
diff --git a/GainStation13/code/xenoarch/fossil_and_artifact.dmi b/GainStation13/code/xenoarch/fossil_and_artifact.dmi
new file mode 100644
index 0000000000..b052622086
Binary files /dev/null and b/GainStation13/code/xenoarch/fossil_and_artifact.dmi differ
diff --git a/GainStation13/code/xenoarch/strange_rock.dm b/GainStation13/code/xenoarch/strange_rock.dm
new file mode 100644
index 0000000000..a2110414ec
--- /dev/null
+++ b/GainStation13/code/xenoarch/strange_rock.dm
@@ -0,0 +1,112 @@
+/obj/item/strangerock
+ icon = 'GainStation13/code/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,"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)
+//
diff --git a/GainStation13/code/xenoarch/tools.dm b/GainStation13/code/xenoarch/tools.dm
new file mode 100644
index 0000000000..fc41661a38
--- /dev/null
+++ b/GainStation13/code/xenoarch/tools.dm
@@ -0,0 +1,580 @@
+/obj/item/xenoarch
+ name = "Parent Xenoarch"
+ desc = "Debug. Parent Clean"
+ icon = 'GainStation13/code/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,"You sell the [target].")
+
+
+
+// Storage: Belt and Locker and Bag
+
+/obj/item/storage/bag/strangerock
+ name = "strange rock bag"
+ desc = "A bag for strange rocks."
+ icon = 'GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/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(MAT_PLASTIC = 500)
+ build_path = /obj/item/xenoarch/clean/hammer/cm1
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 500)
+ build_path = /obj/item/xenoarch/clean/hammer/cm2
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 500)
+ build_path = /obj/item/xenoarch/clean/hammer/cm3
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 500)
+ build_path = /obj/item/xenoarch/clean/hammer/cm4
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 500)
+ build_path = /obj/item/xenoarch/clean/hammer/cm5
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 500)
+ build_path = /obj/item/xenoarch/clean/hammer/cm6
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 500)
+ build_path = /obj/item/xenoarch/clean/hammer/cm15
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 1500)
+ build_path = /obj/item/xenoarch/clean/hammer/advanced
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/cleanbrush
+ name = "Brush"
+ desc = "A brush that cleans debris."
+ id = "hammerbrush"
+ build_type = PROTOLATHE
+ materials = list(MAT_PLASTIC = 500)
+ build_path = /obj/item/xenoarch/clean/brush/basic
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/datum/design/cleanbrushadv
+ name = "Advanced Brush"
+ desc = "A brush that cleans debris."
+ id = "hammerbrushadv"
+ build_type = PROTOLATHE
+ materials = list(MAT_PLASTIC = 1500)
+ build_path = /obj/item/xenoarch/clean/brush/adv
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 500)
+ build_path = /obj/item/xenoarch/help/scanner
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 1500)
+ build_path = /obj/item/xenoarch/help/scanneradv
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 500)
+ build_path = /obj/item/xenoarch/help/measuring
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 1000)
+ build_path = /obj/item/xenoarch/help/research
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 1000)
+ build_path = /obj/item/xenoarch/help/plant
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 1000, MAT_BLUESPACE = 1000)
+ build_path = /obj/item/xenoarch/help/cargo
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 2000)
+ build_path = /obj/item/storage/belt/xenoarch
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 2000)
+ build_path = /obj/item/storage/bag/strangerock
+ category = list("Equipment")
+ 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(MAT_PLASTIC = 2000, MAT_BLUESPACE = 1000)
+ build_path = /obj/item/storage/bag/strangerockadv
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
+/obj/item/paper/fluff/stations/lavaland/xenoarch
+ name = "xenoarchaeology notice"
+ info = "XENOARCHAEOLOGY GUIDE
So you want to figure out xenoarchaeology? Well, it's easy to learn and can be 'fun' to pick up!
First, make sure you mine some rocks and find those weird, strange rocks that are occasionally found.
Then, bring them back safely to the facility, or somewhere... ANYWHERE really. Just be cautious of onlookers!
Next, take your depth scanner and scan the sucker.
It'll have a base depth and a safe depth. These depths are important:
1) Base depth is the deepest the relic can be within the rock.
2) Safe depth is the depth from the base depth that is the earliest it will appear FROM the base depth.
Essentially, take the base depth and subtract the safe depth from it. Mine to this point and start to brush brush brush!
For example: You get a rock that has a base depth of 30 and a safe depth of 10. How deep should you mine?
You should mine to 20, and then start brushing away. Eventually you'll get the relic!
Hopefully this helps! If not well... I don't know what to tell you.
Peace!
Kobe Ivanov,
P-A Xenoarchaeologist"
diff --git a/GainStation13/code/xenoarch/tools.dmi b/GainStation13/code/xenoarch/tools.dmi
new file mode 100644
index 0000000000..59b63a454f
Binary files /dev/null and b/GainStation13/code/xenoarch/tools.dmi differ
diff --git a/GainStation13/code/xenoarch/xenobotany/grown/amauri.dm b/GainStation13/code/xenoarch/xenobotany/grown/amauri.dm
new file mode 100644
index 0000000000..dcfb64d5cf
--- /dev/null
+++ b/GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "amauri"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/mutationtoxin/shadow = 0.1)
+ tastes = list("shadow" = 1)
diff --git a/GainStation13/code/xenoarch/xenobotany/grown/gelthi.dm b/GainStation13/code/xenoarch/xenobotany/grown/gelthi.dm
new file mode 100644
index 0000000000..6af27a2875
--- /dev/null
+++ b/GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "gelthi"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/gold = 0.1)
+ tastes = list("gold" = 1)
diff --git a/GainStation13/code/xenoarch/xenobotany/grown/jurlmah.dm b/GainStation13/code/xenoarch/xenobotany/grown/jurlmah.dm
new file mode 100644
index 0000000000..513296c65f
--- /dev/null
+++ b/GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "jurlmah"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/medicine/cryoxadone = 0.1)
+ tastes = list("cold" = 1)
diff --git a/GainStation13/code/xenoarch/xenobotany/grown/nofruit.dm b/GainStation13/code/xenoarch/xenobotany/grown/nofruit.dm
new file mode 100644
index 0000000000..3085fbb9ae
--- /dev/null
+++ b/GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "nofruit"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/consumable/nothing = 0.1, /datum/reagent/consumable/laughter = 0.1)
+ tastes = list("entertainment" = 1)
diff --git a/GainStation13/code/xenoarch/xenobotany/grown/shand.dm b/GainStation13/code/xenoarch/xenobotany/grown/shand.dm
new file mode 100644
index 0000000000..7656450d82
--- /dev/null
+++ b/GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "shand"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/pax = 0.1)
+ tastes = list("peace" = 1)
diff --git a/GainStation13/code/xenoarch/xenobotany/grown/surik.dm b/GainStation13/code/xenoarch/xenobotany/grown/surik.dm
new file mode 100644
index 0000000000..a414c502ed
--- /dev/null
+++ b/GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "surik"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/consumable/frostoil = 0.1)
+ tastes = list("snow" = 1)
diff --git a/GainStation13/code/xenoarch/xenobotany/grown/telriis.dm b/GainStation13/code/xenoarch/xenobotany/grown/telriis.dm
new file mode 100644
index 0000000000..353d5ff7e8
--- /dev/null
+++ b/GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "telriis"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/mutationtoxin/pod = 0.1)
+ tastes = list("plant" = 1)
diff --git a/GainStation13/code/xenoarch/xenobotany/grown/thaadra.dm b/GainStation13/code/xenoarch/xenobotany/grown/thaadra.dm
new file mode 100644
index 0000000000..17a2e4d6b0
--- /dev/null
+++ b/GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "thaadra"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/silver = 0.1)
+ tastes = list("silver" = 1)
diff --git a/GainStation13/code/xenoarch/xenobotany/grown/vale.dm b/GainStation13/code/xenoarch/xenobotany/grown/vale.dm
new file mode 100644
index 0000000000..58e4bcd3d8
--- /dev/null
+++ b/GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "vale"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/slime_toxin = 0.1)
+ tastes = list("slime" = 1)
diff --git a/GainStation13/code/xenoarch/xenobotany/grown/vaporsac.dm b/GainStation13/code/xenoarch/xenobotany/grown/vaporsac.dm
new file mode 100644
index 0000000000..4d128425ff
--- /dev/null
+++ b/GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/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 = 'GainStation13/code/xenoarch/xenobotany/icons/harvests.dmi'
+ icon_state = "vaporsac"
+ filling_color = "#FF4500"
+ bitesize = 100
+ foodtype = FRUIT
+ juice_results = list(/datum/reagent/nitrous_oxide = 0.1)
+ tastes = list("sleep" = 1)
diff --git a/GainStation13/code/xenoarch/xenobotany/icons/growing.dmi b/GainStation13/code/xenoarch/xenobotany/icons/growing.dmi
new file mode 100644
index 0000000000..c33bab4419
Binary files /dev/null and b/GainStation13/code/xenoarch/xenobotany/icons/growing.dmi differ
diff --git a/GainStation13/code/xenoarch/xenobotany/icons/harvests.dmi b/GainStation13/code/xenoarch/xenobotany/icons/harvests.dmi
new file mode 100644
index 0000000000..1bdf1e3ea8
Binary files /dev/null and b/GainStation13/code/xenoarch/xenobotany/icons/harvests.dmi differ
diff --git a/GainStation13/code/xenoarch/xenobotany/icons/seeds.dmi b/GainStation13/code/xenoarch/xenobotany/icons/seeds.dmi
new file mode 100644
index 0000000000..e1aa7739f7
Binary files /dev/null and b/GainStation13/code/xenoarch/xenobotany/icons/seeds.dmi differ
diff --git a/GainStation13/icons/obj/mining.dmi b/GainStation13/icons/obj/mining.dmi
new file mode 100644
index 0000000000..859e4ee2a0
Binary files /dev/null and b/GainStation13/icons/obj/mining.dmi differ
diff --git a/GainStation13/icons/obj/stack_objects.dmi b/GainStation13/icons/obj/stack_objects.dmi
new file mode 100644
index 0000000000..b7ee1c3b4d
Binary files /dev/null and b/GainStation13/icons/obj/stack_objects.dmi differ
diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm
index ef7d1d385c..df45b8ce48 100644
--- a/code/game/objects/items/plushes.dm
+++ b/code/game/objects/items/plushes.dm
@@ -18,7 +18,7 @@
var/obj/item/toy/plush/partner
var/obj/item/toy/plush/plush_child
var/obj/item/toy/plush/paternal_parent //who initiated creation
- var/obj/item/toy/plush/maternal_parent //who owns, see love()
+ var/obj/item/toy/plush/maternal_parent //who owns, see love()a
var/static/list/breeding_blacklist = typecacheof(/obj/item/toy/plush/carpplushie/dehy_carp) // you cannot have sexual relations with this plush
var/list/scorned = list() //who the plush hates
var/list/scorned_by = list() //who hates the plush, to remove external references on Destroy()
diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm
index 59405e1b10..dfcead57d3 100644
--- a/code/game/turfs/simulated/minerals.dm
+++ b/code/game/turfs/simulated/minerals.dm
@@ -225,7 +225,7 @@
mineralChance = 25
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 35, /obj/item/stack/ore/diamond = 30, /obj/item/stack/ore/gold = 45, /obj/item/stack/ore/titanium = 45,
- /obj/item/stack/ore/silver = 50, /obj/item/stack/ore/plasma = 50, /obj/item/stack/ore/bluespace_crystal = 20)
+ /obj/item/stack/ore/silver = 50, /obj/item/stack/ore/plasma = 50, /obj/item/stack/ore/bluespace_crystal = 20, /obj/item/stack/ore/calorite = 20,) //GS13 EDIT
/turf/closed/mineral/random/high_chance/volcanic
environment_type = "basalt"
@@ -235,7 +235,7 @@
defer_change = TRUE
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 35, /obj/item/stack/ore/diamond = 30, /obj/item/stack/ore/gold = 45, /obj/item/stack/ore/titanium = 45,
- /obj/item/stack/ore/silver = 50, /obj/item/stack/ore/plasma = 50, /obj/item/stack/ore/bluespace_crystal)
+ /obj/item/stack/ore/silver = 50, /obj/item/stack/ore/plasma = 50, /obj/item/stack/ore/bluespace_crystal = 20, /obj/item/stack/ore/calorite = 20,) //GS13 EDIT
/turf/closed/mineral/random/low_chance
icon_state = "rock_lowchance"
@@ -243,7 +243,7 @@
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 2, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 4, /obj/item/stack/ore/titanium = 4,
/obj/item/stack/ore/silver = 6, /obj/item/stack/ore/plasma = 15, /obj/item/stack/ore/iron = 40,
- /turf/closed/mineral/gibtonite = 2, /obj/item/stack/ore/bluespace_crystal = 1)
+ /turf/closed/mineral/gibtonite = 2, /obj/item/stack/ore/bluespace_crystal = 1, /obj/item/strangerock = 3, /obj/item/stack/ore/calorite = 1,) //GS13 EDIT
/turf/closed/mineral/random/volcanic
environment_type = "basalt"
@@ -256,7 +256,7 @@
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 5, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 10, /obj/item/stack/ore/titanium = 11,
/obj/item/stack/ore/silver = 12, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 40,
- /turf/closed/mineral/gibtonite/volcanic = 4, /obj/item/stack/ore/bluespace_crystal = 1)
+ /turf/closed/mineral/gibtonite/volcanic = 4, /obj/item/stack/ore/bluespace_crystal = 1, /obj/item/strangerock = 3, /obj/item/stack/ore/calorite = 1,) //GS13 EDIT
/turf/closed/mineral/random/snow
name = "snowy mountainside"
@@ -285,7 +285,7 @@
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 5, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 10, /obj/item/stack/ore/titanium = 11,
/obj/item/stack/ore/silver = 12, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 40,
- /turf/closed/mineral/gibtonite/ice/icemoon = 4, /obj/item/stack/ore/bluespace_crystal = 1)
+ /turf/closed/mineral/gibtonite/ice/icemoon = 4, /obj/item/stack/ore/bluespace_crystal = 1, /obj/item/strangerock = 3, /obj/item/stack/ore/calorite = 1,) //GS13 EDIT
/turf/closed/mineral/random/snow/underground
baseturfs = /turf/open/floor/plating/asteroid/snow/icemoon
@@ -294,12 +294,12 @@
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 10, /obj/item/stack/ore/diamond = 4, /obj/item/stack/ore/gold = 20, /obj/item/stack/ore/titanium = 22,
/obj/item/stack/ore/silver = 24, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 20, /obj/item/stack/ore/bananium = 1,
- /turf/closed/mineral/gibtonite/ice/icemoon = 8, /obj/item/stack/ore/bluespace_crystal = 2)
+ /turf/closed/mineral/gibtonite/ice/icemoon = 8, /obj/item/stack/ore/bluespace_crystal = 2, /obj/item/strangerock = 6, /obj/item/stack/ore/calorite = 2,) //GS13 EDIT
/turf/closed/mineral/random/snow/high_chance
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 35, /obj/item/stack/ore/diamond = 30, /obj/item/stack/ore/gold = 45, /obj/item/stack/ore/titanium = 45,
- /obj/item/stack/ore/silver = 50, /obj/item/stack/ore/plasma = 50, /obj/item/stack/ore/bluespace_crystal = 20)
+ /obj/item/stack/ore/silver = 50, /obj/item/stack/ore/plasma = 50, /obj/item/stack/ore/bluespace_crystal = 20, /obj/item/stack/ore/calorite = 20,) //GS13 EDIT
/turf/closed/mineral/random/labormineral
icon_state = "rock_labor"
diff --git a/tgstation.dme b/tgstation.dme
index f0227ac0b6..90ef0e5690 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -4002,6 +4002,20 @@
#include "GainStation13\code\obj\weapons\fatoray.dm"
#include "GainStation13\code\obj\weapons\feeder_ebow.dm"
#include "GainStation13\code\structures\trapped_items.dm"
+#include "GainStation13\code\xenoarch\artifact.dm"
+#include "GainStation13\code\xenoarch\artifact_list.dm"
+#include "GainStation13\code\xenoarch\strange_rock.dm"
+#include "GainStation13\code\xenoarch\tools.dm"
+#include "GainStation13\code\xenoarch\xenobotany\grown\amauri.dm"
+#include "GainStation13\code\xenoarch\xenobotany\grown\gelthi.dm"
+#include "GainStation13\code\xenoarch\xenobotany\grown\jurlmah.dm"
+#include "GainStation13\code\xenoarch\xenobotany\grown\nofruit.dm"
+#include "GainStation13\code\xenoarch\xenobotany\grown\shand.dm"
+#include "GainStation13\code\xenoarch\xenobotany\grown\surik.dm"
+#include "GainStation13\code\xenoarch\xenobotany\grown\telriis.dm"
+#include "GainStation13\code\xenoarch\xenobotany\grown\thaadra.dm"
+#include "GainStation13\code\xenoarch\xenobotany\grown\vale.dm"
+#include "GainStation13\code\xenoarch\xenobotany\grown\vaporsac.dm"
#include "GainStation13\icons\obj\vairous_weapons.dm"
#include "hyperstation\code\modules\clothing\sizeaccessories.dm"
#include "hyperstation\code\modules\resize\resize_action.dm"