Чем необычен этот проект? Тем, что это часть нашего же игрового проекта "I Know This Place..?". Мы решили связывать игру с короткометражками. (пока в игре 1 глава и 2 короткометражки). А еще в игре и в короткометражке у нас участвуют подписчики. Кто-то высылал свои фото, кто-то свои предметы в игру.
Сюжет игры рассказывает о герое без имени, который приехал к давнему другу ученому - Владимиру по его же просьбе. Правда дома друга не оказалось, да и сама квартира выглядит очень странной, предметы живут своей жизнью, соседи не соседи, а за нами кто-то подглядывает.
Сейчас мы ищем активно партнеров и инвесторов на будущие главы. Планируем развивать как сериал/вселенную.
Проснувшись в пятницу утром, лидер Свеклополя весь день пребывал в несколько подавленном настроении: он еще не забыл прошлую пятницу 13-го, когда нанятые профессиональные газонокосильщики из Шоколандии неправильно прочитали задание, и всего за сутки выкосили буквально весь остров, и не только от травы.
До самого вечера не поступало новых новостей, но ближе к ужину до главного героя все-таки добралась неприятная новость: мастера из Бретыквии, которых позвали для нанесения идеально ровной разметки на дороги с помощью новейшего вида краски, не смогли верно понять размах работ. Таким образом, вместо красивой разметки на улицах городов и междугородних трассах свекловийцы узрели сомнительный образец искусства: краску нанесли поверх гор и равнин, при том самым неаккуратным образом. "Красный" предлагает воздерживаться от найма новых специалистов в пятницу 13-го и надеется на быстрое реагирование клининговых служб.
К другим новостям: в скором времени мы продемонстрируем обновленную систему сражений и подробно расскажем обо всех запланированных ее особенностях, начиная от типов юнитов и заканчивая содержимым самих карт, на которых будет разворачиваться действие. Над данной системой ведется активная работа, и для наглядности правил вместо упрощенной схемы будет использоваться готовый прототип.
Всем привет. В этом посте я расскажу о своем первом опыте разработки игры для моей любимой консоли из детства под гордым названием денди (хотя раньше мы их приставками называли, но сейчас уже терминология устоялась). Далее вас ждет много интересного, так что заготавливайте вкусняшки.
Логотип консоли Dendy
История создания игры
Идея создать свою собственную игру для денди появлялась у меня довольно давно, но плотно занялся я этим вопросом только в конце 2022го года.
Основным стимулом для разработки игры послужило мое желание создавать свои модули расширения для консоли, так как для денди их практически не выпускалось, а у меня по этому поводу есть много идей и планов (модуль подключения обычно клавиатуры, модуль выхода в интернет и т.д.).
Изначально была поставлена задача написать хотя бы "Hello, World", который я мог бы запустить на эмуляторе. Но, начав читать переводной курс по разработке игр для денди на языке Си на хабре, мне удалось написать простейшую программу всего лишь за полчаса. И этого мне показалось слишком мало.
Более-менее освоив курс статей с хабра за 2-3 недели, в конце января 2023го было принято решение разработать пошаговую стратегию про стимпанковых мехов для закрепления навыков. Думал, что ограничусь созданием минимального геймплея, но разработка зашла немного дальше.
Такой сеттинг и жанр я выбрал, так как люблю пошаговые стратегии, стимпанк и игры про мехов (фронт мишн ван лав). Тем более у меня были наработки на эту тему в плане механик и немного лора (я делал наброски подобной игры для современных компов, но забросил).
В итоге с начала февраля 2023го началась активная разработка игры и продолжалась она до середины апреля (далее у меня появились более важные дела и игру пришлось отложить до лучших времен).
Игру я хотел анонсировать еще летом, так как базовые механики уже работоспособны и она проходима (хотя конкретно концовки у игры нет, можно просто пройти все уровни и прокачивать меха). Есть даже примерочный открытый мир, но он будет полностью перерисован и доработан.
Скриншот боевого геймплея актуальной версии игры
Особенности разработки игры для Денди
Разработка игр для NES/Famicom консолей является крайне специфическим занятием, так как требует понимания работы приставки на аппаратном уровне, что для многих является отталкивающим фактором. Но, так как у меня есть опыт разработки софта для микроконтроллеров, эта особенность для меня была не слишком критична.
Далее стоял вопрос о инструментах для разработки игры. Традиционно игры для денди пишут на ассемблере, так как ресурсы консоли очень ограничены и важен каждый такт процессора и каждый байт памяти. Я мог бы писать и на ассемблере, но это затянуло бы проектор и увеличило шансы к его забрасыванию на свалку истории.
В итоге я выбрал компилятор CC65, который позволяет писать код для денди денди на языке си. Этот компилятор поддерживается до сих пор и регулярно выходят обновления.
В качестве среды для разработки я выбрал Visual Studio Code. Для удобной сборки и запуска проекта был написан батник и добавлены горячие клавиши (но это тоже тема для отдельного поста). Так я собираю проект и запускаю его в эмуляторе нажатием одной клавиши на клавиатуре.
Глубоко закапываться в технические особенности консоли и разработки под нее я не хочу, так как ресурс все-таки развлекательный. Хочу отметить только несколько основных особенностей.
Вся графика состоит из тайлов 8х8 пикселей. При этом каждый тайл может использовать только 3 цвета и один прозрачный цвет (прозрачный цвет отображает цвет фона, а цвет фона определяется определенными битами регистров палитр).
Это значит, что требуется сводить все используемые спрайты к трем цветам, но если если спрайт состоит из нескольких тайлов, каждый тайл может использовать разные палитры (примерно так же это работает и для фона, но там немного сложнее).
Поэтому, если вы хотите вывести случайную картинку в формат NES, то ее нужно свести в формат 4 цветов и до нужно разрешения (256×240 пикселей). Вот пример преобразования картинки в формат, который уже можно вывести в вашу игру:
Реальное фото я преобразовал в денди формат (фото использовано с разрешения автора)
Подготовку изображения в почти автоматическом режиме легко сделать в фотошопе или гимпе (я использую гимп).
Но самая сложная часть разработки - это рисования пиксель арта в условиях очень низкого разрешения и ограниченности в количество цветов.
Для первых версий игры я использовал готовые спрайты из Front Mission без дополнительной подготовки. Они выглядели так себе, так как игра выходила на 16-битных консолях. Вот так это выглядело:
Спрайты меха в разных положениях
Когда я показывал людям эти спрайты и не уточнял, что это такое, большинство говорило, что похоже больше на месиво пикселей (я с этим согласен, меха там разглядеть сложно).
Но для тестов мне таких спрайтов хватало. И после рисования сетки поля я решил ее немного украсить травой, что в итоге породило вот такое кислотное чудо:
Скриншот режима битвы одной из ранних версий игры
На скриншоте выше видно, что трава действительно вышла даже немного симпатичная и в меню я тогда использовал некрасивые рамки.
Помимо режима битвы в игру был добавлен режим открытого мира. Карту мира я набросал довольно быстро и больше ее особо не переделывал. Выглядит она на данных момент вот так:
Временная карта мира
На карте мира каждая локация обозначена постройкой и войти в нее можно с помощью нажатия кнопки "A" на геймпаде. Локация в верхнем-левом углу - это локация-хаб с магазином, а остальные запускают сценарий битвы при входе (в каждой локации разный набор врагов, они отличаются комплектацией мехов и их количеством).
После того, как основные механики были реализованы, был начат процесс перерисовки мехов.
Как я уже говорил, одновременно можно использовать 3 цвета и один прозрачный цвет, который использует цвет фона. 3 цвета на при разрешении 16х24 пикселя на одно меха - это очень мало.
Поэтому я использовал решение, которое дало мне дополнительный цвет. Для этого я отказался от травы на экране и залил весь экран черным фоном. Это дало мне черный четвертый цвет для рисования мехов. Т.е. если я делаю прозрачный пиксель в спрайте, он выглядит как черный. Это позволило нарисовать более-менее адекватных мехов, которые выглядят как мехи. Вот так это выглядит в редакторе:
Спрайты мехов с использования прозрачных пикселей с черным фоном
Уже намного интереснее, но для анимации ходьбы нужно нарисовать для каждого положения по два спрайта (этим я пока не занимался, так как такой мелкий пиксельарт приходится рисовать буквально по пикселю, это очень муторно).
Многие технические ограничения консоли можно обойти за счет использования мапперов, но я пока обхожусь без него, так как хочу сделать создание реального картриджа максимально дешевым и простым. Стараюсь уложиться в стандартные 32 килобайта (место я потратил еще не все, музыка и прочее туда должно поместиться, тем более многое можно оптимизировать).
Резюмируя особенности разработки, можно сказать, что разработка игр для ретро-консолей особо ничем не отличается от разработки программ для микроконтроллеров. По этой причине постоянно приходится смотреть даташиты, описывающие разные узлы консоли.
Механики и ЛОР игры
Игра представляет собой классическую пошаговую стратегию, основанную на механике использования очков действия (AP). Каждое действие тратит очки действия, примерно как в лучшей в мире игре Fallout 2 (только у меня клетки квадратные). Система с фазами (как в X-COM) мне нравится меньше.
Панель, которая отображает состояние деталей меха и количество очков действия.
В режиме битвы игрок управляет своим мехом и пытается уничтожить вражеские мехи. Мех считается уничтоженным, если он лишается тела или обеих рук (без рук мех бесполезен). При этом, если мех лишается головы, он сильно теряет в точности, а если у него взрываются ноги, то он не может передвигаться. Битва заканчивается уничтожением всех вражеских мехов или гибелью игрока. Если игрок побеждает, он получает деньги за каждую сохраненную деталь вражеского меха.
Все оружие в игре делится на 4 типа:
Рукопашное оружие (может атаковать на одну клетку и есть возможность выбора точки атаки)
Пушки (наносят урон по случайной части меха с расстояния)
Снайперское оружие (наносят урон с расстояния и имеют возможность выбрать деталь вражеского меха для атаки)
Дробовики/картечницы (наносят урон по нескольким случайным частям меха)
Возможно будут еще какие-то типы оружия.
Вот пример меню выбора части меха для атаки:
Меню выбора части меха для нанесения по ней урона
Еще есть режим осмотра мехов (отображает имя, состояние частей меха и вооружение):
Режим осмотра меха, очки действия не тратит (Но может должно тратить?)
В режиме перемещения вы перемещаете меха курсором (каждый шаг тратит одно очко AP). Кнопка 'A' подтверждает перемещение, а кнопка 'B' возвращает меха на начальную точку (отменяет перемещение).
Механика использования экипировки пока не реализована.
Следующей важной частью игры является прокачка меха.
Вот так выглядит список доступных мест в локации-хабе:
Выбор места для посещения в хабе
А вот для примера магазин оружия:
Магазин оружия
Кнопка А покупает оружие в правую руку, В в левую, а Select возвращает вас на карту мира.
Вот мы и рассмотрели все основные особенности игры. Остальное вы можете попробовать сами используя эмулятор (ссылку на скачивание эмулятора и рома игры я дам в конце, если пикабу ссылки не уберет).
Планы по развитию игры
Планов по развитию игры у меня довольно много. Давайте приведу основные планы в виде списка:
Создание нормальной карты мира и проработка локаций на ней
Динамические анимации движения мехов в режиме битвы
Создание возможности ходить персонажем по хаб-локации и общаться там с людьми (но это сильно упирается в 32 килобайта памяти)
Написание лора с сюжетом и добавление его в игру
Создание диалоговой системы
Добавление звуков и музыки в игру (музыка на денди особенно специфическая штука)
Добавление новых спрайтов для мехов
Добавление различных построек и препятствий в режиме битвы (для оживления поля битвы)
Улучшение ИИ и добавление новых механик в битву
Расширение количества доступных частей и оружия для мехов
Режим игры для двоих игроков (PvP и PvE)
Для первого поста и анонса игры, я думаю, информации более-чем достаточно. Очень жду ваших предложений и замечаний по игре. Весь этот текст был написан в первую очередь ради получения обратной связи от потенциальных игроков, так как я не могу знать, что нравится другим людям, а исходить только из собственных соображений - это путь в никуда.
Поэтому жду вас в комментариях, готов ответить на все ваши вопросы. Спасибо за внимание.
Список основных ресурсов, которые я использовал при разработке:
Две недели назад вышла наша игра Torn Away. Мы начали делать её в далёком 2019 году, в то время, когда трава действительно была зеленее. Что же я чувствую сейчас, спустя эти долгие 4 года?
Зайду издалека. Я мечтал о создании своей игры, когда ещё учился в школе. Делать игры — казалось чем-то из разряда волшебства. Взрослые говорили, что это не работа, а сплошное фантазёрство и надо думать о практичных вещах. Мне же так не казалось.
Самым очевидным путём виделось научиться программировать. Игры ведь делают программисты? Да и звучит солидно! Я купил первую попавшуюся книжку в магазине, проштудировал, попробовал так и сяк — оказалось не моё. Написание переменных, условий и циклов казалось бесконечно далёким от создания бескрайних игровых миров.
Да, тогда журнал ещё печатали на бумаге
Позже в одном из выпусков журнала Игромания я прочитал, что есть такая профессия — 3D-моделлер. Делать модельки и рисовать текстуры звучало гораздо интереснее. Так я начал скупать книжки по моделлингу, зависать на сайтах вроде рендер.ру и других форумах.
1/2
Интерес к 3D начал потихоньку пропадать — то ли усидчивости не хватало, то ли результаты перестали радовать — но зато меня увлекло рисование от руки. На один из дней рождений родители подарили мне планшет Ваком Бамбу. С него и начался мой путь в мир 2D-арта.
Тот самый первый рисунок на свежеподаренном планшете
Шли годы, я продолжал рисовать. В том возрасте скилл рос очень быстро: я жадно собирал любую информацию по компьютерной графике, активно выкладывал арты на формы, прислушивался к фидбеку от старших товарищей. Уже к 15-ти годам у меня было собрано портфолио, которое позволяло находить небольшие заказы тут и там.
Одна из старых работ
Так я более-менее понял, куда мне нужно двигаться, чтобы делать игры. Ещё через пару лет, на летних каникулах я познакомился с арт-диром небольшой команды, она позвала меня к ним рисовать казуалки. Это был 2011 год, индустрия как раз наполнилась играми в соцсетях… В общем, я был безумно рад такой возможности. С этого момента можно отсчитывать мой путь в геймдеве.
Мой уровень на тот момент
Проработал я там всего несколько месяцев, потому что совмещать парт-тайм работу с учебой в 11-ом классе было трудновато. Тем не менее, в школу я уже ходил только для галочки. Меня всё больше и больше увлекала графика. Я много рисовал для себя, придумывал какие-то сюжеты, истории, ситуации…
Мне 18 лет. Заканчиваю школу и уезжаю в Москву. Несколько месяцев ищу работу, активно делаю тестовые задания. В какой-то момент казалось, что я переоценил свои возможности и никому такое юное дарование не сдалось.
И вот долгожданный звонок — меня берут в крупную по меркам времени компанию, которая занимается социалками и мобилками. Отлично, иду работать в офис и получать настоящий боевой опыт бок о бок с ветеранами индустрии.
Иллюстраций с тех времён я не нашёл, зато откопал такое!
Все ребята, с которыми я познакомился, были реально крутыми. Но чем дольше я там работал, тем сильнее я чувствовал тесноту в рамках профессии художника. Да, мне всё ещё нравилось рисовать по своим идеям, но реализовывать чужие… Я понял, что пора создавать что-то своё.
…и ушёл из игровой индустрии ради работы с интернет-сообществами. Эта сфера подкупила меня тем, что можно было довольно быстро реализовать идею и почти мгновенно получить отклик от сотен, а то и тысяч человек. Если кто-то из вас помнит 2012-2013 год, когда паблики в ВК были местом андерграундного творчества, то вы меня поймёте! Этот опыт может показаться совсем сторонним, но только на первый взгляд.
Как же хорошо было тогда в Интернете!
Зарабатывая в другой сфере, я начал думать о том, чтобы вернуться в разработку, но уже самостоятельно. Программировать я по-прежнему не умел, поэтому принялся искать напарника. Всего через пару недель карты сошлись и мы начали общаться с парнем, который тоже хотел вкатиться в геймдев. У него было много прототипов, но не было законченных идей.
Всё случилось очень быстро: потратили пару дней на обсуждение, выбрали наиболее интересную из его наработок, я сочинил концепт и нарисовал всю графику. Четырнадцать дней и вот игра уже в Аппсторе.
1/2
Тут оказались кстати мои паблики в ВК. Благодаря ним мы смогли дотянуть до топа Аппстора. Денег мы тогда никаких не заработали, но зато получили крутейший опыт.
Конечно, я мечтал не о таких играх — а о тех, что захватывают своей историей и долго не отпускают после прохождения. Можно ли было сразу начать с таких? Наверное, можно. Но я не советую. Сейчас ретроспективно понимаю, что начинать нужно с малого, иначе есть риск стать жертвой амбиций — так и остаться тем самым фантазёром, у которого тысяча крутых идей, но ничего даже не записано на бумаге.
За несколько лет я сделал ещё несколько небольших игрушек. Успел поработать геймдизайнером, подрос до ПМ, а затем и до продюсера. Выгорел, бросил всё и при этом сделал игру (почти) в одиночку.
В моей жизни была не только самостоятельная разработка. Появились крутые карьерные возможности, своя семья и обязательства, а вместе с ними предательская мысль: не пора ли заканчивать это баловство? Наши большие мечты часто не умещаются в обычную жизнь. Может пора просто повзрослеть?
Пока я размышлял над этими вопросами, судьба подкинула мне возможность. Через общего друга я познакомился с одним парнем, которого очень интересовала индустрия игр. Он сам большой поклонник проектов с глубоким нарративом, но все в его окружении были повёрнуты на метриках и способах поизысканнее вытащить из игроков денег. Наши взгляды на то, какими должны быть игры, совпали.
Уже через неделю я вернулся с небольшим документиком, в котором описал концепцию игры. Моему новому товарищу идея понравилась, и он дал добро на сбор команды. С этого началась история Torn Away.
(Кстати, узнаёте голос нарратора?)
Dпервые за свою жизнь я оказался так близок к той самой мечте из детства. Сделать такую игру, которую тому самому школьнику было бы интересно пройти вместе со старшим братом… Ничего не пугает так сильно, как страх превращения мечты в реальность. Что будет, если у меня не выйдет? Что будет, если выйдет, но это никому не понравится? Почему я вообще решил, что мне есть, что сказать?
Ответов на эти вопросы у меня нет до сих пор, но чему я научился за последние 4 года, так это смирению. Делай, что должно, и будь что будет.
За эти 4 года мы с командой пережили многое — производственный ад, возможность потерять финансирование, страх перед пандемией, новую реальность на самоизоляции, февраль 2022…
Примерно так порой ощущалась разработка. Сама игра на русском, другого скрина под рукой нет)
Было столько удобных причин сдаться — ну да, не вышло. Так сложилось. Но всё же почему-то, раз за разом, мы брались за дело и делали всё, что от нас зависит.
Для себя я выделил две причины. Первое — это любовь к делу, погоня за мечтой. Вторая — ответственность перед командой, которая вложила столько труда в наш общий проект. Варианта отступить для меня просто не существовало.
Подводя итог, хотелось собрать здесь несколько выводов, которые я для себя вынес за все эти годы. Возможно, они окажутся полезными кому-то из вас. Самому себе 4 года назад я бы точно сказал это:
Если нет опыта, то начни с малого. Иначе рискуешь никогда не доделать
Люби то, что делаешь. Если твоя игра провалится, ты не будешь жалеть о бесполезно потраченном времени
Чем больше твоя команда, тем яснее должно быть твое видение. Научись формулировать!
Если делаешь сюжетную игру, либо пиши сам, либо делай сценариста полноценной частью команды
Не работай в стол — реакция игроков это безумно важно. Долгое время будет казаться, что всё, что ты делаешь, никому не нужно. Реальные игроки помогают понять, что это не так
Разделяй ответственность, работа в команде это в том числе про доверие
Береги тех, с кем работаешь. Да, всегда хочется прыгнуть выше головы, но погоня за совершенством изматывает людей
Веди документацию, планируй задачи. Это не убивает душу, а спасает нервы и бережет время
Фиксируй рабочие отношения юридически, перед заключением договоров найми юриста
Всё обязательно пойдёт не так, как ты задумал, будь к этому готов
Держи режим дня, хорошо питайся и спи
Сделай сначала хоть как-нибудь, потом постепенно улучшай. Хорошее рабочее решение гораздо лучше идеального теоретического
По возможности, работайте в одном пространстве. Это поможет вам сблизиться и не возненавидеть друг друга во времена трудностей
Отвечая на вопрос в начале текста: что же я чувствую, выпуская игру, на которую ушло 4 года моей жизни — я чувствую много всего.
Удовлетворение от законченной работы. Гордость за всех ребят, с кем посчастливилось трудиться вместе. Волнение за то, как игроки по всему миру примут историю Аси — наше маленькое и грустное приключение. Предвкушение того, что ждёт впереди. И благодарность. Пожалуй, благодарность — это самое сильное чувство.
Я благодарен моему партнёру за то, что поверил в меня. Благодарен всей нашей команде за преданность общему делу и невероятный талант. Благодарен нашим игрокам — за то, что следите за нами все эти годы и пишите много теплых слов. Всем нашим издателям за помощь в донесении нашей игры до широкой аудитории. А ещё я благодарен своей любимой жене — за терпение, поддержку и вдохновение.
И всем, кто дочитал до конца!
Для тех, кто желает нас поддержать покупкой, оставлю ссылки на Steam и VKPlay. Игра также вышла на Xbox, готовимся к релизу на PlayStation и Nintendo Switch.