В WSE есть возможность подгружать файл (dict_load_file). В файл можно записать относительно большое массив имён.
Ну там с форматом придётся разобраться, возможно, cmp поспрашивать.
Из загруженного словаря можно вытягивать строки.
Далее в скрипте, которым ты подменишь str_store_troop_name, нужно проверять лорд-нелорд.
Если нелорд возвращать str_store_troop_name.
Если лорд, брать слот лорда, который проинициализировать на старте, и использовать его как индекс в словаре, по индексу брать строку и возвращать её, как имя лода.
Может быть можно несколько более изощрённо действовать с двумя словарями, один подгрузить только на старте, по нему случайной выборкой создать второй, первый выгрузить, детали.
Пара дыр.
Одна — имена в журнале, там используется не str_store_troop_name_link, соответственно, её тоже придётся переделывать. Какой формат строки она возвращает, можно посмотреть через rgl_log, сбросив туда display_log_message.
Вторая — имена агентов в миссиях. И чё тут делать, не знаю.
Нужно либо agent_set_name, либо troop_set_name, либо script_game_on_agent_get_name. Ничего похожего нет.
В твоём случае, FinGall, troop_set_name избавила бы от массы проблем.
Можно, попросить cmp добавить что-то из выше перечисленного в WSE. По идее, для него это не должно быть сложно.