mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-09 16:07:40 +00:00
Increased minimum player requirement for xenomorph event, as lowpop xenos suck hardballs. Also added minimum timer to the event, up from 20 to 40 min. Weight kept the same, half default. With this, xenomorphs should hopefully be more rare, although there's STILL other sources to enable them those ones ALL require a human to be dumb/malicious and release them.
77 lines
2.4 KiB
Plaintext
77 lines
2.4 KiB
Plaintext
/datum/round_event_control/alien_infestation
|
|
name = "Alien Infestation"
|
|
typepath = /datum/round_event/ghost_role/alien_infestation
|
|
weight = 5
|
|
earliest_start = 24000 //40 min
|
|
|
|
min_players = 20 //Avoid lowpop rounds
|
|
max_occurrences = 1
|
|
|
|
/datum/round_event/ghost_role/alien_infestation
|
|
announceWhen = 400
|
|
|
|
minimum_required = 1
|
|
role_name = "alien larva"
|
|
|
|
// 50% chance of being incremented by one
|
|
var/spawncount = 1
|
|
var/successSpawn = 0 //So we don't make a command report if nothing gets spawned.
|
|
|
|
|
|
/datum/round_event/ghost_role/alien_infestation/setup()
|
|
announceWhen = rand(announceWhen, announceWhen + 50)
|
|
if(prob(50))
|
|
spawncount++
|
|
|
|
/datum/round_event/ghost_role/alien_infestation/kill()
|
|
if(!successSpawn && control)
|
|
// This never happened, so let's not deny the future of this round
|
|
// some xenolovin
|
|
control.occurrences--
|
|
return ..()
|
|
|
|
/datum/round_event/ghost_role/alien_infestation/announce()
|
|
if(successSpawn)
|
|
priority_announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", 'sound/ai/aliens.ogg')
|
|
|
|
|
|
/datum/round_event/ghost_role/alien_infestation/spawn_role()
|
|
var/list/vents = list()
|
|
for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in GLOB.machines)
|
|
if(QDELETED(temp_vent))
|
|
continue
|
|
if(temp_vent.loc.z == ZLEVEL_STATION && !temp_vent.welded)
|
|
var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1
|
|
//Stops Aliens getting stuck in small networks.
|
|
//See: Security, Virology
|
|
if(temp_vent_parent.other_atmosmch.len > 20)
|
|
vents += temp_vent
|
|
|
|
if(!vents.len)
|
|
message_admins("An event attempted to spawn an alien but no suitable vents were found. Shutting down.")
|
|
return MAP_ERROR
|
|
|
|
var/list/candidates = get_candidates("alien", null, ROLE_ALIEN)
|
|
|
|
if(!candidates.len)
|
|
return NOT_ENOUGH_PLAYERS
|
|
|
|
while(spawncount > 0 && vents.len && candidates.len)
|
|
var/obj/vent = pick_n_take(vents)
|
|
var/client/C = pick_n_take(candidates)
|
|
|
|
var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc)
|
|
new_xeno.key = C.key
|
|
|
|
spawncount--
|
|
successSpawn = TRUE
|
|
message_admins("[key_name_admin(new_xeno)] has been made into an alien by an event.")
|
|
log_game("[key_name(new_xeno)] was spawned as an alien by an event.")
|
|
spawned_mobs += new_xeno
|
|
|
|
if(successSpawn)
|
|
return SUCCESSFUL_SPAWN
|
|
else
|
|
// Like how did we get here?
|
|
return FALSE
|