Overview
Недавно в игре появилась возможность сделать вашу шапку более уникальной, добавляя частицы, меняя способ отрисовки и т.д.Что за что отвечает и как это сделать объясню в этом гайде.
Введение
Стандартные шапки имеют формат 32х96 с плащём или 32х64 без плаща, где каждые 32*32 пикселя это отдельный фрейм. Чтобы получить возможность использовать метаданные игра предусматривает шапки на 1 пиксель шире, то есть если ваша шапка была с плащём и вы хотите её модифицировать, то вам нужно добавить 1 пиксель справа и будет спрайтмап размером 32х97. В этом самом 1 дополнительном столбике пикселей мы и будет добавлять наши новые фичи.
Распределение пикселей и режимы
Итак, сначала определимся, что мы работаем с данными формата RGB и оперируем тем, что красный [ R ], зелёный [ G ] и синий [ B ] означают именно 8 битное число (0-255). Усвоили? Тогда идём дальше.
Красный [ R ] будет означать тип метаданных (частица, условие, относительная позиция), а зелёный [ G ] и синий [ B ] дополнительные параметры (первый параметр задаётся всегда для G, второй параметр, если таковой есть, для B).
Форматы данных метапикселя:
- *Булевое значение* – Само наличие метапискеля на спрайте означает, что он применён.
 - *Вектор* – Задаётся для изменения относительной позиции по X = G-128, Y-128 (См. пример метапикселя R=1)
 - *Целое число* – Задаётся для параметров, которые принимают целые значения (Количество частиц и т.п.)
 - *Пара целых* – Задаётся для указания 2-х целых значений. (Предопределённые параметры, к примеру, фигура) X = G, Y = B
 - *Числовое значение, с плавающей запятой* – Задаётся для указания таких параметров которые могут принимать нецелые значения X = (G-128)/10, по модулю не превышающие 1. (Модификатор длины, прозрачности и т.п.).
 - *Нормализованный вектор* – Задаётся для указания 2-х нецелых значений по модулю не превышающих 1. (Модификатор гравитации и т.п.) X = (G-128)/10, Y = (B-128)/10.
 - *Случайный нормализованный вектор*
 
максимальное значение метапикселя иногда может отличаться от стандартного
[БАЗОВЫЕ МЕТАПИКСЕЛИ]
R = 1 [Вектор] — Смена относительной позиции шапки, G отвечает за смещение по оси x, B по оси y по формуле X-128, где X – это код соответствующего цвета. Если Х больше 128, то шапка сместится вправо. Пример: Код цвета R=1 G=127 B=128 сместит вашу шапку на 1 пиксель ВЛЕВО. Код цвета R=1 G=128 B=129 сместит вашу шапку на 1 пиксель ВНИЗ
R = 2 [Булевое значение] — Наличие этого типа метаданных обозначает то, что цвет (255;255;255) (Белый) и (157;157;157) (Серый) будет заменён на соответствующий цвет надевшей его утки.
R = 3 [Булевое значение] — Наличие этого типа метаданных обозначает то, что шапка будет всегда повернута только в одну сторону, вне зависимости от того, куда смотрит утка.
Метапиксели плаща
R = 10 [Вектор] — Смена относительной позиции плаща, G отвечает за смещение по оси x, B по оси Y по формуле x-128, где Х – это код соответствующего цвета. Если Х больше 128, то плащ сместится вправо. Пример: Код цвета R=10 G=127 B=128 сместит ваш плащ на 1 пиксель влево.
R = 11 [Булевое значение] — Наличие этого типа метаданных обозначает то, что плащ будет отрисовываться ПОВЕРХ носящей его утки.
R = 12 [Нормализованный вектор] — Модификатор длины и покачивания слева направо плаща, G отвечает за относительную длину, B за покачивание слева направо, и определяются по формуле (x-128)/10. По дефолту значения G=131;B=138, При таких значения длина плаща 0.3, а сила покачивания 1.
R = 13 [Нормализованный вектор] — Модификатор покачивания плаща от ветра, G отвечает за покачивание по оси X, B за покачивание по оси Y. По дефолту значения G=138;B=138, при таких значениях модификатор никак не проявляется на плаще.
R = 14 [Числовое значение, с плавающей запятой] — Модификатор сплющивания плаща/следа к верху/началу, G отвечает за коэффициент сжатия. По дефолту значение G=133; при таком значении плащ к верху сжимается от 1 до 0.5
R = 15 [Числовое значение, с плавающей запятой] — Модификатор сплющивания плаща/следа к низу/концу, G отвечает за коэффициент сжатия.
R = 16 [Числовое значение, с плавающей запятой] — Модификатор прозрачности плаща/следа в верху/конце, G отвечает за коэффициент прозрачности.
R = 17 [Числовое значение, с плавающей запятой] — Модификатор прозрачности плаща/следа в низу/начале, G отвечает за коэффициент прозрачности.
R = 20 [Булевое значение] — Наличие этого типа метаданных обозначает то, что плащ будет следом пути (по типу радуги от телевизора).
Метапиксели частиц
R = 30 [Вектор] — Смена относительной позиции появления частиц, G отвечает за смещение по оси x, B по оси y по формуле X-128, где X – это код соответствующего цвета. Если Х больше 128, то спавн сместится вправо. Пример: Код цвета R=1 G=127 B=128 сместит спавн частиц на 1 пиксель влево.
R = 31 [Целое] — Определяет поведение частиц из заданного списка, G отвечает за тип пресета: 0 = No Behavior, 1 = Spit, 2 = Burst, 3 = Halo, 4 = Exclamation.
R = 32 [Пара целых] — Определяет фигуру распространения частиц, G: 0 = В точке, 1 = Окружность, 2 = Квадрат; B: 0 = Случайно по периметру 1 = Заполнить фигуру случайно, 2 = Разбросать вокруг фигуры.
R = 33 [Вектор] — Определяет размер фигуры по координатам G=X и B=Y.
R = 34 [Целое] — Количество частиц для разброса.
R = 35 [Числовое значение, с плавающей запятой] — Определяет “запас жизней” частиц.
R = 36 [Нормализованный вектор] — Изначальная скорость частиц G=X и B=Y.
R = 37 [Нормализованный вектор] — Модификатор гравитации на частицы.
R = 38 [Нормализованный вектор] — Модификатор трения частиц.
R = 39 [Нормализованный вектор] — Определяет прозрачность частиц: G = Начальная прозрачность, B = Финальная прозрачность.
R = 40 [Нормализованный вектор] — Определяет размер частиц: G = Начальный размер, B = Финальный размер.
R = 41 [Нормализованный вектор] — Определяет изначальный угол частиц: G = Начальный угол, B = Финальный угол.
R = 42 [Вектор] — Дополнительная смена относительной позиции спавна частиц.
R = 43 [Булевое значение] — Наличие этого типа метаданных обозначает то, что частицы будут отображаться ПОЗАДИ утки.
R = 44 [Булевое значение] — Наличие этого типа метаданных обозначает то, что позиция частиц будет закреплена относительно шапки.
R = 45 [Булевое значение] — Наличие этого типа метаданных обозначает то, что частицы имеют порядок анимации и не будут получать фреймы случайным образом (Пояснение: первая частица будет иметь 1 кадр, вторая 2 кадр и т.д. вместо дефолтного каждая частица случайный кадр).
R = 46 [Булевое значение] — Наличие этого типа метаданных обозначает то, что анимация частиц будет зациклена.
R = 47 [Булевое значение] — Наличие этого типа метаданных обозначает то, что анимация будет начинаться со случайного кадра.
R = 48 [Числовое значение, с плавающей запятой] — Определяет то, с какой скоростью будет происходить анимация.
R = 49 [Булевое значение] — Наличие этого типа метаданных обозначает то, что частицы будут вращаться вместе с шапкой вокруг позиции из метапикселя 42 (Если метапиксель отсутствует, то будет взята дефолтная позиция).
R = 70 [Булевое значение] — Наличие этого типа метаданных обозначает то, что шапка будет иметь “Влажные губы” (По типу шапок холодильника или огромного глаза).
R = 71 [Булевое значение] — Наличие этого типа метаданных обозначает то, что шапка будет иметь “Механические губы” (По типу шапок холодильника или огромного глаза, но другого цвета).
Метапиксели кряка
Были добавлены в сегодняшнем обновлении
R = 60 [Числовое значение, с плавающей запятой] — Задержка между нажатием кнопки “Кряк” и сменой кадра шапки на “Кряк”.
R = 61 [Числовое значение, с плавающей запятой] — Задержка между отпусканием кнопки “Кряк” и сменой кадра шапки на “Обычный”.
R = 62 [Булевое значение] — наличие этого типа метаданных обозначает то, что повторный “Кря” будет не доступен, пока не закончится задержка установленная ранее
Метапиксели случайности
Требуется проверка: Ранее эти метапиксели не работали как следует, но вышедшее сегодня обновление возможно исправит их.
R = 100 [Случайный нормализованный вектор] — Определяет то, что предыдущий (стоящий выше на спрайте) метапиксель получит случайное значение Х, определяемое через G: минимальное и В: максимальное. Работает только с метапикселями частиц.
R = 101 [Случайный нормализованный вектор] — Определяет то, что предыдущий (стоящий выше на спрайте) метапиксель получит случайное значение Y, определяемое через G: минимальное и В: максимальное. Работает только с метапикселями частиц.
R = 102 [Случайный нормализованный вектор] — Определяет то, что предыдущий (стоящий выше на спрайте) метапиксель получит случайное значение Х и Y, определяемое через G: минимальное и В: максимальное. Работает только с метапикселями частиц.
Кастомный камень и частицы
В прошлом разделе вы могли прочитать о наличии неких частиц, но откуда они берутся и как их добавить в шапку?
Итак, кроме 97-го пикселя в ширину мы также имеем ещё и 24 дополнительных пикселя высоту.
Берём нашу шапку в 32х97 пикселей и трасмутируем её в 56х97, работать будем с 24 пикселями снизу.
Чтобы сделать кастомный камень выделяем область слева снизу 24х24 пикселя и рисуем.
Если вы рептилия, а канал надо завалить камнем и камень вы не дадите, то скипаем слева 24 пикселя слева и берём вторую область 24х24 пикселя, здесь делим область на 4 равных сектора по 12х12 пикселей и уже здесь рисуем наши частицы.
Пример с объяснениями
Видя, что многие вообще не выкупают происходящего, я решил сделать шапку телевизор и объяснить каждый использованный метапиксель.
Плащ:
В качестве следа от телевизора мы будем делать плащ, для этого нужно закрепить его на шапке и избавиться от присущих плащу покачивания и ненужного изменения размеров.
R = 20, значения G и B любые. Так как у телевизора есть радужный след, то плащ сделаем следом.
R = 10, G = 128, B = 123. Поднимаем плащ на 5 пикселей вверх, чтобы соответствовать шапке.
R = 12, G = 138, B = 128. Максимально удлиняем плащ и обнуляем покачивание.
R = 15, G = 0. Делаем конец следа минимальной толщины.
Частицы:
В качестве частиц я решил сделать переключение канала. Для этого, конечно, нужно закрепить эту частицу в конкретном месте шапки. А также анимацию переключения.
R = 30, G = 131, B = 131. У меня получилось так, что частицы появлялись на 3 пикселя левее и выше нужного места. Поэтому я их смещаю на 3 вправо и на 3 вниз.
R = 34, G = 1. Частица будет всего одна.
R = 36, G = 128, B = 128. (В этом нет необходимости из-за метапикселя 44) устанавливает изначальную скорость на 0, чтобы частицы не сместились случайно.
R = 37, G = 128, B = 128. Обнуляем гравитацию, чтобы частица не двигалась сама.
R = 40, G = 138, B = 138. Делаем размер частицы максимальным и статичным.
R = 44. Чтобы частица всегда соответствовала выбранному месту на шапке.
R = 45. Чтобы анимация могла запуститься.
R = 46. Зацикливаем анимацию.
R = 48, G = 130. Выбираем скорость анимации.
R = 49. Чтобы частица правильно лежала в телевизоре, даже в положении лёжа.
R = 60, G = 5. Очень маленькая задержка для смены кадра кряка. (Чтобы кадр не появился раньше частицы)
R = 61, G = 5. Просто ещё одна небольшая задержка.
R = 62. Немного защиты от спама
Шапку можете скачать и посмотреть, если интересно. Также можете задавать вопросы в комментариях.
Завершаем
Итак, у нас есть файл с готовой шапкой и нужными нам метаданными. Сохраняем её в формате .png и отправляем в папку с шапками. Конвертировать не нужно.
Папка с шапками располагается на пути Documents/DuckGame/Custom/Hats
ВАЖНО: если вы все же конвертировали шапку в формат .hat, то ложить её нужно как раньше в папку с .exe файлом игры
Частицы проявляются когда вы удерживаете кнопку кряка.
Могу лишь сказать, что вам придется много раз тестировать все изменения и чтобы не перезаходить в игру тысячу раз, вы можете нажимать F5, чтобы обновить все шапки.
А на этом я заканчиваю свой гайд, желаю вам удачи в создании шапок и мир вам, люди.
P.S. За шапку лисы невероятно огромное спасибо Faktor77