diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 548877ea656..31d8c66207d 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -139,6 +139,18 @@ turfs += T return turfs +/proc/circlerangeturfs(center = usr, radius = 3) + + var/turf/centerturf = get_turf(center) + var/list/turfs = new/list() + var/rsq = radius * (radius + 0.5) + + for(var/turf/T in range(radius, centerturf)) + var/dx = T.x - centerturf.x + var/dy = T.y - centerturf.y + if(dx * dx + dy * dy <= rsq) + turfs += T + return turfs //GLOBAL_VAR_INIT(debug_mob, 0) diff --git a/code/game/turfs/simulated/floor/asteroid_floors.dm b/code/game/turfs/simulated/floor/asteroid_floors.dm index 1e0d0a21d6b..194a7588b74 100644 --- a/code/game/turfs/simulated/floor/asteroid_floors.dm +++ b/code/game/turfs/simulated/floor/asteroid_floors.dm @@ -307,18 +307,27 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me /obj/effect/spawner/oasisrock name = "Oasis rock spawner" + var/passed_radius /obj/effect/spawner/oasisrock/Initialize(mapload, radius) . = ..() + passed_radius = radius + return INITIALIZE_HINT_LATELOAD - addtimer(CALLBACK(src, PROC_REF(make_rock), radius), 5 SECONDS) +/obj/effect/spawner/oasisrock/LateInitialize() //Let us try this for a moment. + . = ..() + addtimer(CALLBACK(src, PROC_REF(make_rock), passed_radius), 5 SECONDS) /obj/effect/spawner/oasisrock/proc/make_rock(radius) - for(var/turf/oasis in circleviewturfs(get_turf(src), radius)) + var/our_turf = get_turf(src) + for(var/turf/oasis in circlerangeturfs(our_turf, radius)) oasis.ChangeTurf(/turf/simulated/mineral/random/high_chance/volcanic, ignore_air = TRUE) - var/list/valid_turfs = RANGE_EDGE_TURFS(radius + 2, src) - for(var/mob/M in range(src, radius)) //We don't want mobs inside the ore rock - M.forceMove(pick(valid_turfs)) + var/list/valid_turfs = circlerangeturfs(our_turf, radius + 1) + valid_turfs -= circlerangeturfs(our_turf, radius) + for(var/mob/M in circlerange(src, radius)) //We don't want mobs inside the ore rock + M.forceMove(pick_n_take(valid_turfs)) + for(var/obj/structure/spawner/lavaland/O in circlerange(src, radius)) //We don't want tendrils in there either + O.forceMove(pick_n_take(valid_turfs)) qdel(src) /turf/simulated/floor/plating/asteroid/airless/cave/proc/SpawnFloor(turf/T, monsterprob = 30)