Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Participants: Hannah Ackermans * Julianne Aguilar * Bo An * Katie Anagnostou * Joanne Armitage * Lucas Bang * Alanna Bartolini * David M. Berry * Lillian-Yvonne Bertram * Elisa Beshero-Bondar * Briana Bettin * Sayan Bhattacharyya * Avery Blankenship * Gregory Bringman * Tatiana Bryant * Zara Burton * Evan Buswell * Ashleigh Cassemere-Stanfield * Angela Chang * Prashant Chauhan * Lia Coleman * Chris Coleman * Bill Condee * Nicole Cote * Christina Cuneo * Pierre Depaz * Ranjodh Dhaliwal * Samuel DiBella * Quinn Dombrowski * Kevin Driscoll * Brandee Easter * Jeffrey Edgington * Zoelle Egner * Tristan Espinoza * Teodora Sinziana Fartan * Meredith finkelstein * luke fischbeck * Cyril Focht * Cassidy Fuller * Erika Fülöp * gripp gillson * Alice Goldfarb * Jan Grant * Sarah Groff Hennigh-Palermo * Saksham Gupta * MARIO GUZMAN * Gottfried Haider * Rob Hammond * Nabil Hassein * Diogo Henriques * Gui Heurich * Kate Hollenbach * Stefka Hristova * Bryce Jackson * Dennis Jerz * Joey Jones * Amy Kintner * Corinna Kirsch * Harris Kornstein * Julia Kott * Rishav Kundu * Karios Kurav * Cherrie Kwok * Sarah Laiola * RYAN LEACH * Rachael Lee * Kristen Lillvis * Elizabeth Losh * Jiaqi LU * Megan Ma * Emily Maemura * ASHIK MAHMUD * Felipe Mammoli * Mariana Marangoni * Terhi Marttila * Daniel McCafferty * Christopher McGuinness * Alex McLean * Chandler McWilliams * Todd Millstein * Achala Mishra * Mami Mizushina * Nick Montfort * Molly Morin * Gutierrez Nicholaus * Matt Nish-Lapidus * Michael Nixon * Mace Ojala * Steven Oscherwitz * Delfina Pandiani * Stefano Penge * Megan Perram * Gesina Phillips * Tanner Poling * Julia Polyck-O’Neill * Ben Potter * Amit Ray * Katrina Rbeiz * Jake Reber * Thorsten Ries * Giulia Carla Rossi * Barry Rountree * Warren Sack * samara sallam * Mark Sample * Perla Sasson-Henry * zehra sayed * Carly Schnitzler * Ushnish Sengupta * Lyle Skains * Andrew Smith * Rory Solomon * S. Hayley Steele * Samara Steele * Nikki Stevens * Daniel Temkin * Anna Tito * Lesia Tkacz * Fereshteh Toosi * Nicholas Travaglini * Paige Treebridge * Paige Treebridge * Álvaro Triana Sánchez * Lee Tusman * Natalia + Meow Tyshkevich + Kilo * Annette Vee * Malena Velarde * Dan Verständig * Yohanna Waliya * Samantha Walkow * Josephine Walwema * Shu Wan * Biyi Wen * Zach Whalen * Mark Wolff * Christine Woody * kathy wu * Katherine Yang * Shuyi Yin * Nikoleta Zampaki * Hongwei Zhou
Coordinated by Mark Marino (USC), Jeremy Douglass (UCSB), Sarah Ciston (USC), and Zach Mann (USC). Sponsored by the Humanities and Critical Code Studies Lab (USC), and the Digital Arts and Humanities Commons (UCSB).

Generating names for generated dinosaurs (2022 Code Critique)

Title: The Island of Doctor Wooby
Author: Ryan Veeder
Language: Inform 7
Developed: 2015

Play link:

In this text adventure, written for a virtual pet-themed game jam, the player visits an island populated by tiny felt dinosaurs. The dinosaur dolls are generated with different legs, necks, spikes or no spikes, teeth or no teeth...

This was all based on real dolls I had sewn, and given names like "Teggisaurus," "Dagadagadon," and "Mustadopagus." I wanted the generated dinosaurs to have generated names that were recognizable both as pseudo-baby talk and as dinosaur names.

(An extremely long commentary on the full dinosaur generation process is available for anyone interested.)

It strikes me that, in order to come across as stereotypical baby talk, the "roots" here run fairly long ("boofa," "smoosha"). When more than half of generated names contain more than one of these roots, I think you run into a lot of names that are too long to be, strictly speaking, cute.

A possible angle for discussion: Where else have you seen nonsense words generated to fit in a specific aesthetic? Do strategies for creating different "looks" for words have anything in common?

To name the current test subject:
    let tempname be text;
    let namecomponents be a random number between 1 and 2; [First randomize the number of "roots" that will be in the name. Right now it's 50% one root, 50% two roots.]
    if a random chance of 1 in 6 succeeds:
        increment namecomponents; [Now the distribution is 41.667% one root, 50% two roots, and 8.333% three roots. A dinosaur with three roots in its name turns out to be fairly inconvenient, so we will tone that third option down a little..]
    if namecomponents is 3:
        if a random chance of 2 in 3 succeeds:
            now namecomponents is 2; [Sow now we're looking at 41.6% one roots; 55.6% two roots; 2.8% three roots.]
    if namecomponents is 1:
        choose a random row in Table of Long Name Suffixes;
        now tempname is "[suffix entry]"; [A name with only one root requires a long suffix, since something like "Goomus" doesn't look dinosaury enough.]
        if a random chance of 1 in 2 succeeds:
            choose a random row in Table of Long Name Suffixes;
            now tempname is "[suffix entry]";
            choose a random row in Table of Short Name Suffixes;
            now tempname is "[suffix entry]";
    choose a random row in table of name roots;
    now tempname is "[root entry][tempname]";
    decrement namecomponents;
    if namecomponents is greater than 0:
        choose a random row in table of name roots;
        now tempname is "[root entry][tempname]";
        decrement namecomponents;
    if namecomponents is greater than 0: [Instead of repeating a loop until namecomponents reaches 0 like a real programmer would, why not write out all possible steps]
        choose a random row in table of name roots;
        now tempname is "[root entry][tempname]";
        decrement namecomponents;
    Now the species name of the current test subject is "[tempname]" in title case;
    now the printed name of the current test subject is "[tempname]" in title case. [The player can change the printed name of a dinosaur with a command like >NAME BUGGOBOGADON ALFIE.]

Table of Name Roots

Table of Short Name Suffixes

Table of Long Name Suffixes


  • lostpoets has some very aesthetic nonsensical words to describe the different categories of things -

  • @rcveeder I love the dedication to the sound of baby talk. I wonder if it wouldn't be useful to bring in a similar generator for comparison at this point, or rather set of generators, namely the ppg256, which share a certain construction ethos.

    For example:
    perl -le 'sub b{@_=unpack"(A2)*",pop;$_[rand@_]}sub w{" ".b(cococacamamadebapabohamolaburatamihopodito).b(estsnslldsckregspsstedbsnelengkemsattewsntarshnknd)}{$_="\n\nthe".w."\n";$_=w." ".b(attoonnoof).w if$l;s/[au][ae]/a/;print;$l=0if$l++>rand 9;sleep 1;redo} #Rev2'

    Although, their "nonesense" tends to be more in the appearance of bigrams and trigrams in the code, rather than output. Still, they share at least the aspect of generating content out of syllables.

    Actually, the piece that seems most in concert with this, might be @aparrish 's work Pincelate which is implemented in the Nonsense Laboratory.

    I should mention I once created a similar generator, but it created names for Web 2.0-style apps. Their names weren't entirely nonsensical, but their services were. Nonetheless, I think any of them would have been in the running for some serious VC.

  • This is great to see! In my Inform interactive fiction Ad Verbum, from 2000, a child challenges you to a turn-basd game where you have to say more dinosaur than him.


    The child knows a lot of dinosaur names. Ad Verbum implements a dinosaur name discriminator, and you can win — and are expected to win — by making up fake plausible-sounding dinosaur names, which he will accept as legitimate.

    This was before Wikipedia!

  • I'd love to see what the criteria for dinosaurish names in Ad Verbum are. In Doctor Wooby the saurianness seems to rely mostly on the suffixes and secondarily on the "root" segments being (almost) all trochees.

  • edited February 2022

    This will disappoint you @rcveeder but here it is!

               if (((thisword->(thislength-4)=='s') && (thisword->(thislength-3)=='a') &&
                (thisword->(thislength-2)=='u') && (thisword->(thislength-1)=='r' )) ||
               ((thisword->(thislength-6)=='s') && (thisword->(thislength-5)=='a') &&
                (thisword->(thislength-4)=='u') && (thisword->(thislength-3)=='r') &&
                (thisword->(thislength-2)=='u') && (thisword->(thislength-1)=='s' )))
                  { if ((fake_name->0==thisword->0) && (fake_name->1==thisword->1) &&
                        (fake_name->2==thisword->2) && (fake_name->3==thisword->3) &&
                    "Georgie looks puzzled - for a moment. ~Hey, you just said something like that,~ he says. ~That doesn't count.~";
                    fake_name->0 = thisword->0;
                    fake_name->1 = thisword->1;
                    fake_name->2 = thisword->2;
                    fake_name->3 = thisword->3;
                    fake_name->4 = thisword->4;
                    print "Georgie looks puzzled, as if he hasn't heard that dinosaur
                      name before. He sputters for a moment, perhaps confused by the
                      novel name, apparently finding it difficult to think.^";
                      self.dinos_forgotten = self.dinos_forgotten+3;
                      self.say_dino(); rtrue; }
                  "~Is that supposed to be a dinosaur name?~ Georgie says. ~Nuh-uh!~";

    The logic is simple and yet the Inform 6 is inelegant! You just have to say something ending in “saur” or “saurus” and not repeat the last fake name you said.

  • Awesome work with Doctor Wooby, @rcveeder, and Ad Verbum @nickm !

    Sadly, it's not online anymore, yet I couldn't help recalling the online game 'Technosphere', by Jane Prophet, Gordon Selley, and Mark Hurry (from the 90s, there were 3 different versions). Also archived here on

    I could find only images of the creatures, but, if my memory doesn't fail me, the name of the creatures was also a hybrid composition of different names... maybe a deeper search of webarchives can bring the names of these creatures back to life :)

Sign In or Register to comment.