Первая игра, духовный аналог TimeZero и браузерных MMORPG прямиком из 2000-х. 2D vs 3D. Часть 2
Доброго дня, пикабу!
Небольшой тизер и по совместительству компас общего антуража (из разряда: как хотелось и как получилось).
Это небольшая история о создании игры (Cobalt Gale), а точнее её вектора, где музой является ностальгия по пошаговым тактическим играм, подобным TimeZero и БК.
*история с техническим описанием, для тех кому интересен результат- пункт 6*
Ну что, начнём с "кубиков"...
1. Создаем серверное ядро.
Несмотря на предыдущую сборку (из первого поста), не было учтено самое главное - сам расчётный центр, мозг для условий, алгоритмов и прочего...
В дебри клиент-серверной архитектуры углубляться не будем (для этого есть сотни статей разного сорта), просто сделаем минимальный визуальный набросок на клиенте, ну потому что так удобней (так как механика на цифрах):
Сейчас важным является проверка и оттачивание внутренней обработки данных на сервере, на какой-то грандиозно-сочный интерфейс нам наплевать, это же по сути - черновик.
Но все-таки попутно мы накидываем наброски UI (это окажется очень важным в дальнейшем):
Внимательные и зоркие отловили тот момент, что на скриншоте путь проложен через противника (таких ошибок будет много, и мы сразу стараемся их исправлять). В довесок неправильный расчёт ОД по клеткам - помечаем, но исправляем позже.
С одним игроком глупо проверять чистоту серверной механики, проверять будем на двоих. Создаем точки входа, разделяем на группы (кто союзник, кто враг, кто общий враг и тому подобное). Проверяем:
Да, про инвентарь, броню, оружие и воспроизведение боя я не рассказывал, но тогда пост сильно затянется. Всё это - серверная часть, основа.
Сама таблица персонажей, имеющихся вещей у персонажа, уровень, характеристики (и всё, что придумано у персонажа) должна иметься сразу. Во избежание переписывания алгоритмов и формул.
2. Модернизация системы координат и продумывание UI.
Квадраты или гексы? Выбираете в зависимости от вашего проекта.
Мною были выбраны гексы только по причине 6-позиционной клетки выбора вокруг персонажа, вместо квадратных клеток в 4 позициях (8 с заходом на другие клетки по диагонали - визуально некорректно).
По-простому, это как в игре "Змейка": вы бы вместо 4 направлений могли двигаться в 8, в том числе и по диагонали.
Попутно для удобства отладки назначаем по оси X буквенное значение. Теперь вместо 2/15 у нас B15. Но это на любителя.
Изначально проект в боевом режиме я видел в 3D. Но в какой-то момент понял, что вылизывание моделей и анимаций с сохранением геймдизайна - это достаточно длительный процесс для одного человека. Попробовал все-таки для начала поиграть с изометрией, попутно создавая себе дополнительные инструменты для работы со спрайтами и анимацией:
Здесь на самом деле появилась другая боль и полное осознание глубины.
Несмотря на изометрию (а точнее, триметрию - не спешите открывать форточку), нам необходимы спрайты во всех 6 направлениях, во всех положениях. Чтобы вы понимали: анимация бега в 6 направлениях (с пустыми руками) в 4 кадра - это 24 спрайта (картинки). Добавляем ходьбу, присед, бросок гранаты, лечение, движение с разными видами оружия, в разной броне - и это уверенно переваливает за полтысячи спрайтов. И это только персонаж.
Меня напугало не количество (я примерно ожидал не одну тысячу рисованной графики), а исполнение создания таких спрайтов. Обратите внимание: это не просто плоский 2D-спрайт, он объемный, с тенями. То есть по факту для такого качественного спрайта нам нужна 3D-модель с анимацией, которую потом можно "нафоткать" и дробить на спрайты.
И что мы имеем: 2D в изометрии происходит через 3D (кстати, для игры Fallout использовалась изометрия в 2D только по причине ограничения характеристик пк у большинства игроков... да, крутая видяха и сейчас не у всех, так что понимаем и не осуждаем).
Если вы хотите поднять такие темы, как отзеркаливание положения, то на такую халтуру я не готов идти. ГПТ и наны-бананы не могут сделать это качественно (последовательная анимация все равно выходит криво и не без артефактов), но тему геймдизайна и графики мы обсудим позже.
Что получается на выходе со спрайтами и текстурами:
На выделенную ошибку не обращайте внимания, это скрин из архива. Была длительная война с ограничениями пакетов в Socket.IO и некорректной сборкой данных обмена между клиентом и сервером.
3. 3D неизбежен.
Этот проект для меня важен. Находить лёгкие решения по типу покупки ассетов для изометрии и ограничить всё видом сверху - это подход спустя рукава (+ потеря контроля над стилем).
Да и если 3D неизбежен - идём в него, набираемся опыта через метод проб и ошибок (идеально ничего не бывает).
На самом деле критичного для меня в этом ничего не было: главным было важно собрать приоритетный сервер, а какую "морду" натянуть, 2D-изометрию или 3D - оставалось лишь решением на будущее, ну а пока - пробуем.
Берём Godot и делаем итерацию клиентской части (набросок):
Наглядная демонстрация клиентских версий.
Думаю, могут появиться споры, что 2D выглядит лучше, а в 3D пошаговые действия с полетом камеры только перегружают гемплей.
Готов выслушать ваши доводы и дискуссионные моменты, считаю, что это весьма спорная тема (даже до сих пор).
Двигаемся дальше, насыщаем карту объектами (заглушки на карте уже имеются, как для неразрушаемых, так и для разрушаемых объектов). Собираем на коленке базовые модели, играемся с видом от первого лица, скоростью проигрывания анимации:
Если вас начало подташнивать от вида от первого лица - понимаю.
Раз мы такое добавили, попробуем отполировать в дальнейшем и сделаем вкл/выкл, сейчас это не приоритетная задача.
Делаем апгрейд и, что немаловажно, начинаем углубляться в общий геймдизайн: экспериментируем с окном авторизации, инвентарём, раскладкой предметов, расположением окон.
Проверяем, как это всё у нас заводится, попутно исправляем ошибки:
Уверенно-сырая версия, но меня она не устраивает.
Основная причина заключается в том, что 2D - это составляющая локаций, инвентаря и предметов (это 70% игры), и она должна выглядеть достойно и качественно. В Godot с её кастомными темами (tres) это превращается в какой-то кошмар, особенно для сборки такого сложного интерфейса. Да еще и немалые страдания в этом интерфейсе с drag and drop (а его тут очень много). Не отрицаю тот факт, что на том же Unity тоже пришлось бы повозиться немало времени, но сама графика инвентаря легче даётся на CSS и выглядит так, как я и ожидал.
4. Итерация клиента в полный WEB (Three.js + WebGL).
Будем считать, что проект на Godot заморожен. Ничего не теряем, опыт ценнее, и в дальнейшем мы сможем вернуться более подготовленными.
Что по итогу - мы переезжаем в браузерные игры? "Алло, 2000-е, ну как вы там?"
На данном этапе - да. В целом для MMORPG это не страшно, это скорее её место обитания изначально. Будем считать, что это второе дыхание. Компы помощнее у всех, интернет (тьфу-тьфу-тьфу) стал быстрее - это никак не портит web-игру (но свои занозы в этом есть).
Собираем 3D-сцену, цепляем наши черновые модели, тут добавили, там подкрутили, насытили карту минимальными эффектами (попутно щупаем всё это дело). Воспроизводим сцену боя:
Вот теперь меня начинает устраивать результат. В этом виде мне комфортно продолжать и прорабатывать визуал.
*Какой-то шорох*
Так, подождите, я что-то слышу...
Вот собака! Ну... или крыса. Ладно. И правильно, вдруг укусила бы. Нам какие-то негативные эффекты не хотелось - надо дойти до выхода из шахты, а он в конце поста...
5. Инструменты.
Сам проект оказался куда больше и глубже, чем я ожидал на первый взгляд.
У меня есть финальное видение проекта, но дьявол кроется в деталях.
С учетом масштаба проекта потребовалось около 13 (пока что) - дополнительных инструментов, которые требуют ручной правки и внесения данных. И это не только создание локаций, редактор квестов, настройщик бестиария, редактирование карт боя и прочее. Самый главный дьявол тут кроется в балансе... О да... Не зря этой теме посвящена книга, не просто так до сих пор вносят патчи в онлайн-игры десятилетней давности.
Думаю, кто знаком с MMORPG, знают это не понаслышке.
Вот так выглядит частица увлекательного рандеву:
Про вайбкодинг в целом сказать мне нечего. Если у вас правильно выстроена архитектура проекта, соблюдена разбивка на модули, настроен локальный git для взаимодействия с другими агентами - вам даже не важно, что бы я тут написал, вы и так шарите.
6. Текущий результат.
Описывать всё реализованное мне не хватит сил в этом посте, а вам не хватит терпения. Поэтому в рамках общей концепции этого поста я ограничусь описанием происходящего только на двух роликах.
Этот ролик посвящен перемещению по локациям как внутри зданий, так и снаружи. Это та самая 2D-составляющая, где будут квесты, NPC, караваны для ограбления и непосредственное перемещение по бастионам, бункерам, зданиям:
Сама боевая система с болванчиком NPC:
Ну и скромный скриншот просмотра игроков:
Всё что имеется в интерфейсе - полностью рабочее.
В данной сборке все кнопки функционируют и в интерфейсе нет каких-то пустых (визуальных) заглушек.
Обдумав и всё взвесив, я принял решение, что открывать публичный тест прямо сейчас - это неправильно.
Голая механика без "живого мира" не даст каких-либо эмоций.
Зайти, провести два боя с NPC (или игроком) и выйти с мыслью: "Ну прикольно, а делать-то тут что в итоге?" - это худшее первое впечатление, которое может произвести игра. Для проекта, к которому я отношусь кропотливо и серьёзно, это непозволительно.
Поэтому я сознательно беру паузу на рутину: наполнить мир квестами, локациями, экипировкой и предметами, настроить баланс и диалоги, довести до ума стартовые модели и анимации. Лучше выкатить тест чуть позже, но дать хорошее погружение, чем скормить пустой технологический скелет (да и ради чего?).
* Я не ищу инвесторов, для меня лучшая поддержка это ваша заинтересованность, и я хочу оправдать её*
7. Резюмируя технические аспекты WEB.
При миграции в web выяснились хорошие и плохие моменты.
Я бы отметил из плюсов:
- Создание инструментов. Да, для ручной работы это не сильно проще, но когда нужно поправить или сделать гибким игровой элемент - это очень спасает. Не приходится собирать инструмент на одном движке, а саму игру на другом. Для гибкости большинство параметров должны иметь отдельные записи, в том же JSON ну или на крайний случай в БД.
- Возможность запуска без предустановки. Хоть в офисе, хоть дома... Удобно!
- Гибкая подстройка форм под мониторы с учетом CSS .
Из минусов:
- Проект без продвижения. Все заботы остаются на разработчике. Никакая площадка не будет продвигать. Конечно, можно попробовать собрать отдельный клиент (но веб - он и в Африке веб).
- За счёт простоты запуска на любом компе (практически на любом) приходится следить за нагрузкой, общим количеством полигонов и минимизировать графические эффекты, проверяя это замерами в тестах.
Надеюсь, материал был плотным и качественным, возможно, погрузил вас в те времена или просто история показалась вам интересной.
Мой первый пост (тык), возможно, получился сумбурным, но я как автор готов расти, пробуя разные форматы.
Всех, кому интересен проект, игра или просто хочется поностальгировать по тем временам, приглашаю в ТГ канал (Мастерская Cobalt Gale).
P.S. Я понимаю, что пост вышел достаточно техническим, но я хотел рассказать об особенностях проекта и определении того, в каком виде он будет существовать на текущий момент.
В следующем посте я планирую рассказать о самом геймплее простым языком, о моментах, которые кажутся спорными, о реализованном функционале и о том, что планируется добавить.
Спасибо за внимание, добра вам!





















