Три года делал аркаду про кубики. Началось всё с того, что мне стало скучно в собственном платформере

Три года делал аркаду про кубики. Началось всё с того, что мне стало скучно в собственном платформере

Идея завелась ещё в университете. Хотел платформер: прыжки, уровни, секретки, всё как положено. Написал прототип, погонял его пару вечеров и поймал неприятную мысль — мне в нём скучно.

Причём скучно не потому, что криво сделано. А потому, что в платформере ты половину времени просто идёшь. Дошёл до интересного места, три секунды экшена, дальше опять идёшь. Мне хотелось, чтобы месиво начиналось сразу.

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

Так платформер превратился в аркаду. С этого момента у меня появилось правило, которое я держал все три года: если в игру неудобно играть стоя в вагоне одной рукой — значит, сделано неправильно.

Ниже расскажу, что из этого выросло и обо что я убился по дороге. Всё делал сам: код, графику, музыку, звуки.

Первое, что улетело в мусор — кнопки. Любые.

В аркаде на телефоне у тебя нет второй руки. Одна держит поручень, вторая играет. Значит, управление — только движение. Стрельба идёт сама: враг попал на линию огня, куб по нему выстрелил.

Три года делал аркаду про кубики. Началось всё с того, что мне стало скучно в собственном платформере

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

Звучит как упрощение, но на деле это меняет всю игру. Раз стрельбой ты не управляешь, единственное твоё решение — куда встать. Вся тактика превращается в позиционирование: подобраться так, чтобы под линию огня попало сразу трое, и при этом не влететь в четвёртого.

Второе, что улетело — обучение текстом. Никаких «нажмите сюда, чтобы сделать то». Если человек запустил игру в метро, у него нет настроения читать. Игра должна объясняться первыми десятью секундами.

Тут честно: сначала это была заглушка.

Мне нужно было хоть что-то на экране, чтобы проверить механику. Открыл Aseprite, нарисовал квадрат, приделал глаза. Потом второй квадрат, врага. Погонял — и понял, что квадрат с глазами внезапно обаятельный. Он не выглядит как недоделка, он выглядит как персонаж.

Три года делал аркаду про кубики. Началось всё с того, что мне стало скучно в собственном платформере

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

Девяносто врагов, и все должны различаться

К третьему году в игре набралось шесть миров, тридцать уровней и девяносто видов врагов. Плюс тридцать боссов.

И вот тут я налетел на главную проблему.

Первый заход был такой: берём один шаблон кубика и лепим на него отличия. Этому рожки, этому кратер, этому корону, всем разные цвета. Логично же?

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

Пришлось переделывать с другого конца. Правила получились такие.

Враг узнаётся силуэтом, а не наклейкой. Не квадрат с рожками, а вообще другая форма.

Три года делал аркаду про кубики. Началось всё с того, что мне стало скучно в собственном платформере

Слева направо: приземистый клин — таранщик, он визуально прёт вперёд ещё до того, как двинулся. Круг в шипах — не подходи вплотную. Острый ромб, бур со стрелой, снеговик из двух шаров, плоская линза. Ни одной пары, которую можно перепутать в бою.

Одна деталь, не больше. Это второе правило, купленное кровью. Две характерные мелочи на одном враге — и он превращается в мусор, взгляд не цепляется ни за что. Рог. Или кратер. Или корона. Выбирай одно.

Цвет — принадлежность к миру, а не к врагу. Лава оранжевая, крио голубое, гравитация фиолетовая. Игрок сразу видит, где он находится. Различать врагов между собой цветом бесполезно, эту работу делает форма.

Три года делал аркаду про кубики. Началось всё с того, что мне стало скучно в собственном платформере
Три года делал аркаду про кубики. Началось всё с того, что мне стало скучно в собственном платформере

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

Поведение: не сто скриптов, а семь

Девяносто видов врагов — это не девяносто программ. Иначе я бы не дожил до релиза.

На деле у меня семь небольших скриптов поведения, и почти все враги — это они с разными числами:

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

Дальше начинается интересное. Мина с крошечным радиусом и огромным уроном — это одно чувство. Мина с большим радиусом и слабым уроном — совсем другое, она не убивает, а выдавливает тебя с удобной позиции. Скрипт тот же, враг ощущается новым.

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

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

Три года делал аркаду про кубики. Началось всё с того, что мне стало скучно в собственном платформере

Живые лица оказались важнее, чем я думал

Каждый враг умеет корчить рожи. Шесть состояний в одном файле-ленте, игра просто переключает кадр.

Три года делал аркаду про кубики. Началось всё с того, что мне стало скучно в собственном платформере

Нейтраль, довольный, злой, удивление, x_x и снова удивление. Изначально это была чистая баловня, я делал её для себя. А потом заметил, что она работает как игровая информация.

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

Плюс — это то, из-за чего игра не выглядит злой. Она про то, как кубик отбивается от армии кубиков, а не про войну. Мордочки задают тон.

Боссы: главное — предупредить

Босс в аркаде легко превращается в несправедливость. Прилетело неизвестно откуда, ты умер, переигрывать не хочется.

Три года делал аркаду про кубики. Началось всё с того, что мне стало скучно в собственном платформере

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

Работают все боссы на одном общем конечном автомате: выбор атаки, предупреждение, удар, откат, при потере здоровья — переход в ярость с ускоренными таймингами. Разница между ними — в наборе атак и числах. Тридцать боссов на одной такой машине сделать реально, тридцать отдельных программ — нет.

Обо что я убился

Три года — это много ошибок. Три самые дорогие.

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

Первый живой отзыв бьёт больно и по делу. Тот же друг, наигравшись, сказал: «музыка монотонная». Я обиделся. Потом послушал сам, подряд, минут двадцать — и переделал целый мир с нуля. Он был прав.

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

Что в итоге

Три года делал аркаду про кубики. Началось всё с того, что мне стало скучно в собственном платформере

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

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

Игра называется Cube Battle 2093.

22
11
11