Новая жизнь отечественной RTS. Часть 3: Патчи и моддинг
Моя история исправлений игры "Орда: Цитадель" началась с безобидных и невинных ассемблерных вставок ещё в 2014 году (если, конечно, правки на уровне машинных кодов вообще можно назвать безобидными). В этом посте расскажу историю о том, как от простейших правок я постепенно перешел к исправлению сложнейших багов, а также про адаптацию Северного Ветра (игры под MS-DOS) к современным системам.
"Информации, получаемой из Орды, гораздо больше, чем ты можешь расшифровать. Ты привыкаешь к этому. Я уже даже не вижу код."
Во время работы над редактором карт (см. пост) я часто занимался изучением дизассемблированного кода Орды. В нем однажды обнаружил, что нехитрыми манипуляциями можно улучшить поиск пути воинами. От того они не стали значительно умнее, но все же какой-то эффект от исправления оказался заметен. И это было очень важно, ведь являлось ответом на вопрос "А так можно было?!" и положило начало целой истории.
Потихоньку начали накапливаться небольшие улучшения: исправил отображение времени в меню сохранения/загрузки, поправил работу скриншотов, зафиксил кое-какие вылеты, активировал дополнительные чит-коды и т.д.
Значительный шаг случился в начале 2016 года, когда подготовил сборку, названную "Большой патч для Орды". "Большой", потому что неожиданно для себя удалось адаптировать игру под разрешение 1024х768. Выше - нельзя, ибо мешают непреодолимые ограничения движка. Все равно, даже такой бонус оказался значительным улучшением.
Работа над большим патчем в самом разгаре! Осталось перенести кнопки меню. На скриншоте наглядно видно насколько увеличился игровой обзор.
Затем воплотил мечту многих игроков. Подготовил мод, который позволяет строить воина с дубиной! А чтобы удобнее было переключать накопившуюся к тому времени небольшую базу моих модов, сделал лончер.
Ещё через месяц, сделал мод Зимняя Орда, в котором изменил время года. Теперь в Орде выпал снег, пение птиц сменилось завываниями ветра, а реки замерзли и перестали быть препятствием для воинов. Получилось очень аутентично. Спасибо Алексею Скворцову за подготовленные избражения зданий со снегом!
Секрет заключается в подборе палитры тайлов. Зеленый заменил на оттенки белого, а синий на голубой. По-моему вышло очень правдоподобно. А вот здания уже пришлось перерисовывать.
К концу того же 2016 года подготовил "Легендарный багфикс", в котором удалось исправить уйму критических багов: несколько вылетов и одно зависание. Легендарный, потому что мне впервые удалось исправить именно причины багов так, чтобы они полностью исчезли, а не бороться с симптомами.
Тогда же был и другой примечательный случай. Многие игроки, так или иначе во время прохождения, замечали, что иногда Князь мог поменять своё оружие на копье, лук или даже ядра от катапульт. На эту тему было много спекуляций: что это? Прокачка персонажа или действие одного из предметов, или технология из лаборатории, или что-то ещё? Так вот выяснилось, что это не какая-то там фича, заложенная в механику игры, а всего лишь баг, который проявлялся при весьма специфических условиях. Пришлось переступить через себя и отключить одну из интересных фишек игры, ведь другие побочные эффекты этого бага могут провоцировать критические ошибки.
Не нашел видео, где персонаж меняет оружие. Вместо этого загадка для знатоков. Каким образом можно провести героя внутрь стен Ворежа без читов и редактора на ванильной версии игры?
В какой-то момент я так преисполнился патчингом, что однажды обнаружил возможность перенести СЮЖЕТ Северного Ветра на движок Цитадели. Это было очень заманчиво, ведь поиграть очень хотелось: в интернете писали, что "Ветер" интереснее "Цитадели", но меня каждый раз отталкивал геймплей в разрешении 600х400 через DosBox. Теперь же появилась надежда на возможность сыграть в уже пропатченной игре, да еще и с разрешением 1024х768! Потому я с головой окунулся в этот проект.
Более двух месяцев продолжался скрупулезный перенос ассемблерного кода. Было очень сложно, несмотря на уже имевшиеся наработки и проведенные исследования. Затем пришлось фиксить множество ошибок и нестыковок, когда путались диалоги и квесты разных сюжетов, когда персонажи выполняли чужие действия, когда что-то переставало работать. Порой аукались некоторые фичи из "Цитадели". Например, поджигатели никого не могли зажечь на карте Магуса потому что это прописано в коде "Цитадели": лучники на центральной карте (та, что с Драконом) всегда промахиваются... Таких затыков было полным полно.
Лучники всегда промахиваются на центральной карте в Цитадели (она же карта Дракона). При промахе отображается анимация "отскока" стрелы, что как раз видно на этой гифке.
В конце-концов все исправил и проверил. Все работает замечательно! Все вышло настолько хорошо, что сохранились все-все оригинальные баги фичи "Северного Ветра". Огорчало только одно. В процессе низкоуровневых работ над кодом полностью заспойлерил себе сюжет 😔 Но, как оказалось, это ни капли не помешало мне по полной насладиться замечательной игрой!
Сейчас Северный Ветер сделан в виде подключаемого через лончер мода к Цитадели. Работает на Windows 10/11. Дополнительно, для полного погружения я добавил ещё один мод, отключающий каменные здания, чтобы все было, как раньше!
Скачать сборку Цитадели с Северным Ветром можно в группе Орды в VK.
Затем мой взор устремился на следующую крупную проблему Орды: через небольшой промежуток времени после начала игры, боты переставали развиваться и переключались на вялотекущий режим функционирования, из-за чего их было очень просто победить.
Задача: починить ботов. Это даже звучит сложно! Решение оказалось совсем не простым. Для определения причины бага пришлось разработать свой анализатор оперативной памяти Орды, чтобы в реальном времени отслеживать изменения данных в ОЗУ компьютера. Оказалось, что в какой-то момент бот очень-очень хотел построить воинов с дубиной (прям как и всем игрокам Орды), но игрой этого не предусмотрено! Тогда бот начинал грустить, полностью зацикливался на своей проблеме и напрочь переставал развиваться 😔 Замечательно. Причина ошибки выявлена. Самое сложное сделано. Накатать патч на ассемблере это уже дело техники.
Тот самый анализатор памяти Орды. Здесь видно, что бот №5 (оранжевый) создал запрос на тренировку пяти воинов с индексом 2/26 (т.е. воинов с дубиной). Но его нет в казарме! Упс.. В игре это выглядит так, будто бы бот "сдался" и больше не хочет играть.
Кстати, первую версию анализатора делал ещё при разработке редактора карт (см. пост), тогда через него я определял структуру внутриигровых данных.
Один из раздражающих моментов игры заключается в том, что быстро пропадают фразы собеседников. Иногда текст пропадает даже ещё до того, как пропечатается до конца. Я, честно, предпринял очень много попыток исправить, но баг сидит так глубоко, что удалось лишь совсем чуть-чуть улучшить ситуацию, но не избавиться полностью.
А ещё, увы, иногда бывает и так, что баги появляются уже после моих исправлений, ибо на языке ассемблера весьма легко допустить ошибку. Пока что был зафиксирован только один такой случай. Баг заключался в том, что часть воинов из отряда прекращала подчиняться и выполнять приказы. После исправления все стали слушаться приказов (хотя, раз уж речь про Орду, то слушаться до тех пор, пока воину не взбредет в голову что-то другое).
Также в Цитадели много некритических багов, которые постепенно проявляются во время игры, но не ломают её сразу, а имеют накопительный эффект. В какой-то момент - раз и всё! Больше не получается поиграть: либо не загружается сохранение, либо черный экран при переходе на следующую карту, либо главный герой умирает, казалось бы, на ровном месте. Причины появления таких ошибок пока раскопать не удалось. Но я научился их исправлять, убирая последствия в файлах сохранений. Для этого игроки скидывают мне сохранение, а я через матрицу Орды выполняю необходимые манипуляции. Такая тонкая работа позволяет исправить следующее:
Излечение персонажа от страшной болезни (см. пост в группе);
Разблокировка заблокированных навсегда изобретений;
Исправление теневой карты, когда отмечается что в пустой клетке будто бы кто-то стоит;
Поиск/восстановление потерянных предметов.
Помимо указанных заметных исправлений сделано очень-очень много других правок, которые хоть и остаются незримыми, но порой являются не менее сложными в реализации:
Встроенная поддержка оконного режима
Улучшение обработчика ввода
Множество правок интерфейса
Изменен механизм скриншотов
Корректировка пропорций изображения на широкоформатных мониторах в полноэкранном режиме
Добавление возможности изменения игровых текстов модами
Добавление опции для "безумной" скорости игры
Исправление сворачивания игры на "Alt+Tab", ведь раньше после разворачивания картинка сжималась и отображалась в розовых цветах.
И много-много других исправлений…
Попытка увеличить количество игроков на карте. Игра работает, и дополнительные игроки развиваются, но почему-то не дерутся 🤷♂️
Про баги Цитадели и Северного Ветра я могу рассказать ещё очень многое! Если интересно, пишите в комментах, если не интересно, то не буду трогать эту тему.
🚀 Сейчас подготовлены и другие изменения с исправлениями, но чтобы сделать сборку нужно отвлечься от основной задачи, от разработки ремейка игры: “Орда: Возрождение”. Об этом напишу в других постах...
Актуальный патч Цитадели (от 2021-05-03) https://vk.com/wall-63967485_3428














pikabu GAMES
5.1K постов8.9K подписчиков
Правила сообщества
Коротко: никаких "кулвидосиков" с нарезкой геймплеев и смешных моментов, никаких комиксов, артов, косплея и т.д. Только полезная и важная информация для геймеров.
Помни!
- Новостные/информационные публикации постим в pikabu GAMES
- Развлекательный контент в Лигу Геймеров
За неэтичное использование сообщества - бан. Если ты выкладываешь пост в наше сообщество и получаешь стартовые плюсы от наших подписчиков, не думай, что вытаскивать потом пост в своё личное сообщество будет умным поступком.