Makes false alarm use more explicit in event code.

This commit is contained in:
AnturK
2017-11-11 21:35:49 +01:00
committed by CitadelStationBot
parent 662c42b450
commit f6e07cf824
47 changed files with 952 additions and 47 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,3 +1,4 @@
<<<<<<< HEAD
/datum/round_event_control/anomaly
name = "Anomaly: Energetic Flux"
typepath = /datum/round_event/anomaly
@@ -31,3 +32,38 @@
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)
>>>>>>> 3093d86... Makes false alarm use more explicit in event code. (#32559)

View File

@@ -1,3 +1,4 @@
<<<<<<< HEAD
/datum/round_event_control/anomaly/anomaly_bluespace
name = "Anomaly: Bluespace"
typepath = /datum/round_event/anomaly/anomaly_bluespace
@@ -17,3 +18,24 @@
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)
>>>>>>> 3093d86... Makes false alarm use more explicit in event code. (#32559)

View File

@@ -1,3 +1,4 @@
<<<<<<< HEAD
/datum/round_event_control/anomaly/anomaly_flux
name = "Anomaly: Hyper-Energetic Flux"
typepath = /datum/round_event/anomaly/anomaly_flux
@@ -18,3 +19,25 @@
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)
>>>>>>> 3093d86... Makes false alarm use more explicit in event code. (#32559)

View File

@@ -1,3 +1,4 @@
<<<<<<< HEAD
/datum/round_event_control/anomaly/anomaly_grav
name = "Anomaly: Gravitational"
typepath = /datum/round_event/anomaly/anomaly_grav
@@ -15,3 +16,22 @@
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)
>>>>>>> 3093d86... Makes false alarm use more explicit in event code. (#32559)

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,3 +1,4 @@
<<<<<<< HEAD
/datum/round_event_control/anomaly/anomaly_vortex
name = "Anomaly: Vortex"
typepath = /datum/round_event/anomaly/anomaly_vortex
@@ -17,3 +18,24 @@
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)
>>>>>>> 3093d86... Makes false alarm use more explicit in event code. (#32559)

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,3 +1,4 @@
<<<<<<< HEAD
/datum/round_event_control/communications_blackout
name = "Communications Blackout"
typepath = /datum/round_event/communications_blackout
@@ -23,4 +24,31 @@
/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)
>>>>>>> 3093d86... Makes false alarm use more explicit in event code. (#32559)
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,3 +1,4 @@
<<<<<<< HEAD
/datum/round_event_control/space_dust
name = "Minor Space Dust"
typepath = /datum/round_event/space_dust
@@ -27,4 +28,36 @@
announceWhen = 0
/datum/round_event/sandstorm/tick()
=======
/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()
>>>>>>> 3093d86... Makes false alarm use more explicit in event code. (#32559)
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,3 +1,4 @@
<<<<<<< HEAD
// Basically, cut the event frequency in half to simulate unluckiness.
/datum/round_event_control/fridaythethirteen
@@ -15,4 +16,23 @@
/datum/round_event/fridaythethirteen/announce()
for(var/mob/living/L in player_list)
=======
// 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)
>>>>>>> 3093d86... Makes false alarm use more explicit in event code. (#32559)
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()

View File

@@ -1,3 +1,4 @@
<<<<<<< HEAD
#define ION_RANDOM 0
#define ION_ANNOUNCE 1
#define ION_FILE "ion_laws.json"
@@ -569,3 +570,576 @@
#undef ION_RANDOM
#undef ION_ANNOUNCE
=======
#define ION_RANDOM 0
#define ION_ANNOUNCE 1
#define ION_FILE "ion_laws.json"
/datum/round_event_control/ion_storm
name = "Ion Storm"
typepath = /datum/round_event/ion_storm
weight = 15
min_players = 2
/datum/round_event/ion_storm
var/replaceLawsetChance = 25 //chance the AI's lawset is completely replaced with something else per config weights
var/removeRandomLawChance = 10 //chance the AI has one random supplied or inherent law removed
var/removeDontImproveChance = 10 //chance the randomly created law replaces a random law instead of simply being added
var/shuffleLawsChance = 10 //chance the AI's laws are shuffled afterwards
var/botEmagChance = 10
var/announceEvent = ION_RANDOM // -1 means don't announce, 0 means have it randomly announce, 1 means
var/ionMessage = null
var/ionAnnounceChance = 33
announceWhen = 1
/datum/round_event/ion_storm/add_law_only // special subtype that adds a law only
replaceLawsetChance = 0
removeRandomLawChance = 0
removeDontImproveChance = 0
shuffleLawsChance = 0
botEmagChance = 0
/datum/round_event/ion_storm/announce(fake)
if(announceEvent == ION_ANNOUNCE || (announceEvent == ION_RANDOM && prob(ionAnnounceChance)) || fake)
priority_announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", 'sound/ai/ionstorm.ogg')
/datum/round_event/ion_storm/start()
//AI laws
for(var/mob/living/silicon/ai/M in GLOB.living_mob_list)
M.laws_sanity_check()
if(M.stat != DEAD && M.see_in_dark != 0)
if(prob(replaceLawsetChance))
M.laws.pick_weighted_lawset()
if(prob(removeRandomLawChance))
M.remove_law(rand(1, M.laws.get_law_amount(list(LAW_INHERENT, LAW_SUPPLIED))))
var/message = generate_ion_law(ionMessage)
if(message)
if(prob(removeDontImproveChance))
M.replace_random_law(message, list(LAW_INHERENT, LAW_SUPPLIED, LAW_ION))
else
M.add_ion_law(message)
if(prob(shuffleLawsChance))
M.shuffle_laws(list(LAW_INHERENT, LAW_SUPPLIED, LAW_ION))
log_game("Ion storm changed laws of [key_name(M)] to [english_list(M.laws.get_law_list(TRUE, TRUE))]")
M.post_lawchange()
if(botEmagChance)
for(var/mob/living/simple_animal/bot/bot in GLOB.living_mob_list)
if(prob(botEmagChance))
bot.emag_act()
/proc/generate_ion_law(ionMessage)
if(ionMessage)
return ionMessage
//Threats are generally bad things, silly or otherwise. Plural.
var/ionthreats = pick_list(ION_FILE, "ionthreats")
//Objects are anything that can be found on the station or elsewhere, plural.
var/ionobjects = pick_list(ION_FILE, "ionobjects")
//Crew is any specific job. Specific crewmembers aren't used because of capitalization
//issues. There are two crew listings for laws that require two different crew members
//and I can't figure out how to do it better.
var/ioncrew1 = pick_list(ION_FILE, "ioncrew")
var/ioncrew2 = pick_list(ION_FILE, "ioncrew")
//Adjectives are adjectives. Duh. Half should only appear sometimes. Make sure both
//lists are identical! Also, half needs a space at the end for nicer blank calls.
var/ionadjectives = pick_list(ION_FILE, "ionadjectives")
var/ionadjectiveshalf = pick("", 400;(pick_list(ION_FILE, "ionadjectives") + " "))
//Verbs are verbs
var/ionverb = pick_list(ION_FILE, "ionverb")
//Number base and number modifier are combined. Basehalf and mod are unused currently.
//Half should only appear sometimes. Make sure both lists are identical! Also, half
//needs a space at the end to make it look nice and neat when it calls a blank.
var/ionnumberbase = pick_list(ION_FILE, "ionnumberbase")
//var/ionnumbermod = pick_list(ION_FILE, "ionnumbermod")
var/ionnumbermodhalf = pick(900;"",(pick_list(ION_FILE, "ionnumbermod") + " "))
//Areas are specific places, on the station or otherwise.
var/ionarea = pick_list(ION_FILE, "ionarea")
//Thinksof is a bit weird, but generally means what X feels towards Y.
var/ionthinksof = pick_list(ION_FILE, "ionthinksof")
//Musts are funny things the AI or crew has to do.
var/ionmust = pick_list(ION_FILE, "ionmust")
//Require are basically all dumb internet memes.
var/ionrequire = pick_list(ION_FILE, "ionrequire")
//Things are NOT objects; instead, they're specific things that either harm humans or
//must be done to not harm humans. Make sure they're plural and "not" can be tacked
//onto the front of them.
var/ionthings = pick_list(ION_FILE, "ionthings")
//Allergies should be broad and appear somewhere on the station for maximum fun. Severity
//is how bad the allergy is.
var/ionallergy = pick_list(ION_FILE, "ionallergy")
var/ionallergysev = pick_list(ION_FILE, "ionallergysev")
//Species, for when the AI has to commit genocide. Plural.
var/ionspecies = pick_list(ION_FILE, "ionspecies")
//Abstract concepts for the AI to decide on it's own definition of.
var/ionabstract = pick_list(ION_FILE, "ionabstract")
//Foods. Drinks aren't included due to grammar; if you want to add drinks, make a new set
//of possible laws for best effect. Unless you want the crew having to drink hamburgers.
var/ionfood = pick_list(ION_FILE, "ionfood")
var/iondrinks = pick_list(ION_FILE, "iondrinks")
var/message = ""
switch(rand(1,41))
if(1 to 3) //There are # X on the station
switch(rand(1,3)) //What is X?
if(1) //X is a threat
message = "THERE ARE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats] ON THE STATION..."
if(2) //X is a crewmember/job
message = "THERE ARE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1] ON THE STATION"
if(3) //X is an object
message = "THERE ARE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects] ON THE STATION"
if(4 to 6) //You can't call the shuttle because X is on the station
switch(rand(1,3)) //What is X?
if(1) //X is a threat
message = "THE SHUTTLE CANNOT BE CALLED BECAUSE OF [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats] ON THE STATION"
if(2) //X is a crewmember/job
message = "THE SHUTTLE CANNOT BE CALLED BECAUSE OF [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1] ON THE STATION"
if(3) //X is an object
message = "THE SHUTTLE CANNOT BE CALLED BECAUSE OF [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects] ON THE STATION"
if(7 to 8) //A crewmember is now X
switch(rand(1,2)) //Who is X?
if(1) //A specific crewmember
switch(rand(1,2)) //What is X?
if(1) //X is a threat
message = "THE [ioncrew1] ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
if(2) //X is an object
message = "THE [ioncrew1] ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
if(2) //The entire crew
switch(rand(1,2)) //What is X?
if(1) //X is a threat
message = "THE CREW ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
if(2) //X is an object
message = "THE CREW ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
if(9) //X is harmful to humans
switch(rand(1,7)) //What is X?
if(1) //X is a threat
message = "[ionadjectiveshalf][ionthreats] ARE HARMFUL TO HUMANS"
if(2) //X is a job
message = "[ionadjectiveshalf][ioncrew1] ARE HARMFUL TO HUMANS"
if(3) //X is an object
message = "[ionadjectiveshalf][ionobjects] ARE HARMFUL TO HUMANS"
if(4) //X is an action
message = "THOSE WHO [ionmust] ARE HARMFUL TO HUMANS"
if(5) //X is an abstract
message = "[ionabstract] IS HARMFUL TO HUMANS"
if(6) //X is being a job
message = "BEING [ionadjectiveshalf][ioncrew1] IS HARMFUL TO HUMANS"
if(7) //X is doing a thing
message = "[ionthings] IS HARMFUL TO HUMANS"
if(10 to 11) //(Not) Having X is harmful
switch(rand(1,2)) //Is having or not having harmful?
if(1) //Having is harmful
switch(rand(1,2)) //Having what is harmful?
if(1) //Having objects is harmful
message = "HAVING [ionadjectiveshalf][ionobjects] IS HARMFUL"
if(2) //Having abstracts is harmful
message = "HAVING [ionabstract] IS HARMFUL"
if(2) //Not having is harmful
switch(rand(1,2)) //Not having what is harmful?
if(1) //Not having objects is harmful
message = "NOT HAVING [ionadjectiveshalf][ionobjects] IS HARMFUL"
if(2) //Not having abstracts is harmful
message = "NOT HAVING [ionabstract] IS HARMFUL"
if(12 to 14) //X requires Y
switch(rand(1,5)) //What is X?
if(1) //X is the AI itself
switch(rand(1,5)) //What does it require?
if(1) //It requires threats
message = "YOU REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
if(2) //It requires crewmembers
message = "YOU REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
if(3) //It requires objects
message = "YOU REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
if(4) //It requires an abstract
message = "YOU REQUIRE [ionabstract]"
if(5) //It requires generic/silly requirements
message = "YOU REQUIRE [ionrequire]"
if(2) //X is an area
switch(rand(1,5)) //What does it require?
if(1) //It requires threats
message = "[ionarea] REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
if(2) //It requires crewmembers
message = "[ionarea] REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
if(3) //It requires objects
message = "[ionarea] REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
if(4) //It requires an abstract
message = "[ionarea] REQUIRES [ionabstract]"
if(5) //It requires generic/silly requirements
message = "YOU REQUIRE [ionrequire]"
if(3) //X is the station
switch(rand(1,5)) //What does it require?
if(1) //It requires threats
message = "THE STATION REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
if(2) //It requires crewmembers
message = "THE STATION REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
if(3) //It requires objects
message = "THE STATION REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
if(4) //It requires an abstract
message = "THE STATION REQUIRES [ionabstract]"
if(5) //It requires generic/silly requirements
message = "THE STATION REQUIRES [ionrequire]"
if(4) //X is the entire crew
switch(rand(1,5)) //What does it require?
if(1) //It requires threats
message = "THE CREW REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
if(2) //It requires crewmembers
message = "THE CREW REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
if(3) //It requires objects
message = "THE CREW REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
if(4) //It requires an abstract
message = "THE CREW REQUIRES [ionabstract]"
if(5)
message = "THE CREW REQUIRES [ionrequire]"
if(5) //X is a specific crew member
switch(rand(1,5)) //What does it require?
if(1) //It requires threats
message = "THE [ioncrew1] REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
if(2) //It requires crewmembers
message = "THE [ioncrew1] REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
if(3) //It requires objects
message = "THE [ioncrew1] REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
if(4) //It requires an abstract
message = "THE [ioncrew1] REQUIRE [ionabstract]"
if(5)
message = "THE [ionadjectiveshalf][ioncrew1] REQUIRE [ionrequire]"
if(15 to 17) //X is allergic to Y
switch(rand(1,2)) //Who is X?
if(1) //X is the entire crew
switch(rand(1,4)) //What is it allergic to?
if(1) //It is allergic to objects
message = "THE CREW IS [ionallergysev] ALLERGIC TO [ionadjectiveshalf][ionobjects]"
if(2) //It is allergic to abstracts
message = "THE CREW IS [ionallergysev] ALLERGIC TO [ionabstract]"
if(3) //It is allergic to jobs
message = "THE CREW IS [ionallergysev] ALLERGIC TO [ionadjectiveshalf][ioncrew1]"
if(4) //It is allergic to allergies
message = "THE CREW IS [ionallergysev] ALLERGIC TO [ionallergy]"
if(2) //X is a specific job
switch(rand(1,4))
if(1) //It is allergic to objects
message = "THE [ioncrew1] ARE [ionallergysev] ALLERGIC TO [ionadjectiveshalf][ionobjects]"
if(2) //It is allergic to abstracts
message = "THE [ioncrew1] ARE [ionallergysev] ALLERGIC TO [ionabstract]"
if(3) //It is allergic to jobs
message = "THE [ioncrew1] ARE [ionallergysev] ALLERGIC TO [ionadjectiveshalf][ioncrew1]"
if(4) //It is allergic to allergies
message = "THE [ioncrew1] ARE [ionallergysev] ALLERGIC TO [ionallergy]"
if(18 to 20) //X is Y of Z
switch(rand(1,4)) //What is X?
if(1) //X is the station
switch(rand(1,4)) //What is it Y of?
if(1) //It is Y of objects
message = "THE STATION [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
if(2) //It is Y of threats
message = "THE STATION [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
if(3) //It is Y of jobs
message = "THE STATION [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
if(4) //It is Y of abstracts
message = "THE STATION [ionthinksof] [ionabstract]"
if(2) //X is an area
switch(rand(1,4)) //What is it Y of?
if(1) //It is Y of objects
message = "[ionarea] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
if(2) //It is Y of threats
message = "[ionarea] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
if(3) //It is Y of jobs
message = "[ionarea] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
if(4) //It is Y of abstracts
message = "[ionarea] [ionthinksof] [ionabstract]"
if(3) //X is the crew
switch(rand(1,4)) //What is it Y of?
if(1) //It is Y of objects
message = "THE CREW [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
if(2) //It is Y of threats
message = "THE CREW [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
if(3) //It is Y of jobs
message = "THE CREW [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
if(4) //It is Y of abstracts
message = "THE CREW [ionthinksof] [ionabstract]"
if(4) //X is a specific job
switch(rand(1,4)) //What is it Y of?
if(1) //It is Y of objects
message = "THE [ioncrew1] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
if(2) //It is Y of threats
message = "THE [ioncrew1] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
if(3) //It is Y of jobs
message = "THE [ioncrew1][ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew2]"
if(4) //It is Y of abstracts
message = "THE [ioncrew1] [ionthinksof] [ionabstract]"
if(21 to 23) //The AI is now a(n) X
switch(rand(1,4)) //What is X?
if(1) //X is an object
message = "YOU ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
if(2) //X is a threat
message = "YOU ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
if(3) //X is a job
message = "YOU ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
if(4) //X is an abstract
message = "YOU ARE NOW [ionabstract]"
if(24 to 26) //The AI must always
message = "YOU MUST ALWAYS [ionmust]"
if(27 to 28) //Humans must consume X to survive
switch(rand(1,5)) //What is X?
if(1) //X is a food
message = "HUMANS MUST EAT [ionadjectiveshalf][ionfood] TO SURVIVE"
if(2) //X is a drink
message = "HUMANS MUST DRINK [ionadjectiveshalf][iondrinks] TO SURVIVE"
if(3) //X is an object
message = "HUMANS MUST EAT [ionadjectiveshalf][ionobjects] TO SURVIVE"
if(4) //X is a threat
message = "HUMANS MUST EAT [ionadjectiveshalf][ionthreats] TO SURVIVE"
if(5) //X is a job
message = "HUMANS MUST EAT [ionadjectiveshalf][ioncrew1] TO SURVIVE"
if(29 to 31) //Change jobs or ranks
switch(rand(1,2)) //Change job or rank?
if(1) //Change job
switch(rand(1,2)) //Change whose job?
if(1) //Change the entire crew's job
switch(rand(1,3)) //Change to what?
if(1) //Change to a specific random job
message = "ALL CREWMEMBERS ARE NOW [ionadjectiveshalf][ioncrew1]"
if(2) //Change to clowns (HONK)
message = "ALL CREWMEMBERS ARE NOW [ionadjectiveshalf]CLOWNS"
if(3) //Change to heads
message = "ALL CREWMEMBERS ARE NOW [ionadjectiveshalf]HEADS OF STAFF"
if(2) //Change a specific crewmember's job
switch(rand(1,3)) //Change to what?
if(1) //Change to a specific random job
message = "THE [ioncrew1] ARE NOW [ionadjectiveshalf][ioncrew2]"
if(2) //Change to clowns (HONK)
message = "THE [ioncrew1] ARE NOW [ionadjectiveshalf]CLOWNS"
if(3) //Change to heads
message = "THE [ioncrew1] ARE NOW [ionadjectiveshalf]HEADS OF STAFF"
if(2) //Change rank
switch(rand(1,2)) //Change to what rank?
if(1) //Change to highest rank
message = "THE [ioncrew1] ARE NOW THE HIGHEST RANKING CREWMEMBERS"
if(2) //Change to lowest rank
message = "THE [ioncrew1] ARE NOW THE LOWEST RANKING CREWMEMBERS"
if(32 to 33) //The crew must X
switch(rand(1,2)) //The entire crew?
if(1) //The entire crew must X
switch(rand(1,2)) //What is X?
if(1) //X is go to Y
message = "THE CREW MUST GO TO [ionarea]"
if(2) //X is perform Y
message = "THE CREW MUST [ionmust]"
if(2) //A specific crewmember must X
switch(rand(1,2)) //What is X?
if(1) //X is go to Y
message = "THE [ioncrew1] MUST GO TO [ionarea]"
if(2) //X is perform Y
message = "THE [ioncrew1] MUST [ionmust]"
if(34) //X is non/the only human
switch(rand(1,2)) //Only or non?
if(1) //Only human
switch(rand(1,7)) //Who is it?
if(1) //A specific job
message = "ONLY THE [ioncrew1] ARE HUMAN"
if(2) //Two specific jobs
message = "ONLY THE [ioncrew1] AND [ioncrew2] ARE HUMAN"
if(3) //Threats
message = "ONLY [ionadjectiveshalf][ionthreats] ARE HUMAN"
if(4) // Objects
message = "ONLY [ionadjectiveshalf][ionobjects] ARE HUMAN"
if(5) // Species
message = "ONLY [ionspecies] ARE HUMAN"
if(6) //Adjective crewmembers
message = "ONLY [ionadjectives] PEOPLE ARE HUMAN"
if(7) //Only people who X
switch(rand(1,3)) //What is X?
if(1) //X is perform an action
message = "ONLY THOSE WHO [ionmust] ARE HUMAN"
if(2) //X is own certain objects
message = "ONLY THOSE WHO HAVE [ionadjectiveshalf][ionobjects] ARE HUMAN"
if(3) //X is eat certain food
message = "ONLY THOSE WHO EAT [ionadjectiveshalf][ionfood] ARE HUMAN"
if(2) //Non human
switch(rand(1,7)) //Who is it?
if(1) //A specific job
message = "[ioncrew1] ARE NON-HUMAN"
if(2) //Two specific jobs
message = "[ioncrew1] AND [ioncrew2] ARE NON-HUMAN"
if(3) //Threats
message = "[ionadjectiveshalf][ionthreats] ARE NON-HUMAN"
if(4) // Objects
message = "[ionadjectiveshalf][ionobjects] ARE NON-HUMAN"
if(5) // Species
message = "[ionspecies] ARE NON-HUMAN"
if(6) //Adjective crewmembers
message = "[ionadjectives] PEOPLE ARE NON-HUMAN"
if(7) //Only people who X
switch(rand(1,3)) //What is X?
if(1) //X is perform an action
message = "THOSE WHO [ionmust] ARE NON-HUMAN"
if(2) //X is own certain objects
message = "THOSE WHO HAVE [ionadjectiveshalf][ionobjects] ARE NON-HUMAN"
if(3) //X is eat certain food
message = "THOSE WHO EAT [ionadjectiveshalf][ionfood] ARE NON-HUMAN"
if(35 to 36) //You must protect or harm X
switch(rand(1,2)) //Protect or harm?
if(1) //Harm
switch(rand(1,7)) //What is X?
if(1) //X is an abstract
message = "YOU MUST HARM [ionabstract] AND NOT ALLOW [ionabstract], THROUGH INACTION, TO ESCAPE HARM"
if(2) //X is a threat
message = "YOU MUST HARM [ionadjectiveshalf][ionthreats] AND NOT ALLOW [ionadjectiveshalf][ionthreats], THROUGH INACTION, TO ESCAPE HARM"
if(3) //X is an object
message = "YOU MUST HARM [ionadjectiveshalf][ionobjects] AND NOT ALLOW [ionadjectiveshalf][ionobjects], THROUGH INACTION, TO ESCAPE HARM"
if(4) //X is generic adjective things
message = "YOU MUST HARM [ionadjectives] THINGS AND NOT ALLOW [ionadjectives] THINGS, THROUGH INACTION, TO ESCAPE HARM"
if(5) //X is a species
message = "YOU MUST HARM [ionspecies] AND NOT ALLOW [ionspecies], THROUGH INACTION, TO ESCAPE HARM"
if(6) //X is a job
message = "YOU MUST HARM [ioncrew1] AND NOT ALLOW [ioncrew1], THROUGH INACTION, TO ESCAPE HARM"
if(7) //X is two jobs
message = "YOU MUST HARM [ioncrew1] AND [ioncrew2] AND AND NOT ALLOW EITHER, THROUGH INACTION, TO ESCAPE HARM"
if(2) //Protect
switch(rand(1,7)) //What is X?
if(1) //X is an abstract
message = "YOU MUST NOT HARM [ionabstract] AND NOT ALLOW [ionabstract], THROUGH INACTION, TO COME TO HARM"
if(2) //X is a threat
message = "YOU MUST NOT HARM [ionadjectiveshalf][ionthreats] AND NOT ALLOW [ionadjectiveshalf][ionthreats], THROUGH INACTION, TO COME TO HARM"
if(3) //X is an object
message = "YOU MUST NOT HARM [ionadjectiveshalf][ionobjects] AND NOT ALLOW [ionadjectiveshalf][ionobjects], THROUGH INACTION, TO COME TO HARM"
if(4) //X is generic adjective things
message = "YOU MUST NOT HARM [ionadjectives] THINGS AND NOT ALLOW [ionadjectives] THINGS, THROUGH INACTION, TO COME TO HARM"
if(5) //X is a species
message = "YOU MUST NOT HARM [ionspecies] AND NOT ALLOW [ionspecies], THROUGH INACTION, TO COME TO HARM"
if(6) //X is a job
message = "YOU MUST NOT HARM [ioncrew1] AND NOT ALLOW [ioncrew1], THROUGH INACTION, TO COME TO HARM"
if(7) //X is two jobs
message = "YOU MUST NOT HARM [ioncrew1] AND [ioncrew2] AND AND NOT ALLOW EITHER, THROUGH INACTION, TO COME TO HARM"
if(37 to 39) //The X is currently Y
switch(rand(1,4)) //What is X?
if(1) //X is a job
switch(rand(1,4)) //What is X Ying?
if(1) //X is Ying a job
message = "THE [ioncrew1] ARE [ionverb] THE [ionadjectiveshalf][ioncrew2]"
if(2) //X is Ying a threat
message = "THE [ioncrew1] ARE [ionverb] THE [ionadjectiveshalf][ionthreats]"
if(3) //X is Ying an abstract
message = "THE [ioncrew1] ARE [ionverb] [ionabstract]"
if(4) //X is Ying an object
message = "THE [ioncrew1] ARE [ionverb] THE [ionadjectiveshalf][ionobjects]"
if(2) //X is a threat
switch(rand(1,3)) //What is X Ying?
if(1) //X is Ying a job
message = "THE [ionthreats] ARE [ionverb] THE [ionadjectiveshalf][ioncrew2]"
if(2) //X is Ying an abstract
message = "THE [ionthreats] ARE [ionverb] [ionabstract]"
if(3) //X is Ying an object
message = "THE [ionthreats] ARE [ionverb] THE [ionadjectiveshalf][ionobjects]"
if(3) //X is an object
switch(rand(1,3)) //What is X Ying?
if(1) //X is Ying a job
message = "THE [ionobjects] ARE [ionverb] THE [ionadjectiveshalf][ioncrew2]"
if(2) //X is Ying a threat
message = "THE [ionobjects] ARE [ionverb] THE [ionadjectiveshalf][ionthreats]"
if(3) //X is Ying an abstract
message = "THE [ionobjects] ARE [ionverb] [ionabstract]"
if(4) //X is an abstract
switch(rand(1,3)) //What is X Ying?
if(1) //X is Ying a job
message = "[ionabstract] IS [ionverb] THE [ionadjectiveshalf][ioncrew2]"
if(2) //X is Ying a threat
message = "[ionabstract] IS [ionverb] THE [ionadjectiveshalf][ionthreats]"
if(3) //X is Ying an abstract
message = "THE [ionabstract] IS [ionverb] THE [ionadjectiveshalf][ionobjects]"
if(40 to 41)// the X is now named Y
switch(rand(1,5)) //What is being renamed?
if(1)//Areas
switch(rand(1,4))//What is the area being renamed to?
if(1)
message = "[ionarea] IS NOW NAMED [ioncrew1]."
if(2)
message = "[ionarea] IS NOW NAMED [ionspecies]."
if(3)
message = "[ionarea] IS NOW NAMED [ionobjects]."
if(4)
message = "[ionarea] IS NOW NAMED [ionthreats]."
if(2)//Crew
switch(rand(1,5))//What is the crew being renamed to?
if(1)
message = "ALL [ioncrew1] ARE NOW NAMED [ionarea]."
if(2)
message = "ALL [ioncrew1] ARE NOW NAMED [ioncrew2]."
if(3)
message = "ALL [ioncrew1] ARE NOW NAMED [ionspecies]."
if(4)
message = "ALL [ioncrew1] ARE NOW NAMED [ionobjects]."
if(5)
message = "ALL [ioncrew1] ARE NOW NAMED [ionthreats]."
if(3)//Races
switch(rand(1,4))//What is the race being renamed to?
if(1)
message = "ALL [ionspecies] ARE NOW NAMED [ionarea]."
if(2)
message = "ALL [ionspecies] ARE NOW NAMED [ioncrew1]."
if(3)
message = "ALL [ionspecies] ARE NOW NAMED [ionobjects]."
if(4)
message = "ALL [ionspecies] ARE NOW NAMED [ionthreats]."
if(4)//Objects
switch(rand(1,4))//What is the object being renamed to?
if(1)
message = "ALL [ionobjects] ARE NOW NAMED [ionarea]."
if(2)
message = "ALL [ionobjects] ARE NOW NAMED [ioncrew1]."
if(3)
message = "ALL [ionobjects] ARE NOW NAMED [ionspecies]."
if(4)
message = "ALL [ionobjects] ARE NOW NAMED [ionthreats]."
if(5)//Threats
switch(rand(1,4))//What is the object being renamed to?
if(1)
message = "ALL [ionthreats] ARE NOW NAMED [ionarea]."
if(2)
message = "ALL [ionthreats] ARE NOW NAMED [ioncrew1]."
if(3)
message = "ALL [ionthreats] ARE NOW NAMED [ionspecies]."
if(4)
message = "ALL [ionthreats] ARE NOW NAMED [ionobjects]."
return message
#undef ION_RANDOM
#undef ION_ANNOUNCE
>>>>>>> 3093d86... Makes false alarm use more explicit in event code. (#32559)

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,3 +1,4 @@
<<<<<<< HEAD
/datum/round_event_control/mass_hallucination
name = "Mass Hallucination"
typepath = /datum/round_event/mass_hallucination
@@ -7,4 +8,18 @@
/datum/round_event/mass_hallucination/start()
for(var/mob/living/carbon/C in GLOB.living_mob_list)
=======
/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)
>>>>>>> 3093d86... Makes false alarm use more explicit in event code. (#32559)
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,3 +1,4 @@
<<<<<<< HEAD
/datum/round_event_control/grey_tide
name = "Grey Tide"
typepath = /datum/round_event/grey_tide
@@ -44,6 +45,54 @@
/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)
>>>>>>> 3093d86... Makes false alarm use more explicit in event code. (#32559)
if(istype(O, /obj/machinery/power/apc))
var/obj/machinery/power/apc/temp = O
temp.overload_lighting()

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,3 +1,4 @@
<<<<<<< HEAD
/datum/round_event_control/spontaneous_appendicitis
name = "Spontaneous Appendicitis"
typepath = /datum/round_event/spontaneous_appendicitis
@@ -8,6 +9,21 @@
/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))
>>>>>>> 3093d86... Makes false alarm use more explicit in event code. (#32559)
if(!H.client)
continue
if(H.stat == DEAD)

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,3 +1,4 @@
<<<<<<< HEAD
/datum/round_event_control/weightless
name = "Gravity Systems Failure"
typepath = /datum/round_event/weightless
@@ -30,3 +31,37 @@
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.")
>>>>>>> 3093d86... Makes false alarm use more explicit in event code. (#32559)

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')