Программа для усиления/ослабления отдельных фракций путём редактирования export_descr_unit.txt
Предистория и основная идея программы
Для многих игроков стандартный ИИ кажется слишком слабым, потому как во многих случаях создаёт слишком мало юнитов. Усиление сложности игры на very hard эту проблему никак не решает.
На написание программы меня вдохновил пост от Sonar
Если коротко, то количество армии, которую нанимает и содержит ИИ зависит исключительно соотношения суммарного дохода за ход и цены содержания этой армии. Даже если вкинуть в казну ИИ пару миллионов денег, больше армии он всё равно содержать не будет. Поэтому если уменьшить цену содержания юнитов, то ИИ тут же станет их нанимать больше. Цена содержания каждого юнита задаётся в export_descr_unit.txt, можно перед стартом игры, например уменьшить цену содержания юнитов для всех ИИ-фракций, но при этом не трогать параметры юнитов той фракции, за которую собираемся играть, ну и наёмников тоже желательно не трогать. Делать это в блокноте очень муторная и неприятная работа, а если захотим начать игру за другую фракцию, то каждый раз придётся переделывать. Я решил написать программу, которая автоматизирует этот процесс. Указываем исходный файл export_descr_unit.txt без правок в качестве источника, задаём коэффициент, на который нужно умножить цену содержания каждого юнита, задаём список фракций, для юнитов которых нужно применить этот коэффициент, жмём кнопочку и сохраняем готовый export_descr_unit.txt, в котором цена содержания юнитов для выбранных фракций изменена на указанный коэффициент.
Описание программы
Заодно подумал какие ещё параметры в export_descr_unit.txt полезно пакетным образом изменять для усиления или ослабления отдельных фракций. Решил, что будет полезно изменять параметр атаки и чарджа в stat_pri/stat_sec, а также дальности стрельбы и количества стрел/снарядов, если атака стрелковая, параметры брони (фактор брони, навык защиты и щит в stat_pri_armour, а также фактор брони, навык защиты для животных в stat_sec_armour), параметры стоимости в stat_cost (количество ходов, стоимость найма, вышеупомянутая стоимость содержания, стоимость апгрейда оружия и брони). Все эти параметры удобно задавать либо в виде коэффициента, на который следует умножать исходное значение, либо в виде положительного/отрицательного количества процентов, на которые следует изменить исходное значение. Также полезным будет изменять параметры здоровья (отдельно человека и животного в stat_health) и морали в stat_mental. В данном случае лучше задавать не коэффициент, на который нужно умножать, а слагаемое в виде целого числа, которое следует прибавлять/отнимать к исходному значению.
В строке ownership файла export_descr_unit.txt задаётся либо фракция, либо культура. Соответственно если в программе поставить галочку выбора для фракции, то будут выбраны только те юниты, для которых в строке ownership есть фракция, а если в строке ownership есть культура, то для выбора такой фракции нужно ставить галочку напротив культуры. Юниты повстанцев и наёмников считаются вне культур и обычных фракций. Также можно применить изменения сразу ко всем юнитам любых фракций, постанцев и наёмников, если поставить галочку вверху напротив "all".
Программу я написал, а потом значительно её усовершенствовал. Во-первых сделал список отдельных заданий, в каждом из которых задаются свои изменяемые параметры и свой список фракций. Можно либо поочередно выполнить все задания для каждого юнита, либо для каждого параметра применять тот коэффициент/слагаемое, который даёт наибольшее усиление или же ослабление, либо же из самого крайнего левого или правого задания, которое первое подходит по списку фракций для данного юнита. Количество заданий выбирается счётчиком. Также сделал, что если указанное значение коэффициента/слагаемого приносит усиление фракции, то отображается зелёным шрифтом, если ослабление - синим, если ничего не меняет - чёрным.
Для работы программы, ей нужно дать доступ к исходному файлу export_descr_unit.txt, а также к файлу descr_sm_factions.txt, из которого она прочитает список фракций. Я сделал, что можно указать сразу папку data игры/мода, из которой она загрузит исходные файлы, или же отдельно указать местоположение каждого из этих двух файлов. Также у программы есть папка "Presets", в которой хранятся уже заданные наперёд мною комбинации этих двух файлов, любую из них можно выбрать в выпадающем списке. Каждая комбинация двух файлов храниться в отдельной подпапке папки "Presets". Сейчас там 7 готовых вариантов исходных файлов для игры 270 г. до н.э. + двух дополнений Barbarian Invasion и Alexander как для "Rome: Total War Remastered", так и для оригинальной игры "Rome: Total War", а также для мода "Amazon: Total War 3.0c" для оригинальной игры. Вы можете создавать в папке "Presets" любые свои подпапки для любых модов или для измененных исходных файлов. Независимо от того, из какого источника игра загрузила данные, по нажатию кнопки "Выполнить задания" измененное состояние export_descr_unit.txt сохраняется на вкладке "export_descr_unit.txt" во второе поле текстового редактора. Вы можете прокрутить, посмотреть его содержимомое перед сохранением и даже что-то вручную подправить. Сохранение производится по нажатию кнопки "Сохранить как..." и в диалоговом окне сохранения файла Вам нужно будет указать, куда сохранить изменённый export_descr_unit.txt.
Усовершенствования
Прикрутил локализацию интерфейса программы. Программа теперь поддерживает русский, украинский и английский языки интерфейса. Языки интерфейса хранятся в папке "Localization". Сейчас там три *.ini файла для русского, украинского и английского, любой желающий может по их примеру создать новый *.ini файл для перевода интерфейса моей программы на любой другой язык.
Прикрутил сохранение состояния рабочего окна в файл Settings.ini. Если произошли изменения, то программа пытается при закрытии сохранить их в Settings.ini в папке рядом с *.exe файлом программы. Если нет доступа на запись, то сохранение не происходит. При запуске программы она загружает предыдущее своё состояние из этого файла.
Было бы полезно также усилять/ослаблять фракции.
Программа скомпилирована в x32 и x64 разрядности, поэтому вложено два *.exe файла.
Системные требования
Программа должна работать с файлами как ремастера, так и оригинальной игры, должна работать как в современных, так и более старых Windows. Требуется разрешение экрана не ниже 800 по ширине и 720 по высоте. Полностью portable, инсталляции не требуется, информацию в реестре не хранит.
Скриншоты
Скриншоты предоставляю на базе примера. Допустим мы хотим играть за Армению в Ремастер кампания 270 г. до н.э. Давайте усилим все остальные фракции, это произведём в "Задание 1". Поставим в колонке "Включить" галочку "all", а в колонке "Исключить" укажем свою культуру "eastern", фракцию "armenia" а также наёмников "mercenary", так как не нужно игроку иметь возможность нанимать читерских наёмников. Теперь увеличим в полтора раза атаку, на 20% дальность атаки, на 30% количество стрел/снарядов, на 20% параметры брони для человека и для животных, количество ходов для найма сократим в двое (юниты, которые нанимались 2 хода, теперь будут за 1 ход), стоимость найма, содержания и апгрейда сократим на 30%. Также на единичку повысим здоровье как для людей, так и для животных и на двоечку увеличим мораль. А теперь мы решили, что римлян не нужно так сильно усилять. Создаем второе задание и выбираем в нём римскую культуру и все четыре римские фракции. Пусть их атака и чардж после умножения на коэффициент 1,5 в первом задании уменьшится на 25% путём умножения на коэффициент 0,75 во втором задании. Также мы решили что не хочем, чтоб у римлян изменилась стоимость найма отряда, относительно оригинальной игры. Поскольку в первом задании мы умножали стоимость найма отряда на 0,7 , то здесь умножим на 1/0,7=1,42857142857143. В итоге после последовательных двух умножений стоимость найма не изменится. На скриншотах предоставлены настройки параметров двух заданий, а также результат применения этих настроек для юнита "Египетские колесницы" и римские "Преторианцы".
Скачать программу: Для просмотра ссылки Зарегистрируйтесь, Для просмотра ссылки Зарегистрируйтесь
Планы на будущее
Было бы неплохо усилять/ослаблять фракции не только путём редактирования "export_descr_unit.txt", но и путём редактирования "export_descr_buildings.txt", но там очень сложный формат файла, нужно писать рекурсивный парсер, пока точно не осилю. Также можно было бы, чтобы вместо ключей фракций типа "romans_julii", отображалась локализация типа "Дом Юлиев". Это избавило бы от путаницы в модах, когда фракции переименованы. И поди разберись сначала, что в моде про амазонок "dacia" это не "Дакия", а "Bean Sidhe" на самом деле. Формат файлов локализации игры довольно прост, возможно это усовершенствование внесу в будущем. Также пишите свои замечания, указания на ошибку и пожелания по усовершенствованию программы.
Ещё можно попытаться сделать, что там где рядом отображаются текстовые редакторы для export_descr_unit.txt до и после изменений сделать, чтобы прокрутка одного редактора вызывала автоматом прокрутку второго на столько же строк.
Замечание
Программу создано в среде Embarcadero Delphi v10.3.3. Раньше в более старых версиях антивирус Касперского из-за своего эвристического анализа мог ругаться на мои программы, написанные в Embarcadero Delphi. Если ругается, то внесите программу в исключения антивируса.
[-Сообщение склеено-]
Обязательно напишите, пожалуйста, у кого установлен Касперыч, ругается ли он сейчас на мою программу.
Как думаете, можно ли выкладывать мою программу в Steam в раздел "руководства" по игре, где дать ссылку на скачивание моей программы? Типа как выкладывают в Steam русификаторы?