Делаю игру в жанрах RTS/TD своими силами. Часть 7
И снова привет. Продолжаю разрабатывать "игру мечты". Рабочее название - Red Dunes Project.
Жанр - смесь RTS и Tower Defence. Главный источник вдохновения - Dune 2, родоначальница жанра RTS. А конкретнее - её версия для Sega Mega Drive. Задача игрока - строить войска, назначать им цели, а также вовремя задействовать специальное вооружение, которое уникально для каждой боевой единицы. Планируется три больших одиночных кампании, скирмиш, мультиплеер, и много другого интересного.
Моя группа ВК https://vk.com/publicreddunesproject
В общем, новости такие:
- С первой кампанией практически всё - остались диалоги, вступительный ролик и концовка. Всё остальное готово. В том числе, апгрейды для базы, которые можно приобретать между миссиями. К слову, подобная система прогрессии - нечастый гость в RTS (из примеров на ум приходит, разве что, Starcraft 2, где у каждого юнита Терранов было по 2 платных апгрейда), и у этого есть свои причины. Если юниты можно сделать более эффективными / смертоносными / живучими, то балансировать сложность становится на порядок труднее. Ведь миссии должны играться одинаково увлекательно при ЛЮБОМ раскладе: и для того, кто купил все возможные апгрейды, и для того, кто решил играть вообще без них. Поэтому в большинстве RTS этого просто нет. Нет прогрессии - нет проблем 😁
Я же пошёл другим путём. Апгрейды влияют не столько на боевую эффективность, сколько на комфорт игрока. Чем больше денег вложено в апгрейды - тем меньше усилий необходимо прикладывать для управления войсками. Следовательно, останется больше времени для продумывания оптимальной тактики. Например, в матче нельзя построить больше трёх цехов (каждый из которых отвечает за производство конкретного вида танков). Понадобилось производить новый тип техники - сноси один из старых цехов, потом строй новый. Но есть апгрейд, который увеличивает максимальное число цехов до 4. Казалось бы, мелочь, но в некоторых ситуациях это даст серьёзное преимущество, да и телодвижений придётся совершать куда меньше.
- Теперь картинка искажена различными помехами. Ведь по сюжету для наблюдения за полем битвы используется архаичная аппаратура, устойчивая к радиации, и изображение она даёт весьма посредственное. Кстати, игрок может приобрести специальный апгрейд, который уменьшит количество помех.
- Поработал над шрифтом, вдвое увеличив его разрешение. К слову, в Unity уже есть система отрисовки текста, но я принципиально ей не пользовался и с нуля написал свою. Зачем? Чтобы прокачать свои скиллы, разумеется. Теперь могу хоть собственный текстовый редактор написать, если потребуется.
- Генерация и деформация ландшафта перешла на новый уровень. Об этом хотелось бы рассказать подробнее.
Наверняка, при игре в какой-нибудь шутер вы пробовали просто пострелять в стену и посмотреть, что будет. Если шутер добротный, то после нескольких опустошённых магазинов вся стена будет в следах от пуль. Но потом произойдет следующее:
- Спустя некоторое время дырки от пуль начнут исчезать. Либо сразу, либо постепенно.
- Когда дырок от пуль станет слишком много, начнут исчезать самые старые.
Так происходит потому, что каждый след от попадания - это отдельный объект, занимающий место в памяти. И если эти объекты просто оставить в памяти - однажды эта память закончится, и игра вылетит с ошибкой. Вот разработчики и выкручиваются, как могут.
Первое время так было и у меня: любая воронка от взрыва - просто объект с прикреплённой к нему текстурой. Однако, это имело 2 недостатка. Во-первых, из-за конфликтов слоёв отрисовки спрайты очень часто отображались неправильно. Сдвинул камеру - и один спрайт перекрыл другой, так как движок посчитал его более приоритетным. Во-вторых, во время боя число спрайтов становилось всё больше и больше, что не лучшим образом сказывалось на производительности. Я написал алгоритм, который удалял из больших скоплений лишние спрайты, но это давало лишь временный эффект. В итоге, и памяти уходит много, и графические артефакты присутствуют, и поле битвы перепахано взрывами куда слабее, чем должно быть на самом деле.
В итоге, я нашёл другое решение, которое подходит для данной задачи просто идеально. Есть такая технология, как запись в текстуру. Это фича, которая позволяет перезаписывать данные в памяти видеокарты прямо из кода, во время выполнения программы. В итоге, каждый след на поверхности отражается максимально корректно и остаётся там до самого конца боя. А памяти, при этом, не требует вообще!
Проблема была только одна: вся поверхность карты - это одна большая текстура, и перезапись такой текстуры происходит далеко не мгновенно. Поэтому сначала наблюдались жуткие фризы. Но я придумал, как это обойти. Во-первых, было вовсе необязательно обновлять текстуры и карты нормалей одновременно, поэтому я распределил этот процесс по разным кадрам (тем более, визуально это было практически незаметно). Во-вторых, нашёл более компактный формат текстур и использовал его.
Результат - на фото:
В общем, вот такие новости. Плюсуем / минусуем, пишем своё мнение, мне будет интересно почитать)
Ну, и вступайте в сообщество ВК, чтобы видеть все новости.
Всех благ!!!


Лига Разработчиков Видеоигр
9.9K поста23.4K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"