mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 19:44:09 +01:00
Adds a lavaland and a space ruin, adds a "nest" structure (#18508)
* Adds goliath/grub lavaland ruin * Adds syndicate drug lab ruin * Fixes nest.dm issues * Fixes APC init Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> * Satisfies linter * Addresses AA review * Addresses Farie and AA reviews * Missed a \the * Adds comments * Made the warning message stand out more * Removes redundant initial desc * Moves APC vars out of init Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com> * Replaces plating with airless plating Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
// Nests spawn mobs and objects when crossed by players.
|
||||
|
||||
// Once a nest is triggered, it picks a mob from 'spawn_mob_options', then
|
||||
// looks around in 'spawn_trigger_distance' distance and activates all nests
|
||||
// in that area. After a few seconds, the selected mob spawns from every
|
||||
// triggered nest, alongside with some items dictated by 'spawn_byproduct'.
|
||||
// Once spawned, the nests become inactive by the 'spawn_is_triggered' variable
|
||||
// becoming TRUE.
|
||||
|
||||
/obj/structure/nest
|
||||
name = "tunnel"
|
||||
desc = "A twisted, dark passage to the underground."
|
||||
icon = 'icons/mob/nest.dmi'
|
||||
icon_state = "hole"
|
||||
|
||||
move_resist = INFINITY
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
|
||||
var/faction = list("hostile") // If you spawn auto-attacking mobs, make sure that their faction and the nest's is the same
|
||||
var/spawn_byproduct = list(/obj/item/stack/ore/glass, /obj/item/stack/ore/iron) // When mobs spawn, these items also spawn on top of the tunnel
|
||||
var/spawn_byproduct_max = 3 // Maximum number of item spawns
|
||||
var/spawn_is_triggered = FALSE // This is set to TRUE once the nest is triggered, preventing multiple triggers; set it to FALSE to re-activate it
|
||||
var/spawn_max = 2 // Maximum number of mob spawns
|
||||
var/spawn_mob_options = list(/mob/living/simple_animal/crab) // The nest picks one mob type of this list and spawns them
|
||||
var/spawn_trigger_distance = 7 // The triggered nest will look this many tiles around itself to find other triggerable nests
|
||||
|
||||
/obj/structure/nest/examine(mob/user)
|
||||
. = ..()
|
||||
if(!spawn_is_triggered)
|
||||
. += "<span class='warning'>You can hear a cacophony of growling snores from within.</span>"
|
||||
|
||||
/obj/structure/nest/attack_animal(mob/living/simple_animal/M)
|
||||
if(faction_check(faction, M.faction, FALSE) && !M.client)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/structure/nest/Crossed(atom/movable/AM)
|
||||
if(spawn_is_triggered)
|
||||
return
|
||||
if(!isliving(AM))
|
||||
return
|
||||
var/mob/living/L = AM
|
||||
if(!L.mind)
|
||||
return
|
||||
|
||||
try_spawn(L)
|
||||
|
||||
/obj/structure/nest/proc/try_spawn(mob/living/L)
|
||||
var/chosen_mob = pick(spawn_mob_options)
|
||||
|
||||
to_chat(L, "<span class='danger'>As you stumble across \the [name], you can hear ominous rumbling from beneath your feet!</span>")
|
||||
playsound(src, 'sound/effects/break_stone.ogg', 50, 1)
|
||||
for(var/obj/structure/nest/N in range(spawn_trigger_distance, src))
|
||||
N.spawn_is_triggered = TRUE
|
||||
addtimer(CALLBACK(N, /obj/structure/nest/.proc/spawn_mob, chosen_mob), rand(2, 5) SECONDS)
|
||||
|
||||
/obj/structure/nest/proc/spawn_mob(mob/M)
|
||||
var/byproduct = pick(spawn_byproduct)
|
||||
new byproduct(get_turf(src), rand(1, spawn_byproduct_max))
|
||||
|
||||
for(var/i in 1 to spawn_max)
|
||||
var/mob/spawned_mob = new M(get_turf(src))
|
||||
visible_message("<span class='danger'>\A [spawned_mob.name] crawls out of \the [name]!</span>")
|
||||
|
||||
/obj/structure/nest/lavaland
|
||||
spawn_mob_options = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast, /mob/living/simple_animal/hostile/asteroid/goldgrub)
|
||||
|
||||
/obj/structure/nest/carppuppy
|
||||
spawn_mob_options = list(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/pet/dog/corgi/puppy/void)
|
||||
spawn_trigger_distance = 3
|
||||
Reference in New Issue
Block a user