mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
Darkspawn is now a midround instead of a gamemode (#17833)
* dspawn midround * disable * performance * move sec counting down * disable nightmare * changes S to H * runtime safety * H and D to var names
This commit is contained in:
55
code/modules/events/darkspawn.dm
Normal file
55
code/modules/events/darkspawn.dm
Normal file
@@ -0,0 +1,55 @@
|
||||
/datum/round_event_control/darkspawn
|
||||
name = "Spawn Darkspawn(s)"
|
||||
typepath = /datum/round_event/ghost_role/darkspawn
|
||||
max_occurrences = 1
|
||||
min_players = 30
|
||||
dynamic_should_hijack = TRUE
|
||||
gamemode_blacklist = list("darkspawn", "shadowling")
|
||||
|
||||
/datum/round_event/ghost_role/darkspawn
|
||||
minimum_required = 1
|
||||
role_name = "darkspawn"
|
||||
fakeable = FALSE
|
||||
|
||||
/datum/round_event/ghost_role/darkspawn/spawn_role()
|
||||
var/list/candidates = get_candidates(ROLE_DARKSPAWN, null, ROLE_DARKSPAWN)
|
||||
if(!candidates.len)
|
||||
return NOT_ENOUGH_PLAYERS
|
||||
|
||||
var/list/spawn_locs = list()
|
||||
for(var/turf/T in GLOB.xeno_spawn)
|
||||
var/light_amount = T.get_lumcount()
|
||||
if(light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD)
|
||||
spawn_locs += T
|
||||
|
||||
if(!spawn_locs.len)
|
||||
message_admins("No valid spawn locations found, aborting...")
|
||||
return MAP_ERROR
|
||||
|
||||
var/darkspawn_to_spawn = 1
|
||||
var/datum/job/hos = SSjob.GetJob("Head of Security")
|
||||
var/datum/job/warden = SSjob.GetJob("Warden")
|
||||
var/datum/job/officers = SSjob.GetJob("Security Officer")
|
||||
var/sec_amount = hos.current_positions + warden.current_positions + officers.current_positions
|
||||
if(sec_amount >= 5 && candidates.len >= 2 && spawn_locs.len >= 2)
|
||||
darkspawn_to_spawn = 2
|
||||
|
||||
for(var/i=0,i<darkspawn_to_spawn,i++)
|
||||
var/mob/dead/selected = pick(candidates)
|
||||
|
||||
var/datum/mind/player_mind = new /datum/mind(selected.key)
|
||||
player_mind.active = TRUE
|
||||
|
||||
var/turf/chosen_spawn = pick(spawn_locs)
|
||||
spawn_locs -= chosen_spawn // No spawning in the same place
|
||||
var/mob/living/carbon/human/spawned_human = new (chosen_spawn)
|
||||
player_mind.transfer_to(spawned_human)
|
||||
player_mind.assigned_role = "Darkspawn"
|
||||
player_mind.special_role = "Darkspawn"
|
||||
var/datum/antagonist/darkspawn/darkspawn_datum = player_mind.add_antag_datum(/datum/antagonist/darkspawn)
|
||||
darkspawn_datum.force_divulge()
|
||||
playsound(spawned_human, 'sound/magic/ethereal_exit.ogg', 50, 1, -1)
|
||||
message_admins("[ADMIN_LOOKUPFLW(spawned_human)] has been made into a Darkspawn by an event.")
|
||||
log_game("[key_name(spawned_human)] was spawned as a Darkspawn by an event.")
|
||||
spawned_mobs += spawned_human
|
||||
return SUCCESSFUL_SPAWN
|
||||
@@ -3,6 +3,7 @@
|
||||
typepath = /datum/round_event/ghost_role/nightmare
|
||||
max_occurrences = 1
|
||||
min_players = 30
|
||||
weight = 0 // Disabled in favor of darkspawn
|
||||
earliest_start = 45 MINUTES
|
||||
dynamic_should_hijack = TRUE
|
||||
|
||||
@@ -12,7 +13,7 @@
|
||||
fakeable = FALSE
|
||||
|
||||
/datum/round_event/ghost_role/nightmare/spawn_role()
|
||||
var/list/candidates = get_candidates(ROLE_ALIEN, null, ROLE_ALIEN)
|
||||
var/list/candidates = get_candidates(ROLE_NIGHTMARE, null, ROLE_NIGHTMARE)
|
||||
if(!candidates.len)
|
||||
return NOT_ENOUGH_PLAYERS
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@ ALERT_DELTA Destruction of the station is imminent. All crew are instructed to o
|
||||
## Set to 0 to disable that mode.
|
||||
|
||||
# New
|
||||
PROBABILITY DARKSPAWN 6
|
||||
PROBABILITY DARKSPAWN 0 # Moved to midround event
|
||||
PROBABILITY HERESY 4
|
||||
PROBABILITY INFILTRATION 0
|
||||
PROBABILITY BLOODSUCKER 4
|
||||
|
||||
Reference in New Issue
Block a user