This project aims to simplify the process of creating custom soldier pools by generating them programmatically instead of manually renaming each one.
While you can still create soldier pools by hand, it can be time-consuming and tedious, especially when making changes. To address this issue, I developed a tool that quickly generates hundreds of soldier names of your choosing
Since the soldier pools are stored in binary (.bin) formats, there's no real easy way to edit en masse. This script will do a bytestring replacement of firstname + lastname fields of a premade* soldier pool.
Currently I have made 2 pools:
-
(Option 1) Use 1 origin character with a set appearance and clone it a bunch of times. Then rename all the clones with custom names. Make your own template or use premade Toms.bin
-
(Option 2) Using the Devs.bin pool. They have personalities/custom appearance made by the devs. The program can rename their last names so there's some custom appearance data compared to using Tom clones
Ofcourse you can also make your own pool (see details below), but this requires some effort
Result when importing some names from names.txt:
Python3.9+, no third party libs
bot.py (not needed) requires pyautogui used to rename the ~140 dev soldiers to create a pool notebook.ipynb (not needed) requires jupyter
Decide on using Tom clones with similar appearance or Dev with more appearance variety. Alternatively you can create your own template, this requires some work (see below)
Input names in names.txt (one name per line). The game limits first names to 11 characters and last names to 15 characters. The program will Error and show you which names are invalid and require renaming.
Tip: use google sheets formula =LEN($B2)<=15
returns FALSE is name length is invalid
Names that have special characters(ó, ò, ê, ñ, ù, ç, ¿, ß, ...) may show up incorrectly.
First and lastnames are seperated by default with @:@
. Omitting a delimiter will default to Lastname with firstname as a .
. You can specify your delimiter with the --delimiter
option
name in names.txt -> ingame
Alice -> '. Alice'
Firstname@:@Lastname -> 'Firstname Lastname'
Some@Thing -> '. Some@Thing'
John@:@ -> 'John .'
Example of running the script for Toms
python3 modify_lastname.py --input data/Toms.bin --names names.txt --output Toms.bin
The game loads/exports pools (.bin) here:
My Documents/My Games/XCOM2 War of the Chosen/XComGame/CharacterPool/Importable/
Opening/closing the menu is sufficient for the .bin to show
Importable/
├── Developers.bin
├── Devs.bin
└── Toms.bin
There's minimal customization options. I won't add more as it requires setting up a pool of soldiers with a specific name (see Pool creation below). The devs provide a pool which is available but the script will go sequentially and the appearance is never truly random. Extra .bin could be useful to make this process more random
Create a character in the game. I require it to be named as follows:
firstname lastname . tomaxlengthname
as the name is tied to the bytestring replacement
️Name your custom pool exactly 4 characters long. Or it will change byte offsets.
If your pool like this ingame, the script can replace the names
ImHex screenshot 1, 2 numbers correlate with name length selected is the string itself
modity bytestring [0x103,0x11D] of tomaxlengthname (Tom) to desired custom name and change the 2 numbers.
tomaxlengthname (15) - Tom template
14 00 00 00 00 00 00 00 10 00 00 00 74 6F 6D 61 78 6C 65 6E 67 74 68 6E 61 6D 65
customname (10)
0F 00 00 00 00 00 00 00 0B 00 00 00 63 75 73 74 6F 6D 6E 61 6D 65
girty (5)
0A 00 00 00 00 00 00 00 06 00 00 00 67 69 72 74 79
. (1)
06 00 00 00 00 00 00 00 02 00 00 00 2E
Renaming uses the same trick as above. I must first nename the last name to "tomaxlengthname" and then loop through and replace some bytes.
There are 143 custom characters added by the Devs. I looped through every single one and renamed their first, last and nickname. A bot (included in the dir) did most of the work. It's not perfect but it does the job.
pythongui is a requirement if you want to run it
UE modding resources https://github.com/Buckminsterfullerene02/UE-Modding-Tools
ImHex - Written by WerWolv
A Hex Editor for Reverse Engineers, Programmers and people who value their retinas when working at 3 AM.
Cutter - Written by Rizin
Free and open source RE platform
Decompiler, graph view, debugger, linear disassmbler, emulator, python scripting engine, plugins, binary patching, etc.