diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index a6ea566113..2ff2ec2c19 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -14,6 +14,7 @@ #define CLOSED_TURF_LAYER 2.05 #define ABOVE_NORMAL_TURF_LAYER 2.08 #define LATTICE_LAYER 2.2 +#define OVER_LATTICE_LAYER 2.25 #define DISPOSAL_PIPE_LAYER 2.3 #define GAS_PIPE_HIDDEN_LAYER 2.35 #define WIRE_LAYER 2.4 diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index 26c9941755..19cbc39986 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -116,6 +116,23 @@ underlay_appearance.icon_state = "necro1" return TRUE +/turf/closed/indestructible/riveted/boss + name = "stone wall" + desc = "A thick, seemingly indestructible stone wall." + icon = 'icons/turf/walls/boss_wall.dmi' + icon_state = "wall" + explosion_block = 50 + baseturf = /turf/closed/indestructible/riveted/boss + +/turf/closed/indestructible/riveted/boss/hot + icon = 'icons/turf/walls/boss_wall_hot.dmi' + baseturf = /turf/closed/indestructible/riveted/boss/hot + +/turf/closed/indestructible/riveted/boss/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + underlay_appearance.icon = 'icons/turf/floors.dmi' + underlay_appearance.icon_state = "basalt" + return TRUE + /turf/closed/indestructible/riveted/hierophant name = "wall" desc = "A wall made out of a strange metal. The squares on it pulse in a predictable pattern." diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm index cdc1284586..55dfffdb74 100644 --- a/code/game/turfs/simulated/chasm.dm +++ b/code/game/turfs/simulated/chasm.dm @@ -54,8 +54,16 @@ else to_chat(user, "The plating is going to need some support! Place metal rods first.") +/turf/open/chasm/proc/is_safe() + //if anything matching this typecache is found in the chasm, we don't drop things + var/static/list/chasm_safeties_typecache = typecacheof(list(/obj/structure/lattice/catwalk, /obj/structure/stone_tile)) + var/list/found_safeties = typecache_filter_list(contents, chasm_safeties_typecache) + return LAZYLEN(found_safeties) + /turf/open/chasm/proc/drop_stuff(AM) . = 0 + if(is_safe()) + return FALSE var/thing_to_check = src if(AM) thing_to_check = list(AM) diff --git a/code/game/turfs/simulated/floor/plating/lava.dm b/code/game/turfs/simulated/floor/plating/lava.dm index dbc73943a0..a9c46a0e70 100644 --- a/code/game/turfs/simulated/floor/plating/lava.dm +++ b/code/game/turfs/simulated/floor/plating/lava.dm @@ -54,7 +54,7 @@ /turf/open/floor/plating/lava/proc/is_safe() //if anything matching this typecache is found in the lava, we don't burn things - var/static/list/lava_safeties_typecache = typecacheof(list(/obj/structure/lattice/catwalk)) + var/static/list/lava_safeties_typecache = typecacheof(list(/obj/structure/lattice/catwalk, /obj/structure/stone_tile)) var/list/found_safeties = typecache_filter_list(contents, lava_safeties_typecache) return LAZYLEN(found_safeties) diff --git a/code/modules/mining/shelters.dm b/code/modules/mining/shelters.dm index 78ef880200..d902c34584 100644 --- a/code/modules/mining/shelters.dm +++ b/code/modules/mining/shelters.dm @@ -4,12 +4,14 @@ var/blacklisted_turfs var/whitelisted_turfs var/banned_areas + var/banned_objects /datum/map_template/shelter/New() . = ..() blacklisted_turfs = typecacheof(/turf/closed) whitelisted_turfs = list() banned_areas = typecacheof(/area/shuttle) + banned_objects = list() /datum/map_template/shelter/proc/check_deploy(turf/deploy_location) var/affected = get_affected_turfs(deploy_location, centered=TRUE) @@ -24,7 +26,7 @@ return SHELTER_DEPLOY_BAD_TURFS for(var/obj/O in T) - if(O.density && O.anchored) + if((O.density && O.anchored) || is_type_in_typecache(O, banned_objects)) return SHELTER_DEPLOY_ANCHORED_OBJECTS return SHELTER_DEPLOY_ALLOWED @@ -40,7 +42,7 @@ /datum/map_template/shelter/alpha/New() . = ..() whitelisted_turfs = typecacheof(/turf/closed/mineral) - + banned_objects = typecacheof(/obj/structure/stone_tile) /datum/map_template/shelter/beta name = "Shelter Beta" @@ -55,3 +57,4 @@ /datum/map_template/shelter/beta/New() . = ..() whitelisted_turfs = typecacheof(/turf/closed/mineral) + banned_objects = typecacheof(/obj/structure/stone_tile) diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index 2938f9263c..3eb00a8db4 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -60,3 +60,168 @@ . = ..() else return QDEL_HINT_LETMELIVE + +//stone tiles for boss arenas +/obj/structure/stone_tile + name = "stone tile" + icon = 'icons/turf/boss_floors.dmi' + icon_state = "pristine_tile1" + layer = OVER_LATTICE_LAYER + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + var/tile_key = "pristine_tile" + var/tile_random_sprite_max = 24 + +/obj/structure/stone_tile/Initialize(mapload) + . = ..() + icon_state = "[tile_key][rand(1, tile_random_sprite_max)]" + +/obj/structure/stone_tile/block + name = "stone block" + icon_state = "pristine_block1" + tile_key = "pristine_block" + tile_random_sprite_max = 4 + +/obj/structure/stone_tile/slab + name = "stone slab" + icon_state = "pristine_slab1" + tile_key = "pristine_slab" + tile_random_sprite_max = 4 + +/obj/structure/stone_tile/center + name = "stone center tile" + icon_state = "pristine_center1" + tile_key = "pristine_center" + tile_random_sprite_max = 4 + +/obj/structure/stone_tile/surrounding + name = "stone surrounding slab" + icon_state = "pristine_surrounding1" + tile_key = "pristine_surrounding" + tile_random_sprite_max = 2 + +/obj/structure/stone_tile/surrounding_tile + name = "stone surrounding tile" + icon_state = "pristine_surrounding_tile1" + tile_key = "pristine_surrounding_tile" + tile_random_sprite_max = 2 + +//cracked stone tiles +/obj/structure/stone_tile/cracked + name = "cracked stone tile" + icon_state = "cracked_tile1" + tile_key = "cracked_tile" + +/obj/structure/stone_tile/block/cracked + name = "cracked stone block" + icon_state = "cracked_block1" + tile_key = "cracked_block" + +/obj/structure/stone_tile/slab/cracked + name = "cracked stone slab" + icon_state = "cracked_slab1" + tile_key = "cracked_slab" + tile_random_sprite_max = 1 + +/obj/structure/stone_tile/center/cracked + name = "cracked stone center tile" + icon_state = "cracked_center1" + tile_key = "cracked_center" + +/obj/structure/stone_tile/surrounding/cracked + name = "cracked stone surrounding slab" + icon_state = "cracked_surrounding1" + tile_key = "cracked_surrounding" + tile_random_sprite_max = 1 + +/obj/structure/stone_tile/surrounding_tile/cracked + name = "cracked stone surrounding tile" + icon_state = "cracked_surrounding_tile1" + tile_key = "cracked_surrounding_tile" + +//burnt stone tiles +/obj/structure/stone_tile/burnt + name = "burnt stone tile" + icon_state = "burnt_tile1" + tile_key = "burnt_tile" + +/obj/structure/stone_tile/block/burnt + name = "burnt stone block" + icon_state = "burnt_block1" + tile_key = "burnt_block" + +/obj/structure/stone_tile/slab/burnt + name = "burnt stone slab" + icon_state = "burnt_slab1" + tile_key = "burnt_slab" + +/obj/structure/stone_tile/center/burnt + name = "burnt stone center tile" + icon_state = "burnt_center1" + tile_key = "burnt_center" + +/obj/structure/stone_tile/surrounding/burnt + name = "burnt stone surrounding slab" + icon_state = "burnt_surrounding1" + tile_key = "burnt_surrounding" + +/obj/structure/stone_tile/surrounding_tile/burnt + name = "burnt stone surrounding tile" + icon_state = "burnt_surrounding_tile1" + tile_key = "burnt_surrounding_tile" + +//hot stone tiles, cosmetic only +/obj/structure/stone_tile/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/block/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/slab/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/center/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/surrounding/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/surrounding_tile/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +//hot cracked stone tiles, cosmetic only +/obj/structure/stone_tile/cracked/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/block/cracked/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/slab/cracked/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/center/cracked/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/surrounding/cracked/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/surrounding_tile/cracked/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +//hot burnt stone tiles, cosmetic only +/obj/structure/stone_tile/burnt/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/block/burnt/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/slab/burnt/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/center/burnt/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/surrounding/burnt/hot + icon = 'icons/turf/boss_floors_hot.dmi' + +/obj/structure/stone_tile/surrounding_tile/burnt/hot + icon = 'icons/turf/boss_floors_hot.dmi' diff --git a/icons/turf/boss_floors.dmi b/icons/turf/boss_floors.dmi new file mode 100644 index 0000000000..31c6707609 Binary files /dev/null and b/icons/turf/boss_floors.dmi differ diff --git a/icons/turf/boss_floors_hot.dmi b/icons/turf/boss_floors_hot.dmi new file mode 100644 index 0000000000..0b9e4f8660 Binary files /dev/null and b/icons/turf/boss_floors_hot.dmi differ diff --git a/icons/turf/walls/boss_wall.dmi b/icons/turf/walls/boss_wall.dmi new file mode 100644 index 0000000000..2953197251 Binary files /dev/null and b/icons/turf/walls/boss_wall.dmi differ diff --git a/icons/turf/walls/boss_wall_hot.dmi b/icons/turf/walls/boss_wall_hot.dmi new file mode 100644 index 0000000000..b4c423693a Binary files /dev/null and b/icons/turf/walls/boss_wall_hot.dmi differ