Tale Prank -- Marginally more coherent procedural pranks


"The lore of Loathing, presented without context or consistency. Or correctness."

Inspired by soolar's prank generator, this script remixes in-game text to create shiny semi-new time-spinner/brick/gift-package prank text. It's like two knockoffs for the price of one!

The basic 3-step process is:
  1. Take a few random sentences from A Crimbo Tale and, if you have him, Monster Manuel.*
  2. Optionally, shuffle the names and proper nouns to increase the average absurdity per minute.
  3. Also optionally, send the prank. So it's really more of a one-step process. Whether you send it or not, it'll be saved for later use, or non-use.
* You can also borrow sentences from your Tales of Dread; but following TPTB's no-spoilers request on those, any pranks containing Dread content can only be sent to players with the trophy for collecting all the Tales. I've found Crimbo + Manuel to be more than adequate, anyway, and Dread has a lot of names that are too short to work with the rearranger. The wiki has most of the Manuel entries, so I don't think those are considered super-top-secret (the script will only use entries from your personal Manuel so, if anything, it ought to be an incentive to buy one).

I'll just leave the install link up here:

svn checkout https://svn.code.sf.net/p/guyymafia/code/taleprank/

Here's a sample of the silliness. The green text at the bottom is the prank's final form.

Constructing procedural insanity from 5 excerpts...
1) Crimbo part VI, sentence #5: They also were under considerable pressure from the Loathing Association of Amateur Astronomers, Astrologers, and Meteorology Enthusiasts, or LAAAAME, to build an observatory with which LAAAAME could observe the cosmos and further Loathing's scientific research.
2) Crimbo part VI, sentence #8: In order to make the donors feel like they got something for their meat, LAAAAME invited the public in to peer through the telescope at celestial bodies, or just watch the Naughty Sorceress undress (speaking of heavenly bodies -- yowza!).
3) Crimbo part XIV, sentence #1: Crimbo number 11 featured Uncle Crimbo trying to save himself some effort -- again -- by using leftover Animelf technology to automate the gift manufacturing process.
4) Manuel page P, sentence #109: The Protagonist's hair is twice as tall as his head.
5) Crimbo part XIII, sentence #9: Adventurers discovered that the animelfs were secretly using Uncle Crimbo's facilities to build a gigantic robot, the MechaElf, to take over Crimbo Town and, eventually, all of Loathing.

Generating improper nouns...
Astronomer -> Lollipede
Crimbo Town -> Baa'Baa'Bu'Ran
Astrologers -> Axe Handle
Crimbo -> Evil Trumpet-Playing Mariachi
Crimbo -> Cookie Cutter Of Loneliness
Crimbo -> Spooky Music Box
Loathing -> Grave Rober
Loathing -> Spooky Zombie
Loathing -> Forest Spirit
Meteorology Enthusiasts -> Circuit-Soldering Animelf
Protagonist -> Smooth Criminal
Animelf -> Gingerbread Alligator
Animelf -> Ol' Scratch
Animelf -> Knob Goblin Embezzler
Uncle -> Oil Cartel
Uncle -> Video Game Miniboss
Observatory -> CH Imp
Naughty Sorceress -> Seymour Buttz

They also were under considerable pressure from the Grave Rober Association of Amateur Lollipedes, Axe Handle, and Circuit-Soldering Gingerbread Alligator, or LAAAAME, to build an CH Imp with which LAAAAME could observe the cosmos and further Spooky Zombie's scientific research. In order to make the donors feel like they got something for their meat, LAAAAME invited the public in to peer through the telescope at celestial bodies, or just watch the Seymour Buttz undress (speaking of heavenly bodies -- yowza!). Evil Trumpet-Playing Mariachi number 11 featured Oil Cartel Cookie Cutter Of Loneliness trying to save himself some effort -- again -- by using leftover Ol' Scratch technology to automate the gift manufacturing process. The Smooth Criminal's hair is twice as tall as his head. Adventurers discovered that the Knob Goblin Embezzlers were secretly using Video Game Miniboss Spooky Music Box's facilities to build a gigantic robot, the MechaElf, to take over Baa'Baa'Bu'Ran and, eventually, all of Forest Spirit.
Saved as p67.

The CLI command to run it has 3 optional inputs (it's almost like there's a deliberate three theme).
  1. A player name or #[number] if you want to send it to someone. "contacts" sends it to a random person on your contact list (who isn't in Ronin/Hardcore, unless you're throwing a brick).
  2. Either a number of sentences for a new prank, or "p[number]" to load a previously saved prank. (Note: Time-pranks are limited to 2000 characters, and bricks to 500.)
  3. A dash (-) followed by letters indicating which books to use (c = Crimbo, m = Manuel, d = Dread), whether to use random names (n), and whether to verbotically display all that extra gray text (v). If this part is blank, it will act like you entered "-cmn."

Also, there's actually a fourth input, which is as optional as the first three. "brick" throws bricks instead of time-pranks; "gift" sends a gift package with Holiday Fun, some healing items so your target doesn't get mad when the Fun Log beats them up, and an enormously long prank, with a title; "quest" generates a stupidly-long prank and saves it to your quest log notes page. "load p[number]" loads a prank to that same notes page so you can edit it, and "save" saves it. "erase" deletes all saved pranks, "rename" deletes all the saved names, and "reset" deletes all the cached text used for prank-generating.

Oh, and "taleprank help" will list all the above information. So that's probably the best one to remember.

Example Commands because this thing's way too complicated:

"taleprank -vn" will generate and save a 5-sentence random-nouns prank using Crimbo Tale and Manuel, with that extra gray text to show you what the heck it's doing.
If you got the one above (which is virtually impossible because there's like a jillion possible combinations) you could send it to Doe John with "taleprank Doe John p67".
To send Jane Bane a brick with 3 Manuel-only sentences and random names, use "taleprank Jane Bane 3 -bmn".
You get the idea, probably.

The text sources are cached in /data on-the-fly, so after you run it a few times it should stop hammering the KoL servers and run much faster. The random names will also get random-er as it collects Capitalized Things from every page it visits. "taleprank rename" will reset the names database, in case it gets too unwieldy. "taleprank erase" will wipe all your saved pranks. There is no command for deleting the cached data because you should (almost) never need to do that--it will detect changes to Manuel and re-download those when necessary--but you can find that stuff in "taleprank_cache.txt".

Also, note that there appears to be a KoL bug/feature right now where, if you send two or more time-pranks to the same person (in a row?), they will all have the text from the first one. So, diversify your pranking targets. Or use bricks.
Last edited:


It's surprisingly fun to just generate surreal stories with it. The combination of Crimbo's semblance of story structure and Manuel's scatterbrained randomness makes for good procedural comedy.

I've blacklisted most of the uninteresting semi-nouns it likes to identify as names like "count," "pretty," and "train," plus a buttload of prepositions and pronouns; but tell me if you notice it shuffling any more such things (my Manuel is far from complete).


Okay, may have gone a leeetle overboard adding new bonus features today. So we've got:

  • As above, contact list randomizer. Use "contacts" instead of a player name.
  • A "help" command, which is becoming increasingly necessary...
  • Personalizification--generating a new prank for someone will insert their name in it somewhere (unless it fails to find a spot for it). -p will stick a name in even if it's a saved pranktext.
  • Familiar names. Also, your custom familiar names, if you use -f. Also, -a adds random names from your contacts list.
  • -q dumps the result into the quest log notes page. From there, you can edit and save it if you want. Or just use the 5000-character space for gigantic tales (it even breaks them up into paragraphs!)

Also, some improvements to its sentence and word-recognition. "The" is no longer allowed at the start of a name, because it usually ends up looking awkward and that joke gets old fast.

Anyway--the gist is that the pranks should be a little more readable (but still just as ridiculous, and even funny), and will have the target's name in them, to induce further confusion as to where the hell these garbled messages are coming from.


There's no way to tell whether you already pranked someone outside the script, but it should now not random-prank people more than once per day.

More tweaks have been done, and it should now be a bit better at finding names, not finding things that are not names, and making messages you can actually read without getting distracted by bad punctuation. Banned words are now in a separate text file, so I guess you can delete that if you want a total collapse into randomness.


Well... it's certainly possible to not save them, but that seems a bit pointless. Text takes up very little memory. I have a file of over 700 pranks from testing and it's not even one megabyte. (KolMafia.jar is almost 13 MB, and it's currently using 125 MB of RAM.) "taleprank erase" deletes the prank database, if it somehow gets too big.

The main thing I still want to do is add some way to import text for prank-generating, since it can theoretically work with any arbitrary text (as long as it's URL-safe ASCII, and preferably has a lot of capitalized words).

Edit: Also, new vector for prank projection: gift packages! "taleprank gift [name]" will send a box with a huge wall of procedural nonsense with a random title, a "Holiday Fun!", and a scroll of drastic healing just to be nice (because Holiday Fun clubs out all your hit points, in addition to giving a chat effect).
Last edited:
I'm trying to send a brick but it keeps telling me Im out of minutes

> taleprank Julitewn -bcmn

Preparing prank for Julitewn (#390263)
Constructing procedural insanity from 10 excerpts...
Generating improper nouns...
In fact, it is an ability that the species evolved over many thousands of generations. Instead of a restful year spent, say, learning Miguel Domingo, or knitting, or whittling guns out of soap, Gaia'Ajh-Dsli Ak'Lwej Hobopolis used the "something different" clause to press the elves into a hostile takeover of Grimacite Site. Just to be spiteful, I suppose. It's been suggested that the Jerry's Riggers is actually Shirley, but in fact Sassbeard is still alive, living under an assumed name in the Jet-Ski. In fact, it may not even have bones. Or rat-shaped colonies of lice. It's hard to make a cold werewolf; you have to be bitten by a werewolf and a rabid snowman in the same night. You'd tell me if you were a fish, right? It's pretty gross. OR WAS IT?
Saved as p105.
You're fresh outta minutes! This prank will have to wait until rollover.


I'm trying to send a brick but it keeps telling me Im out of minutes

> taleprank Julitewn -bcmn

That's now done with "taleprank brick [name]". The "dash followed by letters" part of the command was getting a bit overloaded, and it's annoying to have to remember the "cmn" part every time you want to throw a brick or send a gift... so the prank-container-type is now a separate thing (nothing for time-pranks, "brick" for bricks, "gift" for a gift package, or "quest" for the wall-of-text-in-quest-log). The dash command is now unnecessary unless you want to change how it generates the text.

It should now show what type of prank it's trying to make, to avoid that particular confusion.

On a related note, it now mines the descriptions of items in your inventory for... stuff. Sentences and names, right, those things. Due to their tendency to start with "This is...", that bit is treated as a slot for names to go into, creating highly incongruous statements such as "Mariachi Calavera is an extremely revealing mens' swimsuit made of bones."
Last edited: