Factorio как поставить на паузу
В последнее время много копий сломано вокруг технических собеседований. Очевидно, что инвертирование двоичного дерева на доске практически никак не связано с практическими навыками реального программиста. Примитивный Fizzbuzz по-прежнему остаётся самым эффективным тестом. Как следствие, выросло внимание к опенсорсным проектам, но оказалось, что это тоже не очень хороший показатель, потому что у большинства профессионалов нет на них времени.
Все эти методы интервью не сравнятся с очень простой метрикой: совместная игра в Factorio. Прохождение всего цикла Factorio — практически идеальный показатель, насколько хорошо человек решает общие технические проблемы. Можно даже настроить прохождение игры на основе будущей должности, чтобы лучше понять, как кандидат справится со своей ролью.
Factorio?
Factorio — это игра об автоматизации. Вероятно, лучшим введением будет этот трейлер, но, по сути, ваша задача — построить автоматизированный завод, способный запустить ракету в космос.
Начинаете с нуля. Добываете вручную железную руду и камень, строите плавильную печь, чтобы плавить руду в железные пластины, из которых можно скрафтить автоматический твёрдотопливный бур. Можно самостоятельно забирать железную руду из бура и закладывать её в плавильню, но более эффективно использовать автоматический конвейер. Потом можно использовать полученное железо, чтобы сделать другой бур, который автоматизирует добычу угля. Затем строится конвейер для забора угля и конвейер для его передачи в бур. Эта крошечная фабрика производит железные пластины, из которых можно сделать третий бур — и начать добычу медной руды, которая позволяет крафтить медные плиты, а из них можно сделать медный провод, необходимый для работы погружного насоса. В сочетании с паровым котлом и паровым двигателем это даёт нам первую электроэнергию. Её можно использовать для исследовательского центра и изобретения новых технологий, таких как сборочный автомат. Как только разблокируете сборочные автоматы, можете использовать сделанный вручную провод для создания сборочной машины, которая будет автоматически изготавливать эти провода.
Выбор направления
Игра начинается без установленной цели и почти без направления. Ведущий программист должен быть способен изучить UI и определить цель, а затем разработать план для её достижения. От джуниора ожидают правильного выполнения задач, поставленных ведущим разработчиком. Предполагается, что стажёр работает с наставником, но джуниор должен быть в состоянии самостоятельно устранить основные проблемы со своим кодом, прежде чем просить помощи от старшего. Миддл должен уметь работать независимо, как только ему дают задание, но от него не ожидают архитектурного проектирования.
Конкретные ожидания можно сформулировать так:
Командная работа
Важнейшим аспектом разработки программного обеспечения является умение работать в команде. Это означает координацию усилий с другими людьми, удовлетворение потребностей чужих проектов и сотрудничество с командой, а не самостоятельную работу, когда вы отказываетесь изменить свой дизайн, чтобы помочь интегрировать его с чьей-то работой. Естественно, такие ситуации всё время возникают в Factorio, потому что стандартные чертежи ограничены физическим пространством. В результате нужно тщательно изучить действия других людей, а иногда скорректировать свой дизайн, чтобы вписаться в ограничения по размеру или приспособиться к какому-то чужому чертежу, который занял больше места, чем ожидалось.
Если игрок уйдёт в себя, начнёт делать всё сам или молча исправлять проблемы, это быстро навлечёт на него гнев команды по тем же самым причинам, по которым коллеги злятся на программистов-ковбоев. К счастью, в Factorio есть встроенный эквивалент git blame : он показывает последнего игрока, который изменил любую сущность. Таким образом, если кто-то поставил костыль и не сообщил команде о проблеме, то когда этот костыль наконец сломается — все узнают, кто виноват. Если хотите выиграть, придётся плотно сотрудничать с товарищами по команде.
Отладка
Одним из главных навыков для программиста является отладка. Это, пожалуй, самая очевидная параллель между Factorio и реальной разработкой ПО. Что-то может сломаться очень далеко от фактического источника проблемы. Способность быстро выяснить реальную проблему — это критический навык, и процесс мышления почти идентичен отслеживанию причины сбоя в реальной программе. Если перестал работать сборочный автомат, сначала нужно проверить выходящие потоки. Потом проверить, какого ингредиента не хватает на входе. Затем проследить ингредиент по фабрике, чтобы узнать, где он производится. И повторять процесс снова и снова, до тошноты.
Отладка в Factorio быстро усложняется. Как только вы построите нефтеперерабатывающий завод, то займётесь крекингом, где на выходе три разных трубы (мазут, дизельное топливо и попутный нефтяной газ), и если какая-то из них по какой-то причине стопорится, то весь завод прекращает работу.
Бывали случаи, когда весь завод останавливался, потому что вы начали исследовать что-то, не требующее жёлтой науки. В результате вы перестали использовать каркасы дронов, которым перестали поставляться электрические двигатели, где использовалась смазочная жидкость, для производства которой забирался мазут. В итоге стопорилась выходящая труба на нефтеперерабатывающем заводе, из-за чего у вас заканчивался попутный нефтяной газ (petrolium), что останавливало производство пластмассы. Как результат, прекращался выпуск сигнального красного провода — и вся фабрика выходила из строя. Опытные игроки предвидят подобные сценарии и внедряют самобалансирующийся крекинг нефти, чтобы всегда гарантировать баланс системы. Такой завод остановится только при закупорке выходящей трубы с попутным газом. Если хорошему программисту дадут сломавшийся нефтеперерабатывающий завод, он обычно сможет проследить проблему до источника, понять, что произошло, и быстро попытаться найти решение. С другой стороны, если человек просто плюхает на землю пару новых резервуаров без веской причины (он абсолютно уверен, что смазочная жидкость будет нужна всегда), то это большой красный флаг на методы решения проблем в его программах.
Подобные ситуации позволяют Factorio точно сымитировать сложные взаимозависимости, с которыми обычно имеют дело программисты. Сложность возрастает по мере добавления в геймплей новых концепций. Это очень похоже на рост сложности от дополнительных уровней абстракции в отладке сбоя, который мог произойти глубоко внутри одного из используемых вами фреймворков.
Расширяем производство!
Не в плитах счастье, а в их количестве!
Нужно создать еще больше буров. Если вы наведете на бур в меню создания предметов, вы увидите два набора материалов. Первый список показывает, какие компоненты требуются для создания бура. Второй список внизу показывает общий список сырья, которое требуется для создания. В отличие от многих других игр вам не нужно создавать промежуточные предметы до того как вы создадите то, что вам нужно. Все требуемые предметы будут изготовлены автоматически. В левом нижнем углу экрана вы сможете понаблюдать за тем, как все создается. Вы можете выстроить очередь из приказов, лишь бы хватало сырья. Они будут делаться один за другим.
Теперь вы можете себе позволить немного дополнительных буров и печей, так что вам стоит автоматизировать добычу угля и камня. Проще всего сделать так же, как вы сделали с добыей железа. Насчет угля – можете поставить два бура лицом друг к другу: они будут самостоятельно заряжать друг друга топливом, а вам остается только забирать излишки.
Не забудьте: чтобы забирать ресурсы из машин не открывая инвентаря, просто щелкайте по ним комбинацией клавиш CTRL+ЛКМ. Может быть, вам понадобится детализированный вид. Нажмите ALT. Вы сможете его в любой момент выключить, снова нажав ALT.
Что же касается камня, лучше всего, если бур будет выгружать камень прямо в ящик.
Как только все готово, вам, скорее всего, захочится, чтобы все работало еще быстрее. Поставьте больше печей для железа, больше для меди, и, пожалуй, больше буров на добычу угля. В начале игры самый востребованный ресурс – железо, так что вам потребуется примерно вдвое больше железа. Но учтите, что по мере развития электричества и электроники выростет и потребность в меди!
Дальнейшая автоматизация
Отлично! У вас уже примерно четыре печи, которые плавят железо, парочка делет медь, имеется производство камня и неплохие объемы добычи угля. Но знаете что вас бесит? Необходимость постоянно бегать за углем для ваших машин, я угадал? Давайте и это автоматизируем! За конвейерами и манипуляторами будущее! Буры могут выгружать добытое на конвейеры, которые доставят необходимое к другим машинам.
Итак, уголь транспортируется к месту добычи, но там его никто не потребляет. Нам просто нужно найти способ вставлять его в наши машины. Здесь вступают в дело манипуляторы. На первых порах можно использовать твердотопливный манипулятор в качестве недорого способа перемещения любых предметов из одной точки в другую. Они берут предмет с земли, из сундуков, машин и кладут его куда нужно. Для работы твердотопливным манипуляторам тоже нужно топливо, так что вам все-таки придется вручную загружать уголь, правда теперь не в машины, а в манипуляторы. Но они потребляют меньше, так что все равно у вас появится больше свободного времени. Маленький пример того, как работают манипуляторы. Обратите внимание – полоска означает место, откуда манипулятор будет забирать предметы, а стрелка – куда будет класть их.
Итак мы разобрались, как автоматически добывать и как автоматически транспортировать. А также автоматически загружать машины и разгружать их. Теперь нам нужно немного электричества – это позволит использовать электрические манипуляторы вместо тех, в которых нужно постоянно что-то подбрасывать.
Код-ревью
Сопротивление фидбеку без веских причин — хорошо известный красный флаг. Кроме того, настороженность вызывает программист, который неохотно принимает предлагаемые изменения и отказывается соответствующим образом корректировать будущие проекты. В итоге ему придётся постоянно напоминать о необходимости придерживаться какого-то стандартного способа решения проблемы. При этом человек не объясняет, почему ему не нравится предлагаемый метод. Это потенциально бомба замедленного действия в организации, потому что без присмотра он может быстро накопить технический долг для своих коллег. Такого рода проблемы практически невозможно уловить на традиционном собеседовании, только на стажировке.
Стиль написания кода и фреймворки
Отказ следовать советам — лишь часть гораздо большей проблемы, когда программист не способен нормально интегрироваться в существующую структуру. Есть много способов построить фабрику в Factorio, и каждый требует стандартных методов сборки. Несоблюдение стандартов быстро затормозит всю фабрику, часто тонкими способами, которые не очевидны неосторожному разработчику.
Конструкция магистрального ленточного конвейера включает 4-8 конвейеров, разделённых на две секции (для подземных конвейеров). Он помещается в центре фабрики, и всё производство происходит перпендикулярно ленте. Эта конструкция опирается на несколько правил, нарушение которых может привести к полному хаосу. Во-первых, всегда следует использовать разделитель на выходе с конвейера. Никогда нельзя перенаправлять всю ленту: пустое пространство для другой ленты означает, что вы теряете целый конвейер ресурсов, даже после апгрейда. Во-вторых, все заводы должны масштабироваться перпендикулярно основному конвейеру. Невозможность быстрого масштабирования приведёт либо к огромной потере пространства, либо к невозможности масштабирования производственной линии, потому что она окружена другими производственными линиями.
Логистическая сеть
Есть разные способы построения логистических сетей. Самый простой — с сундуками пассивного снабжения. Но есть другой метод — сундуки хранения с фильтром, который решает проблему с мусором. Оба метода требуют правильной установки ограничителей в нужных местах. Сундуки пассивного снабжения обычно ограничены пространством сундука. К сундукам хранения нужно поставить манипулятор для подключения сундука к логистической сети. И обеспечить не менее N предметов перед установкой манипулятора. Если забыть про эти шаги, то будут впустую потрачены огромные ресурсы. Если программист постоянно забывает про ограничители на выходах — это красный флаг, что человек небрежно относится к производительности в реальных приложениях.
В других случаях команда может применять заранее разработанные чертежи, такие как проект ядерного реактора или роботизированного завода на дронах (bot factory). Они могут быть крайне сложными, но если сделать над собой усилие и разобраться, то они чрезвычайно экономят время. Остерегайтесь кандидатов, которые не хотят настраивать на заводе новый элемент просто потому, что не могут отследить сложную управляющую логику. Или кто бросает попытки разобраться в алгоритме функционирования такого завода, несмотря на очевидные преимущества дронов перед конвейерами.
Неоптимальный дизайн завода на дронах, источник
Многопоточность
Поезда в Factorio — прямой аналог многопоточности: один поезд — это один поток выполнения, а каждое пересечение поездов или остановка — место в памяти, куда два потока потенциально могут писать одновременно. Светофоры — это блокировки (или мьютексы). Все баги в железнодорожной сети проявляются точно так же, как состояние гонки в ПО, потому что они буквально являются физическим состоянием гонки. Все компромиссы применимы и здесь — слишком длительная блокировка уменьшает пропускную способность. Неправильное проектирование светофоров обычно вызывает взаимоблокировку, точно так же, как в программном обеспечении, потому что в итоге возникает циклическая зависимость блокировок. Самая распространённая взаимоблокировка — это когда поезд слишком длинный и неожиданно блокирует второй перекрёсток, ожидая входа в первый. Затем этот второй перекрёсток препятствует отправлению другого поезда, предотвращая разблокировку первого перекрёстка.
Количество путей в железнодорожной сети соответствует количеству ядер CPU. Один железнодорожный путь трудно масштабировать больше, чем на несколько полос, потому что пропускная способность всей системы очень быстро ограничивается, даже с зонами ожидания. Наиболее распространённой конструкцией является двухполосная конструкция, по одной полосе в каждую сторону. Здесь появятся проблемы с пропускной способностью, когда возникнет необходимость постоянно разгружать поезда. Поэтому в больших железнодорожных сетях минимум по четыре полосы, причём две внешние действуют как объездные пути, чтобы избежать пересечений, когда это возможно.
Проблемы со светофорами в этих системах могут проявиться через фантастический промежуток времени. Единственный пропущенный светофор в одной железнодорожной сети однажды вызвал взаимную блокировку после корректной работы в течение двух недель. Так же и в программах состояние гонки может проявляться только раз в месяц, когда под сильной нагрузкой возникает высокая конкуренция потоков.
Масштабирование
Как и в программном обеспечении, масштабирование производства в Factorio вводит новые проблемы в оригинальный дизайн чертежей и часто требует полной перестройки для максимального повышения производительности, с установкой модулей продуктивности и модулей скорости с маяками. Конвейеры становятся узким местом производительности даже на максимальной скорости ленты, заставляя искать способы разделить конструкции так, чтобы позже можно было вставить больше лент, или разделить заводы на модули.
Управление логистической сетью само по себе становится логистической задачей в конце игры из-за того количества проблем, какое вызывают экспансивные дрон-сети. Как правило, нужно приступить к сегментированию логистической сети и либо использовать поезда для транспортировки товаров между сегментами, либо строить сундуки запроса и снабжения, которые будут передавать товары через границы.
В конце игре для управления поездами требует перехода с push-архитектуры на pull-архитектуру, поскольку push-архитектура не справляется с высокой пропускной способностью. Это неизбежно приводит к использованию функции Train Limit и изучению, как использовать логические сети для кодирования базовой логики, чтобы станция запрашивала поезд только тогда, когда действительно готова полностью заполнить его ресурсами, вместо обычной игровой тактики в начале игры, когда куче поездов просто даётся команда ехать за железом. Новая схема сводит к минимуму количество поездов и при этом гарантирует, что в сети обслуживаются все станции.
Часто бывает, что ограничения входных линий в сборочный автомат и лимиты скорости манипулятора требуют перепроектирования заводов вокруг, точно так же, как высокоскоростные вычисления требуют знания узких мест в работе CPU. Эти узкие места почти никогда не являются проблемой, пока вы не достигнете определённого масштаба, но после этого начинают ограничивать производительность.
Первые шаги
Ресурсы
Убедитесь, что рядом с вашей стартовой локацией есть все четыре типа твердых полезных ископаемых: Уголь, Медная руда, Железная руда и Камень. Они должны распологаться на разумном удалении друг от друга. Чем дальше расположены залежи, тем сложнее будет создать транспортную сеть.
Также настоятельно рекомендуется обнаружить источник воды, она понадобится для паровых двигателей.
Если в вашей стартовой локации не хватает какого-либо ресурса, их залежи незначительны или они слишком разбросаны друг от друга, просто нажмите клавижу Escape и выберите «Переиграть». Это создаст новый мир, и у вас будет новая стартовая локация.
Позже вам также понадобится нефть. Однако, будучи жидкостью, нефть гораздо проще транспортировать, чем твердые ресурсы. Так что если поблизости нефти нет – ничего страшного.
Все в игре производится из этих шести ресурсов. Если вы планируете победить в этой игре – вам понадобятся они все.
Размещение шахт и печей
Вы начинаете свое приключение, имея при себе каменную печь и твердотопливный бур. Это значит, что вручную вам потребуется собрать совсем немного ресурсов. В первую очередь вам нужно разместить ваш бур на краю залежей железной руды, развернув его лицом к печи.
Для разворота предметов используйте клавишу «R» (это можно делать при установке, либо после – с наведением на сооружение курсора). Маленький желтый треугольник показывает, откуда бур будет выбрасывать железную руду. Таким образом печь нужно будет поставить напротив треугольника. Выглядеть это должно как-то так:
Не забывайте, можно нажать "ALT" и включить подробный вид. Это позволит вам быстрее понимать, что где происходит.
Заправляем топливом
Теперь, после установки бура и печи, им потребуется топливо.
Вы можете использовать для этой цели дерево или уголь. Для сбора топлива вам нужно будет рубить деревья или добывать уголь. Просто подойдите к дереву или залежам угля и зажмите правую кнопку мыши.
Как только топливо окажется у вас, щелкните левой кнопкой по печи или по буру, чтобы открыть их интерфейс.
Для загрузки топлива просто нажмите на слот с топливом, чтобы выбрать его, а затем щелкните еще раз в топливный слот.
Если вы хотите разделить стек напополам, нажмите правой кнопкой мыши на стек в инвентаре, а затем поместите половину в слот для топлива. Итак обе ваших машины теперь работают и начинают автоматически проивзодить железные плитки!
А еще вы можете использовать комбинацию CTRL+ПКМ чтобы загрузить половину стека сразу
Сделайте такой же набор зданий у медной руды, чтобы начать производство медных плит.
Микросервисы и модули
В конце концов, заводы становятся настолько огромными, что приходится отказаться от простого дизайна с основным ленточным конвейером или спагетти-дизайна — и перейти на более масштабируемую структуру. Чтобы выйти на мега-уровень, заводы обычно используют либо систему поездов, либо модульную систему, которая примерно соответствует микросервисам или архитектуре с плагинами.
Модульная архитектура пытается сохранить некое подобие основного конвейера, но вместо этого разделяет ленты на заводе и использует модульные блоки, которые принимают стандартные входы и стандартные выходы. Иногда этого можно достичь полностью с помощью дронов, но обычно материалы приходится доставлять по конвейеру на большие расстояния. Это очень похоже на систему модулей для монолитного приложения с теми же компромиссами.
Такие мегабазы представляют верхний уровень дефолтного сервера Factorio. Конечно, существует много модов, которые гораздо усложняют игру.
Распределённые системы
Space Exploration — полностью переделанная версия Factorio для колонизации космоса. Здесь планеты становятся ограниченными ресурсами, требуя от игроков колонизировать другие миры и использовать ракеты для передачи ресурсов между планетами. Из-за огромной задержки с доставкой материалов между планетами, координация этих баз приводит к возникновению проблем, сходных с глобально распределённой системой баз данных. Даже в логической сети приходится бороться с задержкой, потому что автоматическая система теряет из виду элементы, которые запущены, но ещё не достигли целевой планеты. Если это не учитывать, возникают дубликаты запросов для всех нужных элементов. С точно такой же проблемой сталкиваются распределённые системы при попытке обеспечить согласованность между узлами.
Вывод
В целом софтверная индустрия не имеет ни малейшего представления, как находить и нанимать лучших разработчиков. Наверное, совместная игра в Factorio стала лучшим техническим собеседованием, которые мы когда-либо проводили. И это нас сильно смущает. Такое собеседование дико непрактично, занимает более 20 часов в мультиплеере с первого раза или 8 часов для команды опытных игроков. Что из этого можно извлечь? Не знаю. Мы, конечно, не можем перейти на Factorio в качестве метода собеседований — с таким же успехом можно просто дать кандидату домашнее задание.
Обучение: Быстрый старт
Прошли обучение, но до сих пор находитесь в затруднении? Это руководство должно вам помочь.
Запускаем игру
Чтобы начать игру из Главного меню, вы должны выбрать «Играть», затем «Свободная игра». Откроется меню настройки карты. Если вы играете первую партию, не нужно с ними возиться.
Генератор карт
Вы можете изменять эти настройки, чтобы игра генерировала особый мир. Эти изменения могут значительно повлиять на сложность игры.
Ресурсы и вражеские базы имеют три значения: частота, размеры и богатство.
- Частота определяет, как часто вы будете сталкиваться с рудными жилами или вражескими базами.
- Размер определяет, каких размеров могут достигать жилы и базы.
- Богатство определяет, как много ресурсов произведут клетки с рудой перед тем как иссякнут, а также насколько плотно застроены вражеские базы.
Если вы решили сначала сыграть партию попроще, попробуйте увеличить эти значения для рудных жил и уменьшить – для вражеских баз.
Подробней с генерацией мира вы можете ознакомиться в статье «Генератор карт».
Мирный режим
Если вы хотите вплотную заняться строительством и не желаете, чтобы враг отвлекал вас, включите мирный режим. Вражеские базы все равно будут созданы, но враги не будут нападать на вас первыми.
Полезные сочетания клавиш
Полный список клавиш можно посмотреть в настройках, но на первых порах вам будет достаточно вот этого:
Если хотите узнать больше о комбинациях клавиш и их настройке, прочтите статью про сочетания клавиш.
You can pause the game
pause without drawing a menu on the screen.
also it shows the chunk grid (helpful for placing radars and UPS-optimising roboport placement)
1200 hours and I never knew about this
Oh god I need a life
2200 here brother, and I feel you, this is news to me aswell.
500+ hours in factorio. Didn’t know about this :/
If you are in single player it also pauses when you press T to research something. But I believe this is toggleable in the settings somewhere.
I did not know about this. TIL
Обработка ресурсов и исследования
Теперь нужно подумать об автоматизации не только добычи, но и обработки.
Но перед этим нам нужно еще больше увеличить производство руд. Здесь все немного усложняется, так что вам нужно сделать сразу несколько вещей. Мы хотим создать фабрику, которая будет сама делать все, что нам нужно. Но для этого нам потребуется несколько устройств, которых у нас еще нет. Тут нам на помощь придет исследование.
Пока мы этого вопроса даже не касались! Начнем с повышения добычи сырья. У нас появилось электричество, так что мы теперь можем использовать электрические буры. Они гораздо лучше старых, твердотопливых. Работают они также, только в два раза быстрее и не полагаются на топливо, как вы, наверное, уже догадались. Вам потребуется сделать так, чтобы добытое сырье они выгружали на конвейер, чтобы тот доставил ее в место, где вы будете массово превращать руду в пластины. Вот пример такого устройства, но попробуйте использовать воображение и логику и попробуйте сделать что-то свое, может быть даже лучше! Вам нужно, чтобы руда подавалась примерно поровну на каждую половину конвейера. Это позволяет доставлять на вашу базу гораздо больше ресурсов, используя всего один конвейер.
Больше всего нам нужен длинный манипулятор. Этот манипулятор может дотягиваться на вдвое большую дистанцию против обычного! Очень удобно, для забора или размещения предметов на ленты на расстоянии в два тайла. Так что нам требутеся создать лаборатории. Они не потребуют много ресурсов, но вам придется немного подождать. Создайте одну-две и подключите их к сети. Разместив самую первую вы получите вспылвающее окно, которое запросит, что вы хотите исследовать. Сейчас нам нужна автоматизация. Это даст нам манипуляторы и сборочные автоматы 1, которые будут очень полезны в ближайшем будущем.
Обратите внимание – стоимость исследования: 10 Исследовательских пакетов-1, некоторые называют их «красные снадобья» или «флаконы». Это еще один предмет, который несложно произвести. Вам нужно смастерить 10 штук и поместить их в лабораторию для начала исследования. Пока вы ждете создания флаконов или окончания исследования, давайте продолжим строительство нашего металлургического центра. Нам нужен в этом месте доступ к углю, медной и железной рудам. Несмотря на наступление эры электричества, наши печи по-прежнему нуждаются в угле. Эта зависимость сохранится еще некоторое время.
Ниже еще один пример, как можно обустроить эту зону. На форуме есть несколько других неплохих примеров обустройства металлургической зоны, но если вы хотите узнать, как все работает, я настойчиво рекомендую вам эксперементировать самостоятельно.
Как всегда, я оставил в этой зоне достаточно места для дальнейшего расширения, когда спрос на материалы станет еще выше. Нужно сказать, что для работы вам потребуются длинные красные манипуляторы, чтобы добраться до угля в середине. Вам нужны отдельные конвейеры для каждого из типов сырья, а также конвейер, на который будет выгружаться готовая продукция. Пластинки затем поступят на вашу базу, где из них будет изготавливаться бесчисленное множество разнообразных предметов. Наконец-то у нас появился надежный источник железных и медных плит, вдобавок который можно будет затем расширить. Теперь мы можем заняться дальнейшей автоматизацией, чтобы начать создавать разнообразные предметы, вроде Исследовательских пакетов, боеприпасов и всех прочих вещей которые может сделать игрок, но теперь совершенно без его участия.
Factorio: читы и консольные команды
Консольные команды и читы для Factorio помогут упростить навигацию по богатому миру игры, а также добиться главной цели – создать обширные производственные цепочки и повсеместную автоматизацию.
Всем известно, что Factorio – довольно сложная игра (особенно для новичков), и многие пользователи недостаточно терпеливы, из-за чего прибегают к использованию целого ряда консольных команд и различных читов, которые делают геймплей намного легче.
Именно поэтому мы решили найти самые полезные и популярные консольные команды и читы для Factorio, и разместили их в списке ниже.
Для начала нужно открыть консоль: нажмите на клавишу тильда (
) или слэш (/). Если консоль все равно не открывается, нужно повторно привязать клавишу в настройках игры. Просто зайдите в Управление-> Базовое взаимодействие, найдите параметр «Открыть чат (и консоль)» и поставьте нужную кнопку.
Команда | Описание |
/ seed | Копирует сид текущей карты |
/ time | Показывает информацию о возрасте карты |
/ toggle-action-logging | Включение/отключение регистрации всех действий в консоли |
/ permissions | Открывает пользовательский интерфейс разрешений |
/ alerts | Отключает/включает различные предупреждения (например, no_material_for_construction) |
/ unlock- shortcut- bar | Разблокирует все элементы на панели быстрого доступа |
/ admin | Открывает интерфейс управления игроком |
/ ban | Забанить игрока |
/ unban | Снять бан с игрока |
/ demote | Снимает с игрока полномочия администратора |
/ promotion | Дает игроку полномочия администратора |
/ ignore | Игнорировать игрока |
/ unignore | Отключить игнорирование игрока |
/ kick | Выгнать игрока с сервера по указанной причине |
/ mute | Замутить игрока |
/ unmute | Размутить игрока |
Ниже вы найдете небольшой набор читов для Factorio. В отличие от консольных команд, они отключают все достижения в игре.
Чит | Описание |
/cheat | Исследует все технологии, включает режим читов |
/editor | Включает редактор карты |
/c | Выполняет указанную команду (примеры ниже) |
/c game.player.zoom = 0.2 | Увеличивает зум карты |
/c game.player.force.manual_mining_speed_modifier = 1000 | Ускоряет добычу |
/c game.player.force.manual_crafting_speed_modifier = 1000 | Ускоряет крафтинг |
/c game.player.cheat_mode = true | Чит режим, бесконечный крафтинг |
/c game.player.selected.amount = 7000 | Дает указанное количество ресурсов |
/c game.player.insert | Дает указанное количество выбранного предмета |
/c game.speed = number | Изменяет скорость игры |
/c game.player.surface.always_day = true | Всегда день в игре |
/c game.player.surface.clear_pollution () | Убирает из игры загрязнение воздуха |
Если вы ищите читы посложнее, то более расширенный список можно на wiki-странице Factorio (на английском).
Автоматизация исследования
Итак, уже много что произошло. Теперь нам нужно перейти к следующему этапу игры и начать исследовательский бум. Для этого нам нужно автоматизировать производство исследовательских пакетов и их доставку в лаборатории. После этого мы не будем отвлекаться на исследования. Вариантов размещения может быть уйма, я вам покажу общий принцип, просто для понимания как все устроено. Я настоятельно рекомендую вам следующим исследованием взять Логистику и вручную создать пакеты, которые для этого потребуются. Логистика даст вам важные штуки: разделители, подземные конвейеры и быстрые манипуляторы. Разделители и подземные конвейеры – одни из самых важных вещей на этом этапе. Собственно они делают то, о чем подсказывают их названия.
Итак, что требуют исследовательские пакеты? Нам нужны медные плиты и железные шестерни. До этого мы занимались только с сырьем, как же нам делать предметы? Сборочный автомат – это ответ на наш вопрос. Разместив его и открыв меню можно указать, что бы вы хотели сделать с его помощью. Теперь осталось загрузить компоненты будущего предмета и сборочный автомат начнет производство. Затем нужно будет извлечь готовый продукт. В случае с крансными исследовательскими пакетами нам нужен сборочный автомат, который делает шестеренки и автомат, которые делает собственно исследовательские пакеты. Неплохим вариантом будет проложить конвейер с одной стороны, который будет доставлять медные плиты, и еще один конвейер, который будет доставлять шестеренки, вышедшие из другого сборочного автомата.
На этой картинке есть еще несколько милых хитростей, о которых я расскажу поподробней. Если детали идут по разным конвейерам, у вас могут возникнуть трудности, чтобы забрать детали с дальнего конвейера. Да, можно использовать длинный манипулятор, но вы можете по каким-либо причинам не хотеть его использовать (например вам нужен быстрый манипулятор, чтобы быстро закидывать детали в сборочный автомат).
В красной рамке показано, как решить эту проблему. Разделителем вы можете отвести одну линию поближе, оставляя основную магистраль для дальнейшего использования. Мы также использовали подземный конвейер для меди, чтобы уйти с территории, в настоящий момент использующейся для работы, при этом магистраль также свободно проходит дальше для наших нужд. Еще раз: это лишь один возможный способ, которому вы вовсе не обязаны следовать.
В синей рамке показан способ позволить меди идти по магистрали, забрав отведя ветку для наших исследовательских пакетов. Обратите внимание, еще один маленький кусочек конвейера и теперь медь поменяла свое направление и идет по правой (ближней) стороне, оставляя дальнюю сторону для выгрузки шестеренок. Дальше просто: шестеренки и медь помещается в автоматы, выходят исследовательские пакеты. Флаконы направляются к лабораториям, где вы исследуете что хотите, вот пример:
Электроэнергия
Электричество. Вот теперь дело пойдет еще интересней. Итак, нам потребуется один насос, несколько бойлеров и паровой двигатель. Их сделать несложно. Насос запихиваем в воду – для его работы энергии не требуется. Можно использовать трубы, чтобы доставить воду к бойлерам, а можно просто поставить бойлеры сразу за насосом. Бойлеры, как и трубы, позволяют воде течь из одного в другой, за исключением того, что они также нагревают воду и их нельзя использовать в качестве углов. Бойлеры или трубы затем должны присоединиться к середине узкой стороны парового двигателя. Убедитесь, что подключили их куда надо, иначе ничего работать не будет. Кстати, паровой двигатель также пропускает воду, так что вы можете поставить несколько двигателей один за другим. Вот маленький пример.
Теперь вам понадобятся столбы, чтобы доставить энергию вашим машинам. Воткните несколько так, чтобы их зона покрытия (голубой квадрат) накрывал каждый двигатель хотя бы чуть-чуть. Если у вас получилось, машины, попавшие в зону действия будут подсвечены голубой линией по краям.
Если двигатель проивзодит, но электричество никуда не расходуется, будет висеть желтый мигающий значок: сейчас он есть, потому что у нас нет устройств, работающих на электричестве!
Ваша энергетическая сеть может быть устроена так, как вам удобно. Лучший способ – это иметь ряд бойлеров, которые снабжают кипятком определенное количество паровых двигателей, а затем подвести конвейер для загрузки угля в бойлеры с помощью манипуляторов.
Чаще всего используют 1 насос, 14 бойлеров и 10 двигателей. Это обеспечивает максимальную загрузку всех трех элементов. 1 насоса достаточно для того, чтобы обеспечить водой 10 двигателей, а 14 бойлеров достаточно, чтобы нагреть воду для этого же числа. Пример выше легко можно развить до этого эффективного числа. Но постойте! Эта игра про экспериментирование, так что ищите свой собственный путь! Придумайте свои уникальный дизайн!
Наладить сбыт энергии тоже достаточно просто – протяните провода до электрических машин так, чтобы зона действия столба накрывала машины, в точности так, как вы сделали с двигателями. Только проверьте, что ЛЭП действительно соеденина с электростанцией.
Теперь, когда мы познакомились с электричеством, время еще больше увеличить уровень производства.
Кстати, если вам нужны подробности по производству/потреблению электроэнергии, можете щелкнуть по любому столбу и получить исчерпывающий отчет по электроэнергии всей сети.
Как устранить баг с конвейерами в Factorio
Factorio — это игра про строительство фабрики, в которой множество конвейерных лент. Реализующий эти ленты код является чудом оптимизации, однако, к сожалению, он не может справляться со всеми конструкциями.
Проблема с суши-конвейером
Проблема возникает, когда конвейер представляет собой петлю. Поначалу помещённые на конвейер предметы работают нормально, двигаясь как возвращаемый пассажирам багаж в аэропорту. Но как только конвейер достигает полной загрузки, он останавливается.
Что же происходит?
У меня нет доступа к исходному коду Factorio, но мне кажется, что я могу объяснить, почему это происходит. Представьте упрощённую версию Factorio, в которой конвейеры представляют собой одну линию и содержат только по одному предмету на тайл:
Для обновления мы многократно итеративно обходим каждый предмет на ленте, ища предметы, перед которыми есть пустой тайл. Когда мы находим такие предметы, мы передвигаем их вперёд по конвейеру и продолжаем итерации.
Если тайл перед предметом не пуст, мы пока не можем передвинуть предмет, но, возможно, его можно будет передвинуть на следующей итерации. Например, предмет «A» на рисунке ниже не может переместиться, пока не сдвинется предмет «B», и это может занять несколько итераций.
Выполнять итерации можно в различном порядке (и некоторые порядки эффективнее других), но ради правильности самое важное — со временем достигнуть фиксированной точки. Алгоритм останавливается, когда больше нельзя передвинуть ни один предмет.
Наконец, важно то, что когда предмет перемещается, он не переместился снова, пока алгоритм не завершит свою работу. В противном случае предметы будут телепортироваться по ленте с непостоянными скоростями. Нужно помечать каждый передвинувшийся предмет и исключать его из будущих итераций.
Вот псевдокод:
А вот визуализация полного выполнения алгоритма:
Пограничный случай Factorio
Чтобы по этому алгоритму предмет двигался, у него должно быть свободное место, в которое можно переместиться. Но когда предметы тесно упакованы в круг, то свободного места нет, и на всём конвейере образуется пробка.
Устраняем проблему при помощи оптимизма
Показанный выше алгоритм пытается проверить, какие предметы могут двигаться, пессимистически предполагая, что какой-то предмет не может подтвердить возможность движения, то он не будет перемещён.
Но что если мы сделаем наоборот? Рассмотрим алгоритм, оптимистически допускающий, что все предметы перемещаются, а затем проверяющий, какие из них не смогут этого сделать.
Как же это можно сделать? Если предмет находится в конце конвейера, то можно с уверенностью сказать, что он не может двигаться. На рисунке ниже мы пометим такие предметы красным «X», чтобы показать, что они не могут двигаться.
Аналогично, если предмет заблокирован другим недвижимым предметом, то он тоже не может двигаться. После того, как мы пометим предмет красным «X», предмет перед ним тоже должен быть помечен.
Этот новый алгоритм тоже выполняется, пока не достигнет фиксированной точки. Затем все предметы без красного «X» могут быть перемещены вперёд.
Если попробовать этот алгоритм на кольцевом конвейере, то вы заметите, что он завершается, не расставив ни единого «X»! Но это правильно: все предметы на конвейере будут перемещаться по нему, потому что ни один из них не оказался недвижимым.
Слияния
Прежде чем показывать псевдокод, нужно разобраться с ещё одним аспектом. Что произойдёт при объединении двух или трёх конвейерных лент, как показано на рисунке ниже?
По определению, второй алгоритм будет перемещать оба предмета на объединённый конвейер одновременно, потому что они не окажутся недвижимыми. Мы нашли баг! Правильное поведение, которое и реализовано в первом алгоритме, заключается в том, чтобы двигать один или другой предмет, но не оба.
В играх наподобие Factorio эти приоритеты могут переключаться через каждый кадр, чтобы содержимое обоих контейнеров поступало на общий подобно застёжке-молнии.
Готовый псевдокод
Показанный ниже код состоит из трёх этапов.
- Обработка соединений конвейеров
- Разметка недвижимых конвейеров (красным «X»)
- Перемещение всех предметов на конвейерах, не помеченных как недвижимые
Плюсы и минусы
С точки зрения корректности, второй алгоритм совершеннее, но нужно признать, что для него требуется больше кода и он менее очевиден, чем первая структура. Также он усложняет реализацию других компонентов (манипуляторов, фабрик и сундуков), однако для начинаемых с нуля проектов это может и не являться проблемой. Подозреваю, что Factorio уже слишком развилась для того, чтобы вносить изменения в алгоритм действия конвейеров, но надеюсь, что новые игры используют рекомендуемый мной подход.
Также важно заметить, что второй алгоритм обеспечивает применимый результат только когда алгоритм завершает работу. В то же время, первый алгоритм может выполняться инкрементно. Каждая итерация перемещает игровое состояние из одной допустимой позиции в следующую, что иногда может быть полезным.
Интересная связь с исследованиями компиляторов
Я писал эту статью о Factorio, но используемый принцип можно обобщить. Переворот задачи и замена местами того, что нужно доказать — очень полезный навык!
Изначально я у знал об этой технике из статьи об исследованиях компиляторов: «Combining Analyses, Combining Optimizations» Клиффа Клика. Любопытно, что в статье эта техника используется тоже для работы с циклами, только в программировании. Разумеется, Клифф Клик не первым проделал нечто подобное. Математики уже давно практикуют это.
Читайте также: