diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm
index 858b814c2b6..fe734a64ac3 100644
--- a/code/controllers/subsystems/ticker.dm
+++ b/code/controllers/subsystems/ticker.dm
@@ -1,5 +1,9 @@
#define LOBBY_TIME 180
+#define SETUP_OK 0
+#define SETUP_REVOTE 1
+#define SETUP_REATTEMPT 2
+
var/datum/controller/subsystem/ticker/SSticker
/datum/controller/subsystem/ticker
@@ -137,11 +141,14 @@ var/datum/controller/subsystem/ticker/SSticker
if (pregame_timeleft <= 0 || current_state == GAME_STATE_SETTING_UP)
current_state = GAME_STATE_SETTING_UP
wait = 2 SECONDS
- if (!setup())
- // Something fucked up.
- wait = 1 SECOND
- is_revote = TRUE
- pregame()
+ switch (setup())
+ if (SETUP_REVOTE)
+ wait = 1 SECOND
+ is_revote = TRUE
+ pregame()
+ if (SETUP_REATTEMPT)
+ pregame_timeleft = 1 SECOND
+ to_world("Reattempting gamemode selection.")
/datum/controller/subsystem/ticker/proc/game_tick()
if(current_state != GAME_STATE_PLAYING)
@@ -354,7 +361,7 @@ var/datum/controller/subsystem/ticker/SSticker
if(!runnable_modes.len)
current_state = GAME_STATE_PREGAME
world << "Unable to choose playable game mode. Reverting to pre-game lobby."
- return 0
+ return SETUP_REVOTE
if(secret_force_mode != ROUNDTYPE_STR_SECRET && secret_force_mode != ROUNDTYPE_STR_MIXED_SECRET)
src.mode = config.pick_mode(secret_force_mode)
if(!src.mode)
@@ -379,7 +386,7 @@ var/datum/controller/subsystem/ticker/SSticker
if(!src.mode)
current_state = GAME_STATE_PREGAME
world << "Serious error in mode setup! Reverting to pre-game lobby."
- return 0
+ return SETUP_REVOTE
SSjobs.ResetOccupations()
src.mode.create_antagonists()
@@ -398,7 +405,10 @@ var/datum/controller/subsystem/ticker/SSticker
mode.fail_setup()
mode = null
SSjobs.ResetOccupations()
- return 0
+ if(master_mode in list(ROUNDTYPE_STR_RANDOM, ROUNDTYPE_STR_SECRET, ROUNDTYPE_STR_MIXED_SECRET))
+ return SETUP_REATTEMPT
+ else
+ return SETUP_REVOTE
var/starttime = REALTIMEOFDAY
@@ -444,7 +454,7 @@ var/datum/controller/subsystem/ticker/SSticker
log_debug("SSticker: Round-start setup took [(REALTIMEOFDAY - starttime)/10] seconds.")
- return 1
+ return SETUP_OK
/datum/controller/subsystem/ticker/proc/run_callback_list(list/callbacklist)
set waitfor = FALSE
@@ -514,7 +524,6 @@ var/datum/controller/subsystem/ticker/SSticker
world << sound('sound/effects/explosionfar.ogg')
//flick("end",cinematic)
-
if(2) //nuke was nowhere nearby //TODO: a really distant explosion animation
sleep(50)
world << sound('sound/effects/explosionfar.ogg')
@@ -602,4 +611,7 @@ var/datum/controller/subsystem/ticker/SSticker
LAZYADD(roundstart_callbacks, callback)
+#undef SETUP_OK
+#undef SETUP_REVOTE
+#undef SETUP_REATTEMPT
#undef LOBBY_TIME