mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
Some Antag Madness tweaks based on feedback and observations from that first round (#34434)
* antag madness plus * derp * faction delta * that too * antag madness defines * less redundancy * moving things around so they compile
This commit is contained in:
@@ -400,5 +400,3 @@ var/list/machinery_rating_cache = list() // list of type path -> number
|
||||
|
||||
var/runescape_pvp = FALSE
|
||||
var/runescape_skull_display = FALSE
|
||||
|
||||
var/antag_madness = FALSE
|
||||
|
||||
@@ -97,6 +97,8 @@
|
||||
#define GREET_CUSTOM "custom"
|
||||
#define GREET_MIDROUND "midround"
|
||||
#define GREET_MASTER "master"
|
||||
#define GREET_RIGHTANDWRONG "rightandwrong"
|
||||
#define GREET_MADNESSSURVIVOR "madnesssurvivor"
|
||||
|
||||
#define GREET_AUTOTATOR "autotator"
|
||||
#define GREET_SYNDBEACON "syndbeacon"
|
||||
@@ -287,3 +289,7 @@
|
||||
|
||||
#define BASE_RULESET_WEIGHT 10
|
||||
#define ADDITIONAL_RULESET_WEIGHT 1.4
|
||||
|
||||
#define ANTAG_MADNESS_OFF 0
|
||||
#define ANTAG_MADNESS_EARLY 1
|
||||
#define ANTAG_MADNESS_LATE 2
|
||||
|
||||
@@ -767,6 +767,8 @@ Assign your candidates in choose_candidates() instead.
|
||||
// //
|
||||
//////////////////////////////////////////////
|
||||
|
||||
var/antag_madness = ANTAG_MADNESS_OFF
|
||||
|
||||
/datum/dynamic_ruleset/roundstart/antag_madness
|
||||
name = "Antag Madness"
|
||||
role_category = /datum/role/nanotrasen_official
|
||||
@@ -776,8 +778,9 @@ Assign your candidates in choose_candidates() instead.
|
||||
cost = 0
|
||||
requirements = list(101,101,101,101,101,101,101,101,101,101) // Adminbus only
|
||||
high_population_requirement = 101
|
||||
var/list/nanotrasen_staff = list("Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Internal Affairs Agent")
|
||||
persistent = TRUE//latejoiners will either be heads of staff or traitors (unless traitor is deactivated/antagbanned)
|
||||
var/list/nanotrasen_staff = list("Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Internal Affairs Agent")
|
||||
var/escalation_delay = 18 MINUTES
|
||||
|
||||
/datum/dynamic_ruleset/roundstart/antag_madness/trim_candidates()//All the heads of staff get the role, the rest of the players will get trimmed by the other rulesets
|
||||
for(var/mob/P in candidates)
|
||||
@@ -794,7 +797,7 @@ Assign your candidates in choose_candidates() instead.
|
||||
return TRUE
|
||||
|
||||
/datum/dynamic_ruleset/roundstart/antag_madness/execute()
|
||||
antag_madness = TRUE
|
||||
antag_madness = ANTAG_MADNESS_EARLY
|
||||
//first we initialize the nanotrasen faction, even if there are no heads currently there
|
||||
var/datum/faction/nanotrasen/nanotrasen = find_active_faction_by_type(/datum/faction/nanotrasen)
|
||||
if (!nanotrasen)
|
||||
@@ -866,14 +869,28 @@ Assign your candidates in choose_candidates() instead.
|
||||
log_admin("ANTAG MADNESS: <font size='3'>[rule.name]</font> FAILED!")
|
||||
|
||||
spawn(10)
|
||||
message_admins("<span class='danger'>Antag Madness is now underway. In this very chaotic mode, admins are encouraged to proactively interfere with the round to keep things interesting, and help it reach a conclusion if necessary. Blobs and Rev may no longer cause the round to suddenly end, Malf and Nuke Ops still can if they destroy the station. If things get stale after 30 minutes and there are lots of dead players, consider bringing the round to a conclusion by either forcing a shuttle call, sending either the deathsquad or elite syndies to destroy the station, or trigger a supermatter cascade (or combination of those).</span>")
|
||||
log_admin("<span class='danger'>Antag Madness is now underway. In this very chaotic mode, admins are encouraged to proactively interfere with the round to keep things interesting, and help it reach a conclusion if necessary. Blobs and Rev may no longer cause the round to suddenly end, Malf and Nuke Ops still can if they destroy the station. If things get stale after 30 minutes and there are lots of dead players, consider bringing the round to a conclusion by either forcing a shuttle call, sending either the deathsquad or elite syndies to destroy the station, or trigger a supermatter cascade (or combination of those).</span>")
|
||||
message_admins("<span class='danger'>Antag Madness is now underway. In this very chaotic mode, admins are encouraged to proactively interfere with the round to keep things interesting, and help it reach a conclusion if necessary. Rev may no longer cause the round to suddenly end if all heads are dead, Malf, Blob and Nuke Ops still can if they destroy the station. If things get stale after 30 minutes and there are lots of dead players, consider bringing the round to a conclusion by either forcing a shuttle call, sending either the deathsquad or elite syndies to destroy the station, or trigger a supermatter cascade (or combination of those).</span>")
|
||||
log_admin("<span class='danger'>Antag Madness is now underway. In this very chaotic mode, admins are encouraged to proactively interfere with the round to keep things interesting, and help it reach a conclusion if necessary. Rev may no longer cause the round to suddenly end if all heads are dead, Malf, Blob and Nuke Ops still can if they destroy the station. If things get stale after 30 minutes and there are lots of dead players, consider bringing the round to a conclusion by either forcing a shuttle call, sending either the deathsquad or elite syndies to destroy the station, or trigger a supermatter cascade (or combination of those).</span>")
|
||||
|
||||
|
||||
spawn(20 MINUTES)//ERT calling is automated after 20 minutes. Any further developments will have to be manually enacted by the badmin who forced this terrible ruleset in the first place. have fun!
|
||||
nanotrasen.delta = TRUE
|
||||
spawn(escalation_delay)//ERT calling is automated after 18 minutes. Any further developments will have to be manually enacted by the badmin who forced this terrible ruleset in the first place. have fun!
|
||||
antag_madness = ANTAG_MADNESS_LATE
|
||||
var/datum/striketeam/ert/response_team = new()
|
||||
response_team.trigger_strike(null,"Nanotrasen officials have been misled to a dummy Space Station filled with antagonistic forces. You must find, protect, and retrieve the various Heads of Staff and Internal Affair Agents aboard the station. Anyone else is a potential threat that must be dealt with extreme prejudice.")
|
||||
for(var/mob/living/player in player_list)
|
||||
if (!player.client)
|
||||
continue
|
||||
if (player.stat == DEAD)
|
||||
continue
|
||||
if (isMoMMI(player))
|
||||
continue
|
||||
if (!isanyantag(player))
|
||||
var/datum/role/survivor/R = new
|
||||
R.AssignToRole(player.mind,1)
|
||||
R.Greet(GREET_MADNESSSURVIVOR)
|
||||
R.OnPostSetup()
|
||||
R.ForgeObjectives()
|
||||
R.AnnounceObjectives()
|
||||
return 1
|
||||
|
||||
/datum/dynamic_ruleset/roundstart/antag_madness/latespawn_interaction(var/mob/living/newPlayer)
|
||||
@@ -908,4 +925,14 @@ Assign your candidates in choose_candidates() instead.
|
||||
else
|
||||
newTraitor.Greet(GREET_LATEJOIN)
|
||||
return TRUE
|
||||
//tator disabled? tator banned? whatever you'll be a survivor if the round has gone on long enough
|
||||
if (antag_madness == ANTAG_MADNESS_LATE)
|
||||
var/datum/role/survivor/R = new
|
||||
R.AssignToRole(newPlayer.mind,1)
|
||||
R.Greet(GREET_MADNESSSURVIVOR)
|
||||
R.OnPostSetup()
|
||||
R.ForgeObjectives()
|
||||
R.AnnounceObjectives()
|
||||
return TRUE
|
||||
|
||||
return FALSE
|
||||
|
||||
@@ -87,8 +87,12 @@
|
||||
AnnounceObjectives()
|
||||
start = new()
|
||||
start.count()
|
||||
prelude_announcement = world.time + rand(WAIT_TIME_PHASE1,2*WAIT_TIME_PHASE1)
|
||||
outbreak_announcement = world.time + rand(WAIT_TIME_PHASE2,2*WAIT_TIME_PHASE2)
|
||||
if (antag_madness == ANTAG_MADNESS_EARLY)
|
||||
prelude_announcement = world.time + 10 MINUTES
|
||||
outbreak_announcement = world.time + 15 MINUTES
|
||||
else
|
||||
prelude_announcement = world.time + rand(WAIT_TIME_PHASE1,2*WAIT_TIME_PHASE1)
|
||||
outbreak_announcement = world.time + rand(WAIT_TIME_PHASE2,2*WAIT_TIME_PHASE2)
|
||||
|
||||
/datum/faction/blob_conglomerate/proc/CountFloors()
|
||||
var/floor_count = 0
|
||||
@@ -141,13 +145,19 @@
|
||||
to_chat(aiPlayer, "Laws Updated: [law]")
|
||||
research_shuttle.lockdown = "Under directive 7-10, [station_name()] is quarantined until further notice." //LOCKDOWN THESE SHUTTLES
|
||||
mining_shuttle.lockdown = "Under directive 7-10, [station_name()] is quarantined until further notice."
|
||||
emergency_shuttle.shutdown = TRUE //Quarantine
|
||||
emergency_shuttle_lockdown = "Under directive 7-10, [station_name()] is quarantined until further notice."
|
||||
stage = FACTION_ACTIVE
|
||||
|
||||
// Different levels of defcons to help the crew.
|
||||
|
||||
if (BLOB_DEFCON_3) // 20% blob count: code red
|
||||
set_security_level("red")
|
||||
last_security_level_change = SEC_LEVEL_RED
|
||||
var/sec_change = TRUE
|
||||
for(var/datum/faction/F in ticker.mode.factions)
|
||||
if (F.last_security_level_change == SEC_LEVEL_DELTA)
|
||||
sec_change = FALSE
|
||||
if (sec_change)
|
||||
set_security_level("red")//We raise the sec level to red, unless some malf AI has it set to delta already
|
||||
command_alert(/datum/command_alert/blob_defcon_3)
|
||||
stage = BLOB_DEFCON_3
|
||||
|
||||
@@ -190,7 +200,7 @@
|
||||
if (FACTION_DEFEATED) //Cleanup time
|
||||
command_alert(/datum/command_alert/biohazard_station_unlock)
|
||||
send_intercept(FACTION_DEFEATED)
|
||||
emergency_shuttle.shutdown = FALSE
|
||||
emergency_shuttle_lockdown = null
|
||||
research_shuttle.lockdown = null
|
||||
mining_shuttle.lockdown = null
|
||||
declared = FALSE
|
||||
|
||||
@@ -49,6 +49,9 @@ var/list/factions_with_hud_icons = list()
|
||||
var/list/voice_per_admin = list()
|
||||
var/admin_voice_say = "says"
|
||||
|
||||
var/emergency_shuttle_lockdown = null //if a string is set, commms console won't be able to call the shuttle, with that string given as explaination.
|
||||
var/last_security_level_change = SEC_LEVEL_GREEN //the last sec level set by that faction. If the security level should change, it will only do so if no other faction has a higher one
|
||||
|
||||
var/minor_victory = FALSE
|
||||
|
||||
// This datum represents all data that is exported to the statistics file at the end of the round.
|
||||
@@ -289,18 +292,30 @@ var/list/factions_with_hud_icons = list()
|
||||
switch(value)
|
||||
if(FACTION_DEFEATED) //Faction was close to victory, but then lost. Send shuttle and end theme.
|
||||
sleep(5 SECONDS)
|
||||
emergency_shuttle.shutdown = 0
|
||||
emergency_shuttle.online = 1
|
||||
emergency_shuttle_lockdown = null
|
||||
call_shuttle_proc(null, "The [name] has been defeated. An emergency shuttle has been dispatched")//will only actually occur if nothing else prevents the shuttle call
|
||||
OnPostDefeat()
|
||||
set_security_level("blue")
|
||||
ticker.StopThematic()
|
||||
last_security_level_change = SEC_LEVEL_BLUE
|
||||
var/sec_change = TRUE
|
||||
for(var/datum/faction/F in ticker.mode.factions)
|
||||
if (F.last_security_level_change > SEC_LEVEL_BLUE)
|
||||
sec_change = FALSE
|
||||
if (sec_change)
|
||||
set_security_level("blue")//We drop the sec level to blue, but only if no other faction wants it any higher
|
||||
ticker.StopThematic()
|
||||
if(FACTION_ENDGAME) //Faction is nearing victory. Set red alert and play endgame music.
|
||||
if(playlist)
|
||||
ticker.StartThematic(playlist)
|
||||
else
|
||||
ticker.StartThematic("endgame")
|
||||
sleep(2 SECONDS)
|
||||
set_security_level("red")
|
||||
last_security_level_change = SEC_LEVEL_RED
|
||||
var/sec_change = TRUE
|
||||
for(var/datum/faction/F in ticker.mode.factions)
|
||||
if (F.last_security_level_change == SEC_LEVEL_DELTA)
|
||||
sec_change = FALSE
|
||||
if (sec_change)
|
||||
if(playlist)
|
||||
ticker.StartThematic(playlist)
|
||||
else
|
||||
ticker.StartThematic("endgame")
|
||||
sleep(2 SECONDS)
|
||||
set_security_level("red")//We raise the sec level to red, unless some malf AI has it set to delta already
|
||||
|
||||
/datum/faction/proc/OnPostDefeat()
|
||||
if(emergency_shuttle.location || emergency_shuttle.direction) //If traveling or docked somewhere other than idle at command, don't call.
|
||||
|
||||
@@ -32,3 +32,8 @@
|
||||
default_admin_voice = "Nanotrasen Central Command"
|
||||
admin_voice_style = "resteamradio"
|
||||
var/delta = FALSE//goes true once the ERT call has been made
|
||||
|
||||
/datum/faction/nanotrasen/forgeObjectives()
|
||||
for(var/datum/role/R in members)
|
||||
R.ForgeObjectives()
|
||||
R.AnnounceObjectives()
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
#define ALL_REVS_DEAD 2
|
||||
|
||||
/datum/faction/revolution/check_win()
|
||||
if (antag_madness)
|
||||
if(antag_madness != ANTAG_MADNESS_OFF)
|
||||
return FALSE
|
||||
var/gameactivetime = world.time - ticker.gamestart_time*10 //gamestart_time is expressed in seconds, not deciseconds
|
||||
if(gameactivetime < 5 MINUTES)
|
||||
|
||||
@@ -32,10 +32,10 @@
|
||||
var/icon/logo = icon('icons/logos.dmi', logo_state)
|
||||
switch(greeting)
|
||||
if (GREET_ROUNDSTART)
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <span class='danger'>You are the [name]. You've uncovered a terrible truth: this space station is a dummy created by the Syndicate to lure Nanotrasen officials, and nearly everyone aboard is likely a Syndicate Agent . . . or worse. Trust only fellow heads of staff and the IAA, and survive until Nanotrasen manages to scramble an ERT to your rescue in about 20 minutes.</span>")
|
||||
to_chat(antag.current, "<span class='danger'>You may expect one in about 20 minutes.</span>")
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <span class='danger'>You are the [name]. You've uncovered a terrible truth: this space station is a dummy created by the Syndicate to lure Nanotrasen officials, and nearly everyone aboard is likely a Syndicate Agent . . . or worse. Trust only fellow heads of staff and the IAA, and survive until Nanotrasen manages to scramble an ERT to your rescue.</span>")
|
||||
to_chat(antag.current, "<span class='danger'>Centcom managed to reach you and has informed you that an ERT should hopefully arrive by 12:20. Attempting to call one earlier is bound to fail, and may lead to unwanted attention.</span>")
|
||||
if (GREET_LATEJOIN)
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <span class='danger'>You are the [name]. A voice in your earpiece suddenly informs you that this station is a trap laid out by the Syndicate to trap Nanotrasen officials, and anyone other than fellow heads of staff or IAA are most likely compromised. An ERT will be dispatched within the next 20 minutes.</span>")
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <span class='danger'>You are the [name]. A voice in your earpiece suddenly informs you that this station is a trap laid out by the Syndicate to trap Nanotrasen officials, and anyone other than fellow heads of staff or IAA are most likely compromised. An ERT should try to reach you for extraction around 12:20.</span>")
|
||||
if (GREET_LATEJOIN_ERT_COMING)
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <span class='danger'>You are the [name]. You might want to run away from arrivals and hide right now. This station is a trap laid out by the Syndicate to trap Nanotrasen officials, and anyone other than fellow heads of staff or IAA are most likely compromised. An ERT was dispatched and is tasked to protect you, try and meet up with them.</span>")
|
||||
if (GREET_LATEJOIN_ERT_NOT_COMING)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/datum/role/survivor
|
||||
id = SURVIVOR
|
||||
name = SURVIVOR
|
||||
logo_state = "gun-logo"
|
||||
logo_state = "survivor-logo"
|
||||
default_admin_voice = "Common Sense"
|
||||
admin_voice_style = "warning"
|
||||
var/survivor_type = "survivor"
|
||||
@@ -17,8 +17,18 @@
|
||||
survivor_type = "crusader"
|
||||
logo_state = "sword-logo"
|
||||
|
||||
/datum/role/survivor/Greet()
|
||||
to_chat(antag.current, "<B>You are a [survivor_type]!</B><BR>Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing...")
|
||||
/datum/role/survivor/Greet(var/greeting,var/custom)
|
||||
if (greeting == GREET_RIGHTANDWRONG)
|
||||
logo_state = "gun-logo"
|
||||
|
||||
var/icon/logo = icon('icons/logos.dmi', logo_state)
|
||||
switch(greeting)
|
||||
if (GREET_RIGHTANDWRONG)
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <B>You are a [survivor_type]!</B><BR>Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing...")
|
||||
if (GREET_MADNESSSURVIVOR)
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <B>You are a [survivor_type]!</B><BR>This place is bad news, and you are determined to make it out of here alive by any means necessary.")
|
||||
else
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <B>You are a [survivor_type]!</B>")
|
||||
|
||||
/datum/role/survivor/ForgeObjectives()
|
||||
var/datum/objective/survive/S = new
|
||||
@@ -42,7 +52,8 @@
|
||||
AppendObjective(S)
|
||||
|
||||
/datum/role/wizard/summon_magic/Greet()
|
||||
to_chat(antag.current, "<B>You are a Magician!</B><BR>Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing...")
|
||||
var/icon/logo = icon('icons/logos.dmi', logo_state)
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <B>You are a Magician!</B><BR>Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing...")
|
||||
|
||||
/datum/role/wizard/summon_magic/OnPostSetup(var/laterole = FALSE)
|
||||
return TRUE
|
||||
@@ -56,7 +67,8 @@
|
||||
id = MAGICIAN_ARTIFACT
|
||||
|
||||
/datum/role/wizard/summon_magic/artifact/Greet()
|
||||
to_chat(antag.current, "<B>You are a Magical Artificer!</B><BR>Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing...")
|
||||
var/icon/logo = icon('icons/logos.dmi', logo_state)
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <B>You are a Magical Artificer!</B><BR>Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing...")
|
||||
|
||||
/datum/role/wizard/summon_potions
|
||||
disallow_job = FALSE
|
||||
@@ -70,7 +82,8 @@
|
||||
AppendObjective(S)
|
||||
|
||||
/datum/role/wizard/summon_potions/Greet()
|
||||
to_chat(antag.current, "<B>You are a Potion Seller!</B><BR>Your own safety matters abov- Fuck that, GO SELL SOME POTIONS!")
|
||||
var/icon/logo = icon('icons/logos.dmi', logo_state)
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <B>You are a Potion Seller!</B><BR>Your own safety matters abov- Fuck that, GO SELL SOME POTIONS!")
|
||||
|
||||
/datum/role/wizard/summon_potions/OnPostSetup(var/laterole = FALSE)
|
||||
return TRUE
|
||||
|
||||
@@ -117,7 +117,10 @@
|
||||
if (GREET_LATEJOIN)
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <span class='danger'>You are a Traitor.<br>As a Syndicate agent, you are to infiltrate the crew and accomplish your objectives at all cost.</span>")
|
||||
if (GREET_LATEJOINMADNESS)
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <span class='danger'>You are a Traitor.<br>The Syndicate has baited Nanotrasen officials aboard this dummy space station along with the system's worst cases of scum and villainy, Find the heads of staff and make their life and un-life a living hell.</span>")
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <span class='danger'>You are a Traitor, BUT...</span>")
|
||||
to_chat(antag.current, "<span class='danger'>The Syndicate has baited Nanotrasen officials aboard this dummy space station along with the system's worst examples of scum and villainy.</span>")
|
||||
to_chat(antag.current, "<span class='danger'>Find the heads of staff and make their life and un-life a living hell.</span>")
|
||||
to_chat(antag.current, "<span class='danger'>Beware of the station's other unruly occupants.</span>")
|
||||
if (GREET_SYNDBEACON)
|
||||
to_chat(antag.current, "<img src='data:image/png;base64,[icon2base64(logo)]' style='position: relative; top: 10;'/> <span class='danger'>You have joined the ranks of the Syndicate and become a traitor to Nanotrasen!</span>")
|
||||
else
|
||||
|
||||
@@ -142,6 +142,9 @@
|
||||
to_chat(src, "Current cost of a blob core is [cost]!")
|
||||
return
|
||||
|
||||
if(antag_madness != ANTAG_MADNESS_OFF)
|
||||
to_chat(src, "<span class='danger'>Something is amiss, maybe some genetic defect, but regardless you find yourself unable to create a new blob core. You'll have to endure on your own.</span>")
|
||||
return
|
||||
|
||||
B.change_to(/obj/effect/blob/core, src, TRUE)
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
if (!(isrole(R.id, H)))
|
||||
R.AssignToRole(H.mind)
|
||||
R.Greet()
|
||||
R.Greet(GREET_RIGHTANDWRONG)
|
||||
R.OnPostSetup()
|
||||
R.ForgeObjectives()
|
||||
R.AnnounceObjectives()
|
||||
|
||||
@@ -557,40 +557,47 @@ var/list/shuttle_log = list()
|
||||
if(!universe.OnShuttleCall(user))
|
||||
return
|
||||
if(!map.linked_to_centcomm)
|
||||
to_chat(usr, "<span class='danger'>Error: No connection can be made to central command .</span>")
|
||||
if (user)
|
||||
to_chat(user, "<span class='danger'>Error: No connection can be made to central command .</span>")
|
||||
return
|
||||
|
||||
//if(sent_strike_team == 1)
|
||||
// to_chat(user, "Centcom will not allow the shuttle to be called. Consider all contracts terminated.")
|
||||
// return
|
||||
|
||||
if(emergency_shuttle.shutdown)
|
||||
to_chat(user, "The emergency shuttle has been disabled.")
|
||||
if (user)
|
||||
to_chat(user, "The emergency shuttle has been disabled.")
|
||||
return
|
||||
|
||||
if(ticker && (world.time / 10 < ticker.gamestart_time + SHUTTLEGRACEPERIOD)) // Five minute grace period to let the game get going without lolmetagaming. -- TLE
|
||||
to_chat(user, "The emergency shuttle is refueling. Please wait another [round((ticker.gamestart_time + SHUTTLEGRACEPERIOD - world.time / 10) / 60, 1)] minute\s before trying again.")
|
||||
if (user)
|
||||
to_chat(user, "The emergency shuttle is refueling. Please wait another [round((ticker.gamestart_time + SHUTTLEGRACEPERIOD - world.time / 10) / 60, 1)] minute\s before trying again.")
|
||||
return
|
||||
|
||||
if(emergency_shuttle.direction == -1)
|
||||
to_chat(user, "The emergency shuttle may not be called while returning to CentCom.")
|
||||
if (user)
|
||||
to_chat(user, "The emergency shuttle may not be called while returning to CentCom.")
|
||||
return
|
||||
|
||||
if(emergency_shuttle.online)
|
||||
to_chat(user, "The emergency shuttle is already on its way.")
|
||||
if (user)
|
||||
to_chat(user, "The emergency shuttle is already on its way.")
|
||||
return
|
||||
|
||||
if(ticker.mode.name == "blob")
|
||||
to_chat(user, "Under directive 7-10, [station_name()] is quarantined until further notice.")
|
||||
return
|
||||
for(var/datum/faction/F in ticker.mode.factions)
|
||||
if (F.emergency_shuttle_lockdown)
|
||||
if (user)
|
||||
to_chat(user,F.emergency_shuttle_lockdown)
|
||||
return
|
||||
|
||||
emergency_shuttle.incall()
|
||||
if(!justification)
|
||||
justification = "#??!7E/_1$*/ARR-CON<4F>FAIL!!*$^?" //Can happen for reasons, let's deal with it IC
|
||||
if(!isobserver(user))
|
||||
shuttle_log += "\[[worldtime2text()]] Called from [get_area(user)] ([user.x-WORLD_X_OFFSET[user.z]], [user.y-WORLD_Y_OFFSET[user.z]], [user.z])."
|
||||
log_game("[key_name(user)] has called the shuttle. Justification given : '[justification]'")
|
||||
message_admins("[key_name_admin(user)] has called the shuttle. Justification given : '[justification]'.", 1)
|
||||
if (user)
|
||||
log_game("[key_name(user)] has called the shuttle. Justification given : '[justification]'")
|
||||
message_admins("[key_name_admin(user)] has called the shuttle. Justification given : '[justification]'.", 1)
|
||||
else
|
||||
log_game("The shuttle has been called. Justification given : '[justification]'")
|
||||
message_admins("The shuttle has been called. Justification given : '[justification]'.", 1)
|
||||
var/datum/command_alert/emergency_shuttle_called/CA = new /datum/command_alert/emergency_shuttle_called
|
||||
CA.justification = justification
|
||||
command_alert(CA)
|
||||
|
||||
@@ -15,7 +15,7 @@ var/list/response_team_members = list()
|
||||
|
||||
/datum/striketeam/ert/failure()
|
||||
command_alert(/datum/command_alert/ert_fail)
|
||||
if (antag_madness)
|
||||
if(antag_madness != ANTAG_MADNESS_OFF)
|
||||
var/datum/faction/nanotrasen/nanotrasen = find_active_faction_by_type(/datum/faction/nanotrasen)
|
||||
if (!nanotrasen)
|
||||
nanotrasen = ticker.mode.CreateFaction(/datum/faction/nanotrasen, null, 1)
|
||||
@@ -25,7 +25,7 @@ var/list/response_team_members = list()
|
||||
|
||||
/datum/striketeam/ert/extras()
|
||||
command_alert(/datum/command_alert/ert_success)
|
||||
if (antag_madness)
|
||||
if(antag_madness != ANTAG_MADNESS_OFF)
|
||||
var/datum/faction/nanotrasen/nanotrasen = find_active_faction_by_type(/datum/faction/nanotrasen)
|
||||
if (!nanotrasen)
|
||||
nanotrasen = ticker.mode.CreateFaction(/datum/faction/nanotrasen, null, 1)
|
||||
|
||||
@@ -77,25 +77,32 @@ var/list/sent_strike_teams = list()
|
||||
searching = TRUE
|
||||
|
||||
var/icon/team_logo = icon('icons/logos.dmi', logo)
|
||||
for(var/mob/dead/observer/O in dead_mob_list)
|
||||
if(!O.client || jobban_isbanned(O, ROLE_STRIKE) || O.client.is_afk())
|
||||
continue
|
||||
var/fake = FALSE//Antag Madness
|
||||
|
||||
to_chat(O, "[bicon(team_logo)]<span class='recruit'>[faction_name] needs YOU to become part of its upcoming [striketeam_name]. (<a href='?src=\ref[src];signup=\ref[O]'>Apply now!</a>)</span>[bicon(team_logo)]")
|
||||
to_chat(O, "[bicon(team_logo)]<span class='recruit'>Their mission: [mission]</span>[bicon(team_logo)]")
|
||||
window_flash(O)
|
||||
if ((antag_madness != ANTAG_MADNESS_EARLY) || (striketeam_name != TEAM_ERT))//if we're early during Antag Madness, ERT attempts will "fake" their search for players
|
||||
for(var/mob/dead/observer/O in dead_mob_list)
|
||||
if(!O.client || jobban_isbanned(O, ROLE_STRIKE) || O.client.is_afk())
|
||||
continue
|
||||
|
||||
to_chat(O, "[bicon(team_logo)]<span class='recruit'>[faction_name] needs YOU to become part of its upcoming [striketeam_name]. (<a href='?src=\ref[src];signup=\ref[O]'>Apply now!</a>)</span>[bicon(team_logo)]")
|
||||
to_chat(O, "[bicon(team_logo)]<span class='recruit'>Their mission: [mission]</span>[bicon(team_logo)]")
|
||||
window_flash(O)
|
||||
else
|
||||
fake = TRUE
|
||||
sent_strike_teams -= striketeam_name//so we don't prevent the automated ERT call from firing
|
||||
|
||||
spawn(1 MINUTES)
|
||||
searching = FALSE
|
||||
|
||||
for(var/mob/dead/observer/O in dead_mob_list)
|
||||
if(!O.client || jobban_isbanned(O, ROLE_STRIKE) || O.client.is_afk())
|
||||
continue
|
||||
to_chat(O, "[bicon(team_logo)]<span class='recruit'>Applications for [faction_name]'s [striketeam_name] are now closed.</span>[bicon(team_logo)]")
|
||||
if (!fake)
|
||||
for(var/mob/dead/observer/O in dead_mob_list)
|
||||
if(!O.client || jobban_isbanned(O, ROLE_STRIKE) || O.client.is_afk())
|
||||
continue
|
||||
to_chat(O, "[bicon(team_logo)]<span class='recruit'>Applications for [faction_name]'s [striketeam_name] are now closed.</span>[bicon(team_logo)]")
|
||||
|
||||
if(!applicants || applicants.len <= 0)
|
||||
log_admin("[striketeam_name] received no applications.")
|
||||
message_admins("[striketeam_name] received no applications.")
|
||||
log_admin("[striketeam_name] received no applications[fake ? " because it was sent too early during Antag Madness." : "."]")
|
||||
message_admins("[striketeam_name] received no applications[fake ? " because it was sent too early during Antag Madness." : "."]")
|
||||
failure()
|
||||
if (custom)
|
||||
sent_strike_teams -= TEAM_CUSTOM
|
||||
|
||||
BIN
icons/logos.dmi
BIN
icons/logos.dmi
Binary file not shown.
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 30 KiB |
Reference in New Issue
Block a user