Привет! Берите с собой лучшую смазку, потому что пришло время поговорить о жидкостях!
Переломный момент
Ни для кого не секрет, что гибкая система Factorio непредсказуема, не интуитивна и порой разочаровывает. Пропускная способность трубы уменьшается с расстоянием с непостоянной скоростью, поэтому единственный способ достоверно узнать, сколько жидкости вы можете протолкнуть через трубу, — это обратиться к таблице на вики . Кроме того, пропускная способность может варьироваться в зависимости от порядка построения труб. Играть с этой системой крайне неудобно.
Было много попыток переписать жидкостную систему, но все они по той или иной причине закончились неудачей. Существующий алгоритм довольно быстр и достаточно хорошо работает для стандартного ванильного игрового процесса, и мы постарались его не трогать, насколько это возможно. Однако во время тестирования Space Age стало ясно, что существующая система больше не справляется со своей задачей. Масштабирование производства, обеспечиваемое новыми машинами и качеством, поставило алгоритм потока на колени.
Почему это не работает!?
Пытаясь избежать полной перезаписи, мы сначала попробовали увеличить пропускную способность за счет увеличения объема канала. Это «решило» основную проблему низкой пропускной способности за счет значительного увеличения размеров буфера. Резервуары для хранения стали практически бесполезными, а оборонительные стены с огнеметными турелями вбирали десятки тысяч единиц жидкости, высасывая базы досуха. В конечном итоге мы не смогли прийти к соглашению о том, как действовать; переписывание было сочтено слишком сложным, но ни у кого не было идей получше. Вопрос был вновь отложен на потом.
Я был крайне недоволен этим выводом. Трюк с увеличенной емкостью был скорее костылем, позволяющим скрыть проблему, чем четко сформулированным решением. Поскольку проще попросить прощения, чем разрешения, я рискнул и начал переписывать систему жидкости сам.
Новый алгоритм
Во время одного из обсуждений жидкостей Рсединг предложил алгоритм, очень близкий к тому, с которым он играл несколько раз, — алгоритм из мода Minecraft Thermal Expansion от команды CoFH:
- Трубы(в том числе и подземные) и резервуары для хранения объединены в жидкостные «сегменты».
- Каждый сегмент наследует свой объем от составляющих его ячеек для жидкости и может содержать одну жидкость.
- Машины могут подавать жидкость в сегмент с неограниченной скоростью и могут забирать жидкость из сегмента со скоростью, пропорциональной тому, насколько заполнен сегмент. Другими словами, если сегмент заполнен наполовину, то скорость вытягивания равна половине максимальной.
- В частном случае насосы могут работать с большей скоростью, если они подключены непосредственно к резервуару для хранения.
Больше нет реалистичного «течения» жидкости по трубам; жидкость, подаваемая в сегмент, будет немедленно доступна в любой точке сегмента. Это «решение типа ядерной электрической сети», которое обсуждалось в предыдущих FFF. В результате каналы «просто работают», и вам практически не придется беспокоиться о пропускной способности.
It just works™
Демонстрации
Обратите внимание на визуализации отладки:
- Зеленый цвет представляет количество жидкости в объекте.
- Синий представляет объем потока, проходящего через объект на этом тике.
Анимации потока жидкости не являются окончательными.
Длинные трубопроводы
В старой системе пропускная способность ухудшалась по мере увеличения длины труб. Проблема заключалась не обязательно в том, что такое поведение существовало, а в том, что оно было непредсказуемым.
В новой системе сегменты представляют собой единое целое, поэтому жидкость больше не распространяется по трубопроводу. Более длинные трубопроводы имеют более высокую пропускную способность, но для полного опорожнения требуется больше времени. Точные цифры пропускной способности могут быть изменены в зависимости от дальнейшего тестирования.
Развязки
Старая система функционировала относительно нормально с прямыми трубопроводами, но как только появлялись перекрёстки, все ломалось. Количество жидкости, текущей к каждой стороне соединения, будет разным в зависимости от порядка построения объектов.
В новой системе перекрёстки совершенно не важны; сегмент заботится только о подключенных к нему машинах. Когда машина обновляется, ее максимальная скорость вытягивания ограничивается в зависимости от степени заполнения подключенного сегмента. Это приводит к гораздо более равномерному расщеплению, которое, хотя и не идеально, но чертовски близко.
Входное голодание
В старой системе соединения становились особенно плохими, когда в машинах не хватало входной жидкости. Например здесь топливный завод получает гораздо большую долю воды, чем завод окислителя.
В новой системе обе установки получают гораздо более равную долю жидкости.
Насосы
В старой системе для поддержания более высокой производительности требовались насосы. Однако это почти никогда не работало так, как можно было ожидать:
В новой системе больше нет необходимости использовать для этой цели насосы. Насосы по-прежнему полезны для создания направленного потока, действуют как условные клапаны в контурной сети и для загрузки/разгрузки поездов, но вы больше не обязаны размещать их в таком большом количестве, как раньше.
Расстановки для эндшпиля
Наконец, мы возвращаемся к нашему любимому химическому заводу. Эта установка не работает, потому что нефть застревает в выпускной трубе.
В новой системе производственный сегмент имеет достаточную мощность, так что все химические заводы имеют возможность пропихивать свою нефть.
Веселье важнее реализма
Новая система представляет собой довольно большой шаг назад с точки зрения «реализма» моделирования жидкости в Factorio. Но как гейм-дизайнеру вам всегда приходится искать компромисс между тем, что имеет смысл в реальном мире, и тем, что интересно для игры. Сборка машин отвлекает от огромного объема работы, которая уходит на реальную автоматизацию, и помещает ее в аккуратную маленькую коробочку. Аналогичным образом, новая система жидкости обеспечивает поведение, которое вы ожидаете от трубопровода, абстрагируя при этом все детали реального потока жидкости.
Это очень интересная система для игры. Эта система открывает много интересных возможностей, которые мы не предсказывали, и некоторыми из наших историй мы поделимся в будущих FFF. Я также могу подробно рассказать об архитектуре этой новой системы и о том, как я подошел к рефакторингу, в другой раз.
Есть несколько деталей, над которыми еще предстоит работать, но в целом новая система работает очень хорошо. Мы не можем дождаться, когда вы это протестируете!
Вы приземляетесь на незнакомой планете, в безжизненном и пустынном месте. Разреженный воздух очень холоден и сух. Далекое солнце мерцает в тусклом фиолетовом небе. Тонкие облака проносятся мимо, а ветер поднимает песок, который царапает вашу броню.
Оглянувшись вокруг, вы видите что попали в пустыню с бесконечно извивающимися дюнами состоящими толи из песка толи из пыли. Кажется, что пыль парит в воздухе, как будто гравитацию подавило статическое электричество. Продвигаясь вперед, вы проходите мимо своеобразных столбов из сплавленного песка и металла. Песок сменяется камнем, и вы оказываетесь на краю продуваемого ветрами плато.
Стоя на краю утеса, вы видите вдалеке похожие формы рельефа: плоские скальные плиты, возвышающиеся над меняющейся темной местностью внизу. Небо тускнеет, и в мгновение ока гром, который всего несколько минут назад был на горизонте, обрушивается на вас. Молния пронзает небо и поражает ваш энергетический щит. И много таких ударов вы не выдержите.
Предупреждающие мигающие огни.
В ненастную ночь вы бежите, уклоняясь от молнии, в поисках убежища. Внезапно несколько молний ударили в одно и то же место неподалеку. Над вами навис какой-то неизвестный силуэт. Может ли это быть какое-то скальное образование или, возможно, еще один столб из расплавленного песка? Нет, оно не выглядит естественным. Это нечто иное, нечто чуждое.
Что это за инопланетная структура? Оно явно древнее и разрушеное стихиями, но, по крайней мере, кажется невосприимчиво к молниям. Его деконструкция дает некоторые полезные материалы, но не дает ответов. Возможно... в целости и сохранности оно было бы полезнее?
С наступлением дня солнце блестит на темной субстанции под скалами плато. Поверхность кажется темным бурлящим слоем нефти, смешанной с песком. В конце концов, это не девственный новый мир, это уже загрязненный.
Вы спускаетесь с плато в темную изменчивую местность. Отвратительная смолоподобная смесь прилипает к ногам. Нефть не настолько глубока, что-бы по ней невозможно было пройти, а мягкий песок внизу помогает двигаться дальше.
Поднявшись на следующее плато, вы обнаружите древнюю мощеную дорогу, ведущую через другую пустыню. Обломки древних стен местами выступают из песка, обнажая запутанный узор коридоров и переходов. По мере того, как вы путешествуете дальше, в некоторых руинах можно увидеть следы древней техники, торчащей из песка.
Вдалеке вы видите несколько более крупных структур, сгруппированных в группы. Странные округлые формы разрушенной архитектуры делают их похожими на прижавшиеся друг к другу фигуры в мантиях. Одна дорога превращается в сеть множества дорог, каждая из которых ведет к высоким инопланетным зданиям.
Лишь немногие здания сохранили свои крыши, многие из них, должно быть, были намного выше. Возможно, это даже были небоскребы. Используя одно из них в качестве точки обзора, вы могли бы увидеть еще множество таких городов призраков простирающихся вдоль всего горизонта. Это был не просто шахтерский городок или город-аванпост, это была целая цивилизация.
Однако сейчас все, что движется над этим мрачным ландшафтом, — это солнце, небо и песок.
Заключение
Некоторые звуки, декорации и структуры либо являются заполнителями, либо требуют доработки. Комбинация всех ассетов, несмотря на то, что она еще не завершена, придает этой новой планете действительно особое настроение и атмосферу.
Конечно, не только эстетика делает Фульгору уникальной. Скоро мы вернемся с более подробной информацией о механике и о том, что вы можете делать на Фульгоре.
Как всегда шокируйте нас своими мыслями в привычных местах: ФорумРедит