Как вы, возможно, знаете, я долго мурыжил фабрикат "Зендикарские Эдры". Эдры это такие летающие куски камня октаэрической формы. В процессе работы над ними возникли некоторые трудности, которые удалось решить не совсем обычным способом.


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

• Как сделать копии сложного объекта на разной высоте?
• Как сделать копии сложного объекта из разных материалов?

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

Так что пришлось найти более простой способ, лежащий вне Миропостроителя. Любые вещи, с которыми работает Миропостроитель, сохраняются в .json файлах в текстовом виде. Поэтому я решил подправить задним числом текстовое содержимое фабриката. Чтобы проиллюстрировать действенность метода, вот картинка, составленная из снимков дерева Nyuudles'а до и после преобразования:


Ниже приведён снимок простенького .json файла с моими эдрами в текстовом редакторе AkelPad.


В этом файле представлены:
1. Метаданные
2. Данные строения объекта
3. Размер объекта
4. Начальная точка объекта

Пойдём разбираться снизу вверх.

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

Если же вы измените начальную точку, весь экземпляр фабриката сместится в соответствующее место. Это очень полезно, если вы делаете одинаковые объекты на разной высоте. Здесь их можно сместить одной цифрой, а не перерисовывать заново.

Данные строения объекта
Здесь разобраться сложнее.

Данные представлены в формате "блоков такого-то материала столько-то". По сути это одна строка, и чтобы из неё получился объект, необходим его размер. Как я понимаю, Миропостроитель раскладывает данные в ряд блоков, а затем этот ряд начинает делить до указанного размера. Сначала Миропостроитель выкладывает снизу вверх столбец по координатам (0, 0), затем, достигнув потолка, так же выкладывает соседний столбец по координатам (1, 0). Когда достигнута ширина объекта, следующий столбец появится в (0, 1) и процесс продолжится до заполнения всего объёма объекта. Измените размер фабриката - развёртка в объёмную структуру слетит.

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

Проще всего с количеством, но здесь есть одна хитрость.
A = 1, B = 2, C = 3, ... Z = 26,
a = 27, b = 28, c = 29, ... z = 52,
0 = 53, 1 = 54, ... 9 = 62, + = 63, / = 64.
А вот если количество блоков становится больше 64, то тогда меняется предпоследний знак на следующий по порядку: kA = 1, lA = 65, mA = 129, nA = 193. Это правило перестаёт действовать после 256 блоков. Вероятно, после этого просто начинается новая последовательность, хотя проверить не довелось.

Обратите внимание, что предпоследний знак может отличаться: "k" для блоков, "o" для объектов. Для пустого блока - воздуха - и трёх базовых блоков с травой используются другие символы.


Теперь вы знаете, что "mAkT" - это двадцать блоков льда. Если аккуратно заменить в данных фабриката коды одного материала на коды другого, то вы сможете буквально превратить свинец в золото! Ну, разве что в Безграничности нет свинца :)

Вот как выглядит фабрикат, текстовое описание которого было приведено выше:


Метаданные
С метаданными всё значительно сложнее. В основном они описывают скошенные блоки, но не только.

Там, где в списке кодов стоит "..." это означает, что кодируется не сам блок, а его производные - ступени, плиты или стены. Конфигурация конкретного блока описывается метаданными.

Вот примеры метаданных нецелых блоков:
• BAA - Slab (нижний полублок)
• DAA - Slab x2 (два полублока)
• UAA - Step (ступени)
• IAA - Wall (стенка)
• yAA - фрагмент двери
• QAA - фрагмент люка

Остальные варианты ещё предстоит изучить подробнее.

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

Заключение
Разбираясь с деревом на картинке в начале статьи, я столкнулся со множеством сложностей. Будьте предельно осторожны, меняя материалы в текстовом редакторе.

Помните, что:
• не все материалы поддерживают скосы;
• не все имеют нецелые производные вроде ступеней;
• заменяемые последовательности символов могут обнаружиться вне группы, особенно если в них есть повторяющиеся символы вроде "kQk";
всегда нужно оставлять запасную копию файла.

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

Но если вам необходимо просто сменить горную породу, тип древесины или листвы, то этот метод должен отлично сработать.

Комментарии
  • Комментов пока нет.