Делаю Eclipsia Online — cute action MMORPG с полноценным миром, эпическими квестами и приключениями в дальние земли. Одна из моих любимых фишек — охота за классами. Обычные можно купить или поймать с врагов, редкие — с боссов или из квестов. И вот фишка: каждый класс комбинируется с другими в бесконечных вариантах, создавая свой идеальный сетап.
Боевка построена так, чтобы вы чувствовали полный контроль — как в уходах, так и в атаках. Движение имеет вес, тайминг имеет значение. Смотрите сами:
Теги на страничке в стиме играют важную роль. Это ключевые слова, которые помогают потенциальным игрокам найти вашу игру. От них также зависит, какие проекты будут предложены пользователю в рекомендациях.
Правильный выбор тегов не гарантирует стопроцентного успеха, но точно определяет, какую аудиторию вы привлечёте и какую конверсию получите.
1. Начните с конкурентов
Перед тем как приступить к наполнению страницы, поищите в стиме игры, которые вы считаете прямыми аналогами или ориентирами по жанру, стилю или атмосфере.
Внимательно проанализируйте их страницы: какие теги указаны у них? Какие стоят на первых пяти позициях? Это не для копирования, а для понимания, как уже представлен ваш сегмент.
2. Проанализируйте полный список тегов
Чтобы выбрать подходящие теги, важно знать, какие в принципе существуют. В стиме для этого есть специальная страница с популярными тегами. Её можно использовать для анализа.
3. Система из четырёх слоёв: как структурировать теги
Не выбирайте теги хаотично. Разбейте задачу на четыре логических уровня, описывая игру от общего к частному. Так вы создадите для алгоритма и игрока полную и понятную картину.
Пример:
Уровень 1: Ядро — жанр и поджанр Это фундамент. Определитесь с терминами: «Шутер», «Тактический шутер», «Стратегия» или «Глобальная стратегия в реальном времени». Чем точнее поджанр, тем лучше.
Уровень 2: Визуальный стиль и перспектива Как игра выглядит в глазах игрока. Это измерение (2D, 3D, 2.5D), ракурс (вид сверху, от первого лица, изометрия) и стиль графики (пиксель-арт, аниме или реализм).
Уровень 3: Сеттинг и атмосфера Выбираем нужную тематику, к примеру: «Киберпанк», «Средневековье», «Постапокалипсис». И атмосферу: «Мрачная», «Смешная», «Расслабляющая».
Уровень 4: Ключевые механики и особенности Простыми словами, это то, чем игрок будет занят: «Крафтинг», «Защита башни», «Исследование», «Паркур», «Управление ресурсами».
4. Кол-во тегов и их порядок
Алгоритмы персональных рекомендаций анализируют до 20 самых значимых тегов игры. Поэтому стремитесь сразу же добавить 15-20 релевантных тегов.
Ключевое слово — релевантные. 20 случайных или неточных тегов принесут больше вреда, чем 5 точных. Но 5 точных тегов оставят неиспользованными многие возможности для привлечения внимания.
Убедитесь, что на первых позициях — самые конкретные и уникальные теги, которые описывают геймплейное ядро и ключевую фишку игры. Старайтесь убирать абстрактные теги (такие как «Инди» или «Для одного игрока») в самый конец.
5. Работа с сообществом и контроль тегов
Пользователи в стиме могут сами добавлять к вашей игре свои теги. Это одновременно фидбэк и инструмент, который также поможет сформировать релевантный список тегов.
Если игроки массово добавляют тег, который вы не указали, это сигнал. Возможно, вы недооценили какую-то черту своей игры, и её стоит подчеркнуть.
Периодически проверяйте теги на странице. Удаляйте ненужные и обновляйте список актуальных.
Заключение
Помните, что теги — это мост между игрой и её ЦА. Чем прочнее этот мост, тем больше вероятности, что нужный игрок дойдёт до точки назначения и захочет купить или добавить проект в вишлист.
В этот раз я ввязался в кооперацию, а не в одиночку стал делать игру, как обычно бывает у меня. Уже принимал участие в командной разработке на конкурсы, например, «Антивирус» (или «Cybxus Heart») на Гаминатор 19, «Изгоняющий» на Гаминатор 25, и «Из Тени» на ЗОК 2024.
Скриншот из конкурсной версии багодня
В прошлых совместных разработках моя роль была исключительно графическая — рисовал графику, делал 3д модели. Короче говоря, художник, но с обсуждением каких-то геймплейных идей. Хотя, я немного программировал в случае с «Антивирус», когда он стал «Cybxus Heart» после конкурса. А когда делаю игру в соло, то я отвечаю за все аспекты: программирование, геймдизайн, графика, музыка и т. д.
И вот новый конкурс на сайте Gamin.me — Гаминатор 28. На нём я взял себе другую роль — на мне была вся техническая часть. Короче говоря в этом проекте я был программистом. Повествование в этой статье, разумеется, только с моей стороны и мои восприятия. Не могу знать что думали, как делали и ощущали другие члены команды.
1/3
Антивирус, Изгоняющий, Из Тени
Об Изгоняющем я писал статью по графике на ВК, на ДТФ.
Концепция
Всё началось ещё до старта конкурса Гаминатор 28. Задолго. Всё началось в 1799 году … ладно-ладно, не настолько давно. Всё началось после проведенного мной недо-конкурса Графических Ассетов на сайте Gamin, где был ровно один участник – Kot211. Конечно, я был расстроен таким положением дел, но благодарен Коту, что он поучаствовал. Как я понял, то ему понравилось, что его рисунки оживают в игре, пусть и столь примитивной. А я именно этого и добивался: дать художникам (начинающим или мастерам) возможность “оживить” свои художества.
Специальная программа-игра на Godot для конкурса Ассетов, где можно заменить любой спрайт
Графика Кота для этой спец.программы
Спустя какое-то время после окончания конкурса Ассетов Кот написал, что мой конкурс вдохновил его и он полон решимости сделать целую игру-платформер! И мы начали это долго обсуждать. Пока мы перекидывались идеями, появилась новость о скором проведении конкурса Гаминатор 28 пользователем Anim86. Мы решили делать игру на этот конкурс и стали обсуждать это меньше т.к. нужно было дождаться объявления темы. Однако, мы уже тогда определились, что я буду программистом, а Кот рисовать графику и уровни.
Тема появилась. Она мне не понравилась. Примерно со старта конкурса написал мне и Scorched. Он сразу обозначил, что ему интересно делать звуки и поинтересовался задумал ли я чего делать на этот конкурс — я ответил, что уже ввязался в кооперацию и решил спросить Кота по поводу ещё одного участника. И почти сразу же Кот создал чат в телеграмме для обсуждения разработки нашей игры.
Вот так у нас образовалась команда из Kot211 — графика, уровни, сюжет, ведение проекта, и, как мне кажется, вся идея; DarkDes (т.е. я) — программирование, техническая часть; Scorched — звуки, некоторая музыка и подбор музыки;
Думал, что мы будем пользоваться чатом редко, но там оказался плотный и скоростной трафик сообщений! Пару раз писал команде в полу-шутку, что “да вот же, я уже сделал игру на эту тему – Красный Робот с Гаминатора 22! И он тоже платформер!”. Этот проект с Гаминатора 22 в итоге стал практически основой для текущего.
Скриншот игры Красный Робот. Как видно в заголовке — тогда я не придумал название, но сейчас в переписках используется именно «Красный Робот»
Мы начали придумывать игру. Мне показалось, что больше влияния было от Кота, чем от меня или Скорчеда. Т. е. геймплей и сюжет придумал он, мы лишь обсуждали эти аспекты, не сильно внося какие-то новые. Были там моменты от концепции, что я с Котом обсуждал до конкурса. Например, что главный герой является роботом, есть руины и игра в жанре платформер. Вот что пишет по этому поводу Кот:
Да, собственно, вся наша доконкурсная концепция сводится к трём словам: платформер, роботы, руины. Изначально у нас с тобой возникла идея сделать что-то вместе незадолго до Гаминатора, но никак с ним не связанная. Накидывали идей, чтобы понять, что нам обоим было бы интересно. Пришли вот к этим трём словам, и от них попробовали построить общую идею. Среди вариантов этой идеи был и вариант с горой, пространством внутри (не пещерой, а скорее имитацией поверхности), значительно более масштабным (но всё ещё камерным) сюжетом и более обширным миром, чем в конкурсной игре. Все эти идеи остались не проработанными, т.к. начался Гаминатор и мы решили что-то сделать на него. В итоге на конкурсную игру у нас остались те самые общие три слова: платформер, роботы и руины. А лично я в своих сюжетных придумках оставил гору, вдохновляясь Кейв Стори и той нашей большой идеей, и главного героя робота как наследника нашего с тобой незавершённого обсуждения, кем может быть герой в той большой истории.
Надо сказать, тема Гаминатора сама по себе очень удачно зашла в наш настрой. А наш настрой на совместную деятельность удачно лёг на начавшийся конкурс.
Очень много и очень долго мы общались в чате по поводу концепции игры. Я настаивал, что надо сделать краткий список ресурсов и моментов из игры и это позволило бы охватить взглядом время и сложность. Для меня это был проверенный способ — я так все свои игры сделал.
Наверно, не в деталях, а размыто суть игры была сформирована сразу: Платформер, история, персонажи, сюжетные моменты. Поэтому потребовалась таблица с описанием конкретики и Кот сделал настоящую Монстр-Таблицу, да ещё и из нескольких листов! Он написал как видит игру, какие ресурсы там были бы, звуки, музыка, графика. Казалось, что учтено всё. Забегая вперёд спойлер: не всё.
В каком-то смысле эта таблица похоже на Beat-Chart, где описывается уровень и механики на нём. Скажу сразу, что ориентироваться в ней было сложно.
Это лишь малая часть монстр-таблицы
Мы продолжали обсуждать концепцию в чате, от чего Скорчед даже начал переживать, что мы не успеем с такими объемами. Я с ним соглашался — ничего не успеем. Поэтому я предложил сделать игру за 2 недели, а не месяц, который отводился на этот конкурс. Это позволило бы сосредоточится на самом важном и потом полировать игру. Забегая вперёд: конечно же, мы не взяли лимит в 2 недели и да, мы не успели к оригинальному дедлайну, как и было предсказано.
Разработка
Общая идея игры и сюжет были готовы. Опять же, не в мельчайших деталях, но можно было начать что-то делать. Пока это обрастает дополнительными деталями, я решил взять и сделать базу для платформера, который будет использоваться в этом проекте. Мы с Котом уже ранее решили, что будем использовать GameMaker, так как он знаком с движком, да и я больше всего именно на этом движке игр сделал.
Я сделал немного платформеров или игр схожего жанра. Могу вспомнить такие игры как «Непонятна тьма» для КОД 16, «Рунтрис» или «Супер Матвей Галаксеевич» для КОД 17.2 (18), «Криста фон Граф» на MP3 Jam и конечно «Красный Робот» (он же «Игра без названия, но про робота») с Гаминатора 22, который послужил основой для текущего проекта.
1/3
Непонятна тьма, Супер Матвей Галаксеевич, Криста фон Граф
Собрав старые наработки я сделал проект Platforman 2. Где первый? Судя по датам он стал основой для Красного робота и собран после Непонятной тьмы.
Platforman 2 основа для всех моих следующих платформеров, неким хабом откуда будут тянутся скрипты и объекты в другой проект, а потом доработанные версии этих скриптов из проекта должны вернутся в этот хаб-проект.
В будущем я хочу сделать технический монстр-проект Framework, где будут все мои наработки, чтобы глобально отслеживать изменения своей кодовой базы GameMaker. Для меня является проблемой — трекать изменения всех своих модулей, скриптов и объектов. Я делал таблицу и сейчас наткнулся на airtable, где попытаюсь выстроить целую БД, чтобы было проще оперировать своими наработками. Это было небольшое техническое отступление.
Пока я делал основу, где герой может прыгать, собирать монеты, и бегать по кривым поверхностям, концепт оброс некоторым количеством деталей концепта. Я приступил к созданию конкретного списка что нужно сделать т. е. список To-Do. Думал, что пока я пишу список и реализую его, то вся конкретика появится и устаканится. Но вышло так, что даже в своих списках (враги, например) всё ещё не появились как конкретный концепт и на тот момент было непонятно что вообще реализовывать.
Список, который я составил для базового платформера (Platforman2)
Скорчед хотел попробовать использовать FMOD, и я даже скачал его себе на компьютер. Есть официальное расширение для GameMaker. Но честно, я сомневался в решении использовать FMOD. Мне было непонятно зачем такая сложность для простого проигрывания звуков. Там была пара интересных моментов, например, что из звуков можно составить более сложный звук и «запрограммировать» какие-то параметры. Но хоть демка от самого GameMaker у меня работала, но уж слишком много кода и телодвижений нужно было сделать для добавления всего лишь одного звука. Я решил, что это неоправданно и отказался от этой библиотеки.
Моё решение Скорчед принял и мы стали использовать обычные звуки в GameMaker. Я создал скрипт GameSFX() с кучей функций ffx_ (нет, это не final fantasy x!) — так обозначил всю группу звуко-эффектных функций, в которых Скорчед мог делать всё что захочет. А я вызывал эти ffx_ функции в коде игровой логики. ffx_ не называется sfx_ от того, чтобы не создавать путаницу. FFX (первая F это Feedback) я хотел расширить с просто звуковых эффектов, до более глобальных: vfx (спрайты дыма, например), тряска камеры, вибрация контроллера. Но это, наверно, уже только в будущих проектах.
Помню, Скорчед написал, что он так-то программист, но не хочет участвовать в конкурсах в этой роли. И теперь я понимаю почему! Об этом позже. Но программерские навыки явно помогли ему с легкостью дополнять функции звуков, если он что-то захотел изменить. Он попросил меня только добавить возможность блокировки воспроизведения звуков, если их больше чем N. Чтобы не игралось 10 выстрелов, например, а только 4 одновременно.
1/2
Список todo когда ещё не было сильной конкретики. Как видно — завершил я не всё. А потом появился список с большими конкретными моментами (уровни, катсцены) и ОГРОМНЫЙ список правок и изменений от чего я сильно бухтел.
Как я писал ранее, мы сразу обозначили свои роли: я технический отдел, Кот рисует графику, сюжет, делает уровни, а Скорчед отвечает за звуки (в будущем он с Котом подбирали музыку, я в это не лез). Однако, ещё на этапе обдумывания думал, что катсцены, которые были прописаны в сюжете, будет делать Кот через мою удобную систему написания катсцен кодом, предполагая, что он с движком знаком. Моя система такая, что нужно писать последовательность действий в виде функций. Это не тоже самое, что и встроенные в GameMaker Timeline и Sequence, но думаю, что оба вида ресурсов можно использовать внутри моей системы. Это опять было небольшое отступление.
Но оказалось так, что и реализацию конкретных катсцен должен делать я. Ладно катсцены — система удобна мне и с ней относительно быстро сделал… или не сделал, потому что пошла зависимость от конкретики и проблемы. Вернее сказать, что этой конкретики не было в каких-то вещах. Я не могу сделать катсцену для сцены-1, которая на уровне-1, потому что этого уровня ещё нет в хоть каком-то виде. Конечно, те вещи что я мог реализовать я таки реализовал, где нет зависимости от уровня. Мне казалось, что я большую часть времени делал не конкретную игру, а какой-то эфемерный набор вещей, который мог пойти под нож и «ну надо переделать», хотя я и так много сил тратил на это. Почти весь этап разработки я провёл на тестовых уровнях под названием playground, без тестирования на конкретных игровых уровнях.
Поворот
Это не сюжетный поворот, а скорее точка слома-перелома. Мне кажется, что я перегорел. Постоянно добавляющиеся список фичей рос, а игры не было видно. Пункты из списка закрывались один за другим, и казалось уже вот всё готово, то тут и возникали некие новые детали и те самые «надо сделать», хотя вот же готовое, но нет. Именно тут, как мне кажется, я понял о чём писал Скорчед — почему он не хочет быть программистом в конкурсных участиях (хотя, может я не так его понял). Какие-то вещи добавлялись, чтобы быть переделаны т.к. изначально были не чётко обозначены. Вы можете сказать, что это нормальная практика и итеративный процесс в разработке. Может быть это так, может быть это я такой ворчун, но когда ты сделал систему и нужно снова вносить правки, которые изначально не предполагались, когда значительную часть разработки\конкурса провели в обсуждениях и вроде всё выяснили — это раздражало. Программировал игру из последних сил на тот момент. Я далеко не перфекционист и мне важнее закончить игру, а тут я видел, что с таким подходом закончить не успеем никак.
Конечно я не хочу наговорить на команду, но мне в тот момент, с моей стороны казалось то, что всегда меня преследовало при неудачных коопах, где я был на технологиях: словно я делаю всё, а другие либо ничего, либо незначительно мало относительно моих вложений. Как я писал во ведении: я не знаю как это ощущали Кот, Скорчед и что они делали и как старались, а может были какие-то обстоятельства IRL. Например, Кот писал, что он рисовал графику в последние дня 3 и из этих трёх дней он спал крайне мало, если вообще спал.
Подходил дедлайн и моя твёрдая уверенность, что не успеем и что время будет потрачено зря, отвердевает до состояния алмаза. Так и хотел написать в чат «я же говорил» (а может и написал!?).
Случайный скриншот со времён разработки игры
Кто-то наверно скажет, что плохой тайм менеджмент, координатор и лидер проекта, надо было брать сеньёра с 40 летним стажем ради игры на локальном сайте для небольшой группы энтузиастов … и вы будете серьезны? Это же конкурс хоббистов, по сути. Вся проблема, как мне кажется, была в объеме самой игры. Изменилось бы что-то, если бы я был ведущим лидером проекта, который бы снижал хотелки? Не знаю, может быть мы бы успели в срок, а может и нет, а может получилась бы не игра, а какая-то пустышка.
Когда делаешь игру в одиночку (соло), то ты ответственен только перед собой. Не успел — виноват ты сам. Сделал плохой геймплей — виноват ты сам. Весь срок конкурса бегал по неотложным делам в IRL — виноват … ладно, тут может быть кто-то другой виноват!
Может показаться, что я ругаю команду, но это не совсем так — я лишь слегка бухчу, хотя в тот момент я действительно уже был выжат. Мне, конечно, не понравилось, что нельзя просто сесть и написать код один раз и это пойдёт в «продакшен». Разумеется со своими итерациями, но не такими, что по сути надо делать две игры по объемам.
Конкурс продлили ещё на неделю. Хоть в чате разработки я писал, что не выдержу при продлении, но каким-то образом нашёл силы доделать игру. И опять делал свои списки с задачами. Мне это помогает сосредотачиваться на проекте т.к. это конкретика, конкретная вещь, делаешь только её и всё. Список багов и других моментов постоянно появлялся в чате и быстро улетал в историю и я просил писать в особый гуглдокумент, где у нас была информация по проекту и где я отслеживал свои задачи в виде простого списка.
Но и продления не хватало. Было решено вырезать небольшой, и как мне кажется, незначительный кусок в игре, где была ещё одна локация. Мне скорее обиднее за один небольшой игровой объект, которую просили сделать, а в итоге она и не была использована. Не то чтобы это меня сильно задело, но с этим связано то, что для добавления взрывчатки нужно было менять поведение объекта нанесения урона… короче запутанная история, детали которой я забыл. Суть в том, что потратил время и силы на этот объект, а он не оказался нужен.
Рисовал спрайты в Aseprite. Много кадров анимации.
Графика была не вся готова. Поэтому я вызвался помочь с ней и нарисовал Босса. Когда я считал примерное количество анимаций и кадров, то ужаснулся — 73 кадра! И это только по предварительным расчётам. Конечно, нужно было это нарисовать очень быстро и я осилил это за два дня.
Потом, продолжаю тематику злодеев, я нарисовал и всех трёх врагов с простейшими анимациями. Но врагов я рисовал уже во время так называемого багодня, где по идее можно было только исправлять баги, но организатор Anim86 разрешил «полировать игру». Поэтому были дорисованы некоторые спрайты (многие) Котом и враги мной.
Враги слева направо: лягушка, патрульный, турель
Выводы
Многое я уже забыл спустя месяц разработки. Но мы сделали игру! Ура! Не 100% какую задумывали, но всё же дошли до конца.
И в качестве эксперимента решил выложить видео на Youtube и VKVideo продолжительностью в 30 минут, где я собрал короткие видео (и пару скриншотов) с этапов разработки в виде эдакой хроники:
Всегда предполагал и закрепил на опыте: разработка в команде это ДОЛГО и сложно! Очень много времени тратится на связь, обсуждения, разговоры, координацию и прочее. Проекту нужен тот, кто видит игру и поведёт других — тимлид, можно сказать. Может от того, что я был программистом и бухтел, но мне кажется, что таким лидером должен быть именно программист — он будет знать все технические аспекты и возможности игры.
С другой стороны делегирование т. е. разбивка задач на другие области помогает сосредоточится на одной, но не без минусов. Когда ты не делаешь уровни, то для тебя они становятся интереснее, нежели ты сам их спроектировал и протестировал раз 100. Отдать кому-то собирать уровни это интересно!
Особо мне понравилось взаимодействие с отдельным человеком на звуках, наверно, как и музыке: я всегда оставляю звуки и музыку под конец разработки и иногда не успеваю их добавить. Мне кажется это достаточно долгим выбирать или синтезировать звук, в то время когда можно было бы дорабатывать игру. А когда эти звуки подберут\сделают за тебя ты можешь действительно делать игру, а не тонуть в поисках звуковых файлов и подбирать звучание.
Наверно аналогично можно сказать и о графике: когда ты бегаешь в своей игре с системными и техническими спрайтами, а потом добавляя игровую графику это ощущается очень круто! Так как я художник-программист в своих играх, то я не ищу ассеты графики, а рисую свою. Поэтому тут не совсем тоже самое, что и со звуками для меня.
Да, был момент, когда я очень сильно устал от проекта и наверно готов был бросить это дело, но не бросил — ответственность перед командой и игрой. Я рад, что у нас получилось сделать игру!
Однако, такой опыт нужно переварить и отдохнуть. В соло-разработка ощущается более комфортно и лично мне показалось, что с таким подходом вероятность завершить игру выше. Ведь это текущее участие удачное и с игрой, а сколько у меня было без результатов? Поэтому я продолжу советовать быть другим разработчиками-оркестрами, которые в случае чего могут в одиночку сделать игру. А если есть слаженная команда, то это же хорошо и можно использовать только свой сильный навык!
Задавайте вопросы! Участвуете ли вы в конкурсах по разработке? Если да, то в команде или в одиночку? Каков ваш опыт, мнение и чем можете поделиться по этому поводу?
Всем привет, у меня дикое желание создать свой собственную визуальную новеллу, хотя бы только для себя, попробовать и нигде его не публиковать. Но я столкнулся с проблемой, что я абсолютно ничего об этом не знаю, а также мои навыки программирования остановились на школьной программе 9-го класса. Поэтому я хотел бы попросить у вас совета, хотя бы в банальных движках или приложениях для создания. Я уже просмотрел несколько видеороликов на YouTube, но не нашел ничего, что бы мне понравилось. Заранее благодарю вас всех за вашу помощь, и я также постараюсь откликнуться на все ваши советы.
FMV-игры - это жанр full motion video, обычно с живыми актерами. Игра ориентируется на Fear Effect и Resident Evil2.
На данный момент кодеки неплохо продвинулись и почти во всех процессорах встроен хадрварный декодировщик. При этом минута видео+видео глубины занимает даже меньше чем пару статичных качественных картинок.
Удалось так же сделать собственный кодирощик видео глубины и нормалей, что позволило их сжать в 1000 раз.
Окружение игры строится из видео+глубины и совещается с обычным 3D, point cloud и иногда Gaussian Spats.
Камера не совсем зафиксирована, она может двигается и поворачиваться в небольшом радиусе.
Это дает несколько часов уникального контента без бектрекинга и процедрной генерации. И минимальные системные требования - пойдет даже на амберниках и webgl.
Игрок Алхимик(фрилансер) без денег F ранга — и постепенно растёшь от алхимика до владельца лавки и дальше к собсвтеной гильдии.
#devlog Cделал важную штуку для первой фазы игры: доска квестов. Она обновляется каждый игровой день, игрок подходит, смотрит заказы и принимает те, которые хочет
Также cделал мелочь но приятную — когда кидаешь листок с квестом на доску — он прилипает и остаётся висеть.
Новости относительно блокировки Roblox уже поутихли, депутаты высказались в стиле "Надо пилить-распиливать российский аналог", первые эмоции угасли, теперь можно подойти к вопросу с более трезвым взглядом.
Наверняка, условные Mail и Yandex уже пилят свои проекты, причём, я уверен, начали они это делать ещё задолго до официальных новостей о блокировке, и конкурировать с ними в РФ, очевидно, никто не сможет и в здравом уме не станет. И начинать проект ради скорого захвата освободившейся ниши было бы опрометчиво. Я не строю иллюзий, что программист одиночка без бюджета сможет сделать аналог уровня Roblox. Моя история будет про другое.
Я среднестатистический бекенд разработчик около-синьорного уровня (никогда не любил эти грейды) без какого-либо опыта в геймдеве. По моим ощущениям, геймдев (особенно мультиплеер) всегда считался чем-то вроде высшей лиги, каждый программист так или иначе мечтает создать собственную игру, для нас это своего рода святой грааль. Это интересно, это увлекает.
Запуская этот проект и серию статей, я хочу пошагово пройти путь от схемы на бумаге до первого рабочего мультиплеер прототипа. Проект некоммерческий, без призывов задонатить или подписаться на telegram max-канал, писать буду исключительно на Пикабу. Мне, как разработчику, будет крайне полезно заиметь проект подобного уровня в резюме, а там как карта ляжет. Я не ставлю себе каких-то жестких сроков или дедлайнов, потому что есть основная работа, есть семья, есть спорт, ну и всё в таком духе. Тише едешь, дальше будешь.
Название
Под одним из соседних постов про российский аналог кто-то в шутку предложил название Rublox, а кто-то даже пошел и сразу зарегистрировал домен.
@Sergei.Che, ты в телевизоре
Я решил придерживаться другой логики и назвал проект Voblox, от слов Voxel Blocks. Воксель – это трехмерный аналог пикселя, представляющий собой элементарный куб в трехмерном пространстве. И конечно, это отчасти пародийное название на Roblox.
Предполагаемая архитектура
Мне нравится сама идея игровой онлайн-платформы, позволяющей любому пользователю создавать свои собственные и играть в созданные другими игры, охватывающие широкий спектр жанров. Да, большинство игр минималистичны, но все они разные и каждая со своей уникальной механикой, от простой песочницы со свободой действия аka Minecraft, до массовых соревновалок или даже баталий команда на команду. Дух захватывает от того, сколько всего можно сделать в рамках одной игровой платформы при правильном проектировании.
Каким будет стек: – Unity в качестве кроссплатформенного игрового движка клиента; – Go в качестве основного серверного языка; – Lua в качестве скриптового языка для игр; – Postgres в качестве основной базы данных; – UDP с протобафом в качестве основного протокола взаимодействия клиент-сервер.
А вот так я представляю себе первую версию проекта:
Схема простая: игрок через Unity клиент игры подключается к игровому серверу c Lua машиной на борту и конкретным скриптом игры, в котором каждый игровой тик обрабатывается состояние игрового мира и рассылается игрокам. Ассеты для игры будут подгружаться из отдельного микросервиса, чтобы отсадить тяжелое TCP соединение от чувствительного UDP (об этом позже).
Очевидно, по мере реализации проекта, схема будет дополняться новыми микросервисами и связями: регистрация/авторизация пользователей, лобби со списком игр, скрипт-менеджер для жонглирования Lua скриптами, и т.д.
В следующей части разберём, что должен уметь Lua скрипт игры и какие события обрабатывать.