From a07fdc9908bc3510b6063db136ad99dd12f39818 Mon Sep 17 00:00:00 2001 From: Nelsonh Date: Wed, 21 Oct 2026 17:18:33 +0100 Subject: [PATCH] ultra names prefer culture over generic and error handling --- ChapterMaster.yyp | 3 +- datafiles/main/name_loader.json | 10 + datafiles/main/names/ultra.json | 1003 +++++++++++++++++++++++ scripts/NameGenerator/NameGenerator.gml | 63 +- 4 files changed, 1050 insertions(+), 29 deletions(-) create mode 100644 datafiles/main/names/ultra.json diff --git a/ChapterMaster.yyp b/ChapterMaster.yyp index 683ee7deca..8174a3e9e1 100644 --- a/ChapterMaster.yyp +++ b/ChapterMaster.yyp @@ -572,6 +572,7 @@ {"$GMIncludedFile":"","%Name":"space_marine.json","CopyToMask":-1,"filePath":"datafiles/main/names","name":"space_marine.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"star.json","CopyToMask":-1,"filePath":"datafiles/main/names","name":"star.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"tau.json","CopyToMask":-1,"filePath":"datafiles/main/names","name":"tau.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, + {"$GMIncludedFile":"","%Name":"ultra.json","CopyToMask":-1,"filePath":"datafiles/main/names","name":"ultra.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"readme.md","CopyToMask":-1,"filePath":"datafiles/main","name":"readme.md","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"load_sets.json","CopyToMask":-1,"filePath":"datafiles/main/role_markings","name":"load_sets.json","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, {"$GMIncludedFile":"","%Name":"pauldron.png","CopyToMask":-1,"filePath":"datafiles/main/role_markings/ultramarines","name":"pauldron.png","resourceType":"GMIncludedFile","resourceVersion":"2.0",}, @@ -606,7 +607,7 @@ "isEcma":false, "LibraryEmitters":[], "MetaData":{ - "IDEVersion":"2026.100.0.1142", + "IDEVersion":"2026.100.0.1171", }, "name":"ChapterMaster", "resources":[ diff --git a/datafiles/main/name_loader.json b/datafiles/main/name_loader.json index 0591311f64..ec3b2904a2 100644 --- a/datafiles/main/name_loader.json +++ b/datafiles/main/name_loader.json @@ -83,5 +83,15 @@ "tribal_or_house", ], "preffered_method" : "complex" + }, + { + "load_as": "Ultra", + "load_set": "ultra", + "composites": [ + "praenomen", + "nomen", + "cognomen" + ], + "preffered_method": "complex" } ] \ No newline at end of file diff --git a/datafiles/main/names/ultra.json b/datafiles/main/names/ultra.json new file mode 100644 index 0000000000..d26976427d --- /dev/null +++ b/datafiles/main/names/ultra.json @@ -0,0 +1,1003 @@ +{ + "praenomen": [ + "Cossos", + "Varus", + "Chronus", + "Lamentius", + "Preator", + "Hyrcleon", + "Probis", + "Tercon", + "Phraetus", + "Eleus", + "Daceus", + "Ideus", + "Arrain", + "Atreus", + "Beliasus", + "Marneus", + "Calidus", + "Petronius", + "Cannicus", + "Carnus", + "Cerobius", + "Demetrius", + "Epathus", + "Flaminius", + "Fortius", + "Gratus", + "Roboute", + "Hadril", + "Hastus", + "Corpus", + "Helveticus", + "Idaeus", + "Ixion", + "Karrack", + "Kruger", + "Ligarius", + "Magtinius", + "Martinius", + "Fennias", + "Maxima", + "Metallius", + "Mortez", + "Mutius", + "Numitor", + "Octavion", + "Orpheus", + "Palidorius", + "Rius", + "Romanus", + "Seleucus", + "Sericus", + "Sinon", + "Thedotus", + "Valorus", + "Varas", + "Baltus", + "Augustus", + "Asmodius", + "Armininus", + "Ardias", + "Apemantus", + "Antoninius", + "Antilochus", + "Antarius", + "Alarbus", + "Adeon", + "Achilleus", + "Conjectus", + "Justarius", + "Numitor", + "Epathus", + "Maneus", + "Telcion", + "Berranus", + "Elius", + "Varus", + "Cossos", + "Helixus", + "Ventanus", + "Gaius", + "marneus", + "Marcus", + "Lucius", + "Titus", + "Publius", + "Quintus", + "Decimus", + "Aulus", + "Gnaeus", + "Sextus", + "Servius", + "Appius", + "Tiberius", + "Numerius", + "Spurius", + "Manius", + "Kaeso", + "Agrippa", + "Vibius", + "Flavius", + "Julius", + "Aurelius", + "Cassius", + "Marius", + "Valerius", + "Octavius", + "Maximus", + "Marcellus", + "Tullius", + "Caius", + "Claudius", + "Cornelius", + "Fabius", + "Hadrian", + "Trajan", + "Antoninus", + "Constantine", + "Severus", + "Drusus", + "Germanicus", + "Aemilius", + "Atticus", + "Cato", + "Brutus", + "Varro", + "Silvanus", + "Remus", + "Romulus", + "Tarquinius", + "Horatius", + "Scipio", + "Aetius", + "Belisarius", + "Justinian", + "Vitruvius", + "Vespasian", + "Domitian", + "Nero", + "Nerva", + "Galerius", + "Licinius", + "Probus", + "Carus", + "Carinus", + "Numerian", + "Diocletian", + "Maximian", + "Constantius", + "Valentinian", + "Gratian", + "Theodosius", + "Arcadius", + "Honorius", + "Majorian", + "Anthemius", + "Olybrius", + "Nepos", + "Avitus", + "Petronius", + "Florian", + "Aurelian", + "Tacitus", + "Pertinax", + "Didius", + "Albinus", + "Geta", + "Caracalla", + "Macrinus", + "Elagabalus", + "Alexander", + "Gordian", + "Pupienus", + "Balbinus", + "Philip", + "Decius", + "Trebonian", + "Aemilian", + "Gallienus", + "Quintillus", + "Tacitian", + "Calgar", + "Uriel", + "Tigurius", + "Agemman", + "Telion", + "Sicarius", + "Ventris", + "Severian", + "Leandros", + "Demetrian", + "Acheran", + "Fabian", + "Helix", + "Varian", + "Mordane", + "Acastus", + "Ortan", + "Lucian", + "Dacian", + "Corvin", + "Valerian", + "Tavian", + "Castor", + "Pollux", + "Asterion", + "Helion", + "Darian", + "Tiberon", + "Marcellian", + "Octavian", + "Laurentius", + "Varrus", + "Galen", + "Rufus", + "Faustus", + "Livius", + "Soranus", + "Tertius", + "Primus", + "Secundus", + "Septimus", + "Nonus", + "Darius", + "Nicanor", + "Leonidas", + "Theon", + "Alexius", + "Cassian", + "Lysander", + "Dravian", + "Vorian", + "Celer", + "Aquila", + "Corvus", + "Drakon", + "Magnus", + "Vindex", + "Justicar", + "Proteus", + "Acastian", + "Sergius", + "Florianus", + "Vitus", + "Orestes", + "Evander", + "Hadrianus", + "Valens", + "Aelius", + "Jovian", + "Flavian", + "Aurelianus", + "Rutilus", + "Sabinus", + "Crispus", + "Priscus", + "Felix", + "Victor", + "Nestor", + "Crispin", + "Caelian", + "Vorianus", + "Tertian", + "Quintian", + "Lucilian", + "Marcian", + "Domitianus", + "Silvius", + "Lupercus", + "Caelus", + "Aventinus", + "Vulcan", + "Janus", + "Solon", + "Orion", + "Caietan", + "Aquilinus", + "Varinius", + "Sabellius", + "Celerian", + "Ravian", + "Acastor", + "Helican", + "Tullian", + "Marcellinus", + "Caesarius", + "Laurian", + "Cyrillus", + "Severianus", + "Maxentian", + "Arcturus", + "Tiberian", + "Asterius", + "Cassander", + "Corvian", + "Tavianus", + "Nerian", + "Vespian", + "Traianus", + "Aurel", + "Varronian" + ], + "nomen": [ + "Helix", + "Guilliman", + "Maxim", + "Ferrous", + "Ferrox", + "Guardatus", + "Ventris", + "Caligarus", + "Varus", + "Julius", + "Cornelius", + "Claudius", + "Valerius", + "Aurelius", + "Flavius", + "Aemilius", + "Fabius", + "Cassius", + "Octavius", + "Tullius", + "Marcius", + "Sergius", + "Licinius", + "Domitius", + "Antonius", + "Junius", + "Horatius", + "Manlius", + "Sulpicius", + "Calpurnius", + "Pompeius", + "Vitellius", + "Petronius", + "Sempronius", + "Livius", + "Lucretius", + "Minucius", + "Atilius", + "Caecilius", + "Terentius", + "Vettius", + "Vibius", + "Fulvius", + "Papirius", + "Quinctius", + "Servilius", + "Postumius", + "Furius", + "Mucius", + "Aquilius", + "Aelius", + "Annius", + "Arrius", + "Asinius", + "Baebius", + "Caelius", + "Cestius", + "Cocceius", + "Curtius", + "Decimius", + "Didius", + "Gabinius", + "Gellius", + "Helvius", + "Hortensius", + "Javolenus", + "Lollius", + "Lucilius", + "Maecius", + "Marius", + "Naevius", + "Nonius", + "Numerius", + "Ovidius", + "Plautius", + "Pomponius", + "Pontius", + "Porcius", + "Rutilius", + "Salvius", + "Scribonius", + "Silius", + "Statilius", + "Suetonius", + "Tarquinius", + "Titinius", + "Ulpius", + "Varius", + "Vergilius", + "Vespasius", + "Villius", + "Volusius", + "Vulcatius", + "Aquilanius", + "Caelestinus", + "Corvinius", + "Dravianus", + "Helicanus", + "Laurentius", + "Marcellianus", + "Ortanus", + "Severianus", + "Tiberianus", + "Valerianus", + "Varronianus", + "Acastianus", + "Aurelianus", + "Cassianus", + "Corvinianus", + "Decianus", + "Fabianus", + "Florianus", + "Hadrianus", + "Lucianus", + "Maximianus", + "Octavianus", + "Sergianus", + "Tavianus", + "Traianus", + "Vorianus", + "Asterianus", + "Belisarianus", + "Castellanus", + "Dacianus", + "Galenianus", + "Leontianus", + "Nicanorianus", + "Scipionus", + "Silvanianus", + "Vindexianus", + "Ventrianus", + "Calgarianus", + "Macraggius", + "Ultranius", + "Talassarianus", + "Konorianus", + "Espandorianus", + "Calthianus", + "Iaxianus", + "Prandianus", + "Parmenianus", + "Vespatorianus", + "Aquilonius", + "Helionianus", + "Arcturianus", + "Justinianus", + "Proteianus", + "Tigurius", + "Agemmanus", + "Sicarianus", + "Telionus", + "Varrianus", + "Acherianus", + "Demetrianus", + "Leandrianus", + "Cassandrianus", + "Aventinianus", + "Coronianus", + "Crispianus", + "Drusianus", + "Evandrianus", + "Faustianus", + "Jovianus", + "Lysandrianus", + "Nerianus", + "Orestianus", + "Rufianus", + "Sabinianus", + "Tertianus", + "Vespianus", + "Vitruvianus" + ], + "cognomen": [ + "Helix", + "Gage", + "Cicero", + "Scaevola", + "Scipio", + "Africanus", + "Asiaticus", + "Aemilianus", + "Maximus", + "Magnus", + "Invictus", + "Victor", + "Victorius", + "Valens", + "Fortis", + "Fortunatus", + "Felix", + "Fidelis", + "Justus", + "Pius", + "Pietas", + "Severus", + "Crispus", + "Priscus", + "Rufus", + "Rutilus", + "Albus", + "Niger", + "Longinus", + "Celer", + "Celsus", + "Aquila", + "Aquilan", + "Corvus", + "Corvinus", + "Lupus", + "Lupinus", + "Leo", + "Leonis", + "Draco", + "Draconis", + "Ferox", + "Ferreus", + "Ferratus", + "Ferrum", + "Fulgor", + "Fulminis", + "Fulminatus", + "Ignis", + "Ignifer", + "Lucifer", + "Lucidus", + "Luminus", + "Lux", + "Solarius", + "Solaris", + "Helion", + "Asterius", + "Astraeus", + "Caelestis", + "Caelius", + "Caelorum", + "Altus", + "Excelsus", + "Primus", + "Secundus", + "Tertius", + "Quartus", + "Quintus", + "Sextus", + "Septimus", + "Octavus", + "Nonus", + "Decimus", + "Centurio", + "Tribunus", + "Praetor", + "Legatus", + "Consul", + "Imperator", + "Dominus", + "Custos", + "Vigil", + "Vigilans", + "Defensor", + "Protector", + "Praesidium", + "Vindex", + "Ultor", + "Vindictus", + "Justicar", + "Judex", + "Gladius", + "Glorianus", + "Gloriosus", + "Honoratus", + "Honorius", + "Honoris", + "Virtus", + "Virtutis", + "Virtuosus", + "Resolutus", + "Tenax", + "Durus", + "Durabilis", + "Indomitus", + "Intrepidus", + "Audax", + "Audacius", + "Strenuus", + "Acer", + "Acerbus", + "Aeternus", + "Perennis", + "Immortalis", + "Impervius", + "Inflexus", + "Infractum", + "Constans", + "Firmus", + "Stabilis", + "Solidus", + "Invictor", + "Triumphus", + "Triumphalis", + "Victorinus", + "Bellator", + "Bellatus", + "Bellicus", + "Militans", + "Martialis", + "Martius", + "Pugnax", + "Pugnator", + "Pugnatoris", + "Venator", + "Venatoris", + "Venerator", + "Praedator", + "Exactor", + "Executor", + "Ultimus", + "Terminus", + "Terminator", + "Ferrarius", + "Armiger", + "Armatus", + "Armoricus", + "Lorican", + "Loricator", + "Scutarius", + "Scutifer", + "Scutatus", + "Clipeus", + "Bastion", + "Bastionis", + "Castellan", + "Castellanus", + "Praetorian", + "Praetorianus", + "Palatinus", + "Paladius", + "Turris", + "Murarius", + "Muralis", + "Vallum", + "Vallarius", + "Castrensis", + "Castrorum", + "Legionis", + "Legionarius", + "Legionem", + "Cohortis", + "Centurian", + "Centurianus", + "Primaris", + "Primarchus", + "Ultramar", + "Ultramaris", + "Macraggius", + "Macraggian", + "Calthius", + "Calthian", + "Talassarian", + "Konorian", + "Espandorian", + "Iaxian", + "Prandian", + "Parmenian", + "Vespatorian", + "Armaturian", + "Tarsian", + "Occludian", + "Damnosian", + "Praxedian", + "Honourbound", + "Oathkeeper", + "Oathsworn", + "Ironbound", + "Steelheart", + "Stoneheart", + "Stormborn", + "Stormwarden", + "Stormbreaker", + "Shieldbearer", + "Shieldwarden", + "Shieldmaster", + "Bladeguard", + "Bladewarden", + "Swordbearer", + "Swordmaster", + "Swordbreaker", + "Warborn", + "Warbringer", + "Warwarden", + "Warforged", + "Doombringer", + "Doomwarden", + "Doomslayer", + "Dreadbane", + "Dreadnought", + "Deathbane", + "Deathwatcher", + "Deathward", + "Foehammer", + "Foeslayer", + "Foehunter", + "Fellblade", + "Fellhammer", + "Ironfist", + "Ironhand", + "Ironshield", + "Ironsoul", + "Steelshield", + "Steelborn", + "Stonefist", + "Stonewarden", + "Thunderfist", + "Thunderborn", + "Thunderblade", + "Thunderstrike", + "Firebrand", + "Fireheart", + "Flamebearer", + "Flamewarden", + "Flameborn", + "Sunblade", + "Sunshield", + "Sunward", + "Starborn", + "Starwarden", + "Starshield", + "Starblade", + "Voidborn", + "Voidwarden", + "Voidshield", + "Voidwalker", + "Dawnbringer", + "Dawnwarden", + "Dawnshield", + "Dawnbreaker", + "Nightbane", + "Nightwarden", + "Nightshield", + "Nightfall", + "Lightbringer", + "Lightwarden", + "Lightshield", + "Brightspear", + "Goldshield", + "Goldheart", + "Goldenblade", + "Goldenhand", + "Silverblade", + "Silverhand", + "Silvershield", + "Crimsonblade", + "Crimsonshield", + "Azureblade", + "Azureshield", + "Azureheart", + "Azurewarden", + "Bluewarden", + "Blueblade", + "Blueheart", + "Lionheart", + "Lionbane", + "Eagleheart", + "Eaglewarden", + "Eagleshield", + "Eagleblade", + "Falconheart", + "Falconblade", + "Hawkheart", + "Hawkshield", + "Wolfbane", + "Wolfhunter", + "Wyrmbane", + "Wyrmslayer", + "Dragonbane", + "Dragonheart", + "Dragonshield", + "Serpentbane", + "Serpentslayer", + "Tyrantbane", + "Traitorbane", + "Hereticbane", + "Xenosbane", + "Orkbane", + "Daemonbane", + "Witchbane", + "Unbroken", + "Unyielding", + "Unbowed", + "Unconquered", + "Steadfast", + "Stalwart", + "Righteous", + "Vigilant", + "Relentless", + "Resolute", + "Dauntless", + "Fearless", + "Unflinching", + "Indomitable", + "Implacable", + "Unassailable", + "Unshakeable", + "Adamant", + "Adamantine", + "Adamantus", + "Aegis", + "Aegidian", + "Aegisius", + "Secutor", + "Secutorius", + "Secutoris", + "Sagittarius", + "Sagittarus", + "Ballistarius", + "Artillerius", + "Vexillarius", + "Signifer", + "Aquilifer", + "Optio", + "Primipilus", + "Hastatus", + "Triarius", + "Principes", + "Evocatus", + "Veteranus", + "Decurion", + "Praefectus", + "Dux", + "Magister", + "Strategos", + "Tactician", + "Strategius", + "Orator", + "Codician", + "Codicarius", + "Scriptor", + "Lexican", + "Lexicanus", + "Archivus", + "Memorius", + "Remembran", + "Laureatus", + "Laureolus", + "Laurelius", + "Glorificus", + "Honouris", + "Peregrinus", + "Viator", + "Vocator", + "Vox", + "Veritas", + "Veridian", + "Veritus", + "Verax", + "Veridicus", + "Justinian", + "Justicarus", + "Pax", + "Pacifer", + "Pacatus", + "Pacator", + "Pacis", + "Concordius", + "Concordatus", + "Concordia", + "Ordinatus", + "Ordinis", + "Ordo", + "Ordinator", + "Disciplinius", + "Disciplinus", + "Regulus", + "Regalis", + "Regalian", + "Regent", + "Regentor", + "Imperialis", + "Imperian", + "Imperatoris", + "Imperius", + "Invictian", + "Victorian", + "Victorix", + "Aurelian", + "Aureus", + "Aureolus", + "Aurelius", + "Argentus", + "Argentian", + "Ferronius", + "Ferreolus", + "Ferrican", + "Caelorian", + "Caelestian", + "Caelifer", + "Astrian", + "Astraian", + "Asterion", + "Asterian", + "Heliarius", + "Heliand", + "Solifer", + "Solivagus", + "Sol Invictus", + "Ultima", + "Ultiman", + "Ultimarius", + "Ultranius", + "Ultramarian", + "Macraggianus", + "Calthanus", + "Talassarianus", + "Konorianus", + "Espandorianus", + "Iaxianus", + "Prandianus", + "Parmenianus", + "Vespatorianus", + "Tigurius", + "Calgarian", + "Sicarian", + "Agemmanian", + "Ventrian", + "Telionian", + "Cassian", + "Fabian", + "Severian", + "Tiberian", + "Varronian", + "Acastian", + "Corvian", + "Marcellian", + "Octavian", + "Valerian", + "Trajanus", + "Hadrianus", + "Belisarian", + "Scipionic", + "Aurelianus", + "Cassander", + "Aquilinus", + "Dravian", + "Vorian", + "Nicanor", + "Lysander", + "Castorian", + "Pollucian", + "Leonidian", + "Theonian", + "Orionis", + "Arcturian", + "Aventinian", + "Vulcanian", + "Janusian", + "Vitruvian", + "Crispinian", + "Sabinian", + "Faustian", + "Rufian", + "Florian", + "Laurentian", + "Galenian", + "Orestian", + "Evandrian", + "Dacian", + "Helican", + "Nerian", + "Soranian", + "Celerian", + "Priscian", + "Tertian", + "Quintian", + "Lucilian", + "Marcian", + "Domitian", + "Vespasian", + "Tullian", + "Sergian", + "Caelian", + "Silvanian", + "Horatian", + "Jovian", + "Aelian", + "Rutilian", + "Aemilian", + "Claudian", + "Cornelian", + "Fabianus", + "Julian", + "Julianus", + "Marian", + "Marius", + "Valerianus", + "Cassianus", + "Flavianus", + "Octavianus", + "Traian", + "Severianus" + ] +} \ No newline at end of file diff --git a/scripts/NameGenerator/NameGenerator.gml b/scripts/NameGenerator/NameGenerator.gml index 8dbbd4a7bc..b72cfa972c 100644 --- a/scripts/NameGenerator/NameGenerator.gml +++ b/scripts/NameGenerator/NameGenerator.gml @@ -235,37 +235,41 @@ function NameGenerator() constructor { name_sets = {}; for (var i = 0; i < array_length(_simple_names); i++) { - var _name = _simple_names[i]; - var _load_name = _name; - var _load_as_composite = false; - var _preffered = "simple"; - var _composites = {}; - if (is_struct(_name)) { - var _struc = _name; - _name = _struc.load_as; - _load_name = _struc.load_set; - if (struct_exists(_struc, "composites")) { - _load_as_composite = true; - _composites = _struc.composites; - } - if (struct_exists(_struc, "preffered_method")) { - _preffered = _struc.preffered_method; - } else { - if (_load_as_composite) { - _preffered = "composite"; + try { + var _name = _simple_names[i]; + var _load_name = _name; + var _load_as_composite = false; + var _preffered = "simple"; + var _composites = {}; + if (is_struct(_name)) { + var _struc = _name; + _name = _struc.load_as; + _load_name = _struc.load_set; + if (struct_exists(_struc, "composites")) { + _load_as_composite = true; + _composites = _struc.composites; + } + if (struct_exists(_struc, "preffered_method")) { + _preffered = _struc.preffered_method; + } else { + if (_load_as_composite) { + _preffered = "composite"; + } } } - } - name_sets[$ _name] = new NameTracker(_name); - var _fallback_name = string_replace_all(_name, "_", " ") + " 1"; + name_sets[$ _name] = new NameTracker(_name); + var _fallback_name = string_replace_all(_name, "_", " ") + " 1"; - var _set = name_sets[$ _name]; - _set.preffered_method = _preffered; - if (!_load_as_composite) { - _set.LoadSimpleNames(_load_name, _fallback_name); - } else { - _set.LoadCompositeNames(_load_name, _composites); + var _set = name_sets[$ _name]; + _set.preffered_method = _preffered; + if (!_load_as_composite) { + _set.LoadSimpleNames(_load_name, _fallback_name); + } else { + _set.LoadCompositeNames(_load_name, _composites); + } + } catch (_exception) { + ERROR_HANDLER.handle_exception(_exception); } } @@ -282,12 +286,15 @@ function NameGenerator() constructor { static ChapterMemberNameGeneration = function() { try { var _name = ""; - var _styles = ["space_marine"]; + var _styles = []; if (instance_exists(obj_creation)) { _styles = array_join(_styles, obj_creation.buttons.culture_styles.selections()); } else { _styles = array_join(obj_ini.culture_styles, _styles); } + if (array_length(_styles) == 0){ + _styles = ["space_marine"] + } _styles = array_shuffle(_styles);