abuksigun

abuksigun

На Пикабу
208 рейтинг 7 подписчиков 5 подписок 3 поста 3 в горячем
Награды:
5 лет на Пикабу
47

Романтика разработки RTS Часть 2 (Новая графика)

Я начал писать вторую часть сразу после первой части. Но потом занимался релизом игры, а после релиза 3 месяца очень активно пилил недостающие фичи.


Все про игру есть в ВК - https://vk.com/abksgn
Ссылка на GooglePlay - SiegeUp!

Пожалуй, еще сразу покажу трейлер, над которым я очень заморочился. Он отражает идею игры.

Почему же я решил менять графику? Причин несколько:

1. Игра выглядела блекло и не выделялась, выглядела второсортно

2. Графика далека от трендов мобильного рынка

3. Трудно найти ассеты, попадающие в стиль


Поэтому, я решил пойти путем инди и делать что-то low-poly. Но тогда это была лишь идея, я не был уверен что буду вообще продолжать разработку.


В конце 2018 года мы с женой переехали в Минск, для работы. Я устроился в Wargaming программистом движка WoT Blitz. И на какое-то время забросил свою игру, погрузившись с головой в новую работу.


В начале 2019 на зимних праздниках я вернулся к игре и начал воплощать задумку по переработке графики в жизнь.

Сначала я взялся делать здания. Я не стал брать готовые ассеты, так как во первых, не смог найти, а во вторых хотел гибкости, вдруг какого-то нужного домика в ассетах не будет? Ну и пожалуй нужно все-таки нужно что-то привнести графику, чтобы это был не просто бездушный кусок софта, а игра.
Вот такие домики получились (половина из них до сих пор присутствует в игре):

Потом под стиль зданий я нашел готовый пак юнитов в AssetStore за ~20$ . Пак удобен тем, что можно комбинируя разное оружие, головы и тела, получать уникальных юнитов.

Когда я заменил юнитов и здания в игре, сначала получилось как-то не очень.

Тут у нас используется Standard PBR шейдер и стандартный террайн, до релиза еще 1 год и 3 месяца. Оптимизации нет, на телефоне около. 20 FPS вообще без юнитов на сцене.


Пол года я в основном совершенствовал графику, рисовал домики, работал вяло. Параллельно я пописывал свой игровой движок и сделал генератор рефлексии для C++.


Важным прорывом был переход от enum к использованию guid префабов для сохранения и загрузки юнитов. Этот же механизм позволил привязывать иконки к любым префабам игровых объектов и автоматически рендерить иконки.

К лету 2019 ситуация следующая:

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

2. Все иконки юнитов и домов генерируются автоматически

3. Я не смог найти надежной информации, но на сколько я помню, туториал тоже появился где-то весной 2019 года


Этот скриншот долго украшал группу ВК, так как выглядел наиболее прилично

Я был все еще не очень доволен графикой. Мне не нравилось, как гладкий террайн сочетается с низкополигональными домиками.

В отпуск я поехал на малую родину в "поселок городского типа Морозовск" и там на волне вдохновения сделал следующий рывок в разработке. Во первых, появилась идея заменить террайн на воксели. Первый прототип выглядел так:

Мне это понравилось, это делало игру как-то строже и придавало ей какой-то уникальный вид. Поэтому, я стал развивать эту идею, сделал редактор для террайна и полностью переделал все карты на новый террайн.

Примерно в то же время я занялся оптимизацией и отказался от использования стандартных коллайдеров для поиска пересечений объектов и полностью отключил симуляцию в настройках проекта. Хорошо помню, как на волне вдохновения от поездки выкидывал физику отовсюду, пока ждал ночной рейс из Ростова-на-Дону в Минск.

На тот момент удалось добиться стабильного FPS при ~300 юнитах на телефоне. После дальнейших оптимизаций, сейчас лимит около 600 юнитов. Однако, я не собираюсь останавливаться на достигнутом, миллионы юнитов на экране в Казаках и толпы мобов в Diplomacy is Not An Option не оставляют меня в покое ... Я планирую завезти Animation Instancing и Brust со временем, использовать Jobs для поиска столкновений.


Я продолжил заниматься графикой.

Эффектов в игре не много:
1. Мультяшные тени

2. Пенка у воды

3. Облака


На облака меня вдохновили две игры, Civilization V и Egypt: Old Kingdom. У меня облака это просто Шум Перлина с небольшим скроллингом, ничего особого.

Про тени пожалуй нужно писать отдельную статью, но они не отражают форму объекта, поэтому очень шустро работают. Пена на воде по сути тоже тени, просто на воде другой шейдер.

В общем, этой картинкой я долго гордился, для меня это был первый опыт графического программирования и оптимизации графики.

Игре не хватало какой-то киллер фичи. В GooglePlay ведь уже есть RTS, но ни в одной небыло стен. Поэтому, я решил сделать стены, на которые можно было бы заходить, примерно как в Stronghold.

Со стенами были сложности, я не смог сделать их строительство, так как для этого приходилось бы перестраивать NavMesh. Я до сих пор использую NavMesh юнити, и только сейчас я научился перестраивать в параллельном потоке, без фризов игры. Так что строительство стен тоже скоро появится.


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

Примерно с ноября 2019 года я начал делать первые 5 демонстрационных уровней. Эти уровни должны были отобразить прогресс игрока с самого начала до самого конца. Т.е. последний уровень - был последним в игре. Сейчас в игре 20 уровней. Всего планируется 25.

На этом моменте, нам предстоял очередной переезд, на этот раз, из Беларуси в Россию и из России в Токио. Я старался как можно больше уделять времени игре, и финальные штрихи делались в суете и сумбуре.

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

Еще долго оставалась проблема с тем, что тени не показывались под юнитами на стенах. 18 апреля 2020 года эта проблема и был сделан этот скриншот. С этих пор графика не менялась.
На скриншоте есть абсолютно все аспекты игры и ее графики, так что я считаю его показательным.

Игра появилась в GooglePlay 31 мая 2020 года. Однако, на релизе работа не закончилась, я продолжаю делать обновления каждые пару недель и исправлять ошибки. Когда все миссии будут готовы, планирую релиз на iOS. Надеюсь, там игроки тоже оценят игру.


Я собираюсь сделать еще одну часть, про фичи, которые были добавлены с релиза. Когда ее ждать даже сам не знаю. Может скоро, может нет. :)


Буду рад критике и фидбеку! Спасибо! :)

Показать полностью 10 1
55

Типобезопасные контейнеры в GNU C11 без кодогенерации

Всем привет!
Я решаю проблему про которую никто не знает, на языке, на котором никто не пишет. Это пост про язык Си.

Я сам не пишу на Си уже очень давно. Профессионально последние 7 лет только на C++ и C#. Но Си очень привлекает своей простотой. Но отталкивает отсутствием множества удобных штук.

Есть интересное открытие, которым я хотел бы поделиться, но не знаю с кем, так как мало кто пишет на Си и вообще задумывается о нем. Поэтому напишу тут, вдруг кому-то будет интересно. Это не готовое решение, а лишь идея, которая пришла в голову вчера утром и обросла деталями в течении дня.


Не хочу чтобы идея пылилась, хочу скорее от нее освободиться и вернуться к работе. Поэтому в посте мало деталей, пожалуйста, посмотрите пример, там вроде все довольно понятно.


Вот сразу ссылка на пример в Wandbox - https://wandbox.org/permlink/pOwkHRfWyipp8P89

1. Проблема
Если вы хотите универсальные контейнера на Си, можно пойти двумя путями:
1. Макросы, которые работают почти как шаблоны в C++, генерировать функции для доступа к контейнерам для тех типов, которые вы хотите использовать. Вот пример: https://github.com/stefanct/sglib
Это быстро, но требует объявить все используемые типы в одном месте, что усложняет разделение проекта на модули. Поправьте, если я не прав.
2. Типы данных, хранящие всю инфорацию внутри как это сделано в Glib  https://developer.gnome.org/glib/2.66/ в данном случае, невозможно организовать типобезопасность, повсеместно используюется void* . Меняешь тип контейнера и не знаешь, что после этого отвалится. Моя цель - решить именно этот класс проблем.


2. Как выглядит решение
Так вот, слыхали что существует C11? Это почти как C++11, только C11.


Так вот, там появилось такое ключевое слово _Generic, которое позволяет выбрать функцию, в зависимости от типа и позволяет сделать какую ни какую перегрузку функций (которой нет в Си из коробки)

Оказалось, что используя _Generic  + typeof() из GNU + указатели на функции можно сделать типобезопасные контейнеры прямо в Си! Эти контейнеры не используют кодогенерацию, однако так же удобны в использовании (хотя будут чуть медленней работать, но в большинстве случаев удобство важнее)


Вот короткий пример создания вектора:

ABVECTOR(int) numbers = CREATE_ABVECTOR(int);
for (int i = 0; i < 20; i++)
*PUSH( numbers) = i; // обратите внимание, тип известен!

В данном примере ABVECTOR(int) это аналог std::vector<int>

Если поменять тип контейнера, или тип переменной хоть в одном месте, вы получите ошибку компиляции. А это ровно то, чего я хочу!

Другой пример, передача контейнера в качестве аргумента в функцию:

void printValues(ABVECTOR(float) numbers)
{
for (float* iter = BEGIN(numbers); iter != END(numbers); iter = NEXT(numbers, iter))
printf("Val: %f\n", *iter);
for (int i = 0; i < LENGTH(numbers); i++)
printf("Val: %f\n", *GET(numbers, i));
}

Если передать в функцию неправильный тип контейнера, например List, вместо Vector - будет ошибка. Если тип элемента контейнера будет отличаться - то же ошибка.

3. Как этого добиться?

1. Использовать указатель на функцию чтобы хранить сразу два типа, тип контейнера + тип элемента. Например int (*) (ABVector*)

2. Использовать typeof, чтобы достать тип элемента контейнера typeof( X(0) ) - получение типа результата вызова функции

3. Использовать _Generic, чтобы проверить тип контейнера

_Generic(( X ), typeof(X(0)) (*) (ABVector*) : __my_container_func__ )(X)

На этом пожалуй все ) Спасибо за внимание!

Не забудьте потыкать пример в Wandbox - https://wandbox.org/permlink/pOwkHRfWyipp8P89

Показать полностью
23

Романтика разработки RTS Часть 1

Расскажу немного о разработке своей RTS длиной в 2 года.

Когда мне было лет восемь, первыми играми на первом компьютере были AOE и Stronghold Crusader. С тех пор, этот образ нарисованных государств и армий никак не выпадал у меня из головы. Не то чтобы я очень разбирался в жанру, или много играю в RTS. Но есть в этом какая-то жанре какая-то романтика.


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

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

Прототип я сохранил в зип, загрузил по-честному на сервер компании.

На этом наверное стоило и закончить. Но оставалось чувство незавершенности. Это побудило меня добавить в игру мультиплеер.

Я взял мануалы Unity Net и сделал, простенький мультиплеер, который часто глючил, но все-же работал.
Сделал, сделал и решил оставить эту идею. Так как я уже не представлял, куда эту игру можно деть. Я не представлял себе сценария, в которой я смогу ее закончить и продать. Уже 20 лет назад эту механику прокачали так, что с играми той эпохи трудно конкурировать.

А потом меня захантили в другую компанию и у меня было больше месяца без работы. Разумеется, я снова вспомнил про свою брошеную RTS!

Я придумал выпустить ее на мобилки. Типа вот сейчас пару месяцев доделаю игру и можно в стор! Ну а что, полно ж такого качества игрух в сторе! Супер план!

Спустя месяц, я сделал кучу всего, новые уровни, новых юнитов. Супруга даже помогла сделать интерфейс!

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


Если интересно глянуть, как сейчас выглядит игра, можно перейти по ссылке в группу ВК ниже


Страница в VK: https://vk.com/abksgn

Показать полностью 3 1
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества