Merge pull request #3894 from Citadel-Station-13/upstream-merge-32559

[MIRROR] Makes false alarm use more explicit in event code.
This commit is contained in:
LetterJay
2017-11-13 11:42:53 -06:00
committed by GitHub
47 changed files with 927 additions and 910 deletions

View File

@@ -108,11 +108,12 @@
var/datum/round_event_control/control
var/startWhen = 0 //When in the lifetime to call start().
var/announceWhen = 0 //When in the lifetime to call announce(). Set an event's announceWhen to >0 if there is an announcement.
var/announceWhen = 0 //When in the lifetime to call announce(). Set an event's announceWhen to -1 if announcement should not be shown.
var/endWhen = 0 //When in the lifetime the event should end.
var/activeFor = 0 //How long the event has existed. You don't need to change this.
var/current_players = 0 //Amount of of alive, non-AFK human players on server at the time of event start
var/fakeable = TRUE //Can be faked by fake news event.
//Called first before processing.
//Allows you to setup your event, such as randomly
@@ -133,7 +134,7 @@
//Called when the tick is equal to the announceWhen variable.
//Allows you to announce before starting or vice versa.
//Only called once.
/datum/round_event/proc/announce()
/datum/round_event/proc/announce(fake)
return
//Called on or after the tick counter is equal to startWhen.
@@ -167,7 +168,7 @@
if(activeFor == announceWhen)
processing = FALSE
announce()
announce(FALSE)
processing = TRUE
if(startWhen < activeFor && activeFor < endWhen)

View File

@@ -9,6 +9,7 @@
/datum/round_event/ghost_role/abductor
minimum_required = 2
role_name = "abductor team"
fakeable = FALSE //Nothing to fake here
/datum/round_event/ghost_role/abductor/spawn_role()
var/list/mob/dead/observer/candidates = get_candidates("abductor", null, ROLE_ABDUCTOR)

View File

@@ -30,8 +30,8 @@
control.occurrences--
return ..()
/datum/round_event/ghost_role/alien_infestation/announce()
if(successSpawn)
/datum/round_event/ghost_role/alien_infestation/announce(fake)
if(successSpawn || fake)
priority_announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", 'sound/ai/aliens.ogg')

View File

@@ -1,33 +1,33 @@
/datum/round_event_control/anomaly
name = "Anomaly: Energetic Flux"
typepath = /datum/round_event/anomaly
min_players = 1
max_occurrences = 0 //This one probably shouldn't occur! It'd work, but it wouldn't be very fun.
weight = 15
/datum/round_event/anomaly
var/area/impact_area
var/obj/effect/anomaly/newAnomaly
announceWhen = 1
/datum/round_event/anomaly/setup(loop=0)
var/safety_loop = loop + 1
if(safety_loop > 50)
kill()
end()
impact_area = findEventArea()
if(!impact_area)
setup(safety_loop)
var/list/turf_test = get_area_turfs(impact_area)
if(!turf_test.len)
setup(safety_loop)
/datum/round_event/anomaly/announce()
priority_announce("Localized energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert")
/datum/round_event/anomaly/start()
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/flux(T)
/datum/round_event_control/anomaly
name = "Anomaly: Energetic Flux"
typepath = /datum/round_event/anomaly
min_players = 1
max_occurrences = 0 //This one probably shouldn't occur! It'd work, but it wouldn't be very fun.
weight = 15
/datum/round_event/anomaly
var/area/impact_area
var/obj/effect/anomaly/newAnomaly
announceWhen = 1
/datum/round_event/anomaly/setup(loop=0)
var/safety_loop = loop + 1
if(safety_loop > 50)
kill()
end()
impact_area = findEventArea()
if(!impact_area)
setup(safety_loop)
var/list/turf_test = get_area_turfs(impact_area)
if(!turf_test.len)
setup(safety_loop)
/datum/round_event/anomaly/announce(fake)
priority_announce("Localized energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert")
/datum/round_event/anomaly/start()
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/flux(T)

View File

@@ -1,19 +1,19 @@
/datum/round_event_control/anomaly/anomaly_bluespace
name = "Anomaly: Bluespace"
typepath = /datum/round_event/anomaly/anomaly_bluespace
max_occurrences = 1
weight = 5
/datum/round_event/anomaly/anomaly_bluespace
startWhen = 3
announceWhen = 10
/datum/round_event/anomaly/anomaly_bluespace/announce()
priority_announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
/datum/round_event/anomaly/anomaly_bluespace/start()
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/bluespace(T)
/datum/round_event_control/anomaly/anomaly_bluespace
name = "Anomaly: Bluespace"
typepath = /datum/round_event/anomaly/anomaly_bluespace
max_occurrences = 1
weight = 5
/datum/round_event/anomaly/anomaly_bluespace
startWhen = 3
announceWhen = 10
/datum/round_event/anomaly/anomaly_bluespace/announce(fake)
priority_announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
/datum/round_event/anomaly/anomaly_bluespace/start()
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/bluespace(T)

View File

@@ -1,20 +1,20 @@
/datum/round_event_control/anomaly/anomaly_flux
name = "Anomaly: Hyper-Energetic Flux"
typepath = /datum/round_event/anomaly/anomaly_flux
min_players = 10
max_occurrences = 5
weight = 20
/datum/round_event/anomaly/anomaly_flux
startWhen = 10
announceWhen = 3
/datum/round_event/anomaly/anomaly_flux/announce()
priority_announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
/datum/round_event/anomaly/anomaly_flux/start()
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/flux(T)
/datum/round_event_control/anomaly/anomaly_flux
name = "Anomaly: Hyper-Energetic Flux"
typepath = /datum/round_event/anomaly/anomaly_flux
min_players = 10
max_occurrences = 5
weight = 20
/datum/round_event/anomaly/anomaly_flux
startWhen = 10
announceWhen = 3
/datum/round_event/anomaly/anomaly_flux/announce(fake)
priority_announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
/datum/round_event/anomaly/anomaly_flux/start()
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/flux(T)

View File

@@ -1,17 +1,17 @@
/datum/round_event_control/anomaly/anomaly_grav
name = "Anomaly: Gravitational"
typepath = /datum/round_event/anomaly/anomaly_grav
max_occurrences = 5
weight = 20
/datum/round_event/anomaly/anomaly_grav
startWhen = 3
announceWhen = 20
/datum/round_event/anomaly/anomaly_grav/announce()
priority_announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
/datum/round_event/anomaly/anomaly_grav/start()
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/grav(T)
/datum/round_event_control/anomaly/anomaly_grav
name = "Anomaly: Gravitational"
typepath = /datum/round_event/anomaly/anomaly_grav
max_occurrences = 5
weight = 20
/datum/round_event/anomaly/anomaly_grav
startWhen = 3
announceWhen = 20
/datum/round_event/anomaly/anomaly_grav/announce(fake)
priority_announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
/datum/round_event/anomaly/anomaly_grav/start()
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/grav(T)

View File

@@ -8,7 +8,7 @@
startWhen = 3
announceWhen = 10
/datum/round_event/anomaly/anomaly_pyro/announce()
/datum/round_event/anomaly/anomaly_pyro/announce(fake)
priority_announce("Pyroclastic anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
/datum/round_event/anomaly/anomaly_pyro/start()

View File

@@ -1,19 +1,19 @@
/datum/round_event_control/anomaly/anomaly_vortex
name = "Anomaly: Vortex"
typepath = /datum/round_event/anomaly/anomaly_vortex
min_players = 20
max_occurrences = 2
weight = 5
/datum/round_event/anomaly/anomaly_vortex
startWhen = 10
announceWhen = 3
/datum/round_event/anomaly/anomaly_vortex/announce()
priority_announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert")
/datum/round_event/anomaly/anomaly_vortex/start()
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/bhole(T)
/datum/round_event_control/anomaly/anomaly_vortex
name = "Anomaly: Vortex"
typepath = /datum/round_event/anomaly/anomaly_vortex
min_players = 20
max_occurrences = 2
weight = 5
/datum/round_event/anomaly/anomaly_vortex
startWhen = 10
announceWhen = 3
/datum/round_event/anomaly/anomaly_vortex/announce(fake)
priority_announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert")
/datum/round_event/anomaly/anomaly_vortex/start()
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/bhole(T)

View File

@@ -12,7 +12,7 @@
announceWhen = -1
role_name = "blob overmind"
/datum/round_event/ghost_role/blob/announce()
/datum/round_event/ghost_role/blob/announce(fake)
priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/ai/outbreak5.ogg')
/datum/round_event/ghost_role/blob/spawn_role()

View File

@@ -21,9 +21,14 @@
"You don't want to buy anything? Yeah, well, I didn't want to buy your mom either.")
/datum/round_event/brand_intelligence/announce()
priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please stand by. The origin is believed to be \a [originMachine.name].", "Machine Learning Alert")
/datum/round_event/brand_intelligence/announce(fake)
var/source = "unknown machine"
if(fake)
var/obj/machinery/vending/cola/example = /obj/machinery/vending/cola
source = initial(example.name)
else if(originMachine)
source = originMachine.name
priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please stand by. The origin is believed to be \a [source].", "Machine Learning Alert")
/datum/round_event/brand_intelligence/start()
for(var/obj/machinery/vending/V in GLOB.machines)

View File

@@ -8,7 +8,7 @@
/datum/round_event/camera_failure
startWhen = 1
endWhen = 2
announceWhen = 0
fakeable = FALSE
/datum/round_event/camera_failure/tick()
var/iterations = 1

View File

@@ -13,7 +13,7 @@
/datum/round_event/carp_migration/setup()
startWhen = rand(40, 60)
/datum/round_event/carp_migration/announce()
/datum/round_event/carp_migration/announce(fake)
priority_announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")

View File

@@ -1,26 +1,26 @@
/datum/round_event_control/communications_blackout
name = "Communications Blackout"
typepath = /datum/round_event/communications_blackout
weight = 30
/datum/round_event/communications_blackout
announceWhen = 1
/datum/round_event/communications_blackout/announce()
var/alert = pick( "Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you*%fj00)`5vc-BZZT", \
"Ionospheric anomalies detected. Temporary telecommunication failu*3mga;b4;'1v<31>-BZZZT", \
"Ionospheric anomalies detected. Temporary telec#MCi46:5.;@63-BZZZZT", \
"Ionospheric anomalies dete'fZ\\kg5_0-BZZZZZT", \
"Ionospheri:%<25> MCayj^j<.3-BZZZZZZT", \
"#4nd%;f4y6,><3E>%-BZZZZZZZT")
for(var/mob/living/silicon/ai/A in GLOB.ai_list) //AIs are always aware of communication blackouts.
to_chat(A, "<br><span class='warning'><b>[alert]</b></span><br>")
if(prob(30)) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts.
priority_announce(alert)
/datum/round_event/communications_blackout/start()
for(var/obj/machinery/telecomms/T in GLOB.telecomms_list)
/datum/round_event_control/communications_blackout
name = "Communications Blackout"
typepath = /datum/round_event/communications_blackout
weight = 30
/datum/round_event/communications_blackout
announceWhen = 1
/datum/round_event/communications_blackout/announce(fake)
var/alert = pick( "Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you*%fj00)`5vc-BZZT", \
"Ionospheric anomalies detected. Temporary telecommunication failu*3mga;b4;'1v<31>-BZZZT", \
"Ionospheric anomalies detected. Temporary telec#MCi46:5.;@63-BZZZZT", \
"Ionospheric anomalies dete'fZ\\kg5_0-BZZZZZT", \
"Ionospheri:%<25> MCayj^j<.3-BZZZZZZT", \
"#4nd%;f4y6,><3E>%-BZZZZZZZT")
for(var/mob/living/silicon/ai/A in GLOB.ai_list) //AIs are always aware of communication blackouts.
to_chat(A, "<br><span class='warning'><b>[alert]</b></span><br>")
if(prob(30) || fake) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts.
priority_announce(alert)
/datum/round_event/communications_blackout/start()
for(var/obj/machinery/telecomms/T in GLOB.telecomms_list)
T.emp_act(EMP_HEAVY)

View File

@@ -6,6 +6,7 @@
/datum/round_event/ghost_role/devil
var/success_spawn = 0
role_name = "devil"
fakeable = FALSE
/datum/round_event/ghost_role/devil/kill()
if(!success_spawn && control)

View File

@@ -11,7 +11,7 @@
var/virus_type
/datum/round_event/disease_outbreak/announce()
/datum/round_event/disease_outbreak/announce(fake)
priority_announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/ai/outbreak7.ogg')
/datum/round_event/disease_outbreak/setup()

View File

@@ -1,30 +1,31 @@
/datum/round_event_control/space_dust
name = "Minor Space Dust"
typepath = /datum/round_event/space_dust
weight = 200
max_occurrences = 1000
earliest_start = 0
alertadmins = 0
/datum/round_event/space_dust
startWhen = 1
endWhen = 2
announceWhen = 0
/datum/round_event/space_dust/start()
spawn_meteors(1, GLOB.meteorsC)
/datum/round_event_control/sandstorm
name = "Sandstorm"
typepath = /datum/round_event/sandstorm
weight = 0
max_occurrences = 0
earliest_start = 0
/datum/round_event/sandstorm
startWhen = 1
endWhen = 150 // ~5 min
announceWhen = 0
/datum/round_event/sandstorm/tick()
spawn_meteors(10, GLOB.meteorsC)
/datum/round_event_control/space_dust
name = "Minor Space Dust"
typepath = /datum/round_event/space_dust
weight = 200
max_occurrences = 1000
earliest_start = 0
alertadmins = 0
/datum/round_event/space_dust
startWhen = 1
endWhen = 2
fakeable = FALSE
/datum/round_event/space_dust/start()
spawn_meteors(1, GLOB.meteorsC)
/datum/round_event_control/sandstorm
name = "Sandstorm"
typepath = /datum/round_event/sandstorm
weight = 0
max_occurrences = 0
earliest_start = 0
/datum/round_event/sandstorm
startWhen = 1
endWhen = 150 // ~5 min
announceWhen = 0
fakeable = FALSE
/datum/round_event/sandstorm/tick()
spawn_meteors(10, GLOB.meteorsC)

View File

@@ -11,7 +11,7 @@
var/lightsoutRange = 25
announceWhen = 1
/datum/round_event/electrical_storm/announce()
/datum/round_event/electrical_storm/announce(fake)
priority_announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert")

View File

@@ -13,10 +13,8 @@
var/list/possible_types = list()
for(var/datum/round_event_control/E in SSevents.control)
if(istype(E, /datum/round_event_control/falsealarm))
continue
var/datum/round_event/event = E.typepath
if(initial(event.announceWhen) <= 0)
if(!initial(event.fakeable))
continue
possible_types += E
@@ -28,8 +26,11 @@
/datum/round_event/falsealarm
announceWhen = 0
endWhen = 1
fakeable = FALSE
/datum/round_event/falsealarm/announce()
/datum/round_event/falsealarm/announce(fake)
if(fake) //What are you doing
return
var/players_amt = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1)
var/gamemode = SSticker.mode.config_tag
@@ -45,7 +46,7 @@
var/datum/round_event/Event = new event_control.typepath()
message_admins("False Alarm: [Event]")
Event.kill() //do not process this event - no starts, no ticks, no ends
Event.announce() //just announce it like it's happening
Event.announce(TRUE) //just announce it like it's happening
/proc/gather_false_events(players_amt, gamemode)
. = list()
@@ -56,6 +57,6 @@
continue
var/datum/round_event/event = E.typepath
if(initial(event.announceWhen) <= 0)
if(!initial(event.fakeable))
continue
. += E

View File

@@ -8,7 +8,7 @@
announceWhen = 1
startWhen = 1
/datum/round_event/grid_check/announce()
/datum/round_event/grid_check/announce(fake)
priority_announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", 'sound/ai/poweroff.ogg')

View File

@@ -1,18 +1,18 @@
// Basically, cut the event frequency in half to simulate unluckiness.
/datum/round_event_control/fridaythethirteen
name = "Friday the 13th"
holidayID = FRIDAY_13TH
typepath = /datum/round_event/fridaythethirteen
weight = -1
max_occurrences = 1
earliest_start = 0
/datum/round_event/fridaythethirteen/start()
//Very unlucky, cut the frequency of events in half.
events.frequency_lower /= 2
events.frequency_upper /= 2
/datum/round_event/fridaythethirteen/announce()
for(var/mob/living/L in player_list)
to_chat(L, "<span class='warning'>You are feeling unlucky today.</span>")
// Basically, cut the event frequency in half to simulate unluckiness.
/datum/round_event_control/fridaythethirteen
name = "Friday the 13th"
holidayID = FRIDAY_13TH
typepath = /datum/round_event/fridaythethirteen
weight = -1
max_occurrences = 1
earliest_start = 0
/datum/round_event/fridaythethirteen/start()
//Very unlucky, cut the frequency of events in half.
events.frequency_lower /= 2
events.frequency_upper /= 2
/datum/round_event/fridaythethirteen/announce(fake)
for(var/mob/living/L in player_list)
to_chat(L, "<span class='warning'>You are feeling unlucky today.</span>")

View File

@@ -19,7 +19,7 @@
new /mob/living/simple_animal/parrot/Poly/ghost(Poly.loc)
qdel(Poly)
/datum/round_event/spooky/announce()
/datum/round_event/spooky/announce(fake)
priority_announce(pick("RATTLE ME BONES!","THE RIDE NEVER ENDS!", "A SKELETON POPS OUT!", "SPOOKY SCARY SKELETONS!", "CREWMEMBERS BEWARE, YOU'RE IN FOR A SCARE!") , "THE CALL IS COMING FROM INSIDE THE HOUSE")
//spooky foods (you can't actually make these when it's not halloween)

View File

@@ -61,7 +61,7 @@
to_chat(lover, "<span class='warning'><B>You're on a date with [date]! Protect them at all costs. This takes priority over all other loyalties.</B></span>")
/datum/round_event/valentines/announce()
/datum/round_event/valentines/announce(fake)
priority_announce("It's Valentine's Day! Give a valentine to that special someone!")
/obj/item/valentine

View File

@@ -35,7 +35,7 @@
for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines)
Monitor.icon_state = "entertainment_xmas"
/datum/round_event/presents/announce()
/datum/round_event/presents/announce(fake)
priority_announce("Ho Ho Ho, Merry Xmas!", "Unknown Transmission")
@@ -105,7 +105,7 @@
/datum/round_event/santa
var/mob/living/carbon/human/santa //who is our santa?
/datum/round_event/santa/announce()
/datum/round_event/santa/announce(fake)
priority_announce("Santa is coming to town!", "Unknown Transmission")
/datum/round_event/santa/start()

View File

@@ -16,7 +16,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
/datum/round_event/immovable_rod
announceWhen = 5
/datum/round_event/immovable_rod/announce()
/datum/round_event/immovable_rod/announce(fake)
priority_announce("What the fuck was that?!", "General Alert")
/datum/round_event/immovable_rod/start()

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@
/datum/round_event/meteor_wave/major_dust
wave_name = "space dust"
/datum/round_event/meteor_wave/major_dust/announce()
/datum/round_event/meteor_wave/major_dust/announce(fake)
var/reason = pick(
"The station is passing through a debris cloud, expect minor damage \
to external fittings and fixtures.",

View File

@@ -1,10 +1,13 @@
/datum/round_event_control/mass_hallucination
name = "Mass Hallucination"
typepath = /datum/round_event/mass_hallucination
weight = 7
max_occurrences = 2
min_players = 1
/datum/round_event/mass_hallucination/start()
for(var/mob/living/carbon/C in GLOB.living_mob_list)
C.hallucination += rand(20, 50)
/datum/round_event_control/mass_hallucination
name = "Mass Hallucination"
typepath = /datum/round_event/mass_hallucination
weight = 7
max_occurrences = 2
min_players = 1
/datum/round_event/mass_hallucination
fakeable = FALSE
/datum/round_event/mass_hallucination/start()
for(var/mob/living/carbon/C in GLOB.living_mob_list)
C.hallucination += rand(20, 50)

View File

@@ -7,5 +7,5 @@
/datum/round_event/meteor_wave/meaty
wave_name = "meaty"
/datum/round_event/meteor_wave/meaty/announce()
/datum/round_event/meteor_wave/meaty/announce(fake)
priority_announce("Meaty ores have been detected on collision course with the station.", "Oh crap, get the mop.",'sound/ai/meteors.ogg')

View File

@@ -45,7 +45,7 @@
WARNING("Wave name of [wave_name] not recognised.")
kill()
/datum/round_event/meteor_wave/announce()
/datum/round_event/meteor_wave/announce(fake)
priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", 'sound/ai/meteors.ogg')
/datum/round_event/meteor_wave/tick()

View File

@@ -4,11 +4,10 @@
weight = 10
/datum/round_event/mice_migration
announceWhen = 0
var/minimum_mice = 5
var/maximum_mice = 15
/datum/round_event/mice_migration/announce()
/datum/round_event/mice_migration/announce(fake)
var/cause = pick("space-winter", "budget-cuts", "Ragnarok",
"space being cold", "\[REDACTED\]", "climate change",
"bad luck")

View File

@@ -7,6 +7,7 @@
/datum/round_event/ghost_role/nightmare
minimum_required = 1
role_name = "nightmare"
fakeable = FALSE
/datum/round_event/ghost_role/nightmare/spawn_role()
var/list/candidates = get_candidates("alien", null, ROLE_ALIEN)

View File

@@ -7,6 +7,7 @@
/datum/round_event/ghost_role/operative
minimum_required = 1
role_name = "lone operative"
fakeable = FALSE
/datum/round_event/ghost_role/operative/spawn_role()
var/list/candidates = get_candidates("operative", null, ROLE_OPERATIVE)

View File

@@ -66,7 +66,7 @@
next_boss_spawn = startWhen + Ceiling(2 * number_of_hostiles / number_of_bosses)
/datum/round_event/portal_storm/announce()
/datum/round_event/portal_storm/announce(fake)
set waitfor = 0
sound_to_playing_players('sound/magic/lightning_chargeup.ogg')
sleep(80)

View File

@@ -1,59 +1,59 @@
/datum/round_event_control/grey_tide
name = "Grey Tide"
typepath = /datum/round_event/grey_tide
max_occurrences = 2
min_players = 5
/datum/round_event/grey_tide
announceWhen = 50
endWhen = 20
var/list/area/areasToOpen = list()
var/list/potential_areas = list(/area/bridge,
/area/engine,
/area/medical,
/area/security,
/area/quartermaster,
/area/science)
var/severity = 1
/datum/round_event/grey_tide/setup()
announceWhen = rand(50, 60)
endWhen = rand(20, 30)
severity = rand(1,3)
for(var/i in 1 to severity)
var/picked_area = pick_n_take(potential_areas)
for(var/area/A in world)
if(istype(A, picked_area))
areasToOpen += A
/datum/round_event/grey_tide/announce()
if(areasToOpen && areasToOpen.len > 0)
priority_announce("Gr3y.T1d3 virus detected in [station_name()] door subroutines. Severity level of [severity]. Recommend station AI involvement.", "Security Alert")
else
log_world("ERROR: Could not initate grey-tide. No areas in the list!")
kill()
/datum/round_event/grey_tide/start()
for(var/area/A in areasToOpen)
for(var/obj/machinery/light/L in A)
L.flicker(10)
/datum/round_event/grey_tide/end()
for(var/area/A in areasToOpen)
for(var/obj/O in A)
/datum/round_event_control/grey_tide
name = "Grey Tide"
typepath = /datum/round_event/grey_tide
max_occurrences = 2
min_players = 5
/datum/round_event/grey_tide
announceWhen = 50
endWhen = 20
var/list/area/areasToOpen = list()
var/list/potential_areas = list(/area/bridge,
/area/engine,
/area/medical,
/area/security,
/area/quartermaster,
/area/science)
var/severity = 1
/datum/round_event/grey_tide/setup()
announceWhen = rand(50, 60)
endWhen = rand(20, 30)
severity = rand(1,3)
for(var/i in 1 to severity)
var/picked_area = pick_n_take(potential_areas)
for(var/area/A in world)
if(istype(A, picked_area))
areasToOpen += A
/datum/round_event/grey_tide/announce(fake)
if(areasToOpen && areasToOpen.len > 0)
priority_announce("Gr3y.T1d3 virus detected in [station_name()] door subroutines. Severity level of [severity]. Recommend station AI involvement.", "Security Alert")
else
log_world("ERROR: Could not initate grey-tide. No areas in the list!")
kill()
/datum/round_event/grey_tide/start()
for(var/area/A in areasToOpen)
for(var/obj/machinery/light/L in A)
L.flicker(10)
/datum/round_event/grey_tide/end()
for(var/area/A in areasToOpen)
for(var/obj/O in A)
if(istype(O, /obj/machinery/power/apc))
var/obj/machinery/power/apc/temp = O
temp.overload_lighting()
var/obj/machinery/power/apc/temp = O
temp.overload_lighting()
else if(istype(O, /obj/structure/closet/secure_closet))
var/obj/structure/closet/secure_closet/temp = O
var/obj/structure/closet/secure_closet/temp = O
temp.locked = FALSE
temp.update_icon()
temp.update_icon()
else if(istype(O, /obj/machinery/door/airlock))
var/obj/machinery/door/airlock/temp = O
temp.prison_open()
var/obj/machinery/door/airlock/temp = O
temp.prison_open()
else if(istype(O, /obj/machinery/door_timer))
var/obj/machinery/door_timer/temp = O
temp.timer_end(forced = TRUE)
var/obj/machinery/door_timer/temp = O
temp.timer_end(forced = TRUE)

View File

@@ -7,7 +7,7 @@
/datum/round_event/processor_overload
announceWhen = 1
/datum/round_event/processor_overload/announce()
/datum/round_event/processor_overload/announce(fake)
var/alert = pick( "Exospheric bubble inbound. Processor overload is likely. Please contact you*%xp25)`6cq-BZZT", \
"Exospheric bubble inbound. Processor overload is likel*1eta;c5;'1v¬-BZZZT", \
"Exospheric bubble inbound. Processor ov#MCi46:5.;@63-BZZZZT", \
@@ -22,7 +22,7 @@
// Announce most of the time, but leave a little gap so people don't know
// whether it's, say, a tesla zapping tcomms, or some selective
// modification of the tcomms bus
if(prob(80))
if(prob(80) || fake)
priority_announce(alert)

View File

@@ -11,7 +11,7 @@
endWhen = startWhen + 1
announceWhen = 1
/datum/round_event/radiation_storm/announce()
/datum/round_event/radiation_storm/announce(fake)
priority_announce("High levels of radiation detected near the station. Maintenance is best shielded from radiation.", "Anomaly Alert", 'sound/ai/radiation.ogg')
//sound not longer matches the text, but an audible warning is probably good

View File

@@ -10,8 +10,8 @@
var/animals = 1
var/one = "one"
/datum/round_event/ghost_role/sentience/start()
var/sentience_report = "<font size=3><b>[command_name()] Medium-Priority Update</b></font>"
/datum/round_event/ghost_role/sentience/announce(fake)
var/sentience_report = ""
var/data = pick("scans from our long-range sensors", "our sophisticated probabilistic models", "our omnipotence", "the communications traffic on your station", "energy emissions we detected", "\[REDACTED\]")
var/pets = pick("animals/bots", "bots/animals", "pets", "simple animals", "lesser lifeforms", "\[REDACTED\]")
@@ -19,8 +19,7 @@
sentience_report += "<br><br>Based on [data], we believe that [one] of the station's [pets] has developed [strength] level intelligence, and the ability to communicate."
print_command_report(text=sentience_report)
..()
priority_announce(sentience_report,"[command_name()] Medium-Priority Update")
/datum/round_event/ghost_role/sentience/spawn_role()
var/list/mob/dead/observer/candidates

View File

@@ -20,10 +20,10 @@
var/bonus_points = 10000
var/thanks_msg = "The cargo shuttle should return in five minutes. Have some supply points for your trouble."
/datum/round_event/shuttle_loan/start()
/datum/round_event/shuttle_loan/setup()
dispatch_type = pick(HIJACK_SYNDIE, RUSKY_PARTY, SPIDER_GIFT, DEPARTMENT_RESUPPLY, ANTIDOTE_NEEDED, PIZZA_DELIVERY)
/datum/round_event/shuttle_loan/announce()
/datum/round_event/shuttle_loan/announce(fake)
SSshuttle.shuttle_loan = src
switch(dispatch_type)
if(HIJACK_SYNDIE)

View File

@@ -5,6 +5,9 @@
max_occurrences = 3
min_players = 10
/datum/round_event/spacevine
fakeable = FALSE
/datum/round_event/spacevine/start()
var/list/turfs = list() //list of all the empty floor turfs in the hallway areas

View File

@@ -15,7 +15,7 @@
announceWhen = rand(announceWhen, announceWhen + 50)
spawncount = rand(5, 8)
/datum/round_event/spider_infestation/announce()
/datum/round_event/spider_infestation/announce(fake)
priority_announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", 'sound/ai/aliens.ogg')

View File

@@ -1,13 +1,16 @@
/datum/round_event_control/spontaneous_appendicitis
name = "Spontaneous Appendicitis"
typepath = /datum/round_event/spontaneous_appendicitis
weight = 20
max_occurrences = 4
earliest_start = 6000
min_players = 5 // To make your chance of getting help a bit higher.
/datum/round_event/spontaneous_appendicitis/start()
for(var/mob/living/carbon/human/H in shuffle(GLOB.living_mob_list))
/datum/round_event_control/spontaneous_appendicitis
name = "Spontaneous Appendicitis"
typepath = /datum/round_event/spontaneous_appendicitis
weight = 20
max_occurrences = 4
earliest_start = 6000
min_players = 5 // To make your chance of getting help a bit higher.
/datum/round_event/spontaneous_appendicitis
fakeable = FALSE
/datum/round_event/spontaneous_appendicitis/start()
for(var/mob/living/carbon/human/H in shuffle(GLOB.living_mob_list))
if(!H.client)
continue
if(H.stat == DEAD)
@@ -19,8 +22,8 @@
foundAlready = TRUE
break
if(foundAlready)
continue
var/datum/disease/D = new /datum/disease/appendicitis
H.ForceContractDisease(D)
break
continue
var/datum/disease/D = new /datum/disease/appendicitis
H.ForceContractDisease(D)
break

View File

@@ -12,7 +12,7 @@
var/list/gunk = list("water","carbon","flour","radium","toxin","cleaner","nutriment","condensedcapsaicin","mushroomhallucinogen","lube",
"plantbgone","banana","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","sacid")
/datum/round_event/vent_clog/announce()
/datum/round_event/vent_clog/announce(fake)
priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert")

View File

@@ -1,32 +1,30 @@
/datum/round_event_control/weightless
name = "Gravity Systems Failure"
typepath = /datum/round_event/weightless
weight = 15
/datum/round_event/weightless
startWhen = 5
endWhen = 65
announceWhen = 1
/datum/round_event/weightless/setup()
startWhen = rand(0,10)
endWhen = rand(40,80)
/datum/round_event/weightless/announce()
command_alert("Warning: Failsafes for the station's artificial gravity arrays have been triggered. Please be aware that if this problem recurs it may result in formation of gravitational anomalies. Nanotrasen wishes to remind you that the unauthorised formation of anomalies within Nanotrasen facilities is strictly prohibited by health and safety regulation [rand(99,9999)][pick("a","b","c")]:subclause[rand(1,20)][pick("a","b","c")].")
/datum/round_event/weightless/start()
for(var/area/A in world)
A.gravitychange(0)
if(control)
control.weight *= 2
/datum/round_event/weightless/end()
for(var/area/A in world)
A.gravitychange(1)
if(announceWhen >= 0)
command_alert("Artificial gravity arrays are now functioning within normal parameters. Please report any irregularities to your respective head of staff.")
/datum/round_event_control/weightless
name = "Gravity Systems Failure"
typepath = /datum/round_event/weightless
weight = 15
/datum/round_event/weightless
startWhen = 5
endWhen = 65
announceWhen = 1
/datum/round_event/weightless/setup()
startWhen = rand(0,10)
endWhen = rand(40,80)
/datum/round_event/weightless/announce(fake)
command_alert("Warning: Failsafes for the station's artificial gravity arrays have been triggered. Please be aware that if this problem recurs it may result in formation of gravitational anomalies. Nanotrasen wishes to remind you that the unauthorised formation of anomalies within Nanotrasen facilities is strictly prohibited by health and safety regulation [rand(99,9999)][pick("a","b","c")]:subclause[rand(1,20)][pick("a","b","c")].")
/datum/round_event/weightless/start()
for(var/area/A in world)
A.gravitychange(0)
if(control)
control.weight *= 2
/datum/round_event/weightless/end()
for(var/area/A in world)
A.gravitychange(1)
if(announceWhen >= 0)
command_alert("Artificial gravity arrays are now functioning within normal parameters. Please report any irregularities to your respective head of staff.")

View File

@@ -12,7 +12,7 @@
/datum/round_event/wizard/magicarp/setup()
startWhen = rand(40, 60)
/datum/round_event/wizard/magicarp/announce()
/datum/round_event/wizard/magicarp/announce(fake)
priority_announce("Unknown magical entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
/datum/round_event/wizard/magicarp/start()

View File

@@ -28,7 +28,7 @@
var/turf/T = pick(pick_turfs)
wormholes += new /obj/effect/portal/wormhole(T, null, 0, null, FALSE)
/datum/round_event/wormholes/announce()
/datum/round_event/wormholes/announce(fake)
priority_announce("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", 'sound/ai/spanomalies.ogg')
/datum/round_event/wormholes/tick()

View File

@@ -10,7 +10,7 @@
max_occurrences = 1
earliest_start = 0
/datum/round_event/easter/announce()
/datum/round_event/easter/announce(fake)
priority_announce(pick("Hip-hop into Easter!","Find some Bunny's stash!","Today is National 'Hunt a Wabbit' Day.","Be kind, give Chocolate Eggs!"))
@@ -21,7 +21,7 @@
weight = 5
max_occurrences = 10
/datum/round_event/rabbitrelease/announce()
/datum/round_event/rabbitrelease/announce(fake)
priority_announce("Unidentified furry objects detected coming aboard [station_name()]. Beware of Adorable-ness.", "Fluffy Alert", 'sound/ai/aliens.ogg')