Как я сделал игру за неделю: проблемы, решения, фичи
В посте я подробно описал почти все свои шаги разработки игры на джем. Вы узнаете о том, с какими проблемами я столкнулся. Как я их решил. И какой полезный опыт я приобрел.
В начале рекомендую сыграть в игру. Она браузерная. Малаваре качать не придется
Siberian Game Jam
В начале мая я набил пару шишек на Сибирском геймджеме. Что я вынес оттуда:
Не делать в соло контент-зависимые игры!
Делать то, что в пределах твоих умственных способностей. И движка.
Заранее сделать страничку для игры.
Игру я худо-пополам сделал. Но из классной первоначальной идеи ритм-нарративного раннера я состряпал… пиксельный платформер.И выложить вовремя я не успел: преждевременно напился певом и не понял, что надо загрузить именно zip. Дурак. А оказывается там все просто, если обойтись без красивого оформления. Эту игру я покажу как-нибудь в другой раз.
Big Gdevelop Game Jam: тема и идея
Заявленная тема: Overpowered. Типа, слишком сильный? Чересчур прокачанный?
Кайдзю, супергерои и метеориты отпали — слишком много артов, слишком много анимации, слишком много событий.
На этот раз хотелось сделать что-то максимально ленивое. Легко масштабируемое. С минимумом графики. Обыденное и понятное.
И тут я вспомнил отпуск во Вьетнаме: загаженный отель, балкон 1×1 метр, пиво, закат... и легионы муравьёв, которые таскали мои закуски 24/7. Они же — чемпионы по соотношению вес/переносимый груз! Идеально для «Overpowered». Кор-механику я составил быстро
Игроку нужно нарисовать самый оптимальный путь, чтобы муравьи украли больше еды за меньшее время и смылись в муравейнике. По истечении времени на поле падает большой тапок и игра заканчивается.
Технические детали:
- Ограниченное поле: широкий экран без прокрутки;
- Муравьи, которые двигаются по заранее отмеченной и сложной траектории;
- Игроку надо нарисовать маршрут;
- Разбросанная по полю еда;
Сворованная еда дает бонусные очки, за которые игрок прокачивает муравьев
- Сила. Чем больше сила - тем более громоздкую еду могут поднять муравьи. Вплоть до коров.
- Скорость
- Количество. Одно очко - один дополнительный муравей. Больше еды. Один муравей может взять только одну еду.
Реализация: от костылей к костылям
С самого начала я осознал две ключевые проблемы:
- Механика рисования — как дать игроку возможность рисовать путь.
- Движение муравьёв — как заставить их двигаться по сложной траектории.
Их решение пришло на ум еще на стадии идеи. Оно было вульгарное. Примитивное. Настолько костыльное и возмутительное, что геймдизайнеры топятся в рафе, программисты уходят в грузчики, а тех-менеджеры и тестеры бессильно рыдают.
Я решил не позориться и поискать нормальные решения. Вариантов было несколько:
1. Рисовашку украсть из демонстрационных материалов Paint GDevelop. Берем оттуда рисование свободной линии. Затем используется кастомное расширение, которое преобразует нарисованную линию в SVG, затем загружается обратно в движок. И муравьи двигаются по этой векторной линии. Насколько я понял, юниты используют данные из SVG (векторный рисунок). Муторно и слишком много подводных камней.
2. Тоже Paint, но без конвертации в вектор. Другое кастомное расширение "Распознавание пикселей". Муравьи будут отбирать определенные пиксели и идти по ним. Потыкал демо и понял, что оно работает через пень колоду.
3. Вообще без рисования. Оставить его только для игрока. Так, игра при нажатии ЛКМ начинает сохранять координаты курсора. А затем муравьи будут идти по этим координатам. Самое нормальное решение. Но в силу своих ум. способностей я не понял логику, по которой движок сохраняет массивы. Тем более в них я не разбираюсь.
Что поделать. Я надел колпак "Долбоеб" и вернулся к первоначальному возмутительному решению. Звучит она так.
У встроенного в движок поведения Pathfinder есть особенность: можно создавать непроходимые стены, чтобы юнит их обходил. Также этот функционал можно включать-выключать по своему усмотрению.
Решение: завалить все поле непроходимыми клетками 32х32. Когда игрок строит маршрут, он создает кружочки. А если эти кружочки соприкасаются с клетками, то их непроходимость отключается.
То есть. Игрок не рисует маршрут. А создает лабиринт. А юнитам ничего не остается, кроме как его проходить.
Плюсы: просто и быстро. Если маршрут неверен, то игра проигрывается автоматически.
Минусы:
- Рисование сильно зависит от нагруженности системы и игры. Если игрок быстро нарисует маршрут, то какой-то участок может оказаться отрезанным. И муравьи никуда не пойдут
- Клетки 32*32 довольно большие, и разнообразить поле другими объектами затруднительно. Клетки меньшей площади сильно нагружают систему.
Решение проблемы:
- Если муравьи не двигаются более 2-х секунд то засчитывается проигрыш, и игрок начинает уровень сначала. Норм вариант для казуалки, но может раздражать, если маршрут не получается когда телефон или браузер тормозит.
- Разнообразил поле тарелками, машинами, деревьями, бочками с токсическими отходами (ну а откуда еще могли взяться такие могучие муравьи). Эти объекты снижают скорость муравьев, и не блокируют поле.
Игра почти готова - это ловушка!
Прототип на уровне клеток без графики был готов спустя 9 ч. Из них 8 ч. я курил форумы как сделать норм. механику чтобы не выглядеть долбоебом. Как видите, я не нашел
Ассеты я надергал в векторных стоках, и перерисовал как мне нужно. В принципе, рисовать с 0 пришлось только муравьев, скатерть для пикника и разную траву по мелочи. Ну и весь UI.
Векторная графика - топовый вариант, когда игра не соответствует по духу пиксель-арту. Векторный клипарт легко масштабируется по размерам, редактируется, перекрашивается и так далее.
Самое большое преимущество вектора - его бесплатное разнообразие. Нужный цветочек можно взять из рекламного баннера вообще про другое. Тарелку из меню для ресторана.
Приятный глазу билд и первый уровень я сделал на второй день. И тут словил фрустрацию. А что дальше-то?
Богомерзкий UI
или как я два дня воевал с кнопками
Тут я в очередной раз попал в просак. Дело в том, что в движке есть некоторые решения из-под коробки. Как в поведении Pathfinder. Но как они работают - остается тайной. В GDevelop можно создать кнопку автоматически, и прописать только функции.
Я решил прописать кнопки самостоятельно. Отчасти потому что не доверяю готовым скрытым функциям, ну и они могут создать разные баги.
Покумекав, я решил что мне нужно всего два окна: когда игрок проиграл и когда выиграл. И для этого нужны две кнопки. Это “Переиграть” и “Играть дальше” (перейти на следующий уровень). Позже я добавил еще одно окно проигрыша, когда муравьи не знают куда идти. А меню с прокачкой сделать позже
И закономерно получил баг
Дело в том, что игра начинается как только система зафиксирует нажатие мыши. Но уровень перезагружался и начинался настолько быстро, что фиксировала нажатие по кнопке. В общем, надо быть Флешем, чтобы успеть отпустить кнопку "Переиграть" до начала уровня.
А в моих кастомных кнопках нельзя было прописать что это именно кнопка и есть. По сути это такой же объект, по которому можно кликать.
Что ж, я снова нацепил колпак “Дурак” и таки использовал коробочное решение с кнопками. Кое-какие баги я словил, но в принципе не критично. Главное, баг с преждевременным началом игры был устранен.
Разработать играбельный прототип - 2 часа. Делать кнопки - 2 дня
Для оправдания скажу, что основная масса времени ушла на фичу, которую я потом пустил под нож.
У меня для прокачки есть 3 параметра: сила, скорость и количество муравьев. И каждый имел прогресс-бар. Игрок нажимает “+” на силу и шкала силы растет. Очень нужная фича:
- игроки любят прогресс-бары, потому что они дают представление о том, на какой стадии игры они находятся
- прогресс-бар дает цель. Просто смотреть как растут цифры неинтересно, а все пустое нуждается в наполнении.
От прогресс-бара по параметрам пришлось отказаться. Я перенес прогресс-бар к прокачке муравьиной колонии. Чем больше очков тратишь на муравьев, тем колония разрастается (меняется спрайт замка). Но, кажется, эти фича осталась не такой заметной как хотелось бы.
Но у меня стояла еще одна фундаментальная проблема: у меня готов только первый уровень.
Масштабирование
В начале я говорил, что не надо делать контент-игры. Потому что на ассеты уходит львиная доля времени. Да и сюжет может оказаться говном при реализации. Их плюс в том, что их просто делаешь и делаешь. И в любой момент можно закончить игру, сказав что это клиффхенгер. Или состряпать концовку на скорую руку. Развернуться есть где.
По казуалкам же, как я понял, дело обстоит наоборот. Их сложно делать в начале, но легко масштабировать: копи-паст, хуяк-хуяк, и новый уровень.
Когда по ГДД и планам у тебя все в порядке, но на 6-й день в редакторе видишь всего одну сцену и полторы страницы событий (код в no-code). Это напрягает. Тем более у меня не абстрактная головоломка.
Предполагалось, что игра будет состоять из нескольких этапов:
- Муравьи очень маленькие и слабые. Воруют разные крошки и дольки.
- Муравьи растут. Они крадут еду покрупнее: пончики, картошку и т.д.
- Большие муравьи: крадут блюда, мелких животных
- Муравьи утаскивают людей, машин, коров. С ними начинается война. Если не успеть, по вам ударят ракетой вместо огромной ноги. Это реализовано в итоге. Правда вместо ядерной итоге небольшой пук, но и так сойдет. Лучше чем ничего
- Муравьи уносят здания.
Мне повезло с сеттингом и логикой игры. По сути, единственное что я менял - это добавлял к спрайтам еды людей, коров и тд. И одна добавочная функция, что последние могут убегать. В итоге я за пару часов наклепал 20 уровней.
Хотелось, чтобы потом по муравьям стреляли. Но тогда надо было бы менять игровую сущность муравьев (добавлять поведение, здоровье и проч.) что могло сломать и без того костыльную работу по поиску пути. И это единственная фича, которую я вырезал (вообще не делал).
Допущенные ошибки
Неэффективный туториал.
Я добавил стандартную иконку с нажатием по экрану, и она двигалась от муравьев к финишу. Позже я поменял человеческую руку на муравьиную лапу. Типа, так лорнее. К тому же, ворованные арты из гугла все равно надо перерисовывать.
Но плейтестеры (дяди, тети и друзья) не восприняли лапу за руку. К тому же муравьи не двигаются в реальном времени. Или вообще не двигается, если маршрут составлен неправильно.
И я совсем упустил из виду, что нужно так-то собирать еду. Первый уровень я составил так, чтобы муравей подбирал еду в любом случае. Но игру можно пройти и без прокачки. В итоге люди просто заканчивали уровень и шли дальше без очков.
По логике, игрок без прокачки должен был упереться в стену. Муравьи без силы не смогли бы утащить людей и здания. Но поскольку плейтестил я мало, и игру не балансил, то людей и здания можно тащить и без силы. А вот машины, собаки и коровы достанутся только нормальным игрокам.
Ошибка масштабирования
У меня в игре только один глобальный объект (который не зависит от уровня). Надо было весь интерфейс перенести в глобал.
Я получил фидбек, что окно прокачки слишком маленькое для телефонов. Я не думал, что на телефоне игра сработает. Теперь мне придется заходить в каждый уровень и ручками удалять оттуда интерфейсные элементы. Потом ставить глобальные. И менять код в каждой сцене.
Если бы я изначально прописал интерфейс как глобальный объект, игра получилась бы лучше.
Игра ощущается плоской
Это я понимал с самого начала. Но тени я так и не сделал. В некоторых артах они есть изначально, но они неправильные. В других теней нет вообще.
Весь использованный арт - флэт стайл. Что тоже не придает глубины.
Я добавил тень человека, которая медленно движется по полю. Но этого мало. К тому же, муравьи не всю игру маленькие.
Планы на будущее
Из нишевой инди-игры для двух с половиной человека сделать донатную помойку. Но пока я хз что продавать. Очки прокачки? Скины? Бустеры? Рекламы, скорее всего, не будет.
Переделать механику рисования. Чтобы игра не зависела от производительности.
Хотелось бы, что муравьи двигались как задумано изначально. Но я хз как это сделать. Если кто знает - подскажите
Что в итоге-то?
Да, я понимаю, что это не самая приятная и интересная игра на свете, но чтобы никто...
Пожалуйста, сыграйте в игру. Поставьте лайк. Оставьте коммент на ичте, фидбек что еще можно улучшить.
Кто поиграл - молодец, а кто нет - селедка.