Игра для кодеров. HackeRPG DevLog #1

Идея:

Около полгода я вынашивал идею игры в которой управление будет построено полностью на программировании.
Изначально задумка была крайне примитивной:
Жанр: Roguelite арена. Референсом послужил недавно нашумевший Brotato, но управление будет полностью кодом. А ещё можно будет писать свои функции, создавать переменные, потоки, демоны (не те, которые из потустороннего мира, хотя для новичков в программировании они могут быть куда страшнее).

Игра для кодеров. HackeRPG DevLog #1 Разработка, Gamedev, Программирование, Rust, Инди, Инди игра, Pixel Art, Roguelike, Личный опыт, Длиннопост, Видео, YouTube

Так выглядит игра референс. Порекомендовал бы её фанатам жанра, но думаю все и любители жанра и так знают эту игру.

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

Подготовка:

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

Самыми важными для меня были:

  1. Удобство.
    Многим начинающим большое количество элементов визуального программирования и возможность руками расставлять объекты на сцене и на экране кажется крайне удобным, но не мне. Мне больше нравится всё делать через код. Поэтому уже на этом этапе я исключил для себя титанов вроде UE, Unity и Godot.
    2. Лицензия.
    Кодеры любят писать код и не любят делать что-то ещё (вот я например не люблю писать этот пост сейчас, но боль от того, что я буду пилить игру год и про неё никто не узнает куда сильнее, поэтому держусь). Лишние проблемы с лицензиями и авторскими правами мне ни к чему, поэтому UE, насчёт которого я ещё сомневался после первого пункта вылетает.
    3. Перформанс и устойчивость к ошибкам.
    Эти два пункта я объединил в один, чтобы точнее передать муки выбора - большая часть моего опыта - Kotlin и Java. На них можно создавать довольно хороший код с точки зрения ошибкоустойчивости + у меня есть небольшой опыт использования библиотеки LibGDX (популярный игровой движок на Java). Но, учитывая тот факт, что я тот ещё геймдевер, а JVM не самое лучшее решение для производительных игр, я решил отбросить этот вариант.
    После чего задумался о языках семейства C, узнал о наличии довольно большого количества движков, но понял, что с моими навыками писать безопасный код (они на самом деле неплохие, просто холодно сейчас), это - не лучшая идея и я сел думать.

Так идея и продолжала консервироваться, т.к. я не мог выбрать идеальные для себя инструменты, до того момента, как однажды я не увидел статью про то, что Microsoft стремительно переписывает свою любимую ОС на Rust. Я немного касался этого языка, но по сути не знал о нём ничего и мне стало интересно.

Закинул себе на Kindle вот эту книгу и с каждой страницей всё больше начинал влюбляться в этот язык. Я подумал: "Вот оно!". И принялся искать игровые движки на этом языке, и довольно быстро наткнулся на Bevy.

Игра для кодеров. HackeRPG DevLog #1 Разработка, Gamedev, Программирование, Rust, Инди, Инди игра, Pixel Art, Roguelike, Личный опыт, Длиннопост, Видео, YouTube

Движок был относительно молодой и опенсорсный, что внушало некоторое опасение. Я изучил сайт (движок поддерживается неплохой, по меркам смертных, копеечкой), принцип ECS, что значит Data-Driven, пообщался с ребятами в дискорде и понял - это оно!

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

Игра для кодеров. HackeRPG DevLog #1 Разработка, Gamedev, Программирование, Rust, Инди, Инди игра, Pixel Art, Roguelike, Личный опыт, Длиннопост, Видео, YouTube

Вот так выглядела игра, арты любезно сгенерил старина Кандинский.

Прототип (Версия 0.0.1)

Начать разработку я решил с создания простого прототипа, который позволит тестировать механики и отбрасывать то, что не работает без лишних временных затрат. На первых порах я решил использовать бесплатные пискель арты, но очень быстро от них отказался, набросав сам все арты в игре (дешево, сердито, не идеально, но с душой).

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

По визуальному стилю я выбрал пиксель арт + стереотипный кодерский стиль (черный фон, зеленый текст). Изначально я хотел сделать всю игровую палитру одноцветной, но враги и снаряды персонажа терялись и было сложно адекватно реагировать на игру, из-за чего враги перекрасились в красный цвет, как и положено ошибкам в коде. После некоторого времени работы у меня получилось что-то такое:

Игра для кодеров. HackeRPG DevLog #1 Разработка, Gamedev, Программирование, Rust, Инди, Инди игра, Pixel Art, Roguelike, Личный опыт, Длиннопост, Видео, YouTube
Игра для кодеров. HackeRPG DevLog #1 Разработка, Gamedev, Программирование, Rust, Инди, Инди игра, Pixel Art, Roguelike, Личный опыт, Длиннопост, Видео, YouTube

Главное меню с окном в стиле MacOS и возможность почитать описание основных игровых команд.

Игра для кодеров. HackeRPG DevLog #1 Разработка, Gamedev, Программирование, Rust, Инди, Инди игра, Pixel Art, Roguelike, Личный опыт, Длиннопост, Видео, YouTube

А вот и наш игровой персонаж.

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

Первое геймплейное видео.

Проблемы первой версии

Как это часто бывает, пока я тестировал игру, мой глаз замылился: я набил руку в управлении, из-за чего мне хотелось постоянно увеличивать сложность, все механики казались мне интуитивными, но плейтесты моих товарищей спустили меня с небес на землю.

  1. Сложна, страшна, паника

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

  2. Медленно, нет экшона, нудно

    Идея управлять всеми действиями кодом изначально показалась крутой: некоторые действия могут быть сложными, тогда для них пишешь функцию, которая упрощает этот процесс. В будущем я планировал добавить больше инструментов, чтобы сделать ощущения прогресса ещё более сильным, но проблема в том, что сейчас таких инструментов мало, а нажимать около 10 клавиш, чтобы пройти пару шагов - очень медленно и надоедает. И даже наличие истории прошлого ввода (при нажатии стрелки вверх) особо эту проблему не решало. Проблема так же улетает в бэклог.

  3. Обучение игре

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

Помимо этих проблем было ещё много вещей, которые я изначально (до плейтестов) хотел исправить, поэтому бэклог всё увеличивался. В версии 0.0.2 я решил взять прицел на улучшение пользовательского опыта, но об этом - в следующем посте.

Спасибо за уделённое время, потрогать игру можно по ссылке

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"