shapez
29 ratings
Универсальная автоматизация сложных фигур [TMAM]
By Andrei030x
В этой статье описывается устройство универсального завода, способного изготовить фигуру любой сложности на заказ.
3
   
Award
Favorite
Favorited
Unfavorite
СКАЧАТЬ
СКАЧАТЬ[mega.nz]v1.2
Смотреть самому всяко интереснее и удобнее, поэтому даю сразу.
Единственно, я предлагаю вначале хотя бы попытаться сделать самостоятельно эти фигуры, чтобы прочувствовать всю сложность. Ну и еще пройти основную игру, разумеется.
Моды
Моды не требуются. Но для удобства я рекомендую эти:
Zoom out before Mapmode[mod.io]увеличивает предел обзора.
Pipette and Delete on Wires Layer[mod.io]позволяет удалять кнопки (и тому подобное) находясь на слое электросхемы.

Установка:
Содержимое архива (файл.js) закинуть в папку mods. Путь:
%APPDATA%/shapez.io/mods
(Скопируй в проводник)
Панели управления


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

Вращатель позволяет легко разворачивать запрашиваемую фигуру.

Запуск активирует подачу ресов в завод. Однако если программа считает, что фигуру невозможно изготовить, то для запуска этой кнопки будет недостаточно.

Принуд позволяет делать брак. Должна быть нажата в паре с предыдущей кнопкой. Брак по-прежнему будет отлетать на помойку.

Цвета индикатора:
Нет сигнала
Ничего
Ожидание
Синий
Активен
Зеленый
Брак
Красный-синий
Произв. брака
Красный-зеленый



Активация ручного режима перекрывает вывод программы управления сборкой и позволяет отдавать команды вместо нее. Левый экран показывает запрашиваемую фигуру, правый показывает то что получится при данных указаниях.
Генератор фигур
Поскольку хаб не хочет запрашивать сложные фигуры, я сделал свой генератор!
В основе 16-битный счетчик. Каждый бит определяет наличие своей дольки.

Управление:


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

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

Есть несколько вариантов переключения генератора на следующую фигуру:

Далее при каждом нажатии переключает генератор на следующую фигуру.

Изготовленная будет автоматически переключать на следующую, когда завод физически изготовит запрашиваемую фигуру.

Авто-пропуск типов фигур переключает на следующую фигуру при соблюдении ее условий:
1. Простая — все три пары слоев простые и завод может ее сделать.
2. Сложная — хотя бы одна из пар сложная и завод может ее сделать.
3. Невозможная — завод не может ее сделать. (4 пункт сюда не входит)
4. Пустотная — под слоем есть абсолютная пустота. Такая не может существовать даже теоретически.


Между переключениями установлено ограничение в 3,5 секунды (214 тиков).
Окрашивание индикатора реле указывает на готовность переключения.
Цвет указывает на тип текущей фигуры:
Простая
Бирюзовый
Сложная
Желтый
Невозможная
Красный
Пустотная
Фиолетовый




Регистры:

При любом переключении текущая фигура записывается в соответствующий ее типу регистр. При заполнении одной из строчки регистров генератор полностью выключается.
Запись активирует сохранение фигур в регистры.
Сброс при любом нажатии очищает все регистры.
Примечания
  • Если у тебя комп с помойки сильно тормозит, убавь тикрейт в настройках игры. Побочным эффектом будет уменьшение пропускной способности конвейеров.
  • Нельзя запрашивать несколько фигур одновременно. Если активировать несколько кнопок разом, то сигналы наложатся и дальше ничего не произойдет.
  • При смене запроса вначале будут производиться хаотичные фигурки. Нужно подождать, пока со всех конвейеров заготовки от предыдущей фигуры пролетят в помойку.
  • Чтобы понять, что завод может сделать запрашиваемую фигуру, не обязательно делать ее физически. Все операции в точности дублируются на виртуальных станках (схеме). Поэтому если на выходном дисплее все ок, значит и физически будет так же (если конечно ничего не порвано).
  • Если дисплей мигает красным, этому может быть несколько причин:
    1. Скорее всего, эту фигуру в принципе невозможно изготовить.
    2. Включено ручное управление, но инструкции указаны не верно.
    3. Ты уже что-то сломал.
    4. Крайне маловероятно, но где-то может быть косяк.
  • Тырк СКМ (колесико мыши) по ссылке/картинке откроет ее в новой вкладке.
ОПРЕДЕЛЕНИЯ
MAM – Make Anything Machine – Машина для изготовления чего угодно.
Или же просто универсальный завод.
TMAM – Буква "T" значит True – Истинный.
То есть способный изготовить все возможные фигуры без исключений.

Ресурс — форма или краситель, добываемая экстракторами.
Долька — четверть слоя.
Слой — 4 дольки, находящиеся на одном уровне.
Заготовка — часть фигуры, находящаяся на определенном этапе производства.
Фигура — конечный продукт.

Нумерация долек идет по часовой стрелке:


У фигуры может быть максимум 4 слоя.
Первым слоем считается внешний, он всегда максимально большой.
Для наглядности я буду окрашивать каждый слой своим цветом:

Слой №1
Белый
Слой №2
Синий
Слой №3
Зеленый
Слой №4
Красный

Эти обе операции делает одинаковый станок:
Прикрепление — это соединение долек разного номера на одном слое.
Вложение — это соединение слоев разного номера.

Оболочка — это внешняя долька, содержащая в себе другую дольку.
Например, для «дольки №4 слоя №2» оболочкой будет «долька №4 слоя №1»



Примечание: По логике, верхний слой ближе к наблюдателю, а то что ближе - выглядит больше. Но в 2D своя логика, тут все наоборот, и это может сильно путать. Просто надо понимать, что в 2D нет высоты как таковой.
Вкладываемый слой сжимается (уменьшается) и заменяет собой часть оболочки.
То есть внедряется в слой №1 и становится внутренним, вторым слоем.
ТЕОРИЯ
Какие виды фигур бывают и как их собирать:
1. Отличие простой фигуры от сложной
Эта простая:

При вложении синяя заготовка перешла на слой №2 и стала меньше.

Эта тоже простая:

Тут вложилась лишь синяя долька №1. Но поскольку синяя заготовка является одним целым, то синяя долька №1 утащила остальные 3 синие дольки за собой, на слой №2. Но на технологию изготовления это никак не влияет.

Кстати, вот что будет, если разделить эту фигуру:
Под слоем не может быть абсолютной пустоты. Поэтому левая половина вернулась на слой №1.

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

Эта сложная:

Поскольку тут слою №2 не во что вкладываться, вместо операции вложения произойдет прикрепление:
Синяя останется на слое №1, это не то что нам нужно.

Фигура является сложной, если ни у одной из ее долек нет оболочки.
И сделать ее последовательным вложением слоев не выйдет.
2. Техпроцесс создания сложной половинки
1. Создать два балласта (просто разрезать любой ресурс пополам)
2. Прикрепить первый балласт к дольке внешнего слоя.
3. Прикрепить второй балласт к дольке (планируемого) внутреннего слоя.
4. Вложить вторую заготовку в первую. Второй балласт, вкладываясь в первый, перейдет на слой №2 вместе с прикрепленной к нему долькой.
5. Отсечь и выбросить балласт. После удаления балласта меньшая долька продолжит держаться боком за большую, оставаясь на слое №2.


После отсечения балласта к ней уже можно прикреплять другие дольки и даже вторую сложную половинку:


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

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

По этой же причине невозможно изготовить и диагональную сложную половинку:



Сложная половинка может быть обычной и зеркальной/


Поворачивая каждую из них по часовой стрелке, можно получить все остальные:

То есть всего 8 вариантов сложных половинок.

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



Поскольку сложная половинка состоит из двух слоев, следует ввести термин «пара слоев»:
Пара №1
Слой 1&2
(белый&синий)
Пара №2
Слой 2&3
(синий&зеленый)
Пара №3
Слой 3&4
(зеленый&красный)

Совет: определяй слой по цвету, а не по размеру. Потому что пока заготовка не окажется на своем финальном месте (слое), ее размер может сбивать с толку.


Анализируя фигуру, нужно рассматривать каждую пару (слоев) по отдельности и только на сложных парах искать сложные половинки:

Тут пара №1 сложная, пара №2 простая, пара №3 сложная.


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


Если ты решил здесь делать правую сложную половинку:

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


В остальном все так же. Единственно стоит обратить внимание на эту фигуру:

На ней можно увидеть правую и нижнюю сложную половинку, но изготовить возможно только одну из них, по той же причине ограничения резака. Поэтому эта фигура невозможна.
4. Техпроцесс дополнения сложной половинки
Механика зацепа позволяет добавить внутренние дольки к сложной половинке.
Но при условии, что им есть чем цепляться. Бывает 3 видов:
4.1. Обычный зацеп
Здесь в сложную половинку вкладывается простая пара слоев №2. Происходит следующее:
Зеленая долька №2, вкладываясь, переходит с слоя №2 на слой №3. И поскольку вкладываемая заготовка является одним целым, все соединенные с ней дольки также сдвигаются на один слой глубже. Но на технологию изготовления это никак не влияет (X2).

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

Сначала слой №4 в слой №3. Потом 3&4 в слой №2. Наконец 2&3&4 в слой №1.
Но сложная половинка состоит из нескольких слоев, к какому определять ее?
А все просто - по ее внешней дольке. Все это гарантирует, что заготовка сможет зацепиться.

Если ты начнешь вкладывать наоборот, с крайнего внешнего слоя:
Ты облажаешься.
4.2. Сложный зацеп
Принцип тот же, но теперь зацепляемый слой тоже сложный.

Если ты не видишь здесь двух сложных половинок:

То это нормально. Ведь это самая лютая механика, ломающая определение сложного слоя.

Сборка:


Все дело в том, что к внутренней дольке сложной половинки невозможно прикреплять дольки (но можно добавлять с помощью зацепа). Так вот, анализируя пары слоев по отдельности, а именно пару №2, не видно того факта, что синяя долька №2 является частью сложной половинки с пары №1:


Пара №2 выглядит простой, кажется что синюю дольку №2 и №3 можно просто соединить, а потом так же просто вложить дольку слоя №3, но это не так!
Поэтому внутреннюю дольку от предыдущей сложной половинки нужно исключать из определения сложного слоя, и смотреть так, будто ее вообще нет:

Вот теперь пара №2 выглядит сложной, и четко видна нижняя/ сложная половинка.
4.3. Сингулярность
Известно что на фигуре может быть максимум 4 слоя.
Но что произойдет, если вложить слой №5?

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


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

И это возможно:
Зацеп производится слоем №5, одновременно с этим он ужимается прочь.
Правда это работает только с парой №3. А остальные так и остаются зависимыми от наличия долек на следующем слое.
АРХИТЕКТУРА ЗАВОДА
Поскольку сложный завод является просто расширенной версией обычного, то начну с простого.
Обычный
Модули обычного завода:
1. Универсальный смешиватель
Работает без электроники! На первый взгляд может показаться что он не эффективен, ведь из-за общего разделения он может выдавать только один смешанный краситель с максимальной производительностью. Но на самом деле больше и не надо.

Одного конвейера хватает на 8 дабл покрасчиков.
Если все 8 запрашивают белый, то все 3 базовых цвета идут на смешивание.
Если 4 запрашивают белый, а другие 4 запрашивают синий, то половина синего идет на смешивание (для белого), а другая половина сразу на выход.
Получается в любом случае его хватает на 8 покрасчиков.
2. Раздатчик ресов
Выдает запрашиваемый ресурс.
3. Покрасчик & Резак
Красить эффективнее форму целиком (красятся 4 дольки разом), а потом разрезав ее на дольки, повернуть каждую так, чтобы все стали одинаковыми. Таким образом, одного покрасчика & резака хватает на производство одной дольки с максимальной скоростью.

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


Совет: какую бы ты фигуру не делал, мысли дольками. Ведь это минимальная базовая часть любой фигуры. 4 слоя * 4 дольки на каждом = 16 долек всего.
4. Объединитель долей
Соединяет дольки, образуя первый слой фигуры. Если одна из долек отсутствует, то другая пройдет мимо этого (одного) этапа объединения.

В данном случае порядок такой:
Блок 1, долька 3 + 4
Блок 2, долька 2 + 3&4
Блок 3, долька 1 + 2&3&4
Но вообще порядок прикрепления не имеет значения.
5. Вкладчик слоев
Станки те же, предназначение другое. Впихивает в текущий слой внутренний слой. Тут уже порядок важен, надо не путать входы. Если впихивать нечего, то текущая как обычно проходит мимо.

Производство одного слоя готово, остается копи-пастнуть ВСЕ это 3 раза, чтобы каждый этаж делал свой слой. И все, завод готов!
Если не усложнять все косорылым колхозом, ничего сложного, не так ли?

Кстати, смешивателя хватает на 8 покрасчиков = 8 долек, то есть на 2 слоя.
Поэтому на весь завод их достаточно 2.
Сложный
Модули сложного завода:
6. Ключевые модули для создания сложных половинок
1. Присоединитель балласта.
2. Вкладчик балласта.
3. Отсечение балласта.

Теперь буду показывать на чертежах, тк они детальнее:
Эта конструкция предназначена исключительно для создания правой сложной половинки (обычной и зеркальной), и поэтому всегда прикрепляет левый балласт. Для упрощения пока что буду рассматривать только ее.
7. Система смещения долей
Но есть загвоздка.
У правой сложной половинки внешняя долька является №1. И соответственно едет на этаже №1, по конвейеру №1. Она без проблем попадает в блок прикрепления балласта.
Но вот другая, внутренняя долька, уже является №2. И соответственно едет на этаже №2, по конвейеру №2. А блок подключен к конвейеру №1:


Сразу появляется идея тупа сдвинуть блок, но это не решит проблему. Потому что есть еще зеркальная версия правой сложной половинки, ее дольки расположены наоборот, и теперь уже не попадает долька на этаже №1:


Поэтому перед этой конструкцией нужно сделать систему смещения долей. Она будет переводить дольку на конвейер выше (тут с №2 на №1), при необходимости. Логика такая:
Если сложная половинка обычная, то перевести ее внутреннюю дольку (этаж №2)
Если сложная половинка зеркальная, то перевести ее внешнюю дольку (этаж №1)



Учитывая структуру сложной половинки, факт ее наличия означает, что конвейер, на который происходит смещение, гарантированно пустой. Ведь если на каком-либо из слоев есть дольки №1 и №2, то тут уже нет правой сложной половинки, это простая пара слоев.
8. Направление сложных половинок
Достроив до 4 этажей, появляется возможность делать сложную половинку пары №2 и №3, а также многослойную. И вместе с этим появляется необходимость в системе направления. Логика работы на чертеже:

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

Обрати внимание, что здесь синяя долька №2 является частью сразу двух сложных половинок. А точнее, является внешней для сложной половинки пары №2 и внутренней для сложной половинки пары №1. То есть сначала в синюю надо вложить дольку с этажа №3, получив пару №2, а потом отправить эту заготовку на этаж №1, и вложить ее во внешнюю дольку. Таким образом сложная половинка всегда будет попадать на этаж того же номера, что и ее внешняя долька.
9. Сложные половинки всех ориентаций
До сих пор завод мог делать только правые сложные половинки. А чтобы была возможность сделать все остальные, нужно просто продублировать ВСЮ эту систему 3 раза:

Эти "копии" ничем не отличаются и работают абсолютно независимо друг от друга. Каждая обрабатывает сложную половинку своей стороны (если она есть). А именно:
1. Правая
2. Нижняя
3. Левая
4. Верхняя

Единственно, для каждой стороны нужен разный балласт, ну это очевидно.

Остается только объединить это с системами простого завода…
10. Вложение сложных слоев
Система вложения слоев от простого завода подходит и для сложных, но есть нюансы.

В случае с простыми, например, если слой №3 вообще есть, то он обязательно должен вкладываться в слой №2. Потому что слой №3 не может существовать без слоя №2, а тому в свою очередь необходим слой №1. То есть заготовки с разных этажей вкладываются в строгом порядке.

В случае с сложными, у них также слой №3 не может существовать без слоя №2. НО из-за создания сложных половинок, долька слоя №2 может перейти на этаж №1. И на выходе этаж №2 окажется пустым, а заготовка с этажа №3 должна будет проехать мимо, сразу на вложение на этаже №1. То есть заготовки должны направляться в блок вложения если есть как заготовка с текущего этажа, так и с одного из верхних. А если нет, то мимо.


Заготовка слоя №3, проходя мимо вложения этажа №2, отправилась сразу на этаж №1.


Но есть один подлый вид фигур, который все усложняет:


Ее особенность в том, что ее основа - многослойная сложная половинка, она располагается на этаже №1. А обе сложные половинки, пары №2 и №3, должны вкладываться в нее:
Может показаться, что ее нужно собирать наоборот, начиная с нижних слоев.
Но на самом деле это не тоже самое. Тут нужно вложить 2 разные заготовки в слой №1, а не менять порядок.
Это лучше продемонстрирует более сложная фигура:
Как видишь в остальных парах все должно быть в обычном порядке.


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

Такой прикол бывает только на этаже №2, поэтому его надо прокачать:

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

2. Обходной путь.
Если обе заготовки в наличии, но их вложение невозможно, то заготовка с этажа №2 отправится на этаж №1 как обычно. А заготовка с этажа №3 отправится по отдельному конвейеру в дополнительный блок вложения на этаже №1. Таким образом обе будут вложены в заготовку с этажа №1.



Ну вот и все, завод для изготовления сложных фигур готов!
Тоже не так уж сложно, если понимаешь, что делаешь. Но главное еще впереди...
ПРОГРАММА УПРАВЛЕНИЯ СБОРКОЙ
Задача программы обнаруживать все возможные сложные половинки в запрашиваемой фигуре, и выбирать только подходящие. Это не определение цвета и формы долек, это несравненно сложнее. Потому что на выбор влияет множество условий.

Вместо демонстрации электросхем я буду описывать логику обычными словами.
Потому что те, кто ее понимает, и так смогут перевести слова в схему, а те, кто нет - все равно ни черта не поймут.


Для каждой пары слоев отдельная схема.
Их общая логика схожа, но большинство условий отличаются.
ПАРА №1
Выбирает сложные половинки на слое 1&2.
1. Схема определения сложной пары слоев
Перед тем, как искать сложные половинки, нужно определить, что пара сложная:
1.1. Если на паре слоев нет долек одного номера, то активировать следующую схему.
2. Схема обнаружения сложных половинок
По сути любая сложная половинка - это пара из определенных долек:

Сложная половинка
№ дольки внешнего слоя
№ дольки внутреннего слоя
Правая
1
2
Правая/
2
1
Нижняя
2
3
Нижняя/
3
2
Левая
3
4
Левая/
4
3
Верхняя
4
1
Верхняя/
1
4

А не обнаруживать сложные половинки в подобных фигурах поможет предыдущая схема:
На всех образцах есть внешняя долька №1 и внутренняя долька №2. И схема могла бы обнаружить правую сложную половинку, но предыдущая схема не активирует эту, потому что пара слоев простая.
3. Схема выбора вариации
Иногда можно обнаружить две сложных половинки, расположенные перпендикулярно и имеющие общую дольку:

Вариация внутренних:

Тут обнаружена правая и верхняя/ сложная половинка. Общей является белая долька №1.
И она выбирает себе в пару одну из внутренних (синих) долек.
Ну а зеленые тут просто для того, чтобы было чем произвести зацеп. Без них фигура была бы невозможной.

Вариация внешних:

Тут обнаружена правая/ и верхняя сложная половинка. Общей является синяя долька №1.
И она выбирает себе в пару одну из внешних (белых) долек.
А другую белую потом можно будет просто прикрепить.

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


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

Пускай все вертикальные сложные половинки будут выбираться по умолчанию, а все горизонтальные игнорироваться. А схема «горизонтальный режим» при активации производит инверсию. Теперь все вертикальные будут игнорироваться, а горизонтальные проходить. Осталось прописать условия, при выполнении одного из них будет активироваться горизонтальный режим:
3.1. Отсутствие вертикальных

Тут есть 2 горизонтальные сложные половинки, расположенные параллельно.
3.1. Горизонтальный режим активируется если нет ни одной вертикальной сложной половинки.

Но конечно же не все так просто! Еще на выбор могут влиять дольки с других слоев, заставляя просчитывать наперед. Этому и посвящаются следующие пункты.
3.2а. Вариация внутренних, зацеп долькой слоя №3

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

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

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

Эти оба пункта схожи по условию, поэтому объединю в одну формулировку:
3.2. Горизонтальная вариация выбирается если
НАД только ее выбираемой долькой есть долька с слоя №3.

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

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

Для активации горизонтального режима достаточно выполнения одного из правил.
В условии 1 правила долька с слоя №3 должна быть только над одной из вариаций, а в условии 2 правила - над обоими. То есть для каждой отдельной фигуры выполняться может только одно из правил. Так должно быть везде, чтобы избежать конфликтов.
3.4. Вариация внутренних/внешних, зацеп долькой слоя №5
Поскольку слой №5 - это своеобразный балласт, и он всегда целиковый, тут все еще надо смотреть на положение долек с слоя №4:
На всех образцах нужно выбрать горизонтальную лишь по одной общей причине -
нужно "разделить" фигуру так, чтобы на каждой из ее сторон была долька с слоя №4. Одна из этих долек, цепляясь (слоем №5) за другую, переведет всю свою конструкцию на нужные слои.
3.4. Горизонтальная вариация выбирается если
НАД обоими внутренними нет долек с слоя №3 или
НАД обоими внешними есть дольки с слоя №3 и
на слое №4 есть ТОЛЬКО долька №1 и №2 ИЛИ №3 и №4.
Ключевая здесь последняя строчка, остальные просто для уточнения.


Из-за того, что я описываю сборку фигуры полностью (все 4 слоя),
может сложиться впечатление, что перечисленные здесь схемы также решают как собирать всю фигуру целиком. Но на самом деле они просто смотрят наперед, но выбор сложных половинок совершается только в пределах их пары слоев (тут пара №1).
Схема пары №2, в свою очередь, учтет выбор, сделанный предшественником, и продолжит виртуально собирать фигуру уже по своим алгоритмам.
Просчет начинается с первых слоев. Выбор схем слоев влияет только на следующую, но не на предыдущую, это позволяет избежать зацикливания. Зацикливание это когда выходные данные схемы влияют на ее же входные данные, из-за чего она будет бесконечно пересчитывать сама себя.

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

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

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

На этой паре все готово.
Запрос на изготовление выбранных сложных половинок отправляется на завод.
4. Схема назначения избранной сложной половинки
Если на паре №1 сложная половинка только одна,
то она становится избранной.
Это будет использовано на схеме пары №2.
ПАРА №2
Выбирает сложные половинки на слое 2&3.
1. Схема определения сложной пары слоев
Здесь требуется много дополнений, из-за влияния сложных половинок с предыдущей пары.
Схемы сложного слоя и сложных половинок тесно связаны. Первая определяет нужно ли отправлять дольки на вторую. Некоторые следующие пункты скорее относятся ко второй, но все же удобнее написать их вместе.
1.1. Исключение обнаружения невозможной
На образце слева возможно сделать левую сложную половинку, а на образце справа - уже нет.
Нет смысла обнаруживать то, что невозможно сделать. Чтобы схема не обнаруживала ее вообще, надо учитывать выбранные сложные половинки с предыдущей пары.
1.1. Принудительно исключить
«внутреннюю дольку сложной половин(ки/ок) от предыдущей пары слоев»
из перпендикулярной схемы обнаружения сложных половинок. (даже если пара слоев сложная)

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

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

Тут, если не избавиться от невозможной левой сложной половинки, то вариация выберет ее, вместо нижней/. А завод тупа заклинит.
1.2. Игнор простого слоя на несущей части фигуры
Наличие избранной означает, что на паре №1 сложная половинка только одна. Она условно разделяет фигуру на две части. На первой половине собственно, сама сложная половинка, а на второй все находится в плавающем состоянии (просто прикрепить же нельзя). Из-за такого разделения, иногда нужно делать сложные половинки даже если пара выглядит простой.
Сложный зацеп, если ты его еще помнишь из теории, тому пример:

Во всех образцах, чтобы прилепить плавающую половину фигуры (левую), нужно игнорировать простой слой (дольки №2) на правой половине фигуры.

Разделять схему сложного слоя на две части довольно проблематично, ведь фигуры бывают разные. Вместо этого достаточно сделать так, чтобы слой считался сложным, несмотря на это место.
1.2. Исключить дольку избранной из проверки сложного слоя.
1.3. Игнор простого слоя на плавающей части фигуры
Тут наоборот. Даже если на плавающей половине слой простой, то на несущей по-прежнему необходимо обнаруживать сложную половинку:

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

Когда слой считается простым, дольки внешнего слоя не проходят на схему сложных половинок, тем самым отключая обнаружение. Но это правило делает исключение лишь для одной единственной.
1.4. Активация схемы обнаружения сложных половинок
1.4. Если на паре слоев нет долек одного номера, то активировать следующую схему.
А вот это уже старое, основное правило. Но тут к нему добавлены пункты выше.
2. Схема обнаружения сложных половинок
Тоже требует одного дополнения:
2.1 Разблокировка многослойной сложной половинки
Из-за исключения в определении сложного слоя, сложная половинка может быть обнаружена там, где она нафиг не нужна:

На всякий случай, напомню алгоритм:
1. Пара №1 - выбрана правая сложная половинка избранной.
2. Пара №2 - синяя долька исключена из проверки сложного слоя, из-за чего он считается сложным. Активируется следующая схема.
3. Пара №2 - Обнаружена правая/ сложная половинка, потому что есть синяя долька №2 и зеленая долька №1.

Но это только начало проблемы:

А на этой фигуре, на паре №2 уже необходимо делать правую/ сложную половинку (ну и еще нижнюю/).
На 1 образце правая/ сложная половинка не нужна, а на этом уже нужна.
Но у обоих правая часть фигуры абсолютно одинакова.

А есть еще и третья:

Тут на паре №2 правая/ сложная половинка не нужна. Потому что эту дольку можно и нужно прилепить с помощью зацепа пары №3.


Проанализировав все образцы, можно сделать вывод, что сложная половинка должна обнаруживаться в двух случаях:
1. Когда в ней нет лишней дольки. (образец №1 НЕ выполняет это условие)
2. Когда над этой "лишней" долькой нет дольки с слоя №4 + она занята другой сложной половинкой. (образец №2 выполняет это условие, образец №3 - нет)
2.1. Обнаруживает сложную половинку если
нет сторонней внутренней дольки ИЛИ
над сторонней нет дольки с слоя №4 И она забрана другой сложной половинкой.
3. Схема выбора вариации
На паре №1 не может быть одновременно вертикальной и горизонтальной сложной половинки, а на паре №2 - может:

Это связано с сложным зацепом, который имеет смысл только на паре №2+.
Тут есть правая/ и нижняя/ сложные половинки. Поскольку у них нет общей дольки, они существуют независимо.
Так как все это схемы пары №2, то всегда подразумеваются сложные половинки слоя 2&3, если не указано иное.

Поэтому надо разделить все сложные половинки на две группы таким образом, чтобы горизонтальный режим затрагивал только те, которые связаны между собой:
3.1. Отсутствие смежных вертикальных
В этом образце будет активирован горизонтальный режим только для группы №1:

Потому что нет сложных половинок, которые могут иметь общую дольку с нижней/. То есть нет правой и левой сложных половинок.
А в группе №2 есть правая/, и она будет выбрана по умолчанию, вместо верхней.
3.1. Горизонтальная группа активируется если в ней нет ни одной вертикальной сложной половинки.
3.2. Зацеп/многослойная
Полностью аналогично тому же пункту с пары №1. Лишь с поправкой на слои, тут долька с слоя №4 вместо слоя №3.
Ну и еще тут вариации активируют горизонтальный режим только для соответствующей группы.
3.2. Горизонтальная вариация выбирается если
НАД только ее выбираемой долькой есть долька с слоя №4.
3.3. Вариация внутренних, зацеп за сложную половинку пары №1
При выборе вариаций надо смотреть не только наперед, но и назад.
Чтобы собрать данную фигуру, нужно зацепиться за сложную половинку с пары №1:

На выбор между левой и нижней/ сложной половинкой повлияло наличие синей дольки №2.
3.3. Горизонтальная вариация выбирается если
НАД обоими нет дольки с слоя №4 и
ПОД внутренней долькой горизонтальной вариации есть долька с слоя №2.
3.4. Несколько вариаций
Иногда достаточно просто повторять выбор предшественника.

В данном образце, на паре №1 была выбрана верхняя/ сложная половинка, то есть горизонтальная:

И продолжать собирать фигуру нужно в той же ориентации.
3.4. Горизонтальный режим для обоих групп выбирается если избранная горизонтальная.
В таких фигурах в группах нет необходимости, поэтому можно переключать сразу все и не париться.
4. Схема назначения избранной сложной половинки
На паре №1 наличие двух сложных половинок означало, что плавающей части фигуры быть не может. Просто потому, что это самое начало, и каждая из них становилась несущей для своей части фигуры. А если нет плавающей части, то и исключения в сложном слое не нужны. И сама избранная тоже не нужна.

Но на паре №2 сама сложная половинка может быть плавающей:

Левая - плавающая. Правая - несущая и является частью многослойной.

Поэтому надо дополнить условие, чтобы из двух выбиралась несущая.
4.1. Если на паре №2 сложная половинка только одна,
то она становится избранной.

4.2. Если на слое 1&2&3 многослойная сложная половинка только одна,
то она становится избранной.
Это будет использовано на схеме пары №3.
ПАРА №3
Выбирает сложные половинки на слое 3&4.
1. Схема определения сложной пары слоев
Здесь все как на паре №2.
1.1. Принудительно исключить
«внутреннюю дольку сложной половин(ки/ок) от предыдущей пары слоев»
из перпендикулярной схемы обнаружения сложных половинок. (даже если пара слоев сложная)

1.2. Исключить дольку избранной из проверки сложного слоя.

1.3. Принудительно пустить дольку избранной
на схему обнаружения сложных половинок, той же ориентации. (даже если пара слоев простая)

1.4. Если на паре слоев нет долек одного номера, то активировать следующую схему.

Подумай как работает избранная многослойная в этих фигурах:


А в этой левая часть фигуры не является плавающей:

И все эти пункты для нее не актуальны. И избранной в ней нет. А пары №1 и №3 простые.
Ты же помнишь, что сложные половинки можно просто соединять их внешними дольками?
2. Схема обнаружения сложных половинок
На этой фигуре многослойную можно достроить проще:

С помощью зацепа слоем №5, что было недоступно на паре №2.
2.1. Обнаруживает сложную половинку если
нет сторонней внутренней дольки.
3. Схема выбора вариации
На этой паре нет необходимости особо возиться с вариациями. Потому что с помощью механики сингулярности можно сделать саму вариацию как заготовку:

То есть не париться какую выбирать, а сделать сразу две в одной.
3.1. Отсутствие вертикальных
3.1. Горизонтальный режим активируется если нет ни одной вертикальной сложной половинки.
3.2. Несколько вариаций
3.2. Горизонтальный режим активируется если избранная горизонтальная.
4. Схема активации сингулярности
Надо установить, когда слой №5 нужен.

Наличие сложной половинки означает, что фигура разделена на две части (не всегда). Наличие еще другой внутренней дольки означает, что она находится в плавающем состоянии (не точно).
На слое №4 есть 2+ дольки И на паре №3 есть хотя бы одна сложная половинка.
Это не идеальное условие. В некоторых случаях схема будет активироваться, когда в этом нет необходимости. Но поскольку это ничего не ломает, мне как-то пофигу.

55 Comments
Andrei030x  [author] Nov 18, 2024 @ 2:43pm 
Скрин электроники есть в папке «Главное». Ее, как и файл сохранения, можно скачать вверху статьи.
На скрине каждая часть электросхемы обозначена соответствующими статье пунктами.
Но ее лучше всего изучать в игре, потому что можно самому запрашивать интересующие фигуры и видеть как она их обрабатывает.
KpbIwa Nov 18, 2024 @ 3:11am 
Скинте пожалуйста скриншоты электроники
Andrei030x  [author] Aug 29, 2024 @ 5:20am 
Мне кстати стало интересно как у него реализована логика гравитации. Я предположил, и сразу же придумал фигуру , которая его заруинила))
Andrei030x  [author] Aug 29, 2024 @ 5:20am 
Это важное уточнение, потому что например в shapez 2, он похоронил плавающие слои. Дольки там не могут держаться "ребром" и даже "по диагонали на одном слое", и сразу падают. Но за то, там есть кристаллы, которые нельзя ронять, и технология их сборки частично напоминает эту (так же требуется балласт). В общем там тоже можно сделать TMAM, хотя плавающих слоев уже не существует.
Andrei030x  [author] Aug 29, 2024 @ 5:20am 
В данном случае – да.
Но так "T" в TMAM значит True - истинный.
То есть способный сделать любую из возможных фигур без исключений .
Как раз вчера хотел это в определения добавить, но ты опередил)
Miner Aug 28, 2024 @ 10:18am 
гигантская работа проделана, круто
я правильно понял, отличие ТМАМ от МАМ - возможность создавать плавающие сложные дольки? (floating в английском)
Andrei030x  [author] Aug 5, 2024 @ 1:01pm 
Можешь еще мод Industries [mod.io] + wires+ [mod.io] подрубить и попробовать построить MAM там. Он добавляет всего пару механик, но это уже значительно увеличивает сложность. И твой колхозный подход там уже вряд ли вывезет. Но мод все еще значительно проще TMAM. Мне там 60 часов потребовалось, чтоб все до совершенства довести. Если не хочешь грезиться с начальными уровнями – вот мой пройденный сэв [mega.nz] (MAM удалил).
Andrei030x  [author] Aug 5, 2024 @ 12:56pm 
>>Ты нашёл ещё ошибки? Какие? "Лишние" элементы за ошибки не предлагать, если они не мешают сборке.

Ну если не учитывать лютой переколхоженности, то при общем осмотре теперь все ОК. Но как ты и сам сказал – тут ничего сложного, поэтому мест где можно налажать немного. Всего то 4 этапа: подача ресов, покраска, объединение долек, вложение слоев.
mop3e Aug 5, 2024 @ 9:31am 
>>Да и в любом случае, шанс выпадения подобных не особо большой. А сделал ты еще не много.
Ты нашёл ещё ошибки? Какие? "Лишние" элементы за ошибки не предлагать, если они не мешают сборке.
Andrei030x  [author] Aug 5, 2024 @ 9:27am 
>>бессмысленная простыня текста

Бессмысленные здесь только твои доводы про колич возможных фигур.

Весь мой процесс разработки как раз и сводился к написанию этих условий, рядом с каждым из которых я прикреплял картинку фигуры, которая требует этого условия. Ну и еще диаграмму планировки завода проектировал.
И только потом, когда все закончил на бумаге, я открыл игру, и смотря на эти формулировки на планшете, я построил ВСЕ ЭТО всего за пару дней, вообще на расслабоне и лишь с парой мелких косяков.