Cuando un jugador crea un nuevo heroe en Warman y no escribe un nombre, el juego genera uno. El nombre generado necesita sonar como si pudiera ser un nombre real, no una cadena aleatoria de caracteres y no "Player_38271". Tambien necesita funcionar en todos los idiomas soportados, produciendo nombres que suenen naturales a hablantes de cada idioma.
Perfiles de Idioma
Cada idioma soportado tiene un LanguageProfile que define las reglas de fonemas para ese idioma. Un perfil especifica: conteo minimo y maximo de silabas, y tres objetos PhonemeSet: uno para silabas iniciales, uno para silabas intermedias y uno para silabas finales.
El Algoritmo
El truco esta en los pools de fonemas. Las silabas iniciales en ingles podrian permitir "th", "br", "st" como consonantes iniciales. Las silabas japonesas siguen un patron estricto de consonante-vocal. Los perfiles alemanes permiten clusters de consonantes mas pesados. Cada perfil esta ajustado a mano para producir nombres que se sientan nativos del idioma.
Por Que Importan los Sets por Posicion
La division en tres posiciones (inicio, medio, fin) evita que los nombres empiecen o terminen de forma torpe. Los nombres en ingles pueden empezar con "Kr" pero no deberian empezar con "ng". Pueden terminar con "th" pero no deberian terminar con "bv". Al tener pools de fonemas separados para cada posicion silabica, el generador evita naturalmente combinaciones que suenan mal sin necesitar reglas negativas.
Mantenerlo Simple
Todo el sistema son unas 80 lineas de codigo mas los datos de perfil de idioma. No intenta ser un motor de linguistica. No parsea reglas gramaticales ni modela fonotactica formalmente. Solo elige caracteres aleatorios de pools curados en el orden correcto, y la curacion hace el trabajo pesado. El resultado son nombres como "Korath", "Lissara", "Brivenox", nombres que suenan como si pertenecieran a un juego de fantasia sin ser copias de nombres existentes.