diff --git a/code/game/objects/items/trash_material.dm b/code/game/objects/items/trash_material.dm
new file mode 100644
index 0000000000..6ba36565d6
--- /dev/null
+++ b/code/game/objects/items/trash_material.dm
@@ -0,0 +1,72 @@
+/obj/item/trash/material
+ icon = 'icons/obj/material_trash.dmi'
+ matter = list()
+ var/matter_chances = list() //List of lists: list(mat_name, chance, amount)
+
+
+/obj/item/trash/material/Initialize()
+ . = ..()
+ if(!matter)
+ matter = list()
+
+ for(var/list/L in matter_chances)
+ if(prob(L[2]))
+ matter |= L[1]
+ matter[L[1]] += max(0, L[3] + rand(-2,2))
+
+
+
+
+/obj/item/trash/material/metal
+ name = "scrap metal"
+ desc = "A piece of metal that can be recycled in an autolathe."
+ icon_state = "metal0"
+ matter_chances = list(
+ list(MAT_STEEL, 100, 15),
+ list(MAT_STEEL, 50, 10),
+ list(MAT_STEEL, 10, 20),
+ list(MAT_PLASTEEL, 10, 5),
+ list(MAT_PLASTEEL, 5, 10)
+ )
+
+/obj/item/trash/material/metal/Initialize()
+ . = ..()
+ icon_state = "metal[rand(4)]"
+
+
+/obj/item/trash/material/circuit
+ name = "burnt circuit"
+ desc = "A burnt circuit that can be recycled in an autolathe."
+ w_class = ITEMSIZE_SMALL
+ icon_state = "circuit0"
+ matter_chances = list(
+ list(MAT_GLASS, 100, 4),
+ list(MAT_GLASS, 50, 3),
+ list(MAT_PLASTIC, 40, 3),
+ list(MAT_SILVER, 18, 3),
+ list(MAT_GOLD, 17, 3),
+ list(MAT_DIAMOND, 4, 2),
+ )
+
+/obj/item/trash/material/circuit/Initialize()
+ . = ..()
+ icon_state = "circuit[rand(3)]"
+
+
+/obj/item/trash/material/device
+ name = "broken device"
+ desc = "A broken device that can be recycled in an autolathe."
+ w_class = ITEMSIZE_SMALL
+ icon_state = "device0"
+ matter_chances = list(
+ list(MAT_STEEL, 100, 10),
+ list(MAT_GLASS, 90, 7),
+ list(MAT_PLASTIC, 100, 10),
+ list(MAT_SILVER, 16, 7),
+ list(MAT_GOLD, 15, 5),
+ list(MAT_DIAMOND, 5, 2),
+ )
+
+/obj/item/trash/material/device/Initialize()
+ . = ..()
+ icon_state = "device[rand(3)]"
diff --git a/code/game/objects/structures/salvageable.dm b/code/game/objects/structures/salvageable.dm
new file mode 100644
index 0000000000..2703a7eed6
--- /dev/null
+++ b/code/game/objects/structures/salvageable.dm
@@ -0,0 +1,366 @@
+/obj/structure/salvageable
+ name = "broken macninery"
+ desc = "Broken beyond repair, but looks like you can still salvage something from this if you had a prying implement."
+ icon = 'icons/obj/salvageable.dmi'
+ density = 1
+ anchored = 1
+ var/salvageable_parts = list()
+
+/obj/structure/salvageable/proc/dismantle()
+ new /obj/structure/frame (src.loc)
+ for(var/path in salvageable_parts)
+ if(prob(salvageable_parts[path]))
+ new path (loc)
+ return
+
+/obj/structure/salvageable/attackby(obj/item/I, mob/user)
+ if(I.is_crowbar())
+ playsound(loc, I.usesound, 50, 1)
+ var/actual_time = I.toolspeed * 170
+ user.visible_message( \
+ "\The [user] begins salvaging from \the [src].", \
+ "You start salvaging from \the [src].")
+ if(do_after(user, actual_time, target = src))
+ user.visible_message( \
+ "\The [user] has salvaged \the [src].", \
+ "You salvage \the [src].")
+ dismantle()
+ qdel(src)
+ return TRUE
+ return ..()
+
+//Types themself, use them, but not the parent object
+
+/obj/structure/salvageable/machine
+ name = "broken machine"
+ icon_state = "machine1"
+ salvageable_parts = list(
+ /obj/item/weapon/stock_parts/console_screen = 80,
+ /obj/item/stack/cable_coil{amount = 5} = 80,
+ /obj/item/trash/material/circuit = 60,
+ /obj/item/trash/material/metal = 60,
+ /obj/item/weapon/stock_parts/capacitor = 40,
+ /obj/item/weapon/stock_parts/capacitor = 40,
+ /obj/item/weapon/stock_parts/scanning_module = 40,
+ /obj/item/weapon/stock_parts/scanning_module = 40,
+ /obj/item/weapon/stock_parts/manipulator = 40,
+ /obj/item/weapon/stock_parts/manipulator = 40,
+ /obj/item/weapon/stock_parts/micro_laser = 40,
+ /obj/item/weapon/stock_parts/micro_laser = 40,
+ /obj/item/weapon/stock_parts/matter_bin = 40,
+ /obj/item/weapon/stock_parts/matter_bin = 40,
+ /obj/item/weapon/stock_parts/capacitor/adv = 20,
+ /obj/item/weapon/stock_parts/scanning_module/adv = 20,
+ /obj/item/weapon/stock_parts/manipulator/nano = 20,
+ /obj/item/weapon/stock_parts/micro_laser/high = 20,
+ /obj/item/weapon/stock_parts/matter_bin/adv = 20
+ )
+
+/obj/structure/salvageable/machine/Initialize()
+ . = ..()
+ icon_state = "machine[rand(0,6)]"
+
+/obj/structure/salvageable/computer
+ name = "broken computer"
+ icon_state = "computer0"
+ salvageable_parts = list(
+ /obj/item/weapon/stock_parts/console_screen = 80,
+ /obj/item/stack/cable_coil{amount = 5} = 90,
+ /obj/item/stack/material/glass{amount = 5} = 90,
+ /obj/item/trash/material/circuit = 60,
+ /obj/item/trash/material/metal = 60,
+ /obj/item/weapon/stock_parts/capacitor = 60,
+ /obj/item/weapon/stock_parts/capacitor = 60,
+ /obj/item/weapon/computer_hardware/network_card = 40,
+ /obj/item/weapon/computer_hardware/network_card = 40,
+ /obj/item/weapon/computer_hardware/processor_unit = 40,
+ /obj/item/weapon/computer_hardware/processor_unit = 40,
+ /obj/item/weapon/computer_hardware/card_slot = 40,
+ /obj/item/weapon/computer_hardware/card_slot = 40,
+ /obj/item/weapon/stock_parts/capacitor/adv = 30,
+ /obj/item/weapon/computer_hardware/network_card/advanced = 20
+ )
+obj/structure/salvageable/computer/Initialize()
+ . = ..()
+ icon_state = "computer[rand(0,7)]"
+
+/obj/structure/salvageable/autolathe
+ name = "broken autolathe"
+ icon_state = "autolathe"
+ salvageable_parts = list(
+ /obj/item/weapon/stock_parts/console_screen = 80,
+ /obj/item/stack/cable_coil{amount = 5} = 80,
+ /obj/item/trash/material/circuit = 60,
+ /obj/item/trash/material/metal = 60,
+ /obj/item/weapon/stock_parts/capacitor = 40,
+ /obj/item/weapon/stock_parts/scanning_module = 40,
+ /obj/item/weapon/stock_parts/manipulator = 40,
+ /obj/item/weapon/stock_parts/micro_laser = 40,
+ /obj/item/weapon/stock_parts/micro_laser = 40,
+ /obj/item/weapon/stock_parts/micro_laser = 40,
+ /obj/item/weapon/stock_parts/matter_bin = 40,
+ /obj/item/weapon/stock_parts/matter_bin = 40,
+ /obj/item/weapon/stock_parts/matter_bin = 40,
+ /obj/item/weapon/stock_parts/matter_bin = 40,
+ /obj/item/weapon/stock_parts/capacitor/adv = 20,
+ /obj/item/weapon/stock_parts/micro_laser/high = 20,
+ /obj/item/weapon/stock_parts/micro_laser/high = 20,
+ /obj/item/weapon/stock_parts/matter_bin/adv = 20,
+ /obj/item/weapon/stock_parts/matter_bin/adv = 20,
+ /obj/item/stack/material/steel{amount = 20} = 40,
+ /obj/item/stack/material/glass{amount = 20} = 40,
+ /obj/item/stack/material/plastic{amount = 20} = 40,
+ /obj/item/stack/material/plasteel{amount = 10} = 40,
+ /obj/item/stack/material/silver{amount = 10} = 20,
+ /obj/item/stack/material/gold{amount = 10} = 20,
+ /obj/item/stack/material/phoron{amount = 10} = 20
+ )
+
+/obj/structure/salvageable/implant_container
+ name = "old container"
+ icon_state = "implant_container0"
+ salvageable_parts = list(
+ /obj/item/weapon/stock_parts/console_screen = 80,
+ /obj/item/stack/cable_coil{amount = 5} = 80,
+ /obj/item/trash/material/circuit = 60,
+ /obj/item/trash/material/metal = 60,
+ /obj/item/weapon/implant/death_alarm = 15,
+ /obj/item/weapon/implant/explosive = 10,
+ /obj/item/weapon/implant/freedom = 5,
+ /obj/item/weapon/implant/tracking = 10,
+ /obj/item/weapon/implant/chem = 10,
+ /obj/item/weapon/implantcase = 30,
+ /obj/item/weapon/implanter = 30,
+ /obj/item/stack/material/steel{amount = 10} = 30,
+ /obj/item/stack/material/glass{amount = 10} = 30,
+ /obj/item/stack/material/silver{amount = 10} = 30
+ )
+
+obj/structure/salvageable/implant_container/Initialize()
+ . = ..()
+ icon_state = "implant_container[rand(0,1)]"
+
+/obj/structure/salvageable/data
+ name = "broken data storage"
+ icon_state = "data0"
+ salvageable_parts = list(
+ /obj/item/weapon/stock_parts/console_screen = 80,
+ /obj/item/stack/cable_coil{amount = 5} = 90,
+ /obj/item/stack/material/glass{amount = 5} = 90,
+ /obj/item/trash/material/circuit = 60,
+ /obj/item/trash/material/metal = 60,
+ /obj/item/weapon/computer_hardware/network_card = 40,
+ /obj/item/weapon/computer_hardware/network_card = 40,
+ /obj/item/weapon/computer_hardware/processor_unit = 40,
+ /obj/item/weapon/computer_hardware/processor_unit = 40,
+ /obj/item/weapon/computer_hardware/hard_drive = 50,
+ /obj/item/weapon/computer_hardware/hard_drive = 50,
+ /obj/item/weapon/computer_hardware/hard_drive = 50,
+ /obj/item/weapon/computer_hardware/hard_drive = 50,
+ /obj/item/weapon/computer_hardware/hard_drive = 50,
+ /obj/item/weapon/computer_hardware/hard_drive = 50,
+ /obj/item/weapon/computer_hardware/hard_drive/advanced = 30,
+ /obj/item/weapon/computer_hardware/hard_drive/advanced = 30,
+ /obj/item/weapon/computer_hardware/network_card/advanced = 20
+ )
+
+obj/structure/salvageable/data/Initialize()
+ . = ..()
+ icon_state = "data[rand(0,1)]"
+
+/obj/structure/salvageable/server
+ name = "broken server"
+ icon_state = "server0"
+ salvageable_parts = list(
+ /obj/item/weapon/stock_parts/console_screen = 80,
+ /obj/item/stack/cable_coil{amount = 5} = 90,
+ /obj/item/stack/material/glass{amount = 5} = 90,
+ /obj/item/trash/material/circuit = 60,
+ /obj/item/trash/material/metal = 60,
+ /obj/item/weapon/computer_hardware/network_card = 40,
+ /obj/item/weapon/computer_hardware/network_card = 40,
+ /obj/item/weapon/computer_hardware/processor_unit = 40,
+ /obj/item/weapon/computer_hardware/processor_unit = 40,
+ /obj/item/weapon/stock_parts/subspace/amplifier = 40,
+ /obj/item/weapon/stock_parts/subspace/amplifier = 40,
+ /obj/item/weapon/stock_parts/subspace/analyzer = 40,
+ /obj/item/weapon/stock_parts/subspace/analyzer = 40,
+ /obj/item/weapon/stock_parts/subspace/ansible = 40,
+ /obj/item/weapon/stock_parts/subspace/ansible = 40,
+ /obj/item/weapon/stock_parts/subspace/transmitter = 40,
+ /obj/item/weapon/stock_parts/subspace/transmitter = 40,
+ /obj/item/weapon/stock_parts/subspace/crystal = 30,
+ /obj/item/weapon/stock_parts/subspace/crystal = 30,
+ /obj/item/weapon/computer_hardware/network_card/advanced = 20
+ )
+
+obj/structure/salvageable/server/Initialize()
+ . = ..()
+ icon_state = "server[rand(0,1)]"
+
+/obj/structure/salvageable/personal
+ name = "personal terminal"
+ icon_state = "personal0"
+ salvageable_parts = list(
+ /obj/item/weapon/stock_parts/console_screen = 90,
+ /obj/item/stack/cable_coil{amount = 5} = 90,
+ /obj/item/stack/material/glass{amount = 5} = 70,
+ /obj/item/trash/material/circuit = 60,
+ /obj/item/trash/material/metal = 60,
+ /obj/item/weapon/computer_hardware/network_card = 60,
+ /obj/item/weapon/computer_hardware/network_card/advanced = 40,
+ /obj/item/weapon/computer_hardware/network_card/wired = 40,
+ /obj/item/weapon/computer_hardware/card_slot = 40,
+ /obj/item/weapon/computer_hardware/processor_unit = 60,
+ /obj/item/weapon/computer_hardware/processor_unit/small = 50,
+ /obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
+ /obj/item/weapon/computer_hardware/processor_unit/photonic/small = 30,
+ /obj/item/weapon/computer_hardware/hard_drive = 60,
+ /obj/item/weapon/computer_hardware/hard_drive/advanced = 40
+ )
+
+obj/structure/salvageable/personal/Initialize()
+ . = ..()
+ icon_state = "personal[rand(0,12)]"
+ new /obj/structure/table/reinforced (loc)
+
+/obj/structure/salvageable/bliss
+ name = "strange terminal"
+ icon_state = "bliss0"
+ salvageable_parts = list(
+ /obj/item/weapon/stock_parts/console_screen = 90,
+ /obj/item/stack/cable_coil{amount = 5} = 90,
+ /obj/item/weapon/computer_hardware/processor_unit/photonic = 60,
+ /obj/item/weapon/computer_hardware/hard_drive/cluster = 50
+ )
+
+obj/structure/salvageable/bliss/Initialize()
+ . = ..()
+ icon_state = "bliss[rand(0,1)]"
+
+/obj/structure/salvageable/bliss/attackby(obj/item/I, mob/user)
+ if((. = ..()))
+ playsound(user, 'sound/machines/shutdown.ogg', 60, 1)
+
+//////////////////
+//// ONE STAR ////
+//////////////////
+
+/obj/structure/salvageable/machine_os
+ name = "broken machine"
+ icon_state = "os-machine"
+ salvageable_parts = list(
+ /obj/item/weapon/stock_parts/console_screen = 80,
+ /obj/item/stack/cable_coil{amount = 5} = 80,
+ /obj/item/weapon/stock_parts/capacitor = 40,
+ /obj/item/weapon/stock_parts/capacitor = 40,
+ /obj/item/weapon/stock_parts/scanning_module = 40,
+ /obj/item/weapon/stock_parts/scanning_module = 40,
+ /obj/item/weapon/stock_parts/manipulator = 40,
+ /obj/item/weapon/stock_parts/manipulator = 40,
+ /obj/item/weapon/stock_parts/micro_laser = 40,
+ /obj/item/weapon/stock_parts/micro_laser = 40,
+ /obj/item/weapon/stock_parts/matter_bin = 40,
+ /obj/item/weapon/stock_parts/matter_bin = 40
+ )
+
+/obj/structure/salvageable/computer_os
+ name = "broken computer"
+ icon_state = "os-computer"
+ salvageable_parts = list(
+ /obj/item/weapon/stock_parts/console_screen = 80,
+ /obj/item/stack/cable_coil{amount = 5} = 90,
+ /obj/item/stack/material/glass{amount = 5} = 90,
+ /obj/item/weapon/stock_parts/capacitor = 60,
+ /obj/item/weapon/stock_parts/capacitor = 60,
+ /obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
+ /obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
+ /obj/item/weapon/computer_hardware/card_slot = 40,
+ /obj/item/weapon/computer_hardware/card_slot = 40,
+ /obj/item/weapon/computer_hardware/network_card/advanced = 40
+ )
+
+/obj/structure/salvageable/implant_container_os
+ name = "old container"
+ icon_state = "os-container"
+ salvageable_parts = list(
+ /obj/item/weapon/stock_parts/console_screen = 80,
+ /obj/item/stack/cable_coil{amount = 5} = 80,
+ /obj/item/weapon/implant/death_alarm = 30,
+ /obj/item/weapon/implant/explosive = 20,
+ /obj/item/weapon/implant/freedom = 20,
+ /obj/item/weapon/implant/tracking = 30,
+ /obj/item/weapon/implant/chem = 30,
+ /obj/item/weapon/implantcase = 30,
+ /obj/item/weapon/implanter = 30
+ )
+
+/obj/structure/salvageable/data_os
+ name = "broken data storage"
+ icon_state = "os-data"
+ salvageable_parts = list(
+ /obj/item/weapon/stock_parts/console_screen = 90,
+ /obj/item/stack/cable_coil{amount = 5} = 90,
+ /obj/item/stack/material/glass{amount = 5} = 90,
+ /obj/item/weapon/computer_hardware/processor_unit/small = 60,
+ /obj/item/weapon/computer_hardware/processor_unit/photonic = 50,
+ /obj/item/weapon/computer_hardware/hard_drive/super = 50,
+ /obj/item/weapon/computer_hardware/hard_drive/super = 50,
+ /obj/item/weapon/computer_hardware/hard_drive/cluster = 50,
+ /obj/item/weapon/computer_hardware/network_card/wired = 40
+ )
+
+/obj/structure/salvageable/server_os
+ name = "broken server"
+ icon_state = "os-server"
+ salvageable_parts = list(
+ /obj/item/weapon/stock_parts/console_screen = 80,
+ /obj/item/stack/cable_coil{amount = 5} = 90,
+ /obj/item/stack/material/glass{amount = 5} = 90,
+ /obj/item/weapon/computer_hardware/network_card/wired = 40,
+ /obj/item/weapon/computer_hardware/network_card/wired = 40,
+ /obj/item/weapon/computer_hardware/processor_unit = 40,
+ /obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
+ /obj/item/weapon/stock_parts/subspace/amplifier = 40,
+ /obj/item/weapon/stock_parts/subspace/amplifier = 40,
+ /obj/item/weapon/stock_parts/subspace/analyzer = 40,
+ /obj/item/weapon/stock_parts/subspace/analyzer = 40,
+ /obj/item/weapon/stock_parts/subspace/ansible = 40,
+ /obj/item/weapon/stock_parts/subspace/ansible = 40,
+ /obj/item/weapon/stock_parts/subspace/transmitter = 40,
+ /obj/item/weapon/stock_parts/subspace/transmitter = 40,
+ /obj/item/weapon/stock_parts/subspace/crystal = 30,
+ /obj/item/weapon/stock_parts/subspace/crystal = 30,
+ /obj/item/weapon/computer_hardware/network_card/wired = 20
+ )
+
+/obj/structure/salvageable/console_os
+ name = "pristine console"
+ desc = "Despite being in pristine condition this console doesn't respond to anything, but looks like you can still salvage something from this."
+ icon_state = "os_console"
+ salvageable_parts = list(
+ /obj/item/stack/cable_coil{amount = 5} = 90,
+ /obj/item/weapon/stock_parts/console_screen = 80,
+ /obj/item/weapon/stock_parts/capacitor = 60,
+ /obj/item/weapon/stock_parts/capacitor = 60,
+ /obj/item/weapon/computer_hardware/processor_unit/small = 40,
+ /obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
+ /obj/item/weapon/computer_hardware/card_slot = 40,
+ /obj/item/weapon/computer_hardware/card_slot = 40,
+ /obj/item/weapon/computer_hardware/network_card/advanced = 40
+ )
+
+/obj/structure/salvageable/console_broken_os
+ name = "broken console"
+ icon_state = "os_console_broken"
+ salvageable_parts = list(
+ /obj/item/stack/cable_coil{amount = 5} = 90,
+ /obj/item/weapon/stock_parts/console_screen = 80,
+ /obj/item/weapon/stock_parts/capacitor = 60,
+ /obj/item/weapon/stock_parts/capacitor = 60,
+ /obj/item/weapon/computer_hardware/processor_unit = 40,
+ /obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
+ /obj/item/weapon/computer_hardware/card_slot = 40,
+ /obj/item/weapon/computer_hardware/card_slot = 40,
+ /obj/item/weapon/computer_hardware/network_card/advanced = 40
+ )
diff --git a/icons/obj/material_trash.dmi b/icons/obj/material_trash.dmi
new file mode 100644
index 0000000000..8d4d08ec8d
Binary files /dev/null and b/icons/obj/material_trash.dmi differ
diff --git a/icons/obj/salvageable.dmi b/icons/obj/salvageable.dmi
new file mode 100644
index 0000000000..ea2004324a
Binary files /dev/null and b/icons/obj/salvageable.dmi differ
diff --git a/maps/tether/submaps/aerostat/aerostat.dmm b/maps/tether/submaps/aerostat/aerostat.dmm
index f7c9403135..b4d3c0d046 100644
--- a/maps/tether/submaps/aerostat/aerostat.dmm
+++ b/maps/tether/submaps/aerostat/aerostat.dmm
@@ -1630,10 +1630,18 @@
/obj/random/contraband,
/turf/simulated/floor/plating/virgo2,
/area/tether_away/aerostat/inside)
+"fH" = (
+/obj/structure/salvageable/implant_container,
+/turf/simulated/floor/tiled/techfloor/virgo2,
+/area/tether_away/aerostat/inside)
"gD" = (
/obj/tether_away_spawner/aerostat_inside,
/turf/simulated/floor/plating/virgo2,
/area/tether_away/aerostat/inside)
+"gX" = (
+/obj/structure/salvageable/data,
+/turf/simulated/floor/tiled/techfloor/virgo2,
+/area/tether_away/aerostat/inside)
"hd" = (
/obj/random/contraband,
/turf/simulated/floor/tiled/techfloor/virgo2,
@@ -1658,6 +1666,10 @@
/obj/random/firstaid,
/turf/simulated/floor/tiled/techfloor/virgo2,
/area/tether_away/aerostat/inside)
+"yy" = (
+/obj/structure/salvageable/autolathe,
+/turf/simulated/floor/tiled/techfloor/virgo2,
+/area/tether_away/aerostat/inside)
"AS" = (
/obj/effect/floor_decal/industrial/warning/dust{
dir = 4
@@ -1716,6 +1728,14 @@
/obj/random/contraband,
/turf/simulated/floor/tiled/techfloor/virgo2,
/area/tether_away/aerostat/inside)
+"QE" = (
+/obj/structure/salvageable/machine,
+/turf/simulated/floor/tiled/techfloor/virgo2,
+/area/tether_away/aerostat/inside)
+"TR" = (
+/obj/structure/salvageable/computer,
+/turf/simulated/floor/tiled/techfloor/virgo2,
+/area/tether_away/aerostat/inside)
"UC" = (
/obj/structure/table/standard,
/obj/random/powercell,
@@ -9480,7 +9500,7 @@ ci
bv
at
bK
-bK
+QE
bK
au
bv
@@ -11483,7 +11503,7 @@ bv
cD
cB
bK
-bK
+yy
bv
bj
aw
@@ -11585,7 +11605,7 @@ aw
aw
bq
bv
-bK
+gX
bK
cz
cD
@@ -11727,7 +11747,7 @@ aw
aw
bq
bv
-bK
+fH
bK
cz
cD
@@ -11767,7 +11787,7 @@ bv
cD
cB
bK
-bK
+TR
bv
bj
aw
@@ -11909,7 +11929,7 @@ bv
cD
cB
bK
-bK
+TR
bv
bj
aw
@@ -13882,7 +13902,7 @@ ci
bv
Gs
bK
-bK
+QE
bK
Lw
bv
diff --git a/maps/tether/submaps/aerostat/submaps/DecoupledEngine.dmm b/maps/tether/submaps/aerostat/submaps/DecoupledEngine.dmm
index 853351c02e..322dbbf62e 100644
--- a/maps/tether/submaps/aerostat/submaps/DecoupledEngine.dmm
+++ b/maps/tether/submaps/aerostat/submaps/DecoupledEngine.dmm
@@ -516,6 +516,15 @@
/obj/tether_away_spawner/aerostat_surface,
/turf/simulated/mineral/floor/ignore_mapgen/virgo2,
/area/submap/virgo2/DecoupledEngine)
+"SB" = (
+/obj/machinery/atmospherics/pipe/simple/visible{
+ icon_state = "intact";
+ dir = 6
+ },
+/obj/effect/floor_decal/rust,
+/obj/structure/salvageable/server,
+/turf/simulated/floor,
+/area/submap/virgo2/DecoupledEngine)
(1,1,1) = {"
aa
@@ -1045,7 +1054,7 @@ ad
ad
ad
aq
-az
+SB
aM
aW
az
diff --git a/maps/tether/submaps/aerostat/submaps/Lab1.dmm b/maps/tether/submaps/aerostat/submaps/Lab1.dmm
index b0c984387e..0371b584a8 100644
--- a/maps/tether/submaps/aerostat/submaps/Lab1.dmm
+++ b/maps/tether/submaps/aerostat/submaps/Lab1.dmm
@@ -285,6 +285,10 @@
/obj/structure/ghost_pod/manual/lost_drone/dogborg,
/turf/simulated/floor/tiled/steel_dirty,
/area/submap/virgo2/Lab1)
+"Z" = (
+/obj/structure/salvageable/data,
+/turf/simulated/floor/tiled/steel_dirty,
+/area/submap/virgo2/Lab1)
(1,1,1) = {"
a
@@ -343,7 +347,7 @@ d
V
V
d
-h
+Z
F
K
F
@@ -631,7 +635,7 @@ V
d
C
H
-h
+Z
h
S
d
diff --git a/maps/tether/submaps/aerostat/submaps/Manor1.dmm b/maps/tether/submaps/aerostat/submaps/Manor1.dmm
index 6d3c998571..b981549289 100644
--- a/maps/tether/submaps/aerostat/submaps/Manor1.dmm
+++ b/maps/tether/submaps/aerostat/submaps/Manor1.dmm
@@ -280,6 +280,7 @@
/area/submap/virgo2/Manor1)
"bj" = (
/obj/effect/decal/cleanable/cobweb,
+/obj/structure/salvageable/personal,
/turf/simulated/floor/holofloor/wood,
/area/submap/virgo2/Manor1)
"bk" = (
@@ -725,6 +726,10 @@
/obj/tether_away_spawner/aerostat_surface,
/turf/simulated/floor/carpet/purcarpet,
/area/submap/virgo2/Manor1)
+"Yk" = (
+/obj/structure/salvageable/personal,
+/turf/simulated/floor/holofloor/wood,
+/area/submap/virgo2/Manor1)
(1,1,1) = {"
cN
@@ -2802,7 +2807,7 @@ ab
ab
ab
ab
-ag
+Yk
br
bx
bC
@@ -2812,7 +2817,7 @@ ab
ab
ab
ab
-ag
+Yk
bx
cm
cp
diff --git a/maps/tether/submaps/aerostat/submaps/Shack1.dmm b/maps/tether/submaps/aerostat/submaps/Shack1.dmm
index 0921bbcb9b..9849ce8405 100644
--- a/maps/tether/submaps/aerostat/submaps/Shack1.dmm
+++ b/maps/tether/submaps/aerostat/submaps/Shack1.dmm
@@ -45,6 +45,12 @@
icon_state = "wood_broken5"
},
/area/submap/virgo2/Shack1)
+"l" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/random/multiple/voidsuit,
+/obj/structure/salvageable/personal,
+/turf/simulated/floor/wood,
+/area/submap/virgo2/Shack1)
"m" = (
/obj/machinery/door/airlock/external,
/turf/simulated/floor/wood,
@@ -157,7 +163,7 @@ a
(6,1,1) = {"
a
b
-O
+l
h
i
i
diff --git a/maps/tether/submaps/aerostat/surface.dmm b/maps/tether/submaps/aerostat/surface.dmm
index 9c80bcc8a9..16b987a562 100644
--- a/maps/tether/submaps/aerostat/surface.dmm
+++ b/maps/tether/submaps/aerostat/surface.dmm
@@ -21,6 +21,10 @@
/obj/structure/metal_edge,
/turf/simulated/mineral/floor/ignore_mapgen/virgo2,
/area/tether_away/aerostat/surface/explored)
+"q" = (
+/obj/structure/salvageable/personal,
+/turf/simulated/mineral/floor/ignore_mapgen/virgo2,
+/area/tether_away/aerostat/surface/explored)
"A" = (
/obj/structure/railing{
icon_state = "railing0";
@@ -8640,7 +8644,7 @@ i
i
i
i
-i
+q
i
i
i
diff --git a/maps/tether/submaps/space/pois/derelict.dmm b/maps/tether/submaps/space/pois/derelict.dmm
index 1c06b2c694..800bef624f 100644
--- a/maps/tether/submaps/space/pois/derelict.dmm
+++ b/maps/tether/submaps/space/pois/derelict.dmm
@@ -1133,6 +1133,30 @@
/obj/structure/ghost_pod/manual/lost_drone/dogborg,
/turf/simulated/floor/tiled/dark,
/area/tether_away/debrisfield/derelict/ai_access_port)
+"dF" = (
+/obj/structure/salvageable/server,
+/turf/simulated/floor/greengrid,
+/area/tether_away/debrisfield/derelict/ai_chamber)
+"oS" = (
+/obj/structure/salvageable/server,
+/turf/simulated/floor/tiled/monotile,
+/area/tether_away/debrisfield/derelict/interior)
+"tR" = (
+/obj/structure/salvageable/computer,
+/turf/simulated/floor/tiled/dark,
+/area/tether_away/debrisfield/derelict/interior)
+"HB" = (
+/obj/structure/salvageable/implant_container,
+/turf/simulated/floor/tiled/white,
+/area/tether_away/debrisfield/derelict/interior)
+"QE" = (
+/obj/structure/salvageable/autolathe,
+/turf/simulated/floor/tiled/steel_grid,
+/area/tether_away/debrisfield/derelict/interior)
+"ZJ" = (
+/obj/structure/salvageable/personal,
+/turf/simulated/floor/tiled/monotile,
+/area/tether_away/debrisfield/derelict/interior)
(1,1,1) = {"
bR
@@ -2217,7 +2241,7 @@ av
bX
aF
av
-aF
+tR
aF
aF
av
@@ -2333,7 +2357,7 @@ av
aF
aF
av
-at
+ZJ
at
ao
aa
@@ -2400,7 +2424,7 @@ aa
aa
aa
ao
-at
+oS
az
au
av
@@ -2752,7 +2776,7 @@ cB
cB
cA
dk
-do
+dF
do
dt
dt
@@ -2826,7 +2850,7 @@ cB
cB
cA
dk
-do
+dF
do
du
dw
@@ -2900,7 +2924,7 @@ cB
cB
cA
dk
-do
+dF
do
du
dw
@@ -2974,7 +2998,7 @@ cB
cB
cA
dk
-do
+dF
do
dt
dt
@@ -3216,7 +3240,7 @@ aa
ao
au
at
-at
+oS
av
aF
aF
@@ -3536,7 +3560,7 @@ av
bk
bk
bk
-bk
+QE
bk
bu
av
@@ -3623,7 +3647,7 @@ av
cc
cj
cb
-cb
+HB
cb
ci
av
diff --git a/maps/tether/submaps/space/pois/ship_med_crashed.dmm b/maps/tether/submaps/space/pois/ship_med_crashed.dmm
index 5343ec1ac9..203f3b63e5 100644
--- a/maps/tether/submaps/space/pois/ship_med_crashed.dmm
+++ b/maps/tether/submaps/space/pois/ship_med_crashed.dmm
@@ -25,11 +25,11 @@
/area/tether_away/debrisfield/explored)
"h" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/frame,
+/obj/structure/salvageable/personal,
/turf/simulated/shuttle/plating/airless,
/area/tether_away/debrisfield/explored)
"i" = (
-/obj/structure/frame,
+/obj/structure/salvageable/implant_container,
/turf/simulated/shuttle/floor/airless,
/area/tether_away/debrisfield/explored)
"j" = (
@@ -117,9 +117,7 @@
/turf/simulated/shuttle/floor/airless,
/area/tether_away/debrisfield/explored)
"z" = (
-/obj/structure/frame/computer{
- dir = 1
- },
+/obj/structure/salvageable/data,
/turf/simulated/shuttle/floor/airless,
/area/tether_away/debrisfield/explored)
"A" = (
diff --git a/maps/tether/submaps/space/pois/ship_sci_overrun.dmm b/maps/tether/submaps/space/pois/ship_sci_overrun.dmm
index a486f58303..9d0965fe15 100644
--- a/maps/tether/submaps/space/pois/ship_sci_overrun.dmm
+++ b/maps/tether/submaps/space/pois/ship_sci_overrun.dmm
@@ -388,6 +388,18 @@
/mob/living/simple_mob/slime/feral/dark_blue,
/turf/simulated/floor/airless,
/area/tether_away/debrisfield/explored)
+"rR" = (
+/obj/structure/salvageable/autolathe,
+/turf/simulated/floor/airless,
+/area/tether_away/debrisfield/explored)
+"Hf" = (
+/obj/structure/salvageable/machine,
+/turf/simulated/floor/tiled/white/airless,
+/area/tether_away/debrisfield/explored)
+"Ow" = (
+/obj/structure/salvageable/implant_container,
+/turf/simulated/floor/tiled/white/airless,
+/area/tether_away/debrisfield/explored)
(1,1,1) = {"
aa
@@ -531,7 +543,7 @@ aa
ab
as
as
-ac
+rR
ac
bi
bj
@@ -837,7 +849,7 @@ ad
ad
ad
ab
-ad
+Hf
ad
ad
ab
@@ -864,7 +876,7 @@ ad
ad
ad
ab
-ad
+Hf
ad
aX
ab
@@ -1004,7 +1016,7 @@ ad
ad
ad
ad
-ad
+Ow
ab
aa
aa
diff --git a/maps/tether/submaps/space/pois/ship_sup_exploded.dmm b/maps/tether/submaps/space/pois/ship_sup_exploded.dmm
index 5b29b4a663..21b9216c43 100644
--- a/maps/tether/submaps/space/pois/ship_sup_exploded.dmm
+++ b/maps/tether/submaps/space/pois/ship_sup_exploded.dmm
@@ -261,6 +261,18 @@
"bd" = (
/turf/simulated/shuttle/wall/hard_corner,
/area/tether_away/debrisfield/explored)
+"jq" = (
+/obj/structure/salvageable/data,
+/turf/simulated/shuttle/floor/airless,
+/area/tether_away/debrisfield/explored)
+"KY" = (
+/obj/structure/salvageable/server,
+/turf/simulated/shuttle/floor/white/airless,
+/area/tether_away/debrisfield/explored)
+"Mm" = (
+/obj/structure/salvageable/bliss,
+/turf/simulated/shuttle/floor/airless,
+/area/tether_away/debrisfield/explored)
(1,1,1) = {"
aa
@@ -370,11 +382,11 @@ ah
ah
ai
aj
-aj
+KY
ab
aQ
aQ
-aA
+jq
ab
ab
aa
@@ -405,7 +417,7 @@ ab
aj
aj
aj
-aA
+jq
ab
as
ab
@@ -585,7 +597,7 @@ ab
aj
aj
aj
-aA
+jq
ab
as
ab
@@ -614,7 +626,7 @@ aj
ab
aU
aU
-aA
+jq
ab
ab
aa
@@ -627,7 +639,7 @@ aa
aa
ac
ab
-aA
+Mm
aA
ag
ag
diff --git a/maps/tether/submaps/underdark_pois/abandonded_outpost.dmm b/maps/tether/submaps/underdark_pois/abandonded_outpost.dmm
index 81eb5b5d65..bdff135e98 100644
--- a/maps/tether/submaps/underdark_pois/abandonded_outpost.dmm
+++ b/maps/tether/submaps/underdark_pois/abandonded_outpost.dmm
@@ -371,6 +371,14 @@
/obj/item/device/geiger,
/turf/simulated/mineral/floor/ignore_cavegen/virgo3b,
/area/mine/explored/underdark)
+"DS" = (
+/obj/structure/salvageable/autolathe,
+/turf/simulated/floor/tiled/steel_dirty/virgo3b,
+/area/mine/explored/underdark)
+"Vo" = (
+/obj/structure/salvageable/computer,
+/turf/simulated/floor/tiled/steel_dirty/virgo3b,
+/area/mine/explored/underdark)
(1,1,1) = {"
aa
@@ -563,7 +571,7 @@ ad
am
ad
ab
-ae
+DS
ae
ae
av
@@ -830,7 +838,7 @@ aC
ab
as
ae
-ae
+Vo
ae
as
aE
@@ -856,7 +864,7 @@ aH
ab
ae
ae
-ae
+Vo
ae
ae
af
diff --git a/maps/tether/submaps/underdark_pois/broken_engine.dmm b/maps/tether/submaps/underdark_pois/broken_engine.dmm
index 7d966db623..17280d9195 100644
--- a/maps/tether/submaps/underdark_pois/broken_engine.dmm
+++ b/maps/tether/submaps/underdark_pois/broken_engine.dmm
@@ -34,6 +34,10 @@
/obj/effect/map_effect/interval/sound_emitter/geiger/ext,
/turf/simulated/floor/tiled/steel_dirty/virgo3b,
/area/mine/explored/underdark)
+"I" = (
+/obj/structure/salvageable/server,
+/turf/simulated/floor/tiled/steel_dirty/virgo3b,
+/area/mine/explored/underdark)
(1,1,1) = {"
a
@@ -61,7 +65,7 @@ a
a
e
d
-d
+I
d
d
d
@@ -105,7 +109,7 @@ a
a
e
d
-d
+I
d
d
d
diff --git a/maps/tether/submaps/underdark_pois/testsite.dmm b/maps/tether/submaps/underdark_pois/testsite.dmm
index 12dba62540..0598b9c133 100644
--- a/maps/tether/submaps/underdark_pois/testsite.dmm
+++ b/maps/tether/submaps/underdark_pois/testsite.dmm
@@ -60,6 +60,10 @@
/obj/effect/decal/remains,
/turf/simulated/mineral/floor/ignore_cavegen/virgo3b,
/area/mine/explored/underdark)
+"B" = (
+/obj/structure/salvageable/data,
+/turf/simulated/mineral/floor/ignore_cavegen/virgo3b,
+/area/mine/explored/underdark)
(1,1,1) = {"
a
@@ -148,7 +152,7 @@ b
(8,1,1) = {"
b
d
-b
+B
b
b
b
diff --git a/sound/machines/shutdown.ogg b/sound/machines/shutdown.ogg
new file mode 100644
index 0000000000..c0e24827e4
Binary files /dev/null and b/sound/machines/shutdown.ogg differ
diff --git a/vorestation.dme b/vorestation.dme
index c5ecc958d8..3e3fe1401e 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -1033,6 +1033,7 @@
#include "code\game\objects\items\tailoring.dm"
#include "code\game\objects\items\toys.dm"
#include "code\game\objects\items\trash.dm"
+#include "code\game\objects\items\trash_material.dm"
#include "code\game\objects\items\trash_vr.dm"
#include "code\game\objects\items\devices\advnifrepair.dm"
#include "code\game\objects\items\devices\ai_detector.dm"
@@ -1316,6 +1317,7 @@
#include "code\game\objects\structures\plasticflaps.dm"
#include "code\game\objects\structures\railing.dm"
#include "code\game\objects\structures\safe.dm"
+#include "code\game\objects\structures\salvageable.dm"
#include "code\game\objects\structures\signs.dm"
#include "code\game\objects\structures\simple_doors.dm"
#include "code\game\objects\structures\snowman.dm"