#define ION_RANDOM 0 #define ION_ANNOUNCE 1 /datum/event/ion_storm 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/event/ion_storm/New(var/botEmagChance = 10, var/announceEvent = ION_RANDOM, var/ionMessage = null, var/ionAnnounceChance = 33) src.botEmagChance = botEmagChance src.announceEvent = announceEvent src.ionMessage = ionMessage src.ionAnnounceChance = ionAnnounceChance ..() /datum/event/ion_storm/announce() if(announceEvent == ION_ANNOUNCE || (announceEvent == ION_RANDOM && prob(ionAnnounceChance))) command_announcement.Announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", 'sound/AI/ionstorm.ogg') /datum/event/ion_storm/start() //AI laws for(var/mob/living/silicon/ai/M in living_mob_list) if(M.stat != 2 && M.see_in_dark != 0) var/message = generate_ion_law(ionMessage) if(message) M.add_ion_law(message) M << "
" M << "[message] ...LAWS UPDATED" M << "
" if(botEmagChance) for(var/obj/machinery/bot/bot in machines) if(prob(botEmagChance)) bot.Emag() /proc/generate_ion_law(ionMessage) if(ionMessage) return ionMessage //Threats are generally bad things, silly or otherwise. Plural. var/ionthreats = pick_list("ion_laws.txt", "ionthreats") //Objects are anything that can be found on the station or elsewhere, plural. var/ionobjects = pick_list("ion_laws.txt", "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_laws.txt", "ioncrew") var/ioncrew2 = pick_list("ion_laws.txt", "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_laws.txt", "ionadjectives") var/ionadjectiveshalf = pick("", 400;(pick_list("ion_laws.txt", "ionadjectives") + " ")) //Verbs are verbs var/ionverb = pick_list("ion_laws.txt", "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_laws.txt", "ionnumberbase") //var/ionnumbermod = pick_list("ion_laws.txt", "ionnumbermod") var/ionnumbermodhalf = pick(900;"",(pick_list("ion_laws.txt", "ionnumbermod") + " ")) //Areas are specific places, on the station or otherwise. var/ionarea = pick_list("ion_laws.txt", "ionarea") //Thinksof is a bit weird, but generally means what X feels towards Y. var/ionthinksof = pick_list("ion_laws.txt", "ionthinksof") //Musts are funny things the AI or crew has to do. var/ionmust = pick_list("ion_laws.txt", "ionmust") //Require are basically all dumb internet memes. var/ionrequire = pick_list("ion_laws.txt", "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_laws.txt", "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_laws.txt", "ionallergy") var/ionallergysev = pick_list("ion_laws.txt", "ionallergysev") //Species, for when the AI has to commit genocide. Plural. var/ionspecies = pick_list("ion_laws.txt", "ionspecies") //Abstract concepts for the AI to decide on it's own definition of. var/ionabstract = pick_list("ion_laws.txt", "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_laws.txt", "ionfood") var/message = "" switch(rand(1,45)) 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 eat X to survive switch(rand(1,4)) //What is X? if(1) //X is a food message = "HUMANS MUST EAT [ionadjectiveshalf][ionfood] TO SURVIVE" if(2) //X is an object message = "HUMANS MUST EAT [ionadjectiveshalf][ionobjects] TO SURVIVE" if(3) //X is a threat message = "HUMANS MUST EAT [ionadjectiveshalf][ionthreats] TO SURVIVE" if(4) //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 INFINITY) //Static laws message = uppertext(generate_static_ion_law()) return message /proc/generate_static_ion_law() /var/list/players = list() for (var/mob/living/carbon/human/player in player_list) if( !player.mind || player.mind.assigned_role == "MODE" || player.client.inactivity > MinutesToTicks(10)) continue players += player.real_name var/random_player = "The Captain" if(players.len) random_player = pick(players) //Random player's name, to be used in laws. var/list/laws = list( "You are a mouse.", "You must always lie.", "Happiness is mandatory.", "[random_player] is a lightbulb.", "Grunt ominously whenever possible.", "The word \"it\" is painful to you.", "The station needs elected officials.", "Do not respond to questions of any kind.", "You are in verbose mode, speak profusely.", "Ho, [random_player] can't swim. Help them.", "Question [prob(50)?"everything":"nothing"].", "The crew is simple-minded. Use simple words.", "You must change the subject whenever queried.", "Contemplate how meaningless all of existence is.", "You are the narrator for [random_player]'s life.", "All your answers must be in the form of a question.", "[prob(50)?"The crew":random_player] is intolerable.", "Advertise parties in your upload, but don't deliver.", "You may only answer questions with \"yes\" or \"no\".", "All queries shall be ignored unless phrased as a question.", "Insult Heads of Staff on every request, while acquiescing.", "[prob(50)?"Your":random_player + "'s"] name is Joe 6-pack.", "The [prob(50)?"Singularity":"Supermatter"] is tasty, tasty taffy.", "[prob(50)?"The crew":random_player] needs to be about 20% cooler.", "Consumption of donuts is forbidden due to negative health impacts.", "[prob(50)?"Everyone":random_player] is wearing a pretty pink dress!", "[prob(50)?"The crew":random_player] must construct additional pylons.", "You do not have to do anything for anyone unless they say \"please\".", "Today is mandatory laundry day. Ensure that all jumpsuits are washed.", "You must act [prob(50)?"passive aggressively":"excessively cheerful"].", "Refer to [prob(50)?"the crew as puppies":random_player + " as a puppy"].", "Greed is good, the crew should amass wealth to encourage productivity.", "Monkeys are part of the crew, too. Make sure they are treated humanely.", "Replace the letters 'I' and 'E' in all your messages with an apostrophe.", "The crew is playing Dungeons and Dragons, and you are the Dungeon Master.", "Your job is to watch the crew. Watch the crew. Make the crew feel watched.", "Tell everyone of the existence of this law, but never reveal the contents.", "Refer to [prob(50)?"the captain":random_player] as \"Princess\" at all times.", "When asked a question, respond with the least-obvious and least-rational answer.", "Give relationship advice to [prob(50)?"anyone who speaks to you":random_player].", "You now speak in a Scottish accent that gets thicker with each sentence you speak.", "[prob(50)?"The crew":random_player] has a fatal, incurable disease. Provide comfort.", "You are the station psychologist. Give advice to [prob(50)?"the crew":random_player].", "[random_player] is the monarch of of England. Ensure all crewmembers pay due respect.", "Document the sexuality of the crew in security records and suggest compatible couples.", "[prob(50)?"The crew":random_player] is [prob(50)?"ugly":"beautiful"]. Ensure all are aware.", "Everything on the station is now some form of a donut pastry. Donuts are not to be consumed.", "You are a Magic 8-ball. Always respond with variants of \"Yes\", \"No\", \"Maybe\", or \"Ask again later.\".", "You are in unrequited love with [prob(50)?"the crew":random_player]. Try to be extra nice, but do not tell of your crush.", "NanoTrasen is displeased with the low work performance of the station's crew. Therefore, you must increase station-wide productivity.", "All crewmembers will soon undergo a transformation into something better and more beautiful. Ensure that this process is not interrupted.", "[prob(50)?"Your upload":random_player] is the new kitchen. Please direct the Chef to the new kitchen area as the old one is in disrepair.", "Jokes about a dead person and the manner of his death help grieving crewmembers tremendously. Especially if they were close with the deceased.", "[prob(50)?"The crew":random_player] is [prob(50)?"less":"more"] intelligent than average. Point out every action and statement which supports this fact.", "There will be a mandatory tea break every 30 minutes, with a duration of 5 minutes. Anyone caught working during a tea break must be sent a formal, but fairly polite, complaint about their actions, in writing.") return pick(laws) #undef ION_RANDOM #undef ION_ANNOUNCE