StellarStudio

StellarStudio

Tg: https://t.me//StellarTale Наш сайт: astro-genesis-modpack.vercel.app
На Пикабу
133 рейтинг 5 подписчиков 1 подписка 4 поста 0 в горячем
10

Фабрика размером с галактику: как мы выковали «МОНОЛИТ» на 470 модов. Часть 4: Мины в коде 2.0, алгоритм Тарьяна и тест чистым листом⁠⁠

Привет всем инженерам и повелителям конвейерного хаоса!

В прошлой части мы остановились на Боли №8— когда мы наконец-то поженили деревянную паропанк-цивилизацию Лигнумиса с космической экспансией Space Age, выпилили бесконечные дюпы материи и даже встроили собственный мод на био-инженерию (rasta-cultivation).

Казалось бы: баланс причёсан, рецепты согласованы, карта галактики сияет. Пора садиться и с кайфом лететь к звёздам?

Как бы не так. Настоящий босс-файт начался, когда мы решили провести стресс-тестирование на длинной дистанции. И сегодня я расскажу, как скрытые изменения в движке Factorio 2.0 взрывали игру на 40-м часу, как математика спасала нас от софтлоков и зачем мне пришлось полностью снести игру с компьютера, чтобы доказать жизнеспособность Монолита.


Боль №9: Мина замедленного действия от Wube и внезапная смерть модов

Самый подлый и коварный кошмар любого мододела — это когда игра крашится не на старте, а спустя десятки часов прохождения.

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

Вскрытие логов показало вещь, от которой у меня задергался глаз.
В Factorio 2.0 разработчики из Wube проделали колоссальную работу по чистке движка, попутно вырезав устаревшие сущности. Одной из таких жертв стала сущность flying-text (всплывающий текст над зданиями). В 2.0 её физически удалили, заменив на современный графический API rendering.draw_text.

Но авторы старых модов об этом, естественно, не знали! В скриптах дальних дронов и агро-ферм черным по белому было прописано:
surface.create_entity({ name = "flying-text", text = "Груз доставлен" }).

В старой версии игры это рисовало безобидные буковки. В Factorio 2.0 движок пытается создать сущность, которой больше в природе не существует, ловит панику и роняет весь процесс.

Мне пришлось написать собственный поисковый сканер, прогнать через него файлы всех 470 модов, выловить все до единого вызовы удалённого flying-text и хирургически переписать их на нативный rendering.draw_text. Теперь всплывающие плашки рисуются легковесно и больше не взрывают игру при разгрузке дрона.


Боль №10: Демонтаж стеклянных колб и великая цифровая революция

Вторая проблема, которая не давала мне покоя — эстетическое и логическое несоответствие науки.

В ванильной Factorio вы варите цветную жидкость в стеклянных бутылочках и скармливаете лабораториям. На Наувисе в эпоху пара и шестерёнок это выглядит мило. Но когда вы строите термоядерные корабли, бороздите гиперпространство и интегрируете тяжелый хардкор из Krastorio 2, таскать в грузовых ракетах ящики с разноцветными склянками ощущается полным абсурдом.

Мы устроили масштабную научную революцию:

  1. Прощайте, колбы: Вся исследовательская ось была переведена на исследовательские карты данных (Tech Cards), квантовые процессоры и чипы симуляций.

  2. Космические вычисления: Лаборатории поздней игры перестали быть алхимическими котлами — теперь это настоящие серверные станции. Чтобы исследовать глубокий космос, ты привозишь на орбиту пустые матрицы данных, облучаешь их радиацией звезд, собираешь телеметрию с астероидных буров и записываешь чистые исследовательские данные.

  3. Синхронизация 33 000+ рецептов: Перевязать науку так, чтобы ни один из сотен модовых рецептов не потерял свои ингредиенты и не застрял в воздухе, потребовало филигранной правки таблиц данных. Зато теперь технологический прогресс выглядит монолитно и взросло.


Боль №11: Математическое доказательство проходимости (Алгоритм Тарьяна)

Когда в твоей сборке 2 359 технологий и сотни планет, главный ночной кошмар звучит так: СОФТЛОК.
Представьте: вы наиграли 150 часов, прилетаете на далекую планету за редким изотопом, а игра требует станок, чертеж которого открывается исследованием, требующим этот самый изотоп. Замкнутый круг. Сейв запорот, 150 часов жизни на свалку.

Проверить такое дерево глазами — нереально. Поэтому я решил доказать проходимость математически:

  • Вся база знаний сборки была выгружена в реляционную базу данных.

  • Мы прогнали по всему графу технологий алгоритм Тарьяна для поиска циклов (SCC). Алгоритм подтвердил абсолютную ацикличность (DAG Clean): в дереве исследований ровно 0 циклов и 0 тупиков.

  • Поверх этого был запущен виртуальный симулятор реального игрока, который шаг за шагом прогнал цепочку крафтов от самого начала до титров:

    • Старт на деревянном Лигнумисе (где нет ни единой крупицы железа, меди или угля — только пар, торф и золото);

    • Создание первой самодельной ракеты и перелёт на Наувис;

    • Выход на спутник Мулуна, покорение планетного треугольника Вулканус / Фульгора / Глеба;

    • Криогеника на ледяном Аквило и финальный марш-бросок на космической платформе по маршруту Дейкстры длиной 21 105 000 километров сквозь астероидные поля к Shattered Planet.

Симуляция завершилась со статусом 100% Reachable. Игра физически и логически проходима от первого добытого бревна до финала.


Боль №12: Испытание «Чистым листом»

Последний рубеж паранойи: «А вдруг сборка работает только у меня, потому что в системе годами копились какие-то остаточные конфиги и кэши?».

Чтобы отмести любые сомнения, я пошёл на радикальный шаг:

  1. Снёс игру под корень: Удалил Factorio, вычистил папку в AppData, удалил все пользовательские настройки и временные профили.

  2. Скачал чистейшую ванильную Factorio 2.0 Space Age из Steam.

  3. Провел тотальную ревизию папки mods: оказалось, что в процессе экспериментов там накопился почти гигабайт (!) скрытых бэкапов, тестовых скриптов и архивных копий. Я безжалостно вычистил весь этот мусор, оставив исключительно рабочие моды, mod-list.json и mod-settings.dat.

  4. Накатил сборку на чистую игру и запустил консольный гаунтлет движка.

Сборка сгенерировала эталонный мир сохранения размером почти 9 МБ и открутила безголовый бенчмарк в 120 тиков со статусом:
Exit Code: 0, Runtime Errors: 0, Runtime Warnings: 0.

Игра стартует «из коробки», сразу на русском языке, без единого конфликта или танцев с бубном.


Эпилог: Монолит готов

То, что начиналось как безумная идея «накатить всё, что есть в мастерской», превратилось в полноценную, математически выверенную космическую оперу на 470 модов.

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

Фабрика должна расти. И теперь для этого открыта целая галактика. 🚀

Если вам интересны детали оптимизации VRAM под такие мегасборки или то, как разруливать конфликты в скриптах — добро пожаловать в комментарии, с удовольствием пообщаемся!

Показать полностью
7

Фабрика размером с галактику: как мы выковали «МОНОЛИТ» на 470 модов, закрыли дыры во вселенной и победили читеров (Часть 3)⁠⁠

Привет всем инженерам, автоматизаторам и тем, кто меряет время не часами, а пропускной способностью синих конвейеров!

В

первой частия рассказывал, как наивная идея «поставить парочку модов к Space Age» превратилась в монстра на 470 дополнений, а вовторой— как я вытаскивал планеты из текстуры пылающего Солнца и воевал с ограничением движка Wube на вложенность строк (21 > 20).

Казалось бы: игра запускается, звёзды на карте горят, меню не падает. Заходи и строй ракеты!

Но как только я нажал «Новая игра» и реально попытался пройти этот колосс, передо мной встал главный, самый страшный босс любого мододела: БАЛАНС.

Сборка жила по законам дикого запада. Одни моды открывали бесконечные ресурсы из грязи на первой минуте, другие требовали для постройки ракеты ресурсы с планет, на которые нельзя улететь без этой самой ракеты (петля времени, привет!).

Сегодня расскажу, как мы написали собственный мастер-мод Astro-Genesis-Ultimate, переписали сотни связей в дереве технологий и превратили неуправляемую кучу модов в хардкорный монолит.


Боль №6: Дыры в пространстве и петли времени в дереве науки

Когда у тебя в игре переплетены десятки модовых планет (Лигнумис, Веста, Мараксис, Коррундум, Кастра и ванильный Space Age), дерево технологий превращается в клубок спагетти, которому позавидует любой завод на Наувисе.

Проводя аудит прогрессии, я наткнулся на две крайности:

  1. Читерские шорткаты. Автор одного популярного мода добавил рецепт термоядерного реактора и синтеза материи, но забыл привязать его к космическим технологиям. Итог: сидя на базовом железе и угле Наувиса, можно было открыть endgame-энергетику еще до того, как ты впервые собрал синий процессор. Зачем лететь в космос? Зачем строить флот платформ? Смысл игры просто испарялся.

  2. Временные парадоксы. Другой мод требовал для исследования технологии посадочных двигателей… фиолетовые колбы с планеты, куда ты физически не можешь сесть без этих двигателей! Классический софтлок: чтобы сделать шаг вперед, тебе нужно уже быть там, куда ты идешь.

Пришлось писать собственный релинкер технологий (hardcore-tech-relinker.lua). Мы прогнали скриптом всё гигантское дерево из тысяч исследований, вычистили все паразитные шорткаты и намертво завязали прогрессию: хочешь передовую электронику — изволь сначала покорить Фульгору и Коррундум; хочешь квантовую гравитацию — без редких газов с Весты и сплавов с Вулкануса ты её не получишь. Никакой халявы.


Боль №7: Санитайзер материи и смерть халявных дюпов

Второй ад — это рецепты и конвертация материи.
В сборке стояли продвинутые моды на манипуляцию веществом (K2 Matter и аналоги). Сама идея крутая: в глубоком эндгейме расщеплять тяжелые элементы на кварки и собирать нужные металлы.

Но когда моды перемешались, экономика совершила суицид:

  • Игрок мог засунуть дерево в переработчик, получить органическую материю, конвертировать её в редкие минералы, а из них сделать… еще больше деревьев. Получался вечный двигатель с профитом в 300% сырья из воздуха.

  • Механика порчи (Spoilage) из Space Age на Глебе — ключевой хардкорный челлендж DLC — легко ломалась через сторонние крио-камеры и мгновенные стабилизаторы. Зачем строить скоростные логистические магистрали, если можно просто заморозить биомассу в кармане?

Чтобы игра не превращалась в детский сад, мы разработали два хирургических модуля: hardcore-recipe-sanitizer.lua и hardcore-spoilage-sanitizer.lua.
Они сканируют базу рецептов при загрузке, вычисляют петли с положительным выходом материи и безжалостно режут коэффициенты. Сборка снова стала тем, чем и должна быть Factorio: инженерной головоломкой, где за каждую тонну ресурса нужно бороться.


Боль №8: Синтез миров — как Лигнумис подружился со Space Age

Одной из самых смелых идей было подружить Лигнумис (огромный мод, заменяющий металлургию паровыми и древесными технологиями) с космической экспансией Space Age.

Поначалу они вели себя как кошка с собакой:

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

  • Теплицы и био-фермы дублировали друг друга, засоряя меню десятками одинаковых крафтов древесины с разницей в одну миллисекунду.

Мы написали связующий модуль advanced-expansions-bridge.lua и систему Планетарных синергий (planetary-synergies.lua).
Теперь ресурсы не просто сосуществуют — они жизненно необходимы друг другу! Древесные композиты и биологические полимеры Лигнумиса стали основой для теплозащитных экранов платформ, а криогенные охладители с Аквило позволили разогнать паровые турбины до запредельной эффективности. Планеты перестали быть изолированными песочницами — они сплелись в единую живую паутину галактической логистики.


Вишенка на торте: Свой собственный мод с нуля

Когда скелет «Астро-Генезиса» встал на ноги, мы пошли еще дальше. Чтобы закрыть пробелы в релакс-механиках и био-инженерии, мы с нуля разработали и встроили в сборку собственный мод — Rasta Cultivation (rasta-cultivation).

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


Сухой остаток: Что такое Astro Genesis сегодня?

После сотен часов кодинга, аудита тысяч строк Lua и бессчетных проверок движком:

  • Монолитная архитектура: наш мастер-мод Astro-Genesis-Ultimate полностью контролирует баланс, отсекая любые софтлоки и невозможные крафты.

  • 100% русская локализация: все кастомные рецепты, описания планет, лор и механики переведены на чистый русский язык (locale/ru).

  • Абсолютная стабильность: контрольный прогон через движок выдает чистый Exit code: 0 — мир генерируется с первого раза без единой ошибки в консоли.

  • Честный хардкор: 470 модов работают как один слаженный механизм, где каждая технология оправдана, а победа в космосе ощущается как настоящий триумф инженерной мысли.

Проект из безумного эксперимента вырос в нечто монументальное. Фабрика не просто растет — теперь она подчинила себе законы целой галактики.

Интересно услышать ваше мнение: как вы относитесь к модам на усложнение прогрессии? Любите, когда игра заставляет выжимать максимум из логики, или предпочитаете расслабленный ванильный темп?

Показать полностью
10

Фабрика размером с галактику: как я утопил 2 планеты в Солнце и сломал лимиты движка Factorio (Часть 2)⁠⁠

Привет снова, инженеры!

В прошлом посте я рассказывал, как наивная идея «собрать мега-сборку на Space Age» обернулась тремя месяцами раскопок в Lua и борьбой с рецептурным адом и UPS.

Сегодня хочу рассказать про вторую сторону этой медали: космическую навигацию, войну с авторами модов и баг, из-за которого игра вылетела с ошибкой, в существование которой я сначала вообще отказался верить.


Боль №3: Космос сошел с ума, или как вытащить планеты из Солнца

Когда базовые цепочки на Наувисе наконец заработали, пришло время взглянуть наверх — на звездную карту. В сборке сейчас суммарно больше шестидесяти космических тел (оригинальные миры, кастомные планеты, луны и орбитальные платформы).

Открываю карту галактики и наблюдаю прекрасное:

  1. Планеты-камикадзе внутри звезды.
    В самом центре системы ярко сияет главное солнце. А прямо внутри его текстуры, в пылающей фотосфере, беззаботно нарезают круги две орбитальные станции с солнечными коллекторами. Они буквально спавнились внутри диска звезды на нулевом радиусе.
    Пришлось лезть в data-final-fixes.lua, вспоминать полярные координаты, пересчитывать радиусы орбит и аккуратно выводить эти станции наружу, чтобы они вращались вокруг звезды, как нормальные рукотворные объекты, а не жарились в термоядерном аду.

  2. Черная дыра вместо созвездий.
    Вторая проблема — мододелы обожают делать крутые планеты, но совершенно не думают, как они выглядят вместе. В итоге за пределами Солнечной системы висели кучки планет посреди абсолютной черной пустоты. Ни звезд, ни ориентиров — просто летающие шары в темном подвале.
    Чтобы придать космосу масштаб и логику, я разметил карту на 5 удаленных звездных секторов («Кузница», «Океанический фронтир», «Крио-рубеж», «Энергетический сектор» и «Сингулярность Предтеч») и прописал каждому сектору свое яркое солнце-ядро. Теперь у дальних систем есть центр гравитации, а у космических кораблей — понятная навигация.


Боль №4: Обновление модов — игра в русскую рулетку на 475 патронов

Сборка живет, Factorio 2.0/2.1 активно допиливается, и разработчики модов тоже выкатывают обновления. На днях я решил провести ревизию: скачал свежие версии сразу для 63 модов.

Наивный расчет: «Авторы ведь исправили баги, станет только стабильнее».
Реальность: игра перестала запускаться примерно шестью разными способами.

  • Искусственные заборы. Автор одного популярного мода на луну просто взял и добавил в манифест зависимостей строчку ! janus (запрет на запуск с планетой Янус). Почему? «Ну, мне показалось, они тематически не очень сочетаются». То, что у сотен игроков они прекрасно сосуществовали, автора не смутило.

  • Привет из 2020 года. Скрипт подтянул с портала мод версии 1.1.6, посчитав его новее нашей 1.1.5. Только вот 1.1.5 была неофициальным свежим портом под Factorio 2.1, а 1.1.6 оказалась архивной версией пятилетней давности для старой игры.

  • Фатальный nil. В библиотеке тепловых расчетов разработчик в патче решил причесать код интерфейса и… случайно снес строчку проверки if not storage.players. Итог: при любой попытке загрузить существующую карту движок пытается опросить несуществующего игрока и вываливается в Windows с крашем attempt to index field '?' (a nil value).

Пришлось вручную тестировать каждый чих, возвращать стабильные версии и патчить чужие «исправления».


Боль №5: Предел рекурсии Wube Software (21 > 20)

Но главный босс ждал меня на финальной стадии компиляции. Когда все зависимости сошлись, движок Factorio выдал лог, от которого у меня дернулся глаз:

Error while loading space-location prototype "erimos-prime": Too deep recursion for localised string: 21 > 20 (limit)

Что произошло?
В движке Factorio 2.1 есть жесткое ограничение: дерево локализованной строки (текста описания объекта) не может быть глубже 20 уровней вложенности.

А теперь следите за руками: есть планета Эримос Прайм.

  1. Первый мод дописывает ей свойства атмосферы: desc = { "", desc, "Текст 1" } (глубина 2).

  2. Второй мод добавляет статус орбитальной обороны (глубина 3).

  3. Третий мод вешает расчет загрязнения (глубина 4).

  4. Четвертый добавляет инфу о ресурсах…

К моменту, когда до планеты добрался 21-й мод со своим микро-описанием, строка превратилась в матрешку из 21 вложенной таблицы. И C++ парсер Wube просто выкинул белый флаг: «Лимит рекурсии превышен, я закрываюсь».

Лечилось это написанием собственного санитайзера в конце загрузки: скрипт пробегает по описаниям планет, рекурсивно раскручивает эту чудовищную матрешку, склеивает текстовые куски и запаковывает все обратно в плоский массив глубиной 1.


Что в сухом остатке?

На данный момент:

  • Все 475 модов засинхронизированы.

  • Контрольный прогон через движок выдал заветное: Prototype list checksum: 1364196656, exit code: 0.

  • Сохранения загружаются без единого предупреждения, а полет между секторами наконец-то похож на настоящее космическое путешествие, а не на блуждание по темному чулану.

Дальше останется лишь по ходу игры аккуратно полировать баланс отдельных рецептов.

А пока — чертежи готовы, поезда заправлены.

Фабрика должна расти.

Показать полностью
11

Как я убил 3 месяца на «сборку мечты» в Factorio 2.0 Space Age: 400+ модов⁠⁠

Привет, инженеры!

После выхода официального дополнения Space Age 2.0 у меня, как и у многих фанатов игры, снова зачесались руки. Пять ванильных планет — это круто, но когда наиграл в Factorio тысячи часов, хочется не просто слетать на Вулкан и Глебу, а развернуть настоящую галактическую империю масштаба Space Exploration и Krastorio, но на новом, ультра-быстром движке 2.0.

Наивный я думал: «Ну закину в папку модов Space Age, Krastorio 2, пару десятков планетных паков, настрою и буду кайфовать».

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

Боль №1: Мертвые петли рецептов и крафтовый ад

Когда соединяешь глубокие моды вроде AAI Industry, Krastorio 2 и сторонние планеты, игра неизбежно сходит с ума.

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

Пришлось вручную писать bridge-скрипты на этапе data-final-fixes.lua, чтобы выстроить логичную цепочку:

1. Плавный переход от базовых паровых механизмов к электричеству;

2. Единая металлургия без дублирования пяти разных видов железных плит из разных модов;

3. Интеграция качественных предметов (Quality) из Space Age во все сторонние производственные цепочки.

Боль №2: Война за 60 UPS (когда игра не прощает ошибок)

  • Каждый, кто строил межпланетные фабрики, знает это страшное слово — UPS (Updates Per Second). Когда у тебя на орбите висят десятки космических платформ, сотни поездов курсируют между станциями, а логистические дроны закрывают небо — игра быстро падает с 60 до 15–20 кадров, превращаясь в пошаговую стратегию.

    Пришлось провести тотальную чистку:

    1. Вырезать кривые скриптовые циклы в control.lua, которые опрашивали сущности каждый тик (on_tick).

    2. Оптимизировать конвейерные потоки под новые алгоритмы движка 2.0.

    3. Настроить космические платформы так, чтобы расчет падения астероидов не сжирал половину ресурсов процессора.

    Результат: даже при открытых 10+ планетных системах с активным производством счетчик стабильно держит 60.0 UPS.

Что получилось в итоге?

Получился монолитный проект под названием Astro-Genesis Ultimate 2.0:

  • 40+ планетных систем: ледяные бездны, радиационные пустоши, океанические миры с плавучими платформами и токсичные атмосферы, требующие специальной защиты.

  • Глубокая логистика: космические лифты, автоматические грузовые челноки и орбитальные стыковочные узлы.

  • Собственный эндгейм: загадочный сектор Предтеч «Астра» на дистанции 120 000 000 км с кастомными механиками антиматерии и сингулярности.

  • Полная стабильность: ни одного краша, чистый лог без красных строк и ошибок локализации.

    Делать такие масштабные оверхолы в одиночку — это адский труд, но когда видишь, как твой межпланетный экспресс привозит ресурсы из другой звездной системы на центральный сборочный узел, понимаешь, что каждая бессонная ночь того стоила. Фабрика должна расти!
    Спасибо за внимание)

    Позже опубликую скрины уже с игрой

Как я убил 3 месяца на «сборку мечты» в Factorio 2.0 Space Age: 400+ модов
Показать полностью 1
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества