pacos
> Так ведь в Думе обычные демоны
)))))) А это тоже может быть идея для игры
Привет, я снова с вами! Много времени потерял по всяким семейным делам, и наверно к Новому Году я все-таки не успею. Не укладывается все это в голове, а если делать быстро и криво, потом в этом вязнешь.
Движок дико вис при появлении десятков юнитов, пришлось оптимизировать:
- Туман войны поделен на чанки с автообновлением, каждый юнит теперь ходит с особым "трекером", раздвигающим туман.
- Есть такие штуки в движке - 9-patch rect и Texture progress - для растягивающихся прямоугольников и шкал прогресса. У меня из них были сделаны полоски здоровья. Они сильно тормозят, пришлось избавиться.
- Перенастроил импорт текстур, перевел весь проект на C# (до этого был прототип на GDScript). Печально, но под Windows профилировщик Mono не подключается к проекту, на сколько понял, под линуксом и маком - подключается. Есть скудные треды об этом на их сайте и гитхабе, но я не вкурил и больше не собираюсь.
Потом стал рисовать и придумывать деревья технологий.
Про роботов хочу сделать, чтобы строения делались на заводе в виде передвижного модуля, который потом разворачивается в строение.
Нарисовал пару десятков мелких набросков строений и юнитов
Попытался сделать адекватную анимацию робота, но Krita, мать ее за ногу, умеет в анимацию гораздо хуже, чем Aseprite. Эх, такой же бы функционал, как там, да в большие растровые редакторы!!!
Потом стал рисовать землю. Научился в Krita рисовать isometric-like прямоугольный тайл (не ромбовидный), это делается с помощью четырех клонов слоя, разведенных по углам.
Очень жаль, что ни в одном, абсолютно ни в одном редакторе не нашел возможности легко рисовать бесшовные автотайлы с разными "связями" между собой (когда выходишь за границу тайла кистью, она продолжает рисовать на всех связанных тайлах). Если где такая функция будет - это будет супер-пупер редактор! Может. вы знаете, где она есть?
Отказался от жестких тел, сделал кинематику. Но они перестали плавно друг друга обходить. Пришлось смотреть видос про разработку StarCraft II и делать поведение "растолкай всех на своем пути".
Навигацию пока не сделал, ребята идут тупо туда, куда показали мышкой. Разве что когда посылаешь группу, в конце маршрута ставится отдельная точка назначения для каждого юнита, чтобы они сохраняли между собой первначальную форму отряда.
(копия из нуль-поста)
- Добавил заглушку консоли управления
- Добавил юнита - машину
- Добавил поддержку анимаций на 8 направлений (но еще не завез графику для других юнитов кроме машины, ей проще, она ногами не шевелит)
- Добавил огонь стрельбы робота
- Добавил музыку, звуки и анимацию взрыва машины с opengameart.org по лицензии CC0
Игра сразу стала чувствоваться живее
Да, точно не успеваю к Новому Году, но не в этом суть, главное, я что-то начал, и теперь когда в этом есть смысл, есть какой-то вектор, можно двигаться дальше сколько угодно.
- Немного отрефакторил код.
- Придумал способ, как не делать по одинаковому дереву сцены на каждого юнита, а сделать одно универсальное.
- Добавил неплохой steering-behavior, потому что надоело, что юниты путаются. Теперь они лихо обходят друг друга, идущие навстречу или поперек группы не застревают. Если юниту совсем трудно - он пихает окружающих, чтобы ему дали пройти. Добавляю следование пути, найденному по тайловой навигации. Увы, находить сложные пути в обход непроходимой стены зданий не получится. Можно что-то написать самому или подождать выхода Godot 4.0, там будут навигационные агенты, с ними это решается.
- Думаю над тем, как выводить инфо о текущем выбре на GUI и чтобы работали всякие кнопочки
- Видимо, не смогу рисовать все анимации. Хочу сделать несложные модельки в блендере и отрендерить их в 8 или 16 направлениях. Либо в будущем нужна будет помощь художника, который знает какие-то секреты автоматизации этого дела.
nklbdev
> там будут навигационные агенты, с ними это решается.
Врядли. Скорее всего будет универсальное решение, которое на РТС просто умрёт.
@!!ex
> Врядли. Скорее всего будет универсальное решение, которое на РТС просто умрёт.
Да нет, в принципе технология-то понятная:
Есть запеченный навмеш, есть агенты - такие полигоны, которые могут относительно него перемещаться и вызывать временный пересчет участков меша. Если таких агентов мало и их размер сравним или меньше, чем рядовая ячейка меша, то все ок.
В данном случае агенты даже не двигаются, что облегчает нагрузку. Главное, чтобы они могли появляться и пропадать.
Например, в SC2 такими штуками были здания. и вообще все штуки, которые не могут "подвинуться". Наверно даже танки в режиме осады.
А сами юниты при этом не занимают места на меше и рулят относительно друг друга с помощью steering behaviors
(копия из нуль-поста)
- Наконец-то научился в блендере что-то делать: сделал тайлы (кроме серых - они с opengameart.org) и скрипт рендера и сборки тайлсета
- Настроил у тайлсета автотайл, коллайдеры и навигационную сетку. Это оказалось не просто
- Юниты при отправке группой иногда отказались ходить: их точки назанчения имеют относительно друг друга такое же положение, как и исходная позиция. По этому некоторым юнитам давалась команда "идти за пределы допустимой области". Научил их правильно вычислять наиболее близкую к желаемой позицию, отсчитывая от места клика мышью.
Так как год подошел к концу, а стратегии я так и не сделал (то, что мы тут видим - это лишь элементы тактики), челлендж закрываю, и благодарю всех, кто следил за процессом. Спасибо, что помогли мне начать!
Я буду продолжать разработку и хотел бы в следующем году довести до нормальной такой альфы. И я дал проекту кодовое имя: Artificial Souls (хотел бы услышать от вас возможные альтернативы)
До встречи в Новом Году!
nklbdev
Слушай, ну 1000р ты, ящетаю, заслужил.
Пиши в личку, куда скинуть
Ребят, теперь я хотел бы переехать с этой темой из ПроЭктов в Проекты. Как это лучше сделать?
Просто создаю там тему, и указываю в ней ссылку сюда?
nklbdev
Ты уже в проектах (новогоднее чудо)
Alprog
> Ты уже в проектах (новогоднее чудо)
Ой!!!! Вот меня переглючило!
Спасибо)))))
А, так нет, все-таки меня не переглючило!
Тема действительно была в проЭктах, но теперь перенесена, а я этого не понял сразу: подумал, что у меня уже мозг спёкся, и я не заметил, что все это время был в Проектах.
Я решал две проблемы с тайлами: техническую и выразительную.
Выразительная:
Я был крайне недоволен получившимися тайлами в блендере:
1. Они не очень хорошо стыкуются друг с другом, появляются зазоры. Чтобы этого не было, приходится продлевать плоскости или чуть приближать камеру
2. Получившееся "художество" получается слишком пластмассовым, а на более выразительную графику в 3D я не способен
3. Я вымотан странным управлением 3D-курсором, чтобы потом через его позицию выставлять у объектов правильный Origin, а это нужно для правильного позиционирования при рендеринге. (Позже я нашел, как двигать Origin без использования курсора, но было уже поздно))))
Так как я добыл новые вычислительные мощности и Krita стала крутиться живее, решил пересесть снова в нее, и стало получаться!
(на скриншоте тайлы в редакторе. В игре они будут примерно вдвое больше)
Техническая:
Многоэтажность террэйнов не очень сочетается с 2D-тайлами:
1. Если делать как в первом StarCraft (движение только в 2D по квадратной сетке, а изометрия лишь кажущаяся), то возникают жесткие проблемы с настройкой коллайдеров на краях уступов. Кстати, в StarCraft это решалось разными извращениями с разным количеством тайлов земли перед уступом и за ним (попробуйте сами в редакторе)
2. Если делать по-нормальному, то юнит может зайти за уступ, и его будет не видно. По этому уступы нужно делать пологими. А если уступы пологие, они плохо выглядят и возникает проблема с подъемом и спуском.
Решено:
- Использовать полностью изометрическую сетку.
- Координаты юнита при поднятии на "этаж" должны быть адекватными (то есть отсчитываться в низшей точке, а смещение по высоте - добавляться в зависимости от высоты террэйна)
- Для решения проблемы с выделением юнитов (Origin'ы которых находятся визуально ниже, чем их спрайты), добавил к их спрайтам специальные "выделяторы". Еще предстоит решить проблему определения координат при отдаче команды мышью.
- Решаю проблему с пандусами подъема: подъем должен быть плавным, а значит, информация о перепаде высот и его направлении должна находиться в самих тайлах пандуса (или сделать пандус отдельным большим объектом. В StarCraft сделано именно так, а еще мосты и тому подобные кастомные объекты)
Еще один важный момент:
Я понял, что во многих стратегиях, которые кажутся многообещающими, но по факту не очень цепляют аудиторию, очень маленький масштаб. Игрок видит слишком много территории. Это дает сильное ощущение контроля, но лишает чувства "причастия". Игрок не так близок к своим юнитам и не чувствует опасность при продвижении через туман вместе с ними.
Я посмотрел внимательно на StarCraft: там масштаб довольно велик. Высота экрана соответствует от силы 5 высотам уступов.
По этому я увеличил размер тайлов вдвое и сразу ощутил это чувство! Игроку приходится скроллить экран и следить за своими юнитами, и хоть это может показаться раздражающим, это сильно привязывает игрока к происходящему на экране, он не чувствует себя всесильным, чувствует, что может за чем-то и не уследить. Я думаю, Blizzard уже тогда это заметили и в Remastered версии, хоть и добавили масштабирование, но только лишь в плане приближения.
Так что пока картинка выглядит совершенно непрезентабельно. Когда проблемы будут решены, сниму очередной ролик.
StepEver
Спасибо) Да, я продолжаю разработку. В нуль-посте укажу позже. Ну и приберусь там, а то там все вместе.
Я не знаю, как это точно назвать. В любом случае с точки зрения графического режима это 2D тайлы. Вопрос только в том, как их изобразить и как на них расположить физику.
У меня плоская изометрическая карта, но каждый тайл, хоть и располагается в своей ромбовидной ячейке, на самом деле он выше. Если бы я их заполнил цветом, это выглядело бы как много столбов 256 пикселов в ширину, 512 в высоту. (а высота ячейки-ромбика при этом 128 пикселов).
Таким образом на каждом спрайте можно изобразить какой хочешь высоты поверхность, и они будут хорошо друг на друга накладываться (такого рода тайлсетов в принципе можно много найти в сети). Но это высота мнимая.
Далее идет вопрос: не учитывать эту высоту вовсе и елозить юнитами по карте как по плоскому ковру (как в StarCraft. Это там особо хорошо видно, когда юниты ходят по пандусам - на самом деле никуда они не поднимаются и не спускаются, это просто "коридорчик"), или добавлять каждому юниту смещение по высоте?
В случае "без высоты" приходится решать всякие хитрости с позиционированием и настройкой коллайдеров, когда коллайдер уступа при определенном повороте обрыва мешает юнитам проходить по этому "второму этажу".
В случае "с высотой" эти хитрости становятся не нужны, но нужно реализовать нормальное 2.5D, когда юниты фактически все ходят только по нижнему этажу, но их спрайты смещаются вверх на нужную высоту в зависимости от "этажа", на котором они стоят. Тогда коллайдеры уступов нужно делать не по форме уступа, как он нарисован в виде "сбоку", а просто по его нижней клетке-ромбику. Этим вариантом я сейчас и занимаюсь.
На пути к 2.5D. Симулирую высоту через вертикальное смещение спрайта юнита. Настраиваю вертикальную сортировку спрайтов и тайлов. Делаю плавный подъем по пандусу. О, это было чертовски трудно и сейчас это не готовый вариант, а лишь тест механики на костылях, но радует глаз)
Напоминает демку старварс батлегроунда, где нужно было довести Дарт Вейдера из точки А в точку Б, только реквизита ещё меньше и Дарт не явился, забухал наверное.