mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-21 15:42:35 +00:00
Implement mixed secret (#2849)
Implements mixed secret as a gamemode. It's another snowflake mode which taps into more snowflake functions. :ree: Went over all references to "secret" and swapped them for a macro where applicable. SSticker.hide_mode now holds a reference to which type of secret was picked. "random" gamemode will now pick from both secret lists for added randomness! Implementation of https://forums.aurorastation.org/viewtopic.php?f=18&t=8253
This commit is contained in:
@@ -51,9 +51,18 @@
|
|||||||
#define MODE_VAMPIRE "vampire"
|
#define MODE_VAMPIRE "vampire"
|
||||||
#define MODE_THRALL "thrall"
|
#define MODE_THRALL "thrall"
|
||||||
|
|
||||||
|
|
||||||
#define DEFAULT_TELECRYSTAL_AMOUNT 25
|
#define DEFAULT_TELECRYSTAL_AMOUNT 25
|
||||||
|
|
||||||
|
// Defines (NOT FLAGS) for making secret, random, and mixed secret less snowflake-string
|
||||||
|
// and number dependant.
|
||||||
|
#define ROUNDTYPE_RANDOM 0
|
||||||
|
#define ROUNDTYPE_SECRET 1
|
||||||
|
#define ROUNDTYPE_MIXED_SECRET 2
|
||||||
|
|
||||||
|
#define ROUNDTYPE_STR_SECRET "secret"
|
||||||
|
#define ROUNDTYPE_STR_MIXED_SECRET "mixed secret"
|
||||||
|
#define ROUNDTYPE_STR_RANDOM "random"
|
||||||
|
|
||||||
/////////////////
|
/////////////////
|
||||||
////WIZARD //////
|
////WIZARD //////
|
||||||
/////////////////
|
/////////////////
|
||||||
|
|||||||
@@ -54,7 +54,8 @@ var/list/gamemode_cache = list()
|
|||||||
var/list/mode_names = list()
|
var/list/mode_names = list()
|
||||||
var/list/modes = list() // allowed modes
|
var/list/modes = list() // allowed modes
|
||||||
var/list/votable_modes = list() // votable modes
|
var/list/votable_modes = list() // votable modes
|
||||||
var/list/probabilities = list() // relative probability of each mode
|
var/list/probabilities_secret = list() // relative probability of each mode in secret/random
|
||||||
|
var/list/probabilities_mixed_secret = list() // relative probability of each mode in heavy secret mode
|
||||||
var/humans_need_surnames = 0
|
var/humans_need_surnames = 0
|
||||||
var/allow_random_events = 0 // enables random events mid-round when set to 1
|
var/allow_random_events = 0 // enables random events mid-round when set to 1
|
||||||
var/allow_ai = 1 // allow ai job
|
var/allow_ai = 1 // allow ai job
|
||||||
@@ -281,10 +282,11 @@ var/list/gamemode_cache = list()
|
|||||||
log_misc("Adding game mode [M.name] ([M.config_tag]) to configuration.")
|
log_misc("Adding game mode [M.name] ([M.config_tag]) to configuration.")
|
||||||
src.modes += M.config_tag
|
src.modes += M.config_tag
|
||||||
src.mode_names[M.config_tag] = M.name
|
src.mode_names[M.config_tag] = M.name
|
||||||
src.probabilities[M.config_tag] = M.probability
|
src.probabilities_secret[M.config_tag] = M.probability
|
||||||
if (M.votable)
|
if (M.votable)
|
||||||
src.votable_modes += M.config_tag
|
src.votable_modes += M.config_tag
|
||||||
src.votable_modes += "secret"
|
src.votable_modes += ROUNDTYPE_STR_SECRET
|
||||||
|
votable_modes += ROUNDTYPE_STR_MIXED_SECRET
|
||||||
|
|
||||||
/datum/configuration/proc/load(filename, type = "config") //the type can also be game_options, in which case it uses a different switch. not making it separate to not copypaste code - Urist
|
/datum/configuration/proc/load(filename, type = "config") //the type can also be game_options, in which case it uses a different switch. not making it separate to not copypaste code - Urist
|
||||||
var/list/Lines = file2list(filename)
|
var/list/Lines = file2list(filename)
|
||||||
@@ -522,15 +524,22 @@ var/list/gamemode_cache = list()
|
|||||||
config.protect_roles_from_antagonist = 1
|
config.protect_roles_from_antagonist = 1
|
||||||
|
|
||||||
if ("probability")
|
if ("probability")
|
||||||
var/prob_pos = findtext(value, " ")
|
var/list/chunks = splittext(value, " ")
|
||||||
var/prob_name = null
|
var/prob_type
|
||||||
var/prob_value = null
|
var/prob_name
|
||||||
|
var/prob_value
|
||||||
|
|
||||||
if (prob_pos)
|
if (chunks.len == 3)
|
||||||
prob_name = lowertext(copytext(value, 1, prob_pos))
|
prob_type = lowertext(chunks[1])
|
||||||
prob_value = copytext(value, prob_pos + 1)
|
prob_name = lowertext(chunks[2])
|
||||||
|
prob_value = text2num(chunks[3])
|
||||||
if (prob_name in config.modes)
|
if (prob_name in config.modes)
|
||||||
config.probabilities[prob_name] = text2num(prob_value)
|
// S adds a mode to standard secret rotation
|
||||||
|
// MS adds a mode to mixed secret rotation
|
||||||
|
if (prob_type == "s")
|
||||||
|
config.probabilities_secret[prob_name] = prob_value
|
||||||
|
else if (prob_type == "ms")
|
||||||
|
config.probabilities_mixed_secret[prob_name] = prob_value
|
||||||
else
|
else
|
||||||
log_misc("Unknown game mode probability configuration definition: [prob_name].")
|
log_misc("Unknown game mode probability configuration definition: [prob_name].")
|
||||||
else
|
else
|
||||||
@@ -932,11 +941,21 @@ var/list/gamemode_cache = list()
|
|||||||
return M
|
return M
|
||||||
return gamemode_cache["extended"]
|
return gamemode_cache["extended"]
|
||||||
|
|
||||||
/datum/configuration/proc/get_runnable_modes()
|
/datum/configuration/proc/get_runnable_modes(secret_type = ROUNDTYPE_STR_SECRET)
|
||||||
|
var/list/probabilities = config.probabilities_secret
|
||||||
|
|
||||||
|
if (secret_type == ROUNDTYPE_STR_MIXED_SECRET)
|
||||||
|
probabilities = config.probabilities_mixed_secret
|
||||||
|
else if (secret_type == ROUNDTYPE_STR_RANDOM)
|
||||||
|
// Random picks from EVERYTHING. Need to use Copy() as to not pollute the
|
||||||
|
// original list. PBRef is /great/.
|
||||||
|
probabilities = config.probabilities_secret.Copy()
|
||||||
|
probabilities |= config.probabilities_mixed_secret
|
||||||
|
|
||||||
var/list/runnable_modes = list()
|
var/list/runnable_modes = list()
|
||||||
for(var/game_mode in gamemode_cache)
|
for(var/game_mode in gamemode_cache)
|
||||||
var/datum/game_mode/M = gamemode_cache[game_mode]
|
var/datum/game_mode/M = gamemode_cache[game_mode]
|
||||||
if(M && M.can_start() && !isnull(config.probabilities[M.config_tag]) && config.probabilities[M.config_tag] > 0)
|
if(M && M.can_start() && probabilities[M.config_tag] && probabilities[M.config_tag] > 0)
|
||||||
runnable_modes |= M
|
runnable_modes |= M
|
||||||
return runnable_modes
|
return runnable_modes
|
||||||
|
|
||||||
|
|||||||
@@ -326,21 +326,34 @@ var/datum/controller/subsystem/ticker/SSticker
|
|||||||
|
|
||||||
/datum/controller/subsystem/ticker/proc/setup()
|
/datum/controller/subsystem/ticker/proc/setup()
|
||||||
//Create and announce mode
|
//Create and announce mode
|
||||||
if(master_mode=="secret")
|
if(master_mode == ROUNDTYPE_STR_SECRET)
|
||||||
src.hide_mode = 1
|
src.hide_mode = ROUNDTYPE_SECRET
|
||||||
|
else if (master_mode == ROUNDTYPE_STR_MIXED_SECRET)
|
||||||
|
src.hide_mode = ROUNDTYPE_MIXED_SECRET
|
||||||
|
|
||||||
var/list/runnable_modes = config.get_runnable_modes()
|
var/list/runnable_modes = config.get_runnable_modes(master_mode)
|
||||||
if((master_mode=="random") || (master_mode=="secret"))
|
if(master_mode in list(ROUNDTYPE_STR_RANDOM, ROUNDTYPE_STR_SECRET, ROUNDTYPE_STR_MIXED_SECRET))
|
||||||
if(!runnable_modes.len)
|
if(!runnable_modes.len)
|
||||||
current_state = GAME_STATE_PREGAME
|
current_state = GAME_STATE_PREGAME
|
||||||
world << "<B>Unable to choose playable game mode.</B> Reverting to pre-game lobby."
|
world << "<B>Unable to choose playable game mode.</B> Reverting to pre-game lobby."
|
||||||
return 0
|
return 0
|
||||||
if(secret_force_mode != "secret")
|
if(secret_force_mode != ROUNDTYPE_STR_SECRET && secret_force_mode != ROUNDTYPE_STR_MIXED_SECRET)
|
||||||
src.mode = config.pick_mode(secret_force_mode)
|
src.mode = config.pick_mode(secret_force_mode)
|
||||||
if(!src.mode)
|
if(!src.mode)
|
||||||
var/list/weighted_modes = list()
|
var/list/weighted_modes = list()
|
||||||
|
var/list/probabilities = list()
|
||||||
|
|
||||||
|
if (master_mode == ROUNDTYPE_STR_SECRET)
|
||||||
|
probabilities = config.probabilities_secret
|
||||||
|
else if (master_mode == ROUNDTYPE_STR_MIXED_SECRET)
|
||||||
|
probabilities = config.probabilities_mixed_secret
|
||||||
|
else
|
||||||
|
// master_mode == ROUNDTYPE_STR_RANDOM
|
||||||
|
probabilities = config.probabilities_secret.Copy()
|
||||||
|
probabilities |= config.probabilities_mixed_secret
|
||||||
|
|
||||||
for(var/datum/game_mode/GM in runnable_modes)
|
for(var/datum/game_mode/GM in runnable_modes)
|
||||||
weighted_modes[GM.config_tag] = config.probabilities[GM.config_tag]
|
weighted_modes[GM.config_tag] = probabilities[GM.config_tag]
|
||||||
src.mode = gamemode_cache[pickweight(weighted_modes)]
|
src.mode = gamemode_cache[pickweight(weighted_modes)]
|
||||||
else
|
else
|
||||||
src.mode = config.pick_mode(master_mode)
|
src.mode = config.pick_mode(master_mode)
|
||||||
@@ -366,7 +379,7 @@ var/datum/controller/subsystem/ticker/SSticker
|
|||||||
var/starttime = REALTIMEOFDAY
|
var/starttime = REALTIMEOFDAY
|
||||||
|
|
||||||
if(hide_mode)
|
if(hide_mode)
|
||||||
world << "<B>The current game mode is - Secret!</B>"
|
world << "<B>The current game mode is - [hide_mode == ROUNDTYPE_SECRET ? "Secret" : "Mixed Secret"]!</B>"
|
||||||
if(runnable_modes.len)
|
if(runnable_modes.len)
|
||||||
var/list/tmpmodes = new
|
var/list/tmpmodes = new
|
||||||
for (var/datum/game_mode/M in runnable_modes)
|
for (var/datum/game_mode/M in runnable_modes)
|
||||||
|
|||||||
@@ -268,7 +268,8 @@ var/datum/controller/subsystem/vote/SSvote
|
|||||||
continue
|
continue
|
||||||
gamemode_names[M.config_tag] = capitalize(M.name) //It's ugly to put this here but it works
|
gamemode_names[M.config_tag] = capitalize(M.name) //It's ugly to put this here but it works
|
||||||
additional_text.Add("<td align = 'center'>[M.required_players]</td>")
|
additional_text.Add("<td align = 'center'>[M.required_players]</td>")
|
||||||
gamemode_names["secret"] = "Secret"
|
gamemode_names[ROUNDTYPE_STR_SECRET] = "Secret"
|
||||||
|
gamemode_names[ROUNDTYPE_STR_MIXED_SECRET] = "Mixed Secret"
|
||||||
if("crew_transfer")
|
if("crew_transfer")
|
||||||
if(check_rights(R_ADMIN|R_MOD, 0))
|
if(check_rights(R_ADMIN|R_MOD, 0))
|
||||||
question = "End the shift?"
|
question = "End the shift?"
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ var/global/list/additional_antag_types = list()
|
|||||||
antag_summary += "[antag.role_text_plural]"
|
antag_summary += "[antag.role_text_plural]"
|
||||||
i++
|
i++
|
||||||
antag_summary += "."
|
antag_summary += "."
|
||||||
if(antag_templates.len > 1 && master_mode != "secret")
|
if(antag_templates.len > 1 && !SSticker.hide_mode)
|
||||||
world << "[antag_summary]"
|
world << "[antag_summary]"
|
||||||
else
|
else
|
||||||
message_admins("[antag_summary]")
|
message_admins("[antag_summary]")
|
||||||
@@ -606,7 +606,7 @@ proc/get_nt_opposed()
|
|||||||
usr << "Something is terribly wrong; there is no gametype."
|
usr << "Something is terribly wrong; there is no gametype."
|
||||||
return
|
return
|
||||||
|
|
||||||
if(master_mode != "secret")
|
if(!SSticker.hide_mode)
|
||||||
usr << "<b>The roundtype is [capitalize(SSticker.mode.name)]</b>"
|
usr << "<b>The roundtype is [capitalize(SSticker.mode.name)]</b>"
|
||||||
if(SSticker.mode.round_description)
|
if(SSticker.mode.round_description)
|
||||||
usr << "<i>[SSticker.mode.round_description]</i>"
|
usr << "<i>[SSticker.mode.round_description]</i>"
|
||||||
|
|||||||
@@ -598,7 +598,7 @@ proc/admin_notice(var/message, var/rights)
|
|||||||
<center><B>Game Panel</B></center><hr>\n
|
<center><B>Game Panel</B></center><hr>\n
|
||||||
<A href='?src=\ref[src];c_mode=1'>Change Game Mode</A><br>
|
<A href='?src=\ref[src];c_mode=1'>Change Game Mode</A><br>
|
||||||
"}
|
"}
|
||||||
if(master_mode == "secret")
|
if(master_mode == ROUNDTYPE_STR_SECRET || master_mode == ROUNDTYPE_STR_MIXED_SECRET)
|
||||||
dat += "<A href='?src=\ref[src];f_secret=1'>(Force Secret Mode)</A><br>"
|
dat += "<A href='?src=\ref[src];f_secret=1'>(Force Secret Mode)</A><br>"
|
||||||
|
|
||||||
dat += {"
|
dat += {"
|
||||||
|
|||||||
@@ -420,7 +420,7 @@
|
|||||||
else if(href_list["boot2"])
|
else if(href_list["boot2"])
|
||||||
var/mob/M = locate(href_list["boot2"])
|
var/mob/M = locate(href_list["boot2"])
|
||||||
if (ismob(M))
|
if (ismob(M))
|
||||||
if(!check_rights(R_MOD|R_ADMIN, 0))
|
if(!check_rights(R_MOD|R_ADMIN, 0))
|
||||||
usr << "<span class='warning'>You do not have the appropriate permissions to boot users!</span>"
|
usr << "<span class='warning'>You do not have the appropriate permissions to boot users!</span>"
|
||||||
return
|
return
|
||||||
if(!check_if_greater_rights_than(M.client))
|
if(!check_if_greater_rights_than(M.client))
|
||||||
@@ -544,7 +544,7 @@
|
|||||||
|
|
||||||
if(ROUND_IS_STARTED)
|
if(ROUND_IS_STARTED)
|
||||||
return alert(usr, "The game has already started.", null, null, null, null)
|
return alert(usr, "The game has already started.", null, null, null, null)
|
||||||
if(master_mode != "secret")
|
if(master_mode != ROUNDTYPE_STR_SECRET && master_mode != ROUNDTYPE_STR_MIXED_SECRET)
|
||||||
return alert(usr, "The game mode has to be secret!", null, null, null, null)
|
return alert(usr, "The game mode has to be secret!", null, null, null, null)
|
||||||
var/dat = {"<B>What game mode do you want to force secret to be? Use this if you want to change the game mode, but want the players to believe it's secret. This will only work if the current game mode is secret.</B><HR>"}
|
var/dat = {"<B>What game mode do you want to force secret to be? Use this if you want to change the game mode, but want the players to believe it's secret. This will only work if the current game mode is secret.</B><HR>"}
|
||||||
for(var/mode in config.modes)
|
for(var/mode in config.modes)
|
||||||
|
|||||||
@@ -70,11 +70,12 @@
|
|||||||
if(statpanel("Lobby"))
|
if(statpanel("Lobby"))
|
||||||
stat("Game ID:", game_id)
|
stat("Game ID:", game_id)
|
||||||
|
|
||||||
if(SSticker.hide_mode)
|
if(SSticker.hide_mode == ROUNDTYPE_SECRET)
|
||||||
stat("Game Mode:", "Secret")
|
stat("Game Mode:", "Secret")
|
||||||
|
else if (SSticker.hide_mode == ROUNDTYPE_MIXED_SECRET)
|
||||||
|
stat("Game Mode:", "Mixed Secret")
|
||||||
else
|
else
|
||||||
if(SSticker.hide_mode == 0)
|
stat("Game Mode:", "[master_mode]") // Old setting for showing the game mode
|
||||||
stat("Game Mode:", "[master_mode]") // Old setting for showing the game mode
|
|
||||||
|
|
||||||
if(SSticker.current_state == GAME_STATE_PREGAME)
|
if(SSticker.current_state == GAME_STATE_PREGAME)
|
||||||
if (SSticker.lobby_ready)
|
if (SSticker.lobby_ready)
|
||||||
@@ -500,4 +501,4 @@
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
/mob/new_player/show_message(msg, type, alt, alt_type)
|
/mob/new_player/show_message(msg, type, alt, alt_type)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -102,17 +102,25 @@ MOD_TEMPBAN_MAX 1440
|
|||||||
MOD_JOB_TEMPBAN_MAX 1440
|
MOD_JOB_TEMPBAN_MAX 1440
|
||||||
|
|
||||||
|
|
||||||
## probablities for game modes chosen in "secret" and "random" modes
|
## Probablities for game modes chosen in "secret", "mixed secret" and "random" modes.
|
||||||
|
## S or MS after the PROBABILITY keyword dictates whether the probability is for mixed
|
||||||
|
## secret, or secret. These can overlap. "Random" will pick from both.
|
||||||
##
|
##
|
||||||
## default probablity is 1, increase to make that mode more likely to be picked
|
## Default probablity is 1, increase to make that mode more likely to be picked.
|
||||||
## set to 0 to disable that mode
|
## Set to 0 to disable that mode.
|
||||||
PROBABILITY EXTENDED 1
|
PROBABILITY S EXTENDED 1
|
||||||
PROBABILITY MALFUNCTION 1
|
PROBABILITY S MALFUNCTION 1
|
||||||
PROBABILITY MERCENARY 1
|
PROBABILITY S MERCENARY 1
|
||||||
PROBABILITY WIZARD 1
|
PROBABILITY S WIZARD 1
|
||||||
PROBABILITY CHANGELING 1
|
PROBABILITY S CHANGELING 1
|
||||||
PROBABILITY CULT 1
|
PROBABILITY S CULT 1
|
||||||
PROBABILITY EXTEND-A-TRAITORMONGOUS 6
|
PROBABILITY S EXTEND-A-TRAITORMONGOUS 6
|
||||||
|
PROBABILITY MS CONFLUX 1
|
||||||
|
PROBABILITY MS CROSSFIRE 1
|
||||||
|
PROBABILITY MS PARANOIA 1
|
||||||
|
PROBABILITY MS UPRISING 1
|
||||||
|
PROBABILITY MS VISITORS 1
|
||||||
|
PROBABILITY MS EXTENDED 1
|
||||||
|
|
||||||
## Hash out to disable random events during the round.
|
## Hash out to disable random events during the round.
|
||||||
ALLOW_RANDOM_EVENTS
|
ALLOW_RANDOM_EVENTS
|
||||||
|
|||||||
5
html/changelogs/skull132-mixed-secret.yml
Normal file
5
html/changelogs/skull132-mixed-secret.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
author: Skull132
|
||||||
|
delete-after: True
|
||||||
|
|
||||||
|
changes:
|
||||||
|
- rscadd: "Added the Mixed Secret gamemode, which contains all of the mixed antag modes."
|
||||||
Reference in New Issue
Block a user