diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm index 557739642a5..fd9551784ec 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm @@ -151,7 +151,7 @@ /turf/open/floor/plating, /area/ruin/powered/hermit) "YN" = ( -/turf/closed/mineral/snowmountain/icemoon, +/turf/closed/mineral/snowmountain/icemoon/unscrapeable, /area/icemoon/underground/explored) (1,1,1) = {" @@ -400,7 +400,7 @@ YN YN YN YN -aM +YN Rr aM aM diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 453d3373b28..dfe85cd97bf 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -97,6 +97,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define NO_RUST (1<<5) /// Is this turf is "solid". Space and lava aren't for instance #define IS_SOLID (1<<6) +/// This turf will never be cleared away by other objects on Initialize. +#define NO_CLEARING (1<<7) ////////////////Area flags\\\\\\\\\\\\\\ /// If it's a valid territory for cult summoning or the CRAB-17 phone to spawn diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm index a6c8af1cda9..85e795b497f 100644 --- a/code/game/objects/structures/icemoon/cave_entrance.dm +++ b/code/game/objects/structures/icemoon/cave_entrance.dm @@ -26,16 +26,16 @@ GLOBAL_LIST_INIT(ore_probability, list( clear_rock() /** - * Clears rocks around the spawner when it is created + * Clears rocks around the spawner when it is created. Ignore any rocks that explicitly do not want to be cleared. * */ /obj/structure/spawner/ice_moon/proc/clear_rock() - for(var/turf/F in RANGE_TURFS(2, src)) - if(abs(src.x - F.x) + abs(src.y - F.y) > 3) + for(var/turf/potential in RANGE_TURFS(2, src)) + if(abs(src.x - potential.x) + abs(src.y - potential.y) > 3) continue - if(ismineralturf(F)) - var/turf/closed/mineral/M = F - M.ScrapeAway(null, CHANGETURF_IGNORE_AIR) + if(ismineralturf(potential) && !(potential.turf_flags & NO_CLEARING)) + var/turf/closed/mineral/clearable = potential + clearable.ScrapeAway(flags = CHANGETURF_IGNORE_AIR) /obj/structure/spawner/ice_moon/deconstruct(disassembled) destroy_effect() @@ -67,10 +67,10 @@ GLOBAL_LIST_INIT(ore_probability, list( mob_types = list(/mob/living/simple_animal/hostile/asteroid/polarbear) /obj/structure/spawner/ice_moon/polarbear/clear_rock() - for(var/turf/F in RANGE_TURFS(1, src)) - if(ismineralturf(F)) - var/turf/closed/mineral/M = F - M.ScrapeAway(null, CHANGETURF_IGNORE_AIR) + for(var/turf/potential in RANGE_TURFS(1, src)) + if(ismineralturf(potential) && !(potential.turf_flags & NO_CLEARING)) + var/turf/closed/mineral/clearable = potential + clearable.ScrapeAway(flags = CHANGETURF_IGNORE_AIR) /obj/structure/spawner/ice_moon/demonic_portal name = "demonic portal" @@ -85,12 +85,12 @@ GLOBAL_LIST_INIT(ore_probability, list( AddComponent(/datum/component/gps, "Netheric Signal") /obj/structure/spawner/ice_moon/demonic_portal/clear_rock() - for(var/turf/F in RANGE_TURFS(3, src)) - if(abs(src.x - F.x) + abs(src.y - F.y) > 5) + for(var/turf/potential in RANGE_TURFS(3, src)) + if(abs(src.x - potential.x) + abs(src.y - potential.y) > 5) continue - if(ismineralturf(F)) - var/turf/closed/mineral/M = F - M.ScrapeAway(null, CHANGETURF_IGNORE_AIR) + if(ismineralturf(potential) && !(potential.turf_flags & NO_CLEARING)) + var/turf/closed/mineral/clearable = potential + clearable.ScrapeAway(flags = CHANGETURF_IGNORE_AIR) /obj/structure/spawner/ice_moon/demonic_portal/destroy_effect() new /obj/effect/collapsing_demonic_portal(loc) diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index 7f9b535a826..2b39cabce99 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -599,6 +599,12 @@ baseturfs = /turf/open/misc/asteroid/snow/icemoon initial_gas_mix = ICEMOON_DEFAULT_ATMOS +/// This snowy mountain will never be scraped away for any reason what so ever. +/turf/closed/mineral/snowmountain/icemoon/unscrapeable + turf_flags = IS_SOLID | NO_CLEARING + turf_type = /turf/open/misc/asteroid/snow/icemoon/do_not_scrape + baseturfs = /turf/open/misc/asteroid/snow/icemoon/do_not_scrape + /turf/closed/mineral/snowmountain/cavern name = "ice cavern rock" icon = MAP_SWITCH('icons/turf/walls/icerock_wall.dmi', 'icons/turf/mining.dmi') diff --git a/code/game/turfs/open/asteroid.dm b/code/game/turfs/open/asteroid.dm index bf8e5a927be..093d20ae43c 100644 --- a/code/game/turfs/open/asteroid.dm +++ b/code/game/turfs/open/asteroid.dm @@ -200,7 +200,10 @@ GLOBAL_LIST_EMPTY(dug_up_basalt) /// Exact subtype as parent, just used in ruins to prevent other ruins/chasms from spawning on top of it. /turf/open/misc/asteroid/snow/icemoon/do_not_chasm - turf_flags = NO_RUINS + turf_flags = CAN_BE_DIRTY_1 | IS_SOLID | NO_RUST | NO_RUINS + +/turf/open/misc/asteroid/snow/icemoon/do_not_scrape + turf_flags = CAN_BE_DIRTY_1 | IS_SOLID | NO_RUST | NO_CLEARING /turf/open/lava/plasma/ice_moon initial_gas_mix = ICEMOON_DEFAULT_ATMOS