Duck Game

Duck Game

158 ratings
Как добавить новые возможности в вашу шапку
By FaecTerr
Недавно в игре появилась возможность сделать вашу шапку более уникальной, добавляя частицы, меняя способ отрисовки и т.д.
Что за что отвечает и как это сделать объясню в этом гайде.
4
2
3
2
   
Award
Favorite
Favorited
Unfavorite
Введение
Стандартные шапки имеют формат 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.
  • *Случайный нормализованный вектор*
максимальное значение метапикселя иногда может отличаться от стандартного

https://steamuserimages-a.akamaihd.net/ugc/1774958268307954888/BAB8E8D72B80A42A970BA9B4C65FE825107FB167/?imw=256&&ima=fit&impolicy=Letterbox&imcolor=%23000000&letterbox=false
[БАЗОВЫЕ МЕТАПИКСЕЛИ]

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 отвечает за относительную длину по X, B за относительную длину по Y, и определяются по формуле (x-128)/128. G = 0, B = 0 направят плащ концом вперёд вверх от центра, а G = 255, B = 255 назад вниз от центра.

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 = Финальный размер. (Диапазон обоих значений конвертируется из [0-128] до (0-1
))
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
76 Comments
swasa 5 May, 2023 @ 2:17pm 
как сделать так чтоб плащ летал рядом с уткой? :senpai:
JustFunduk 30 Dec, 2021 @ 9:49am 
Ребят, что делать если при создании пака (т.е. мода) перестали появляться эффекты и плащи? При .hat всё работает. (Делал через QuakeHead)
JustFunduk 30 Dec, 2021 @ 9:43am 
ツPepeFeelsツ
Это возможно сделать благодаря *R*, но это довольно тяжко
Віс 29 Oct, 2021 @ 6:49am 
Всем привет, кто может обьяснить простыми словами как сделать метапиксели потока, точнее 3 паровых гейзера :majinbuu:
v359 27 Sep, 2021 @ 8:08am 
нет, возможно это появится, но очень сильно сомневаюсь
куни за пряники 24 Jul, 2021 @ 5:53am 
Я всех приветствую. А можно ли сделать так, что когда ты зажимаешь кнопку кряка, происходит самостоятельная анимация частиц, то есть мне не нужно постоянно нажимать на кряк, чтобы появлялись новые частицы?(проблема актуальна для реализации анимации огня)
FaecTerr  [author] 28 Apr, 2021 @ 12:41pm 
Обновил чутка гайд. Добавил раздел с созданием шапки и ещё 1 пример.
hopeless. 27 Apr, 2021 @ 10:20am 
А я просто тупой, всё я нашел. Спасибо за ответ
FaecTerr  [author] 27 Apr, 2021 @ 9:11am 
paint.net (не сайт, просто написана на .NET фреймворке)
hopeless. 27 Apr, 2021 @ 9:03am 
Что за прогу ты юзал для метапикселей?