Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save inky/400487 to your computer and use it in GitHub Desktop.
Save inky/400487 to your computer and use it in GitHub Desktop.
Scheme version by bengold.
;Based on the Wondermark Fiction Generator by David Malki (http://wondermark.com/554/)
;Also based on Liam Cooke's automated version (http://fictiongen.boxofjunk.ws/)
;loc-adj-num is a random number between and including 0 and 12.
;The program location-adj takes the number from loc-adj-num and returns a location adjective based on the numbers each adjective is assigned.
(define loc-adj-num (random 12))
(define (location-adj loc-adj-num)
(cond
[(= loc-adj-num 0) (display "neo-noir ")]
[(= loc-adj-num 1) (display "alternate-history ")]
[(= loc-adj-num 2) (display "ancient ")]
[(= loc-adj-num 3) (display "post-apocalyptic ")]
[(= loc-adj-num 4) (display "dystopian ")]
[(= loc-adj-num 5) (display "VR-simulated ")]
[(= loc-adj-num 6) (display "metaphorical ")]
[(= loc-adj-num 7) (display "anachronistic ")]
[(= loc-adj-num 8) (display "leather-clad ")]
[(= loc-adj-num 9) (display "coal-powered ")]
[(= loc-adj-num 10) (display "dragon-filled ")]
[(= loc-adj-num 11) (display "shrill ")]))
(define loc-noun-num (random 12))
(define (location-noun loc-noun-num)
(cond
[(= loc-noun-num 0) (display "America, ")]
[(= loc-noun-num 1) (display "Japan, ")]
[(= loc-noun-num 2) (display "Soviet Russia, ")]
[(= loc-noun-num 3) (display "Victorian Britain, ")]
[(= loc-noun-num 4) (display "medieval Europe, ")]
[(= loc-noun-num 5) (display "Aztec empire, ")]
[(= loc-noun-num 6) (display "Atlantis, ")]
[(= loc-noun-num 7) (display "terraformed Mars, ")]
[(= loc-noun-num 8) (display "Antarctica, ")]
[(= loc-noun-num 9) (display "one-way spaceflight, ")]
[(= loc-noun-num 10) (display "Outer Rim world, ")]
[(= loc-noun-num 11) (display "set from Road Warrior, ")]))
(define protag-num (random 12))
(define (protagonist protag-num)
(cond
[(= protag-num 0) (display "flying message courier ")]
[(= protag-num 1) (display "student of metaphysics ")]
[(= protag-num 2) (display "milquetoast office drone ")]
[(= protag-num 3) (display "schlub with mild OCD ")]
[(= protag-num 4) (display "farm boy with dreams ")]
[(= protag-num 5) (display "techno-obsessed geek ")]
[(= protag-num 6) (display "brooding loner ")]
[(= protag-num 7) (display "wisecracking mercenary ")]
[(= protag-num 8) (display "idealistic revolutionary ")]
[(= protag-num 9) (display "journeyman inventor ")]
[(= protag-num 10) (display "collector of oddities ")]
[(= protag-num 11) (display "author self-insert ")]))
(define disco-num (random 12))
(define (discovery disco-num)
(cond
[(= disco-num 0) (display "magic diadem ")]
[(= disco-num 1) (display "arcane prophecy ")]
[(= disco-num 2) (display "dusty tome ")]
[(= disco-num 3) (display "crazy old man ")]
[(= disco-num 4) (display "alien artifact ")]
[(= disco-num 5) (display "enchanted sword ")]
[(= disco-num 6) (display "otherworldly portal ")]
[(= disco-num 7) (display "dream-inducing drug ")]
[(= disco-num 8) (display "encrypted data feed ")]
[(= disco-num 9) (display "time-traveling soldier ")]
[(= disco-num 10) (display "exiled angel ")]
[(= disco-num 11) (display "talking fish ")]))
(define adver-num (random 12))
(define (adversary adver-num)
(cond
[(= adver-num 0) (display "a megalomaniacal dictator, ")]
[(= adver-num 1) (display "a government conspiracy, ")]
[(= adver-num 2) (display "a profit-obsessed corporation, ")]
[(= adver-num 3) (display "a sneering wizard, ")]
[(= adver-num 4) (display "supernatural monsters, ")]
[(= adver-num 5) (display "computer viruses made real, ")]
[(= adver-num 6) (display "murderous robots, ")]
[(= adver-num 7) (display "an army led by a sadist, ")]
[(= adver-num 8) (display "forces that encourage conformity, ")]
[(= adver-num 9) (display "a charismatic politician on the rise, ")]
[(= adver-num 10) (display "humanity’s selfish nature, ")]
[(= adver-num 11) (display "his own insecurity vis-à-vis girls, ")]))
(define assist-num (random 8))
(define (assistant assist-num)
(cond
[(= assist-num 0) (display "sarcastic female techno-geek ")]
[(= assist-num 1) (display "tomboyish female mechanic ")]
[(= assist-num 2) (display "shape-shifting female assassin ")]
[(= assist-num 3) (display "leather-clad female in shades ")]
[(= assist-num 4) (display "girl who's always loved him ")]
[(= assist-num 5) (display "bookish female scholar with mousy brown hair ")]
[(= assist-num 6) (display "cherubic girl with pigtails and spunk ")]
[(= assist-num 7) (display "female who inexplicably becomes attracted to the damaged protagonist for unstated reasons ")]))
(define inven-num (random 8))
(define (inventory inven-num)
(cond
[(= inven-num 0) (display "wacky pet, ")]
[(= inven-num 1) (display "welding gear, ")]
[(= inven-num 2) (display "closet full of assault rifles, ")]
[(= inven-num 3) (display "reference book, ")]
[(= inven-num 4) (display "cleavage, ")]
[(= inven-num 5) (display "facility with magic, ")]
[(= inven-num 6) (display "condescending tone, ")]
[(= inven-num 7) (display "discomfort in formal wear, ")]))
(define con-num (random 12))
(define (conflict con-num)
(cond
[(= con-num 0) (display "a fistfight atop a tower.")]
[(= con-num 1) (display "a daring rescue preceding a giant explosion.")]
[(= con-num 2) (display "a heroic sacrifice that no one will ever remember.")]
[(= con-num 3) (display "a philosophical argument punctuated by violence.")]
[(= con-num 4) (display "a false victory with the promise of future danger.")]
[(= con-num 5) (display "the invocation of a spell at the last possible moment.")]
[(= con-num 6) (display "eternal love professed without irony.")]
[(= con-num 7) (display "the land restored to health.")]
[(= con-num 8) (display "authorial preaching through the mouths of the characters.")]
[(= con-num 9) (display "convoluted nonsense that squanders the readers’ goodwill.")]
[(= con-num 10) (display "wish-fulfillment solutions to real-world problems.")]
[(= con-num 11) (display "a cliffhanger for the sake of prompting a series.")]))
(define title-adj-num (random 12))
(define (title-adj title-adj-num)
(cond
[(= title-adj-num 0) (display "Chrono")]
[(= title-adj-num 1) (display "Neuro")]
[(= title-adj-num 2) (display "Aero")]
[(= title-adj-num 3) (display "Cosmo")]
[(= title-adj-num 4) (display "Reve")]
[(= title-adj-num 5) (display "Necro")]
[(= title-adj-num 6) (display "Cyber")]
[(= title-adj-num 7) (display "Astro")]
[(= title-adj-num 8) (display "Psycho")]
[(= title-adj-num 9) (display "Steam")]
[(= title-adj-num 10) (display "Meta")]
[(= title-adj-num 11) (display "Black")]))
(define title-noun-num (random 12))
(define (title-noun title-noun-num)
(cond
[(= title-noun-num 0) (display "punks")]
[(= title-noun-num 1) (display "mechs")]
[(= title-noun-num 2) (display "noiacs")]
[(= title-noun-num 3) (display "opolis")]
[(= title-noun-num 4) (display "nauts")]
[(= title-noun-num 5) (display "phages")]
[(= title-noun-num 6) (display "droids")]
[(= title-noun-num 7) (display "bots")]
[(= title-noun-num 8) (display "blades")]
[(= title-noun-num 9) (display "trons")]
[(= title-noun-num 10) (display "mancers")]
[(= title-noun-num 11) (display "Wars")]))
;The program an-or-an uses the number from loc-adj-num to determine whether the location adjective should be preceded by an 'a' or an 'a'.
(define (a-or-an)
(cond
[(= loc-adj-num 1) (display "an ")]
[(= loc-adj-num 2) (display "an ")]
[(= loc-adj-num 7) (display "an ")]
[else (display "a ")]))
(define (a-or-an2)
(cond
[(= disco-num 1) (display "an ")]
[(= disco-num 4) (display "an ")]
[(= disco-num 5) (display "an ")]
[(= disco-num 6) (display "an ")]
[(= disco-num 8) (display "an ")]
[(= disco-num 10) (display "an ")]
[else (display "a ")]))
;The following uses the previously defined programs to generate the text that is displayed.
(display "Your title is: The ")(title-adj title-adj-num)(title-noun title-noun-num)(newline)
(newline)
(display "In ")(a-or-an)(location-adj loc-adj-num)(location-noun loc-noun-num)(display "a young ")(protagonist protag-num)(display "stumbles across ")(a-or-an2)(discovery disco-num)(display "which spurs him into conflict with ")(adversary adver-num)(display "with the help of a ")(assistant assist-num)(display "and her ")(inventory inven-num)(display "culminating in ")(conflict con-num)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment