Давно хотел сделать мобильную игру, но руки никак не доходили. А неделю назад решил, что время пришло, поэтому решено — начинаем делать.
День 1
Для начала определяемся с уровнем игры. Опыта разработки игр у меня абсолютно никакого. Все всегда советуют начинать свой путь в геймдеве с чего-то самого простейшего, что можно сделать условно за несколько недель. Но если начинать с чего-то простого для пробы, то руки до основного проекта могут и не дойти. Поэтому это не наш путь, будем делать сразу полноценную большую мобильную игру уровня Raid Shadow Legends, Clash of Clans, Whiteout Survival, Legends of Mushrooms. Ну скорее всего немного проще, так как это все же соло разработка, но с претензией на топы чартов.
Далее определяемся с жанром игры. Большую часть жизни я занимался всякого рода автоматизацией, наверное поэтому мне в играх всегда нравились различного рода idle механики и автобатлеры. Например, когда играю в POE, то не понимаю почему я должен сам бегать и убивать все эти толпы монстров. Почему нельзя это автоматизировать?! Поэтому решено - будем делать что-то в жанре idle и автобатлеров.
Затем определяемся с идеей. За мой многолетний геймерский опыт накопилось достаточно всевозможных идей и набросков возможного геймплея. Но сейчас надо выбрать что-то одно и желательно простое. Мне когда-то понравилась игра для ios Overwinter, основной геймплей которой заключался в выборе одного из рандомно предложенных 3-х вариантов действий.

Отлично, добавим к этой идее автобатлер + лутинг и в итоге после целого дня брейншторма получилось следующее:
Описание кор механики игры
Герой идет в подземелье, наполненное различными врагами. И герой, и враги имеют такие характеристики, как HP, броня, урон, скорость атаки и т.п. Драка между героем и врагами происходит автоматически, без участия игрока. При убийстве врагов из них выпадает награда в виде золота или какого-нибудь лута, который можно будет использовать для улучшения героя между походами в подземелье.
Подземелье разделено на комнаты. В большинстве комнат находятся враги, но с какой-то периодичностью встречаются комнаты, которые предлагают выбрать одно из 2-х или 3-х рандомных улучшений - увеличение характеристик героя, лечение, изучение героем нового навыка или улучшение имеющихся, увеличение шанса дропа, сундук с лутом и т.п. Эти улучшения действуют только на текущий поход в подземелье.
Также периодически игроку предлагается выбор - уйти из подземелья и забрать с собой уже полученную награду, либо продолжить идти дальше с более высоким риском и более высокой наградой. Поражение в подземелье означает, что герой теряет всю собранную награду и уходит ни с чем.
Как по мне, идея достаточно оригинальная и интересная. Не исключаю, что возможно уже есть игры с похожим геймплеем, но я не встречал чего-то подобного. Если вы уже видели подобные игры, напишите обязательно об этом в комментариях. Так же приветствуется любая критика, идеи и предложения - как вам вообще такой геймплей, интересно было бы играть в это? Может слишком сложно? Или наоборот слишком просто?
День 2
Теперь надо определиться с графикой и стилем. Тут стоит сказать, что я не художник — рисовать, а тем более анимировать, не умею от слова совсем. Поэтому тут, мне кажется, все вполне очевидно — 2D Casual, просто потому что это быстрее, проще, дешевле и подходит для широкой аудитории.
Далее определяемся с платформами и инструментами разработки. Конечно хочется все и сразу — одновременный релиз на веб, телеграм, ios, android, steam и вообще везде, где только можно. Но не забываем, что у нас соло разработка без бюджета, поэтому надо для начала сконцентрироваться на чем‑то одном. Меня давно поражало, что технологии дошли до того, что в обычном браузере можно запустить полноценную 3д игру. Еще каких то 10–15 лет назад такое и представить трудно было. Поэтому для начала остановимся на web (давно хотел попробовать\освоить html5), ну и телеграм, т.к. он использует тот же html5 для игр.

После целого дня просмотра всякого рода видео, гугления и чтения различных статей, я сделал для себя следующие выводы по инструментам разработки (опишу их подробно, возможно, кому‑то будет полезно):
Глобальный движок — Unity, Unreal Engine, Godot, Construct и т. п.
Плюсы:
+ достаточно низкий порог вхождения, в некоторых случаях даже можно обойтись без каких‑либо знаний программирования
+ большое количество учебных материалов и большие сообщества которые могут помочь\подсказать
+ визуальность и структурированность разработки — многие вещи можно делать одной мышью, все распределено по всевозможным панелькам, вкладкам
+ кросплатформенность разработки — многие движки сразу могут выдать билды чуть ли не под все платформы
+ много инструментов и удобств для работы с 3д графикой
+ многие механики (например всевозможная физика) уже либо реализованы внутри движка, либо подключаются с помощью готовых внешних библиотекМинусы:
— клиент перегружен кучей всего лишнего, что зачастую даже никак не используется в игре
— трудность отладки — можно застрять на несколько часов, а то и дней, из‑за того, что ты, например, забыл где‑нибудь поставить какую‑нибудь галочку
— трудность и, зачастую, невозможность оптимизации — любой движок это универсальный инструмент, и, как правило, он всегда жертвует оптимизацией в угоду универсальности и удобности
— у каждого движка есть свои ограничения, под которые необходимо либо подстраиваться, либо делать кучу костылей
— необходимо потратить приличное количество времени на изучение самого движкаДвижок для рендеринга графики — Phaser, Three.js, PixiJS, Babylon.js
Плюсы:
+ дает инструменты для работы с 3д графикой
+ ускоряет и делает удобнее работу с 2д графикой
+ многие механики (например всевозможная физика) уже либо реализованы внутри движка, либо подключаются с помощью готовых внешних библиотекМинусы — все те же самые, что и у глобальных движков, только в меньшем объеме
Разработка без движка на нативном JS
Плюсы:
+ нет ограничений, кроме ограничений самого JS — можно реализовать практически все, на что хватит фантазии
+ безграничные возможности оптимизации — свой код можно оптимизировать бесконечно
+ клиент будет максимально легок — в нем будет только все необходимое и ничего лишнего
+ не надо тратить время на изучение движка и борьбу с самим движкомМинусы:
— практически не подходит для работы с 3д графикой — очень сложно отрисовывать вручную 3д графику
— для многих механик надо изобретать велосипед, писать их с нуля или искать уже готовые решения и внедрять их в проект
— ниже скорость разработки, т.к. нет каких‑либо инструментов, упрощающих работу с графикой и логикой
В итоге, взвесив все плюсы и минусы, я выбрал путь разработки без движка, на нативном JS — 3д графики не планируется, реализации каких‑то механик типа физики тоже в планах нету. Так что почему бы и нет.
День 3
Тут надо сказать, что опыт в программировании у меня достаточно большой, но я никогда ничего серьезного не делал на JS, поэтому языка я совсем не знаю. Да, это несколько замедлит разработку на старте, но изучить новый синтаксис в 2025 году, когда ты можешь все, что тебе нужно, загуглить — это не проблема.

Именно поэтому весь третий день был потрачен на изучение основ JS и того, как отрисовывать графику в Canvas. Тут меня ждало небольшое разочарование — по разработке игр на canvas и нативном JS очень мало учебных материалов. По сути почти все ограничиваются созданием самой примитивной игры, типа арканоид. Интересно, это потому, что никто сейчас не разрабатывает игры на нативном JS, без движка?!
Например, одна из задач которая возникла практически сразу — это как в Canvas реализовать кликабельные кнопки неправильной геометрической формы. Я сразу попытался нагуглить какое‑то описание готового решения, ведь это задача достаточно тривиальная. Да, я смог найти несколько различных теоретических предложений, как это сделать, но какого‑то готового хорошего решения найти не смог. Возможно, плохо искал?! Но, в целом, это не проблема — реализую сам.
Пока просматривал всевозможные учебные материалы по html5, canvas, js, я накидал видение первого минимального прототипа и примерную архитектуру проекта. Дальнейшей целью было сделать минимальный работающий технический прототип игры. Жесткого плана по срокам у меня не было, я просто планировал следующие 2–3 дня провести за разработкой, сделать за это время все, что успею, и дальше уже от этого отталкиваться в дальнейшем планировании.
Дни 4-7
Итак, вооружившись несколькими литрами кофе и приложением для доставки еды, я приступил к кодингу.
Тут надо сказать, что я не буду в этой статье описывать технические подробности разработки, т.к. мне кажется, что это не очень интересно читать. Но если вы хотите больше именно технических подробностей, то напишите об этом в комментариях.
И еще небольшое отступление — так как я совсем не художник, рисовать вообще не умею и на данном этапе никак не собираюсь концентрироваться на графике, поэтому взял первые попавшиеся бесплатные ассеты с itch.io.

В целом все шло хорошо. По времени, правда, получилось чуть дольше (4 дня вместо 2–3х запланированных), но за эти 4 дня я довел прототип до полностью работающего состояния с законченным игровым циклом. Да, там нет норм графики, да, это получился хард‑говно‑шизо‑код с кучей костылей, да, в данный момент все очень примитивно и урезано, но — оно работает, а значит цель достигнута.
Теперь дальнейший план на ближайшие 3–4 дня: провести полный рефакторинг кода, отладить, оптимизировать и немного расширить прототип. Сам прототип пока выкладывать не буду (немного стыдно выкладывать его в текущем состоянии кода), но выложу после рефакторинга, отладки и оптимизации в следующей статье (будет в течение недели). А пока что выложу видео работы прототипа.
Спасибо что дочитали до конца! Подписывайтесь на канал, ставьте лайк, пишите комментарий и следите за будущими обновлениями.
