diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm
index 9012e0a8586..762e3df9dbe 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm
@@ -4,6 +4,7 @@
/area/template_noop)
"b" = (
/turf/open/floor/engine/cult{
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface;
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/unpowered)
@@ -36,12 +37,14 @@
triggerer_only = 1
},
/turf/open/floor/engine/cult{
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface;
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/unpowered)
"h" = (
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/engine/cult{
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface;
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/unpowered)
@@ -49,6 +52,7 @@
/obj/effect/decal/remains/human,
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/engine/cult{
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface;
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/unpowered)
@@ -65,6 +69,7 @@
/obj/effect/decal/remains/human,
/obj/item/weapon/melee/cultblade,
/turf/open/floor/engine/cult{
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface;
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/unpowered)
@@ -73,12 +78,14 @@
/obj/item/clothing/shoes/cult,
/obj/item/clothing/suit/cultrobes,
/turf/open/floor/engine/cult{
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface;
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/unpowered)
"m" = (
/obj/effect/decal/remains/human,
/turf/open/floor/engine/cult{
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface;
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/unpowered)
@@ -95,6 +102,7 @@
triggerer_only = 1
},
/turf/open/floor/engine/cult{
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface;
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/unpowered)
@@ -117,6 +125,7 @@
name = "ohfuck"
},
/turf/open/floor/engine/cult{
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface;
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/unpowered)
@@ -133,6 +142,7 @@
triggerer_only = 1
},
/turf/open/floor/engine/cult{
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface;
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/unpowered)
@@ -142,6 +152,7 @@
/obj/item/clothing/suit/cultrobes,
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/engine/cult{
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface;
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/unpowered)
@@ -158,6 +169,7 @@
triggerer_only = 1
},
/turf/open/floor/engine/cult{
+ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface;
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/area/ruin/unpowered)
diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm
index 549c593fcd1..d3573c3e30b 100644
--- a/_maps/map_files/DreamStation/dreamstation04.dmm
+++ b/_maps/map_files/DreamStation/dreamstation04.dmm
@@ -42441,7 +42441,7 @@
/obj/structure/bookcase{
name = "Forbidden Knowledge"
},
-/turf/open/floor/plasteel/cult,
+/turf/open/floor/engine/cult,
/area/library)
"bGN" = (
/obj/structure/table/wood,
@@ -42459,7 +42459,7 @@
pixel_y = 20;
tag = "NORTH"
},
-/turf/open/floor/plasteel/cult,
+/turf/open/floor/engine/cult,
/area/library)
"bGO" = (
/obj/structure/table/wood,
@@ -42469,7 +42469,7 @@
tag = "every single paper bin is edited to this"
},
/obj/item/weapon/pen/invisible,
-/turf/open/floor/plasteel/cult,
+/turf/open/floor/engine/cult,
/area/library)
"bGP" = (
/obj/structure/table,
@@ -43659,19 +43659,19 @@
/turf/open/floor/wood,
/area/library)
"bIO" = (
-/turf/open/floor/plasteel/cult,
+/turf/open/floor/engine/cult,
/area/library)
"bIP" = (
/obj/structure/chair/comfy/brown{
dir = 1
},
-/turf/open/floor/plasteel/cult,
+/turf/open/floor/engine/cult,
/area/library)
"bIQ" = (
/obj/structure/destructible/cult/tome,
/obj/item/clothing/under/suit_jacket/red,
/obj/item/weapon/book/codex_gigas,
-/turf/open/floor/plasteel/cult,
+/turf/open/floor/engine/cult,
/area/library)
"bIR" = (
/obj/structure/filingcabinet/chestdrawer/wheeled,
@@ -44499,7 +44499,7 @@
name = "Private Study";
req_access_txt = "37"
},
-/turf/open/floor/plasteel/cult,
+/turf/open/floor/engine/cult,
/area/library)
"bKs" = (
/obj/structure/cable/green{
diff --git a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm
index 76a4c20c068..45e4e748284 100644
--- a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm
+++ b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm
@@ -34136,7 +34136,7 @@
name = "Private Study";
req_access_txt = "37"
},
-/turf/open/floor/plasteel/cult,
+/turf/open/floor/engine/cult,
/area/library)
"bqq" = (
/obj/structure/cable{
@@ -35086,13 +35086,13 @@
/obj/machinery/light/small{
dir = 8
},
-/turf/open/floor/plasteel/cult,
+/turf/open/floor/engine/cult,
/area/library)
"bsg" = (
/obj/structure/bookcase{
name = "Forbidden Knowledge"
},
-/turf/open/floor/plasteel/cult,
+/turf/open/floor/engine/cult,
/area/library)
"bsh" = (
/obj/structure/cable{
@@ -35658,7 +35658,7 @@
/obj/effect/landmark/start{
name = "Librarian"
},
-/turf/open/floor/plasteel/cult,
+/turf/open/floor/engine/cult,
/area/library)
"bts" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -35669,7 +35669,7 @@
pixel_x = 27
},
/obj/structure/table/wood,
-/turf/open/floor/plasteel/cult,
+/turf/open/floor/engine/cult,
/area/library)
"btt" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
@@ -36383,7 +36383,7 @@
"buT" = (
/obj/structure/destructible/cult/tome,
/obj/item/weapon/book/codex_gigas,
-/turf/open/floor/plasteel/cult,
+/turf/open/floor/engine/cult,
/area/library)
"buU" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber{
@@ -36398,7 +36398,7 @@
},
/obj/item/weapon/pen/invisible,
/obj/structure/table/wood,
-/turf/open/floor/plasteel/cult,
+/turf/open/floor/engine/cult,
/area/library)
"buV" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index f25d8561ab5..acb3495e542 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -54759,9 +54759,7 @@
name = "Private Study";
req_access_txt = "37"
},
-/turf/open/floor/plasteel/cult{
- dir = 2
- },
+/turf/open/floor/engine/cult,
/area/library)
"bQz" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -55659,15 +55657,11 @@
},
/obj/item/clothing/under/suit_jacket/red,
/obj/effect/decal/cleanable/cobweb,
-/turf/open/floor/plasteel/cult{
- dir = 2
- },
+/turf/open/floor/engine/cult,
/area/library)
"bSi" = (
/obj/structure/chair/comfy/brown,
-/turf/open/floor/plasteel/cult{
- dir = 2
- },
+/turf/open/floor/engine/cult,
/area/library)
"bSj" = (
/obj/effect/landmark{
@@ -55680,9 +55674,7 @@
pixel_x = 30;
pixel_y = 0
},
-/turf/open/floor/plasteel/cult{
- dir = 2
- },
+/turf/open/floor/engine/cult,
/area/library)
"bSk" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -56428,9 +56420,7 @@
pixel_y = 7
},
/obj/item/weapon/pen/invisible,
-/turf/open/floor/plasteel/cult{
- dir = 2
- },
+/turf/open/floor/engine/cult,
/area/library)
"bTy" = (
/obj/item/device/taperecorder{
@@ -56441,17 +56431,13 @@
pixel_y = -25
},
/obj/structure/table/wood,
-/turf/open/floor/plasteel/cult{
- dir = 2
- },
+/turf/open/floor/engine/cult,
/area/library)
"bTz" = (
/obj/structure/bookcase{
name = "Forbidden Knowledge"
},
-/turf/open/floor/plasteel/cult{
- dir = 2
- },
+/turf/open/floor/engine/cult,
/area/library)
"bTA" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm
index 17018008b60..d0a60035e80 100644
--- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm
+++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm
@@ -18572,9 +18572,7 @@
/obj/structure/bookcase{
name = "Forbidden Knowledge"
},
-/turf/open/floor/plasteel/cult{
- dir = 2
- },
+/turf/open/floor/engine/cult,
/area/library)
"aPh" = (
/obj/structure/table/wood,
@@ -18583,9 +18581,7 @@
pixel_y = 7
},
/obj/item/weapon/pen/invisible,
-/turf/open/floor/plasteel/cult{
- dir = 2
- },
+/turf/open/floor/engine/cult,
/area/library)
"aPi" = (
/obj/structure/table/wood,
@@ -18596,9 +18592,7 @@
/obj/item/device/radio/intercom{
pixel_y = 25
},
-/turf/open/floor/plasteel/cult{
- dir = 2
- },
+/turf/open/floor/engine/cult,
/area/library)
"aPj" = (
/obj/machinery/light_switch{
@@ -19054,17 +19048,13 @@
/area/library)
"aQr" = (
/obj/machinery/light/small,
-/turf/open/floor/plasteel/cult{
- dir = 2
- },
+/turf/open/floor/engine/cult,
/area/library)
"aQs" = (
/obj/structure/destructible/cult/tome,
/obj/item/clothing/under/suit_jacket/red,
/obj/item/weapon/book/codex_gigas,
-/turf/open/floor/plasteel/cult{
- dir = 2
- },
+/turf/open/floor/engine/cult,
/area/library)
"aQt" = (
/obj/effect/landmark{
@@ -19073,9 +19063,7 @@
/obj/structure/chair/comfy/brown{
dir = 1
},
-/turf/open/floor/plasteel/cult{
- dir = 2
- },
+/turf/open/floor/engine/cult,
/area/library)
"aQu" = (
/turf/open/floor/plasteel/chapel,
@@ -19576,9 +19564,7 @@
name = "Private Study";
req_access_txt = "37"
},
-/turf/open/floor/plasteel/cult{
- dir = 2
- },
+/turf/open/floor/engine/cult,
/area/library)
"aRR" = (
/obj/machinery/firealarm{
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index cb02199d9c6..2c9ebb0f9ba 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -97,93 +97,3 @@
user << "You fail to climb onto [src]."
density = 1
structureclimber = null
-
-/obj/structure/destructible //a base for destructible structures
- var/max_health = 100
- var/health = 100
- var/takes_damage = TRUE //If the structure can be damaged
- var/break_message = "The strange, admin-y structure breaks!" //The message shown when a structure breaks
- var/break_sound = 'sound/magic/clockwork/invoke_general.ogg' //The sound played when a structure breaks
- var/list/debris = list() //Parts left behind when a structure breaks
-
-/obj/structure/destructible/proc/take_damage(amount, damage_type)
- if(!amount || !damage_type || !damage_type in list(BRUTE, BURN))
- return 0
- if(takes_damage)
- health = max(0, health - amount)
- if(!health)
- destroyed()
- return 1
- return 0
-
-/obj/structure/destructible/proc/destroyed()
- if(!takes_damage)
- return 0
- for(var/I in debris)
- for(var/i in 1 to debris[I])
- new I (get_turf(src))
- visible_message(break_message)
- playsound(src, break_sound, 50, 1)
- qdel(src)
- return 1
-
-/obj/structure/destructible/burn()
- SSobj.burning -= src
- if(takes_damage)
- playsound(src, 'sound/items/Welder.ogg', 100, 1)
- visible_message("[src] is warped by the heat!")
- take_damage(rand(50, 100), BURN)
-
-/obj/structure/destructible/ex_act(severity)
- var/damage = 0
- switch(severity)
- if(1)
- damage = max_health //100% max health lost
- if(2)
- damage = max_health * (0.01 * rand(50, 70)) //50-70% max health lost
- if(3)
- damage = max_health * (0.01 * rand(10, 30)) //10-30% max health lost
- if(damage)
- take_damage(damage, BRUTE)
-
-/obj/structure/destructible/bullet_act(obj/item/projectile/P)
- . = ..()
- visible_message("[src] is hit by \a [P]!")
- playsound(src, P.hitsound, 50, 1)
- take_damage(P.damage, P.damage_type)
-
-/obj/structure/destructible/proc/attack_generic(mob/user, damage = 0, damage_type = BRUTE) //used by attack_alien, attack_animal, and attack_slime
- user.do_attack_animation(src)
- user.changeNext_move(CLICK_CD_MELEE)
- user.visible_message("[user] smashes into [src]!")
- take_damage(damage, damage_type)
-
-/obj/structure/destructible/attack_alien(mob/living/user)
- playsound(src, 'sound/weapons/bladeslice.ogg', 50, 1)
- attack_generic(user, 15)
-
-/obj/structure/destructible/attack_animal(mob/living/simple_animal/M)
- if(!M.melee_damage_upper && !M.obj_damage)
- return
- playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
- if(M.obj_damage)
- attack_generic(M, M.obj_damage, M.melee_damage_type)
- else
- attack_generic(M, M.melee_damage_upper, M.melee_damage_type)
-
-/obj/structure/destructible/attack_slime(mob/living/simple_animal/slime/user)
- if(!user.is_adult)
- return
- playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
- attack_generic(user, rand(10, 15))
-
-/obj/structure/destructible/attacked_by(obj/item/I, mob/living/user)
- . = ..()
- if(I.force && takes_damage)
- playsound(src, I.hitsound, 50, 1)
- take_damage(I.force, I.damtype)
-
-/obj/structure/destructible/mech_melee_attack(obj/mecha/M)
- if(..())
- playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
- take_damage(M.force, M.damtype)
diff --git a/code/game/objects/structures/destructible_structures.dm b/code/game/objects/structures/destructible_structures.dm
new file mode 100644
index 00000000000..688715f5202
--- /dev/null
+++ b/code/game/objects/structures/destructible_structures.dm
@@ -0,0 +1,89 @@
+/obj/structure/destructible //a base for destructible structures
+ var/max_health = 100
+ var/health = 100
+ var/takes_damage = TRUE //If the structure can be damaged
+ var/break_message = "The strange, admin-y structure breaks!" //The message shown when a structure breaks
+ var/break_sound = 'sound/magic/clockwork/invoke_general.ogg' //The sound played when a structure breaks
+ var/list/debris = null //Parts left behind when a structure breaks, takes the form of list(path = amount_to_spawn)
+
+/obj/structure/destructible/proc/take_damage(amount, damage_type)
+ var/static/list/physical_damage_types = list(BRUTE = TRUE, BURN = TRUE)
+ if(!takes_damage || !amount || !damage_type || !physical_damage_types[damage_type])
+ return 0
+ health = max(0, health - amount)
+ if(!health)
+ destroyed()
+ return amount
+
+/obj/structure/destructible/proc/destroyed()
+ if(!takes_damage)
+ return 0
+ if(islist(debris))
+ for(var/I in debris)
+ for(var/i in 1 to debris[I])
+ new I (get_turf(src))
+ visible_message(break_message)
+ playsound(src, break_sound, 50, 1)
+ qdel(src)
+ return 1
+
+/obj/structure/destructible/burn()
+ SSobj.burning -= src
+ if(takes_damage)
+ playsound(src, 'sound/items/Welder.ogg', 100, 1)
+ visible_message("[src] is warped by the heat!")
+ take_damage(rand(50, 100), BURN)
+
+/obj/structure/destructible/ex_act(severity)
+ var/damage = 0
+ switch(severity)
+ if(1)
+ damage = max_health //100% max health lost
+ if(2)
+ damage = max_health * (0.01 * rand(50, 70)) //50-70% max health lost
+ if(3)
+ damage = max_health * (0.01 * rand(10, 30)) //10-30% max health lost
+ if(damage)
+ take_damage(damage, BRUTE)
+
+/obj/structure/destructible/bullet_act(obj/item/projectile/P)
+ . = ..()
+ visible_message("[src] is hit by \a [P]!")
+ playsound(src, P.hitsound, 50, 1)
+ take_damage(P.damage, P.damage_type)
+
+/obj/structure/destructible/proc/attack_generic(mob/user, damage = 0, damage_type = BRUTE) //used by attack_alien, attack_animal, and attack_slime
+ user.do_attack_animation(src)
+ user.changeNext_move(CLICK_CD_MELEE)
+ user.visible_message("[user] smashes into [src]!")
+ take_damage(damage, damage_type)
+
+/obj/structure/destructible/attack_alien(mob/living/user)
+ playsound(src, 'sound/weapons/bladeslice.ogg', 50, 1)
+ attack_generic(user, 15)
+
+/obj/structure/destructible/attack_animal(mob/living/simple_animal/M)
+ if(!M.melee_damage_upper && !M.obj_damage)
+ return
+ playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
+ if(M.obj_damage)
+ attack_generic(M, M.obj_damage, M.melee_damage_type)
+ else
+ attack_generic(M, M.melee_damage_upper, M.melee_damage_type)
+
+/obj/structure/destructible/attack_slime(mob/living/simple_animal/slime/user)
+ if(!user.is_adult)
+ return
+ playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
+ attack_generic(user, rand(10, 15))
+
+/obj/structure/destructible/attacked_by(obj/item/I, mob/living/user)
+ . = ..()
+ var/turf/T = get_turf(src)
+ if(take_damage(I.force, I.damtype))
+ playsound(T, I.hitsound, 50, 1)
+
+/obj/structure/destructible/mech_melee_attack(obj/mecha/M)
+ if(..())
+ playsound(src, 'sound/weapons/punch4.ogg', 50, 1)
+ take_damage(M.force, M.damtype)