Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Participants: Hannah Ackermans * Julianne Aguilar * Bo An * Katie Anagnostou * Joanne Armitage * Lucas Bang * Alanna Bartolini * David M. Berry * Lillian-Yvonne Bertram * Elisa Beshero-Bondar * Briana Bettin * Sayan Bhattacharyya * Avery Blankenship * Gregory Bringman * Tatiana Bryant * Zara Burton * Evan Buswell * Ashleigh Cassemere-Stanfield * Angela Chang * Prashant Chauhan * Lia Coleman * Chris Coleman * Bill Condee * Nicole Cote * Christina Cuneo * Pierre Depaz * Ranjodh Dhaliwal * Samuel DiBella * Quinn Dombrowski * Kevin Driscoll * Brandee Easter * Jeffrey Edgington * Zoelle Egner * Tristan Espinoza * Teodora Sinziana Fartan * Meredith finkelstein * luke fischbeck * Cyril Focht * Cassidy Fuller * Erika Fülöp * gripp gillson * Alice Goldfarb * Jan Grant * Sarah Groff Hennigh-Palermo * Saksham Gupta * MARIO GUZMAN * Gottfried Haider * Rob Hammond * Nabil Hassein * Diogo Henriques * Gui Heurich * Kate Hollenbach * Stefka Hristova * Bryce Jackson * Dennis Jerz * Joey Jones * Amy Kintner * Corinna Kirsch * Harris Kornstein * Julia Kott * Rishav Kundu * Karios Kurav * Cherrie Kwok * Sarah Laiola * RYAN LEACH * Rachael Lee * Kristen Lillvis * Elizabeth Losh * Jiaqi LU * Megan Ma * Emily Maemura * ASHIK MAHMUD * Felipe Mammoli * Mariana Marangoni * Terhi Marttila * Daniel McCafferty * Christopher McGuinness * Alex McLean * Chandler McWilliams * Todd Millstein * Achala Mishra * Mami Mizushina * Nick Montfort * Molly Morin * Gutierrez Nicholaus * Matt Nish-Lapidus * Michael Nixon * Mace Ojala * Steven Oscherwitz * Delfina Pandiani * Stefano Penge * Megan Perram * Gesina Phillips * Tanner Poling * Julia Polyck-O’Neill * Ben Potter * Amit Ray * Katrina Rbeiz * Jake Reber * Thorsten Ries * Giulia Carla Rossi * Barry Rountree * Warren Sack * samara sallam * Mark Sample * Perla Sasson-Henry * zehra sayed * Carly Schnitzler * Ushnish Sengupta * Lyle Skains * Andrew Smith * Rory Solomon * S. Hayley Steele * Samara Steele * Nikki Stevens * Daniel Temkin * Anna Tito * Lesia Tkacz * Fereshteh Toosi * Nicholas Travaglini * Paige Treebridge * Paige Treebridge * Álvaro Triana Sánchez * Lee Tusman * Natalia + Meow Tyshkevich + Kilo * Annette Vee * Malena Velarde * Dan Verständig * Yohanna Waliya * Samantha Walkow * Josephine Walwema * Shu Wan * Biyi Wen * Zach Whalen * Mark Wolff * Christine Woody * kathy wu * Katherine Yang * Shuyi Yin * Nikoleta Zampaki * Hongwei Zhou
Coordinated by Mark Marino (USC), Jeremy Douglass (UCSB), Sarah Ciston (USC), and Zach Mann (USC). Sponsored by the Humanities and Critical Code Studies Lab (USC), and the Digital Arts and Humanities Commons (UCSB).

Arena, Daggerfall, and the Pitfalls of Procedurally Generated Names (Code Critique 2022)

edited February 2022 in 2022 Code Critiques

Title: Arena / Daggerfall Unity
Authors: Bethesda Softworks / Daggerfall Workshop
Language: C#
Years of development: 1994 /2021

In 1994, Bethesda Softworks released Arena, a computer roleplaying game with a large world full of procedurally generated characters and locations. The content generation included creating culturally appropriate names for people that you meet. These names would be given when you talk to them, like so:

Each of the names would be generated according to different sets of rules. For the European-inspired fantasy races (Bretons, Nords, Imperials), these would involve simple combination of a prefix and suffix. For example, the male Bretons names have 169 variations, each comprised of a combination of one of 13 suffixes and 13 prefixes:

The 13 prefixes for male Breton names are: Agr-, Alab-, And-, Bed-, Dun-, Edw-, Gond-, Mord-, Per-, Rod-, Theod-, Trist-, and Uth-.
The 13 suffixes for male Breton names are: -ane, -ard, -astyr, -istair, -istyr, -ore, -oryan, -yctor, -yn, -ynak, -yrick, -yval, and -ywyr.

This would be guaranteed to lead to comprehendible fantasy names like "Alabard", Theodyrick", or "Peryn". However, for the Redguard race, the algorithm for generating names is a bit more complicated. Here is the code for generating names as recreated for Daggerfall Unity. This is a project that recreates Daggerfall, which is the sequel to Arena. It faithfully uses the same set of rules and word list as the original Arena.

 // Gets random Redguard name which follows 0+1+2+3(75%) (male), 0+1+2+4 (female) pattern
        string GetRandomRedguardName(NameBank nameBank, Genders gender)
        {
            // Get set parts
            string[] partsA, partsB, partsC, partsD;
            if (gender == Genders.Male)
            {
                partsA = nameBank.sets[0].parts;
                partsB = nameBank.sets[1].parts;
                partsC = nameBank.sets[2].parts;
                partsD = nameBank.sets[3].parts;
            }
            else
            {
                partsA = nameBank.sets[0].parts;
                partsB = nameBank.sets[1].parts;
                partsC = nameBank.sets[2].parts;
                partsD = nameBank.sets[4].parts;
            }

            // Generate strings
            uint index = DFRandom.rand() % (uint)partsA.Length;
            string stringA = partsA[index];

            index = DFRandom.rand() % (uint)partsB.Length;
            string stringB = partsB[index];

            index = DFRandom.rand() % (uint)partsC.Length;
            string stringC = partsC[index];

            string stringD = string.Empty;
            if (gender == Genders.Female || (DFRandom.rand() % 100 < 75))
            {
                index = DFRandom.rand() % (uint)partsD.Length;
                stringD = partsD[index];
            }

            return stringA + stringB + stringC + stringD;
        }

The strings referred to here can be seen in this file. The code works as described on the unofficial Elder Scrolls wiki:

Names for male Redguards in Arena consist of a prefix followed by a vowel followed by a consonant, sometimes followed by a suffix. Redguards have no surnames.
The 43 prefixes for male Redguard names are: B, Ba, Bl, Br, C, Ca, Ch, Cr, D, Dh, F, Fh, Fl, Fr, G, Gh, Gl, Gr, K, Kh, Kl, Kr, L, Lh, M, Ma, Mh, N, Nh, R, Rh, Rl, S, Sa, Sh, Shr, Sl, St, T, Th, Tl, V, Vl
The 5 vowels for male Redguard names are: a, e, i, o, u
The 15 consonants for male Redguard names are: b, c, d, h, j, k, l, m, n, p, r, s, t, v, z
The 22 suffixes for male Redguard names are: am, an, ar, e, em, en, er, im, in, ir, ke, 'kern, om, on, rn, t, ta, te, ten, um, un, ur

The Redguards, in their appearance, dress and architecture, are clearly inspired to an extent by Arabic and North African cultures. However, in attempting to make a generator that generates legible and 'Redguard-sounding' names, among the many possible names are several which have absurd or offensive meanings in English and other languages.

For example, this character's name is particularly apt in Portuguese:

Following the algorithm (picking from the lists in order: a prefix, a vowel, a consonant and then optionally a suffix), you can easily form a number of words that wouldn't be appropriate to label someone, including racial epithets or words close to them.

Given the huge range of possible names (74,175 male names), it's quite possible most players wouldn't see anything untoward, though some would. After all, the screenshot above was from my own playthrough, the seventh person I spoke to.

What would have been a more anti-racist way of procedurally generating fantasy names?

In later instalments of the series, certain Redguard name suffixes and prefixes took on a specific meaning, inspired by Arabic naming conventions. Instead of stringing together non-meaningful combinations of letters, they could have alternatively taken the approach of using larger name components, as seen with many of the other cultures names in the game.

And should projects that seek to recreate and restore old games, like Daggerfall Unity, reproduce code that can produce derogatory and racist names?

Sign In or Register to comment.