СПЛИТ FPV Гонки на дронах
Хочу поделиться с сообществом игрой, в создании которой я принимал непосредственное участие. Но больше хочу поделиться как игрок, потому что игра дарит новые интересные эмоции и эта игра дружелюбнее для новичков, чем аналоги. Т.к. в аналогах без уже знаний в полётах делать нечего, а СПЛИТ прощает многое на начальных этапах, но самое главное, что можно получить удовольствие от управлением дроном, и это правда удовольствие, когда дня через 3 начинает получаться (для меня после инсульта это особая радость), я, конечно, не говорю про Акро режим, но режимы с разными стабилизациями приносят радость от гонок и полётов.
Игра бесплатная и очень даже не плоха как в графическом плане, так и в геймплейном. И её интересно проходить, т.к. есть сюжет.
STEAM
VK Play
https://splitfpv.com/ru
Соцсети — подпишитесь на наш отечественный продукт
Очень хочу поблагодарить своих коллег, трудившихся над этим проектом, ребята проделали титаническую работу в кратчайшие сроки. Результат 🔥
Скину несколько видосиков для понимания, что это за зверь.
Девлог 1.0 | Как одна удобная фича сломала мне сервер и базу данных
Привет! Продолжаем домучивать боевое лобби. Сегодня я хочу рассказать классическую историю о том, как благие намерения и забота об игровом UX (пользовательском опыте) могут привести к бессонной ночи, переписыванию архитектуры базы данных и борьбе с синхронизацией.
Часть 1. UX против ленивых разработчиков
Замечали, как в большинстве RPG устроена система смены экипировки? Чтобы переодеть персонажа, поменять снаряжение или руны, вас почти всегда заставляют идти в строго определенную локацию — на склад, итд.
Почему разработчики так делают? Им так банально удобнее. Одна конкретная зона отвечает за строго определенные запросы к серверу. Игрок зашел в таверну, спокойно переодел героев, пакеты улетели на сервер, данные сохранились. Безопасно, изолированно, предсказуемо.
Но для игрока это туповато из лишних кликов, экранов и загрузок. Я решил дать игроку гибкость. Зачем заставлять человека бегать в трактир перед каждым данжем, если можно дать ему возможность переодеться прямо в боевом лобби, за миг до старта? Функция написана, механика добавлена. И тут же моя забота об игроках превратилась в технический пи**ц.
Часть 2. Как сервер дал байтил, а Unity стёрла память.
Как только фича вышла в тест, на меня посыпалась куча багов с синхронизацией сервера. Дело в том, что на сервере стоит базовая защита от спама кликов (DDOS и пакетный флуд). Если отправлять запросы часто, сервер их просто отклоняет с ошибкой. Но опытные геймеры переодевают персонажей мгновенно — они помнят нужные сеты наизусть и кликают как киберспортсмены. Защиту сервера отключать нельзя. Логичное решение — сделать отправку данных отложенной. Игрок кликает, мы собираем все изменения в один пакет и отправляем его через небольшой таймаут. И тут наступил на вторую мину.
Представьте стандартный сценарий: быстрый игрок залетает в боевое лобби, за пару секунд перекидывает шмотки и мгновенно прожимает кнопку «В БОЙ!». В этот самый момент сцена боевого лобби в Unity полностью уничтожается и выгружается из памяти, чтобы уступить место тяжелой боевой сцене. Итог? Наш отложенный пакет данных просто не успевает отправиться. Сцена лобби уничтожена, скрипт прерван, отправка сбросилась. Игрок загружается на поле боя абсолютно голым, потому что сервер ничего не получил.
Сейчас моя основная задача — прописать все возможные сценарии поведения игрока и победить эту синхронизацию. Я перебираю обходные пути: от реализации «тихих» фоновых запросов, независимых от текущей сцены, до временного кеширования данных в глобальных синглтонах, которые переживают смену локаций. Сервер должен сохранять данные корректно при любых условиях.
Часть 3. Архитектурная мина из прошлого
Пока я возился с синхронизацией лобби, всплыл еще один косяк, на исправление которого ушла добрая половина ночи. Пришлось полностью переписать систему экипировки.
Когда я только начинал проектировать предметы в игре, первыми я написал «бустеры». Бустер — это классический стакающийся ресурс (как расходники или золото). У него есть фиксированные статы, и он работает по принципу пачки: если у тебя есть 10 одинаковых бустеров, они занимают один слот с цифрой «10». Я решил переиспользовать эту готовую систему и для экипировки, забыв об одной фундаментальной ошибке. Экипировка в RPG не может быть просто «типом предмета». Каждая шмотка при создании или дропе обязана иметь свой уникальный ID (Instance ID). Даже если у вас есть два одинаковых меча одинаковой редкости, которые по счастливой случайности зароллили абсолютно идентичные характеристики — это всё равно два разных предмета.
Если бы они стакались в пачки как бустеры, игрок физически не смог бы открыть и посмотреть статы конкретного меча на складе. Мне пришлось кардинально перелопатить всю архитектуру инвентаря и разделить предметы на категории: ресурсы/расходники, которые могут стакаться, и уникальная экипировка, где каждый предмет занимает свой слот на складе.
Всё наконец-то структурировано. Вместо вывода вот так одна маленькая и безобидная идея «а давайте разрешим менять шмот в лобби» заставила переписать половину сетевой логики и пересобрать базу данных предметов. Зато теперь система гибкая, честная и работает на благо игрока, а не ради удобства ленивого программиста.
Мой ресурс разработки: VK https://vk.com/project_hardcore_rpg
Телега: https://t.me/+H6TsrI1YEOIwZGYy
Дорабатываем детали
Переделали балки в доме, теперь смотрится интереснее. Плюс добавили пристройку. Если приглядитесь, заметите, что в пристройке у нас не просто размноженный массив, а дощечки, расставленные вручную. Это позволяет создать ощущение неидеальности и живости. Время износило постройку.
Интерактивная цифровая настолка по Аркхэму, часть 2
Обещал сделать все колоды карт до конца дня - на 90% получилось. Напомню, что в предыдущем посте на игровом столе была тестово сделана только колода Аномалий (Брешь во времени для первого сценария Пришествие Азатота). Рассказываю, что вышло и как делал.
Вот как это вообще выглядит. В статике не так интересно, поэтому ниже прикреплю видео (и снова с убитым HDR, но кажется я нашел как принудительно записывать контент в SDR для отображения реальной сочности визуала). Единственное, что я не успел сделать - отрисовать дополнительные колододержатели для карт колоды Контактов и раскидать эти карты рандомно по соответствующим сценарию колодам районов и улиц, потому что их там целых 48 (по 8 карт на район и по 8 на улицы), и для каждой нужно сделать свою лицевую сторону да нацепить разные рубашки. На самом деле это уже просто небольшой повтор всех предыдущих действий, потому что суммарное количество юзабельных карт в колодах базовой игры 475, из которых не хватает как раз этих 48 карт контактов и еще около 50 карт мостров, всё остальное уже перенесено за пол дня, хотя "труд" очень однообразный и ошибиться при заполнении контента легко.
На рубашки колод для оживления интерфейса накидывал простые ненавязчивые шейдеры, для каждой колоды выбирал свою тематику.
Например для колоды Аномалий шейдерный эффект трещин пустоты, он же диаграма Вороного.
Это называется мозаикой Вороного. Она названа в честь математика Российской империи Георгия Вороного, который формализовал этот метод в 1908 году.
Для колоды Монстров сделал клубящийся белесый туман с помощью функции волновой интерференции sin(p.x + sin(p.y + TIME * speed)) * cos(p.y + cos(p.x + TIME * speed)), а внутри карты сохраняется прозрачность и рассеивается туман ближе к центру с помощью функции Эрмита.
Кубическая интерполяции Эрмита. Названа в честь французского математика Шарля Эрмита (1822–1901). Используется в компьютерной графике, чтобы сглаживать резкие переходы и избавляться от пиксельных «лесенок», да да, то самое сглаживание x4 в играх.
Мягкий блик на колодах Союзников, Заклинаний, Особых карт и Предметов сделал с помощью обычной функции линейной интерполяции.
Самая вызываемая математическая функция в любом графическом движке. Просто вспомните любые эффекты скользящих бликов в играх. А раньше она использовалась еще вавилонскими математиками и астрономами для предсказания положения планет по таблицам.
Как оказалось, математика всё-таки пригодилась в жизни хотя бы раз. Если без шуток, то написание шейдеров оказалось сложным балансом между сделать красиво и оптимизировано, во время экспериментов и подбора эффектов пару раз FPS очень даже приседал.
А здесь пример с малыми колодами. На Темной сделке как раз активировался шейдер прорыва карты (дрожание с проявляющимся и усиливающимся от края к центру покраснением), очень неприятные карты, кто играл тот понимает, сделал эффект наиболее предостерегающим.
Еще в процессе создание рамок поверх карт. В таком виде как ниже, особенно при увеличенной карте, выглядит не очень, нужна текстурная рамка со скругленными углами и возможно небольшим анимационынм эффектом свечения или перелива.
Правая панель с колодами используемыми игроков напрямую. Тут пока нет жетонов денег и навыков. Текстовые заглушки с названиями также будут убраны, как и стандартные панели будут заменены на красивые ассеты.
То же самое в динамике. Не сразу сообразил, что для эффекта ховера нужно обязательно делать функцию анти джиглера, иначе увеличение карты приводило к смещению её реального физического объекта, потери фокуса указателя и как следствие эффекта дребезжания если неудачно ерзать мышкой по границе карт. На видео эта функция уже добавлена и никаких волнений нет.
С картами колод Кодекса и Архива тоже всё оказалось достаточно просто. Согласно сценариям мы должны сразу выложить определенные карты архива в колоду Кодекса. Для первого сценария это карты под номером 2 и 3, соответственно смотрим в ресурс нашего сценария, считываем ID нужных карт и сразу добавлем их из колоды Архива. Оставшиеся в колоде карты обязательно сортируем по порядку, первая карта в этом сценарии не используемся, так что останавливаемся на лицевой стороне карты номер 4. Тут же реализована такая же карусель выбора карт, которая сделана и в панели инвентаря сыщика, можно выбрать нужную карту щелкнув по её выступающей части, ну а по умолчанию они идут друг за другом. Первой же открывается та карта, по чьей миниатюре нажмет игрок (если бы в Кодексе было три карты и игрок щелкнул по миниатюре средней, то слева и справа от нее было бы по карте).
Учитывая, что карт в колоде Кодекса много не бывает, верхняя панель не большая, там будет только основание состояние игры в виде количества безысходностей, особых жетонов, аномалий и прочих сценарных эффектов. Карты Кодекса будут сами переворачиваться (с уведомлением, которое нельзя будет прописать), если игрок выполнит или провалит соответствующее карте условие.
Все остальные колоды сразу были разложены согласно правилам игры, которые нужно перемешаны, другие расположены по порядку, те же Заголовки отобраны случайно в количестве 13 штук из всего списка.
Пока вот так, в выходные не будет много времени, возможно только разложу последнюю колоду, а может займусь визуализацией логики действия Движение первой фазы, в неё будет включена расстановка жетонов сыщиков на стартовую область согласно сценария, а также сами дальнейшие ходы игроков с учетом бонусов от их карт, визуальные подсказки на карте для возможных ходов по областям, возможность траты денег на доп ходы и остальное, что может быть связано с действием Движение.
Вроде даже не длиннопост получился, думал еще показать как колодостроение выглядит под капотом, какие ресурсы есть у карт и наследуемых к ним объектам, как они все параметризуются, но это достойно как минимум отдельного поста, да и вообще не факт, что будет большинству интересно.
Пост для моего единственного подписчика :(
Спасибо за просмотр!
Продолжаю делать фильм для своей игры «11vs21»
Добрый день! Продолжаю делать в blender фильм для своей игры «11vs21» в жанре визуальной новеллы с элементами tower defense. Уже готово 330 сцен. Анимация, моделлинг, симуляция и монтаж –все в блендере. Добавил 20 новых сцен. Озвучка пока ИИ, но планирую нанять актеров. В новых сценах много сложной персонажной анимации и симуляции взрывов и воды на которое ушло много времени.
Рендер самой тяжёлой сцены (пролет в обломках машин) выполнен в 5 слоев, около 55 миллионов трисов, 1 фрейм самого тяжелого слоя рендерился около 25 мнут. Квартиру делал со своей реальной квартиры.
Только новые сцены
Полное видео
Случайное перепрохождение Меч и Магии 7\8 превратилось в игру
Пикабу, привет.
Два месяца назад я в сотый раз перепроходил Might & Magic VII и завис на ArcoMage — той самой карточной мини-игре в тавернах, где ты строишь башню, тянешь стену и пытаешься обрушить башню противника. И меня накрыло: а что если сделать из этого нормальную, глубокую, соревновательную игру? С классами, комбо, метой, ранговым PvP.
Ну я и полез делать. Так родился Grim Siege — карточная дуэль 1 на 1 в тёмном фэнтези.
Немного обо мне
Я — соло-разработчик и по профессии 3D-художник. Не программист. Чтобы всё это взлетело, пришлось с нуля осваивать Unreal Engine . А поскольку я хотел честный ранговый PvP, написал ещё и свой авторитетный сервер — чтобы состояние матча жило на сервере и его нельзя было накрутить читами. Конечно не без помощи клод кода... но кто в наше время без греха, в любом случае вся логика, геймплей и тд придумано и отлажено мной, так как нейронка и "придумать" совершенно 2 разные вещи. По крайней мере с сборкой и освоением блюпринтов уже пришлось разбираться самому.
Забавный поворот
Изначально Grim Siege был мини-игрой внутри другого, большого моего проекта. Во время разработки игруха мне так понравилась, что в итоге я поставил большой проект на паузу и дал карточной игре зажить своей жизнью. Не жалею.
Что это за игра сейчас
Классы с характером — 6 штук, у каждого своя способность и своя ветка развития, колоды играются совершенно по-разному.
Система статусов — Гниль, Покров, Безмолвие, Цепи, Щит, Шипы, Очищение. Особые механики которых не было в Аркомаге.
Режимы — против ИИ , быстрые матчи, ранговые и лобби с кастомными настройками матча.
Оммаж истокам
В ArcoMage ресурсы — Кирпичи, Самоцветы и Рекруты. У меня это переосмыслено в три мрачные школы силы: Камень, Кровь и Рабы. Та же рыба только в профиль)
Где всё это сейчас
Игра в альфе и полностью играбельна — бесплатно. Работает на живом сервере, специально решал проблему доступа из РФ без впн, изнчально брал сервер на Херцнере в германии, друзья без впн зайти не могли, пришлось сделать сервер ретранслятор в финляндии (его стоит выбирать в менюшке) Пока что приходится создавать акки, но потом будет просто авторизация через стим . Мне сейчас важнее всего фидбэк — по балансу, по классам, что заходит, а что кажется нечестным. Собственно, ради этого и пишу.
Планы на будущее
Планов уже сейчас много, конечно же полишинг того что есть, UI сейчас временная тема, хочу попробовать переделать всё под 3д почти полностью отказавшись от виджетов. Уже сейчас набросал механику для скинчиков (почти любые скины можно будет просто купить за обычную валюту, которая падает за игры), осталось это всё завернуть и связать воедино. Новые режимы для ПвЕ, возможно небольшая сюжетка, царь горы, может что то еще. Также пвп режимы для 4ех игроков - хаос где каждый сам за себя, и 2х2. Арты сейчас сгенерены нейронкой, я не большой фанат этого дела, хотя я и дорабатывал всё в фш, но хотелость бы заменить их на ручную работу художника в будущем. Также хочется добавить красочности боям через эффекты и разные приколюхи, вот буквально перед постом заменил стенку, теперь она забавно интерактивная:
▶️ Поиграть можно тут: https://saqredgames.itch.io/grim-siege
Если вы играете с РФ без впн, надо выбирать финский сервер в меню логина.
Если ты когда-то любил ArcoMage и думал «эх, вот бы это было полноценной игрой» (я знаю, что у него был отдельный клиент, но на полноценную игру он все таки не тянет) — вот моя попытка это сделать. Готов ответить на любые вопросы про разработку, сервер или дизайн в комментах.
Пилю дальше.
UPD:
https://disk.yandex.by/d/jdfG30xwwrH4WQ
для тех у кого не работает основная ссылка и нет впн

















