From a0187f66e3bedd237e834ad6cba69ffe046b2dbe Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 5 Sep 2015 14:10:50 +0930 Subject: [PATCH] Fixes Secret. --- code/controllers/configuration.dm | 14 +++------- code/game/gamemodes/game_mode.dm | 7 +++++ code/game/gamemodes/gameticker.dm | 43 +++++++++++++++++-------------- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 875a76e0e5..4ccd2b8f09 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -831,21 +831,15 @@ var/list/gamemode_cache = list() for (var/game_mode in gamemode_cache) var/datum/game_mode/M = gamemode_cache[game_mode] if (M.config_tag && M.config_tag == mode_name) - M.create_antagonists() return M return gamemode_cache["extended"] /datum/configuration/proc/get_runnable_modes() - var/list/datum/game_mode/runnable_modes = new - for (var/game_mode in gamemode_cache) + var/list/runnable_modes = list() + for(var/game_mode in gamemode_cache) var/datum/game_mode/M = gamemode_cache[game_mode] - if (!(M.config_tag in modes)) - continue - if (probabilities[M.config_tag]<=0) - continue - if (M.can_start()) - runnable_modes[M] = probabilities[M.config_tag] - //world << "DEBUG: runnable_mode\[[runnable_modes.len]\] = [M.config_tag]" + if(M && M.can_start() && !isnull(config.probabilities[M.config_tag]) && config.probabilities[M.config_tag] > 0) + runnable_modes |= M return runnable_modes /datum/configuration/proc/post_load() diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index f587af7ded..9005650650 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -114,6 +114,13 @@ var/global/list/additional_antag_types = list() ) ) +/datum/game_mode/New() + ..() + // Enforce some formatting. + // This will probably break something. + name = capitalize(lowertext(name)) + config_tag = lowertext(config_tag) + /datum/game_mode/Topic(href, href_list[]) if(..()) return diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index bfffffc8ff..2b74ee9488 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -69,33 +69,34 @@ var/global/datum/controller/gameticker/ticker //Create and announce mode if(master_mode=="secret") src.hide_mode = 1 - var/list/datum/game_mode/runnable_modes - var/mode_started + + var/list/runnable_modes = config.get_runnable_modes() if((master_mode=="random") || (master_mode=="secret")) - runnable_modes = config.get_runnable_modes() - if (runnable_modes.len==0) + if(!runnable_modes.len) current_state = GAME_STATE_PREGAME world << "Unable to choose playable game mode. Reverting to pre-game lobby." return 0 if(secret_force_mode != "secret") - var/datum/game_mode/M = config.pick_mode(secret_force_mode) - if(M.can_start()) - mode_started = 1 - src.mode = config.pick_mode(secret_force_mode) - job_master.ResetOccupations() + src.mode = config.pick_mode(secret_force_mode) if(!src.mode) - src.mode = pickweight(runnable_modes) - if(src.mode) - var/mtype = src.mode.type - src.mode = new mtype + var/list/weighted_modes = list() + for(var/datum/game_mode/GM in runnable_modes) + weighted_modes[GM.config_tag] = config.probabilities[GM.config_tag] + src.mode = gamemode_cache[pickweight(weighted_modes)] else src.mode = config.pick_mode(master_mode) - src.mode.pre_setup() + if(!src.mode) + current_state = GAME_STATE_PREGAME + world << "Serious error in mode setup! Reverting to pre-game lobby." + return 0 + job_master.ResetOccupations() + src.mode.create_antagonists() + src.mode.pre_setup() job_master.DivideOccupations() // Apparently important for new antagonist system to register specific job antags properly. - if(!mode_started && !src.mode.can_start()) + if(!src.mode.can_start()) world << "Unable to start [mode.name]. Not enough players, [mode.required_players] players needed. Reverting to pre-game lobby." current_state = GAME_STATE_PREGAME mode.fail_setup() @@ -104,12 +105,14 @@ var/global/datum/controller/gameticker/ticker return 0 if(hide_mode) - var/list/modes = new - for (var/datum/game_mode/M in runnable_modes) - modes+=M.name - modes = sortList(modes) world << "The current game mode is - Secret!" - world << "Possibilities: [english_list(modes)]" + if(runnable_modes.len) + var/list/tmpmodes = new + for (var/datum/game_mode/M in runnable_modes) + tmpmodes+=M.name + tmpmodes = sortList(tmpmodes) + if(tmpmodes.len) + world << "Possibilities: [english_list(tmpmodes)]" else src.mode.announce()