Создание контента для клиента

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

Содержимое:

Задний фон

Используемые инструменты:

  • Любой графический редактор (Встроенный в систему, Paint.NET, GIMP, Adobe Photoshop и т.д.)
  • Любой текстовый редактор (Встроенный в систему, Notepad++, Kate и т.д.)

Для корректной работы задних фонов вам нужно перевести изображения фона в соотношение сторон 4:3. Минимальное разрешение — 256×192. Изображения могут быть в форматах PNG, GIF, APNG, или WEBP. Рекомендуется использовать PNG для статических фонов и WEBP для анимированных.

Названия изображений фона в клиенте совпадают со соответствующими позициями. Например, def.png. Если нужно добавить что-то, что будет поверх фона и персонажей, то сохраните это в отдельном файле, и допишите к названию _overlay. Например, вы хотите, чтобы поверх def.png отображался стол, то сохраните отдельно стол в def_olerlay.png.

Пример организации файлов

Разберём файл design.ini. В него можно вместить два параметра:

  • scaling — определяет, будет ли задний фон принудительно сглаживаться или нет. Параметр smooth сглаживает фон, а pixel — нет.
  • positions — этот параметр определяет названия дополнительных позиций. Названия пишутся через запятую.

Задние фона хранятся в папке base/backgrounds.

Улики

Используемые инструменты:

  • Любой графический редактор (Встроенный в систему, Paint.NET, GIMP, Adobe Photoshop и т.д.)

Здесь очень легко. Просто создайте квадратное изображение, на котором будет показана нужная улика. Минимальный размер — 40×40.

Улики хранятся в base/evidence.

Музыка и звуки

Используемые инструменты:

  • Любой аудиоредактор (Встроенный в систему, Audacity, и т.д.)
  • Конвертер музыки (Встроенный в AIMP, FFMPEG и т.д.)

Здесь тоже легко. Через аудиоредактор исправьте некоторые шероховатости, а через конвертер перегоните музыку/звук в нужный формат. Клиент поддерживает форматы MP3, OGG, WAV, OPUS. Рекомендуется использовать OPUS.

Музыка хранится в base/sounds/music, а звуки в /base/sounds/general и /base/sounds/blip.

Персонажи

Используемые инструменты:

Есть два шага для создания персонажа:

  1. Собрать и/или создать контент (Анимации, вспомогательные изображения, звуки).
  2. Создать char.ini файл.

1. Собирание и/или создание контента

Анимации

Для начала разберёмся с анимациями персонажа (Далее — эмоции, дабы избежать тавтологии).

Эмоции должны быть в соотношении сторон 4:3 или 16:9. Рекомендуется использовать КАК МИНИМУМ разрешение 256×192. Для персонажей, которым нужно более высокое разрешение (Персонажи из HD версии AA, например) лучше использовать разрешения 512×384 или 960×540. Использование слишком большого разрешения может привести к плохой работоспособности клиента при использовании персонажа, так что будьте осторожны.

Сами же эмоции могут быть либо статическими, либо анимированными. Для вторых есть три версии одной и той же эмоции:

  • (a) эмоция, которая отвечает за состояние персонажа, когда он молчит.
  • (b) эмоция, которая отвечает за состояние персонажа, когда он говорит.
  • Опциональная (c) эмоция, которая отвечает за более плавный переход между (a) и (b) эмоциями.

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

Разберёмся, как это всё назвать в файлах персонажа.

  • (a)normal.gif — (a) версия анимированной эмоции.
  • (b)normal.gif — (b) версия анимированной эмоции.
  • (c)normal.gif — (c) версия анимированной эмоции.
  • deskslam.gif — преанимация или анимированная эмоция, которая имеет только одну версию.
  • normal.png — статическая анимация.
Пример организации файлов

Далее разберём форматы, которые могут использоваться:

  • Для статических эмоций можно использовать PNG или WEBP. Рекомендуется использовать WEBP.
  • Для анимированных эмоций можно использовать GIF, APNG, WEBP. Рекомендуется использовать APNG для 2D персонажей и WEBP для высококачественных 3D персонажей, но у нас на сервере принято использовать WEBP для всех персонажей.

Для конвертирования эмоций в другой формат используйте этот набор скриптов и утилит.

Не пытайтесь использовать несколько файлов разных форматов с одинаковым названием (normal.webp и normal.gif, например). Клиент загрузит только один из файлов в следующем приоритете:

  1. WEBP
  2. APNG
  3. GIF
  4. PNG
Кнопки

Когда вы собрали эмоции, пришло время создать кнопки, обозначающие их. Создайте внутри папки персонажа папку под названием emotions. Далее, создайте сами кнопки в том порядке, в котором вы хотите, чтобы были эмоции. Сами кнопки должны быть в PNG и носить название по типу buttonXX_[off/on], где XX — номер кнопки. button_off кнопки показываются, когда эмоция не выбрана, а button_on — когда, собственно. выбрана. button_on кнопки клиент может генерировать автоматически, так что самому их делать вам необязательно. Кнопки должны быть квадратными и могут иметь любой размер, но рекомендуется использовать 40×40.

Также, вам следует создать иконку персонажа, которая используется в списке персонажей. Она называется char_icon, которая находится там же и сами эмоции, и, так же, как и кнопки, она должна быть в PNG, квадратной и может иметь любой размер. Но рекомендуется всё-таки использовать 60×60.

Выкрики

Вы можете создать выкрики для своего персонажа. Они должны иметь следующие названия:

  • holdit.wav
  • takethat.wav
  • objection.wav
  • custom.wav

Какой выкрик за какую кнопку отвечает должно быть понятно из их названия. Вместо WAV вы можете использовать любой другой поддерживаемый формат.

Также, вы можете создать больше одного кастомного выкрика. Для этого вы должны создать папку custom_objections и перенесите звуковой файл с анимированным облачком выкрика в созданную папку. Названия у них должны быть одинаковыми и они могут быть любыми.

2. Создание char.ini

Пример char.ini
[Options]
name = Phoenix
showname = Wright
needs_showname = true
side = def
blips = male
chat = aa
chat_font = Igiari
chat_size = 10
effects = default/effects
realization = realization
scaling = fast

[Shouts]
holdit_message = This is a custom Hold it! message!
custom_name = My custom shout
custom_message = This is my custom shout!
custom2_name = My second custom shout
custom2_message = This is my second custom shout!

[Emotions]
number = 13
1 = pointing#-#pointing#0#
2 = thinking#-#thinking#0#
3 = normal#-#normal#0#
4 = confident#-#confident#0#
5 = paper#-#document#0#
6 = headshake#nope#-#1#
7 = slam#deskslam#handsondesk#1#
8 = nod#nodding#normal#1#
9 = damage#ohshit#sweating#1#
10 = zoom#-#zoom#5#
11 = bashful#-#sheepish#1#
12 = coffee#phoenix-chugs#phoenix-coffee#1#
13 = despair#sweating#phoenix-emo#1#

[SoundN]
7 = sfx-deskslam
9 = sfx-stab2
13 = sfx-deskslam
14 = sfx-deskslam

[SoundT]
7 = 4

Разберём все части подробнее.

[Options]
  • name — определяет название персонажа. Оно должно совпадать с названием папки персонажа!
  • showname — опциональный параметр. Это шоунейм, т.е. ник игрока в IC чате, применяемый если игрок выбрал персонажа и не ввёл свой шоунейм. Обычно в качестве шоунейма ставят сокращение от названия персонажа (Имя или фамилия персонажа, например).
  • needs_showname — опциональный параметр, по умолчанию стоит true. Определяет, нужен ли персонажу шоунейм или нет. Если стоит false, то шоунейм не будет показываться вообще.
  • side — определяет позицию персонажа по умолчанию. Можно использовать следующие:
    • def — Сторона защиты
    • pro — Сторона обвинения
    • hld — Помощник защиты
    • hlp — Помощник обвинения
    • jud — Судья
    • wit — Свидетель
  • blips — опциональный параметр, по умолчанию стоит «male». Определяет так называемый блип персонажа — звук «пикания», когда персонаж «разговаривает» в IC чате. Блипы располагаются в sounds/blips. Положите туда свой блип или выберите один из уже существующих.
  • chat — опциональный параметр. Определяет, какой чатбокс (Специальная коробка, в которой находятся сообщения в IC чате) будет использовать персонаж и какие у него будут выкрики, если у него нет своих. Всё это добро лежит в папке base/misc/.
  • chat_font — опциональный параметр. Определяет шрифт сообщения, которое отправляет игрок, сидящий на вашем персонаже.
  • chat_size — опциональный параметр. Определяет размер шрифта сообщения, которое отправляет игрок, сидящий на вашем персонаже.
  • effects — опциональный параметр. Определяет папку в base/misc, откуда клиент будет брать эффекты.
  • realization — опциональный параметр. Определяет звук, который играет, когда игрок на вашем персонаже использует вспышку. Сам звук должен быть в base/sound/general.
  • scaling — опциональный параметр. Определяет, будут ли эмоции персонажа сглаживаться или нет. Используйте параметр smooth для включения сглаживания, а fast для отключения.
[Shouts]

Эта секция опциональна. Она позволяет настроить названия выкриков.

  • holdit_message — название Hold it выкрика IC чате.
  • objection_message — название Objection выкрика IC чате.
  • takethat_message — название Take that выкрика IC чате.
  • customX_name — название кастомного выкрика в списке, где X — его номер. Для первого выкрика его указывать НЕ надо.
  • customX_message — название кастомного выкрика IC чате, где X — его номер. Для первого выкрика его указывать НЕ надо.
[Time]

Опциональная секция. Она отвечает за время проигрывания преанимации. Время указывается в миллисекундах. Без особой необходимости не стоит использовать данную секцию.

[Emotions]

Данная секция отвечает, собственно, за эмоции вашего персонажа. Каждая эмоция записывается с новой строки, а сама эмоция записывается таким образом: номер = комментарий#преанимация#эмоция#модификатор#deskmod. Разберём каждую часть.

Номер

Это место эмоции в списке. Номер должен не повторяться.

Комментарий

Это своего рода название эмоции, которое показывается во нижнем списке эмоций. Пытайтесь делать его не слишком длинным.

Преанимация

Эта часть отвечает, собственно, за преанимацию персонажа. Если эмоции не нужна преанимация, то используйте символ . Пропишите название преанимации в файлах персонажа БЕЗ формата. Вы можете сортировать преанимации в папки. Например, введение anim/deskslam будет предполагать, следующую сортировку:

char.ini
anim/
deskslam.gif

А введение anim/young/damage эту сортировку:

char.ini
anim/
young/
damage.gif
Эмоция

Эта часть, собственно, отвечает за эмоцию персонажа. Как и в случае с преанимациями, нужно прописать название эмоции в файлах персонажа БЕЗ формата и БЕЗ (a), (b) и (c) префикса. И также вы можете сортировать эмоции по папкам. Например введение /def/thinking предполагает следующую сортировку:

char.ini
(a)/
def/
thinking.gif
(b)/
def/
thinking.gif
Модификатор

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

  • 0 — обозначает, что у эмоции нет преанимации и звука, который проигрывается при использовании этой эмоции.
  • 1 — обозначает, что у эмоции есть преанимация и/или проигрываемый звук.
  • 5 — обозначает, что эта эмоция «зума», т.е. близкого к «камере» изображения персонажа. При использовании данного модификатора принудительно убирается стол или другой элемент, который прорисовывается поверх заднего фона и персонажа.
  • 6 — Тоже самое что и 5, но в начале используется преанимация.
Deskmod

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

  • -1 — Принудительно показывать стол, но не на позициях jud/hld/hlp/.
  • 0 — Принудительно скрывать стол.
  • 1 — Принудительно показывать стол.
  • 2 — Скрывать стол во время преанимации.
  • 3 — Показывать стол ТОЛЬКО во время преанимации.
  • 4 — Тоже самое что и 2, но вдобавок игнорируются пэйры.
  • 5 — Тоже самое что и 3, но вдобавок игнорируются пэйры.
[SoundN]

Опциональная секция. В ней вы можете настроить, какой звук будет играть при использовании той или иной эмоции. Возьмём для примера строку 7 = sfx-deskslam. Слева находится номер эмоции, для которой нужен звук, а справа название самого звука. Звуки находятся в папке /base/sounds/general.

[SoundT]

Опциональная секция. В ней вы можете настроить, через сколько звук будет играть при использовании той или иной эмоции. Например, вот строчка 7 = 4. Слева находится номер эмоции, для которой мы настраиваем время, а справа само время. Время указывается в тиках. Один тик равен 60 миллисекундам.

[SoundL]

Эта секция отвечает за то, каким эмоциям нужно зацикливать звук или какие звуки нужно зациклить.

[SoundL]
1 = 0
2 = 1
sound = 1
[emote_FrameSFX]

Этой секции может быть несколько штук. Она опциональна и отвечает за то, на каком кадре эмоции будет проигрываться какой-либо звук. Вместо emote пропишите название эмоции в файлах персонажа БЕЗ формата и префиксов.

[pre-minigun_FrameSFX]
10 = soj-sarge-hatch
18 = soj-sarge-extend
40 = soj-sarge-cock
50 = soj-sarge-shoot
180 = soj-sarge-retract
204 = soj-armie-drone-set
212 = soj-sarge-hatch
[emote_FrameRealization]

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

[pre-salute_FrameRealization]
32 = 1
[emote_FrameScreenshake]

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

[pre-salute_FrameScreenshake]
32 = 1