Перевод ретроспективной статьи о разработке сложной пошаговой видеоигры 8 More Lives. Статья еще готовится к выходу в блоге компании Luden.io, я уже переводил для Хабра некоторые их статьи, так что как обычно — прямая речь сохранена.
Авторы не возражали чтобы перевод вышел раньше оригинала, поэтому мы здесь. Кроме того, можно попроситься пораньше в закрытый плейтест на Steam, скажите в Discord проекта что вы от DMinsky — обещали впустить без очереди. Приятного чтения!
Будет сложно, вам понравится
Привет! Меня зовут Иван, и я делаю игры последние 10 лет. В частности, я работал над while True: learn(), Learning Factory и SuperWEIRD, но пост не про них.

8 More Lives — это хардкорная пошаговая стратегия, в которой вы возглавите отряд котов‑наёмников. Я начал делать её, потому что люблю игры с глубокими, взаимосвязанными системами — особенно пошаговые тактики.
Немного о том, откуда взялся этот проект
8 More Lives не появилась сразу как цельная, полностью сформированная игра. Её особенности выросли из нескольких прототипов, экспериментов и уроков, накопленных за последние десять лет. Вот несколько идей, которые сформировали игру такой, какой вы видите её сегодня.
Пошаговые средневековые сражения
Я уже пытался сделать пошаговую игру о средневековых сражениях. Самый ранний прототип с похожей идеей появился ещё в 2015–2016 годах. Это был своего рода «средневековый XCOM», и некоторые системы из нынешней игры существовали уже тогда. Сражаться нужно было с демонами. Прототип собрался довольно быстро, но дальше itch.io дело так и не пошло.

Главный урок заключался в том, что средневековый строевой бой плохо сочетался с управлением отрядом в духе XCOM, направлениями атак и защиты и квадратной сеткой. От большей части этих идей пришлось отказаться. Игра была медленной и громоздкой, хотя такие задумки, как разное количество Очков Действий и радиальные интерфейсы, уже выглядели неплохо.
Примерно тогда же вышла Battle Brothers. Оригинальная версия без дополнений была немного бедна контентом, но с точки зрения механик работала именно так, как нужно. Идея сделать собственную игру отошла на второй план, а я отправился играть в Battle Brothers — ведь я, по сути, получил именно ту игру, которую пытался создать сам.

Процедурная генерация мира, биомы и поворот карты
В 2019 году мне захотелось сделать для Civilization V не очередной генератор «островов из шума», а систему, которая сначала учится на формах настоящего рельефа, а затем превращает результат в пригодную для стратегии карту.
Откуда брались данные
Основой стала SRTM-30 — глобальная карта высот, полученная в рамках Shuttle Radar Topography Mission NASA/JPL с шагом около 30 угловых секунд. Для игры она была слишком большой и «сырой», поэтому сперва пришлось построить отдельный конвейер подготовки данных.
TIFF‑файлы переводились в PNG, после чего из них скользящим окном вырезались фрагменты 1081×1081 с шагом 200 пикселей. Высоты нормализовались и раскладывались по 11 диапазонам. Слишком пустые, слишком заполненные и почти плоские куски отбрасывались: доля суши должна была быть примерно 15–85%, стандартное отклонение классов высоты — больше 1,25, а среднее и медиана попадать в заданные интервалы. Так в выборке оставались карты с читаемыми берегами и заметным рельефом.
Затем примеры сортировались по тому, к каким границам подходит суша. Фрагменты отражались и комбинировались, чтобы береговые линии можно было продолжать без очевидных швов. Длинные прямые контуры находились через Canny и преобразование Хафа, разбивались фрактальным шумом и сглаживались. Если суши оставалось меньше 44%, пример смешивался с другими картами. В конце изображения поворачивались, масштабировались и приводились к 256×256 оттенкам серого.
Как обучалась модель
На этой выборке обучался GAN. Обучение шло через BCEWithLogitsLoss.

Во время генерации одной нейросетевой выборки было недостаточно. Модель запускалась заново, пока суша не переставала упираться в края. Если она занимала меньше 40% поля, алгоритм находил самый большой пустой прямоугольник и вставлял туда ещё один сгенерированный фрагмент, масштабируя его под свободное место. Так получались не только одиночные острова, но и более сложные материки.
Что происходило после GAN
GAN отвечал только за правдоподобный силуэт и крупные формы высот. Дальше начиналась обычная процедурная симуляция. Высота разбивалась на 11 уровней; границы карты принудительно становились океаном; по плотности суши вокруг клетки различались берег, глубокая и сверхглубокая вода. Перепады между соседями превращались в холмы, горы и обрывы, а отдельный слой фрактального шума задавал геологическую активность.
Влага распространялась от океана и рек, теряя силу с расстоянием и при подъёме в горы. Истоки рек выбирались среди гор и наиболее влажных клеток, после чего русло искало путь вниз и могло соединяться с другими реками или образовывать озёра в понижениях. Температура зависела от широты, высоты и соседства с водой; в коде уже была заложена поправка примерно 6,5 °C на километр. Затем таблица из 25 диапазонов влажности и 23 диапазонов температуры выбирала один из 15 биомов, а поверх неё появлялись леса, болота, пустыни, рифы и игровые ресурсы.
Генератор получился отличным, но встроить его в Civilization V мне так и не удалось. Зато код, подготовленная выборка и сама идея цепочки «рельеф → вода и климат → биомы → игровые правила» сохранились.

Как эта логика превратилась в генератор 8 More Lives
Позже этот заброшенный эксперимент стал основой глобальной карты 8 More Lives — но переносить нейросеть в игру целиком оказалось неразумно. Один только сохранённый checkpoint генератора весит около 213 МБ. К нему пришлось бы добавлять runtime, операции для инференса, память на промежуточные тензоры и отдельную поддержку Windows, macOS, Linux и будущих консолей. Для системы, которая нужна лишь несколько секунд при создании мира, это слишком высокая цена по размеру билда, времени запуска, тестированию и сертификации платформ.
Сама карта в игре тоже гексагональная — это не прямоугольное поле, обрезанное маской. При размере 100 от центра до каждой из шести граней лежит 100 гексов, поэтому в мире получается 1 + 3R(R + 1) = 30 301 ячейка. Сейчас в игре доступен только один стиль генерации — Континент. Всю карту можно вращать вокруг центра шагами по 30°: для каждого гекса заранее рассчитываются 12 состояний поворота, чтобы рельеф и границы корректно читались с любой стороны.
От обученной модели мы отказались, но сохранили её уроки. Текущий генератор начинает с шести октав детерминированного шума: координаты переводятся в гексагональное пространство, на каждой октаве частота удваивается, амплитуда уменьшается вдвое, а результат нормализуется. Один и тот же seed даёт один и тот же мир без внешней модели и платформенных различий.

Поверх шума накладываются эвристические правила. В случайном регионе формируется более спокойная равнина, в другой области — высокое плато. К каждой из шести граней высота принудительно уходит ниже уровня моря, поэтому океан окружает материк со всех сторон. Фьорды строятся не прямыми лучами: генератор проводит от выбранного участка побережья несколько ломаных с промежуточными смещёнными точками и расширяет вырез вокруг русла.
Затем непрерывная высота раскладывается по 21 порогу. Замкнутые низины внутри материка на этом шаге возвращаются в сушу: позже отдельный генератор сможет превратить подходящие из них в озёра.
Следом генераторы добавляют реки, броды и озёра.



После гидрографии генератор рассчитывает климат.
Температура меняется от −25 до +50 °C вдоль карты и понижается с высотой. Влага распространяется очередью приоритетов от океана, рек и озёр, на каждом шаге умножается примерно на 0,885 и теряется при подъёме и в дождевой тени. Один из тёплых секторов специально получает мало осадков, для генерации большой пустыни.


Небольшие отдельные шумовые поля добавляют локальные колебания температуры и осадков. После этого таблица из 24 диапазонов влажности и температуры выбирает арктику, тайгу, умеренный биом, саванну или пустыню. Затем появляются холодные пустыни, особенности клеток, ручьи, регионы, деревни, дороги и города.


Боевая карта и улучшения

Во время пандемии заниматься было особо нечем, и прямо посреди «самоизоляции», в мае 2020 года, мне пришла безумная идея откопать старый проект и посмотреть, что интересного можно сделать со средневековой пошаговой тактикой. В то время единственной по‑настоящему «большой» игрой в этом жанре всё ещё оставалась Battle Brothers, поэтому вопрос постепенно свёлся к следующему: «Что я могу сделать такого, чего нельзя реализовать модами для Battle Brothers?»
Первым ответом стал поворот карты.

Затем появились биомы, и игра уже могла генерировать боевые карты для нескольких биомов сразу. Изначально их было ещё больше, да и на самом деле они до сих пор есть в игре, просто пока скрыты. Мы будем постепенно возвращать их по мере готовности графики.

Генерация боёв на основе глобальной карты
А что ещё я могу сделать?

Давным‑давно вышла великая и ужасная Rome: Total War, в которой карты сражений процедурно генерировались на основе глобальной карты кампании. Так чем же я хуже? И я начал возрождать забытую технологию двадцатилетней давности.
И вуаля — теперь карты сражений генерируются один к одному, воспроизводя в тех же местах те же биомы и особенности, что и на глобальной карте.
Большие юниты, маленькие юниты и девять жизней
Что ещё можно добавить в игру? Как насчёт больших и маленьких юнитов? Одногексовых юнитов недостаточно!

С большими юнитами уже можно сражаться, а маленькие вернутся в игру в ближайшем будущем.
Примерно на этом этапе появились и коты — ведь девять жизней отлично подходят на роль игровой механики. Новичкам они дают небольшую страховку, а опытным игрокам позволяют рисковать и раньше ввязываться в интересные сражения.
К тому же как референсы в голову пришли «Рэдволл» и диснеевский «Робин Гуд», так что оставалось лишь добавить немного мрачного фэнтези.

То, что в двух наших предыдущих играх главными героями тоже были коты, — чистое совпадение. Определённо. Сто процентов. А ещё вот вам мой кот.
Удобство для стратегической игры
К 2024–2025 годам прототип стал достаточно играбельным, чтобы я мог уделять больше внимания удобству и качеству игрового процесса. Мне нужно было доказать остальной команде, что этот симулятор Excel с котами — действительно игра, в которую могут играть люди.

Я не занимался проектом постоянно. Большая часть работы шла по вечерам — с заглушками, Paint и всем остальным, что оказывалось под рукой. Но именно тогда начали появляться вложенные подсказки, гиперссылки внутри текста и многие другие функции, которых мне постоянно не хватает в стратегиях, — мелочи, делающие сложные игры гораздо удобнее.

Правдоподобное историчное оружие и слои брони
Ещё одна идея, которую нам нужно было проверить, — использование правдоподобного исторического оружия и доспехов. Не с точностью исторической реконструкции, но гораздо ближе к реальности, чем в большинстве игр. Это особенно важно, поскольку в игре есть система многослойной брони.

Лично для меня всё это очень важно, но оставался вопрос: много ли игроков разделяют этот интерес? К счастью, вышла Kingdom Come: Deliverance II, стала хитом и немного развеяла мои опасения.
От закрытого прототипа к открытому плейтесту
В октябре 2025 года один стример сыграл в прототип. Он провёл два часа в совершенно сырой, наполовину сломанной версии игры — и она ему понравилась! Зрителям тоже.

Так мы добрались до февраля 2026 года и начала полноценной разработки — небольшого окна между «наш билд уже достаточно хорош» и «весь мир будет играть в GTA 6», когда мы наконец можем показать вам игру.
Мы добавляем контент и механики, полируем всё, что уже сделано, и готовим игру к выходу в Steam — начиная с плейтеста. Так что присоединяйтесь! Участвуйте в плейтесте, присылайте нам отзывы и добавляйте игру в желаемое!
Добавляйте в желаемое, записывайтесь на плейтест!
Ссылочка на Steam, если захотите добавить в вишлист и записаться на плейтест:


