in the feb 19 build, the Data/TestScripts folder has a LOT of interesting things im gonna have to take another look at later, but one interesting thing i noticed is in generate_names.txt. which just runs a cheat and quits the game
sleep 10 seconds
cheat "gonzago name_gen all 500"
cheat "quit"
if you run the same cheat, you get a text file dumped to UserData/Debug, along with a debug message like this
Generated 4003 names in 0.1 seconds (0.03 ms per name)
Failed 0 times (0.0%)
Duplicated fallback names 0 times (0.0%)
Tried 11604 times (2.9 per name)
Excluded for length 7063 times (60.9%)
Excluded as a duplicate 105 times (0.9%)
Excluded strings 135 times (1.2%)
Excluded substrings 298 times (2.6%)
Excluded for one character rule 0 times (0.0%)
Succeeded 4003 times (34.5%)
the text file that was generated here was nameGen-English-20260625_121341.txt. it is, indeed, just a list with 4015 lines, where it generates a bunch of names for all name types (Planets, Stars, Creatures, Tribes, Cities, Vehicles, Black Holes)
and you can see from the log how the namegen works!
first of all it pulls the name by combining words from a set of lexicons, which can be found in the name generation packages in retail. i dont think this algorithm is different in the feb 19 build, so im just using this for reference
according to SpaceNames.prop in the same package, each type has its own set of lexicons to use. black holes only use LexiconBlackHoles; buildings LexiconBuilding; cities LexiconCities and LexiconPeople; creatures LexiconCreatures and LexiconTribes; planets LexiconPlanets, LexiconPeople and LexiconCreatures; stars LexiconStars, LexiconCreatures and LexiconFlowers; tribes LexiconTribes and vehicles LexiconVehicle. LexiconFour has four-letter names and never gets used
then it excludes names if they fail several parameters. one thing is it can outright fail or duplicate fallback names? but it didnt do that here
it has 3 times the amount of names that it actually succeeds at generating, only 34.5% of the time does the name actually end up succeeding, which is kind of crazy. the game just tries again if it fails though and it doesnt take long at all to generate a name, 0.03 ms as it says
anyway. it excludes names for being too short or too long. in SpaceNames the minimum name length is set to 5, and maximum to 10. that filters 60.9% of the names
then filters duplicates, which i assume is only relevant for the namegen lists
then it excludes strings, which are included in LexiconExclude, which includes whole worlds like Aardvark and Choir or Closet or whatever. i assume it just filters the name if the full word matches this, that said the namegen can occasionally generate real words anyways
then it excludes substrings! those pull from LexiconFoul, you can guess what kind of things are found in there. alongside filtering swears and slurs and other unfortunate words, it also filters some other more inoccuous strings like "apple", "blue", "clam", "eggplant", triplicated letters like "ooo", etc
then theres "Excluded for one character rule 0 times". i have no clue what this means whatsoever. anyway thats the name list generated then!
the gonzago cheat can do a lot more things, and the gonzago name_gen cheat also has other parameters
[name_gen <planet | star | tribe | creature | city | building | vehicle | all> (count)] ... prints out a list of randomly generated names of the given type, will print 20 if no count is specified.
for example, if i run gonzago name_gen creature, i get this
Generated 20 names in 0.0 seconds (0.04 ms per name)
Failed 0 times (0.0%)
Duplicated fallback names 0 times (0.0%)
Tried 44 times (2.2 per name)
Excluded for length 14 times (31.8%)
Excluded as a duplicate 0 times (0.0%)
Excluded strings 8 times (18.2%)
Excluded substrings 2 times (4.5%)
Excluded for one character rule 0 times (0.0%)
Succeeded 20 times (45.5%)
and the nameGen-English-20260721_141301.txt file. theres only one name type in here, so it doesnt specify these are creature names
so yeah pretty interesting. also lol "Bros" amazing name
i was using the retail name generation package for reference with the feb 19 cheat, but there actually seems to be some differences between the name generations. the SpaceNames prop file is sorted differently and has some commented out strings
#exactlyOneOf aeiouAEIOU
#duplicateSuffixes " II" " III" " IV" " V" " VI" " VII" " VIII" " IX" " X" " XI" " XII" " XIII" " XIV" " XV" " XVI" " XVII" " XVIII" " XIX" " XX" " XXI" " XXII" " XXIII" " XXIV" " XXV" " XXVI" " XXVII" " XXVIII" " XXIX" " XXX" " XXXI" " XXXII" " XXXIII" " XXXIV" " XXXV" " XXXVI" " XXXVII" " XXXVIII" " XXXIX" " XL" " XLI" " XLII" " XLIII" " XLIV" " XLV" " XLVI" " XLVII" " XLVIII" " XLIX" " L" " LI" " LII" " LIII" " LIV" " LV" " LVI" " LVII" " LVIII" " LIX" " LX" " LXI" " LXII" " LXIII" " LXIV" " LXV" " LXVI" " LXVII" " LXVIII" " LXIX" " LXX" " LXXI" " LXXII" " LXXIII" " LXXIV" " LXXV" " LXXVI" " LXXVII" " LXXVIII" " LXXIX" " LXXX" " LXXXI" " LXXXII" " LXXXIII" " LXXXIV" " LXXXV" " LXXXVI" " LXXXVII" " LXXXVIII" " LXXXIX" " XC" " XCI" " XCII" " XCIII" " XCIV" " XCV" " XCVI" " XCVII" " XCVIII" " XCIX" " C"
but the actual used lexicons for each name type dont seem to differ. as do the lexicons themselves, aside from LexiconFoul having more strings added AND some removed in retail (some presumably got removed because they already get filtered by a shorter substring). LexiconExclude is also the same still
so yeah the only actual difference between the namegens in feb 19 and retail is that it has somewhat different excluded substrings