diff --git a/code/game/gamemodes/clock_cult/clock_structures.dm b/code/game/gamemodes/clock_cult/clock_structures.dm
index 937dbccf4df..790c7063d5a 100644
--- a/code/game/gamemodes/clock_cult/clock_structures.dm
+++ b/code/game/gamemodes/clock_cult/clock_structures.dm
@@ -617,6 +617,9 @@
icon_state = "clockwork_floor"
layer = TURF_LAYER
+/obj/effect/clockwork/overlay/floor/bloodcult //this is used by BLOOD CULT, it shouldn't use such a path...
+ icon_state = "cult"
+
/obj/effect/clockwork/general_marker
name = "general marker"
desc = "Some big guy. For you."
diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm
index e22fb4fa86e..f1498e119aa 100644
--- a/code/game/turfs/closed.dm
+++ b/code/game/turfs/closed.dm
@@ -89,3 +89,11 @@
desc = "A wall layered with impenetrable sheets of paper."
icon = 'icons/turf/walls.dmi'
icon_state = "paperwall"
+
+/turf/closed/indestructible/necropolis
+ name = "necropolis wall"
+ desc = "A seemingly impenetrable wall."
+ icon = 'icons/turf/walls.dmi'
+ icon_state = "necro"
+ explosion_block = 50
+ baseturf = /turf/closed/indestructible/necropolis
diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm
index 10851dcd9dd..0a0f55b71f8 100644
--- a/code/game/turfs/open.dm
+++ b/code/game/turfs/open.dm
@@ -18,6 +18,19 @@
if(istype(AM))
playsound(src,sound,50,1)
+/turf/open/indestructible/necropolis
+ name = "necropolis floor"
+ desc = "It's regarding you suspiciously."
+ icon = 'icons/turf/floors.dmi'
+ icon_state = "necro1"
+ baseturf = /turf/open/indestructible/necropolis
+
+/turf/open/indestructible/necropolis/New()
+ ..()
+ if(prob(12))
+ icon_state = "necro[rand(2,3)]"
+
+
/turf/open/Initalize_Atmos(times_fired)
excited = 0
update_visuals()
diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm
new file mode 100644
index 00000000000..d633a040611
--- /dev/null
+++ b/code/game/turfs/simulated/chasm.dm
@@ -0,0 +1,117 @@
+
+//////////////CHASM//////////////////
+
+/turf/open/chasm
+ name = "chasm"
+ desc = "Watch your step."
+ baseturf = /turf/open/chasm
+ smooth = SMOOTH_TRUE | SMOOTH_BORDER
+ icon = 'icons/turf/floors/Chasms.dmi'
+ icon_state = "smooth"
+ var/drop_x = 1
+ var/drop_y = 1
+ var/drop_z = 1
+
+/turf/open/chasm/Entered(atom/movable/AM)
+ START_PROCESSING(SSobj, src)
+ drop_stuff(AM)
+
+/turf/open/chasm/process()
+ if(!drop_stuff())
+ STOP_PROCESSING(SSobj, src)
+
+/turf/open/chasm/proc/drop_stuff(AM)
+ . = 0
+ var/thing_to_check = src
+ if(AM)
+ thing_to_check = list(AM)
+ for(var/thing in thing_to_check)
+ if(droppable(thing))
+ . = 1
+ addtimer(src, "drop", 0, FALSE, thing)
+
+/turf/open/chasm/proc/droppable(atom/movable/AM)
+ if(!isliving(AM) && !isobj(AM))
+ return 0
+ if(istype(AM, /obj/singularity) || istype(AM, /obj/item/projectile) || AM.throwing)
+ return 0
+ if(istype(AM, /obj/effect/portal))
+ //Portals aren't affected by gravity. Probably.
+ return 0
+ //Flies right over the chasm
+ if(isanimal(AM))
+ var/mob/living/simple_animal/SA = AM
+ if(SA.flying)
+ return 0
+ if(ishuman(AM))
+ var/mob/living/carbon/human/H = AM
+ if(istype(H.belt, /obj/item/device/wormhole_jaunter))
+ var/obj/item/device/wormhole_jaunter/J = H.belt
+ //To freak out any bystanders
+ visible_message("[H] falls into [src]!")
+ J.chasm_react(H)
+ return 0
+ if(H.dna && H.dna.species && (FLYING in H.dna.species.specflags))
+ return 0
+ return 1
+
+/turf/open/chasm/proc/drop(atom/movable/AM)
+ //Make sure the item is still there after our sleep
+ if(!AM || qdeleted(AM))
+ return
+
+ var/turf/T = locate(drop_x, drop_y, drop_z)
+ if(T)
+ AM.visible_message("[AM] falls into [src]!", "GAH! Ah... where are you?")
+ T.visible_message("[AM] falls from above!")
+ AM.forceMove(T)
+ if(isliving(AM))
+ var/mob/living/L = AM
+ L.Weaken(5)
+ L.adjustBruteLoss(30)
+
+
+/turf/open/chasm/straight_down/New()
+ ..()
+ drop_x = x
+ drop_y = y
+ if(z+1 <= world.maxz)
+ drop_z = z+1
+
+
+/turf/open/chasm/straight_down/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ planetary_atmos = TRUE
+ baseturf = /turf/open/chasm/straight_down/lava_land_surface
+
+/turf/open/chasm/straight_down/lava_land_surface/drop(atom/movable/AM)
+ //Make sure the item is still there after our sleep
+ if(!AM || qdeleted(AM))
+ return
+ AM.visible_message("[AM] falls into [src]!", "You stumble and stare into an abyss before you. It stares back, and you fall \
+ into the enveloping dark.")
+ if(isliving(AM))
+ var/mob/living/L = AM
+ L.notransform = TRUE
+ L.Stun(10)
+ L.resting = TRUE
+ animate(AM, transform = matrix() - matrix(), alpha = 0, color = rgb(0, 0, 0), time = 10)
+ for(var/i in 1 to 5)
+ //Make sure the item is still there after our sleep
+ if(!AM || qdeleted(AM))
+ return
+ AM.pixel_y--
+ sleep(2)
+
+ //Make sure the item is still there after our sleep
+ if(!AM || qdeleted(AM))
+ return
+
+ if(iscyborg(AM))
+ var/mob/living/silicon/robot/S = AM
+ qdel(S.mmi)
+
+ qdel(AM)
+
+/turf/open/chasm/straight_down/lava_land_surface/normal_air
+ initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
diff --git a/code/game/turfs/simulated/floor/mineral_floor.dm b/code/game/turfs/simulated/floor/mineral_floor.dm
index 70c49521b35..98b11b30cb1 100644
--- a/code/game/turfs/simulated/floor/mineral_floor.dm
+++ b/code/game/turfs/simulated/floor/mineral_floor.dm
@@ -218,14 +218,3 @@
/turf/open/floor/mineral/abductor/make_plating()
return ChangeTurf(/turf/open/floor/plating/abductor2)
-
-
-/turf/open/floor/plating/abductor2
- name = "alien plating"
- icon_state = "alienplating"
-
-/turf/open/floor/plating/abductor2/break_tile()
- return //unbreakable
-
-/turf/open/floor/plating/abductor2/burn_tile()
- return //unburnable
\ No newline at end of file
diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm
index a1d8ea6dfdf..768c05efd59 100644
--- a/code/game/turfs/simulated/floor/misc_floor.dm
+++ b/code/game/turfs/simulated/floor/misc_floor.dm
@@ -26,82 +26,23 @@
icon_state = "gcircuit"
floor_tile = /obj/item/stack/tile/plasteel
-/turf/open/floor/plating/beach
- name = "beach"
- icon = 'icons/misc/beach.dmi'
- flags = NONE
-/turf/open/floor/plating/beach/ex_act(severity, target)
- contents_explosion(severity, target)
+/turf/open/floor/pod
+ name = "pod floor"
+ icon_state = "podfloor"
+ icon_regular_floor = "podfloor"
+ floor_tile = /obj/item/stack/tile/pod
-/turf/open/floor/plating/beach/sand
- name = "sand"
- desc = "Surf's up."
- icon_state = "sand"
- baseturf = /turf/open/floor/plating/beach/sand
+/turf/open/floor/pod/light
+ icon_state = "podfloor_light"
+ icon_regular_floor = "podfloor_light"
+ floor_tile = /obj/item/stack/tile/pod/light
-/turf/open/floor/plating/beach/coastline_t
- name = "coastline"
- desc = "Tide's high tonight. Charge your batons."
- icon_state = "sandwater_t"
- baseturf = /turf/open/floor/plating/beach/coastline_t
+/turf/open/floor/pod/dark
+ icon_state = "podfloor_dark"
+ icon_regular_floor = "podfloor_dark"
+ floor_tile = /obj/item/stack/tile/pod/dark
-/turf/open/floor/plating/beach/coastline_b
- name = "coastline"
- icon_state = "sandwater_b"
- baseturf = /turf/open/floor/plating/beach/coastline_b
-
-/turf/open/floor/plating/beach/water
- name = "water"
- desc = "You get the feeling that nobody's bothered to actually make this water functional..."
- icon_state = "water"
- baseturf = /turf/open/floor/plating/beach/water
-
-/turf/open/floor/plating/ironsand
- name = "iron sand"
- desc = "Like sand, but more metal."
-
-/turf/open/floor/plating/ironsand/New()
- ..()
- icon_state = "ironsand[rand(1,15)]"
-
-/turf/open/floor/plating/ironsand/burn_tile()
- return
-
-/turf/open/floor/plating/ice
- name = "ice sheet"
- desc = "A sheet of solid ice. Looks slippery."
- icon = 'icons/turf/snow.dmi'
- icon_state = "ice"
- temperature = 180
- baseturf = /turf/open/floor/plating/ice
- slowdown = 1
- wet = TURF_WET_PERMAFROST
-
-/turf/open/floor/plating/ice/colder
- temperature = 140
-
-/turf/open/floor/plating/ice/temperate
- temperature = 255.37
-
-/turf/open/floor/plating/ice/break_tile()
- return
-
-/turf/open/floor/plating/ice/burn_tile()
- return
-
-/turf/open/floor/plating/snowed
- name = "snowed-over plating"
- desc = "A section of plating covered in a light layer of snow."
- icon = 'icons/turf/snow.dmi'
- icon_state = "snowplating"
- temperature = 180
-
-/turf/open/floor/plating/snowed/colder
- temperature = 140
-
-/turf/open/floor/plating/snowed/temperatre
- temperature = 255.37
/turf/open/floor/noslip
name = "high-traction floor"
@@ -203,3 +144,18 @@
var/previouscolor = color
color = "#960000"
animate(src, color = previouscolor, time = 8)
+
+
+/turf/open/floor/bluespace
+ slowdown = -1
+ icon_state = "bluespace"
+ desc = "Through a series of micro-teleports these tiles let people move at incredible speeds"
+ floor_tile = /obj/item/stack/tile/bluespace
+
+
+/turf/open/floor/sepia
+ slowdown = 2
+ icon_state = "sepia"
+ desc = "Time seems to flow very slowly around these tiles"
+ floor_tile = /obj/item/stack/tile/sepia
+
diff --git a/code/game/turfs/simulated/floor/plasteel_floor.dm b/code/game/turfs/simulated/floor/plasteel_floor.dm
index 06ba6397f7b..793661bc795 100644
--- a/code/game/turfs/simulated/floor/plasteel_floor.dm
+++ b/code/game/turfs/simulated/floor/plasteel_floor.dm
@@ -11,6 +11,9 @@
icon_state = icon_regular_floor
+/turf/open/floor/plasteel/airless
+ initial_gas_mix = "TEMP=2.7"
+
/turf/open/floor/plasteel/black
icon_state = "dark"
@@ -302,6 +305,18 @@
/turf/open/floor/plasteel/shuttle/purple
icon_state = "shuttlefloor5"
+/turf/open/floor/plasteel/airless/shuttle
+ icon_state = "shuttlefloor"
+/turf/open/floor/plasteel/airless/shuttle/red
+ name = "Brig floor"
+ icon_state = "shuttlefloor4"
+/turf/open/floor/plasteel/airless/shuttle/yellow
+ icon_state = "shuttlefloor2"
+/turf/open/floor/plasteel/airless/shuttle/white
+ icon_state = "shuttlefloor3"
+/turf/open/floor/plasteel/airless/shuttle/purple
+ icon_state = "shuttlefloor5"
+
/turf/open/floor/plasteel/asteroid
icon_state = "asteroidfloor"
@@ -441,7 +456,9 @@
/turf/open/floor/plasteel/sandeffect
icon_state = "sandeffect"
+
/turf/open/floor/plasteel/sandeffect/warning
icon_state = "warningsandeffect"
+
/turf/open/floor/plasteel/sandeffect/warning/corner
- icon_state = "warningsandeffectcorners"
\ No newline at end of file
+ icon_state = "warningsandeffectcorners"
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index a5d13a2f3d5..4d97a997bbf 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -67,264 +67,3 @@
icon_state = icon_plating
burnt = 0
broken = 0
-
-/turf/open/floor/plating/airless
- icon_state = "plating"
- initial_gas_mix = "TEMP=2.7"
-
-/turf/open/floor/engine
- name = "reinforced floor"
- icon_state = "engine"
- thermal_conductivity = 0.025
- heat_capacity = INFINITY
- floor_tile = /obj/item/stack/rods
-
-/turf/open/floor/engine/airless
- initial_gas_mix = "TEMP=2.7"
-
-/turf/open/floor/engine/break_tile()
- return //unbreakable
-
-/turf/open/floor/engine/burn_tile()
- return //unburnable
-
-/turf/open/floor/engine/make_plating(force = 0)
- if(force)
- ..()
- return //unplateable
-
-/turf/open/floor/engine/attackby(obj/item/weapon/C, mob/user, params)
- if(!C || !user)
- return
- if(istype(C, /obj/item/weapon/wrench))
- user << "You begin removing rods..."
- playsound(src, 'sound/items/Ratchet.ogg', 80, 1)
- if(do_after(user, 30/C.toolspeed, target = src))
- if(!istype(src, /turf/open/floor/engine))
- return
- new /obj/item/stack/rods(src, 2)
- ChangeTurf(/turf/open/floor/plating)
- return
-
-
-/turf/open/floor/engine/ex_act(severity,target)
- switch(severity)
- if(1)
- if(prob(80))
- ReplaceWithLattice()
- else if(prob(50))
- qdel(src)
- else
- make_plating(1)
- if(2)
- if(prob(50))
- make_plating(1)
-
-//air filled floors; used in atmos pressure chambers
-
-/turf/open/floor/engine/n2o
- name = "n2o floor"
- initial_gas_mix = "n2o=6000;TEMP=293.15"
-
-/turf/open/floor/engine/co2
- name = "co2 floor"
- initial_gas_mix = "co2=50000;TEMP=293.15"
-
-/turf/open/floor/engine/plasma
- name = "plasma floor"
- initial_gas_mix = "plasma=70000;TEMP=293.15"
-
-/turf/open/floor/engine/o2
- name = "o2 floor"
- initial_gas_mix = "o2=100000;TEMP=293.15"
-
-/turf/open/floor/engine/n2
- name = "n2 floor"
- initial_gas_mix = "n2=100000;TEMP=293.15"
-
-/turf/open/floor/engine/air
- name = "air floor"
- initial_gas_mix = "o2=2644;n2=10580;TEMP=293.15"
-
-
-
-/turf/open/floor/engine/cult
- name = "engraved floor"
- icon_state = "plating"
- var/obj/effect/clockwork/overlay/floor/bloodcult/realappearence
-
-/turf/open/floor/engine/cult/New()
- ..()
- PoolOrNew(/obj/effect/overlay/temp/cult/turf/floor, src)
- realappearence = PoolOrNew(/obj/effect/clockwork/overlay/floor/bloodcult, src)
- realappearence.linked = src
-
-/obj/effect/clockwork/overlay/floor/bloodcult
- icon_state = "cult"
-
-/turf/open/floor/engine/cult/Destroy()
- be_removed()
- return ..()
-
-/turf/open/floor/engine/cult/ChangeTurf(path, defer_change = FALSE)
- if(path != type)
- be_removed()
- return ..()
-
-/turf/open/floor/engine/cult/proc/be_removed()
- qdel(realappearence)
- realappearence = null
-
-/turf/open/floor/engine/cult/narsie_act()
- return
-
-/turf/open/floor/engine/cult/ratvar_act()
- ..()
- if(istype(src, /turf/open/floor/engine/cult)) //if we haven't changed type
- var/previouscolor = color
- color = "#FAE48C"
- animate(src, color = previouscolor, time = 8)
-
-/turf/open/floor/engine/singularity_pull(S, current_size)
- if(current_size >= STAGE_FIVE)
- if(floor_tile)
- if(prob(30))
- PoolOrNew(floor_tile, src)
- make_plating()
- else if(prob(30))
- ReplaceWithLattice()
-
-/turf/open/floor/engine/cult/airless
- initial_gas_mix = "TEMP=2.7"
-
-/turf/open/floor/engine/vacuum
- name = "vacuum floor"
- icon_state = "engine"
- initial_gas_mix = "TEMP=2.7"
-
-/turf/open/floor/plasteel/airless
- initial_gas_mix = "TEMP=2.7"
-
-// ONE DAY WE WILL HAVE SUBTYPES
-/turf/open/floor/plasteel/airless/shuttle
- icon_state = "shuttlefloor"
-/turf/open/floor/plasteel/airless/shuttle/red
- name = "Brig floor"
- icon_state = "shuttlefloor4"
-/turf/open/floor/plasteel/airless/shuttle/yellow
- icon_state = "shuttlefloor2"
-/turf/open/floor/plasteel/airless/shuttle/white
- icon_state = "shuttlefloor3"
-/turf/open/floor/plasteel/airless/shuttle/purple
- icon_state = "shuttlefloor5"
-
-/turf/open/floor/plating/abductor
- name = "alien floor"
- icon_state = "alienpod1"
-
-/turf/open/floor/plating/abductor/New()
- ..()
- icon_state = "alienpod[rand(1,9)]"
-
-///LAVA
-
-/turf/open/floor/plating/lava
- name = "lava"
- icon_state = "lava"
- baseturf = /turf/open/floor/plating/lava //lava all the way down
- slowdown = 2
- luminosity = 1
-
-/turf/open/floor/plating/lava/ex_act()
- return
-
-/turf/open/floor/plating/lava/airless
- initial_gas_mix = "TEMP=2.7"
-
-/turf/open/floor/plating/lava/Entered(atom/movable/AM)
- if(burn_stuff(AM))
- START_PROCESSING(SSobj, src)
-
-/turf/open/floor/plating/lava/hitby(atom/movable/AM)
- if(burn_stuff(AM))
- START_PROCESSING(SSobj, src)
-
-/turf/open/floor/plating/lava/process()
- if(!burn_stuff())
- STOP_PROCESSING(SSobj, src)
-
-/turf/open/floor/plating/lava/make_plating()
- return
-
-/turf/open/floor/plating/lava/GetHeatCapacity()
- . = 700000
-
-/turf/open/floor/plating/lava/GetTemperature()
- . = 5000
-
-/turf/open/floor/plating/lava/TakeTemperature(temp)
-
-/turf/open/floor/plating/lava/proc/burn_stuff(AM)
- . = 0
- var/thing_to_check = src
- if (AM)
- thing_to_check = list(AM)
- for(var/thing in thing_to_check)
- if(isobj(thing))
- var/obj/O = thing
- if((O.resistance_flags & (LAVA_PROOF|ON_FIRE|INDESTRUCTIBLE)) || O.throwing)
- continue
- . = 1
- if(!(O.resistance_flags & FLAMMABLE))
- O.resistance_flags |= FLAMMABLE //Even fireproof things burn up in lava
- O.resistance_flags = ~FIRE_PROOF
- if(O.armor["fire"] > 50) //obj with 100% fire armor still get slowly burned away.
- O.armor["fire"] = 50
- O.fire_act(10000, 1000)
-
-
- else if (isliving(thing))
- . = 1
- var/mob/living/L = thing
- if("lava" in L.weather_immunities)
- continue
- if(L.buckled)
- if(isobj(L.buckled))
- var/obj/O = L.buckled
- if(O.resistance_flags & LAVA_PROOF)
- continue
- if(isliving(L.buckled)) //Goliath riding
- var/mob/living/live = L.buckled
- if("lava" in live.weather_immunities)
- continue
-
- L.adjustFireLoss(20)
- if(L) //mobs turning into object corpses could get deleted here.
- L.adjust_fire_stacks(20)
- L.IgniteMob()
-
-
-/turf/open/floor/plating/lava/attackby(obj/item/C, mob/user, params) //Lava isn't a good foundation to build on
- return
-
-/turf/open/floor/plating/lava/break_tile()
- return
-
-/turf/open/floor/plating/lava/burn_tile()
- return
-
-/turf/open/floor/plating/lava/smooth
- name = "lava"
- baseturf = /turf/open/floor/plating/lava/smooth
- icon = 'icons/turf/floors/lava.dmi'
- icon_state = "unsmooth"
- smooth = SMOOTH_MORE | SMOOTH_BORDER
- canSmoothWith = list(/turf/open/floor/plating/lava/smooth)
-
-/turf/open/floor/plating/lava/smooth/airless
- initial_gas_mix = "TEMP=2.7"
-
-/turf/open/floor/plating/astplate
- icon_state = "asteroidplating"
-/turf/open/floor/plating/airless/astplate
- icon_state = "asteroidplating"
diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm
new file mode 100644
index 00000000000..23ada23098e
--- /dev/null
+++ b/code/game/turfs/simulated/floor/plating/asteroid.dm
@@ -0,0 +1,305 @@
+
+
+
+/**********************Asteroid**************************/
+
+/turf/open/floor/plating/asteroid //floor piece
+ name = "asteroid sand"
+ baseturf = /turf/open/floor/plating/asteroid
+ icon = 'icons/turf/floors.dmi'
+ icon_state = "asteroid"
+ icon_plating = "asteroid"
+ var/environment_type = "asteroid"
+ var/turf_type = /turf/open/floor/plating/asteroid //Because caves do whacky shit to revert to normal
+ var/dug = 0 //0 = has not yet been dug, 1 = has already been dug
+ var/sand_type = /obj/item/weapon/ore/glass
+ var/floor_variance = 20 //probability floor has a different icon state
+
+/turf/open/floor/plating/asteroid/New()
+ var/proper_name = name
+ ..()
+ name = proper_name
+ if(prob(floor_variance))
+ icon_state = "[environment_type][rand(0,12)]"
+
+/turf/open/floor/plating/asteroid/burn_tile()
+ return
+
+/turf/open/floor/plating/asteroid/ex_act(severity, target)
+ contents_explosion(severity, target)
+ switch(severity)
+ if(3)
+ return
+ if(2)
+ if(prob(20))
+ src.gets_dug()
+ if(1)
+ src.gets_dug()
+
+/turf/open/floor/plating/asteroid/attackby(obj/item/weapon/W, mob/user, params)
+ //note that this proc does not call ..()
+ if(!W || !user)
+ return 0
+ var/digging_speed = 0
+ if (istype(W, /obj/item/weapon/shovel))
+ var/obj/item/weapon/shovel/S = W
+ digging_speed = S.digspeed
+ else if (istype(W, /obj/item/weapon/pickaxe))
+ var/obj/item/weapon/pickaxe/P = W
+ digging_speed = P.digspeed
+ if (digging_speed)
+ var/turf/T = user.loc
+ if(!isturf(T))
+ return
+
+ if (dug)
+ user << "This area has already been dug!"
+ return
+
+ user << "You start digging..."
+ playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
+
+ if(do_after(user, digging_speed, target = src))
+ if(istype(src, /turf/open/floor/plating/asteroid))
+ user << "You dig a hole."
+ gets_dug()
+ feedback_add_details("pick_used_mining","[W.type]")
+
+ if(istype(W,/obj/item/weapon/storage/bag/ore))
+ var/obj/item/weapon/storage/bag/ore/S = W
+ if(S.collection_mode == 1)
+ for(var/obj/item/weapon/ore/O in src.contents)
+ O.attackby(W,user)
+ return
+
+ if(istype(W, /obj/item/stack/tile))
+ var/obj/item/stack/tile/Z = W
+ if(!Z.use(1))
+ return
+ var/turf/open/floor/T = ChangeTurf(Z.turf_type)
+ if(istype(Z,/obj/item/stack/tile/light)) //TODO: get rid of this ugly check somehow
+ var/obj/item/stack/tile/light/L = Z
+ var/turf/open/floor/light/F = T
+ F.state = L.state
+ playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
+
+/turf/open/floor/plating/asteroid/proc/gets_dug()
+ if(dug)
+ return
+ for(var/i in 1 to 5)
+ new sand_type(src)
+ dug = 1
+ icon_plating = "[environment_type]_dug"
+ icon_state = "[environment_type]_dug"
+ slowdown = 0
+ return
+
+/turf/open/floor/plating/asteroid/singularity_act()
+ return
+
+/turf/open/floor/plating/asteroid/singularity_pull(S, current_size)
+ return
+
+
+/turf/open/floor/plating/asteroid/basalt
+ name = "volcanic floor"
+ baseturf = /turf/open/floor/plating/asteroid/basalt
+ icon = 'icons/turf/floors.dmi'
+ icon_state = "basalt"
+ icon_plating = "basalt"
+ environment_type = "basalt"
+ sand_type = /obj/item/weapon/ore/glass/basalt
+ floor_variance = 15
+
+/turf/open/floor/plating/asteroid/basalt/lava //lava underneath
+ baseturf = /turf/open/floor/plating/lava/smooth
+
+/turf/open/floor/plating/asteroid/basalt/airless
+ initial_gas_mix = "TEMP=2.7"
+
+/turf/open/floor/plating/asteroid/basalt/New()
+ ..()
+ switch(icon_state)
+ if("basalt1", "basalt2", "basalt3") //5 and 9 are too dark to glow and make the amount of glows in tunnels too high
+ SetLuminosity(1, 1) //this is basically a 3.75% chance that a basalt floor glows
+
+/turf/open/floor/plating/asteroid/basalt/gets_dug()
+ if(!dug)
+ SetLuminosity(0)
+ ..()
+
+
+///////Surface. The surface is warm, but survivable without a suit. Internals are required. The floors break to chasms, which drop you into the underground.
+
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ planetary_atmos = TRUE
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+
+
+
+
+/turf/open/floor/plating/asteroid/airless
+ initial_gas_mix = "TEMP=2.7"
+ turf_type = /turf/open/floor/plating/asteroid/airless
+
+
+
+
+/turf/open/floor/plating/asteroid/airless/cave
+ var/length = 100
+ var/mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goldgrub = 1, /mob/living/simple_animal/hostile/asteroid/goliath = 5, /mob/living/simple_animal/hostile/asteroid/basilisk = 4, /mob/living/simple_animal/hostile/asteroid/hivelord = 3)
+ var/flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash = 2)
+ var/sanity = 1
+ var/forward_cave_dir = 1
+ var/backward_cave_dir = 2
+ var/going_backwards = TRUE
+ var/has_data = FALSE
+ var/data_having_type = /turf/open/floor/plating/asteroid/airless/cave/has_data
+ turf_type = /turf/open/floor/plating/asteroid/airless
+
+/turf/open/floor/plating/asteroid/airless/cave/has_data //subtype for producing a tunnel with given data
+ has_data = TRUE
+
+/turf/open/floor/plating/asteroid/airless/cave/volcanic
+ mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goldgrub = 10, /mob/living/simple_animal/hostile/asteroid/goliath/beast = 50, /mob/living/simple_animal/hostile/asteroid/basilisk/watcher = 40, /mob/living/simple_animal/hostile/asteroid/hivelord/legion = 30,
+ /mob/living/simple_animal/hostile/spawner/lavaland = 2, /mob/living/simple_animal/hostile/spawner/lavaland/goliath = 3, /mob/living/simple_animal/hostile/spawner/lavaland/legion = 3, \
+ /mob/living/simple_animal/hostile/megafauna/dragon = 2, /mob/living/simple_animal/hostile/megafauna/bubblegum = 2, /mob/living/simple_animal/hostile/megafauna/colossus = 2)
+
+ data_having_type = /turf/open/floor/plating/asteroid/airless/cave/volcanic/has_data
+ turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+
+/turf/open/floor/plating/asteroid/airless/cave/volcanic/has_data //subtype for producing a tunnel with given data
+ has_data = TRUE
+
+/turf/open/floor/plating/asteroid/airless/cave/New(loc)
+ if(!has_data)
+ produce_tunnel_from_data()
+ ..()
+
+/turf/open/floor/plating/asteroid/airless/cave/proc/get_cave_data(set_length, exclude_dir = -1)
+ // If set_length (arg1) isn't defined, get a random length; otherwise assign our length to the length arg.
+ if(!set_length)
+ length = rand(25, 50)
+ else
+ length = set_length
+
+ // Get our directiosn
+ forward_cave_dir = pick(alldirs - exclude_dir)
+ // Get the opposite direction of our facing direction
+ backward_cave_dir = angle2dir(dir2angle(forward_cave_dir) + 180)
+
+/turf/open/floor/plating/asteroid/airless/cave/proc/produce_tunnel_from_data(tunnel_length, excluded_dir = -1)
+ get_cave_data(tunnel_length, excluded_dir)
+ // Make our tunnels
+ make_tunnel(forward_cave_dir)
+ if(going_backwards)
+ make_tunnel(backward_cave_dir)
+ // Kill ourselves by replacing ourselves with a normal floor.
+ SpawnFloor(src)
+
+/turf/open/floor/plating/asteroid/airless/cave/proc/make_tunnel(dir)
+ var/turf/closed/mineral/tunnel = src
+ var/next_angle = pick(45, -45)
+
+ for(var/i = 0; i < length; i++)
+ if(!sanity)
+ break
+
+ var/list/L = list(45)
+ if(IsOdd(dir2angle(dir))) // We're going at an angle and we want thick angled tunnels.
+ L += -45
+
+ // Expand the edges of our tunnel
+ for(var/edge_angle in L)
+ var/turf/closed/mineral/edge = get_step(tunnel, angle2dir(dir2angle(dir) + edge_angle))
+ if(istype(edge))
+ SpawnFloor(edge)
+
+ if(!sanity)
+ break
+
+ // Move our tunnel forward
+ tunnel = get_step(tunnel, dir)
+
+ if(istype(tunnel))
+ // Small chance to have forks in our tunnel; otherwise dig our tunnel.
+ if(i > 3 && prob(20))
+ var/turf/open/floor/plating/asteroid/airless/cave/C = tunnel.ChangeTurf(data_having_type)
+ C.going_backwards = FALSE
+ C.produce_tunnel_from_data(rand(10, 15), dir)
+ else
+ SpawnFloor(tunnel)
+ else //if(!istype(tunnel, src.parent)) // We hit space/normal/wall, stop our tunnel.
+ break
+
+ // Chance to change our direction left or right.
+ if(i > 2 && prob(33))
+ // We can't go a full loop though
+ next_angle = -next_angle
+ setDir(angle2dir(dir2angle(dir) )+ next_angle)
+
+
+/turf/open/floor/plating/asteroid/airless/cave/proc/SpawnFloor(turf/T)
+ for(var/S in RANGE_TURFS(1, src))
+ var/turf/NT = S
+ if(!NT || isspaceturf(NT) || istype(NT.loc, /area/mine/explored) || istype(NT.loc, /area/lavaland/surface/outdoors/explored))
+ sanity = 0
+ break
+ if(!sanity)
+ return
+ SpawnFlora(T)
+
+ SpawnMonster(T)
+ T.ChangeTurf(turf_type)
+
+/turf/open/floor/plating/asteroid/airless/cave/proc/SpawnMonster(turf/T)
+ if(prob(30))
+ if(istype(loc, /area/mine/explored) || istype(loc, /area/lavaland/surface/outdoors/explored))
+ return
+ for(var/mob/living/simple_animal/hostile/H in urange(12,T)) //prevents mob clumps
+ if(istype(H, /mob/living/simple_animal/hostile/asteroid))
+ return
+ if(ismegafauna(H) && get_dist(src, H) <= 7)
+ return
+ if(istype(H, /mob/living/simple_animal/hostile/spawner/lavaland) && get_dist(src, H) <= 3) //prevents tendrils spawning in collapse range
+ return
+ var/randumb = pickweight(mob_spawn_list)
+ new randumb(T)
+ return
+
+/turf/open/floor/plating/asteroid/airless/cave/proc/SpawnFlora(turf/T)
+ if(prob(12))
+ if(istype(loc, /area/mine/explored) || istype(loc, /area/lavaland/surface/outdoors/explored))
+ return
+ for(var/obj/structure/flora/ash/F in urange(3,T)) //Allows for growing patches, but not ridiculous stacks of flora
+ return
+ var/randumb = pickweight(flora_spawn_list)
+ new randumb(T)
+
+
+
+/turf/open/floor/plating/asteroid/snow
+ name = "snow"
+ desc = "Looks cold."
+ icon = 'icons/turf/snow.dmi'
+ baseturf = /turf/open/floor/plating/asteroid/snow
+ icon_state = "snow"
+ icon_plating = "snow"
+ initial_gas_mix = "TEMP=180"
+ slowdown = 2
+ environment_type = "snow"
+ sand_type = /obj/item/stack/sheet/mineral/snow
+
+/turf/open/floor/plating/asteroid/snow/airless
+ initial_gas_mix = "TEMP=2.7"
+
+/turf/open/floor/plating/asteroid/snow/temperatre
+ initial_gas_mix = "TEMP=255.37"
+
+/turf/open/floor/plating/asteroid/snow/atmosphere
+ initial_gas_mix = "o2=22;n2=82;TEMP=180"
+
+
+
diff --git a/code/game/turfs/simulated/floor/plating/lava.dm b/code/game/turfs/simulated/floor/plating/lava.dm
new file mode 100644
index 00000000000..fb88aa21225
--- /dev/null
+++ b/code/game/turfs/simulated/floor/plating/lava.dm
@@ -0,0 +1,103 @@
+///LAVA
+
+/turf/open/floor/plating/lava
+ name = "lava"
+ icon_state = "lava"
+ baseturf = /turf/open/floor/plating/lava //lava all the way down
+ slowdown = 2
+ luminosity = 1
+
+/turf/open/floor/plating/lava/ex_act()
+ return
+
+/turf/open/floor/plating/lava/airless
+ initial_gas_mix = "TEMP=2.7"
+
+/turf/open/floor/plating/lava/Entered(atom/movable/AM)
+ if(burn_stuff(AM))
+ START_PROCESSING(SSobj, src)
+
+/turf/open/floor/plating/lava/hitby(atom/movable/AM)
+ if(burn_stuff(AM))
+ START_PROCESSING(SSobj, src)
+
+/turf/open/floor/plating/lava/process()
+ if(!burn_stuff())
+ STOP_PROCESSING(SSobj, src)
+
+/turf/open/floor/plating/lava/make_plating()
+ return
+
+/turf/open/floor/plating/lava/GetHeatCapacity()
+ . = 700000
+
+/turf/open/floor/plating/lava/GetTemperature()
+ . = 5000
+
+/turf/open/floor/plating/lava/TakeTemperature(temp)
+
+/turf/open/floor/plating/lava/proc/burn_stuff(AM)
+ . = 0
+ var/thing_to_check = src
+ if (AM)
+ thing_to_check = list(AM)
+ for(var/thing in thing_to_check)
+ if(isobj(thing))
+ var/obj/O = thing
+ if((O.resistance_flags & (LAVA_PROOF|ON_FIRE|INDESTRUCTIBLE)) || O.throwing)
+ continue
+ . = 1
+ if(!(O.resistance_flags & FLAMMABLE))
+ O.resistance_flags |= FLAMMABLE //Even fireproof things burn up in lava
+ O.resistance_flags = ~FIRE_PROOF
+ if(O.armor["fire"] > 50) //obj with 100% fire armor still get slowly burned away.
+ O.armor["fire"] = 50
+ O.fire_act(10000, 1000)
+
+
+ else if (isliving(thing))
+ . = 1
+ var/mob/living/L = thing
+ if("lava" in L.weather_immunities)
+ continue
+ if(L.buckled)
+ if(isobj(L.buckled))
+ var/obj/O = L.buckled
+ if(O.resistance_flags & LAVA_PROOF)
+ continue
+ if(isliving(L.buckled)) //Goliath riding
+ var/mob/living/live = L.buckled
+ if("lava" in live.weather_immunities)
+ continue
+
+ L.adjustFireLoss(20)
+ if(L) //mobs turning into object corpses could get deleted here.
+ L.adjust_fire_stacks(20)
+ L.IgniteMob()
+
+
+/turf/open/floor/plating/lava/attackby(obj/item/C, mob/user, params) //Lava isn't a good foundation to build on
+ return
+
+/turf/open/floor/plating/lava/break_tile()
+ return
+
+/turf/open/floor/plating/lava/burn_tile()
+ return
+
+/turf/open/floor/plating/lava/smooth
+ name = "lava"
+ baseturf = /turf/open/floor/plating/lava/smooth
+ icon = 'icons/turf/floors/lava.dmi'
+ icon_state = "unsmooth"
+ smooth = SMOOTH_MORE | SMOOTH_BORDER
+ canSmoothWith = list(/turf/open/floor/plating/lava/smooth)
+
+
+/turf/open/floor/plating/lava/smooth/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ planetary_atmos = TRUE
+ baseturf = /turf/open/chasm/straight_down/lava_land_surface
+
+/turf/open/floor/plating/lava/smooth/airless
+ initial_gas_mix = "TEMP=2.7"
diff --git a/code/game/turfs/simulated/floor/plating/misc_plating.dm b/code/game/turfs/simulated/floor/plating/misc_plating.dm
new file mode 100644
index 00000000000..730cc7b0ab6
--- /dev/null
+++ b/code/game/turfs/simulated/floor/plating/misc_plating.dm
@@ -0,0 +1,160 @@
+
+/turf/open/floor/plating/airless
+ icon_state = "plating"
+ initial_gas_mix = "TEMP=2.7"
+
+/turf/open/floor/plating/abductor
+ name = "alien floor"
+ icon_state = "alienpod1"
+
+/turf/open/floor/plating/abductor/New()
+ ..()
+ icon_state = "alienpod[rand(1,9)]"
+
+
+/turf/open/floor/plating/abductor2
+ name = "alien plating"
+ icon_state = "alienplating"
+
+/turf/open/floor/plating/abductor2/break_tile()
+ return //unbreakable
+
+/turf/open/floor/plating/abductor2/burn_tile()
+ return //unburnable
+
+
+/turf/open/floor/plating/astplate
+ icon_state = "asteroidplating"
+
+/turf/open/floor/plating/airless/astplate
+ icon_state = "asteroidplating"
+
+
+/turf/open/floor/plating/ashplanet
+ icon = 'icons/turf/mining.dmi'
+ name = "ash"
+ icon_state = "ash"
+ smooth = SMOOTH_MORE|SMOOTH_BORDER
+ var/smooth_icon = 'icons/turf/floors/ash.dmi'
+ desc = "The ground is covered in volcanic ash."
+ baseturf = /turf/open/floor/plating/ashplanet/wateryrock //I assume this will be a chasm eventually, once this becomes an actual surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ planetary_atmos = TRUE
+
+/turf/open/floor/plating/ashplanet/New()
+ if(smooth)
+ pixel_y = -4
+ pixel_x = -4
+ icon = smooth_icon
+ ..()
+
+/turf/open/floor/plating/ashplanet/break_tile()
+ return
+
+/turf/open/floor/plating/ashplanet/burn_tile()
+ return
+
+/turf/open/floor/plating/ashplanet/ash
+ canSmoothWith = list(/turf/open/floor/plating/ashplanet/ash, /turf/closed)
+ layer = HIGH_TURF_LAYER
+ slowdown = 1
+
+/turf/open/floor/plating/ashplanet/rocky
+ name = "rocky ground"
+ icon_state = "rockyash"
+ smooth_icon = 'icons/turf/floors/rocky_ash.dmi'
+ layer = MID_TURF_LAYER
+ canSmoothWith = list(/turf/open/floor/plating/ashplanet/rocky, /turf/closed)
+
+/turf/open/floor/plating/ashplanet/wateryrock
+ name = "wet rocky ground"
+ smooth = null
+ icon_state = "wateryrock"
+ slowdown = 2
+
+/turf/open/floor/plating/ashplanet/wateryrock/New()
+ icon_state = "[icon_state][rand(1, 9)]"
+ ..()
+
+
+/turf/open/floor/plating/beach
+ name = "beach"
+ icon = 'icons/misc/beach.dmi'
+ flags = NONE
+
+/turf/open/floor/plating/beach/ex_act(severity, target)
+ contents_explosion(severity, target)
+
+/turf/open/floor/plating/beach/sand
+ name = "sand"
+ desc = "Surf's up."
+ icon_state = "sand"
+ baseturf = /turf/open/floor/plating/beach/sand
+
+/turf/open/floor/plating/beach/coastline_t
+ name = "coastline"
+ desc = "Tide's high tonight. Charge your batons."
+ icon_state = "sandwater_t"
+ baseturf = /turf/open/floor/plating/beach/coastline_t
+
+/turf/open/floor/plating/beach/coastline_b
+ name = "coastline"
+ icon_state = "sandwater_b"
+ baseturf = /turf/open/floor/plating/beach/coastline_b
+
+/turf/open/floor/plating/beach/water
+ name = "water"
+ desc = "You get the feeling that nobody's bothered to actually make this water functional..."
+ icon_state = "water"
+ baseturf = /turf/open/floor/plating/beach/water
+
+
+/turf/open/floor/plating/ironsand
+ name = "iron sand"
+ desc = "Like sand, but more metal."
+
+/turf/open/floor/plating/ironsand/New()
+ ..()
+ icon_state = "ironsand[rand(1,15)]"
+
+/turf/open/floor/plating/ironsand/burn_tile()
+ return
+
+
+/turf/open/floor/plating/ice
+ name = "ice sheet"
+ desc = "A sheet of solid ice. Looks slippery."
+ icon = 'icons/turf/snow.dmi'
+ icon_state = "ice"
+ temperature = 180
+ baseturf = /turf/open/floor/plating/ice
+ slowdown = 1
+ wet = TURF_WET_PERMAFROST
+
+/turf/open/floor/plating/ice/colder
+ temperature = 140
+
+/turf/open/floor/plating/ice/temperate
+ temperature = 255.37
+
+/turf/open/floor/plating/ice/break_tile()
+ return
+
+/turf/open/floor/plating/ice/burn_tile()
+ return
+
+
+/turf/open/floor/plating/snowed
+ name = "snowed-over plating"
+ desc = "A section of plating covered in a light layer of snow."
+ icon = 'icons/turf/snow.dmi'
+ icon_state = "snowplating"
+ temperature = 180
+
+/turf/open/floor/plating/snowed/colder
+ temperature = 140
+
+/turf/open/floor/plating/snowed/temperatre
+ temperature = 255.37
+
+
diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm
new file mode 100644
index 00000000000..9ee7121ff9e
--- /dev/null
+++ b/code/game/turfs/simulated/floor/reinf_floor.dm
@@ -0,0 +1,152 @@
+
+/turf/open/floor/engine
+ name = "reinforced floor"
+ icon_state = "engine"
+ thermal_conductivity = 0.025
+ heat_capacity = INFINITY
+ floor_tile = /obj/item/stack/rods
+
+/turf/open/floor/engine/airless
+ initial_gas_mix = "TEMP=2.7"
+
+/turf/open/floor/engine/break_tile()
+ return //unbreakable
+
+/turf/open/floor/engine/burn_tile()
+ return //unburnable
+
+/turf/open/floor/engine/make_plating(force = 0)
+ if(force)
+ ..()
+ return //unplateable
+
+/turf/open/floor/engine/attackby(obj/item/weapon/C, mob/user, params)
+ if(!C || !user)
+ return
+ if(istype(C, /obj/item/weapon/wrench))
+ user << "You begin removing rods..."
+ playsound(src, 'sound/items/Ratchet.ogg', 80, 1)
+ if(do_after(user, 30/C.toolspeed, target = src))
+ if(!istype(src, /turf/open/floor/engine))
+ return
+ new /obj/item/stack/rods(src, 2)
+ ChangeTurf(/turf/open/floor/plating)
+ return
+
+
+/turf/open/floor/engine/ex_act(severity, target)
+ contents_explosion(severity, target)
+ switch(severity)
+ if(1)
+ ChangeTurf(src.baseturf)
+ if(2)
+ if(prob(50))
+ ChangeTurf(src.baseturf)
+ else
+ return
+
+/turf/open/floor/engine/ex_act(severity,target)
+ var/shielded = is_shielded()
+ contents_explosion(severity, target)
+ if(severity != 1 && shielded && target != src)
+ return
+ if(target == src)
+ src.ChangeTurf(src.baseturf)
+ return
+ switch(severity)
+ if(1)
+ if(prob(80))
+ ReplaceWithLattice()
+ else if(prob(50))
+ ChangeTurf(src.baseturf)
+ else
+ make_plating(1)
+ if(2)
+ if(prob(50))
+ make_plating(1)
+
+/turf/open/floor/engine/singularity_pull(S, current_size)
+ if(current_size >= STAGE_FIVE)
+ if(floor_tile)
+ if(prob(30))
+ PoolOrNew(floor_tile, src)
+ make_plating()
+ else if(prob(30))
+ ReplaceWithLattice()
+
+/turf/open/floor/engine/attack_paw(mob/user)
+ return src.attack_hand(user)
+
+/turf/open/floor/engine/attack_hand(mob/user)
+ user.Move_Pulled(src)
+
+
+//air filled floors; used in atmos pressure chambers
+
+/turf/open/floor/engine/n2o
+ name = "n2o floor"
+ initial_gas_mix = "n2o=6000;TEMP=293.15"
+
+/turf/open/floor/engine/co2
+ name = "co2 floor"
+ initial_gas_mix = "co2=50000;TEMP=293.15"
+
+/turf/open/floor/engine/plasma
+ name = "plasma floor"
+ initial_gas_mix = "plasma=70000;TEMP=293.15"
+
+/turf/open/floor/engine/o2
+ name = "o2 floor"
+ initial_gas_mix = "o2=100000;TEMP=293.15"
+
+/turf/open/floor/engine/n2
+ name = "n2 floor"
+ initial_gas_mix = "n2=100000;TEMP=293.15"
+
+/turf/open/floor/engine/air
+ name = "air floor"
+ initial_gas_mix = "o2=2644;n2=10580;TEMP=293.15"
+
+
+
+/turf/open/floor/engine/cult
+ name = "engraved floor"
+ icon_state = "plating"
+ var/obj/effect/clockwork/overlay/floor/bloodcult/realappearence
+
+/turf/open/floor/engine/cult/New()
+ ..()
+ PoolOrNew(/obj/effect/overlay/temp/cult/turf/floor, src)
+ realappearence = PoolOrNew(/obj/effect/clockwork/overlay/floor/bloodcult, src)
+ realappearence.linked = src
+
+/turf/open/floor/engine/cult/Destroy()
+ be_removed()
+ return ..()
+
+/turf/open/floor/engine/cult/ChangeTurf(path, defer_change = FALSE)
+ if(path != type)
+ be_removed()
+ return ..()
+
+/turf/open/floor/engine/cult/proc/be_removed()
+ qdel(realappearence)
+ realappearence = null
+
+/turf/open/floor/engine/cult/narsie_act()
+ return
+
+/turf/open/floor/engine/cult/ratvar_act()
+ ..()
+ if(istype(src, /turf/open/floor/engine/cult)) //if we haven't changed type
+ var/previouscolor = color
+ color = "#FAE48C"
+ animate(src, color = previouscolor, time = 8)
+
+/turf/open/floor/engine/cult/airless
+ initial_gas_mix = "TEMP=2.7"
+
+
+/turf/open/floor/engine/vacuum
+ name = "vacuum floor"
+ initial_gas_mix = "TEMP=2.7"
diff --git a/code/modules/mining/mine_turfs.dm b/code/game/turfs/simulated/minerals.dm
similarity index 51%
rename from code/modules/mining/mine_turfs.dm
rename to code/game/turfs/simulated/minerals.dm
index ef5da5bb2af..22e87cb6814 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/game/turfs/simulated/minerals.dm
@@ -37,15 +37,82 @@
Spread(T)
+
+/turf/closed/mineral/attackby(obj/item/weapon/pickaxe/P, mob/user, params)
+
+ if (!user.IsAdvancedToolUser())
+ usr << "You don't have the dexterity to do this!"
+ return
+
+ if (istype(P, /obj/item/weapon/pickaxe))
+ var/turf/T = user.loc
+ if (!isturf(T))
+ return
+
+ if(last_act+P.digspeed > world.time)//prevents message spam
+ return
+ last_act = world.time
+ user << "You start picking..."
+ P.playDigSound()
+
+ if(do_after(user,P.digspeed, target = src))
+ if(ismineralturf(src))
+ user << "You finish cutting into the rock."
+ gets_drilled(user)
+ feedback_add_details("pick_used_mining","[P.type]")
+ else
+ return attack_hand(user)
+ return
+
+/turf/closed/mineral/proc/gets_drilled()
+ if (mineralType && (src.mineralAmt > 0) && (src.mineralAmt < 11))
+ var/i
+ for (i=0;i= 2)
+ gets_drilled()
+ ..()
+
+/turf/closed/mineral/attack_alien(mob/living/carbon/alien/M)
+ M << "You start digging into the rock..."
+ playsound(src, 'sound/effects/break_stone.ogg', 50, 1)
+ if(do_after(M,40, target = src))
+ M << "You tunnel into the rock."
+ gets_drilled(M)
+
+/turf/closed/mineral/Bumped(AM as mob|obj)
+ ..()
+ if(ishuman(AM))
+ var/mob/living/carbon/human/H = AM
+ var/obj/item/I = H.is_holding_item_of_type(/obj/item/weapon/pickaxe)
+ if(I)
+ attackby(I,H)
+ return
+ else if(iscyborg(AM))
+ var/mob/living/silicon/robot/R = AM
+ if(istype(R.module_active,/obj/item/weapon/pickaxe))
+ src.attackby(R.module_active,R)
+ return
+/* else if(istype(AM,/obj/mecha))
+ var/obj/mecha/M = AM
+ if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/drill))
+ src.attackby(M.selected,M)
+ return*/
+//Aparantly mechs are just TOO COOL to call Bump(), so fuck em (for now)
+ else
+ return
+
/turf/closed/mineral/acid_melt()
ChangeTurf(baseturf)
-/turf/closed/mineral/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt
- baseturf = /turf/open/floor/plating/asteroid/basalt
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
-
/turf/closed/mineral/ex_act(severity, target)
..()
switch(severity)
@@ -86,6 +153,7 @@
src = M
M.levelupdate()
+
/turf/closed/mineral/random/high_chance
icon_state = "rock_highchance"
mineralChance = 25
@@ -97,6 +165,18 @@
icon_state = "rock"
..()
+/turf/closed/mineral/random/high_chance/volcanic
+ environment_type = "basalt"
+ turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ defer_change = 1
+ mineralSpawnChanceList = list(
+ /turf/closed/mineral/uranium/volcanic = 35, /turf/closed/mineral/diamond/volcanic = 30, /turf/closed/mineral/gold/volcanic = 45, /turf/closed/mineral/titanium/volcanic = 45,
+ /turf/closed/mineral/silver/volcanic = 50, /turf/closed/mineral/plasma/volcanic = 50, /turf/closed/mineral/bscrystal/volcanic = 20)
+
+
+
/turf/closed/mineral/random/low_chance
icon_state = "rock_lowchance"
mineralChance = 6
@@ -109,48 +189,141 @@
icon_state = "rock"
..()
+
+/turf/closed/mineral/random/volcanic
+ environment_type = "basalt"
+ turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ defer_change = 1
+
+ mineralChance = 10
+ mineralSpawnChanceList = list(
+ /turf/closed/mineral/uranium/volcanic = 5, /turf/closed/mineral/diamond/volcanic = 1, /turf/closed/mineral/gold/volcanic = 10, /turf/closed/mineral/titanium/volcanic = 11,
+ /turf/closed/mineral/silver/volcanic = 12, /turf/closed/mineral/plasma/volcanic = 20, /turf/closed/mineral/iron/volcanic = 40,
+ /turf/closed/mineral/gibtonite/volcanic = 4, /turf/open/floor/plating/asteroid/airless/cave/volcanic = 1, /turf/closed/mineral/bscrystal/volcanic = 1)
+
+/turf/closed/mineral/random/labormineral
+ mineralSpawnChanceList = list(
+ /turf/closed/mineral/iron = 100, /turf/closed/mineral/uranium = 1, /turf/closed/mineral/diamond = 1,
+ /turf/closed/mineral/gold = 1, /turf/closed/mineral/silver = 1, /turf/closed/mineral/plasma = 1)
+ icon_state = "rock_labor"
+
+/turf/closed/mineral/random/labormineral/New()
+ icon_state = "rock"
+ ..()
+
+/turf/closed/mineral/random/labormineral/volcanic
+ environment_type = "basalt"
+ turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ defer_change = 1
+ mineralSpawnChanceList = list(
+ /turf/closed/mineral/iron/volcanic = 100, /turf/closed/mineral/uranium/volcanic = 1, /turf/closed/mineral/diamond/volcanic = 1,
+ /turf/closed/mineral/gold/volcanic = 1, /turf/closed/mineral/silver/volcanic = 1, /turf/closed/mineral/plasma/volcanic = 1)
+
+
+
+
/turf/closed/mineral/iron
mineralType = /obj/item/weapon/ore/iron
spreadChance = 20
spread = 1
scan_state = "rock_Iron"
+/turf/closed/mineral/iron/volcanic
+ environment_type = "basalt"
+ turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ defer_change = 1
+
+
/turf/closed/mineral/uranium
mineralType = /obj/item/weapon/ore/uranium
spreadChance = 5
spread = 1
scan_state = "rock_Uranium"
+/turf/closed/mineral/uranium/volcanic
+ environment_type = "basalt"
+ turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ defer_change = 1
+
+
/turf/closed/mineral/diamond
mineralType = /obj/item/weapon/ore/diamond
spreadChance = 0
spread = 1
scan_state = "rock_Diamond"
+/turf/closed/mineral/diamond/volcanic
+ environment_type = "basalt"
+ turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ defer_change = 1
+
+
/turf/closed/mineral/gold
mineralType = /obj/item/weapon/ore/gold
spreadChance = 5
spread = 1
scan_state = "rock_Gold"
+/turf/closed/mineral/gold/volcanic
+ environment_type = "basalt"
+ turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ defer_change = 1
+
+
/turf/closed/mineral/silver
mineralType = /obj/item/weapon/ore/silver
spreadChance = 5
spread = 1
scan_state = "rock_Silver"
+/turf/closed/mineral/silver/volcanic
+ environment_type = "basalt"
+ turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ defer_change = 1
+
+
/turf/closed/mineral/titanium
mineralType = /obj/item/weapon/ore/titanium
spreadChance = 5
spread = 1
scan_state = "rock_Titanium"
+/turf/closed/mineral/titanium/volcanic
+ environment_type = "basalt"
+ turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ defer_change = 1
+
+
/turf/closed/mineral/plasma
mineralType = /obj/item/weapon/ore/plasma
spreadChance = 8
spread = 1
scan_state = "rock_Plasma"
+/turf/closed/mineral/plasma/volcanic
+ environment_type = "basalt"
+ turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ defer_change = 1
+
+
/turf/closed/mineral/clown
mineralType = /obj/item/weapon/ore/bananium
mineralAmt = 3
@@ -158,6 +331,7 @@
spread = 0
scan_state = "rock_Clown"
+
/turf/closed/mineral/bscrystal
mineralType = /obj/item/weapon/ore/bluespace_crystal
mineralAmt = 1
@@ -165,7 +339,42 @@
spread = 0
scan_state = "rock_BScrystal"
-////////////////////////////////Gibtonite
+/turf/closed/mineral/bscrystal/volcanic
+ environment_type = "basalt"
+ turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ defer_change = 1
+
+
+/turf/closed/mineral/volcanic
+ environment_type = "basalt"
+ turf_type = /turf/open/floor/plating/asteroid/basalt
+ baseturf = /turf/open/floor/plating/asteroid/basalt
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+
+/turf/closed/mineral/volcanic/lava_land_surface
+ environment_type = "basalt"
+ turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
+ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ defer_change = 1
+
+/turf/closed/mineral/ash_rock //wall piece
+ name = "rock"
+ icon = 'icons/turf/mining.dmi'
+ smooth_icon = 'icons/turf/walls/rock_wall.dmi'
+ icon_state = "rock2"
+ smooth = SMOOTH_MORE|SMOOTH_BORDER
+ canSmoothWith = list (/turf/closed)
+ baseturf = /turf/open/floor/plating/ashplanet/wateryrock
+ initial_gas_mix = "o2=14;n2=23;TEMP=300"
+ environment_type = "waste"
+ turf_type = /turf/open/floor/plating/ashplanet/rocky
+ defer_change = 1
+
+
+//GIBTONITE
+
/turf/closed/mineral/gibtonite
mineralAmt = 1
spreadChance = 0
@@ -260,523 +469,6 @@
spawn(10)
AfterChange()
-/turf/closed/mineral/gibtonite/volcanic
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
-
-////////////////////////////////End Gibtonite
-
-/turf/open/floor/plating/asteroid/airless/cave
- var/length = 100
- var/mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goldgrub = 1, /mob/living/simple_animal/hostile/asteroid/goliath = 5, /mob/living/simple_animal/hostile/asteroid/basilisk = 4, /mob/living/simple_animal/hostile/asteroid/hivelord = 3)
- var/flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash = 2)
- var/sanity = 1
- var/forward_cave_dir = 1
- var/backward_cave_dir = 2
- var/going_backwards = TRUE
- var/has_data = FALSE
- var/data_having_type = /turf/open/floor/plating/asteroid/airless/cave/has_data
- turf_type = /turf/open/floor/plating/asteroid/airless
-
-/turf/open/floor/plating/asteroid/airless/cave/has_data //subtype for producing a tunnel with given data
- has_data = TRUE
-
-/turf/open/floor/plating/asteroid/airless/cave/volcanic
- mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goldgrub = 10, /mob/living/simple_animal/hostile/asteroid/goliath/beast = 50, /mob/living/simple_animal/hostile/asteroid/basilisk/watcher = 40, /mob/living/simple_animal/hostile/asteroid/hivelord/legion = 30,
- /mob/living/simple_animal/hostile/spawner/lavaland = 2, /mob/living/simple_animal/hostile/spawner/lavaland/goliath = 3, /mob/living/simple_animal/hostile/spawner/lavaland/legion = 3, \
- /mob/living/simple_animal/hostile/megafauna/dragon = 2, /mob/living/simple_animal/hostile/megafauna/bubblegum = 2, /mob/living/simple_animal/hostile/megafauna/colossus = 2)
-
- data_having_type = /turf/open/floor/plating/asteroid/airless/cave/volcanic/has_data
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
-
-/turf/open/floor/plating/asteroid/airless/cave/volcanic/has_data //subtype for producing a tunnel with given data
- has_data = TRUE
-
-/turf/open/floor/plating/asteroid/airless/cave/New(loc)
- if(!has_data)
- produce_tunnel_from_data()
- ..()
-
-/turf/open/floor/plating/asteroid/airless/cave/proc/get_cave_data(set_length, exclude_dir = -1)
- // If set_length (arg1) isn't defined, get a random length; otherwise assign our length to the length arg.
- if(!set_length)
- length = rand(25, 50)
- else
- length = set_length
-
- // Get our directiosn
- forward_cave_dir = pick(alldirs - exclude_dir)
- // Get the opposite direction of our facing direction
- backward_cave_dir = angle2dir(dir2angle(forward_cave_dir) + 180)
-
-/turf/open/floor/plating/asteroid/airless/cave/proc/produce_tunnel_from_data(tunnel_length, excluded_dir = -1)
- get_cave_data(tunnel_length, excluded_dir)
- // Make our tunnels
- make_tunnel(forward_cave_dir)
- if(going_backwards)
- make_tunnel(backward_cave_dir)
- // Kill ourselves by replacing ourselves with a normal floor.
- SpawnFloor(src)
-
-/turf/open/floor/plating/asteroid/airless/cave/proc/make_tunnel(dir)
- var/turf/closed/mineral/tunnel = src
- var/next_angle = pick(45, -45)
-
- for(var/i = 0; i < length; i++)
- if(!sanity)
- break
-
- var/list/L = list(45)
- if(IsOdd(dir2angle(dir))) // We're going at an angle and we want thick angled tunnels.
- L += -45
-
- // Expand the edges of our tunnel
- for(var/edge_angle in L)
- var/turf/closed/mineral/edge = get_step(tunnel, angle2dir(dir2angle(dir) + edge_angle))
- if(istype(edge))
- SpawnFloor(edge)
-
- if(!sanity)
- break
-
- // Move our tunnel forward
- tunnel = get_step(tunnel, dir)
-
- if(istype(tunnel))
- // Small chance to have forks in our tunnel; otherwise dig our tunnel.
- if(i > 3 && prob(20))
- var/turf/open/floor/plating/asteroid/airless/cave/C = tunnel.ChangeTurf(data_having_type)
- C.going_backwards = FALSE
- C.produce_tunnel_from_data(rand(10, 15), dir)
- else
- SpawnFloor(tunnel)
- else //if(!istype(tunnel, src.parent)) // We hit space/normal/wall, stop our tunnel.
- break
-
- // Chance to change our direction left or right.
- if(i > 2 && prob(33))
- // We can't go a full loop though
- next_angle = -next_angle
- setDir(angle2dir(dir2angle(dir) )+ next_angle)
-
-
-/turf/open/floor/plating/asteroid/airless/cave/proc/SpawnFloor(turf/T)
- for(var/S in RANGE_TURFS(1, src))
- var/turf/NT = S
- if(!NT || isspaceturf(NT) || istype(NT.loc, /area/mine/explored) || istype(NT.loc, /area/lavaland/surface/outdoors/explored))
- sanity = 0
- break
- if(!sanity)
- return
- SpawnFlora(T)
-
- SpawnMonster(T)
- T.ChangeTurf(turf_type)
-
-/turf/open/floor/plating/asteroid/airless/cave/proc/SpawnMonster(turf/T)
- if(prob(30))
- if(istype(loc, /area/mine/explored) || istype(loc, /area/lavaland/surface/outdoors/explored))
- return
- for(var/mob/living/simple_animal/hostile/H in urange(12,T)) //prevents mob clumps
- if(istype(H, /mob/living/simple_animal/hostile/asteroid))
- return
- if(ismegafauna(H) && get_dist(src, H) <= 7)
- return
- if(istype(H, /mob/living/simple_animal/hostile/spawner/lavaland) && get_dist(src, H) <= 3) //prevents tendrils spawning in collapse range
- return
- var/randumb = pickweight(mob_spawn_list)
- new randumb(T)
- return
-/turf/open/floor/plating/asteroid/airless/cave/proc/SpawnFlora(turf/T)
- if(prob(12))
- if(istype(loc, /area/mine/explored) || istype(loc, /area/lavaland/surface/outdoors/explored))
- return
- for(var/obj/structure/flora/ash/F in urange(3,T)) //Allows for growing patches, but not ridiculous stacks of flora
- return
- var/randumb = pickweight(flora_spawn_list)
- new randumb(T)
-
-
-/turf/closed/mineral/attackby(obj/item/weapon/pickaxe/P, mob/user, params)
-
- if (!user.IsAdvancedToolUser())
- usr << "You don't have the dexterity to do this!"
- return
-
- if (istype(P, /obj/item/weapon/pickaxe))
- var/turf/T = user.loc
- if (!isturf(T))
- return
-
- if(last_act+P.digspeed > world.time)//prevents message spam
- return
- last_act = world.time
- user << "You start picking..."
- P.playDigSound()
-
- if(do_after(user,P.digspeed, target = src))
- if(ismineralturf(src))
- user << "You finish cutting into the rock."
- gets_drilled(user)
- feedback_add_details("pick_used_mining","[P.type]")
- else
- return attack_hand(user)
- return
-
-/turf/closed/mineral/proc/gets_drilled()
- if (mineralType && (src.mineralAmt > 0) && (src.mineralAmt < 11))
- var/i
- for (i=0;i= 2)
- gets_drilled()
- ..()
-
-/turf/closed/mineral/attack_alien(mob/living/carbon/alien/M)
- M << "You start digging into the rock..."
- playsound(src, 'sound/effects/break_stone.ogg', 50, 1)
- if(do_after(M,40, target = src))
- M << "You tunnel into the rock."
- gets_drilled(M)
-
-/turf/closed/mineral/Bumped(AM as mob|obj)
- ..()
- if(ishuman(AM))
- var/mob/living/carbon/human/H = AM
- var/obj/item/I = H.is_holding_item_of_type(/obj/item/weapon/pickaxe)
- if(I)
- attackby(I,H)
- return
- else if(iscyborg(AM))
- var/mob/living/silicon/robot/R = AM
- if(istype(R.module_active,/obj/item/weapon/pickaxe))
- src.attackby(R.module_active,R)
- return
-/* else if(istype(AM,/obj/mecha))
- var/obj/mecha/M = AM
- if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/drill))
- src.attackby(M.selected,M)
- return*/
-//Aparantly mechs are just TOO COOL to call Bump(), so fuck em (for now)
- else
- return
-
-/**********************Asteroid**************************/
-
-/turf/open/floor/plating/asteroid //floor piece
- name = "asteroid sand"
- baseturf = /turf/open/floor/plating/asteroid
- icon = 'icons/turf/floors.dmi'
- icon_state = "asteroid"
- icon_plating = "asteroid"
- var/environment_type = "asteroid"
- var/turf_type = /turf/open/floor/plating/asteroid //Because caves do whacky shit to revert to normal
- var/dug = 0 //0 = has not yet been dug, 1 = has already been dug
- var/sand_type = /obj/item/weapon/ore/glass
- var/floor_variance = 20 //probability floor has a different icon state
-
-/turf/open/floor/plating/asteroid/airless
- initial_gas_mix = "TEMP=2.7"
- turf_type = /turf/open/floor/plating/asteroid/airless
-
-/turf/open/floor/plating/asteroid/basalt
- name = "volcanic floor"
- baseturf = /turf/open/floor/plating/asteroid/basalt
- icon = 'icons/turf/floors.dmi'
- icon_state = "basalt"
- icon_plating = "basalt"
- environment_type = "basalt"
- sand_type = /obj/item/weapon/ore/glass/basalt
- floor_variance = 15
-
-/turf/open/floor/plating/asteroid/basalt/lava //lava underneath
- baseturf = /turf/open/floor/plating/lava/smooth
-
-/turf/open/floor/plating/asteroid/basalt/airless
- initial_gas_mix = "TEMP=2.7"
-
-/turf/open/floor/plating/asteroid/snow
- name = "snow"
- desc = "Looks cold."
- icon = 'icons/turf/snow.dmi'
- baseturf = /turf/open/floor/plating/asteroid/snow
- icon_state = "snow"
- icon_plating = "snow"
- initial_gas_mix = "TEMP=180"
- slowdown = 2
- environment_type = "snow"
- sand_type = /obj/item/stack/sheet/mineral/snow
-
-/turf/open/floor/plating/asteroid/snow/airless
- initial_gas_mix = "TEMP=2.7"
-
-/turf/open/floor/plating/asteroid/snow/temperatre
- initial_gas_mix = "TEMP=255.37"
-
-/turf/open/floor/plating/asteroid/snow/atmosphere
- initial_gas_mix = "o2=22;n2=82;TEMP=180"
-
-/turf/open/floor/plating/asteroid/New()
- var/proper_name = name
- ..()
- name = proper_name
- if(prob(floor_variance))
- icon_state = "[environment_type][rand(0,12)]"
-
-/turf/open/floor/plating/asteroid/basalt/New()
- ..()
- switch(icon_state)
- if("basalt1", "basalt2", "basalt3") //5 and 9 are too dark to glow and make the amount of glows in tunnels too high
- SetLuminosity(1, 1) //this is basically a 3.75% chance that a basalt floor glows
-
-/turf/open/floor/plating/asteroid/burn_tile()
- return
-
-/turf/open/floor/plating/asteroid/ex_act(severity, target)
- contents_explosion(severity, target)
- switch(severity)
- if(3)
- return
- if(2)
- if(prob(20))
- src.gets_dug()
- if(1)
- src.gets_dug()
-
-/turf/open/floor/plating/asteroid/attackby(obj/item/weapon/W, mob/user, params)
- //note that this proc does not call ..()
- if(!W || !user)
- return 0
- var/digging_speed = 0
- if (istype(W, /obj/item/weapon/shovel))
- var/obj/item/weapon/shovel/S = W
- digging_speed = S.digspeed
- else if (istype(W, /obj/item/weapon/pickaxe))
- var/obj/item/weapon/pickaxe/P = W
- digging_speed = P.digspeed
- if (digging_speed)
- var/turf/T = user.loc
- if(!isturf(T))
- return
-
- if (dug)
- user << "This area has already been dug!"
- return
-
- user << "You start digging..."
- playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
-
- if(do_after(user, digging_speed, target = src))
- if(istype(src, /turf/open/floor/plating/asteroid))
- user << "You dig a hole."
- gets_dug()
- feedback_add_details("pick_used_mining","[W.type]")
-
- if(istype(W,/obj/item/weapon/storage/bag/ore))
- var/obj/item/weapon/storage/bag/ore/S = W
- if(S.collection_mode == 1)
- for(var/obj/item/weapon/ore/O in src.contents)
- O.attackby(W,user)
- return
-
- if(istype(W, /obj/item/stack/tile))
- var/obj/item/stack/tile/Z = W
- if(!Z.use(1))
- return
- var/turf/open/floor/T = ChangeTurf(Z.turf_type)
- if(istype(Z,/obj/item/stack/tile/light)) //TODO: get rid of this ugly check somehow
- var/obj/item/stack/tile/light/L = Z
- var/turf/open/floor/light/F = T
- F.state = L.state
- playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
-
-/turf/open/floor/plating/asteroid/proc/gets_dug()
- if(dug)
- return
- for(var/i in 1 to 5)
- new sand_type(src)
- dug = 1
- icon_plating = "[environment_type]_dug"
- icon_state = "[environment_type]_dug"
- slowdown = 0
- return
-
-/turf/open/floor/plating/asteroid/basalt/gets_dug()
- if(!dug)
- SetLuminosity(0)
- ..()
-
-/turf/open/floor/plating/asteroid/singularity_act()
- return
-
-/turf/open/floor/plating/asteroid/singularity_pull(S, current_size)
- return
-
-//////////////CHASM//////////////////
-
-/turf/open/chasm
- name = "chasm"
- desc = "Watch your step."
- baseturf = /turf/open/chasm
- smooth = SMOOTH_TRUE | SMOOTH_BORDER
- icon = 'icons/turf/floors/Chasms.dmi'
- icon_state = "smooth"
- var/drop_x = 1
- var/drop_y = 1
- var/drop_z = 1
-
-/turf/open/chasm/Entered(atom/movable/AM)
- START_PROCESSING(SSobj, src)
- drop_stuff(AM)
-
-/turf/open/chasm/process()
- if(!drop_stuff())
- STOP_PROCESSING(SSobj, src)
-
-/turf/open/chasm/proc/drop_stuff(AM)
- . = 0
- var/thing_to_check = src
- if(AM)
- thing_to_check = list(AM)
- for(var/thing in thing_to_check)
- if(droppable(thing))
- . = 1
- addtimer(src, "drop", 0, FALSE, thing)
-
-/turf/open/chasm/proc/droppable(atom/movable/AM)
- if(!isliving(AM) && !isobj(AM))
- return 0
- if(istype(AM, /obj/singularity) || istype(AM, /obj/item/projectile) || AM.throwing)
- return 0
- if(istype(AM, /obj/effect/portal))
- //Portals aren't affected by gravity. Probably.
- return 0
- //Flies right over the chasm
- if(isanimal(AM))
- var/mob/living/simple_animal/SA = AM
- if(SA.flying)
- return 0
- if(ishuman(AM))
- var/mob/living/carbon/human/H = AM
- if(istype(H.belt, /obj/item/device/wormhole_jaunter))
- var/obj/item/device/wormhole_jaunter/J = H.belt
- //To freak out any bystanders
- visible_message("[H] falls into [src]!")
- J.chasm_react(H)
- return 0
- if(H.dna && H.dna.species && (FLYING in H.dna.species.specflags))
- return 0
- return 1
-
-/turf/open/chasm/proc/drop(atom/movable/AM)
- //Make sure the item is still there after our sleep
- if(!AM || qdeleted(AM))
- return
-
- var/turf/T = locate(drop_x, drop_y, drop_z)
- if(T)
- AM.visible_message("[AM] falls into [src]!", "GAH! Ah... where are you?")
- T.visible_message("[AM] falls from above!")
- AM.forceMove(T)
- if(isliving(AM))
- var/mob/living/L = AM
- L.Weaken(5)
- L.adjustBruteLoss(30)
-
-/turf/open/chasm/straight_down/New()
- ..()
- drop_x = x
- drop_y = y
- if(z+1 <= world.maxz)
- drop_z = z+1
-
-/**********************Lavaland Turfs**************************/
-
-///////Surface. The surface is warm, but survivable without a suit. Internals are required. The floors break to chasms, which drop you into the underground.
-
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- planetary_atmos = TRUE
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
-
-/turf/open/chasm/straight_down/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- planetary_atmos = TRUE
- baseturf = /turf/open/chasm/straight_down/lava_land_surface
-
-/turf/open/chasm/straight_down/lava_land_surface/normal_air
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
-
-/turf/open/chasm/straight_down/lava_land_surface/drop(atom/movable/AM)
- //Make sure the item is still there after our sleep
- if(!AM || qdeleted(AM))
- return
- AM.visible_message("[AM] falls into [src]!", "You stumble and stare into an abyss before you. It stares back, and you fall \
- into the enveloping dark.")
- if(isliving(AM))
- var/mob/living/L = AM
- L.notransform = TRUE
- L.Stun(10)
- L.resting = TRUE
- animate(AM, transform = matrix() - matrix(), alpha = 0, color = rgb(0, 0, 0), time = 10)
- for(var/i in 1 to 5)
- //Make sure the item is still there after our sleep
- if(!AM || qdeleted(AM))
- return
- AM.pixel_y--
- sleep(2)
-
- //Make sure the item is still there after our sleep
- if(!AM || qdeleted(AM))
- return
-
- if(iscyborg(AM))
- var/mob/living/silicon/robot/S = AM
- qdel(S.mmi)
-
- qdel(AM)
-
-/turf/closed/mineral/volcanic/lava_land_surface
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
- defer_change = 1
-
-/turf/closed/mineral/random/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- defer_change = 1
-
- mineralChance = 10
- mineralSpawnChanceList = list(
- /turf/closed/mineral/uranium/volcanic = 5, /turf/closed/mineral/diamond/volcanic = 1, /turf/closed/mineral/gold/volcanic = 10, /turf/closed/mineral/titanium/volcanic = 11,
- /turf/closed/mineral/silver/volcanic = 12, /turf/closed/mineral/plasma/volcanic = 20, /turf/closed/mineral/iron/volcanic = 40,
- /turf/closed/mineral/gibtonite/volcanic = 4, /turf/open/floor/plating/asteroid/airless/cave/volcanic = 1, /turf/closed/mineral/bscrystal/volcanic = 1)
-
-/turf/closed/mineral/random/high_chance/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- defer_change = 1
- mineralSpawnChanceList = list(
- /turf/closed/mineral/uranium/volcanic = 35, /turf/closed/mineral/diamond/volcanic = 30, /turf/closed/mineral/gold/volcanic = 45, /turf/closed/mineral/titanium/volcanic = 45,
- /turf/closed/mineral/silver/volcanic = 50, /turf/closed/mineral/plasma/volcanic = 50, /turf/closed/mineral/bscrystal/volcanic = 20)
-
-/turf/open/floor/plating/lava/smooth/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- planetary_atmos = TRUE
- baseturf = /turf/open/chasm/straight_down/lava_land_surface
/turf/closed/mineral/gibtonite/volcanic
environment_type = "basalt"
@@ -784,143 +476,3 @@
baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
initial_gas_mix = "o2=14;n2=23;TEMP=300"
defer_change = 1
-
-/turf/closed/mineral/uranium/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- defer_change = 1
-
-/turf/closed/mineral/diamond/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- defer_change = 1
-
-/turf/closed/mineral/gold/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- defer_change = 1
-
-/turf/closed/mineral/silver/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- defer_change = 1
-
-/turf/closed/mineral/titanium/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- defer_change = 1
-
-/turf/closed/mineral/plasma/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- defer_change = 1
-
-/turf/closed/mineral/iron/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- defer_change = 1
-
-/turf/closed/mineral/bscrystal/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- defer_change = 1
-
-
-//BECAUSE ONE PLANET WASNT ENOUGH
-
-/turf/closed/mineral/ash_rock //wall piece
- name = "rock"
- icon = 'icons/turf/mining.dmi'
- smooth_icon = 'icons/turf/walls/rock_wall.dmi'
- icon_state = "rock2"
- smooth = SMOOTH_MORE|SMOOTH_BORDER
- canSmoothWith = list (/turf/closed)
- baseturf = /turf/open/floor/plating/ashplanet/wateryrock
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- environment_type = "waste"
- turf_type = /turf/open/floor/plating/ashplanet/rocky
- defer_change = 1
-
-/turf/open/floor/plating/ashplanet
- icon = 'icons/turf/mining.dmi'
- name = "ash"
- icon_state = "ash"
- smooth = SMOOTH_MORE|SMOOTH_BORDER
- var/smooth_icon = 'icons/turf/floors/ash.dmi'
- desc = "The ground is covered in volcanic ash."
- baseturf = /turf/open/floor/plating/ashplanet/wateryrock //I assume this will be a chasm eventually, once this becomes an actual surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- planetary_atmos = TRUE
-
-/turf/open/floor/plating/ashplanet/New()
- if(smooth)
- pixel_y = -4
- pixel_x = -4
- icon = smooth_icon
- ..()
-
-/turf/open/floor/plating/ashplanet/break_tile()
- return
-
-/turf/open/floor/plating/ashplanet/burn_tile()
- return
-
-/turf/open/floor/plating/ashplanet/ash
- canSmoothWith = list(/turf/open/floor/plating/ashplanet/ash, /turf/closed)
- layer = HIGH_TURF_LAYER
- slowdown = 1
-
-/turf/open/floor/plating/ashplanet/rocky
- name = "rocky ground"
- icon_state = "rockyash"
- smooth_icon = 'icons/turf/floors/rocky_ash.dmi'
- layer = MID_TURF_LAYER
- canSmoothWith = list(/turf/open/floor/plating/ashplanet/rocky, /turf/closed)
-
-/turf/open/floor/plating/ashplanet/wateryrock
- name = "wet rocky ground"
- smooth = null
- icon_state = "wateryrock"
- slowdown = 2
-
-/turf/open/floor/plating/ashplanet/wateryrock/New()
- icon_state = "[icon_state][rand(1, 9)]"
- ..()
-
-//Necropolis
-
-/turf/closed/indestructible/necropolis
- name = "necropolis wall"
- desc = "A seemingly impenetrable wall."
- icon = 'icons/turf/walls.dmi'
- icon_state = "necro"
- explosion_block = 50
- baseturf = /turf/closed/indestructible/necropolis
-
-/turf/open/indestructible/necropolis
- name = "necropolis floor"
- desc = "It's regarding you suspiciously."
- icon = 'icons/turf/floors.dmi'
- icon_state = "necro1"
- baseturf = /turf/open/indestructible/necropolis
-
-/turf/open/indestructible/necropolis/New()
- ..()
- if(prob(12))
- icon_state = "necro[rand(2,3)]"
diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/wall/mineral_walls.dm
similarity index 97%
rename from code/game/turfs/simulated/walls_mineral.dm
rename to code/game/turfs/simulated/wall/mineral_walls.dm
index 56abbf90fbc..8244dea7fc6 100644
--- a/code/game/turfs/simulated/walls_mineral.dm
+++ b/code/game/turfs/simulated/wall/mineral_walls.dm
@@ -167,13 +167,6 @@
explosion_block = 3
canSmoothWith = list(/turf/closed/wall/mineral/abductor, /obj/structure/falsewall/abductor)
-/turf/closed/wall/shuttle //nosmoothing shuttle walls
- name = "wall"
- icon = 'icons/turf/shuttle.dmi'
- icon_state = "wall"
- sheet_type = /obj/item/stack/sheet/mineral/titanium
- smooth = SMOOTH_FALSE
-
/turf/closed/wall/mineral/titanium //has to use this path due to how building walls works
name = "wall"
desc = "A light-weight titanium wall used in shuttles."
diff --git a/code/game/turfs/simulated/walls_misc.dm b/code/game/turfs/simulated/wall/misc_walls.dm
similarity index 79%
rename from code/game/turfs/simulated/walls_misc.dm
rename to code/game/turfs/simulated/wall/misc_walls.dm
index 73f79bd650a..3c0933e5839 100644
--- a/code/game/turfs/simulated/walls_misc.dm
+++ b/code/game/turfs/simulated/wall/misc_walls.dm
@@ -161,51 +161,4 @@
icon_state = "rrust"
hardness = 15
-/turf/closed/wall/shuttle
- name = "wall"
- icon = 'icons/turf/shuttle.dmi'
- icon_state = "wall"
- smooth = SMOOTH_FALSE
-
-/turf/closed/wall/shuttle/syndie
- icon_state = "wall3"
- sheet_type = /obj/item/stack/sheet/mineral/plastitanium
-
-/turf/closed/wall/shuttle/smooth
- name = "wall"
- icon = 'icons/turf/walls/shuttle_wall.dmi'
- icon_state = "shuttle"
- sheet_type = /obj/item/stack/sheet/mineral/titanium
- smooth = SMOOTH_MORE|SMOOTH_DIAGONAL
- canSmoothWith = list(/turf/closed/wall/shuttle/smooth, /obj/structure/window/shuttle, /obj/structure/shuttle, /obj/machinery/door/airlock/glass, /obj/machinery/door/airlock/shuttle)
-
-/turf/closed/wall/shuttle/smooth/nodiagonal
- smooth = SMOOTH_MORE
- icon_state = "shuttle_nd"
-
-/turf/closed/wall/shuttle/smooth/overspace
- icon_state = "overspace"
- fixed_underlay = list("space"=1)
-
-//sub-type to be used for interior shuttle walls
-//won't get an underlay of the destination turf on shuttle move
-/turf/closed/wall/shuttle/interior/copyTurf(turf/T)
- if(T.type != type)
- T.ChangeTurf(type)
- if(underlays.len)
- T.underlays = underlays
- if(T.icon_state != icon_state)
- T.icon_state = icon_state
- if(T.icon != icon)
- T.icon = icon
- if(T.color != color)
- T.color = color
- if(T.dir != dir)
- T.setDir(dir)
- T.transform = transform
- return T
-
-/turf/closed/wall/shuttle/copyTurf(turf/T)
- . = ..()
- T.transform = transform
diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/wall/reinf_walls.dm
similarity index 100%
rename from code/game/turfs/simulated/walls_reinforced.dm
rename to code/game/turfs/simulated/wall/reinf_walls.dm
diff --git a/code/game/turfs/simulated/wall/shuttle_walls.dm b/code/game/turfs/simulated/wall/shuttle_walls.dm
new file mode 100644
index 00000000000..877b915f661
--- /dev/null
+++ b/code/game/turfs/simulated/wall/shuttle_walls.dm
@@ -0,0 +1,66 @@
+
+
+/turf/closed/wall/shuttle
+ name = "wall"
+ icon = 'icons/turf/shuttle.dmi'
+ icon_state = "wall"
+ sheet_type = /obj/item/stack/sheet/mineral/titanium
+ smooth = SMOOTH_FALSE
+
+/turf/closed/wall/shuttle/copyTurf(turf/T)
+ . = ..()
+ T.transform = transform
+
+/turf/closed/wall/shuttle/survival
+ name = "pod wall"
+ desc = "An easily-compressable wall used for temporary shelter."
+ icon = 'icons/turf/walls/survival_pod_walls.dmi'
+ icon_state = "smooth"
+ smooth = SMOOTH_MORE|SMOOTH_DIAGONAL
+ canSmoothWith = list(/turf/closed/wall/shuttle/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod, /obj/structure/shuttle/engine)
+
+/turf/closed/wall/shuttle/survival/nodiagonal
+ smooth = SMOOTH_MORE
+
+/turf/closed/wall/shuttle/survival/pod
+ canSmoothWith = list(/turf/closed/wall/shuttle/survival, /obj/machinery/door/airlock, /obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/shuttle, /obj/structure/shuttle/engine)
+
+
+/turf/closed/wall/shuttle/syndie
+ icon_state = "wall3"
+ sheet_type = /obj/item/stack/sheet/mineral/plastitanium
+
+/turf/closed/wall/shuttle/smooth
+ name = "wall"
+ icon = 'icons/turf/walls/shuttle_wall.dmi'
+ icon_state = "shuttle"
+ sheet_type = /obj/item/stack/sheet/mineral/titanium
+ smooth = SMOOTH_MORE|SMOOTH_DIAGONAL
+ canSmoothWith = list(/turf/closed/wall/shuttle/smooth, /obj/structure/window/shuttle, /obj/structure/shuttle, /obj/machinery/door/airlock/glass, /obj/machinery/door/airlock/shuttle)
+
+/turf/closed/wall/shuttle/smooth/nodiagonal
+ smooth = SMOOTH_MORE
+ icon_state = "shuttle_nd"
+
+/turf/closed/wall/shuttle/smooth/overspace
+ icon_state = "overspace"
+ fixed_underlay = list("space"=1)
+
+//sub-type to be used for interior shuttle walls
+//won't get an underlay of the destination turf on shuttle move
+/turf/closed/wall/shuttle/interior/copyTurf(turf/T)
+ if(T.type != type)
+ T.ChangeTurf(type)
+ if(underlays.len)
+ T.underlays = underlays
+ if(T.icon_state != icon_state)
+ T.icon_state = icon_state
+ if(T.icon != icon)
+ T.icon = icon
+ if(T.color != color)
+ T.color = color
+ if(T.dir != dir)
+ T.setDir(dir)
+ T.transform = transform
+ return T
+
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 3a522e10267..be82bc02b45 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -349,3 +349,22 @@
/turf/proc/acid_melt()
return
+
+/turf/proc/copyTurf(turf/T)
+ if(T.type != type)
+ var/obj/O
+ if(underlays.len) //we have underlays, which implies some sort of transparency, so we want to a snapshot of the previous turf as an underlay
+ O = new()
+ O.underlays.Add(T)
+ T.ChangeTurf(type)
+ if(underlays.len)
+ T.underlays = O.underlays
+ if(T.icon_state != icon_state)
+ T.icon_state = icon_state
+ if(T.icon != icon)
+ T.icon = icon
+ if(T.color != color)
+ T.color = color
+ if(T.dir != dir)
+ T.setDir(dir)
+ return T
diff --git a/code/modules/mining/laborcamp/laborminerals.dm b/code/modules/mining/laborcamp/laborminerals.dm
deleted file mode 100644
index 5299d953754..00000000000
--- a/code/modules/mining/laborcamp/laborminerals.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-/turf/closed/mineral/random/labormineral
- mineralSpawnChanceList = list(
- /turf/closed/mineral/iron = 100, /turf/closed/mineral/uranium = 1, /turf/closed/mineral/diamond = 1,
- /turf/closed/mineral/gold = 1, /turf/closed/mineral/silver = 1, /turf/closed/mineral/plasma = 1)
- icon_state = "rock_labor"
-
-/turf/closed/mineral/random/labormineral/New()
- icon_state = "rock"
- ..()
-
-/turf/closed/mineral/random/labormineral/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
- initial_gas_mix = "o2=14;n2=23;TEMP=300"
- defer_change = 1
- mineralSpawnChanceList = list(
- /turf/closed/mineral/iron/volcanic = 100, /turf/closed/mineral/uranium/volcanic = 1, /turf/closed/mineral/diamond/volcanic = 1,
- /turf/closed/mineral/gold/volcanic = 1, /turf/closed/mineral/silver/volcanic = 1, /turf/closed/mineral/plasma/volcanic = 1)
\ No newline at end of file
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index fcfd1f05717..18a4afeb28a 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -287,41 +287,11 @@
PoolOrNew(/obj/effect/particle_effect/smoke, get_turf(src))
qdel(src)
+
+
//Pod turfs and objects
-//Floors
-/turf/open/floor/pod
- name = "pod floor"
- icon_state = "podfloor"
- icon_regular_floor = "podfloor"
- floor_tile = /obj/item/stack/tile/pod
-
-/turf/open/floor/pod/light
- icon_state = "podfloor_light"
- icon_regular_floor = "podfloor_light"
- floor_tile = /obj/item/stack/tile/pod/light
-
-/turf/open/floor/pod/dark
- icon_state = "podfloor_dark"
- icon_regular_floor = "podfloor_dark"
- floor_tile = /obj/item/stack/tile/pod/dark
-
-//Walls
-/turf/closed/wall/shuttle/survival
- name = "pod wall"
- desc = "An easily-compressable wall used for temporary shelter."
- icon = 'icons/turf/walls/survival_pod_walls.dmi'
- icon_state = "smooth"
- smooth = SMOOTH_MORE|SMOOTH_DIAGONAL
- canSmoothWith = list(/turf/closed/wall/shuttle/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod, /obj/structure/shuttle/engine)
-
-/turf/closed/wall/shuttle/survival/nodiagonal
- smooth = SMOOTH_MORE
-
-/turf/closed/wall/shuttle/survival/pod
- canSmoothWith = list(/turf/closed/wall/shuttle/survival, /obj/machinery/door/airlock, /obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/shuttle, /obj/structure/shuttle/engine)
-
//Window
/obj/structure/window/shuttle/survival_pod
name = "pod window"
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index d43314eb8f5..e25ef50c5a4 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -547,6 +547,7 @@
user << "You replace the damaged APC frame with a new one."
qdel(W)
stat &= ~BROKEN
+ obj_integrity = max_integrity
malfai = null
malfhack = 0
if (opened==2)
diff --git a/code/modules/power/engine.dm b/code/modules/power/engine.dm
deleted file mode 100644
index dc01f9f5a37..00000000000
--- a/code/modules/power/engine.dm
+++ /dev/null
@@ -1,16 +0,0 @@
-/turf/open/floor/engine/attack_paw(mob/user)
- return src.attack_hand(user)
-
-/turf/open/floor/engine/attack_hand(mob/user)
- user.Move_Pulled(src)
-
-/turf/open/floor/engine/ex_act(severity, target)
- contents_explosion(severity, target)
- switch(severity)
- if(1)
- ChangeTurf(src.baseturf)
- if(2)
- if(prob(50))
- ChangeTurf(src.baseturf)
- else
- return
\ No newline at end of file
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index 8afa443751b..b0ee4fc1f62 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -625,13 +625,6 @@
turf_type = /turf/open/floor/bluespace
-/turf/open/floor/bluespace
- slowdown = -1
- icon_state = "bluespace"
- desc = "Through a series of micro-teleports these tiles let people move at incredible speeds"
- floor_tile = /obj/item/stack/tile/bluespace
-
-
/obj/item/stack/tile/sepia
name = "sepia floor tile"
singular_name = "floor tile"
@@ -648,13 +641,6 @@
turf_type = /turf/open/floor/sepia
-/turf/open/floor/sepia
- slowdown = 2
- icon_state = "sepia"
- desc = "Time seems to flow very slowly around these tiles"
- floor_tile = /obj/item/stack/tile/sepia
-
-
/obj/item/areaeditor/blueprints/slime
name = "cerulean prints"
desc = "A one use yet of blueprints made of jelly like organic material. Renaming an area to 'Xenobiology Lab' will extend the reach of the management console."
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index 770a1673ac2..d513b4c3dd5 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -669,22 +669,3 @@
. += " towards [dst ? dst.name : "unknown location"] ([timeLeft(600)] minutes)"
#undef DOCKING_PORT_HIGHLIGHT
-
-/turf/proc/copyTurf(turf/T)
- if(T.type != type)
- var/obj/O
- if(underlays.len) //we have underlays, which implies some sort of transparency, so we want to a snapshot of the previous turf as an underlay
- O = new()
- O.underlays.Add(T)
- T.ChangeTurf(type)
- if(underlays.len)
- T.underlays = O.underlays
- if(T.icon_state != icon_state)
- T.icon_state = icon_state
- if(T.icon != icon)
- T.icon = icon
- if(T.color != color)
- T.color = color
- if(T.dir != dir)
- T.setDir(dir)
- return T
diff --git a/tgstation.dme b/tgstation.dme
index 577697aa0de..e8b2b6d2c4f 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -829,20 +829,27 @@
#include "code\game\turfs\closed.dm"
#include "code\game\turfs\open.dm"
#include "code\game\turfs\turf.dm"
+#include "code\game\turfs\simulated\chasm.dm"
#include "code\game\turfs\simulated\dirtystation.dm"
#include "code\game\turfs\simulated\floor.dm"
+#include "code\game\turfs\simulated\minerals.dm"
#include "code\game\turfs\simulated\river.dm"
#include "code\game\turfs\simulated\walls.dm"
-#include "code\game\turfs\simulated\walls_mineral.dm"
-#include "code\game\turfs\simulated\walls_misc.dm"
-#include "code\game\turfs\simulated\walls_reinforced.dm"
#include "code\game\turfs\simulated\floor\fancy_floor.dm"
#include "code\game\turfs\simulated\floor\light_floor.dm"
#include "code\game\turfs\simulated\floor\mineral_floor.dm"
#include "code\game\turfs\simulated\floor\misc_floor.dm"
#include "code\game\turfs\simulated\floor\plasteel_floor.dm"
#include "code\game\turfs\simulated\floor\plating.dm"
+#include "code\game\turfs\simulated\floor\reinf_floor.dm"
#include "code\game\turfs\simulated\floor\warning.dm"
+#include "code\game\turfs\simulated\floor\plating\asteroid.dm"
+#include "code\game\turfs\simulated\floor\plating\lava.dm"
+#include "code\game\turfs\simulated\floor\plating\misc_plating.dm"
+#include "code\game\turfs\simulated\wall\mineral_walls.dm"
+#include "code\game\turfs\simulated\wall\misc_walls.dm"
+#include "code\game\turfs\simulated\wall\reinf_walls.dm"
+#include "code\game\turfs\simulated\wall\shuttle_walls.dm"
#include "code\game\turfs\space\space.dm"
#include "code\game\turfs\space\transit.dm"
#include "code\js\byjax.dm"
@@ -1272,14 +1279,12 @@
#include "code\modules\mining\machine_vending.dm"
#include "code\modules\mining\mine_areas.dm"
#include "code\modules\mining\mine_items.dm"
-#include "code\modules\mining\mine_turfs.dm"
#include "code\modules\mining\minebot.dm"
#include "code\modules\mining\mint.dm"
#include "code\modules\mining\money_bag.dm"
#include "code\modules\mining\ores_coins.dm"
#include "code\modules\mining\satchel_ore_boxdm.dm"
#include "code\modules\mining\shelters.dm"
-#include "code\modules\mining\laborcamp\laborminerals.dm"
#include "code\modules\mining\laborcamp\laborshuttle.dm"
#include "code\modules\mining\laborcamp\laborstacker.dm"
#include "code\modules\mining\lavaland\ash_flora.dm"
@@ -1629,7 +1634,6 @@
#include "code\modules\power\apc.dm"
#include "code\modules\power\cable.dm"
#include "code\modules\power\cell.dm"
-#include "code\modules\power\engine.dm"
#include "code\modules\power\generator.dm"
#include "code\modules\power\gravitygenerator.dm"
#include "code\modules\power\lighting.dm"