Как стать автором
Обновить

Комментарии 33

Мне одному глаз царапает подход к проектированию с КДПВ?

Мне тоже. Но это КДПВ, она должна привлекать внимание.

Если вам хочется продолжить царапать глаз дальше, то карту я скачал отсюда: https://factoriomaps.com/beta/user/Xarovin/Osira/index.html

В своей игре я использую что-то вроде City Block:

Очень общий скриншот на тысячу часов, модпак Seablock

С готовыми ситиблоками от Nilaus потерял интерес( А иначе игру уже не представляешь, так как они идеальны.

Как будто заюзал чит.

По этой причине не трогаю ни city-блоки, ни шину. Спагетти – наше всё)) Но я ещё очень мало наиграл по меркам Factorio, часов 150-200.

Играл с AnonyMods, жаль что заброшен теперь.

ни city-блоки, ни шину.

Это как не трогать паттерны программирования, SOLID, DDD и т.п.
Зато есть простор для велосипедостроения.

Естественно, именно так) SOLID, DDD и прочих KISS-ов мне на работе хватает)

Шина это круто! Но я принципиально не использую чужие чертежи (вру, использую один на развилку ЖД). Потому что если ты выжил в первые 20 часов, то потом навтыкать чужих чертежей не составляет труда, дроны сами всё поставят. Я строил базу на около 100 блоков сам и потратил 300 часов. С чужими чертежами сделал бы за 100. Но зачем?

Солидарен)

В том году прошёл krastorio2 за 100 часов без чертежей, но с jetpack. Очень понравилось, хотя окончание немного затянуто. Очень жду дополнения 2.0. Уж очень там всё круто будет. Другие планеты, двухуровневое ЖД, установка настроек и рецептов на призраках, приоритеты остановок в зависимости от условий, автоотправка на заправку и т.д. и т.п.

Ещё немного странно, что Вы эту же картинку, по сути, использовали ещё два раза в статье)

А за статью спасибо! :)

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

2 мс это очень много, весь кадр иногда это 2 мс. Если 360 fps.
А если 2 нс, то логично.

Так «макароны» же не особо-то и быстрые. Во-первых, маяки или не влезают, или стоя́т неэффективно. Во-вторых, часто производительность упирается в темпы добычи, то есть ускорять её на этом конкретном месторождении синими модулями уже некуда — нужно сочетать рыжие и синие, иначе просто заводы будут тупо ждать, пока копалка накопает. В-третьих, чтобы ничего не отвлекало от застройки новых месторождений — лучше копать не «на скорость», а «на эффективность». Плюс логистика. Всё это приводит нас к системе агломерированного («от руды до автомобиля в одной точке») производства — возле меди производятся все три типа плат плюс модули и RCU (надо привезти немножко железа и серы и «множко» пластика), возле железа производятся рельсы, движки и т. д. (тоже не особо много надо привозить) и так далее. У каждой «агломерахи» есть сбалансированная постройка, которая рядами чередуется с маяками и даёт экстремум по скорости (с учётом потерь времени на добычу ресурсов для постройки самих производств).

Дальше будут очень большие спойлеры.

Hidden text
Макароны. Годятся на разогрев, для затравки, не более.
Макароны. Годятся на разогрев, для затравки, не более.
Красные платы. Обратите внимание, как переплетены конвейеры, чтобы сэкономить на логистике дронами. Маяки работают максимально эффективно — маяк на 8 сборщиков, сборщик под 8 маяками.
Красные платы. Обратите внимание, как переплетены конвейеры, чтобы сэкономить на логистике дронами. Маяки работают максимально эффективно — маяк на 8 сборщиков, сборщик под 8 маяками.
Синие платы. Чуть менее сбалансированные (некоторые сборщики друг друга ждут), но при учёте прочих факторов это тоже таки оптимум.
Синие платы. Чуть менее сбалансированные (некоторые сборщики друг друга ждут), но при учёте прочих факторов это тоже таки оптимум.

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

Естественно, в один поезд влезает намного больше, скажем, синих плат, чем можно было бы сделать из такого же поезда руды. Поэтому — раскидываем по месторождениям «агломерахи», а к космодрому везём всё готовенькое, чтобы ракеты стартовали пошустрее :)

Так то, что Вы показали на скриншотах, вполне может быть и в "паста-базе". Глобально у Вас тут никакого другого паттерна не навязывается. Ничто не мешает свить спагетти так, чтобы модули стояли "хорошо". Другое дело, что экстремально легко свить спагетти так, чтобы всё, включая модули, стояло "плохо") Но это другой разговор. Спагетти, на мой взгляд – просто отсутствие какого-либо иного структурного паттерна. "Как хочу, так и леплю". Ну и при этом любой структурный паттерн так или иначе имеет какой-то оверхед. Это как писать на ассемблере. Получится ли быстрее, чем на C / C++ / C#? Вообще не факт. Можно ли сделать быстрее? Да.

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

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

На планете встречаются противники научно-технического прогресса: плеваки и кусаки.

я бы назвал их коренными жителями которые против засирания планеты. Они нападают только когда загрязнение доходит до их гнезд.

Игра выглядит как аллюзия на американцев что довольно самоиронично

А в каком виде аллюзия на американцев от чешской студии выглядит самоироничной?

Блин, а я думал — польской О_О

Вообще выглядит как некоторая пародия на экологические трагедьки, потому что «бедные коренные жители» (вполне официально в игре «Natives») от выхлопов не чахнут и дохнут, а жиреют и злятся всё сильнее :)

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

Гораздо веселее проходить игру с друзьями. Для этого потребуется выделенный игровой сервер.

Нет, не потребуется. Достаточно в меню игры выбрать "multiplayer -> host saved game" и позвать друзей.

Спустя 900 часов игры мой компьютер уже тормозит от количества объектов
на карте, а выделенный сервер пока справляется и выдает стабильные 60
тактов в секунду.

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

Единственный плюс сервера - он работает всё время.

Из всей статьи полезной можно назвать только информацию про кластер, но там одним сервером не отделаться.

Достаточно в меню игры выбрать "multiplayer -> host saved game" и позвать друзей.

Единственный плюс сервера - он работает всё время.

Ну так да, если вы собираетесь играть асихнронно, то поможет только выделенный сервер. Это помимо параметра auto_pause , который позволяет серверу продолжать играть и без вас.

И несколько инстансов все же можно запустить на одном физическом сервере, насколько я помню, Factorio преимущественно однопоточная. У Eternity Cluster физических серверов меньше, чем игровых.

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

А выключать автопаузу в мире с кусаками - это стрелять себе в ногу, могут и сожрать ненароком.

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

Без ключевых технологий неважно, насколько правильная автоматизация, вы все равно не сможете собираясь с друзьями поиграть на выходных оставлять карту работать в фоне на всю неделю. Ключевые технологии, помимо очевидных ботов, включают артиллерию и доступные апгрейды урона и скорострельности, потому что уже через одну-две недели реального времени evolution factor будет за 90 и под стенами базы будут черви с радиусом поражения, превышающим таковой у лазерных турелей.

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

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

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

а можно ли сделать кластер на каком нить кубернетисе, чтобы был большой сервер и один общий мир, или однопоточность не даст?

https://factoriobox.1au.us/results/cpus?map=4c5f65003d84370f16d6950f639be1d6f92984f24c0240de6335d3e161705504&vl=1.0.0&vh=

Тут вроде обычные "бытовые" процы, 8-16 ядер и памяти не 128 гиг даже...

Ну да, потому что даже 5600x3d за 200 баксов в factorio показывает себя на полпорядка лучше, чем всякие там Xeon Gold с тележкой ядер, не говоря уже о топовых x3d камнях

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

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

Про то и речь: каким образом задачу можно масштабировать учитывая ограничения движка.

Так она принципиально не решается в честном виде, вообще никак. Под честным я имею в виду что часть автоматов/инсертеров(кстати это самая дорогая по времени обсчета сущность) обсчитывается в одном потоке/сервере а часть в другом. Может только полным переписыванием движка и то вряд ли.

Все что можно было отделить в многопоток(обсчет жидкостей и тепловых труб) уже отделили.

Так что единственный вариант сделать честную мегабазу это мощный x800x3d/x600x3d(факторио любит большие кеши) или интеловский x900k с суперохлаждением на аквариумном чиллере + максимально быстрая память какую только удастся найти.

И то с учетом современных рекордов на ваниле это порядка 50к-80к SPM для кластерных баз(куча абсолютно одинаковых блоков) или 20к-50к для монолитных. Со всеми микрооптимизациями UPS типа никаких балансиров/сплитеров, direct insertion only, clocked inserter и тд. Без заморочек потолок комфортной игры где-то 10к-20к.

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

Так что только условности с сундуками-телепортерами. Factorissimo вроде по такому же принципу работает.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий