Files
PollardTheDragon 4d5b0e1286 Crashed Vulpkanin Ship - Lavaland Ruin (#32110)
* Charon's Revolver

* Dog tags

* Ash Whelps

* Ash walkers and resist adjustment

* Some providence stuff

* Minor wording adjustment

* Desc change

* Ruin, salvage, and ruin assets

* linters

* Mo linters

* quick

* Various fixes

* Variety of fixes

* Update

* Naming

* FIX
2026-06-24 22:37:10 +00:00

143 lines
4.5 KiB
Plaintext

/// Wrapper spawner for lavaland fauna
/obj/effect/spawner/random/lavaland_fauna
loot = list(
/obj/effect/spawner/random/pool/lavaland_fauna,
/obj/effect/spawner/random/pool/lavaland_fauna/megafauna,
/obj/effect/spawner/random/pool/lavaland_fauna/megafauna/unique,
/obj/effect/spawner/random/pool/tendril_spawner,
)
/datum/spawn_pool/lavaland_fauna
/datum/spawn_pool/lavaland_fauna/New()
. = ..()
available_points = rand(100, 150)
/datum/spawn_pool/lavaland_megafauna
/datum/spawn_pool/lavaland_megafauna/New()
. = ..()
available_points = roll("8d3")
/obj/effect/spawner/random/pool/lavaland_fauna
spawn_pool = /datum/spawn_pool/lavaland_fauna
record_spawn = TRUE
var/fauna_scan_range = 12
var/megafauna_scan_range = 16
var/ghost_ruin_scan_range = 12
var/turf/mining_base_gps
loot = list(
list(
/obj/effect/landmark/mob_spawner/goliath,
/obj/effect/landmark/mob_spawner/legion,
/obj/effect/landmark/mob_spawner/watcher,
) = 3,
list(
/obj/effect/landmark/mob_spawner/abandoned_minebot,
/obj/effect/landmark/mob_spawner/ashwalker_npc,
/obj/effect/landmark/mob_spawner/goldgrub,
/obj/effect/landmark/mob_spawner/gutlunch,
/obj/effect/landmark/mob_spawner/ash_whelp,
) = 1,
)
/obj/effect/spawner/random/pool/lavaland_fauna/Initialize(mapload)
. = ..()
if(SSmapping.caves_theme)
fauna_scan_range = SSmapping.caves_theme.fauna_scan_range
megafauna_scan_range = SSmapping.caves_theme.megafauna_scan_range
for(var/obj/item/gps/ruin/mining_base/base_gps in GLOB.poi_list)
mining_base_gps = get_turf(base_gps)
break
/obj/effect/spawner/random/pool/lavaland_fauna/record_item(type_path_to_make)
if(ispath(type_path_to_make, /obj/effect/spawner/random/pool))
return
SSblackbox.record_feedback("tally", "lavaland_mob_spawns", 1, "[type_path_to_make]")
/obj/effect/spawner/random/pool/lavaland_fauna/check_safe(type_path_to_make)
var/turf/T = get_turf(src)
for(var/thing in urange(fauna_scan_range, T))
// avoid spawning a mob if there's another one within the scan range
if(istype(thing, /obj/effect/landmark/mob_spawner))
return FALSE
return ..()
/obj/effect/spawner/random/pool/lavaland_fauna/megafauna
spawn_pool = /datum/spawn_pool/lavaland_megafauna
point_value = 1
loot = list(
/mob/living/simple_animal/hostile/megafauna/dragon = 4,
/mob/living/simple_animal/hostile/megafauna/colossus = 2,
)
/obj/effect/spawner/random/pool/lavaland_fauna/megafauna/check_safe(type_path_to_make)
var/turf/T = get_turf(src)
var/area/A = get_area(T)
var/okay_area = istype(A, /area/lavaland/surface/outdoors/unexplored/danger)
var/okay_turf = TRUE
if(mining_base_gps && mining_base_gps.z == T.z)
okay_turf = get_dist(mining_base_gps, T) > 64
if(!okay_area || !okay_turf)
return FALSE
for(var/thing in urange(fauna_scan_range, T))
// avoid spawning a megafauna if there's another one within the scan range
if(ismegafauna(thing) && get_dist(T, thing) <= megafauna_scan_range)
return FALSE
for(var/obj/effect/landmark/ruin/ruin_landmark in GLOB.ruin_landmarks)
var/datum/map_template/ruin/template = ruin_landmark.ruin_template
// avoid spawning a megafauna if it's too close to a ghost spawn ruin
if(template.megafauna_safe_range)
// largest axis halved + the ruin scan range
var/exclusion_distance = (template.width > template.height ? template.width : template.height * 0.5) + ghost_ruin_scan_range
if(get_dist(T, ruin_landmark) < exclusion_distance)
return FALSE
return ..()
/obj/effect/spawner/random/pool/lavaland_fauna/megafauna/unique
unique_picks = TRUE
loot = list(
/mob/living/simple_animal/hostile/megafauna/bubblegum,
/mob/living/simple_animal/hostile/megafauna/ancient_robot,
)
/datum/spawn_pool/tendrils
/datum/spawn_pool/tendrils/New()
. = ..()
available_points = roll("5d4") + roll("1d6")
/obj/effect/spawner/random/pool/tendril_spawner
spawn_pool = /datum/spawn_pool/tendrils
point_value = 1
loot = list(
/obj/structure/spawner/lavaland,
/obj/structure/spawner/lavaland/goliath,
/obj/structure/spawner/lavaland/legion,
)
record_spawn = TRUE
/obj/effect/spawner/random/pool/tendril_spawner/record_item(type_path_to_make)
SSblackbox.record_feedback("tally", "lavaland_mob_spawns", 1, "[type_path_to_make]")
/obj/effect/spawner/random/pool/tendril_spawner/check_safe(type_path_to_make)
var/turf/T = get_turf(src)
for(var/thing in urange(10, T))
// prevents tendrils spawning in each other's collapse range
if(istype(thing, /obj/structure/spawner/lavaland) && get_dist(T, thing) <= LAVALAND_TENDRIL_COLLAPSE_RANGE)
return FALSE
return ..()