Gremble conlangs for Dragon Age

So this morning I wrote a program to generate elvish names for Dragon Age, because apparently I have no idea how to prioritize. There was already a name-gen for this out there, but the results it threw were overwhelmingly unusable, and often in blatant violation of the phonological rules that had been established (what? WHAT. COME AT ME BRO, THERE IS NO ‘C’ IN THIS LANGUAGE) so I made my own. It’s pretty cool, if I do say so myself.

Step 1 was to get as many examples of existing elvish names as I could and use that set to establish the rules for:

– How many syllables they can have
– What vowels and consonants the language contains
– What consonant clusters are allowed

Since the list of names I accumulated was pretty short, I included their glossary of elvish vocab to provide more data. The results:

– Names are 2-3 syllables long (with one outlying 4)

– The vowel inventory of elvish turned out to be the standard { A, E, I, O, U }, with a negligible* number of diphthongs.

– Consonant inventory: { R, L, M, N, H, V, TH, S, SH, VH, F, T, D, B, G } (with one outlying GH, P, and J)

– Permissible consonant clusters: { VR, NDR, ND, NH, NTH, NR, RTH, RN, RL, RT, RG, LG, LD, LV, ML, SL, MSH }

(It’s possible there’s more that I missed for lack of data — so while all of the names my generator produces are permissible, not all permissible names can be produced by it.)

* I’m not sure how tightly Bioware controls the creation of new names/vocabulary for their conlangs, but when so many writers involved, it’s inevitable that someone’s going to fuck up and accidentally introduce into canon a name that violates the established rules of the language. So when I came up against outliers that didn’t fit the other patterns, I tended to chuck them out; Z got tossed out that way, because the only data point I had for that was “Zevran” — but his last name was also an outlier, and he was raised in Antiva so it makes a lot of sense in context for his name not to be properly elvish.


Step 2 was to calculate the frequency of these phenomena. Vowels, for instance, skewed heavily toward A:

A – 50%
E – 26%
I – 14%
O – 3%
U – 7%

Consonants (although I’m not going to write out the full list; I can post the source code if anyone’s interested) skewed heavily toward N (26%), L (20%), and R (13%). This is in line with what David Gaider has said is the past about the language’s avoidance of stop consonants. The most common stop is D (6%) followed by T (3%), then B and G (both 1%). Except for an outlying P, those are the only stops in the language — there is no K/hard C.

Names had a 42% chance of being two syllables, and a 58% chance of being three. They had a 65% chance of starting with a consonant and a 35% chance of starting with a vowel. I didn’t bother to tabulate the frequency of consonant clusters, just called them “pretty damn rare” and gave them a 5% chance of occurring in the middle of a word. And lastly, words had an 80% chance of ending in a consonant, and a 20% chance of ending in a vowel.


Step 3 was to account for restrictions on the positions in which a phoneme could occur.

When it came to word-final consonants, names only allowed L, S, or N. Non-name words could also end with R, TH, or M. Final syllables never contained O or U.


Step 4 was to put it down in code, which went remarkably quickly with all the other groundwork already laid and — amazingly — worked perfectly on the first try. It is here, in my trademarked minimalist style (coding capitalization would have been more trouble than it was worth), and I’m pleased to say that it throws about 50% usable results. I could spend a couple more hours trying to up that percentage… or I could hit reload twice as often, and get back to my damn thesis. >_<;; Obviously there’s no way to write a generator that bats a thousand, even following all the rules, because the way we respond to names is deeply rooted in human subjectivity, and that’s almost impossible to teach a computer. The computer can’t tell that “lalalal” sounds like baby talk, that “hanes” is a brand of underwear, or that “amal” already has cultural connotations. Likewise, my generator is guaranteed to throw “anal” about one time in 200, and is capable of throwing “vulva” as well — and you can try to code exceptions to catch those, but the more efficient use of time is to laugh, shrug, and hit reload.

3 thoughts on “Gremble conlangs for Dragon Age

  1. I don’t suppose you know how to program databases? Or, well… how to hook a database up to PHP? Because I’d really like to overhaul the gay booklist such that every book is an entry in a database, it would tidy up the code a lot, but I don’t know how to do that, and the only person I know who would know how to do that is the ex StJ, and we’re not on speaking terms anymore. >_> And I regret nothing except that I now have no one to teach me web programming.

  2. I think the usual thing is to hook PHP up to a SQL database such as the free and popular MySQL, but I haven’t done it before. You could also use a NoSQL database such as MongoDB, or perhaps store the data in a text file, a comma separated value (CSV) file, or an XML file. Here’s a fast quick start guide and the official tutorial for MySQL:

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>