Руководство

Исходный код ритм-игры: ноты, тайминг и добавление своих песен

Как Riffvolt хранит 12 треков и 48 чартов, где решаются тайминг и подсчёт очков и что нужно, чтобы добавить свою песню.

Арт Riffvolt: четырёхдорожечная трасса нот в розовом, жёлтом, синем и зелёном тянется к освещённой концертной сцене, рядом толпа и электрогитара.

Исходный код ритм-игры — это, по сути, две вещи: код, который судит тайминг, и данные, которые говорят, когда приходит каждая нота. Покупатели почти всегда хотят менять вторую, потому что новые песни делают ритм-игру их собственной. Riffvolt, наш рок-ритм на четыре дорожки, хранит список песен в одном манифесте, а каждый чарт нот — в отдельном файле, поэтому добавление песни — работа с данными и понятным чек-листом.

Это руководство проходит по пакету: во что играют, где живут тайминг и подсчёт очков, как добавить песню, как пересобрать и разместить игру, что разрешает лицензия и чего нет в издании. Имена файлов взяты из руководства покупателя, которое идёт с игрой.

Один факт стоит держать в голове с самого начала: в отличие от некоторых наших шаблонов, Riffvolt нужно пересобирать после изменения исходников или добавления песен. Размещение готовой папки игры требует только статического веб-хостинга.

Во что играет этот исходный код ритм-игры

Riffvolt — готовая рок-ритм-игра на четыре дорожки для браузера. Игроки попадают по нотам в такт, удерживают длинные ноты до конца, изгибают их вамми-баром (whammy) и заполняют шкалу ROCK, которая запускает овердрайв — световое шоу без очков, заканчивающееся при любом промахе. Точность тайминга набирает очки и комбо.

  • 12 полных треков; у каждого есть чарты Easy, Normal и Hard, плюс Rock God, который открывается после тура: всего 48 чартов нот.
  • Тур по четырём площадкам (Гараж, Дорога, Фестиваль и Арена), по три песни на каждой. Звёзды с первых двух открывают бис, а его прохождение открывает следующую площадку, с сюжетными сценами и косметическими наградами, например следами и рамками.
  • Свободная игра: любая песня на любой сложности, с личными рекордами по каждой песне в браузере.
  • Управление: клавиши D, F, J и K по умолчанию, касание дорожек на сенсорном экране или геймпад. Назначение клавиш — в настройках.
  • Комфорт: калибровка аудио для задержки, что помогает с Bluetooth-наушниками, режим уменьшенного движения и режим для фоточувствительных игроков, который смягчает вспышки и молнии.
  • 14 языков интерфейса.

Посмотреть страницу Riffvolt, демо и руководства

Как организованы файлы

В загрузке есть папка game/ (файлы для размещения), source/ (проект TypeScript), documentation/ (иллюстрированные руководства на английском и португальском) и licenses/ (уведомления о сторонних компонентах). Внутри source/ разделение между данными песен и логикой игры чистое.

  • public/manifest.json: каталог песен с длительностью, версией аудио и путями к чартам.
  • public/charts/: 48 чартов нот.
  • public/audio/: записи треков.
  • src/core/chartValidate.ts: схема чарта и проверка тайминга.
  • src/core/judge.ts: оценка попаданий по времени.
  • src/core/scoring.ts: правила очков и комбо.
  • src/game/campaign.ts: прохождение тура.
  • src/game/session.ts: жизненный цикл песни и расчёт результата.
  • src/i18n/locales.ts: словари интерфейса на 14 языках.
  • src/net/localRecords.js: локальные личные рекорды.
  • src/ui/style.css: интерфейс и адаптивная раскладка.

Поскольку судья и подсчёт очков — разные файлы, можно сделать окна тайминга строже или мягче, не трогая начисление очков, и наоборот. Такое разделение стоит искать в любом коде ритм-игры.

Добавление своей песни пошагово

Это первое, о чём спрашивают покупатели ритм-игр. Редактора чартов в пакете нет, поэтому чарты записываются как данные, а руководство перечисляет, что нужно каждому файлу.

  1. Положите запись в public/audio/. Используйте только аудио, на которое у вас есть права для вашего конечного продукта.
  2. Создайте один чарт на каждую поддерживаемую сложность в public/charts/. Каждому чарту нужны совпадающие songId, difficulty, audioVersion, offset и ноты по порядку.
  3. Добавьте песню в public/manifest.json с уникальным id, длительностью, BPM, темой, audioVersion и путями к чартам.
  4. Проверьте каждый чарт валидатором в chartValidate.ts.
  5. Пройдите весь трек на каждой сложности, чтобы убедиться в синхронизации. Валидатор проверяет структуру и правила тайминга, а не то, ощущается ли нота правильно.
  6. Пересоберите и загрузите новую сборку.

Если нужен целый новый саундтрек, а не одна песня, планируйте работу по чартам: 12 песен на четыре сложности — это 48 чартов, и каждый заслуживает полного прохождения перед релизом.

Пересборка и что ещё менять

Рекомендуется Node.js 24 LTS. Внутри source/ выполните npm ci, затем npm run typecheck и npm run build, и публикуйте только содержимое dist/. Команда npm run preview запускает локальную сборку для проверки. Не загружайте node_modules/. Vite использует относительный базовый путь, поэтому сборка работает в подпапке. Поставляемая среда выполнения отформатирована для чтения; руководство просит при пересборке оставить minify:false и cssMinify:false, чтобы следующий человек мог её читать.

  1. Бренд: цвета и раскладка в src/ui/style.css, плюс ваш логотип. Белая марка разрешена, поэтому ваш бренд может заменить наш.
  2. Тексты: src/i18n/locales.ts для языков, которые вы выпускаете.
  3. Тур: порядок площадок и то, что что открывает, в campaign.ts.
  4. Сложность: окна тайминга в judge.ts, затем правила очков и комбо в scoring.ts.
  5. Песни: в последнюю очередь, потому что каждому новому чарту нужно полное прохождение.

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

Хостинг или встраивание в портал

Загрузите содержимое game/ в папку на вашем HTTP(S)-хостинге, сохраните относительные пути и откройте адрес. PHP, база данных или аккаунт не нужны. Не открывайте index.html через file://; для локальной проверки запустите python -m http.server 8765 внутри game/.

  • Браузеру нужны JavaScript, ES-модули, Canvas 2D и Web Audio.
  • Браузеры включают звук только после первого касания или клика, поэтому тихий первый экран — норма.
  • В iframe разрешите полноэкранный режим и автовоспроизведение.
  • Отдавайте .js с JavaScript-MIME-типом, а не как text/plain.
  • Все файлы среды выполнения, шрифты и библиотеки находятся внутри сборки. Обязательного CDN нет, но это не приложение для офлайн-установки.

Сохранения привязаны к источнику браузера, поэтому перенос игры на другой домен начнёт игру у игроков с нуля. Это издание использует собственные ключи сохранения, отдельные от наших портальных изданий. Проекты нативных приложений не входят; выпуск в магазине — отдельная работа.

Чего не включает это издание

Riffvolt — локальное браузерное издание. В нём нет онлайн-комнат и мультиплеера, онлайн-рейтинга или общей таблицы лидеров, рекламного SDK или аккаунтов, редактора чартов, нативных приложений и хостинга. Личные рекорды и прогресс тура остаются в браузере игрока.

Если музыкальная игра вписывается в ваш каталог, рядом могут подойти ещё два наших шаблона с таймингом.

Pinloop: аркада на одну кнопку с 30 мишенями

Ricopop: аркада с рикошетами и 50 уровнями

Лицензия и цена

Riffvolt стоит $49. До 30 ноября 2026 года акция «Чёрная пятница» даёт скидку 15%, поэтому он стоит $41,65, а покупка двух и более шаблонов в одном заказе добавляет скидку за комплект от 5% до 20%. Лицензия бессрочная и неэксклюзивная, на один конечный продукт — ваш или клиента. Можно менять код, графику и аудио, заменить наш бренд своим и предлагать игру бесплатно или с рекламой. Включённые треки можно использовать как часть этого конечного продукта; перепродавать шаблон, его код или ассеты отдельно нельзя. Шесть месяцев поддержки входят, или двенадцать при продлении; новые песни, интеграции и хостинг оцениваются отдельно.

Прочитать полные условия лицензии

Часто задаваемые вопросы

Можно ли добавить свои песни в исходный код ритм-игры?

Да. Добавьте аудио, по одному чарту на сложность и запись в public/manifest.json, проверьте чарты, пройдите их и пересоберите игру. Редактор чартов не входит.

Нужен ли Node.js, чтобы использовать Riffvolt?

Для размещения готовой папки игры — нет. Node.js 24 LTS рекомендуется только для пересборки после изменения TypeScript или добавления песен.

Работает ли игра с сенсорными экранами и геймпадами?

Да. Игроки могут касаться дорожек или использовать геймпад, управление настраивается в настройках. Производительность зависит от устройства, поэтому проверьте те, на которые ориентируетесь.

Как быть с Bluetooth-наушниками и задержкой?

В настройках есть калибровка аудио, которая задаёт смещение звука и помогает с Bluetooth-наушниками.

Есть ли онлайн-таблица лидеров?

Нет. Личные рекорды сохраняются по каждой песне и сложности в браузере игрока. Удалённых соперников и общих рейтингов нет.

Кому её покупать

Riffvolt подходит порталу или сайту, которые хотят музыкальную игру в каталоге; студии, которая делает брендированную ритм-игру для одного клиента; и разработчику, который хочет прочитать, как игра на Canvas 2D и Web Audio судит тайминг на TypeScript. Слабее подойдёт, если нужен визуальный редактор чартов для тех, кто не программирует, или онлайн-соревнования; и то и другое — индивидуальная работа.

Попробовать демо Riffvolt и купить лицензию

Новые песни или брендированная версия? Запросите расчёт