Isometric Doom. Fateless [в разработке]

Форум для проектов, находящихся на стадии Альфа и Бета. В них ещё не реализована вся задуманная автором функциональность, а значит идёт активная разработка.

Модераторы: Sanja, Максим Кич

Karlo
Сообщения: 89
Зарегистрирован: 28 сен 2016, 13:01

Re: Isometric Doom. Fateless [в разработке]

Сообщение Karlo » 10 мар 2018, 13:04

Максим Кич писал(а):
05 мар 2018, 16:06
Нюансы:
1. У меня тип выстрела часто переключается только по двухкратному нажатию цифры. Иногда — по одиночному. Найти какую-то систему в этом я не смог.
2. Иногда шар пролетает между двумя блоками, стоящими по диагонали друг от друга. Я понимаю, что в рогаликах обычно это считается проходимым участком, но в изометрии выглядит как баг.
Когда ход не передался, то не происходит переключения. Пуля может улететь за экран далеко и ход не передается. Но это не очевидно, так как визуального информирования нет, когда буду над интерфейсом работать, то придумаю что-нибудь.
Насчет диагоналей, это надо как-то модифицировать алгоритм Брезенхема, чтобы исключить видимость между стыками (тоже еще не думал над этим)

Еще небольшое видео:

https://youtu.be/VxIk-qIp5Pk

Karlo
Сообщения: 89
Зарегистрирован: 28 сен 2016, 13:01

Re: Isometric Doom. Fateless [в разработке]

Сообщение Karlo » 21 июн 2018, 22:34

Люди, помогите, всю голову уже сломал :)
Хочу реализовать одновременные ходы, но застрял очень сильно на подводных камнях.
Суть в том, что, чтобы не ждать долго поочередных ходов всех актеров и для ускорение геймплея, хотелось сделать, чтобы все персонажи с возможностью хода в данный раунд совершали одновременные ходы. Как бы это выглядело :
- если есть возможность хода игрока, то ожидается выбор действия.
- когда игрок выбирает, например перемещение на клетку 13:17, то одновременно с ним ходят : первый имп приближается, второй имп стреляет файерболом издалека, и зомбишутер стреляет близко из-за угла из дробовика. Все это происходит одновременно, к сожалению не смог найти игр с подобной реализацией, а то бы подсмотрел как оно там(может плохо искал)
И тут начинаются проблемы. Дело в том, что у меня в данный момент реализована система контроля полета всех снарядов, но при выстреле для каждого изначально уже рассчитывается, какой из них промажет, какой из них ранит, а какой добьет. То есть, по сути каждый снаряд несет в себе информацию о воздействии на жертву и поэтому, как только жертва умирает, то следом летящие снаряды уже знают, что в том месте уже никого нет и то что они уже попадут в стену(в следующего актера) Все это сделано для анимации.
Если же ходить одновременно, то второй имп, стреляя издалека, записывает в фаерболл смерть актера, но следом стреляет зомби. И так как он ближе и его дробь долетит быстрее до игрока, а по замыслу файерболла, там уже труп, что в вступает в противоречие с визуальной картинкой, да и логикой. То есть по идее нужно динамически переназначать итоги каждого снаряда, что очень усложнит и так сложные логические структуры)
Это была первая часть проблем. Далее, смерть из дробовика настигает нашего актера, когда он прошел только полпути до следующей клетки ( у нас же одновременный ходы в один раунд ). Где ему падать? где проигрывать анимацию смерти? Нужно ли ему дойти до конца, а потом упасть замертво? Или играем анимацию смерти и одновременно тянем труп на клетку назначения? :D
В общем, я даже не могу придумать, что делать в этих "скользких" моментах, может кто сталкивался с подобными проблемами или вообще все по другому переделать?

Аватара пользователя
aspid
Сообщения: 129
Зарегистрирован: 28 мар 2016, 23:44

Re: Isometric Doom. Fateless [в разработке]

Сообщение aspid » 22 июн 2018, 04:28

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

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

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1593
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Re: Isometric Doom. Fateless [в разработке]

Сообщение Максим Кич » 22 июн 2018, 13:20

Karlo писал(а):
21 июн 2018, 22:34
Люди, помогите, всю голову уже сломал :)
Хочу реализовать одновременные ходы, но застрял очень сильно на подводных камнях.
Я в своё время обсасывал эту идею, и это реально поля некошенного геморроя. Но если хочется боли и страданий, то можно попробовать.
Karlo писал(а):
21 июн 2018, 22:34
Суть в том, что, чтобы не ждать долго поочередных ходов всех актеров и для ускорение геймплея, хотелось сделать, чтобы все персонажи с возможностью хода в данный раунд совершали одновременные ходы. Как бы это выглядело
aspid писал(а):
22 июн 2018, 04:28
Честно говоря, все эти одновременные ходы больше похожи на реал-тайм с активной паузой, чем на походовую игру как таковую.
Строго говоря, да, это и есть ответ на вопрос: «одновременные ходы» — это как раз таки реал-тайм с паузой. И относиться надо к нему именно так. То есть, квантование времени должно быть очень мелким. По хорошему, пространство надо тоже квантовать помельче, делать реал-тайм и не мучиться :D

Но если очень хочется натянуть сову на глобус, но лично я пришёл к следующему решению: все действия должны делиться на «фреймы» достаточно большой продолжительности. Я бы сразу измерял всё в миллисекундах.

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

1. Движение по текущей клетке — 500мс
2. Движение по новой клетке — 500 мс

Выстрел из дробовика

1. Подготовка — 100мс
2. Выстрел — 0мс
3. Cooldown — 500мс
4. Перезарядка — 1000мс

Снаряды являются отдельными объектами, которые тоже создают свои фреймы.
Karlo писал(а):
21 июн 2018, 22:34
И тут начинаются проблемы. Дело в том, что у меня в данный момент реализована система контроля полета всех снарядов, но при выстреле для каждого изначально уже рассчитывается, какой из них промажет, какой из них ранит, а какой добьет. [...] Все это сделано для анимации.
Вот это работать не будет. Потому что да:
Karlo писал(а):
21 июн 2018, 22:34
Если же ходить одновременно, то второй имп, стреляя издалека, записывает в фаерболл смерть актера, но следом стреляет зомби. И так как он ближе и его дробь долетит быстрее до игрока, а по замыслу файерболла, там уже труп, что в вступает в противоречие с визуальной картинкой, да и логикой.

Это была первая часть проблем. Далее, смерть из дробовика настигает нашего актера, когда он прошел только полпути до следующей клетки ( у нас же одновременный ходы в один раунд ). Где ему падать? где проигрывать анимацию смерти? Нужно ли ему дойти до конца, а потом упасть замертво? Или играем анимацию смерти и одновременно тянем труп на клетку назначения? :D
Рассмотрим теперь эту же ситуацию в терминах фреймов.
Скрытый текст: ПОКАЗАТЬ
Отметка в 0 мс.

Игрок: заявляет фреймы движения в соседнюю клетку:
1. Движение по текущей клетке — 500мс
2. Движение по новой клетке — 500 мс

1-й Имп: заявляет фреймы движения в соседнюю клетку.
1. Движение по текущей клетке — 500мс
2. Движение по новой клетке — 500 мс

2-й Имп, допустим на расстоянии 4-х клеток от игрока. Заявляет фреймы стрельбы файерболом:
1. 200 мс подготовки
2. 100 мс выстрел
3. 1000 мс Cooldown

Зомби находится на 200-й мс второго фрейма движения:
2. Движение по новой клетке — 300 мс

Следующие 200мс персонажи отыгрывают соответствующие анимации, ничего нового не происходит.
Отметка 200мс

Игрок:
1. Движение по текущей клетке — 500-200мс
2. Движение по новой клетке — 500 мс

1-й Имп
1. Движение по текущей клетке — 500-200мс
2. Движение по новой клетке — 500 мс

2-й Имп начинает анимацию выстрела
1. 100мс — выстрел
2. 1000мс — Cooldown

Зомби осталось идти ещё 100мс.

Отметка 300мс

Игроку и 1-му Импу осталось идти ещё 200мс до следующей клетки.

2-й Имп порождает файербол и уходит в cooldown
1. 1000мс — Cooldown

Предположим, что игрок относительно 2-го Импа стоит у стены. Пока что это не имеет значения.
Файербол порождает два фрейма по 50 мс, за каждые из которых он проделывает путь в половину клетки (покинуть текущую — занять следующую)

Зомби пришёл в новую клетку, огляделся, увидел Персонажа и заявляет фреймы выстрела
1. Подготовка — 100мс
2. Выстрел — 0мс
3. Cooldown — 500мс
4. Перезарядка — 1000мс

Отметка 400мс
Игрок и 1-й Имп идут. До следующей клетки им остаётся 100мс.
2-му Импу остаётся 900мс cooldown-а
Файербол пролетел одну клетку, и порождает следующие два фрейма движения.
Зомби производит выстрел, порождая пулю (для простоты)
Пуля сканирует прямую перед собой и находит Игрока, причиняя ему урон, несовместимый с жизнью.
Текущий и последующие заявленные фреймы Игрока отменяются.
Он ещё не покинул текущую клетку, то есть, в простейшем случае, анимация смерти должна вернуть его в центр этой клетки.
1. Смерть — 1000мс

Отметка 500мс
1-й Имп покинул свою клетку и начал идти по следующей.
2-й Имп и Зомби — в cooldown
Игрок умирает
Файербол реализовал свои фреймы и заявляет следующие. (2 клетки)

Отметка 600мс
1-й Имп идёт по новой клетки. Идти ему остаётся 400мс
2-й Имп и Зомби — в cooldown
Игрок умирает
Файербол реализовал свои фреймы и заявляет следующие. (3 клетки)

Отметка 650мс
Файербол влетает в клетку, занятую Игроком. Теоретически, тут можно отменить второй фрейм и начать проигрывать анимацию попадания
в падающий труп Игрока. Но, допустим, мы считаем, что умирающий Игрок не задерживает собой файерболы. Тогда файербол проболжает лететь следующие 50мс, до центра клетки.

Отметка 700мс
1-й Имп идёт по новой клетки 200мс из 500.
2-й Имп и Зомби — в cooldown
Игрок всё ещё умирает
Файербол реализовал свои фреймы и заявляет следующие.

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

Дальше ничего особо интересного не происходит — персонажи могут отыграть свои фреймы и перейти в режим Idle, разгуливая по зачищенному от Игрока уровню.
Это не отменяет большого числа проблем, но, по крайней мере, такой вариант отвечает на заданные вопросы.
Dump the screen? [y/n]

Аватара пользователя
kipar
Сообщения: 2104
Зарегистрирован: 10 мар 2010, 13:16
Откуда: Москва

Re: Isometric Doom. Fateless [в разработке]

Сообщение kipar » 22 июн 2018, 15:12

Реалтайм который как в Superhot неплох. Также можно думать над ходом, не надо рассчитывать на рефлексы.
Я так понимаю основной недостаток - как раз отсутствие ходов и клеток. Из-за этого в критических случаях высчитывать миллиметры и миллисекунды там где в рогаликах можно ограничиться дискретным выбором.
Можно еще как в My Turn To Pew делать реалтайм с регулярной паузой, скажем каждую секунду. Тогда миллисекунды не надо будет рассчитывать и выбор ближе к дискретному, но все еще надо высчитывать миллиметры.
И есть еще вариант делать наоборот - время непрерывным а пространство дискретным.

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

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1593
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Re: Isometric Doom. Fateless [в разработке]

Сообщение Максим Кич » 22 июн 2018, 15:42

kipar писал(а):
22 июн 2018, 15:12
Тогда миллисекунды не надо будет рассчитывать
А их по-любому надо будет рассчитывать, если что-то куда-то плавно движется — как минимум, сколько времени прошло с последнего кадра, чтобы знать, какие приращения задавать.
kipar писал(а):
22 июн 2018, 15:12
И есть еще вариант делать наоборот - время непрерывным а пространство дискретным.
Я, в общем, примерно это и предлагал. «Непрерывность» это всё-таки вопрос квантования.
Dump the screen? [y/n]

Аватара пользователя
kipar
Сообщения: 2104
Зарегистрирован: 10 мар 2010, 13:16
Откуда: Москва

Re: Isometric Doom. Fateless [в разработке]

Сообщение kipar » 22 июн 2018, 16:51

Максим Кич писал(а):
22 июн 2018, 15:42
А их по-любому надо будет рассчитывать, если что-то куда-то плавно движется — как минимум, сколько времени прошло с последнего кадра, чтобы знать, какие приращения задавать.
Я имею в виду игроку не надо рассчитывать.
Максим Кич писал(а):
22 июн 2018, 15:42
Я, в общем, примерно это и предлагал. «Непрерывность» это всё-таки вопрос квантования.
ну, просто есть 4 варианта.
1 время непрерывно пространство непрерывно - классический реалтайм и всякие superhot
2 время по шагам пространство непрерывно - вариантов решений меньше, но рассчитывать "с линейкой" успеешь или нет все равно надо. My turn to pew с последнего 7drl.
3 время непрерывно пространство по клеткам - "с линейкой" считать не надо, но надо с секундомером. вот тут я не знаю примера, наверняка есть. Чтоб все двигались по клеткам, но остановить можно было в любой момент.
4 время по шагам пространство по клеткам - обычные рогалики и рогалики со сложной системой времени тоже.

Karlo
Сообщения: 89
Зарегистрирован: 28 сен 2016, 13:01

Re: Isometric Doom. Fateless [в разработке]

Сообщение Karlo » 22 июн 2018, 18:06

Максим Кич писал(а):
22 июн 2018, 13:20
1. Движение по текущей клетке — 500мс
2. Движение по новой клетке — 500 мс

Выстрел из дробовика
1. Подготовка — 100мс
2. Выстрел — 0мс
3. Cooldown — 500мс
4. Перезарядка — 1000мс
Именно так я и считал, делал раскладки по десятым и сотым долям секунд.

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

Была такая задумка.
Ход - единичное действие одного актера
Раунд - включает в себя все действия всех актеров
Секунда - может включать в себя несколько раундов, если будут актеры, у которых хватит времени на действия внутри этой секунды

Внутри раунда все действия всех актеров вроде как одновременные, это значит, что вполне возможна ситуация, что игрок, убивая импа, сам может умереть от этого же импа. Но при этом это не должно быть именно реалтаймом. Отличием наверно было бы отсутствие границ и порядка хода внутри раунда. Например три актера делают по одному действия, а у четвертого хватит времени на еще действие и он просто будет ходить после всех в следующем раунде, когда остальные будут просто стоять. А когда у всех закончится время, то наступает следующая секунда и следующий раунд. Наверно непонятно объяснил, завтра могу поподробнее рассказать.
Кстати, несколько рогаликов с анимацией вроде тоже показывают одновременные ходы, там тоже бы было долго смотреть на передвижения всех, нашел "Dungeons Of Dredmor"

Karlo
Сообщения: 89
Зарегистрирован: 28 сен 2016, 13:01

Re: Isometric Doom. Fateless [в разработке]

Сообщение Karlo » 22 июн 2018, 18:10

kipar писал(а):
22 июн 2018, 15:12
Просто сначала ходит и анимируется игрок, потом по очереди рассчитываются ходы всех врагов, потом одновременно проигрываются анимации всех ходов врагов. Тогда никаких конфликтов быть не может (т.к. с точки зрения логики враги ходят последовательно) и ждать долго не надо.
Еще это я тоже хотел бы избежать, так как чуток пропадает напряжение.
А представляешь, ты нажимаешь вправо, и пока твой персонаж перемещается, ему в лицо летят файрболлы и попу попадает дробь. Круто же :D

Аватара пользователя
kipar
Сообщения: 2104
Зарегистрирован: 10 мар 2010, 13:16
Откуда: Москва

Re: Isometric Doom. Fateless [в разработке]

Сообщение kipar » 25 июн 2018, 10:07

Karlo писал(а):
22 июн 2018, 18:10
А представляешь, ты нажимаешь вправо, и пока твой персонаж перемещается, ему в лицо летят файрболлы и попу попадает дробь. Круто же
Я вспомнил где это классно реализовано
http://www.roguebasin.com/index.php?tit ... ace_Marine

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

Аватара пользователя
Jesus05
Сообщения: 1824
Зарегистрирован: 02 дек 2009, 07:50
Откуда: Норильск, сейчас Санкт-петербург.
Контактная информация:

Re: Isometric Doom. Fateless [в разработке]

Сообщение Jesus05 » 25 июн 2018, 10:20

kipar писал(а):
22 июн 2018, 16:51
3 время непрерывно пространство по клеткам - "с линейкой" считать не надо, но надо с секундомером. вот тут я не знаю примера, наверняка есть. Чтоб все двигались по клеткам, но остановить можно было в любой момент.
https://ru.wikipedia.org/wiki/UFO_(%D1% ... %B3%D1%80) В этой серии игр время непрерывно, есть тактическая пауза, но пространство дискретно по квадратикам.

Karlo
Сообщения: 89
Зарегистрирован: 28 сен 2016, 13:01

Re: Isometric Doom. Fateless [в разработке]

Сообщение Karlo » 26 июн 2018, 06:59

В Rogue Space Marine сделано действительно интересно, подсмотрел несколько идей)
В Xcom только в третьей(которые в изометрии(плоские), а не 3Д) могу припомнить реалтайм с активной паузой. Но там я вообще не понимаю как реализовано отображение снарядов, так как они могут скрываться за стенками, значит расположение снарядов привязано к ячейке, над которой пролетают. Но тут возникает столько вопросов, что вообще "все сложно".

Насчет трупов, принял волевое решение :), трупы будут декорацией, а падать они будут в том смещении, где их убило. А лут тогда не из трупа доставать нужно будет, а будет появляется на прошлой ячейке актера.
Тут недалеко была тема насчет расположения предметов в структурах, самым простым способом получилось сделать : в ячейках хранятся стеки предметов, в в стеках хранятся предметы(их ID). В итоге в каждой ячейке может быть любое количество предметов. Причем стек предметов(это не стек, а массив у меня, просто назвал его так) начинается с количества предметов в данной ячейке, чтобы проще сразу цикл было организовывать.

Насчет выстрелов вроде есть мысли на основе ваших предложений, надо пробовать.

Karlo
Сообщения: 89
Зарегистрирован: 28 сен 2016, 13:01

Re: Isometric Doom. Fateless [в разработке]

Сообщение Karlo » 06 июл 2018, 10:39

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

https://youtu.be/OXE4Q5KIj7A

https://youtu.be/V3fgYMOmNsE


Так же пара скриншотов наработок.

Изображение

Изображение

Karlo
Сообщения: 89
Зарегистрирован: 28 сен 2016, 13:01

Re: Isometric Doom. Fateless [в разработке]

Сообщение Karlo » 14 сен 2018, 15:07

Намучился я с GMS, вряд ли буду развивать проект в нем
изучаю с++ с sfml, ребят, подскажите исходники с грамотной структурой, можно рогалики, но необязательно. Интересует реализации структур, ссылок, указателей, как они с массивами употребляются. Копаю исходники больших игр, много пока что непонятного :) Понимаю, что нужно нарабатывать практику. На форумах, где обсуждают проблемы часто старички ругают за использование идеологии с вместо с++ (в с++ программах), тоже непонятен этот момент. (я так понимаю из-за игнорирования правил/парадигм ООП) В общем, выслушаю любые советы по обучению

Аватара пользователя
Apromix
Мастер
Сообщения: 1151
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: Isometric Doom. Fateless [в разработке]

Сообщение Apromix » 14 сен 2018, 17:52

По С++ вот такое есть :) Но тоже можешь попробовать выучить язык Go. Проще некуда =D>
Вложения
Уроки C++ от APROMIX.zip
(55.92 КБ) 3 скачивания
Изображение Изображение

Ответить

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

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