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