mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 21:48:21 +01:00
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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user