Сделал RTS движок

Проекты в стадии разработки.

Сделал RTS движок

Сообщение Zolden 10 июл 2015, 03:21

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

Аватара пользователя
Zolden
UNITрон
 
Сообщения: 156
Зарегистрирован: 29 мар 2014, 19:05
Откуда: Москва

Re: Сделал RTS движок

Сообщение Zolden 07 ноя 2015, 21:05

Всё лето и осень я работал над игрой, вот видос геймплея:



Игра ещё далека от говтовности, но уровень с битвами - уже вполне играбелен.
Аватара пользователя
Zolden
UNITрон
 
Сообщения: 156
Зарегистрирован: 29 мар 2014, 19:05
Откуда: Москва

Re: Сделал RTS движок

Сообщение ilka 08 ноя 2015, 21:19

Лучше бы написал просто субтитры на инглише, т к иногда трудно понимать слишком острый акцент
Скрытый текст:
(wide, wides мда, можно ведь просто much wider)

А так очень круто получается, убил бы за исходный код игрушки, сам пытаюсь реализовать подобное, пока только получается система способностей - знаний не хватает на большее или опыта как организовывать редактор юнитов.
ilka
UNIверсал
 
Сообщения: 478
Зарегистрирован: 21 авг 2015, 19:32

Re: Сделал RTS движок

Сообщение Zolden 09 ноя 2015, 18:45

ilka писал(а):А так очень круто получается, убил бы за исходный код игрушки, сам пытаюсь реализовать подобное, пока только получается система способностей - знаний не хватает на большее или опыта как организовывать редактор юнитов.


Я опирался на знания, почёрпнутые в редакторе старкрафт 2. Там используется объектно ориентированная система независимых сущностей, взаимодействующих через ссылки. Есть юниты, оружие, эффекты и т.д.. И можно дать юниту оружие, которое будет создавать эффект запуска ракеты, которая будет лететь к цели, применять при столкновении поиск, всем найденным юнитам причинять урон и вешать бафф -20% скорости. И всё это делается простым определением ссылок между существующими объектами, не сложнее постройки фигурки из конструктора лего.
Аватара пользователя
Zolden
UNITрон
 
Сообщения: 156
Зарегистрирован: 29 мар 2014, 19:05
Откуда: Москва

Re: Сделал RTS движок

Сообщение ilka 09 ноя 2015, 21:15

Это все понятно, каждый момент игры - как отдельный объект, будь то юнит или снаряд или способность. Я использую компонентную модель в способностях, где пользователь сам наполняет способность нужными действиями, также и решил сделать юнитов но что то не клеиться, то ли опыта не хватает, то ли надо переходить на более высокоорганизованный язык программирования. Думаю оставить юнитов просто как отдельные объекты, которые наполнены конкретными свойства без возможности расширения компонентами, но хочется же чтобы сразу получилось нормально вот и ищу разную инфу по теме, а тут ваш проект появился.
ilka
UNIверсал
 
Сообщения: 478
Зарегистрирован: 21 авг 2015, 19:32

Re: Сделал RTS движок

Сообщение achooley 10 ноя 2015, 19:27

Хочется попросить что бы автор рассказал более подробно о системе абилок. В чем отличия от Универсальная система способностей
(3A4OT)
achooley
UNец
 
Сообщения: 10
Зарегистрирован: 21 окт 2013, 14:43

Re: Сделал RTS движок

Сообщение Zolden 10 ноя 2015, 20:03

achooley писал(а):Хочется попросить что бы автор рассказал более подробно о системе абилок. В чем отличия от Универсальная система способностей


Чтобы сказать, в чём отличия, мне надо врубаться в статью, но лень. Там автор пишет, что хочет систему, похожую на старкрафт или форкрафт. Вот у меня оно и есть, повторение того, что есть в старкрафте.

Основные фишки таковы:

Всю работу делают эффекты. Эффектов есть несколько типов: урон, поиск, запуск ракеты, применение баффа, утойчивый во времени, применение силы. У каждого эффекта есть три обяхательных поля - кастер, цель и источник. В них могут быть ссылки на юнита. Также есть дополнительные поля: у урона - величина урона, у поиска - радиус, у запуска ракеты - ссылка на ракету, у применения баффа - ссылка на бафф. Кроме того, эффекты могут образовывать цепочки и деревья через ссылки. Например, поиск находит три цели, и у поиска есть ссылка на эффект запуска ракеты, который происходит на кастере и целит в цель, ссылка на которую передаётся из предыдущего в цепочке эффекта - поиска. Срабатывает запуск трёх ракет, каждый эффект запуска имеет ссылку на эффект, который должен сработать при поражении цели, допустим, урон. И эта ссылка передаётся ракете, и при столкновении цели наносится урон. И вот, благодаря нескольким типам эффектов, взаимным ссылкам, а также ракетам и лучам, отвечающим за визуализацию, возникает неохватная сложность возможностей.

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

Есть ещё валидаторы, то есть, система условий, например, абилка "лечение" будет применена только к юнитам, у которых меньше 80% здоровья, и за это отвечают валидаторы.

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

Сами сущности не являются строго объектами, это просто элементы типа struct с набором полей разных типов. А экземпляры класса - просто массив этих страктов с инициализированными полями.

Система ссылок между всеми этими сущностями - именованный int, enum.

Есть, например, класс Орк.

мы его определяем:

Синтаксис:
Используется csharp
units[unitTypes.orc].weapon = weaponTypes.orcWeapon
weapons[weaponTypes.orcWeapon].effect = effectTypes.orcDamage


unitTypes, weaponTypes и effectTypes - enum перечисления

получается чертовски удобно: никаких ссылок на экземпляры объектов, только на классы через int, но не цифрами, а названиями

А вообще, я 4 года делал карты в редакторе SC2, и только к концу этого срока разобрался в о всём, так что эдак слёту всё не расскажешь

движок ск2 реально очень крут, всё продумано, он стоит каждого цента из тех миллионов долларов, которые пошли, по слухам, на его разработку, и даже эти мельчайшие кусочки созданной ими системы, которые я реализовал для своей игры, очень здорово работают, но о них сложно вот так рассказывать
Аватара пользователя
Zolden
UNITрон
 
Сообщения: 156
Зарегистрирован: 29 мар 2014, 19:05
Откуда: Москва

Re: Сделал RTS движок

Сообщение ilka 11 ноя 2015, 11:08

Интересная реализация, но как на счет таких видов способностей как: шанс нанести мощный удар, вампиризм, уклонение от атаки и тд, которые работают иначе - я имею ввиду пассивные способности. Или вы и это решили?
ilka
UNIверсал
 
Сообщения: 478
Зарегистрирован: 21 авг 2015, 19:32

Re: Сделал RTS движок

Сообщение Cr0c 11 ноя 2015, 11:18

ilka писал(а):Интересная реализация, но как на счет таких видов способностей как: шанс нанести мощный удар, вампиризм, уклонение от атаки и тд, которые работают иначе - я имею ввиду пассивные способности. Или вы и это решили?

Полями EvasionChance, VampireChance + VampirePowerInPercent, PowerStrikeChance + PowerStrikeWeight которые в акторах лежат и срабатывают при получении/нанесении дамага, например.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Сделал RTS движок

Сообщение Zolden 11 ноя 2015, 13:45

ilka писал(а):Интересная реализация, но как на счет таких видов способностей как: шанс нанести мощный удар, вампиризм, уклонение от атаки и тд, которые работают иначе - я имею ввиду пассивные способности. Или вы и это решили?


Шанс нанести мощный удар: среди типов эффектов есть такой "набор", он позволяет добавить несколько эффектов, выполняющихся одновременно. Суём туда мощный удар и простой удар. Мощный удар - это тоже набор из двух эффектов, мощный урон и бафф на 0.1 секунду. У набора мощного удара шанс, допустим, 10%. А простой удар срабатывает только если отсутствует тот бафф. Получается, если при ударе шанс мощного удара не выпадает, срабатывает простой, а если выпадает, то простой видит бафф и не срабатывает. (В СК2 добавили специальные поля к эффекту урона, упомянутые Cr0c'ом, но я их не добавлял, придерживаюсь минимализма в средствах). Знаю, моё объяснение выглядит громоздким, и включает 4 дополнительных эффекта, бафф и валидатор, но если привыкнуть к этой системе, то всё это выглядит простым лего.

Вампиризм - просто добавляем в набор удара кроме урона цели ещё лечение кастера.

Уклонение от атаки - этого я пока не реализовал, но изменение чисто косметическое. Тип баффа "реакция на урон" есть, но он выполняется уже после вычитания здоровья. В СК2 реакция на урон включает коэффициент ослабления нанесённого урона, и мне нужно лишь сохранить в юните последний полученный урон, добавить коэффициент ослабления в бафф ослабления урона, и в коде реакции на урон компенсировать полученный урон. И ещё добавить шанс срабатывания. И получится уклонение точно как в старкрафте.

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

Давай ещё фичи, которые хотел бы видеть среди способностей, самому интересно, справится ли с ними моя система.
Аватара пользователя
Zolden
UNITрон
 
Сообщения: 156
Зарегистрирован: 29 мар 2014, 19:05
Откуда: Москва

Re: Сделал RTS движок

Сообщение Tolking 11 ноя 2015, 14:25

Урон по площади обратно пропорциональный удаленности от точки удара. (сплэш)
Урон по площади в например 50 рандомных позициях. (типа град)
Аура отнимающая здоровье в радиусе...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2714
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Сделал RTS движок

Сообщение Zolden 11 ноя 2015, 15:43

Tolking писал(а):Урон по площади обратно пропорциональный удаленности от точки удара. (сплэш)


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

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

Урон по площади в например 50 рандомных позициях. (типа град)


Есть такой тип эффекта - persistent, он располагается на земле, держится некоторое время, и с заданным периодом выполняет некоторый эффект в случайной точке или в точке со смещением относительно координаты эффекта. Этот эффект используется для заклинаний вроде облака яда, огненной стены или метеоритного дождя. 50 рандомных позиций определять не нужно, просто задаётся радиус окружности или размеры прямоугольника поиска, и в них выбираются случайные точки. А вот в СК2 выбора рандомной точки не было, так что приходилось задавать 32 распределённых по площади смещения, и ставить галочку случайного выбора смещения.

Аура отнимающая здоровье в радиусе...


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


Может быть, у кого-то ещё есть идеи навороченных заклинаний? Хотелось бы найти, с чем эта система не сможет справиться. Типичный пример "сложного заклинания" - цепной молнии - не предлагать, оно уже работает.
Аватара пользователя
Zolden
UNITрон
 
Сообщения: 156
Зарегистрирован: 29 мар 2014, 19:05
Откуда: Москва

Re: Сделал RTS движок

Сообщение ilka 11 ноя 2015, 16:04

А сможете снять видео как вы настраиваете очередную способность? - интересно как вы наполняете их всеми этими данными.
Скрытый текст:
Ну если не коммерческая тайна.

я так понимаю у вас уже готова событийная машина, тоесть все возможные варианты типа: получение урона, нанесение урона, уже заранее внесены и вы просто выбираете одни из вариантов. Допустим способность вампиризм, накладывает эффект который подключается к событию юнита когда он наносит кому то урон и там уже ждет срабатывания события, верно? Или вампиризм это эффект который при срабатывании события нанесения урона накладывает эффект лечения юниту? - как бы эффект через событие накладывает эффект!?
ilka
UNIверсал
 
Сообщения: 478
Зарегистрирован: 21 авг 2015, 19:32

Re: Сделал RTS движок

Сообщение Zolden 12 ноя 2015, 17:42

ilka писал(а):А сможете снять видео как вы настраиваете очередную способность? - интересно как вы наполняете их всеми этими данными.





я так понимаю у вас уже готова событийная машина, тоесть все возможные варианты типа: получение урона, нанесение урона, уже заранее внесены и вы просто выбираете одни из вариантов. Допустим способность вампиризм, накладывает эффект который подключается к событию юнита когда он наносит кому то урон и там уже ждет срабатывания события, верно? Или вампиризм это эффект который при срабатывании события нанесения урона накладывает эффект лечения юниту? - как бы эффект через событие накладывает эффект!?


Статический класс, в котором описаны все эффекты имеет функцию execute(), которая получает номер эффекта и ссылки на участников, кастера, цель и источник. Эта функция делает всю работу, например, для урона она выберет юнит-получатель и обратится к его контролирующему классу, запустив функцию damage(). Эта функция, кроме вычитания из здоровья величины урона, проверяет баффы на юните, и если находит тот, который отвечает на урон, то запускает эффект ответа на урон, прописанный в этом баффе, снова через функцию effects.execute, которой опять передаётся информация о юнитах - получателе и источнике урона.
Аватара пользователя
Zolden
UNITрон
 
Сообщения: 156
Зарегистрирован: 29 мар 2014, 19:05
Откуда: Москва

Re: Сделал RTS движок

Сообщение ilka 12 ноя 2015, 20:04

Я понял теперь как реализована ваша система способностей. У меня она отличается тем что полностью настраиваемая пользователем, тоесть если нужно чтобы способность действовала какоето время нужно сначала добавить компонент времени к способности - у вас эффекты имеют конечный набор свойств и просто создаете разные комбинации эффектов, у меня не зачем создавать кучу разных эффектов на разные случаи, можно просто изменять их компоненты. Кароче сильно отличается, но ваша мне тоже нравится.
Скрытый текст:
ПС не знаю как сделан редактор в StarCraft2 но в варике и старике все способности, базовые, заранее заскриптованы как они действуют, пользователь только может изменять общие для всех способностей свойства и особые свойства присущие выбранной способности, но не добавлять новые.
ilka
UNIверсал
 
Сообщения: 478
Зарегистрирован: 21 авг 2015, 19:32

След.

Вернуться в Кузня

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2