What is the Everchanging Book of Names?

The Everchanging Book of Names (a.k.a. EBoN) is a shareware random name generator for Windows 95. Its highly sophisticated algorithm ensures that most of the names generated by it are readily usable.

The program was originally meant to produce names for role-playing characters, but it can be and has been used in various other situations where random names are needed.


Program Components

When installed, The Everchanging Book of Names 2.1 includes the following files and documents:

ebon.exe 	EBoN Executable
ebon.hlp 	EBoN Help (this file)
ebon.cnt 	Contents for the Help file
!ebnlog.txt 	Name generation log file
readme.txt 	Installation instructions in plain text format
sample.txt 	Sample Chapter
stored.txt 	Name storage file
template.txt 	Template for custom Chapters

The following Chapter files are also a part of the package:

adunaic.ebn 	Númenórean names
arthur.ebn 	Arthurian names
blkspch.ebn 	Orcish/demonic names
drow.ebn 	Dark Elven names
finnish.ebn 	Modern Finnish names
khuzdul.ebn 	Dwarvish names
latin.ebn 	Latin names
midnight.ebn 	Names from the Midnight Trilogy
quenya.ebn 	High Elven names
sindarin.ebn 	Grey Elven names
valarin.ebn 	Angelic names
viking.ebn 	Viking names
welsh.ebn 	Welsh names

The latest official version of The Everchanging Book of Names is always available at the URL:

http://www.utu.fi/~sapyorre/ebon


What's New in Version 2.1

Changes in version 2.1 (released 04-May-1998):

Some minor bugs were fixed.

Changes in version 2.0 (released 28-Feb-1998):

The code was completely rewritten.
The algorithm was improved.
New options: prefixes, suffixes & initial letters.
Validation level 3 was dropped as obsolete.
Variable page size for storing names was implemented.
Support for script-like custom Chapters was added.
Name history is now browsable.
The user interface was rearranged.
The manual was rewritten in Windows Help format.
Version 1.0 Chapters are no longer supported.

Special thanks to Jussi "the Walking Manual" Pyörre for the scramble/descramble algorithm; to Marc Kawecki and Thane Williams for some improvement ideas; and to Ville Kulmala for beta-testing.

Version 1.0 was released in 19-Oct-1997.


Disclaimer / Copyright Notice
Copyright Notice

The Everchanging Book of Names 2.1 is copyright © 1997-1998 Sami Pyörre. All rights reserved.

The copyrights for all .EBN Chapter files in the package are owned by their authors.

Disclaimer

This program is provided 'as is'. The author cannot be held responsible for any negative consequences caused by the use of this program.

This program is a RANDOM name generator. Thus, any offensive words generated by it are unintentional.

License

This program is shareware. It can be freely copied and distributed as long as no charge is made for its use and only a nominal charge is made for distribution. None of the files in the package may be altered in any way. Users are, however, encouraged to register the program.

Users are free to make as many custom Chapter files as they like. Such Chapters are, however, always initially 'unregistered' - and thus some of EBoN's features will be disabled until the Chapters are registered. See Registering Chapters for further information.

The email address of the author is sapyorre@utu.fi.


Registration

EBoN was not written overnight. A lot of effort was put into it before it reached its current state. Thus, any feedback will be more than gladly received. The official EBoN page at http://www.utu.fi/~sapyorre/ebon is the place to give your comments.

Another way to show your appreciation is by registering the program. In addition to the overwhelming saintly feeling, you will be granted the power to use your custom Chapters with full functionality. You will also receive a package of some extra Chapters that will at least include Anglo-Saxon, Assyrian, Celtic, Germanic, Hobbit, Medical and Rohirric Chapters. The number of extra Chapters will probably increase in the future. Registering only costs $10 or 40 FIM. See Registering Chapters  for more info.


The User Interface

The Everchanging Book of Names is very easy to use. Names can be generated, stored and browsed just by clicking a few buttons. The most used buttons provide tips on their usage when the mouse pointer is moved onto them. They are more thoroughly described elsewhere in this file.
	Launches this Help file.  (Help)
	Expands the window to show the Options - controls that can be used to affect program behaviour. (Options)


Generating Names

The generation algorithm generates names according to rules given in Chapters. Using different Chapters causes names with a different styles to be generated. A brief description of the most commonly accessed controls is given below.
Chapter	Selects a Chapter. Note that no Chapter is open when the program is started.
	Generates a new random name.  (Generate Next)
	Generates a page of names and stores them.. (Store NN)

The generated names can be later browsed or stored in a file.


Browsing Name History

Up to 100 previously generated names are memorized by the program. They can be browsed by using the Browse History slide bar.

Current position in history is shown above the browse bar. The history is cleared whenever a new Chapter is opened.


Storing Names

Generated names can be stored in a special storage file named stored.txt that is located in the EBoN folder. This is done by using the controls described below.
	Stores the current name into the storage file. (Store Name)
	Generates a page of names and writes them directly into the storage file. The page size is by default 50, but can be altered by changing Page Size in the Options. (Store NN)
	Clears the storage file. The file is not actually flushed right away; the names that are stored in it will remain available until the next time a name is stored. (Clear Store)
	Opens the storage file in Notepad. (View Store)
Names may also be stored with a trailing line. This feature is helpful when the name list is printed and used as a reference by the game master in a role-playing session. The feature can be toggled by checking Trailing Line in the Options.


Options: Customizing Generation
Customizing Generation

The Options controls are available only after the Options button has been clicked. They let the user vary the way the program generates and stores names. By default, these controls are automatically set whenever a new Chapter is selected. Thus, the user may not ever need to access them.

Names are generated in two phases:

1. The actual generation. Names are pieced together from elements, and the criteria by which they are selected affects the outcome.

2. Validation. After a name has been generated, it's quality is checked by applying various criteria. Names that do not pass this phase are rejected. The purpose of this phase is to block off names that most people would find unsatisfactory anyway.

These phases may be affected by setting Options to a different configuration. A brief description of the controls is given below.

Generation.This group contains controls that affect phase 1.

Initial Letter	Forces the selection of the initial letter of a name.
Lvl	Sets the level of complexity of the criteria used when selecting elements that can be fit together.
Structural	Causes names to be generated according to structures collected from the original names. This setting has probably the greatest impact upon the quality of the generated names.
Statistical	Causes elements to be selected according to the frequency of their appearance in the original names.
Prefixes	Forces the generation of names that contain only such prefixes that appeared in the original names.
Suffixes	See above.
Validation.This group contains controls that affect phase 2.

Lvl	Sets the level of complexity of the criteria used when validating names.
Store.Controls that affect the way the names are stored.

Page Size	Sets the number of names that are generated and stored when the Store NN button is clicked. The value may be any number between 2 and 1000.
Trailing Line	Causes a trailing line to be appended to stored names.
Other.

Automatic Options	Causes the Options to be automatically set to a predefined configuration when a new Chapter is selected.


Troubleshooting

Although ease of use was one of the top priorities when The Everchanging Book of Names was designed, it seems that nothing can totally prevent problems from occuring. Before flaming the author, read the questions and answers below.

Q. Why doesn't the program show my Chapter in the Chapter list?

A. The problem may be caused by three things: 1) You are trying to use v1.0 Chapters. They are not compatible with v2.0. 2) There is a typing error in the TITLE tag of the Chapter in question. Check spelling, quotes and the terminating semicolon. 3) The file extension of your Chapter is incorrect - i.e. other than .EBN. If you created the file with Notepad or renamed it with Windows Explorer, its actual name may not be mychapt.ebn although it may seem so. In an Explorer window, select View / Options and click on the View tab. If the "Hide MS-DOS file extensions..." checkbox is checked, uncheck it and click OK. Now Windows will be showing file names correctly and you can fix the problem.

Q. Why does the program only generate a few names and then closes the Chapter?

A. The Chapter you are using isn't registered. Refer to Registering Chapters for further information.

Q. What's the use of those .QCH files appearing in the EBoN folder?

A. QCH stands for Quick Chapter. These files are automatically generated by the program when a Chapter containing more than 100 names is opened for the first time; and, like the name implies, they considerably speed up subsequent openings. If the corresponding .EBN file is modified, the .QCH file will also be updated the next time the Chapter is opened.

Q. The program keeps crashing. Why?

A. I suppose you didn't try to edit those scrambled Chapters yourself? If not, I honestly don't have a clue. A complete description of the situation causing the problem might be useful, especially when it's mailed to me at sapyorre@utu.fi.


Understanding the Algorithm

A basic understanding of the name generation algorithm is necessary when custom Chapters are being created.

EBoN must preprocess the original names that are used as seed when generating new ones before they can be used by the generation algorithm. This is done when a Chapter is opened. The process can be roughly divided into four steps. In the following, THRANDUIL is used as an example of a name. Note that all names are converted to uppercase by the program.

1. Marking special letters.

As an example, special letters may include soft consonants such as TH. Soft consonants are replaced with lower case letters. Thus, after this step our example would be spelt as tRANDUIL. There is a great number of other possible special letters.

2. Splitting the names.

Original names are split into elements. There are two types of these: vowelic and consonantal, both containing letters of that category only. Our example would be split as tR-A-ND-UI-L.

3. Gathering generation data.

a) Three levels of information for fitting the elements together are stored. Vowels are always fit as whole elements but consonants only as single letters. In the above example, the program would know after this phase that R-A, A-N, D-UI and UI-L are allowed level 1 combinations. Furthermore, R-*-N and D-*-L would be noted as possible level 2 combinations and A-*-UI as a possible level 3 combination. Thus, level 2 only concerns consonants and level 3 only vowels.

b) Prefixes and suffixes are stored. A prefix is a two-element combination that begins a name; in our example it is tR-A. Similarly, the suffix is UI-L.

c) Name structures are stored. A structure specifies allowed element length combinations. The above example has the structure 21221.

d) Statistical information about element and structure frequencies is stored.

4. Gathering validation data.

Validation data is used to eliminate generated names that would probably be rejected by the user. Maximum relative frequencies and minimum repetition distances for letters are stored.

The elements and the way they are put together are peculiar to a language. The data collected in the above steps is used to make sure that generated names have the feel of the original language. Not all of the data needs to be used when generating names - it is actually the amount of data used that is being varied when tampering with the Options.

Once a name is successfully generated and validated it is postprocessed. In this phase it is punctuated and its case is corrected so that only the first letter and those after a '-' are in uppercase.


Writing Chapters: A Step-by-Step Procedure

Writing Chapters isn't hard - but writing good Chapters can be. Below are given the basic steps to go through. The workings of the algorithm need to be understood, so be sure to read Understanding the Algoritm first. A peek at the sample Chapter may prove helpful - you may even want to rename it as sample.ebn, open it with EBoN and play with the Log File.

If, after reading through this page, you still feel like you didn't understand a thing, try reading through the example on Chapter creation.

1. Make a list of up to 1000 names. A good list has a large number of carefully selected names. Don't mix languages as the results are usually not good.

2. Open the file template.txt with Notepad. The file has several lines in the form TAG = ""; The quotes are there to hold data between them, and TAG tells where to use it.

3. Edit the file, inserting your Chapter identification data. The TITLE tag holds the name of the Chapter as it is shown in the Chapter drop-down menu. LINE1 is usually used to hold the source of names used, and LINE2 to hold your name. DATE is not actually used by EBoN 2.0, but it should be filled anyway so that different versions of the Chapter can be identified. Example:

TITLE = "Adûnaic (Númenórean)";
LINE1 = "From the works of J.R.R. Tolkien";
LINE2 = "Collected by Sami Pyörre";
DATE  = "23-Nov-1997";

4. Write the names after the NAMES tag. Each name should be contained between quotes and separated with a comma. The last name must be followed by a semicolon. Example:

NAMES = "Abrazaaan","Aduuunakhooor","Agaaan",
"Inziladuuun","Inzilbeeeth";

5. Fill in special consonants after the SPCCON tag. Special consonants are consonant groups that are treated as a single letter when fitting elements together. As an example, the name GLORFINDEL would usually contain the following allowed level 1 fitting information: L-O, O-R, F-I &c. If GL is specified to be a special consonant, however, fitting is done as follows: GL-O, O-R, F-I &c. Special consonants are written in upper case between braces < > and separated with commas. If 'soft' is included in the SPCCON tag, all consonant combinations such as BH, CH, DH &c. are treated as a single letter. Do note that soft consonants are marked with lower case letters first, so in order to mark the consonant group LPH in the name ALPHROS as a special consonant you must specify <Lp>. In addition to soft consonants, a maximum of 10 special consonants are allowed. Example:

SPCCON = "soft,<NZ>";

6. Fill in special vowels after the SPCVOW tag. As vowels are already fit as whole elements by default, there is only one possible special vowel: 'multi'. When it is used, letter combinations such as ORO (where the two vowels are the same and the middle letter is any consonant) are treated as a special 'multi-spanning' vowelic element. Thus, the name BOROMIR would be split as B-ORO-M-I-R instead of B-O-R-O-M-I-R. Example:

SPCVOW = "multi";

7. Fill in the generation options after the GENOPT tag. These are many, and they affect the way the names are preprocessed, generated and postprocessed. The options are described below, and they must be separated with a comma.
y:xxx	Causes the letter Y to be treated as one of the following: vowelic, consonantal or semivowelic, where xxx is 'vow', 'con' or 'semi' respectively. Default: y:vow.
u:xxx	Causes the letter U to be treated as either vowelic or semivowelic, where xxx is 'vow' or 'semi' respectively. When 'semi' is specified, U will be treated as a consonant when it occurs after a Q as in "aqua". Default: u:vow.
shuffle	Usually, elements are stored so that only certain elements are allowed in certain positions. When shuffle is used, however, all elements with the exceptions of the first and the last one are chosen from a common pool.
statgen	Automatically checks the Statistical checkbox in the Options when the Chapter is selected.
structgen	Automatically checks the Structural checkbox in the Options when the Chapter is selected.
prefix	Automatically checks the Prefix checkbox in the Options when the Chapter is selected.
suffix	Automatically checks the Suffix checkbox in the Options when the Chapter is selected.
fit:n	Automatically sets the Generation Lvl (i.e. fitting level) in the Options to n when the Chapter is selected. Default: fit:0.
val:n	Automatically sets the Validation Lvl in the Options to n when the Chapter is selected. Default: val:0.
punct:n	After a name is generated, causes some of its vowels to be 'level n' punctuated. Level 1 marks long and superlong vowels (aa > á, eee > ê). Level 2 additionally marks certain vowels with diaresis, signifying that they should be pronounced separately (Feanor > Fëanor). This is done as in the Tolkienian Quenya language. Default: punct:0.
Example:

GENOPT = "structgen,statgen,punct:1,y:con,fit:2,val:2";

8. Test your Chapter for errors. Save it in the EBoN directory as mychapt.ebn where mychapt is the name that you want to give your Chapter. The name should not be over 8 characters long. Then run EBoN and select your Chapter. If an error message is thrown, see below for hints on fixing the situation:
Invalid or missing XXX tag	Check tag XXX. The tag title is spelt wrong, either one of the quotes is missing, or the line is lacking the ending semicolon.
Invalid character in name #NN	Name #NN contains non-standard characters. The allowed characters are the following: BCDFGHJKLMNPQRSTVWXZÇÐÑÞŠ-  AEIOUYÄËÏÖÜŸÁÉÍÓÚÝÂÊÎÔÛÀÈÌÒÙÃÕÅÆØŒ'  A missing quote or comma in the name list may also be the cause of this error.
Invalid character in special consonant #NN	Special consonant #NN contains non-consonantal characters. The allowed characters are the following: BCDFGHJKLMNPQRSTVWXZ bcdfgjklmnpqrstvwxzÇÐÑÞŠ-
Too few elements in name #NN	Name #NN contains only vowels or only consonants, but not both. Such names are not allowed.
Too many different elements	A Chapter may have at most 256 of both consonantal and vowelic elements.
Too many names	No more than 1000 names are allowed for a Chapter. Larger lists aren't likely to generate any better results.
Too many special consonants	A maximum of 10 special consonants is allowed.
Corrupted data where TITLE, LINE1 and LINE2 lines should be shown is caused by missing semicolons.

Note that your new Chapter is unregistered. This means that only five names may be generated from it before it is automatically closed and needs to be reopened. Read Registering Chapters to learn how to rid yourself of this annoyance.

9. Refine the Chapter.


Refining Chapters

Once your custom Chapter is working it must be thoroughly tested. Most Chapters need some fine tuning before yielding the best possible results. Below are given a few hints on refining your Chapter:

1. Look for unwanted names. If some undesired letter combination occurs, see whether it appears in several locations in your Chapter's name list. A single annoying name may be removed from the list, thus eliminating the combination. Another, more elaborate way of handling such situations is by declaring special consonants in the SPCCON tag.

2. Alter the generation options in the GENOPT tag. When beginning refining, it is often best to include the following keywords in the GENOPT tag: fit:3, val:2, structgen, statgen, prefix and suffix. Try generating a few names. If your name list is short or if the names in it are fairly similar, lower generation level (fit:n) might do just fine. Omitting the structgen, prefix or suffix keywords or using shuffle will also widen the range of possible names. Omitting the statgen keyword causes elements that would otherwise be extremely rare to appear more often.

3. Keep checking the Log File; it will give you further hints on choosing the right options. For example, if the !SUF/NOOPT message occurs in the file very often, you might try generating names without using Suffixes. Or, if only a few elements are available for a position or if !NOOPT occurs fairly often, lower the generation level.


Log File

The Log File !ebn_log.txt provides information on how a name was generated. Only names from unregistered Chapters are logged.
	Opens the Log File with Notepad. This button is only available when an unregistered Chapter is being used. (View Log)

After generating a name, the log might look as follows:

14: 111133111

BA BE GI HU kI MA MI MU NA NI pA SA TA ZA ZE ZI : GI
N R M : R
A U I : I
!NOOPT

BA BE GI HU kI MA MI MU NA NI pA SA TA ZA ZE ZI : MI
N R G L T : N
A E U I ' : I
R-G R-p R-S R-Z L-Z L-T : R-Z
AAA OOO III : III
R : R
UN IK UK : UN

-> MINIR-ZIIIRUN -> Minir-Zîrun

The first line of the log file holds the used structure. The first number is a length code used by the algorithm and the second one specifies the structure. If Structural is not checked no structure is shown.

The next lines contain lists of possible elements for a position. They are separated by spaces and followed by the selected element. In the above example, both Prefixes and Suffixes were used when generating the name, causing the first two as well as the last two elements to be chosen as a package.

The last line holds the generated name in the format handled by the program, followed by the same name converted to a more readable form.

When generation does not succeed at once, as happened in the above example, a failure message is given. Possible messages are:
!NOOPT	No fittable elements available for this position.
!PRE/NOOPT	No possible prefixes for this structure. This failure is possible only when the Initial Letter is chosen to be any other than *.
!SUF/NOOPT	No fittable suffixes available.
!DIST/#	The distance between occurences of letter # was too short.
!FREQ/#	The relative frequency of letter # appearing in a name was too high.
!REP	The name had a repeating cycle such as ROND in RONDIROND.
The log file is located in the EBoN folder.


Registering Chapters

A custom Chapter will always be originally unregistered. It can be used to generate a maximum of 5 names before it closes itself and needs to be reopened. Storing  capabilities will also be maimed.

Once a Chapter is registered all of the features of EBoN become available. A registered Chapter is scrambled so that it can't be modified.

To get your Chapter registered, send USD 10, FIM 40 or GBP 5 to the address below. No checks or money orders, please, just plain cash. In return, you will receive via email a command line utility that can be used to register (or unregister) an unlimited number of Chapters. Along with it you'll also get a package of some extra Chapters.

Sami Pyörre
Kellonsoittajankatu 3-7 E 115
20500 Turku
Finland

The author of EBoN will gratefully receive any Chapters mailed to sapyorre@utu.fi. A contributed Chapter will be put available on the EBoN page for free download. The copyright for the Chapter will remain owned by its author. Any contributions should be finished Chapters, not evolution versions.


Appendix: Creating the Sindarin Chapter

Creating a new Chapter for the first time is definitely not easy. Therefore, a detailed description of the creation of the first EBoN Chapter ever written, Sindarin, is given here as an example. The final version of the Chapter is given at the end of the page.

First, a list of names was needed. Once collected, the names were sorted to alphabetical order so that any duplicates could be easily noticed and eliminated.

Then it was time to start writing the actual Chapter. The Chapter template file template.txt has all the required tags in it, so the first thing to do was to open it in a text editor and copy the list of names there, after the NAMES tag. Each of the names was then enclosed in quotes and separated with commas.

Next, the generation options needed to be set. It is always a good idea to include structgen and statgen in the GENOPT tag unless the number of names is very small. The same applies to prefix and suffix. Sindarin names mostly consist of single-syllable words that are pieced together to form names. Thus, generation level 2 (fit:2) would do fine. Level 3 would have been appropriate for a language with longer base words. Only Chapters with a small number of names should use level 1 or even level 0. Validation level was set to 2 (val:2) - it could always be lowered later if needed. Punctuation level 1 (punct:1) was fine for Sindarin as it has several long and superlong vowels. To make use of it the punctuated vowels in the name list were replaced with normal vowels; i.e. Glóredhel became Glooredhel and Belegûr became Beleguuur. This allows EBoN to make greater use of structural generation and should therefore be applied whenever possible.

Sindarin, like many other languages, has several soft consonants such as CH and TH in the name Carcharoth. Therefore, the soft keyword was added to the SPCCON tag. No other special consonants were introduced yet. The multi keyword was appropriate for the SPCVOW tag, because Sindarin has several names that have a "multi-spanning" vowelic element such as ERE in Beregond or EDHE in AREDHEL. Note that the DH in Aredhel is treated as a single letter because soft consonants are used. Only very few languages can make real use of multi-spanners, so the keyword can usually be omitted.

After filling in the necessary data in TITLE, LINE1, LINE2 and DATE tags the Chapter was ready to be tested. The file was saved as TEST.EBN and EBoN was started.

A few names were generated, and the results seemed quite good. Occasionally, however, a few clearly unwanted names with a clear pattern would show up. An example of such is GLALWEN. The appearance of L as the third element in that name after GL as the first one was not hoped for. That left two options for elimination of such names. The name Lalaith - the only name to have the L-L combination - could be removed. Lalaith is a nice name, however, so another path was taken: GL was declared as a special consonant by including <GL> in the SPCCON tag. Now EBoN would replace each occurence of GL with a zero (0) and treat it as a single special letter. There is no name with the GL-L combination in the name list, so the annoyance was eliminated. In a similar manner, letter combinations GW, BR and Lp were declared as special consonants. EBoN would now treat them as special letters 1, 2 and 3, respectively. Note that the p in Lp was written in lowercase to signify that it is actually a soft consonant (PH). Declaring LPH wouldn't have had the desired effect, because soft consonants are marked by EBoN with lower case letters before attending to other special consonants.

If the result had not been as good, lower generation levels, omitting prefix and suffix and introducing the shuffle keyword in GENOPT might have been helpful. As this was not the case, the Chapter was completed by registering it.

Before registering and thereby scrambling it the Chapter looked as follows:

// The Everchanging Book of Names
// Copyright (c) 1997-1998 Sami Pyörre.
// All rights reserved.

TITLE = "Sindarin (Grey Elven)";
LINE1 = "From the works of J.R.R. Tolkien";
LINE2 = "Collected by Sami Pyörre";
DATE  = "04-Oct-1997";

SPCCON = "soft,<GL>,<GW>,<BR>,<Lp>";
SPCVOW = "multi";

GENOPT = "structgen, statgen, punct:2, fit:2, val:2, prefix, suffix";

NAMES =
"Adanedhel", "Adanel", "Aeglos", "Aegnor", "Aerandir", "Agarwaen", "Aglahad", "Aglareb", "Algund", "Alphros", "Amdiir", "Amlaith", "Amras", "Amrod", "Amroth", "Andrast",

... part of the name list omitted ...

"Thalion", "Thangail", "Thingol", "Thorondir", "Thorondor", "Thorongil", "Thranduil", "Thurin", "Thuringwethil", "Tinuuviel", "Turamarth", "Turgon", "Tuurin", "Udalraph", "Urwen", "Uumarth";