Конкурс js13kGames или как написать игру объёмом 13 Кбайт

13 августа стартовал 13-й игровой джем js13kGames (JS13K) для разработчиков веб-игр на JavaScript. За месяц участникам предстоит написать браузерные игры, размер которых не должен превышать 13 килобайт при сжатии до формата ZIP. Темой JS13K этого года выбрали «Трискайдекафобию» — боязнь числа »13».

Path to Glory — победительница прошлогоднего JS13K

Path to Glory — победительница прошлогоднего JS13K

Организаторами джема выступают разработчик веб-игр Анджей Мазур и студия по созданию инди- и мобильных веб-игр Enclave Games.

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

WebXR-игры создают с использованием веб-фреймворков с открытым исходным кодом A-Frame, Babylon.js, Three.js или PlayCanvas. Запущенная в 2021 году категория Decentralized направлена на изучение аспекта децентрализации веб-игр. Участникам предстоит соревноваться в четырёх конкурсах: OP Guild, Avalanche, Thirdweb и Arcadia. Этот год станет первым для категории Unfinished, в рамках которой разработчики смогут поделиться ходом создания своих проектов.

Победители получат различные призы, включая фирменные футболки, магнитные и лазерные диски, книги, игры и другие атрибуты, посвящённые прошедшим JS13K, а также ряд сертификатов. 

Правила

Как следует из названия джема, размер кода и игровых ресурсов проекта должен быть меньше или равен 13 Кбайтам в сжатом виде. ZIP-файл должен содержать файл index.html в структуре папок верхнего уровня. После распаковки он должен запускаться в браузере. Организаторы призывают не усложнять сборку ZIP-файла, чтобы он распаковывался на любой платформе. Разработчики могут использовать инструменты, которые минимизируют исходный код JavaScript.

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

Разработчикам JS13K запрещено использовать библиотеки, изображения и файлы данных, размещённых на сервере или сервисах, которые предоставляют любые типы данных. Например, шрифты Google Fonts использовать нельзя. Также запрещена аналитика и другие скрипты сбора статистики. Все игровые ресурсы должны соответствовать ограничению размера пакета, но перечисленные фреймворки для WebXR-игр не учитываются.

13 сентября после 14:00 МСК конкурс завершается. С этого момента организаторы перестанут принимать заявки, но могут быть исключения.

Участники JS13K должны располагать правами на каждый ресурс, используемый в игре. Представленные проекты будут опубликованы и станут доступны для просмотра всем. Организаторы призывают присылать только новые и оригинальные игры.

Проекты должны работать и воспроизводиться минимум в двух браузерах: Firefox и Chrome. Однако чем больше совместимых браузеров, тем лучше. Игру могут разрабатывать как один человек, так и целая команда. Отправить заявку на участие можно по ссылке. Участникам разрешено отправлять на конкурс более одной игры. Обработка заявок занимает примерно два дня.

Голосование среди участников продлится три недели с 15 сентября по 4 октября, а победителей объявят 5 октября. Более 20 профильных экспертов предоставят отзывы об играх в течение тех же трёх недель. Их комментарии также опубликуют 5 октября.

Конкурсы прошлых лет

JS13K прошлого года был посвящён теме «XIII век». Первое место получила игра Реми Ванстиландта под названием Path Glory. В этом средневековом битемапе игрокам предстоит сражаться с волнами врагов по пути к финальному боссу.

Dante

Dante

Годом ранее конкурс посвятили теме «Смерти». Победу одержала головоломка Dante от Сальваторе Превити. Соревнование JS13K 2021 года сосредоточилось на теме «Космос». Его победителем стал Райан Малм со своим симулятором ходьбы в космосе Space Garden.

Space Garden

Space Garden

Со всеми работами, удостоившимися наград с 2012 года, можно ознакомиться по ссылкам 2023, 2022, 2021, 2020, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012.

Один из участников JS13K за 2021 год Фрэнк Форс рассказал больше про свой проект Space Huggers, который удостоился восьмого места в рейтинге лучших работ года. Всего в тот год подали заявки на 223 игры. Для Форса конкурс 2021 года стал уже третьим.

Space Huggers — это платформер в жанре «беги и стреляй» с процедурно генерируемым окружением и пиксельной графикой. Проект вдохновлён такими играми, как Broforce, Metal Slug и Contra. Форс рассказал, что создал игровой движок LiitleJS с нуля на чистом JavaScript. Рассматривый проект использует именно LittleJS.

Перед созданием Space Huggers и других проектов для JS13K разработчик сделал более тысячи маленьких программ. В 2018 году Форс занял второе место конкурса с игрой Bounce Back. Через два года его проект NoteCraft победил в категориях Audio и Innovation. Позже Форс представил операционную систему OS13k, которая удостоилась специальной премии JS13K. В последний раз Форс заявлялся на JS13k в 2022 году с Egg Time Rewind.

Форс старался создать движок LittleJS максимально компактным, но высокопроизводительным. Решение использует объектно-ориентированную архитектуру, с которой легко создавать игры. Для рендеринга огромного количества спрайтов со скоростью 60 кадров в секунду LittleJS применяет WebGL. За создание звуковых эффектов отвечает инструмент ZzFX. Система ввода поддерживает клавиатуру, мышь, сенсорный экран и геймпад.

Broforce

Broforce

Space Huggers действительно очень похожа на Broforce от Free Lives. Оригинал вышел в 2015 году, а его прототип Rambros сделали за одни выходные для игрового джема Ludum Dare, отмечает Форс. Он добавил, что в рамках исследования для своей игры провёл несколько часов, играя как в Broforce, так и в его прототип, делая заметки.

Разработчик решил использовать процедурно-генерируемые уровни, чтобы сэкономить место и обеспечить реиграбельность. Вместо добавления множества дополнительного контента Форм сосредоточился на создании весёлого и отполированного основного игрового процесса. Для усложнения задачи автор решил добавить в Space Huggers мультиплеер на четырёх игроков — это первый такой проект на JS13K.

Для своего проекта Форс имитировал внешний вид классических 16-битных игр, поэтому Space Huggers использует спрайт-лист в стиле пиксельной графики. Большинство плиток имеют размер 16×16 пикселей, а несколько тайлов меньшего размера — 8×8. Весь спрайт-лист игры — это 16-битное изображение размером 128×48.

Спрайт-лист Space Huggers

Спрайт-лист Space Huggers

При разработке спрайтов для Space Huggers Форс ориентировался на таблицу спрайтов для Broforce, чтобы понять дизайн персонажей. Однако в своей игре он сократил кадры анимации персонажей до двух. Протагонист Space Huggers вдохновлён Гридо из «Звёздных войн».

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

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

Все враги используют тот же базовый код, что и протагонист, поэтому их ИИ работает скорее как бот, чем как типичные противники в видеоиграх. На высоком уровне код отправляет входные данные общему классу персонажей так же, как и игрок. Такой подход позволяет создавать интересные и сложные боевые ситуации, одновременно уменьшая объём необходимого кода.

eel7df9c0o4bn8ysbqex2lbl0jo.jpeg

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

Форс использовал несколько объектов, которые объединяются для реализации сложного поведения, например, распространения огня. Некоторые из этих объектов способны загораться и поджигать близлежащие предметы. Другие объекты могут взрываться, повреждая и отталкивая предметы рядом, а также поджигать ещё больше вещей вокруг. В игре есть и бочки с водой, которые способны тушить пожары.

g4ve5lwl52ye8brfgi_iqumcaos.jpeg

Все эти объекты используют только три спрайта: ящик, бочка и плита. Применяя различные оттенки и цвета, Форс смог представить множество различных типов объектов.

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

iogwywmfsrl9oshtxjjsahzqqkq.jpeg

Чтобы придать структуру дизайну уровня, на них есть базы врагов, которые состоят из разных комнат и следуют определённому набору правил. Это включает как геометрию уровня, так и размещение врагов и объектов. Форс назвал этот момент, вероятно, самой сложной частью игры.

6_5aac6ghz37j1nhnxvfvlw5rmu.jpeg

В качестве заднего фона Space Huggers использует многослойную систему неба. Параллакс горного пейзажа генерирует алгоритм, который создаёт ландшафт при помощи крошечного фрагмента кода. Градиент с движущимися звёздами по небу подчёркивает ощущения пребывания на другой планете.

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

За звук отвечает инструмент с открытым исходным кодом ZzFX. Он представляет собой маленький автономный проигрыватель звуковых эффектов, который генерирует аудиосэмплы из 20 параметров. В общей сложности Space Huggers использует 11 различных звуковых эффектов, а правильность их воспроизведения потребовала множества настроек.

Форс поделился, что с Space Huggers он полностью автоматизировал процесс сборки. Разработчик создал BAT-файл для Windows, который объединяет все JS-файлы вместе и запускает Google Closure, Uglife и Roadroller для преобразования кода. Также скрипт объединяет минифицированный код в один HTML-файл и архивирует html при помощи Efficient Compression Tool.

В разные годы Фрэнк Форс работал над играми Psi-Ops: The Mindgate Conspiracy, Red Faction: Guerrilla, Starhawk, Doom (2016) и Mafia III.

© Habrahabr.ru