This commit is contained in:
SandPoot
2021-10-15 15:03:21 -03:00
24 changed files with 8365 additions and 7802 deletions

View File

@@ -88,3 +88,6 @@
/datum/config_entry/number/rounds_until_hard_restart
config_entry_value = -1
min_val = 0
/datum/config_entry/string/force_gamemode
config_entry_value = null

View File

@@ -71,6 +71,9 @@ SUBSYSTEM_DEF(ticker)
var/station_integrity = 100 // stored at roundend for use in some antag goals
var/emergency_reason
/// If the gamemode fails to be run too many times, we swap to a preset gamemode, this should give admins time to set their preferred one
var/emergency_swap = 0
/datum/controller/subsystem/ticker/Initialize(timeofday)
load_mode()
@@ -179,10 +182,11 @@ SUBSYSTEM_DEF(ticker)
timeLeft = 0
if(!modevoted)
if(!CONFIG_GET(string/force_gamemode))
var/forcemode = CONFIG_GET(string/force_gamemode)
if(forcemode)
force_gamemode(forcemode)
if(!forcemode || (GLOB.master_mode == "dynamic" && CONFIG_GET(flag/dynamic_voting)))
send_gamemode_vote()
else
force_gamemode(CONFIG_GET(string/force_gamemode))
//countdown
if(timeLeft < 0)
return
@@ -230,14 +234,15 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/proc/setup()
to_chat(world, "<span class='boldannounce'>Starting game...</span>")
var/init_start = world.timeofday
// GLOB.master_mode = "dynamic" // NEVER LET THIS RUN, IT WILL ALWAYS FORCE DYNAMIC
if(emergency_swap >= 10)
force_gamemode("extended") // If everything fails extended does not have hard requirements for starting, could be changed if needed.
mode = config.pick_mode(GLOB.master_mode)
if(!mode.can_start())
to_chat(world, "<B>Unable to start [mode.name].</B> Not enough players, [mode.required_players] players and [mode.required_enemies] eligible antagonists needed. Reverting to pre-game lobby.")
qdel(mode)
mode = null
SSjob.ResetOccupations()
force_gamemode("extended")
emergency_swap++
return 0
CHECK_TICK
@@ -256,7 +261,7 @@ SUBSYSTEM_DEF(ticker)
QDEL_NULL(mode)
to_chat(world, "<B>Error setting up [GLOB.master_mode].</B> Reverting to pre-game lobby.")
SSjob.ResetOccupations()
force_gamemode("extended")
emergency_swap++
return 0
else
message_admins("<span class='notice'>DEBUG: Bypassing prestart checks...</span>")
@@ -310,6 +315,19 @@ SUBSYSTEM_DEF(ticker)
return TRUE
/datum/controller/subsystem/ticker/proc/force_gamemode(gamemode)
if(gamemode)
if(!modevoted)
modevoted = TRUE
if(gamemode in config.modes)
GLOB.master_mode = gamemode
SSticker.save_mode(gamemode)
message_admins("The gamemode has been set to [gamemode].")
else
GLOB.master_mode = "extended"
SSticker.save_mode("extended")
message_admins("force_gamemode proc received an invalid gamemode, defaulting to extended.")
/datum/controller/subsystem/ticker/proc/PostSetup()
set waitfor = FALSE
mode.post_setup()
@@ -629,7 +647,7 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/proc/load_mode()
var/mode = trim(file2text("data/mode.txt"))
if(mode)
GLOB.master_mode = "dynamic"
GLOB.master_mode = mode
else
GLOB.master_mode = GLOB.dynamic_forced_extended
log_game("Saved mode is '[GLOB.master_mode]'")