From 80afe50f4666ef4d3e2970a867db85bd9022d0e4 Mon Sep 17 00:00:00 2001 From: ynot01 Date: Sat, 11 Feb 2023 13:38:01 -0500 Subject: [PATCH] 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 --- code/modules/events/darkspawn.dm | 55 ++++++++++++++++++++++++++++++++ code/modules/events/nightmare.dm | 3 +- config/game_options.txt | 2 +- 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 code/modules/events/darkspawn.dm diff --git a/code/modules/events/darkspawn.dm b/code/modules/events/darkspawn.dm new file mode 100644 index 000000000000..26ca2d7741c7 --- /dev/null +++ b/code/modules/events/darkspawn.dm @@ -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