Всем привет! Мой никнейм Шустрый, и я создатель команды GENVIK GAMES. Звучит, конечно, пафосно, но на самом деле нас двое, и мы абсолютные новички.
Всю жизнь я играю в игры. Мне всегда нравилось погружаться в другие миры. Мне нравятся стратегии, особенно серия Total War. Я до сих пор расстроен, что Total War Arena закрыли — я не успел в нее наиграться. Также меня привлекают многопользовательские игры, там ведь тоже присутствуют тактические моменты. Тактический стратег нашелся!)))
Я несколько лет вынашивал идею о создании своих игр, мысленно крутил разные геймплеи и жанры, но боялся начать. А когда увидел анонс новой HoMM: Olden Era, то решился, что нужно пробовать.
Вопрос: реально ли это сделать, если тебе 30+, у тебя есть основная работа, есть семья и нет профильного образования? Я решил проверить это на практике.
Наша команда.
Геймдизайнер — я. Конечно, звучит громко, но как есть. Я занимаюсь техническими вопросами: кодинг, геймплей, баланс, продвижение и так далее. Но скажу честно, хорошо у меня пока что получается кодинг и геймплей.
Художник — моя вторая половинка. Она мне помогает с визуалом и некоторыми моими игровыми тупиками. Без неё мои войны всё еще топтались бы на монотонных гексах в одиночестве.
Что за игра?
Это тактическая RTS на гексах в эпоху Древней Руси. Мне интересны все древние эпохи, но Древняя Русь ближе по крови и духу. Вдохновлялся, естественно, Total War. Отряды задуманы как единый юнит на клетках, но я хочу, чтобы визуально казалось, будто это огромная армия. Графика — пиксель-арт.
Геймплей пока в базовой стадии: выбираешь отряды, изучаешь карту и управляешь боем. Я специально не усложняю механику на старте, чтобы сначала сделать крепкий фундамент. А уже потом добавлю фишки вроде особых способностей богатырей.
У меня есть базовые знания о программировании, но мне не хватает опыта. Я решил использовать современные технологии. Нашел бесплатный движок Godot (он показался мне понятнее остальных) и стал использовать ИИ-агента для написания кода.
Скажу честно: ИИ — это не волшебная палочка для всего. Дать один запрос, чтобы он сделал всю игру, не сработает. Я выступаю в роли начальника: ставлю задачу, тестирую, переделываю, прошу ИИ переписать. Это симбиоз человека и нейросети.
Помню, когда делали анимацию ударов, мне ассистент накидал неправильных значений, и мечники били куда попало. Пришлось самому разбираться больше часа.
Они, конечно же, присутствуют. Наверное, самая большая трудность — это время, но мне еще везёт, я работаю с графиком 2/2. Бывает, приходишь со смены, видишь, что у тебя есть несколько часов на игру, и думаешь: а с чего начать-то?
Еще не менее значимая трудность — это опыт. Нужно узнать, в каких размерах делать спрайты, какую архитектуру вообще закладывать в проекте, а почему ничего не работает и многое другое. А еще про семью не нужно забывать — она у меня на первом месте всё равно.
Что уже готово за месяц?
Нашими командными усилиями вот что удалось реализовать:
В идеале я хочу сделать онлайн-битвы между игроками. В планах — сюжет в виде визуальной новеллы (идея уже есть, но не знаю, зайдет ли), кампании и развитие героев.
Я прекрасно понимаю, что могу не потянуть онлайн-битвы. Страшно вложить месяцы, а потом упереться в техническое ограничение. Но я решил идти по принципу: «Глаза боятся, а руки делают». Если не получится с онлайном — сделаю крутую одиночную кампанию. Главное — не стоять на месте.
Говорят, что продвигать игру нужно уже на стадии прототипа. Поэтому я создал каналы в ВК и ТГ, где выкладываю новости по развитию проекта. Если вам интересно наблюдать за тем, как обычный парень после смены пытается сделать игру мечты — милости прошу. ВК - https://vk.ru/genvik_games ТГ - https://t.me/genvik_games
Вопрос к вам:
Игроки, как вам визуал? Что бы вы хотели видеть в такой игре в первую очередь?
Разработчики, есть ли тут те, кто делал онлайн на Godot? Буду рад любому совету.
На сей раз мне захотелось раскрасить текст картинками, поэтому я буду подставлять нейро-картинки и иногда мемы чтобы.. Выглядело интереснее. Надеюсь вам понравится X)
У любого, кто пытается прикрутить нейросеть к реальному коду, рано или поздно сгорает задница от одной и той же привычки моделей: они обожают трепаться вместо того, чтобы выполнять команды.
Сижу ночью, тестирую свежую сборку Aetheria. Мой персонаж стоит на складе, рядом бочка с маслом. Мне нужно проверить, как движок отработает физику разлива и горения.
Пишу: «Бью топором по чану с маслом».
Что должен сделать нормальный скрипт? Вызвать item.damage, расколоть объект, вылить жидкость на пол.
Что делает LLM? Она включает режим великого писателя: «Ты крепче перехватываешь топорище. Холодный металл тускло блестит в полумраке склада, а в воздухе стоит тяжелый запах старой древесины и смолы. Ты чувствуешь, как напрягаются мышцы перед ударом...»
И всё. Ни вызова функции в коде, ни разбитого чана. Текст есть, действия нет.
Пишу второй раз: «Я не чувствую мышцы, я бью по бочке со всей дури, прямо сейчас». Модель: «Лезвие со свистом рассекает воздух и с глухим стуком врубается в толстые дубовые клепки! Щепки летят в стороны, чан содрогается, но дерево держится крепко. Ты ощущаешь отдачу в ладонях...»
Смотрю в дебаг-панель движка — здоровье чана 100/100, масло внутри, флаг удара не вызывался. Нейросеть просто сочинила красивую анимацию удара на словах, забыв дернуть триггер в коде. В ее воображении мы уже полчаса рубим этот несчастный чан, а в памяти движка мы просто стоим столбом посреди комнаты.
На четвертый ход я уже пишу капсом: «ПРОБЕЙ ЕГО НАХРЕН».
И только когда в системный промпт прилетел жесткий пинок по рукам («сначала вызывай инструмент в движке, а потом пиши свои поэмы»), модель наконец соизволила отправить честный JSON-запрос на урон. Чан треснул, масло залило пол, физический движок с радостью всё это поджег.
Это главная болезнь текстовых нейроигр. Модели патологически лень дергать код, ей проще родить три абзаца художественного текста ни о чем. Приходится буквально вбивать ей в голову правило: если игрок бьет, ты сначала обязана изменить состояние мира в движке, и только потом открывать рот.
В общем, после тонны таких правок, споров с ИИ и борьбы с бесконечными пожарами, мы наконец упаковали текущую версию в играбельный билд (v0.1.7-alpha) и выложили на itch:
Переоформил я недавно свой профиль. Ой, как же мне он нравится XD
Кому интересно пощупать, как это играется вживую — заходите, качайте. Предупреждаю сразу: игра работает от внешних API-моделей (лучше всего скармливать ей DeepSeek или Qwen), так что в настройках надо будет вбить свой ключ.
Если кто-то тоже пытался заставить LLM стабильно вызывать функции без пустой болтовни — делитесь в комментах, какими костылями лечили.
Когда делаешь игру с честной симуляцией физики, рано или поздно наступает момент, когда мир начинает жить своей жизнью, причем самым идиотским образом.
На днях один из наших тестеров (JimTheDog) решил проверить, как игра реагирует на создание сложных объектов. Зашел в сарай и попросил Главного ГМа поставить там нормальную кузницу: горн, наковальню, инструменты.
ГМ все создал. На следующем ходу горн внезапно загорается сам по себе. Еще через ход огонь бодро перекидывается на деревянный стол, бочки и ползет в соседнюю комнату.
Игрок пишет ГМу: потуши, оно само горит. ГМ отвечает, что все потушено и починено. Игрок делает следующий ход, и комната снова вся залита маслом и полыхает. Каждая «починка» жила ровно один ход, после чего все загоралось заново.
Стали разбираться в логах, и там вскрылась прекрасная цепочка того, как не стыкуются логика нейросети и строгий программный код.
Первая проблема была в том, как движок собирал предмет. В коде стояла проверка, которая сначала парсила текстовую строчку названия, а уже потом смотрела на указанный материал. Горн был честно прописан как металл, но в названии где-то проскочило слово «масло». В итоге движок решил, что перед ним не железная печь, а промасленная тряпка, и выставил объекту горючесть на максимум и пропитку маслом на 80 единиц.
Дальше подключилась сама физика распространения жидкостей. По задумке масло должно было впитываться при контакте. Но из-за порога срабатывания любая испачканная вещь сама становилась новым источником масла. Горн мазал пол, пол мазал бочки, бочки пачкали стены, а стены разносили масло в соседнюю комнату. Получилась цепная реакция, которую невозможно было остановить.
Починка от ГМа тоже оказалась фикцией. Нейросеть вместо того, чтобы пересобрать поврежденный объект с нуля, просто накатывала поверх старого состояния строку «потушено». При этом модель решила, что раз это горн, то у него должна быть рабочая температура, и от балды вписала туда 1000 градусов. Движок это число честно записал в параметры, и при любом взаимодействии с горном персонаж получал дикий термический урон.
И самое веселое выяснилось, когда мы полезли глубже в проверки. Слой валидации ходов, который должен был бить модель по рукам за такие фокусы, вообще молча падал на каждом вызове из-за старой ошибки в коде. Ошибка тихо падала в лог, а само действие пропускалось дальше. То есть игра выглядела так, будто все проверки пройдены, хотя на самом деле никто никого не проверял.
В итоге пришлось полностью пересматривать то, как код работает со свойствами:
1. Заявленный тип материала теперь всегда главнее текста в названии.
2. Масляные пятна больше не делают из каждого предмета бесконечный фонтан масла.
3. Любой ремонт принудительно пересобирает объект из дефолтного состояния его материала, а все параметры вроде температуры и влажности зажаты в строгие рамки.
4. Добавили команду полной зачистки комнаты от грязи, огня и кислот на случай таких аварий.
В геймдеве это обычное дело, но когда физика завязана на интерпретацию нейросетью, подобные баги выглядят особенно сюрреалистично. Кто делает свои симуляции, часто ловите такие самоподдерживающиеся циклы из-за одной опечатки?
Продолжаю делать Threads of History - глобальную стратегию про управление страной. В новом обновлении добавил авторитет правителя, доверие правительства и решения, за которые придётся отвечать перед жителями, чиновниками и журналистами.
Представьте: в стране начались протесты. Профсоюзы требуют переговоров, силовики просят больше полномочий, а в казне не так много денег.
Можно начать переговоры и выделить средства на помощь населению. Поддержка жителей вырастет, но часть государственного аппарата останется недовольна уступками. Можно дать силовым ведомствам чрезвычайные полномочия - стабильность повысится быстрее, зато упадут поддержка населения и авторитет. Есть и независимая проверка требований с постепенными уступками: она меньше раздражает стороны, но в ближайшее время ухудшает стабильность.
Время приостанавливается до ответа. Отложить такой вопрос навсегда нельзя.(ссылки под изображениями ведут на сайт где вы сможете просмотреть их в норм качестве)
Теперь у лидера есть два отдельных показателя: авторитет и доверие государственного аппарата.
Авторитет растёт после военных побед, выполненных обещаний, крупных реформ и национальных проектов. Поражения, коррупция, затяжные кризисы и долгое отсутствие достижений его снижают. При высоком авторитете легче собирать налоги, проводить реформы и договариваться с другими странами. При низком растёт риск внутренних конфликтов, а противники охотнее давят на государство.
Но популярность у жителей ещё не гарантирует, что правителю доверяют министры и генералы. При плохих отношениях с аппаратом начинается саботаж: реформы тормозятся, налоги собираются хуже. Если одновременно падает авторитет, командование может задерживать приказы. Затяжной конфликт с правительством способен закончиться отстранением лидера от власти.
Раз в игровой год проходит государственное совещание. Обсуждаются бюджет, ответственность министров и будущий курс страны. Можно усиливать личный контроль, давать больше самостоятельности кабинету или договариваться с регионами. Ответы меняют отношения с аппаратом и условия работы государства на следующий год.
Если лидер берёт публичное обязательство, через год игра проверит результат. Повторным обещанием передвинуть срок не получится.
Появились и пресс-конференции. Журналисты спрашивают о том, что действительно произошло в партии: принятом законе, войне, коррупции, росте цен, протестах или невыполненном обещании. Для игрока проводится не больше двух конференций в год, с большим промежутком между ними.
Теперь у каждого вопроса есть конкретный автор и редакция. Если ответ содержит важную позицию или обещание, он появляется в новостях. Статью пишет именно тот журналист, который задавал вопрос. В материале остаются повод для разговора, сам вопрос и содержание ответа.
Эта связка работает и для других лидеров. Например, после объявления войны или серьёзного внутреннего кризиса иностранный руководитель может публично объяснить позицию правительства, а журналист выпустит материал об этом. Частота таких новостей ограничена, чтобы мировая лента не состояла из одних выступлений.
Всего сейчас есть десять типов обязательных кризисных решений: от нехватки еды и энергии до инфляции, сепаратизма и конфликта вокруг реформ. Они появляются при соответствующих проблемах в стране. Последствия некоторых решений сохраняются несколько месяцев, поэтому спасение бюджета сегодня может осложнить следующий кризис.
После поражения на выборах, капитуляции или потери власти можно продолжить партию за другую страну. Мир продолжает жить с прежними датой, границами и событиями. Армия остаётся у прежнего государства, а агенты, личные бонусы и обещания предыдущего правителя не переносятся игроку.
Обновление уже работает. Баланс авторитета, доверия и частоты кризисов ещё проверяю в продолжительных партиях.
Пишите что еще показать из игры, что думаете об обновлении и пишите в комментах если хотите быть тестером игры
Всем привет! Я разработчик глобальной стратегии Threads of History(посмотрите мой первый пост). Я прочитал ваши комментарии под прошлым постом, было много негатива из за Крыма который на скринах был украинским, еще раз объясню, пикабу сожрал качество картинок и они получились мыльные, год на скринах был 1991 и 1992, на тот момент Крым принадлежал Украине, а вот уже в 2014 стал принадлежать России, это просто констатация исторических фактов, а не мое мнение, я не пытался никого задеть или что еще, надеюсь на вопрос ответил, больше на такие комменты не отвечаю. Так вот в других комментах вы просили рассказать об игре по подробнее так как в первом посте я максимально поверхностно про нее рассказал, теперь по вашим просьбам я буду постепенно рассказывать, что уже есть в игре и как это работает. Затем сделаю геймплейный ролик и подготовлю демку, чтобы можно было попробовать всё самим.
Сегодня покажу новости, распределение ресурсов во время войны и пару вещей, которые должны сделать игру удобнее.
Одно событие - разные взгляды
У игровых новостей есть редакции и журналисты. У каждой редакции своя подача: одни стараются придерживаться фактов, другие смотрят на происходящее через интересы жителей, бизнеса или государства.
Например, правительство снижает налог. «Государственный вестник» подаёт это как ответ власти на запрос общества. «Деловой контур» разбирает, что будет со спросом и выдержит ли бюджет снижение поступлений. Событие одно, а акценты разные.
На двух скринах ниже - одно и то же решение глазами разных редакций. У материалов указаны автор и ракурс, с которого рассматривается событие.
Кому достанутся последние запасы
Во время войны приходится думать и о фронте, и о людях дома. Если еды не хватает, нужно решить, кого снабжать в первую очередь: солдат, мирных жителей или всех понемногу.
Вариант «сначала армия» помогает сохранить фронтовой паёк, но ухудшает положение жителей. Если защитить семьи, фронту придётся расходовать свои запасы. При затяжной нехватке еды возможен голод с гражданскими потерями.
Приоритет меняет распределение имеющихся продуктов. Новые запасы от выбора в меню не появляются: нужно налаживать производство, закупки и поставки.
Есть и другие решения: куда направить врачей, топливо и транспорт, сколько выделить на помощь населению. Последствия отражаются на снабжении, потерях, расходах и поддержке войны.
Интерфейс можно собрать под себя
Окна можно двигать и менять в размере примерно как в Windows. Можно открыть несколько разделов рядом, свернуть их или закрепить на месте.
Нужна большая экономика перед глазами — растянули её окно. Хотите одновременно смотреть другую информацию — разместили второй раздел рядом. Мешает блок текущих задач — скрыли. Понадобилась сводка армии — включили её через меню «Интерфейс».
Там же можно включать и отключать панели, названия стран и столиц, границы, менять непрозрачность. Если с расположением что-то не понравилось, есть сброс размеров и позиций.
Ниже - несколько вариантов расположения окон и само меню настроек интерфейса.(Пикабу сжирает качество поэтому оставил ссылки под каждым изображением (кроме тех в которых все видно) чтобы вы могли детальнее рассмотреть скрины из игры)
Не хочется заставлять человека сворачивать игру и искать, что такое диверсификация, инфляция или реквизиция. Поэтому у терминов из встроенного словаря есть объяснения простыми словами и короткие примеры.
Такие слова отмечаются значком ⁺. Нажимаете колёсиком мыши на слово — открывается карточка с объяснением. Эту функцию можно отключить, если подсказки не нужны.
Дальше буду подробнее показывать остальные механики, потом выложу геймплейный ролик и демку. Если хотите поучаствовать в тестировании, напишите в комментариях. Также предлагайте свои идеи по поводу игры и свои мысли. Когда подготовлю тестовую сборку, расскажу, как подключиться всем желающим.
И пишите, какую часть игры показать следующей. По вашим вопросам будет проще понять, что стоит разобрать подробнее.
Если вы хоть раз пробовали текстовые ролевки на нейросетях, вы наверняка ловили себя на мысли, что через полчаса это становится невыносимо скучно.
Введите описание к изображению (не обязательно)
Вроде бы технология крутая, но на практике происходит одно и то же: ты пишешь одно простое действие, а модель вываливает три страницы пафосного текста, где уже за тебя решила, куда ты пошел, что почувствовал и как победил дракона. Ты ей пишешь: «Кидаю в стражника тухлую репу», а она отвечает: «Стражник ощутил в этом жесте дыхание древней судьбы и заплакал от вашего величия». А еще через десять ходов она начисто забывает, где вы вообще находитесь, и радостно соглашается на любой бред игрока.
Я сам долго ковырял эту тему (кто-то может помнить мои старые посты про Хроники Метерии), и в какой-то момент понял главную проблему. Нейросеть нельзя просить «вести игру». Она по своей природе пытается написать рассказ, а игра — это не рассказ, это система правил и жестких ограничений.
Когда я сел переделывать все с нуля в новом проекте (Aetheria), пришлось ломать привычный подход сразу в нескольких местах.
1/3
Вот вам пару скринов чтоб было на что посмотреть.
Во-первых, правило «один ответ — один момент». Самая большая ошибка — давать модели описывать сцену целиком. В нормальной ролевке ход должен быть коротким: произошло одно действие, мир среагировал, и управление моментально вернулось игроку. Написал «осмотреться» — получил описание того, что перед глазами, а не главу книги.
Во-вторых, у модели нужно отобрать право придумывать факты на ходу. Если в комнате деревянный стол, а на нем лежит ключ, то этот стол и ключ должны быть физическими объектами в движке, а не словами в воздухе. Вплоть до банального: у персонажа есть две физические руки. Ты не можешь взять факел, меч и кружку одновременно, если у тебя заняты обе руки. Если модель пытается такое провернуть, движок ее бьет по рукам.
1/3
В-третьих, неписи. Обычный чат-бот всегда говорит как услужливый продавец-консультант. Чтобы заставить его вести себя нормально, пришлось полностью убирать из контекста системный мусор и заставлять модель смотреть на мир от первого лица конкретного жителя деревни, у которого вообще-то свой день идет, и ты ему со своими расспросами не всегда упал.
Ну и ориентация в пространстве. Вслепую по тексту бегать тяжело, поэтому сейчас я в качестве эксперимента прикрутил черновую карту местности. Она пока совсем сырая и тестовая (еще сам не уверен, приживется ли в итоге), но идея в том, чтобы можно было кликнуть по объекту и выбрать базовые действия вроде «осмотреть» или «поговорить», не расписывая каждый шаг руками.
В итоге получается странная, но очень залипательная штука: нейронка просто крутит логику персонажей и событий, а сама игра живет по строгим законам старых олдскульных RPG.
Если кому-то интересно, как это ощущается на практике, я как раз собрал открытую тестовую сборку v0.1.7:
Сразу честно скажу про запуск и модели: лучше всего игра идет на DeepSeek и Qwen 3.8 Flash, на них логика держится крепко и диалоги адекватные. Но чтобы не заставлять людей сразу покупать ключи, я собрал утилитку Мостик:
Она цепляет бесплатные модели OpenCode. Будем честны, на бесплатных моделях сессия будет в разы слабее, с затупами и кривоватым нарративом, но Мостик дает главное — возможность вообще бесплатно запустить игру и побегать, не отдавая ни копейки.
Интересно послушать, кто еще пробовал делать или играть в подобные системы: как по вашему, у чисто текстовых нейроигр вообще есть будущее, или без нормальной графики это навсегда останется нишевой забавой для гиков?
Небольшой тизер и по совместительству компас общего антуража (из разряда: как хотелось и как получилось).
Это небольшая история о создании игры (Cobalt Gale), а точнее её вектора, где музой является ностальгия по пошаговым тактическим играм, подобным TimeZero и БК.
*история с техническим описанием, для тех кому интересен результат- пункт 6*
Ну что, начнём с "кубиков"...
1. Создаем серверное ядро.
Несмотря на предыдущую сборку (из первого поста), не было учтено самое главное - сам расчётный центр, мозг для условий, алгоритмов и прочего...
В дебри клиент-серверной архитектуры углубляться не будем (для этого есть сотни статей разного сорта), просто сделаем минимальный визуальный набросок на клиенте, ну потому что так удобней (так как механика на цифрах):
p.s. Качество исходных изображений было не таким шакальным, до выгрузки в пост....
Сейчас важным является проверка и оттачивание внутренней обработки данных на сервере, на какой-то грандиозно-сочный интерфейс нам наплевать, это же по сути - черновик.
Но все-таки попутно мы накидываем наброски 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, знают это не понаслышке.
Вот так выглядит частица увлекательного рандеву:
Это 1/4 калькулятора и настроек баланса. Не всё влезает, но для понимания масштаба прикрепляю.
Про вайбкодинг в целом сказать мне нечего. Если у вас правильно выстроена архитектура проекта, соблюдена разбивка на модули, настроен локальный git для взаимодействия с другими агентами - вам даже не важно, что бы я тут написал, вы и так шарите.
6. Текущий результат.
Описывать всё реализованное мне не хватит сил в этом посте, а вам не хватит терпения. Поэтому в рамках общей концепции этого поста я ограничусь описанием происходящего только на двух роликах.
Этот ролик посвящен перемещению по локациям как внутри зданий, так и снаружи. Это та самая 2D-составляющая, где будут квесты, NPC, караваны для ограбления и непосредственное перемещение по бастионам, бункерам, зданиям:
*Из всего предфинального проекта выложил только какой-то унылый скриншот, ну и тип, конечно...*
Всё что имеется в интерфейсе - полностью рабочее.
В данной сборке все кнопки функционируют и в интерфейсе нет каких-то пустых (визуальных) заглушек.
Обдумав и всё взвесив, я принял решение, что открывать публичный тест прямо сейчас - это неправильно.
Голая механика без "живого мира" не даст каких-либо эмоций. Зайти, провести два боя с NPC (или игроком) и выйти с мыслью: "Ну прикольно, а делать-то тут что в итоге?" - это худшее первое впечатление, которое может произвести игра. Для проекта, к которому я отношусь кропотливо и серьёзно, это непозволительно.
Поэтому я сознательно беру паузу на рутину: наполнить мир квестами, локациями, экипировкой и предметами, настроить баланс и диалоги, довести до ума стартовые модели и анимации. Лучше выкатить тест чуть позже, но дать хорошее погружение, чем скормить пустой технологический скелет (да и ради чего?).
* Я не ищу инвесторов, для меня лучшая поддержка это ваша заинтересованность, и я хочу оправдать её*
7. Резюмируя технические аспекты WEB.
При миграции в web выяснились хорошие и плохие моменты.
Я бы отметил из плюсов:
- Создание инструментов. Да, для ручной работы это не сильно проще, но когда нужно поправить или сделать гибким игровой элемент - это очень спасает. Не приходится собирать инструмент на одном движке, а саму игру на другом. Для гибкости большинство параметров должны иметь отдельные записи, в том же JSON ну или на крайний случай в БД.
- Возможность запуска без предустановки. Хоть в офисе, хоть дома... Удобно!
- Гибкая подстройка форм под мониторы с учетом CSS .
Из минусов:
- Проект без продвижения. Все заботы остаются на разработчике. Никакая площадка не будет продвигать. Конечно, можно попробовать собрать отдельный клиент (но веб - он и в Африке веб).
- За счёт простоты запуска на любом компе (практически на любом) приходится следить за нагрузкой, общим количеством полигонов и минимизировать графические эффекты, проверяя это замерами в тестах.
Надеюсь, материал был плотным и качественным, возможно, погрузил вас в те времена или просто история показалась вам интересной.
Мой первый пост (тык), возможно, получился сумбурным, но я как автор готов расти, пробуя разные форматы.
Всех, кому интересен проект, игра или просто хочется поностальгировать по тем временам, приглашаю в ТГ канал (Мастерская Cobalt Gale).
P.S. Я понимаю, что пост вышел достаточно техническим, но я хотел рассказать об особенностях проекта и определении того, в каком виде он будет существовать на текущий момент.
В следующем посте я планирую рассказать о самом геймплее простым языком, о моментах, которые кажутся спорными, о реализованном функционале и о том, что планируется добавить.