Новости о разработке проекта Koegin (лето 2020)

August 30, 2020 - Reading time: 3 minutes

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

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

Цепь миров?

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

Острова и ресурсы

В Koegin все острова будут активны (не важно - захвачены они или нет, жизнь процветает на всех). Захватывая острова, игрок может в любой момент перейти в один из островов чтобы выполнить там какие-либо задачи (строительство, управление и тд). На этом и будет стоять упор.

Каждый остров по строению уникален благодаря спец. генератору. Каждый имеет свой запас ресурсов (или вообще не иметь). Игроку придётся проводить разведку и экспансию по захвату новых островов для захвата новых источников ресурсов. И да, ресурсы не бесконечны.

Есть три вида ресурса: Металл, Торбенит и Крацид.

Металл: Обобщенный, базовый вид руды, которая встречается почти на всех островах. Технически - сплав металлов железа, меди, олова, серебра и тд. Самый важный вид ресурса, так как все постройки (здания и юниты) требуют металл, а значит основной приоритет будет на его добычи.

Торбенит встречается чуть реже. Он нужен для создания мощных энерго-генераторов и не только.

А с Крацидом всё по сложнее, он не только редкий, но и опасный, так как почти любые манипуляции с ним приводят к постепенному разрушению острова. Он нужен для особых мощных и опасных технологий.

Энергия же является безлимитным видом ресурса, так как для всех энерго-генераторов ничего для работы (кроме их же строительства) не нужно. Однако энергия тратится почти на всё что только можно: строительство, работы заводов, юнитов, турелей и тд.

Кстати, были попытки наложить текстуру на остров как ландшафт, пока это выглядит весьма ... забавно:

Возможно в дальнейшем получится сделать с данной идеей что то стоящее.

Дроны

Раньше только ядра могли строить здания. В какой то момент в голову пришло озарение - "Это же очень не выгодно!". Так появились дроны. Сейчас существуют три вида служебных дронов: Бригадир, Шахтёр и Строитель. Каждый занимается своей важной задачей.

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

Новый интерфейс

UI снова обновлён, и не факт что это финальная версия. Сделать одновременно удобно и красиво - не так просто.

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

У юнитов и строений появились кнопки действий, которые появляются вокруг при правом клике на нём. Так например можно продавать здания, выключить определённые заводы и так далее.

Оптимизация

Основной проблемой была отрисовка карты при максимальном отдалении. При минимальном размере экрана в 1280х720 камера захватывала примерно 216 чанков (это 12 тысяч тайлов). Игра пыталась рисовать все эти тайлы 60 раз в секунду. Новое решение исправила данную проблему, снизив общую нагрузку с 120% до 9%

Это было возможно за счёт Render target'ов. Если говорить простым языком, это своего рода картинка, на которой можно рисовать и сохранять её состояние (как Paint). Так как у меня карта состоит из чанков (тека) по 64 тайла, я дал каждому чанку текстуру для того, что бы он на нём рисовал свои тайлы. Сделав это один раз, мне достаточно было лишь рисовать эти текстуры, снизив количество отрисовок примерно с 12 тысяч до 216. Если произойдут какие то изменения с тайлом, мне достаточно будет просто перерисовать один чанк.

Как ни странно, то видеокарте легче рисовать большие текстуры в малых объёмах, чем маленькие в огромных количествах.

Баги

Забавно то что за всё время разработки, я только сейчас осознал то, как работает глубина слоя. Дело в том, что рисуя текстуру можно задать его глубину (она же высота Z, отдаление от камеры). Я её использовал как обычный слой, что бы определять кто поверх кого будет отрисован. И всё работало отлично, пока я не начал рисовать с уровнём слоя выше 1.0:

Дело в том, что дефолтная камера движка не могла видеть дальше чем 1.0. Но не моя! Я не знаю как (и не помню, потому что давно писал), но моя камера успешно сортировала слои даже свыше 30. Оказывается, я всё это время делал не правильно. Ну...окей, я думал... и решил впихнуть костыль в виде своего алгоритма сортировки по слоям. И всё заработало!

Но некоторые баги всё же остаются не тронутыми. Очень много проблем с управлением юнитов. Думаете, можно так просто взять и написать алгоритм управления юнитами в РТС? Знаете почему в моей игре нет наземных юнитов? Нужно учитывать уйму факторов:

  • Выделение, такое, что в приоритет только юниты. А если нет юнитов, то выделяем здания.
  • Группировка юнитов.
  • Атака и преследование врага.
  • Патрулирование и очередь команд.
  • Двойной клик - выделить всех юнитов одного типа.
  • А если зажать шифт, то...

И так далее...

Итоги

В скором времени (надеюсь) будет доделана механика, и уже тогда можно перейти к внешнему виду. Следить за разработкой можно в нашем дискорд сервере: https://discord.gg/nsJkRbr