custom_names.rb
main.rb
, railroad.rb
, or custom_names.rb
.git clone
the repo.
bundle install
If you want to run main.rb
, type ruby main.rb
. If you want to run railroad.rb
, type ruby railroad.rb
. And, if you want to run custom_names.rb
, type ruby custom_names.rb
.
main.rb
You will receive a prompt to "name" your mission. That name will serve as a seed that will be used to generate the mission in question (which will be formatted using Markdown). You can copy this generated mission over to a text file for you to view, edit and share to your heart's content.
The generated mission also includes a URL to a website hosted on https://itty.bitty.site/. You can view, edit, and share the generated mission using that URL as well.
Look at EXAMPLE.md to see how an example generated mission might look like. I recommend generating multiple missions and picking and choosing what elements you want (customizing it to match your own purposes). Secret society missions are pretty generic and will probably require some major customizations (or even to be re-written from scratch) to match the mood and style of your mission.
The generated URL is very long. This is because the URL actually contains the generated mission text, just mostly compressed (think of it like a zip file). itty.bitty.site decompresses the URL, allowing us to see the content.
This feature is actually very cool. It allows us to easily transmit files (just copy and paste the URL). But, it also means that this site only functions properly with browers that can handle long URLs.
According to this SO answer, our generated link will function properly for Google Chrome, Firefox, Safari, and Opera (but will not work with Edge or IE11).
railroad.rb
main.rb
is useful if you want to generate a mission based on a specific title, but you don't care what text is being generated. However, sometimes, you may prefer the opposite: you don't care about the title, but you do care what text is being generated. That's where railroad.rb
comes in.
When you run ruby railroad.rb
, instead of being prompted for a word prompt, you are prompted for a search term. We will then continually generate missions until we finally find the mission with that search term, and then present that mission to you. Essentially, you are 'railroading' the generator to produce the output you want.
Here's an example tutorial for using railroad.rb
.
ruby railroad.rb
if running locallyWe also include an itty.bitty.site URL as well, for you to view, edit, and share to your heart's content.
If you want to know what you can search for, look in lib/mission_generator.rb
for a list of possible stuff that we can generate.
If we cannot generate a mission with your search term within ~30 seconds, we simply give up. There's two possible explainations for why we failed:
custom_names.rb
In addition to generating the mission, main.rb
generates the names of the two main characters of that mission - the overdog (a high-clearance authority figure) and the underdog (a low-clearance citizen rebelling against the authority figure).
However, you may prefer to come up with your own names for these citizens, rather than use our pregenerated names. This may be useful if you wanted to reuse characters from a previous adventure.
When you run custom_names.rb
(either by selecting custom_names.rb
if you are running the program online or typing ruby custom_names.rb
), you are first prompted to give a name prompt. Then you can see our generated names, and then modify them as you wish.
Once you are satisfied with the names, you can then continue onward with the mission generation process.
You can use custom_names.rb
in conjunction with railroad.rb
. First, run railroad.rb to find a mission with your ideal search term. Save the generated title. Then use that title as the word prompt for custom_names.rb
, and then change the names of the two main characters in that mission.
In addition to writing out my own material, I used the following supplements from the PARANOIA XP line:
The name generator uses names from an example email generator built using Calyx, and the generator itself was inspired by the Faker Ruby gem.
The personality generator came from the Cyberpunk City Generator, which uses traits from Hearts of Iron 2 and "Blood, Words, and Money: Organizations and Factions".
The fake word generator (which I used to come up with random names to objects, including R&D devices) came from anticoders' fake-words.
Some mission briefings were "inspired" by OpenAI's public text generator, released on February 14, 2019 - after generating the text, I then edited them to be a bit more human-readable.
Some rumors were "inspired" by AI Dungeon (which uses a more advanced version of OpenAI's text generator) - after generating the text, I then edited them to be a bit more human-readable.
I also managed to get some PARANOIA missions from the following online sources:
This program is my take on the famous "Mission Blender". There is already an online version of the Mission Blender when I started work on this project, but that project required me to "think" how to merge all the randomly-generated items together. What I wanted is a system that automates as much of the mission-generation process possible. Some human effort is still needed at the end of the day (because the goal of a tabletop RPG session is to entertain humans, not bots), but will be used more efficently - curating and refining the generated output.
The format of the generated mission is usually self-explanatory, but I like to explain three things.
The "background" at the start of the mission is based off the format in most professionally published PARANOIA missions, where the GM is given some details about the covert dealings that is responsible for the current mission. The PCs may (or may not) be able to discover what's going on (and it's possible the PCs may not even care). But there is usually a reason behind the madness (which tends to help the GM improvise even more madness on-the-fly).
The "Mission Blender" attempted to approximate this "background" material by starting off with the slogan "PARANOIA is the [IRRATIONAL] [FEAR] that [SOMEONE] is [OUT TO GET YOU]", and having you roll on charts to find out certain mission elements that can be associated with the highlighted words. While nice in theory, it felt flat in practice since there was not really much connection between those elements and the rest of the mission.
So instead, for my generator, I created my own "background" template, based off a sterotypical power struggle between a low-clearance "underdog" fighting against a high-clearance citizen (the "overdog"). The rest of the generated mission would refer to this power struggle, providing an overall sort of "unity" to the final output.
The content in the Mission Blender's approximation tables would wind up being reused in other places (for example, as possible generated missions for the player to be on...or as "complications" for the players to encounter).
The "complications" section is my attempt to implement Step 2 of "The Adventure Funnel" (a manual approach to generating tabletop RPG adventures). Step 2 requires the GM to generate obstacles that stands in the way of the PCs' goals (after all, without any obstacles, the PCs' job would be easy and we wouldn't have much of a game). I chose the name "complications" rather than "obstacles" (since the supplements Internal Security and High Programmer uses the term when describing how to generate missions), but they mean pretty much the same thing.
Many PARANOIA missions tend to have certain weird scenes, events, and even whole missions that are almost loosely connected to the main plotline, serving as complications for the PCs to overcome (or at least run away from). So it's almost paramount that I include "complications" into my mission generation (regardless of the name I assigned to it).
The vanilla mission blender does not really reflect "complications" except in its approximation of generating "background" material above. What I did is to create a huge table containing possible complications the PCs may face while doing their mission, and then randomly pick possible complications.
The Mission Blender does a good job with Step 1 (as it already generates a goal for PCs to fight for), and with enough generated details, it's usually very easy for GM to manually perform Step 3 (adding details to the generated goal and complications) on their own.
The Internal Security rulebook talks about "floating clues" (clues that players may encounter during the course of gameplay, no matter what they do), and extended that motif to "floating evidence" that players may also encounter during the course of gameplay.
"Floaters" is my generalization of this very concept - players may encounter this type of content during the course of gameplay. No matter what they'll do, they'll stumble upon it. Player freedom is protected (as the context by which they encounter the content will affect how the content 'fits' into the rest of the mission), while reducing the need for the GM to improvise on the fly.
I was inspired by the The Computer's Paranoia XP RPG Tool, which included a Mission Blender that displayed some 'random content' (like Random Bureacracies, Random 'PLC Equipment Denials', and Random Bystanders) that GMs can use when dealing with players' schemes and plans.
Software - MIT License.
Content - PARANOIA is a trademark jointly held by Eric Goldberg and Greg Costikyan and used under exclusive license by Mongoose Publishing. All trademarks are © their respective owners.
If you wish to have your material removed, receive credit for an idea, or to contribute your own ideas to this generator, please open up a GitHub Issue/Pull Request.