You are on page 1of 7

On Inventing a Romulan Language for the ST Novels My Enemy,

My Ally and The Romulan Way

It should probably be said right at the start that I am not really to be considered any
kind of expert on Romulan matters. The final word in such cases always lies with
the people who are writing Trek for TV and movies: Trek novels are considered
"noncanonical", not really part of the Trek canon. The real experts on Romulan life
remain Gene Roddenberry (God rest him) and D.C. Fontana, who did the initial
work on the race in the original Trek series, and the present writers of Deep Space
Nine and the movies.

Now, as to how the novel got started, by way of background: Originally -- this was
a little while after the first edition of the Klingon Dictionary had come out -- I
asked my editor at Pocket (Dave Stern, it was then) whether I might do a Romulan
dictionary. Dave told me, somewhat to my disappointment, that the dictionaries
weren't selling very well at that point (this was before the present resurgence of
interest in the Klingon language, which [hilariously] is now spoken by more people
on Earth than Esperanto). Instead, though, Dave said, would I like to do a Romulan
novel?...

The idea was interesting enough. I liked the Romulans, always had, and the thought
of doing a book about their culture attracted me. Could I just make up the culture,
then? I asked Pocket. Yes, they said, I could.

So I got on with it.

Language came up for consideration fairly early, because I like languages. Though
I'm fluent only in English, I read Latin well, and German fairly well, and Romansch
slightly, and classical Greek haltingly, and I have a nodding acquaintance with
about twelve other languages (this means I know in a general way how their
grammars and syntaxes work, and how their sentences are put together. It also
means I know how to say please and thank you and good morning and good night,
how to ask where the ladies' room is, how to ask for another drink, the same as last
time, and how to point at things in stores and ask for one of those, please: that kind
of thing). It seemed impossible to write much about the culture without doing at
least a little work on the language.

Now, I had just finished working out a language for an alien species in one of my
fantasy novels (the Dracon language, in The Door Into Shadow), and was pretty
much "linguistically pooped" when it was time to start work on the Romulans. But
at the same time, something had to be done for them...so I sighed and got on with it.

The first thing to do was to decide what the language should sound like. It seemed
inevitable that it should sound slightly Latinate, since there had always been a
slightly Roman cast to the Romulans we saw in the original series. At the same
time, a language's evolution also has to reflect its people's history: and harking back
to the Romulan Commander's reference to the Vulcans as "our ancient brothers", it
seemed likely to me that Romulan would have at least some grammatical likenesses
to Vulcan.
Well, we knew, and know, very little (in the canonical sense) about Vulcan
grammar. But what about the sound of the language? If the Romulans were (as I
increasingly began to suspect during the writing of Enemy/Ally) an offshoot of the
Vulcan culture who might equally have been thrown out, or might have left it on
purpose, would they necessarily sound that much like the Vulcans any more?
Mightn't it be possible that they had extensively retooled their own language to
emphasize the difference between them and their parent stock? (The history of the
Pravic language, in Ursula K. LeGuin's The Dispossessed, probably gave me this
idea.) And if there's anything we know about the Vulcan language, it's its harshness:
full of fricatives and other sharp sounds.

So there at least was a hint. I wanted the Latinate sound, all right, but also intended
to suggest that the Romulans / Rihannsu-to-be had purposely gone for a more
melodious-sounding language, as a reaction against the hard sounds of Vulcan. So I
thought that the language should be strong on liquid combinations and soft
diphthongs. Welsh suggested itself to me as an example, right away: so did some of
the vocalic ingredients in Greek. I started coining some words to get the feel of it,
and produced a few pages' worth.

At this point, I ran across one of my problems with inventing languages. Not
grammar -- exotic grammars are easy to build. And if you can't build, you can
always steal. Real languages are often much crazier and less logical than anything
one would normally invent: look at Irish, or Maltese, for good examples of this.
(Indeed, Mark Okrand doesn't appear to have hesitated in this regard: Klingon
orthography looks a whole lot, to me, like some of the orthographies used to write
various Native American dialects in the early part of this century.) My problem was
that, when coining "alien" words, I tend to get in a rut: they start sounding alike. I
don't know if other writers have this problem. I just knew I was going to have to
find a way around it.

And, lazy naughty creature that I am, I found it. One of the other languages I have a
nodding acquaintance with is BASIC. I am not a great programmer -- I have too
many other calls on my time to become really elegant at it -- and Heaven knows that
BASIC has been bypassed by other languages far more sophisticated. However, it
suited my needs. Having decided what kinds of sounds I wanted to appear in
Romulan, and how frequently they might appear, and having decided what
combinations looked ugly and should be "impossible", I then spent a week or so
writing a quick-and-dirty BASIC program which would take numerous consonantal
and vocalic "building blocks" I had chosen, and combine them to create words that
would avoid my own "ruts" or repetitive tendencies in word-coining. The program
would produce several thousand words of Rihannsu in a given run, in a format that
looked kind of like blank verse.

Once it was running, I must have gone through about half a ream of paper this way,
generating words, and then going through the output and choosing the words I best
liked. Ael's name came up in one such run. To that word, and others, I assigned
meanings as I wrote the novel. And that was all the work I did on the language,
except (when Peter and I sat down [during our honeymoon!] to write The Romulan
Way) to collect all the words together into a glossary, which appears at RomWay's
end.
Nowadays it seems unusual for a week to go by in which I don't get a request for
Romulan language information. I don't have any more, alas, except what you see
above, and what's in the books. But I have no problems with passing my tools along
to those who feel like using them.

So, for those who might be interested, I hereby bequeath you enthusiasts (check the
links below) two versions of the Romulan language generator. Its first version was
written in the form of BASIC that ran on my first computer, an Osborne. (This is
the faithful machine that appears with me in the picture in The Faces of Science
Fiction: those with a good magnifying glass might just be able to make out, on the
tiny screen, that it's Enemy/Ally which was being worked on at the time.) Later the
program was rewritten slightly, when I moved to a PC, so that it would run in GW-
Basic. Having just tested it, I find that it runs happily enough in Microsoft QBASIC
as well.

The only thing I'll ask regarding the program is that, should anyone produce a better
version of it, that they please send me a copy, with the code, for my files.

Note that these files, being framed in HTML format, will need to have the <PRE>
and </PRE > tags, and the material before and after them, edited out. Once that's
done, they should run all right. You all have my permission to give copies of this
program to whoever you like. Note also that it works well for other invented
languages: just edit the data statements to contain different combinations of sounds.
(While preparing to write The Door Into Sunset, I plugged the Dracon language
"building blocks" into it and saved myself some time.)

How to run them: Load the file into your BASIC program. It will ask you for a
carriage return: this provides a value to the random number generator. It will then
ask you for a number seed. Give it a number within the specified range, and hit the
carriage return again. A screenful of Romulan will spill out. (In the print version,
especially if you're using a laser printer, you may have to give it several seeds one
after another before a page will print.) Continue until you've got enough output to
make you happy. Control-C should break out of the program (though if I remember
right, the program will break [down...] itself after a while, either because of a
divide-by error, or because of some other more picturesque error committed by the
programmer). I leave it to some other, more skilled programmer, to tinker one or
another version of the program into one that produces both screen and print output.
I've got my hands full with another TNG novel at the moment, and am wrestling
with other linguistic problems (such as working out what French swearwords are
hot enough to adequately reflect Picard's feelings without causing the publisher to
have a coronary).

At any rate, I hope you have fun with the program.

-- Diane Duane
January 6, 1996

The Romulan language program: this version produces screen output only
The Romulan language program: this version produces print output only
Addendum: January 28, 1996
Since I posted the material above, other people have begun tinkering with the
program and spreading it around in other nice ways. For those who might be
interested, I include here a link to the online, cgi-bin version of the program written
by Joel at polowin@hyper.com. Thanks, Joel!

Here, too, is a "C" version of the program, courtesy of Curt Snyder of "Hot's
Delight" Hot Sauces and Spicy Foods, at hotsdesr@deltanet.com. My thanks to yet
another stalwart Chile-Head!

For the benefit of those of you who're doing other kinds of tinkering, I add this note
from Curt's note to me: "FYI, I found an error in your romulan basic code (small
one), lines 4310 through 4370 reference variable ARGH23% when they should be
using ARGH22%." And he goes on to say:

"The following is the C port I did. Feel free to post on your page. You may
copyright it with YOUR name, as the original code was yours."

/* Romulan word generator. */


/* Created by Diane Duane, */
/* ported to C by Curt Snyder */
/****************************************/
#include stdlib
#include stdio
#include time

/* initialize 'r' values */


char r[10][3] = {"H'","Ae","D'","W","U","N'","R'","O","V","Ll"};

/* initialize vowels */
char v[140][5] = {
"ae","A","i'","a"," Eh","e","T'","I","u'","s",
" ","ae","ea","ei","e","a","iu","o","ie","i",
"eo","i ","ae","ie","ai"," ","au","a","ei","ah",
"ao","a ","aeu","u"," ","ae","oa","i"," ","s",
"i",", ","ea","ia"," E","ei","ta'","ra-","ei"," ",
" ","'h","ae","oi","iy","u","ei","eh","s'h","i",
"e'","ia"," ","ie","iy","ih","ae","io","ai","ui",
"ae","y"," ","ei","ie","a'e","u","iu","ou","aa",
"a","i","ih","i'h","e ","ea","aa","ae","u","aeih",
"ae","ei"," -- ","iu","oa","ei","o","oi","ue"," ",
"'ss","l'","k'h","hw","rr","r","rr'","mm","t'd","'hh",
"qh","vh","fv","nh","d","e","hh","k","a","t",
"dl","dl","rh","nnh","rai","th","dh-","yrh","aith","qh",
"m","t","r","q","s","f","v","h","z","y"};

/* initialize consonants */
char c[140][5]={
"s","ll","R","m","k","t","h","r","rr","...",
" ","v","mn","kh","d","hv","fv"," ","r","t",
"-","th","k","lh","d","bh"," ","d'","dr","ht",
" ","ll","lh","dt'","ht","th","kh","l'","nn","n",
" ","'rh","rh","jh","kj","lh","nv","tr","hw","fv",
"nn","hw","d","nv","! ","mn","dh","rh","ll'","sw",
"lmn","l","mn","-","h'n","t","ss","hv","hs","hr",
"hj"," ","hf","wh","rrh","bh","j","y"," ","; ",
"llu","dh","kh","rh"," ",", ","; ","wh"," ","mn",
"e","ii","a","ee","eu","i","o","iu","uu"," ",
"uy","ae","e"," i","'i","'u","'u","iae","eu","a",
"ae","hl","iu","-a","ss","-t","r-","nn"," 'nh","ai",
"iu","iu","hu","ha","la","se","mo","tha","kha","dha",
"a"," i","t","e","e","ae","ai","ia","ia","ou"};

/* setup for randomization procedures */


int seed;
int rand6,rand2;

/* print an 'r' field */


void print_rfield()
{
int ivalue;

ivalue = rand() % 10;


printf ("%s",r[ivalue] );

/* print a vowel. Offset is the current index number */


void print_vowel( offset )
int offset;
{
int ivalue;

ivalue = rand() % 10 + (offset * 10);


printf ("%s",v[ivalue] );
if ( offset == 5 )
rand6 = ivalue; /* save the random value, use it later */

/* additional vowel adjustment */


void more_adjustment()
{
int ivalue;

ivalue = rand () % 10 + 130;


printf ("%s",v[ivalue]);
}

/* print out a consonant. Offset is the current index */


void print_consonant( offset )
int offset;
{
int ivalue;

ivalue = rand() % 10 + (offset * 10 );


printf ("%s",c[ivalue] );
if ( offset == 1 )
rand2 = ivalue; /* save the random value, use it later */

/* end of word (maybe) */


void word_break()
{
int ivalue;
ivalue = rand() % 10;
if (ivalue < 4) printf (" ");
}

/* adjustment when finished */


void terminal_adjustment()
{
switch ( rand2 ) /* use the saved random value */
{
case 0 :
case 1 :
case 2 :
case 3 :
case 4 : printf (" ");
break;
case 5 : printf ("?");
break;
case 6 : printf ("....");
break;
case 7 : printf (", ");
break;
case 8 : printf (" ");
break;
}
}

/* generate text */
void gen_text()
{
int t,g,i = 0;

for ( t = 1; t<20; t++)


{
if ( g != 1 ) /* do this on the first pass */
{
g = 1;
print_rfield();
} /* g != 1 */
for ( i = 0; i < 11; i++ ) /* print out 11 vowel/consonant/word breaks*/
{
print_vowel ( i );
if ( i == 2 )
word_break();
print_consonant ( i );
if ( ( i == 7 ) && ( rand6 >= 6 ))
printf (" ");
}
more_adjustment();
terminal_adjustment();
printf ("\n"); /* line feed */
} /* t loop */
printf ("\n"); /* line feed */
} /* procedure gen_text */

/* initialize the random number generator, use session time as a


pseudo-random seed. If your compiler has a better random number
generator, USE IT! */
void initialize_random()
{
struct tbuffer buffer;
times ( &buffer );
seed = buffer.proc_user_time;
srand ( seed );
}

main()
{
initialize_random();
gen_text(); /* generate text */
}

Back to the Homeward page


To the main Owl Springs page

You might also like