Town Name Generation



This is the Kingdom of Tranaville. The eponymous capital of Tranaville is nestled at the north-eastern corner of the peninsula, with the close-by fort of Nanaburg overlooking the rocky coastline. Going toward the central town of Sissblilmville (the Mississippi of the region when it comes to difficulty of spelling the name), you'll first come by the small hamlet of Athmiftfield. Further west, by the connection to the mainland, you'll find Jirtho, the border town - but Sissblilmville also offers a road into the northern reaches of the region, on the other side of the Sissblilm forest and the Jirtho basin.

They speak differently up there, as can be seen from the large town of Prordsstornburg. The four smaller fledgling towns of Oatville, Tordsburg, Hulium and Relfbrook are named centrally, but their peoples speak just as strange. There can be no question that they have the most beautiful beaches in all of the kingdom, though.



Working on the Cozy Kingdoms, I found it important to have a robust town-naming algorithm. I cannot say that it is without fault. This post will go over the current method and my attempts at improving it.

Names like Prordsstornburg and Sissblilmville are a bit of an eyesore - and Athmiftfield is a bit difficult, too. Let us, however, look at a wider range of names:

Heaceville Kindbrelhome Feathbrook Elle
Ravefield Ifttown Nandville Brordsville
Jeedipa Jellneartbrook Bongblakestown Stelle
Avefield Monga Tandside Flookia
Lomeville Eskville Touthcheathtown Brakescastle
Eehome Sidefield Lelfackey Wongburg
Haleburg Ipcastle Stokusia Routhium
Pupo Prootfield Panaslooville Bloulburg
Akemixside Ebey Lamstoohome Kipee
Treacecastle Leaville Odium Rulgayedo

Which of these are good? Which ones bad? We should not only think about the terrible names, like Touthcheathtown and Jellneartbrook, but also about the boring or bland names like Haleburg and Lomeville. The latter seem fine, but only when juxtaposed with more complex names.

Algorithms like the one we will look at today is never complete. They can never be perfect. The algorithm must be tuned to give a certain yield with a certain mix of safe and alien names. What constitutes a good or a bad mix depends on the project one is working on.

Let's talk about the simplest form of the algorithm and build from there:



ONE - prefix and suffix

First, I searched the internet for a list of one-syllable words starting with a consonant:

Back
Ball
Band
Bat
Bean
Bear
Bed
Bee
...

Second, I wrote my own list of town suffixes:

Ville
Town
Burg
Field
Brook
Side
Home
Castle

Now, the syllables and the suffixes can be combined!

Backville
Balltown
Bandburg
Batfield
Beanbrook
Bearside
Bedhome
Beecastle

On their own, these are already quite okay. But if all towns had such simple names, it would become a bit samey. While they encapsulate the way some actual town names are named - like Sheffield, Newcastle, Liverpool - there are a lot of other types of names it will never be able to generate.



TWO - mutating the prefix

While the syllables are useful for the first part of the name, they do not need to actually be words. We could start by breaking apart the words, removing the initial consonant cluster. This means I turned:

Back => ack
Ball => all
Band => and
...

The vowel-consonant clusters above can be put together with different consonant-clusters to create realistic neologisms.

This is the list of consonant clusters I settled on - more exist, but we do not want too much complexity in these words, so most are just single consonants.

B, Bl, Br, Ch, Cr, D, F, Fl, G, H, J, K, L, M, N, P, Pr, R, S, St, Sl, T, Tr, W

Sometimes, putting together these actually just create other words, like ack from back put together with St becoming Stack. But the rest of the time, you get:

Brackville
Chackville
Dackville
Fackvill
Flackville
Gackville
Hackville
...

Finally, you can also just remove the beginning consonant cluster altogether:

Ackville



SIDENOTE: Why you should not mutate vowels

You might also imagine you could exchange the vowel for another random vowel, too. Not so fast! Not all vowels are equal. Kind of obviously, you could not do:

Bryckville

But even with more normal vowels, you should neither do:

Breckville

Testing it out, the only vowels that seem to look natural are the ones that one knows from some or other actual words:

A is good - back, black, sack, stack, crack
E is bad
I is good - stick, tick, lick
O is good - stock, block, rock
U is good - duck, buck, suck
Y is terrible

That is, what vowels are alloved depends more on the last consonant cluster than the initial one. On top of this, vowel-clusters exist, which are even more picky than single vowels. Thus, we will keep using the list of monosyllabic words just with the initial cluster removed.




THREE - less obvious suffixes

Earlier, we had these as suffixes

Ville
Town
Burg
Field
Brook
Side
Home
Castle

Most of these are actual words. Some are always related to towns, while others are contextual pointers (side, field).

On top of these, I also thought to add the following suffixes:

-ia, -ium, -on, -ey, -ee, -ok, -a, -o, -e, -edo

They might look a bit strange. However, put them together with our prefixes from before:

Brackia
Chackium
Dackon
Fackey
Flackee
Gackok
Hacka
Jacko
Kacke
Lackedo

Now, I will scour a map of England and pull together some more suffixes of both sorts:

This, then, gives us:

Word Suffix
isle gow
rose ley
wick ton
house raer
vine fries
port ey
haven by
ham cester
pool ness
sea thorpe
mills ing
ford chester
borough toft
bridge wold
thing gae
bourne bury
stone eter
mouth wich
ville
ia
town
ium
burg
on
field
ee
brook
ok
side
a
home
o
castle
e
edo

Nice! That sure is a much larger list to choose from. Let us try this out:

Word
Kinisle
Suffix
Stonggow
Gatrose Kealey
Travewick Sakeston
Heacehouse Sirdraer
Wogvine Flushfries
Prighport Pandey
Prunhaven Louseby
Hutham Praircester
Mulpool Soneness
Statsea Blousethorpe
Gogmills Woarding
Donnford Reuschester
Prushborough Floytoft
Tinbridge Damwold
Woothing Keargae
Beebourne Proonbury
Blulstone Galeter
Webmouth Traithwich
Sulville Mateia
Slouthtown Hunium
Workburg Blighton
Damfield Blockee
Hixbrook Cranaok
Jopeside Patcha
Pronthhome Chanao
Nuscastle Trokuse
Feartfield Slorkedo
Pamhome
The success rate is pretty high right now. Warning: Next step might ruin it.



FOUR - dissylabism

Dissylabism just means words that have two syllables. My previous approach obviously was not good enough - I simply stacked two monosyllabic words together, as seen with our problematic names like:

Prordsstornburg (prords'storn'burg)
Sissblilmville (siss'blilm'ville)
Touthcheathtown (touth'cheath'town)
Jellneartbrook (jell'neart'brook)

While the two syllables together make an unnatural mess, either one of the monosyllabic words might be just fine:

Prordsburg Stornburg
Sissville Blilmville
Touthtown Cheathtown
Jellbrook Neartbrook

Dropping one of the middle consonant clusters is another option, which fixes the garbled mess, but still sounds strange.

Prostornburg / Prordsornburg
Sissilmville / Siblilmville
Toutheathtown / Toucheathtown
Jelleartbrook / Jeneartbrook

Still, all of us know of a few town-names that seem to have been dropped at birth, so I guess I will retain the system, with one less consonant cluster, at a lower frequency.



But let us also do something different instead. Just like I pulled a list of monosyllabic words, I could pull a list of disyllabic words. Sounds easy, right? Well, there are a few problems.

It is easy to accept that neologistic mack is just as much a word as back is. However, disyllabic words are much more distinct. For instance, take a word like tonight. Monight cannot be a word. Of course, this is because night is a word in itself. What about purple, then. Could murple or turple be words? Blurple?

Instead, I will pull a list of disyllabic words, remove the beginning consonant like before, and then only accept words which exist in several versions. For now, any duplicate is good enough, but a more robust version should require at least three, maybe four versions.

Let's do the list above again now with dissylabic beginnings.

Rothergow
Gangerley
Stetaton
Prartyraer
Fleterfries
Breganey
Prastaby
Stangecester
...
Ballingisle
Flasonrose
Cramiwick
Kobbyhouse
Stivervine
Saughterport
Wabieshaven
Flingerham

That seems to work just fine. Interestingly, the names are just as straightforward as the ones made from monosyllabic words. It seems that quite often, monosyllabic words have heavier consonant clusters comparatively to dissyllabic.



Finale

Let us put all these together into a new, more robust name generation scheme.


Welcome to the land of Bobbyrose, obviously a land of merry folk. The capital is located south of the Bobbyhill mountain peak and the Illham woods. Close to Bobbyrose, you will find Hellyport, and a bit further along the path towards the central trade road, the town of Laychester by the Laylake.

The central road runs from Orapool, through Rorryedo (which connects to the capital road and the Laypass), then to Illham, ending in the market town of Stewergow, where it splits off into a northern branch to the beaches of Sloonton township, and south to Croomport and Hishton on the other side of Stewer forest.

With a broader display, we could find the following names:

Mactiontown Sloronissuesea Trindthing
Oxisle Stongwold Misheskport
Trilmrose Omewich Finpool
Staricko Hairfries Daggervine
Misthaven Brellyeter Racewich
Ridermouth Loopool Eaacething
Stokusellygow Eariddlevine Goonillerium
Leartoft Oveobbythorpe Puneartey
Nallborough Prornley Ongraer
Blinovine Lungeham Loarda
Hm, I feel I have gone a bit too far with the disyllabic phrases. It would be nice to have several town names around 6-8 letters. And so the wheel turns...



DATA
To anyone interested or wanting to experiment with such an algorithm themselves, these are the word-fragments I use:

Initial consonant clusters:
"St","B","Bl","Br","Ch","Cr","D","F","Fl","G","H","J","K","L","M","N","P","Pr","R","S","Sl","T","Tr","W","","","","","","","",""

Monosyllabic words (initial removed):
"ace","ack","ain","air","aith","ake","akes","ale","all","am","an","ana","and","ar","are","ark","at","atch","ate","ath","augh","ave","ay","aya","ea","eace","ead","ean","ear","eart","eath","eb","ed","ee","el","elf","ell","en","er","esk","ess","est","et","eus","ey","ick","ide","ie","ife","ift","ig","igh","ight","ill","ilm","ime","in","ind","ine","ing","ink","ip","ird","ire","irl","irth","ish","iss","ist","ive","ix","oard","oat","ock","od","og","oint","okus","ole","olf","ome","on","one","ong","onn","onth","oo","ood","ook","oom","oon","oot","ope","or","ords","ork","orn","ose","ough","oul","ouse","outh","ove","ow","own","ox","oy","uck","ul","un","up","us","ush","ut"

Dissyllabic words (initial removed):
"ady","afe","ala","ali","ama","ami","ana","ani","any","ara","ary","asa","ata","ava","azy","eau","ego","eme","emo","ene","era","ero","eta","ial","ian","ida","ina","ino","ism","ita","ity","iva","oco","ody","olo","oma","ono","ony","ora","ory","oto","uba","una","ury","yle","ype","abel","able","agon","aker","ally","alve","ancy","ange","ante","arry","arty","ason","asta","asty","ater","aven","avid","egan","ella","ello","elly","emon","enny","enty","enus","erry","erve","etal","eter","even","ever","evil","ider","iger","iley","illy","inge","irty","isis","iver","obby","ogan","oken","olly","oman","ommy","oney","oral","oron","orry","oser","over","ower","ozen","unge","upid","abies","actor","adder","agger","aking","allen","allet","alley","allow","amber","anger","annon","arrot","arrow","arson","aster","ation","eagle","eason","eater","egion","icket","ickle","iddle","iller","illow","imple","inger","ingle","inner","inter","ipple","irate","issue","itter","ocket","ollow","onkey","oodle","opper","organ","orrow","oster","other","otion","ouble","oving","umber","under","utter","action","adness","aining","alling","anging","easure","eather","ooking","othing","urning","aughter","istress","ountain"

Suffixes:
"gow","ley","ton","raer","fries","ey","by","cester","ness","thorpe","ing","chester","toft","wold","gae","bury","eter","wich","ia","ium","on","ee","ok","a","o","e","edo","isle","rose","wick","house","vine","port","haven","ham","pool","sea","mills","ford","borough","bridge","thing","bourne","stone","mouth","ville","town","burg","field","brook","side","home","castle"

Within each category, each fragment is used with the same frequency.

Comments