From eec5ca08231851822ec075e28cf0cce584a1782b Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Thu, 8 Sep 2016 10:13:13 -0400 Subject: [PATCH] that which is done is done --- .../LavaRuins/lavaland_surface_cultaltar.dmm | 12 +++ .../map_files/DreamStation/dreamstation04.dmm | 14 +-- .../EfficiencyStation/EfficiencyStation.dmm | 14 +-- _maps/map_files/MetaStation/MetaStation.dmm | 28 ++---- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 28 ++---- code/game/objects/structures.dm | 90 ------------------- .../structures/destructible_structures.dm | 89 ++++++++++++++++++ 7 files changed, 129 insertions(+), 146 deletions(-) create mode 100644 code/game/objects/structures/destructible_structures.dm 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)