mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-10 06:34:45 +01:00
4d5b0e1286
* 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
143 lines
4.5 KiB
Plaintext
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 ..()
|