Автор уровней
Тот, кто делает уровни во встроенном в игру редакторе, от первой пробы до уровня, готового к отправке
Начните с Редактор уровней, затем соберите что-нибудь небольшое по Первый уровень: маршрут
Тот, кто делает уровни во встроенном в игру редакторе, от первой пробы до уровня, готового к отправке
Начните с Редактор уровней, затем соберите что-нибудь небольшое по Первый уровень: маршрут
Скачайте игру, откройте список уровней и пройдите любой. Чтобы собрать свой, создайте уровень в редакторе и положите в его папку трек на 1-2 минуты
Ошибки в игре - в issues releases, вопросы - в Discord. Приложите строку версии из настроек и шаги, после которых появляется ошибка
Ещё до запуска игра показывает, насколько уровень тяжёлый для вашего устройства, шкалой из пяти полосок: чем больше полосок горит, тем легче уровень. Зелёные полоски - идёт плавно, жёлтые - впритык, к
Редактор встроен в игру, отдельно ставить ничего не нужно. Уровень в нём - это папка с треком и файлами, которую вы ведёте от пустой до готовой к публикации
Уровень - это папка с файлами, первый собирается за шесть шагов, а весь редактор держится на шести понятиях: объект, кадр, промежуток, слой, родитель, ключ
Уровень - это обычная папка на диске: файл уровня, метаданные и всё, что он использует. Делайте его в Json, а передавайте копией папки, устанавливать ничего не нужно
Шесть шагов до первого плей-теста: создать уровень, добавить трек, разметить ритм, поставить объекты, запустить плей-тест, сохранить
Объект, кадр, промежуток, слой, родитель, ключ - шесть понятий, на которых держится весь редактор
Уровень считает время в своих кадрах, а не в кадрах экрана, поэтому играется одинаково на любом железе. Длину уровня задаёте вы, а fps лучше оставить по умолчанию, 60
Ключ - это значение на одном кадре одной дорожки плюс сглаживание, с которым к нему приходят. Всё, что в уровне движется, меняет цвет или включается и выключается, - это список ключей
Минимальный уровень - это один трек. Картинки и шрифты вы приносите сами, и всё это лежит в папке уровня
Минимум - это трек. Всё остальное необязательно, и почти всё вы приносите сами
Конвертируйте трек в ogg: он весит в 8-10 раз меньше wav и, в отличие от mp3, не дописывает тишину в начало файла. Кроме ogg читаются только mp3 и wav
Если можно обойтись фигурой, берите фигуру: у неё нет файла, расхода памяти и вопроса о правах. Картинку делайте размером с её место на экране, не больше 2048 для мобильного уровня и 4096 вообще
Уровень лежит в своей папке в levels внутри папки игры. Файлы, которые он использует, не переименовывайте, а полный бэкап - это копия папки уровня
В уровень, который вы публикуете, можно класть только файлы с открытой лицензией не строже CC BY-NC или с разрешением автора. Уровень для себя можно собирать из чего угодно
Трек можно взять, если у него открытая лицензия не строже CC BY-NC или автор прямо разрешил взять его в уровень. Трек с YouTube, SoundCloud или Spotify без разрешения автора брать нельзя
Ресурс годится, если у него подходящая лицензия или разрешение правообладателя. Третьего способа нет
Безопасно по умолчанию: музыка с ccMixter, Freesound и Kenney, картинки с Poly Haven, Pexels и Unsplash, шрифты с Google Fonts. С YouTube, SoundCloud и Spotify брать нельзя
Карточка записывает, откуда ресурс и на каких условиях: ссылку, лицензию, разрешения, авторов. Пустое поле лицензии значит "никто не проверял", и такой ресурс отклоняется
Каждый сервис проверяет уровень по своим правилам, поэтому один может его принять, а другой отклонить. Блокирует публикацию только ошибка, предупреждение отправляет уровень на модерацию
Напишите автору по шаблону, не вычёркивая пункты 1-3, и сохраните ответ. Годится только разрешение, которое прямо разрешает распространять уровень, а не только личное использование
Хороший уровень - это когда игрок понимает, за что умер, движется вместе с музыкой и хочет попробовать ещё раз
Игрок должен понимать, за что умер. Показывайте опасность до того, как она станет опасной, давайте на реакцию не меньше 12 кадров и делайте опасное контрастнее декора
Сначала разметьте сетку ритма: темп, потом смещение, потом размер такта. Пик уровня ставьте на пик трека, а в брейках давайте игроку передышку
Проектируйте под числа самого игрока - все они на 6_avatar и 7_damage - и под реакцию человека в 12-15 кадров. Новый паттерн сначала показывайте в безопасном виде
Держите смысловое содержимое подальше от края: на других экранах край в другом месте, а вырез телефона может накрыть снаряд. Тряска камеры хороша на один такт, быстрое вращение и резкий зум укачивают
Ведите цвет содержимого через ссылку на тему, литеральный цвет оставьте для действительно уникального. Постобработку включайте на пике и выключайте обратно, иначе снаряды теряют границы
Тема - это палитра из 64 цветов, на которые объекты ссылаются по номеру слота. Поменяйте тему, и всё, что на неё ссылается, поменяется вместе с ней
Сначала собирайте картинку из встроенных фигур, а свою рисуйте только там, где ни одна не подходит. Свет и тень кладите поверх одной базовой фигуры, каждый повторяющийся элемент делайте префабом, а ре
Привычки, а не дизайн: в каком порядке строить уровень, как не делать работу дважды и не терять её, как проверить его ботом, передать и строить вместе с ИИ-ассистентом. Начните с порядка работы
Сначала трек, fps, разметка ритма и маркеры, затем скелет из голых фигур и его плей-тест. Декор, тема и эффекты - в конце
Объекты, которые потом придётся менять все сразу, - префаб, сколько бы их ни было. Содержимое, которое описывается правилом, - генератор. В остальных случаях просто копируйте
Больше всего времени экономят палитра команд (Ctrl+Shift+P), поиск по содержимому (Ctrl+F), кнопка "Показать" и стрелки на таймлайне. Любую клавишу можно переназначить в настройках
Работу страхуют автосохранение, отмена и копия папки уровня. Полный снимок уровня - только копия папки. Смену формата файла и удаление уровня отменить нельзя
Бот проходит уровень тем же управлением, что и у вас, и проверяет читаемость, а не сложность. Прохождение он не гарантирует
Упакуйте папку уровня в zip или tar.gz, а для пароля зашифруйте её gpg. На другой машине распакованный уровень сразу играется, и игра сама читает такие архивы
ИИ-клиент с поддержкой MCP может править уровень, открытый в редакторе, у вас на глазах. Каждый пакет ИИ - один шаг отмены, а публиковать, удалять файлы и писать поверх другого уровня ИИ не может
Пойдёт ли уровень на устройствах игроков, решают число фигур в кадре и перерисовка. Начните с бюджета уровня, а если делаете уровень для телефонов, читайте и про мобильные устройства
Телефон нормально держит около 1000 фигур в одном кадре, слабый ПК 5000-10000. Дороже количества обходится перерисовка: полупрозрачное во весь экран, слой на слое
На телефоне палец закрывает экран, а края занимает система. Держите важное подальше от краёв и проверьте уровень на слабом телефоне: первой его сажает полноэкранная полупрозрачность
Что делает конкретное поле или кнопка редактора, по странице на панель, окно или вкладку. Справочник не читают подряд: сюда приходят из поиска или по ссылке из статьи
Основной список терминов проекта. Интерфейс игры, эта документация и любые другие тексты о Bullet Hero используют эти слова, а новый термин сначала добавляется сюда
Метаданные - это обложка уровня: название, описание, картинка, авторы, возрастной рейтинг, сложность и предупреждения о содержимом. Другому человеку уровень сегодня передают папкой или через Мастерску
Таймлайны показывают уровень во времени: объекты, ключи выделенного объекта, шаблон префаба, аудио и события. Сетка долей помогает класть всё это на музыку
Иерархия - дерево объектов текущего кадра по родителю. У каждого таймлайна свой буфер обмена, а палитра команд находит любое действие редактора по имени
Инспектор объекта правит поля выделенного объекта, инспектор ключа - выделенные ключи, сразу на всех дорожках, которых касается выделение
Эффект - это частицы VFX Graph, параметры которых разбиты на модули: сколько частиц, откуда вылетают, как двигаются, какого цвета и размера. Править их можно в инспекторе или в редакторе эффектов
Звук аудиодорожки проходит цепочку эффектов: их 11, от нормализации и компрессора до эха и реверберации. Цепочка, скорость и громкость задаются в инспекторе аудиодорожки
Генератор создаёт контент и применяет его к уровню одной операцией, которую можно отменить одним шагом. Все генераторы запускаются из окна "Генераторы" на панели инструментов
Модификатор меняет то, что уже есть в уровне: удаляет, пересчитывает fps, сплющивает префабы, квантует ключи, подгоняет и сдвигает отрезки. Запуск отменяется одним шагом
Здесь задаётся всё, что принадлежит самому уровню: длина, fps, сид, ориентация, метаданные, публикация. Отсюда же уровень запускают, проверяют правилами и восстанавливают из копии
Текстуры, фигуры, темы, эффекты и префабы уровня лежат в его папке и уезжают вместе с ним. У каждого ресурса своя карточка с источником, лицензией и авторами
В режиме префаба вы правите шаблон, и сохранение переносит правку во все его установки. Войти можно кнопкой "Править префаб" в инспекторе установки, вернуться в уровень - Ctrl+Shift+E
Экспорт сохраняет уровень вне игры папкой или архивом вместе со всеми файлами, которые он использует. Пароль шифрует содержимое уровня на диске, а забытый пароль восстановить нельзя
Здесь настраиваются автосохранение, сетка, выделение, гизмо и заготовки нового уровня. Автосохранение по умолчанию включено и срабатывает через 60 секунд после правки
Иерархия, инспекторы и таймлайны пристыкованы вокруг вьюпорта. Клик по ручке на краю панели открывает или закрывает её, перетаскивание меняет ширину
Коллекции хранят ресурсы, которые вы переиспользуете между уровнями. Уровень никогда не ссылается на коллекцию: импорт копирует ресурс внутрь, и уровень играется где угодно
Уровень отправляется только с вкладки "Публикация" в настройках уровня: архивом или в Мастерскую Steam. Отчёт проверяет уровень сам, и ошибки в нём блокируют отправку
Редактор рендерит открытый уровень в видеофайл через ffmpeg, установленный на вашем компьютере. Рендер идёт офлайн, кадр за кадром, поэтому видео точное, как бы медленно ни работал компьютер
SDK - формат уровня Bullet Hero в виде открытой библиотеки на C#. Игра читает и пишет уровни через неё, и ваша программа может делать то же самое
SDK - это пакет BulletHero.SDK на nuget.org или сборка из исходников. В Unity он подключается как git submodule, а пример ConsoleSmoke проверяет, что ваши уровни читаются
Уровень - это папка: содержимое в level.json или level.blob, метаданные в metadata.json или metadata.blob, обложка и медиафайлы. Бэкапы, рекорды и настройки игрока остаются на устройстве
Уровень экспортируется папкой, tar.gz или zip, по желанию под паролем: zip с AES-256 или OpenPGP. Формат присланного файла SDK определяет по первым байтам, а не по имени
Версий три: gv - игра, sv - SDK, mg - поколение формата моделей. По mg SDK мигрирует старый файл, а файл с поколением новее сборки отказывается читать
Валидацию вы вызываете сами через ValidationFacade, в сохранение и загрузку она не встроена. Находки делятся на Error, Warning и Advice, а ValidateAndFix чинит то, что можно
Сервис описывает, какие уровни принимает, файлом PublishProfile: лицензии, источники ресурсов, обязательные поля, пределы размера. Добавить сервис - значит написать файл, а не править анализатор
Bullet Hero - бесплатный гибрид ритм-игры и bullet hell. Аккаунт не нужен, сервера пока нет. Уровни делают игроки во встроенном редакторе и передают друг другу папкой или архивом
Я использую ИИ и считаю, что его стоит использовать. Но правильно: как инструмент, работу которого я проверяю, а не как того, кто думает за меня. Бездумно он выдаёт много текста и кода, которые выгляд
Bullet Hero бесплатна, есть на Windows и Android, а SDK, документация и сборки открыты. Ядро держит тысячи объектов в кадре на телефонах и покрыто более чем 8000 тестов
Вопросы, обратная связь и ваши уровни - в Discord. Помочь игре может любой: исправить ошибку в документации, добавить перевод, сообщить о баге или сделать уровень
Общение и вопросы - в Discord, видео - на YouTube, ошибки в игре - в issues репозитория bullet-hero/releases. Исходный код - в организации bullet-hero на GitHub