DEVLOG · АРХИВ

Дневник разработки: август 2026

Что команда MineAge 2 сделала в августе 2026: 51 запись о переносе мира Lineage 2, движке FractureFront и игровом клиенте.

Листва и решётки стали прозрачными

Листва и решётки стали прозрачными — изображение 1

Что сделали. Прозрачность и вырезание по маске теперь работают для листвы, лиан, цепей и травы. В трёх регионах найдено 114 таких поверхностей.

Для чего. Теперь объекты выглядят как должны и не закрывают сцену сплошными…

Подземелье Аннигиляции: вернулись поверхности

Подземелье Аннигиляции: вернулись поверхности — изображение 1

Что сделали. Движок начал отдельно обрабатывать две текстуры у материалов с маской. В кадр вернулись 8 поверхностей, аудит материалов снизился с 69 до 61.

Для чего. Так пропавшие части подземелья снова видны игрокам.

Плотность материалов теперь считается точнее

Плотность материалов теперь считается точнее — изображение 1

Что сделали. Texel density теперь считается по реальным граням, а не по старому material byte. Убрано 8 ложных отказов.

Для чего. Проверка локаций стала точнее и не режет хорошие объекты.

Отдельная opacity для материалов локаций

Отдельная opacity для материалов локаций — изображение 1

Что сделали. Shader.Opacity теперь берёт альфу из отдельной opacity текстуры, а не из diffuse. StaticSceneIndex V4 хранит обе текстуры.

Для чего. Так прозрачность в локациях работает точнее и стабильнее.

Игрок теперь бьёт в реальном бою

Игрок теперь бьёт в реальном бою

Что сделали. Fighter игрока подключён к сессии и повторяет удар по подтверждённой атаке; PvE сохранил смерть, награду и инвентарь.

Для чего. Бой стал заметно ближе к реальной игре.

Закрыт хвост текстур региона

Закрыт хвост текстур региона

Что сделали. Representative регион 20 21 теперь публикует 2040 размещений и 133 модели без пропусков и подмены текстур.

Для чего. Игроки видят статические объекты так, как они заданы в оригинале.

Декор стал отдельными живыми объектами

Декор стал отдельными живыми объектами

Что сделали. В регионе 20 21 три Mover с разными смещениями и collision state теперь остаются отдельными entity; mesh и материалы переиспользуются.

Для чего. Так декор двигается и сталкивается правильно.

Контракт анимаций для Lineage 2

Контракт анимаций для Lineage 2

Что сделали. Добавлен первый source backed AnimationIR для NPC хранителя склада: 63 кости, клип Wait Hand на 54 кадра, root motion без серверного движения.

Для чего. Это сохраняет точную анимацию и не ломает перемещение в игре.

Будущие городские сцены получили честную точку отсчёта

Будущие городские сцены получили честную точку отсчёта

Что сделали. Мы выбрали насыщенный реальными объектами регион для тестирования крупных локаций. Это позволит нам получить более точные замеры производительности.

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

Быстрый контур одного объекта

Быстрый контур одного объекта

Что сделали. Отладка движкового рендера больше не требует подготовки всего тяжёлого региона: выбранный объект компилируется отдельно вместе с точными материалами и коллизией, не затрагивая моды, террейн и соседние объекты.

Для чего. Цель этой работы в патчноуте пока не указана.

C++ spatial manager для StaticSceneIndexV1

C++ spatial manager для StaticSceneIndexV1

Что сделали. В движке появился payload-free consumer для статического индекса: ресурсы группируются по activation cell, при активации выдаются в стабильном порядке, а неполные и дублирующиеся ссылки отклоняются fail-closed. Startup transport и renderer пока не переключены — это отдельный проверенный gate.

Для чего. Цель этой работы в патчноуте пока не указана.

Чистая проверка объекта с двух сторон

Чистая проверка объекта с двух сторон

Что сделали. Движковый объект теперь автоматически проверяется сверху и в изометрии в пустой лаборатории — без HUD, руки, террейна и соседних акторов. Оба ракурса воспроизводятся одинаково на чистом и повторном запуске.

Для чего. Цель этой работы в патчноуте пока не указана.

Чистая сборка больше не ломает короткий цикл отладки

Чистая сборка больше не ломает короткий цикл отладки

Что сделали. После полной очистки движок автоматически восстанавливает готовый отладочный клиент и проверяемый список его файлов. Минимальная сцена снова запускается сразу, без ручной пересборки и влияния устаревшего кэша.

Для чего. Цель этой работы в патчноуте пока не указана.

Движковый объект появился в настоящем ландшафте

Движковый объект появился в настоящем ландшафте

Что сделали. Первый выбранный объект загружается напрямую движком в своей исходной позиции среди обычного ландшафта. Чистый кадр подтверждает отсутствие отладочного интерфейса, Lua-дубликатов и тяжёлой загрузки всех объектов региона.

Для чего. Цель этой работы в патчноуте пока не указана.

Движок читает StaticSceneIndexV1

Движок читает StaticSceneIndexV1

Что сделали. C++ spatial manager теперь напрямую принимает JSON partition статического индекса и до активации проверяет ResourceId, хэши, bounds, материалы, collision linkage и принадлежность объектов своим spatial cells. Несвязный или повреждённый индекс отклоняется целиком без частичной регистрации.

Для чего. Цель этой работы в патчноуте пока не указана.

Холодная генерация мира стала быстрее

Холодная генерация мира стала быстрее

Что сделали. Генератор мира больше не повторяет обработку климата, воды и растительности в подземных вертикальных чанках. Холодная загрузка тестовой сцены ускорилась, а скрытые подземные водяные и почвенные слои устранены без отключения терраформирования.

Для чего. Цель этой работы в патчноуте пока не указана.

Крепостная башня стала настоящей частью игрового пространства

Крепостная башня стала настоящей частью игрового пространства

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

Для чего. Это улучшение делает взаимодействие с окружением более реалистичным и увлекательным для игроков, добавляя новые тактические возможности.

Перенесённые постройки Крумы впервые увидели в игре — акведук стоит целиком, без единого разрыва

Перенесённые постройки Крумы впервые увидели в игре — акведук стоит целиком, без единого разрыва

Что сделали. Мы улучшили отображение построек региона Крумы, теперь акведук и осадная башня выглядят целостно и без разрывов.

Для чего. Это важно для стабильности игры и эстетики мира. Теперь игроки могут наслаждаться красивыми и непрерывными постройками без визуальных артефактов.

Первый объект напрямую в движке

Первый объект напрямую в движке

Что сделали. Исходная секция стены теперь загружается и рисуется прямым C++-контуром без модового реестра, террейна и соседних объектов. Движок корректно удерживает её на больших мировых координатах при смещении камеры и полностью выгружает после выхода из зоны.

Для чего. Цель этой работы в патчноуте пока не указана.

Половина построек Крумы не переносилась из-за текстур, которых нигде не видно

Половина построек Крумы не переносилась из-за текстур, которых нигде не видно

Что сделали. Разбирались, почему часть подземелья нельзя загрузить в игру: у зданий якобы не хватало текстур. Оказалось, что многие такие "нехватки" — фикция. В моделях Lineage 2 нередко объявлен материал, которым в итоге не покрашена ни одна грань: слот есть, а поверхности у него нет. Наш конвейер честно отказывался придумывать для него параметры и помечал здание неполным — хотя показывать там нечего и терять нечего. Теперь такой слот отмечается как неиспользуемый: ничего не подставляется, просто фиксируется, что потребителя нет. Доставка построек региона выросла с 1034 до 1537 из 2040. Отдельно стоит сказать про метод: сперва мы решили, что дело в неподдержанном типе блеска, потому что так выглядела первая же попавшаяся диагностика. Пересчитали причины по всем материалам — блеск оказался виноват в трёх случаях из сорока шести. Если бы взялись починять по первому впечатлению, потратили бы время и не сдвинули почти ничего.

Для чего. Цель этой работы в патчноуте пока не указана.

Проверили ограничение, из-за которого не переносятся последние залы — оно защищает не то, что мы думали

Проверили ограничение, из-за которого не переносятся последние залы — оно защищает не то, что мы думали

Что сделали. После сегодняшних правок не переносятся только 35 построек, и все по одной причине: у них слишком дробная физическая поверхность, а в движке стоит предел на её дробность. Откуда взялось само число, в проекте не записано нигде, поэтому мы не стали его двигать наугад, а проверили. Предположение было такое: чем больше кусочков физики, тем дольше строится кусок мира. Загрузили в мир вчетверо больше таких кусочков, чем сейчас, и замерили время постройки — разницы нет, она тонет в обычном разбросе между запусками. То есть на генерацию мира это ограничение не влияет. Предел мы всё равно не подняли: доказано только то, что он не бережёт генерацию, а не то, что он не нужен вовсе — расход памяти, размер сохранения и стоимость столкновений при беге игрока ещё не мерили. Отдельно стоит сказать, что первый заход этот замер провалил: инструмент незаметно пересобирал данные и обе половины опыта оказались одинаковыми. Ошибку нашли, опыт переделали, и в записях осталось описание ловушки, чтобы на неё не наступили снова.

Для чего. Цель этой работы в патчноуте пока не указана.

Регион переносится целиком: 2040 построек из 2040, ни одного отказа

Регион переносится целиком: 2040 построек из 2040, ни одного отказа

Что сделали. Утром собиралось три четверти построек региона, теперь собираются все. Последней помехой было ограничение на дробность физической поверхности — число, которое когда-то поставили, но нигде не объяснили. Мы его не стали просто поднимать. Сначала проверили, что оно бережёт: время постройки мира, размер сохранения, служебные файлы — ничего из этого от него не зависит. А потом выяснилось главное: после недавней правки, которая режет геометрию по границам ячеек мира, деталь физически не может выйти за свою ячейку. Значит у её сложности появился естественный потолок, и ограничение теперь не выдумано, а посчитано от размера ячейки — ровно половина от предельно возможного. Самая тяжёлая деталь во всём регионе использует меньше половины этого запаса. Отдельно скажем о том, чего делать не стали: цифру 100% легко нарисовать, отключив проверки. Здесь она получена компиляцией — число кусков геометрии совпало с независимым замером, сделанным до правки, а проверка того, что движок вообще умеет сообщать об ошибках, осталась в тестах отдельным пунктом.

Для чего. Цель этой работы в патчноуте пока не указана.

StaticSceneIndexV1 для статической сцены

StaticSceneIndexV1 для статической сцены

Что сделали. Статическая сцена региона 20_21 теперь передаётся в runtime через версионированный индекс: 2039 размещений, 13061 render chunk и 13061 collision reference разбиты на 44 проверяемые partition. Контракт сохраняет исходные ResourceId, хэши, bounds, материалы и collision-ссылки без копирования GLB/PNG в runtime payload.

Для чего. Цель этой работы в патчноуте пока не указана.

Столкновения готовы только после расстановки

Столкновения готовы только после расстановки

Что сделали. Столкновения с постройками теперь помечаются готовыми только после первой записи в карту. Проверка: 1189 из 1189, без ошибок.

Для чего. Мир стартует в правильном порядке и без ложной готовности.

Террейн подключён к поколению WorldManifest

Террейн подключён к поколению WorldManifest

Что сделали. Luanti теперь проверяет content-addressed terrain root и строит из одного поколения высоту, тип поверхности и воду. Terrain подтверждает готовность только после установки реального consumer; за пределами bounded tile старый рельеф не подмешивается. Полная активация всё ещё ждёт collision/navigation.

Для чего. Цель этой работы в патчноуте пока не указана.

Точный движковый объект подключён к реальной сцене

Точный движковый объект подключён к реальной сцене

Что сделали. Отладочный контур теперь может загрузить один выбранный объект напрямую в движок вместе с обычным ландшафтом, не собирая весь регион и не создавая вторую Lua-копию. Контур также отличает подземные объекты от подходящих видимых примеров и учитывает точный объект в адресе кэша.

Для чего. Цель этой работы в патчноуте пока не указана.

Впервые собрали движок из исходников и увидели башню Lineage 2 внутри него своими глазами

Впервые собрали движок из исходников и увидели башню Lineage 2 внутри него своими глазами

Что сделали. Мы успешно собрали движок из исходников и увидели осадную башню из Lineage 2 в мире Luanti. Это первая демонстрация реальных текстур и геометрии из оригинального клиента.

Для чего. Теперь мы можем уверенно утверждать, что процесс переноса зданий завершён. Это важно для дальнейшей работы над миром Luanti и для создания качественного игрового опыта.

Выяснили, во что на самом деле обходится физика залов — три статьи расходов проверены, предел не оправдался ни одной

Выяснили, во что на самом деле обходится физика залов — три статьи расходов проверены, предел не оправдался ни одной

Что сделали. Продолжаем разбираться с ограничением, из-за которого не переносятся последние 35 построек. Проверили три возможные причины, ради которых его когда-то поставили. Время постройки куска мира — не меняется даже при вчетверо большей нагрузке. Размер сохранения игры — не меняется вовсе, и этому есть внятное объяснение: мир хранится блоками целиком, а физика лишь занимает место воздуха внутри блоков, которые и так сохранялись. Единственная найденная цена — служебный файл с описанием построек: он растёт ровно на 27 байт за каждую ячейку физики. Это немного, но это первое настоящее число вместо догадок. Ограничение мы по-прежнему не трогаем: непроверенными остаются расход памяти и стоимость столкновений, когда игрок бежит вдоль стены. Смысл этой работы не в том, чтобы поскорее поднять предел, а в том, чтобы он однажды опирался на замер, а не на чьё-то давнее предположение.

Для чего. Цель этой работы в патчноуте пока не указана.

Загрузили в движок половину региона разом и нашли, где он действительно упрётся

Загрузили в движок половину региона разом и нашли, где он действительно упрётся

Что сделали. Раз постройки теперь переносятся все, пора было узнать, выдержит ли движок целый район. Загрузили нарастающими порциями — двести домов, пятьсот, а потом всё, что вообще можно доставить сегодня, тысячу с лишним. Хорошая новость: время постройки куска мира не выросло ни на сколько, от малой порции до полной оно одинаковое. То есть сам способ показывать здания движок тянет. Плохая новость нашлась в другом месте: служебный список построек, который движок читает при запуске, разросся до 24 мегабайт — и это лишь на половину района. Игра с ним запускается, но это уже та величина, с которой придётся что-то делать. Отдельно выяснилось, что доставить сегодня можно ровно половину района: у остальных зданий не находятся текстуры, и это отдельная задача, которая раньше не значилась помехой.

Для чего. Цель этой работы в патчноуте пока не указана.