Phoron Deposit Away Site (#20730)

This site is something of an experiment. It features a special mineral
deposit with lots of phoron. When the deposit is drilled, it'll activate
four mob spawners some distance away that'll send fauna towards it.
There can be a total of 20 active fauna on the map at once (5 per
spawner.) There's no limit on how many mobs can spawn in total (for
now.)

The idea is to make an away site with a clear goal and challenge, which
requires multiple people across different departments to accomplish
safely. Security to defend against the waves of fauna, engineering to
construct and maintain barricades/other defenses (very important),
mining to handle the drill, and of course medical in case something goes
wrong. You can't do it solo, trust me I've tried.

Once the deposit has been fully depleted, (takes about 15 minutes or so)
the team will have to sally out of their barricades and fight their way
back to their shuttle. Cause again, the mobs won't stop coming. I think
it's more interesting that way. But it ends with LOTS of fauna corpses,
of which the performance impact on a populated server might be too
severe to justify? I've no clue.

I also added some atmospheric sound and music which plays once the
deposit is drilled. Hopefully sets the tone without being too
overbearing.

This required a lot of code. I do not know how to code. I've tried to be
thorough, but may still want to review it under some extra scrutiny.

See the changelog for some other small tweaks.

### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:

| sound/music/phoron_deposit.ogg | Reitanna Seishin & Zander Noriega
|CC0 & CC-BY 3.0 | https://creativecommons.org/publicdomain/zero/1.0/
https://creativecommons.org/licenses/by/3.0/
This commit is contained in:
4000daniel1
2025-07-12 17:21:49 +00:00
committed by GitHub
parent bfb076eea5
commit 08fe54baf7
12 changed files with 67357 additions and 5 deletions
@@ -30,6 +30,7 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile)
hunger_enabled = 0//Until automated eating mechanics are enabled, disable hunger for hostile mobs
var/shuttletarget = null
var/enroute = 0
var/obj/effect/landmark/mob_waypoint/target_waypoint = null // The waypoint mobs that are spawned by mapped in spawners move to
// Vars to help find targets
var/list/targets = list()
@@ -311,6 +312,7 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile)
/mob/living/simple_animal/hostile/death()
..()
GLOB.move_manager.stop_looping(src)
LoseTarget() //Ensure we always stop chasing upon death
/mob/living/simple_animal/hostile/think()
..()
@@ -432,8 +434,9 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile)
if(prob(break_stuff_probability) || bypass_prob) //bypass_prob is used to make mob destroy things in the way to our target
for(var/card_dir in GLOB.cardinals) // North, South, East, West
var/turf/target_turf = get_step(src, card_dir)
var/obj/found_obj = null
var/obj/found_obj = locate(/obj/effect/energy_field) in target_turf
found_obj = locate(/obj/effect/energy_field) in target_turf
if(found_obj && !found_obj.invisibility && found_obj.density)
var/obj/effect/energy_field/e = found_obj
e.Stress(rand(0.5, 1.5))
@@ -479,7 +482,21 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile)
hostile_last_attack = world.time
return TRUE
return FALSE
found_obj = locate(/obj/structure/girder) in target_turf
if(found_obj)
found_obj.attack_generic(src, rand(melee_damage_lower, melee_damage_upper), attacktext, TRUE)
hostile_last_attack = world.time
return TRUE
found_obj = null
for (var/obj/structure/barricade/B in target_turf)
found_obj = B
break
if(found_obj)
found_obj.attack_generic(src, rand(melee_damage_lower, melee_damage_upper), attacktext, TRUE)
hostile_last_attack = world.time
return TRUE
return FALSE
/mob/living/simple_animal/hostile/RangedAttack(atom/A, params) //Player firing
if(ranged)