Fixes fauna / spawners rarely spawning in walls (#22283)

* fixes rare oaisis generation not working well

* re-adds circle range turfs
This commit is contained in:
Qwertytoforty
2023-09-13 20:47:40 +01:00
committed by GitHub
parent 54161357f8
commit 80234bead8
2 changed files with 26 additions and 5 deletions
+12
View File
@@ -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)
@@ -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)