diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index a88f40a19f71..e4613c427a80 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -342,9 +342,6 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
#define INCREMENT_TALLY(L, stat) if(L[stat]){L[stat]++}else{L[stat] = 1}
-//TODO Move to a pref
-#define STATION_GOAL_BUDGET 1
-
//Endgame Results
#define NUKE_NEAR_MISS 1
#define NUKE_MISS_STATION 2
diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm
index c31cbbdcfc25..d4c7e4f113be 100644
--- a/code/game/gamemodes/dynamic/dynamic.dm
+++ b/code/game/gamemodes/dynamic/dynamic.dm
@@ -257,13 +257,23 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
return rule.round_result()
return ..()
+/datum/game_mode/dynamic/generate_station_goals()
+ if(round(shown_threat) < 30)
+ if(length(current_players[CURRENT_LIVING_ANTAGS]))
+ station_goal_budget = 2
+ else if(round(shown_threat < 20))
+ station_goal_budget = INFINITY
+ return ..()
+
/datum/game_mode/dynamic/send_intercept()
. = "Central Command Status Summary
"
+ var/green_shift = FALSE
switch(round(shown_threat))
if(0 to 19)
if(!current_players[CURRENT_LIVING_ANTAGS].len)
. += "Peaceful Waypoint
"
. += "Your station orbits deep within controlled, core-sector systems and serves as a waypoint for routine traffic through Nanotrasen's trade empire. Due to the combination of high security, interstellar traffic, and low strategic value, it makes any direct threat of violence unlikely. Your primary enemies will be incompetence and bored crewmen: try to organize team-building events to keep staffers interested and productive."
+ green_shift = TRUE
else
. += "Core Territory
"
. += "Your station orbits within reliably mundane, secure space. Although Nanotrasen has a firm grip on security in your region, the valuable resources and strategic position aboard your station make it a potential target for infiltrations. Monitor crew for non-loyal behavior, but expect a relatively tame shift free of large-scale destruction. We expect great things from your station."
@@ -291,9 +301,11 @@ GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
. += G.get_report()
print_command_report(., "Central Command Status Summary", announce=FALSE)
- priority_announce("A summary has been copied and printed to all communications consoles.", "Enemy communication intercepted. Security level elevated.", "intercept")
- if(GLOB.security_level < SEC_LEVEL_BLUE)
- set_security_level(SEC_LEVEL_BLUE)
+ if(green_shift)
+ priority_announce("Thanks to the tireless efforts of our security and intelligence divisions, there are currently no credible threats to [station_name()]. All station construction projects have been authorized. Have a secure shift!", "Security Report", "commandreport")
+ else
+ priority_announce("A summary has been copied and printed to all communications consoles.", "Enemy communication intercepted. Security level elevated.", "intercept")
+
/datum/game_mode/dynamic/proc/show_threatlog(mob/admin)
if(!SSticker.HasRoundStarted())
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 617be706cbb2..f90fb6428a67 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -52,6 +52,8 @@
var/setup_error //What stopepd setting up the mode.
var/flipseclevel = FALSE //CIT CHANGE - adds a 10% chance for the alert level to be the opposite of what the gamemode is supposed to have
+ var/station_goal_budget = 1 // how many station goals are allowed in this mode
+
/// Associative list of current players, in order: living players, living antagonists, dead players and observers.
var/list/list/current_players = list(CURRENT_LIVING_PLAYERS = list(), CURRENT_LIVING_ANTAGS = list(), CURRENT_DEAD_PLAYERS = list(), CURRENT_OBSERVERS = list())
@@ -593,7 +595,7 @@
continue
possible += T
var/goal_weights = 0
- while(possible.len && goal_weights < STATION_GOAL_BUDGET)
+ while(possible.len && goal_weights < station_goal_budget)
var/datum/station_goal/picked = pick_n_take(possible)
goal_weights += initial(picked.weight)
station_goals += new picked
diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm
index 99357d802a71..e5a360c855fd 100644
--- a/code/modules/security_levels/security_levels.dm
+++ b/code/modules/security_levels/security_levels.dm
@@ -13,6 +13,14 @@ GLOBAL_LIST_INIT(all_security_levels, list("green", "blue", "amber", "red", "del
//config.alert_desc_blue_downto
+/proc/raise_security_level(level)
+ if(GLOB.security_level < level)
+ set_security_level(level)
+
+/proc/lower_security_level(level)
+ if(GLOB.security_level > level)
+ set_security_level(level)
+
/proc/set_security_level(level)
if(!isnum(level))
level = GLOB.all_security_levels.Find(level)