character-texture-wide

Conlang is an abbreviated term for Constructed Language, essentially a made up language. Constructed languages are used in a lot of media to give a certain feeling to a setting, race, etc. You can see examples in the names and place names of your favorite RPG fantasy race or alien. Done right theyโ€™re ridiculously complex, take many factors into consideration and require a large time investment. Thatโ€™s why some Conlang professionals make the big bucks. This is not an article about doing conlang right. Thatโ€™s well beyond my expertise. This is instead an article about making a quick and dirty conlang generator based on a seed from an existing language so you can effortlessly name every guardsman, tavern, ceremonial birthing spear, whatever that your players pester you about.

I attempted to make such a generator for a game recently and found that they’reร‚ย fairly easy to construct with Google Sheets. Other spreadsheet programs will work fine as well if you have them, but the logic will be slightly different.

To start with youโ€™ll need to put your word list in a page on your Google Sheet. Just for fun, weโ€™ll base this conlang on the names of the cast of Jersey Shore. Iโ€™ve chosen to ignore the difference between first, middle and last names and to count the dash in Ortiz-Magro as a name so it shows up in our final results. Once you have them listed, break them up by first, last, and middle syllables like so:

image

Once your root words are broken down by syllables, use the =counta() function to count the number of cells with values in each syllable column. Put these above the root words to make it easy to add more roots later if you want to.

image

From there, use a formula to subtract the count of column 2 from column 1โ€™s count etcโ€ฆ This will give us an estimate of the proportion of words that have each number of syllables.

image

Here we can see on Planet J-Shore that around half of names have 2 syllables, around a 6th have 1, 3, or 4, and ~4% have 5.

Next add another row with cumulative syllable count like so:

image

The next step is to build lookup tables for our syllables. Itโ€™s easiest to do this on a new sheet. The plus sign in the lower left will make new sheets. You can re-name your sheets with the drop down arrow on the sheet tab.

image

Copy-Paste your syllables into columns on this new sheet. Put ALL middle syllable columns into one column here. You can get rid of extra spaces by selecting a column, then from the menu choosing Data>Sort Range picking โ€œhas headerโ€ and sort. Add a table of numbers just like you were making a table to roll on. (which is what weโ€™re doing) Donโ€™t worry that you have an odd number of syllables.

image

Create a new sheet for the actual generator. Put in a column for the number of syllables in each random word, one column for each potential syllable (in our case 5) and a final column for the constructed word like so:

image

In the syllables column add the following formula to each cell:

=MATCH(RAND(),{0;4/28;18/28;22/28;27/28;28/28},1)

The fractions in the brackets are the values from the cumulative syllable row from our first sheet. This code creates a random number of syllables based on our observed number of syllables in our seed words.

image

The contents of the 1st, mid and last syllable columns is all slightly different, but similar to this:

=if($A2>2,lookup(randbetween(1,17),Tables!G$2:G$18,Tables!H$2:H$18),””)

โ€œ$A2>2โ€ checks how many syllables the word has. Iโ€™m assuming that syllables get added in order of first, last, mid1, mid2, mid3.

โ€œrandbetween(1,17)โ€ is the possible โ€œrollsโ€ on the table.

โ€œTables!G$2:G$18,Tables!H$2:H$18โ€ is the sheet โ€œTablesโ€ and cell range for the โ€œroll numberโ€ and result for that syllable type.

Hereโ€™s the code for each column in order:

=if($A2>0,lookup(randbetween(1,28),Tables!A$2:A$29,Tables!B$2:B$29),””)

=if($A2>2,lookup(randbetween(1,17),Tables!G$2:G$18,Tables!H$2:H$18),””)

=if($A2>3,lookup(randbetween(1,17),Tables!G$2:G$18,Tables!H$2:H$18),””)

=if($A2>4,lookup(randbetween(1,17),Tables!G$2:G$18,Tables!H$2:H$18),””)

=if($A2>1,lookup(randbetween(1,24),Tables!D$2:D$25,Tables!E$2:E$25),””)

The final column has the code:

=concatenate(B2,C2,D2,E2,F2)

which just sticks together all theร‚ย  pieces.

image

You can hide the first columns if you just want the output list, but I find them useful as a pronunciation guide. I might tweak this generator if I were going to use it by dumping the โ€œ-โ€œ syllable, adding some more seeds, and assembling the individual name results into one to three name groups (nickname, first last, first middle last, and first last-last) but for the 15 minutes it takes to put together it does itโ€™s job well enough.

You can view the final sheet here. Feel free to copy, tweak, and put in your own seeds for your own projects.