Duck Game

Duck Game

38 ratings
Гайд по созданию анимированных шапок с помощью Hats++ [RU]
By Polanas
Это гайд по созданию и использованию анимированных шляп и другой косметики (крылья, питомцы, и т.д) с помощью мода Hats++.
   
Award
Favorite
Favorited
Unfavorite
Вступление
Hats++ - это клиентный мод, расширяющий механику шапок. Он позволяет создавать более сложные анимированные шапки и другую косметику. Также, он полностью совместим с ванилой. То есть, другим игрокам не нужно устанавливать мод, чтобы видеть шапки и другие эффекты.

Вот мод: тык .

Дополнительная информация
  • (теперь шапки работают в оффлайне)
  • Вы можете перезагружать метапиксели и спрайты, не перезапуская игру. По дэфолту это делается на F6, но вы можете перенастроить это с помощью консольной команды srkb. (Напрмер, "srkb F") Конфиг будет создан в папке "Документы"
Создание шапки (часть 1)
Шапка состоит из элементов. Каждый элемент должен быть расположен в отдельном .png файле. Все элементы должны быть расположены в одной папке. Название этой папки будет названием шапки. Шапки проверяются во всех папках для шапок + в папках, добавленных хэтпаками.
Вот список всех элементов (мы поговорим о каждом из них подробнее позже):
  • ExtraHat
  • Hat
  • Wings
  • FlyingPet
  • WalkingPet
  • Preview
Если папке нет Hat или Preview элементов, шапка не будет создана.

Чтобы добавить элемент, поместите его в папку вашей шапки и назовите по следующему шаблону:
{название_элемента}_{Ширина}_{Длина}.png.
Ширину и длину необходимо указывать в случае, если вы хотите использовать кастомные метапиксели. Они (ширина и длина) определяют размер области, в которой содержится сама шапка. Всё, что находится за границами этой области, будет считаться метапикселями.

В качестве примера рассмотрим эту шапку:




Это элемент Hat. Тут определено две анимации. Размер области всех кадров составляет 128 на 64 пикселя. На 129 ряду располагаются метапиксели. Таким образом, название этого элемента:
hat_128_64.png
Метапиксели
Чтобы понять этот раздел, вам следует ознакомиться с понятием "метапиксель" (если вы не знаете, что это). Вы можете почитать о них тут [duckgame.fandom.com]

Hats++ использует свою собственную систему метапикселей, позволяя манипулировать анимациями и другими вещами. Вот их список:

Красный канал
Зеленый канал
Синий канал
Тип
Название
Описание
0
Любое число
Любое число
Логический (true/false)
"Пристегнута" ли шапка
Если этот метапиксель существует, шляпа не будет спадать с утки
1
Любое число
Любое число
Логический
Большая шапка
Если этот метапиксель существует, шапки могут иметь больший размер. Используйте это, если размер вашего спрайта/кадра больше чем 32 на 32. Максимальный размер: 64 на 64
2
X
Y
2D Вектор
Размер кадра
Определяет размер одного кадра в пикселях (для анимаций)
3
Значение
Любое число
Целочисленный
Тип анимации
Задает тип анимации, который определяет, когда анимация будет проиграна.
4
Значение
Любое число
Целочисленный
Задержка между кадрами
Определяет задержку между сменой кадров в анимации
5
Значение
Любое число
Логический
Зацикленность анимации
Если зеленый канал равен одному, то анимация начнется заново после того, как завершиться. В ином случае, она не перезапустится.
6
Значение
Любое число
Целочисленный
Кадр анимации
Добавляет кадр к анимации
7
Начальный кадр
Конечный кадр
Целочисленный
Период кадров анимации
Добавляет период кадров к анимации (С первого кадра до конечного)
8
Значение
Любое число
Целочисленный
Связь анимаций
Связывает анимации (В зависимости от элемента), сохраняя кадр при смене текущей анимации. Это будет нормально работать, только если у всех связанных анимаций одинаковое количество кадров. Если зеленый канал равен одному, то значение текущего кадра будет сохранено. Если зеленый канал равен двум, то значение текущего кадра будет инвертировано (это работает только для элемента шапки и питомцев)
9
128-X
128-Y
2D вектор
Общий оффсет крыльев
Добавляет крыльям общий оффсет
10
128-X
128-Y
2D вектор
Оффсет крыльев при приседании
Добавляет оффсет крыльям, когда утка приседает
11
128-X
128-Y
2D вектор
Оффсет крыльев при рэгдоллеt
Добавляет оффсет крыльям, когда утка находится в состоянии рэгдолла
12
128-X
128-Y
2D вектор
Оффсет крыльев при скольженииt
Добавляет оффсет крыльям, когда утка скользит
13
Любое число
Любое число
Логический
Генерация анимаций для крыльев
Генерирует анимации для крыльев
14
Любое число
Любое число
Логический
Летающий питомец изменяет угол
Если этот метапиксель существует, летающий питомец будет изменять угол в строну утки при приближении к ней
15
Значение
Любое число
Целочисленный
Дистанция от утки
Определяет, как близко питомец будет подходить к утке, пока не остановится
16
Любое число
Любое число
Логический
Питомец не поворачивается
Если этот метапиксель существует, питомец не будет поворачиваться по горизонтали
17
Значение
Любое число
Целочисленный
Кадр планирования крыльев
Определяет кадр, использующийся для анимации планирования крыльев (когда утка падает)
18
Значение
Любое число
Целочисленный
Статический кадр крыльев
Определяет кадр, использующийся для статической анимации крыльев (когда утка стоит на земле)
19
Значение
Любое число
Целочисленный
Скорость анимаций крыльев
Определяет скорость автоматически сгенерированных анимаций крыльев
20
Любое число
Любое число
Логический
Смена анимации при смене уровня
Если этот метапиксель существует (после определения кадров в анимации), данная анимация будет добавлена в список измеяющихся анимаций. Создайте несколько анимаций одного типа (и используя этот метапиксель), чтобы анимации этого типа изменялись по очереди после смены уровня
21
Значение
Любое число
Целочисленный
Скорость летающего питомца
Определяет скорость летающего питомца
22
128-X
128-Y
2D вектор
Оффсет крыльев, когда утка в сетке
Добавляет оффсет крыльям, когда утка поймана в сетку
23
Значение
Любое число
Целочисленный
Анимация при спавне
Определяет анимацию, которая будет установлена при спавне шапки (Установите индекс этой анимации в зеленом канале)

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

Анимации
Анимации создаются с помощью специальной структуры из метапикселей (более подробное описание этих метапикселей есть в таблице):
  1. Тип анимации (3)
  2. Задержка (4)
  3. Зацикленность (5)
  4. Кадры (6/7)
  5. Изменение анимации при смене уровня (20) (опционально)
Метапиксели анимации читаются сверху вниз. Они должны быть расположены один за другим без пробелов.
Давайте обсудим каждый из них.

Тип анимации определяет, когда анимация будет проиграна. Некоторые типы работают только с определенными элементами.
Все типы анимаций представлены тут:

Индекс
Название
Описание
0
Стандартная (OnDefault)
Стандартная анимация, которая ставится по умолчанию
1
На нажатие кряка (OnPressQuack)
Анимация, которая будет проиграна, когда ваша утка крякнет
2
На отпускание кряка (OnReleaseQuack)
Анимация, которая будет проиграна, когда ваша утка перестанет крякать
3
Статичная (OnStatic)
Анимация, которая будет проиграна, когда питомец достигнет вас
4
При приближении (OnApproach)
Анимация, которая будет проиграна, когда питомец начнет вас преследовать
5
При смерти утки (OnDuckDeath)
Анимация, которая будет проиграна, когда ваша утка умрет (F)
6
При полете (Flying)
Анимация только для крыльев. Будет проиграна, когда ваша утка прыгает
7
При начале приземления (StartIdle)
Анимация только для крыльев. Будет проиграна, когда ваша утка приземляется
8
При падении (Gliding)
Анимация только для крыльев. Будет проиграна, когда ваша утка падает
9
При начале падения (StartGliding)
Анимация только для крыльев. Будет проиграна, когда ваша утка начинает падать
10
При приземлении (Idle)
Анимация только для крыльев. Будет проиграна, когда ваша утка приземлилась
11
При воскрешении утки (OnRessurect)
Анимация, которая будет проиграна, когда утка воскреснет (обычно
это происходит при смене уровня)

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

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

Кадры определяются по их индексам. То есть, у первого кадра будет индекс 0, и так далее. Для определения кадров можно использовать метапиксель кадра (6) и метапиксель периода кадров (7). Однако, вы не можете использовать их одновременно в одной анимации (мб позже это добавлю).
Метапиксель кадра просто добавляет 1 кадр. Вы можете ставить его неограниченное количество раз. Метапиксель периода кадров определяет, соответственно, период. Вы можете использовать его только 1 раз. Например, если этот метапиксель равен (7,0,5), будут добавлены следующие кадры: (0,1,2,3,4,5). Также можно начинать с большего индекса: (7,5,0) - (5,4,3,2,1,0).
Примеры и дальнейшие объяснения
Превью (preview)
Шапка, которая будет добавлена в список шляп в HatSelector. Одев ее, вы оденете модовую шляпу.
Пример:





Шапка (hat)
Она одевается на вас. Её размер не может превышать 32 на 32. Анимации, которые можно связать: {OnPressQuack, OnReleaseQuack}.
Пример:














В этой шапке определены две связанные анимации, + она "пристегнута"

Летающие питомцы (flyingpet)
Летающие питомцы следуют за вами по воздуху. Вы можете настроить их скорость (21) и расстояние, до которого они будут долетать (15). Анимации, которые можно связать: {OnPressQuack, OnReleaseQuack}, {OnStatic, OnApproach}.
Пример:













У этого питомца определены анимации onRessurect и OnDuckDeath, + OnRessurect установлена как OnSpawn анимация.

Ходячие питомцы (walkingpet)
Ходящие питомцы следуют за вами по земле. Вы можете настроить расстояние, до которого они будут вас преследовать (15). Анимации, которые можно связать: {При приближении, статичная>, {на нажатие кряка, на отпускание кряка}.
Пример:

























У этого питомца определены onStatic и OnApproach анимации.

Крылья (wings)
Крылья располагаются за уткой. Они могут проигрывать только некоторые заранее заданные анимации. Вы можете использовать 13-ый метапиксель, чтобы сгенерировать их автоматически или определить их сами. Вы также можете отдельно указать кадры планирования и приземления.
Кадры должны располагаться вериткально, снизу вверх. Предполагается, что в верхнем кадре крылья "закрыты", и далее они раскрываются до самого нижнего кадра.
Чтобы сгенерировать анимации, которые меняются каждый новый уровень, поставьте 20-ый метапиксель и установите в зеленый канал такое значение, сколько у вас измененных текстур (максимально криво звучит, но лучше ничего не придумал :P)
Пример:
















Эти крылья генерируют анимации для 3-х цветов. Каждый раунд цвет меняется.

Большие шапки
Существует лимит по размеру шапок: 32 на 32 пикселя. Мне это не понравилось, поэтому я добавил возможность использовать большие шляпы (до 64 на 64). Чтобы указать, что шляпа должна быть большой (это нужно, так как иначе все частицы, плащи и камни становились бы большими шапками), просто поставьте 1-ый метапиксель.
Пример:













У этой шапки определена анимация onApproach, + установлен 1-ый метапиксель. Размер кадра: 64 на 64.

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




Создание хэтпака
Если вы хотите создать хэтпак в виде клиентного мода, вот, что вы должны сделать:
  • Подготовьте шаблон клиентного мода
  • Создайте папку в папке "content" и поместите все ваши шапки туда
  • Откройте код вашего мода в любом редакторе (Я полагаю, что вы знакомы с программированием)
  • Добавьте ссылку на Hats++ мод (.dll файл расположен в папке мода в steamapps\workshop\content\312530)
  • Переопределите метод OnPreInitialize и добавьте путь к вашим шапкам с помощью метода AddHatPath
Пример кода:
using static HatsPlusPlus.HatsUtils; //код мода... protected override void OnPreInitialize() { AddHatPath<MyMod>("myHats"); base.OnPreInitialize(); }
35 Comments
Fenirol 10 Jul, 2024 @ 12:38am 
блинб, почему нет возможности заставить анимацию кряка проигрываться до конца, это было бы удобно(((
3123 3 Sep, 2023 @ 4:47am 
как сделать питомца летающего
Поганище 6 Aug, 2023 @ 6:46am 
Можно более подробный гайд по созданию хэтпака, я пытался разобраться и ничего не понимаю
12 шагов до рая 7 Jun, 2023 @ 11:21am 
палас дабав в друзя
куни за пряники 8 Jun, 2022 @ 12:27am 
Понял, спасибо большое! ^^
Polanas  [author] 7 Jun, 2022 @ 3:31pm 
Ага, и с крыльями ;p
куни за пряники 7 Jun, 2022 @ 1:55am 
Понял, получается только с питомцем так можно?
Polanas  [author] 6 Jun, 2022 @ 10:04pm 
Привет, такой возможности к сожалению нет чисто технически (так как большие шапки состоят из нескольких обычных)
куни за пряники 6 Jun, 2022 @ 12:07pm 
Всех приветствую, возможно ли сделать большую шляпу?(не питомца, как в примере, а именно шляпу размером до 64 на 64). У меня не получается: почему-то в игре вместо элемента hat у меня отображается элемент preview, когда я пытаюсь поставить метапиксель большой шляпы. С чем это может быть связано? Можно какой-нибудь шаблон найти или получить именно для большой шляпы, чтобы я смог разобраться в проблеме? Заранее благодарю.
Spectral 1 May, 2022 @ 4:15pm 
:melon: