City of the Damned

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

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

gwathlobal
Сообщения: 68
Зарегистрирован: 10 май 2013, 16:30

City of the Damned

Сообщение gwathlobal » 07 янв 2017, 14:54

Всем привет.

Давно читаю форум, теперь вот перешел в более активный режим.
Хочу поделиться с сообществом рогаликом, который таки довел до играбельного состояния.

По сути я переписал 7DRL "City of the Condemned" (http://www.roguebasin.com/index.php?tit ... _Condemned) на Common Lisp с использованием SDL, добавив туда фич по мелочи: нахождение пути, более реалистичные области видимости и кровь аля DoomRL.

Изображение

Github: https://github.com/gwathlobal/CotD
Последний релиз: https://github.com/gwathlobal/CotD/releases/latest

Сюжет такой - Легионы Ада вторглись в Город и начали резню. Небесные Силы не могли не вмешаться. В результате, в городе началась битва между светом и тьмой, а сами жители оказались меж двух огней.

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

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

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

У Ангелов два юнита: Ангел и Архангел. Ангелы могут легко убивать вражеских Импов, соответствующий им по силе юнит у противника - Демоны. Основной способностью ангелов (как фракции) является лечение себя.

У Демонов три юнита: Имп, Демон и Архидемон. Начинаете вы за Импа. Основной способностью демонов (как фракции) - это возможность вызвать союзника на подмогу (если они вообще остались и не находятся на другом конце карты).

Кроме того, обе стороны могут скрывать свой облик от врагов. У ангелов это активируемая способность, а демоны могут вселяться в людей. Если ты выглядишь как человек, то соответственно на тебя и реагируют как на человека.

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

Пожелания, предложения и критика приветствуются, спасибо :)
Последний раз редактировалось gwathlobal 08 янв 2017, 11:43, всего редактировалось 3 раза.

gwathlobal
Сообщения: 68
Зарегистрирован: 10 май 2013, 16:30

Re: City of the Damned

Сообщение gwathlobal » 08 янв 2017, 11:07

Выложил версию v1.0.1. Ссылки те же.
Поправил баг с тормозами в начале, добавил хелп по кнопке '?', сделал тайлы побольше.

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

Re: City of the Damned

Сообщение kipar » 09 янв 2017, 21:19

Untitled.png
Untitled.png (59.71 КБ) 10094 просмотра
City of the Condemned помню, очень понравился, рад что идея получила развитие.

Атаки от своей фракции спорная вещь, видеть как там "Woman hits Child for 1 damage" пытаясь из дома выбраться. Хотя может и логично, светопреставление, все куда бегут, могут и затоптать. Но уж для ангелов и благословенных имхо перебор.

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

gwathlobal
Сообщения: 68
Зарегистрирован: 10 май 2013, 16:30

Re: City of the Damned

Сообщение gwathlobal » 10 янв 2017, 17:49

Там сейчас система должна немного дольше подумать после первого хода, а потом более-менее стабильно быстро.
На первом ходу ни у одного актера не простроен путь до точки назначения, а точка назначения - это либо враг, либо друг (для ангелов) либо случайное пустое место в пределах 10 клеток, если больше актеру делать нечего. Если с друзьями-врагами все просто - до них чаще всего прямая, то случайное место может оказаться за углом, что потребует несколько большего времени.
Но изначально проблема была даже не в пути, а в том что я налажал в коде los, который проверял кто кого из актеров видел. Организовал там на каждой итерации проверки клетки дополнительный перебор всех актеров на карте.
Вариант, что реальное нахождение пути у людей (как самой многочисленной, но и самой пассивной фракции) не включается и они ходят просто случайным образом, до тех пор пока их число не упадет до 100, я попробовал, но существенного прироста скорости это не дало.

По поводу friendly fire. Я думаю вставить в код для демонов свойство, что на членов своей фракции нападать могут только они. Нападение на союзную, но не свою фракцию хочу оставить, а то ачивка берсерка всегда будет доставаться какому-то демону.

По поводу скрина - поздравляю! Я сам кстати так ни разу через левел-ап выиграть не смог ))

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

Re: City of the Damned

Сообщение kipar » 10 янв 2017, 20:44

Просто хотелось бы увидеть эпичные миссии на тыщу человек, а так получается что текущие числа почти предел для "движка" и партия получается уж очень короткая. Когда я выиграл мне просто повезло докачаться до архангела не встретив ни одного врага.

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

gwathlobal
Сообщения: 68
Зарегистрирован: 10 май 2013, 16:30

Re: City of the Damned

Сообщение gwathlobal » 10 янв 2017, 21:40

Ну я вот по приколу поставил сейчас карту 300 x 300, 1600 человек, 160 ангелов, 400 демонов.
Первых ход считался 24 секунды, второй 6 секунд.
Отключил проверку LOS. Первый ход все равно 24 секунды, второй 4,5 сек.
Отключил еще и pathfinding. Первый ход 1,6 сек, второй - 2,4 сек.
Отключил еще и весь дебажный вывод. От 0,7 до 0,9 сек.
Такие дела.
В общем теперь явно упираемся в скорость перебора мобов и вызов функции ИИ для каждого из них.

До 500 человек можно разогнаться, это размер карты 170*170. Но уже лагать начинает ощутимо - пара секунда на первый ход, по 0,5 сек на последующие.

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

Обсуждаем варианты high-load roguelike :lol:

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

Re: City of the Damned

Сообщение kipar » 10 янв 2017, 22:20

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

A* в городе не факт что лучший выбор - если и начало и конец пути не в доме, то проще просто идти к цели со скольжением не заходя в дома. С LOS тоже можно какие-то оптимизации придумать, но это все кардинально не изменит ситуации.

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

Re: City of the Damned

Сообщение Максим Кич » 11 янв 2017, 09:41

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

Ну и когда народа становится поменьше, можно переключаться на «чэстную» симуляцию, чтобы выжившие как-то друг-друга находили.
Dump the screen? [y/n]

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

Re: City of the Damned

Сообщение kipar » 11 янв 2017, 11:21

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

Аватара пользователя
Oreyn
Сообщения: 297
Зарегистрирован: 07 авг 2013, 14:59

Re: City of the Damned

Сообщение Oreyn » 12 янв 2017, 08:08

Идея интересная. По поводу хай лоада и прочей честности в симуляции. Я бы сделал так - всю карту делишь на квадраты. В которых обобщёнными параметрами ( без конкретных юнитов ) хранишь инфу о силе сторон. Как только игрок заходит на границу нового квадрата спавнишь там юнитов сторон, согласно перевесу сил. Возможно даже из набора сценариев по местам расстановки или действиям. По мере открытия 'квадратов' добавляешь события, которые меняют развес сил. Может считать ещё статистику поверженных/живых отспавненых юнитов и исходя из этот влиять на ещё не открытые квадраты. После 80 процентов открытых квадратов, делать резолв результатов побоища.
Собственно таким образом можно и обеспечить принцип прогрессии в играх, 'чем дальше в лес, тем толще партизаны'. И уйти от дисперсии 'слишком сложно' 'не встретил ни одного врага'.
Уж если и дальше идти, карта не нужна, просто линейная череда экранов. Если нет подсказок по карте, путь исследования карты все равно превращается в эту прямую.
И вместо битв можно просто бинарный выбор 'вмешаться' или 'пройти мимо' который собственно и является влиянием игрока на мир.
В итоге называешь игру Reigns. )

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

Re: City of the Damned

Сообщение Максим Кич » 12 янв 2017, 09:11

kipar писал(а):
11 янв 2017, 11:21
Тут все-таки есть что-то приятное в том что город честно симулируется и твои действия косвенно влияют на то кто выиграет
Так и влияют. Но там, докуда игрок может дотянуться. А в остальной части карты какая-то фракция будет постепенно одерживать верх. Причём, «чэстная симуляция» — это просто один из способов получить случайную картину, далеко не самый производительный и наименее контролируемый. Потому что она по факту ни разу не честная — это просто ещё одна условность, определённая конкретной реализацией.
Dump the screen? [y/n]

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

Re: City of the Damned

Сообщение kipar » 12 янв 2017, 13:00

"Ой всё".
Да, по производительности лучше всего как Oreyn предложил делать, с точки зрения простоты баланса тем более - одним коэффициентом регулируем шансы игрока победить.
Но играть в это у меня как-то желания не возникает, а CotD\CotC наоборот привлекают этой самой честной симуляцией. Проблема во всех статистических упрощениях в том что совсем неотличимыми от симуляции их не сделать, после некоторого опыта игры сразу видны "эксплоиты" системы.
В некоторых играх, например в roguesurvivor, это не проблема т.к. в принципе игроку без разницы кто из симулируемых фракций выиграет, они всё равно просто фон для игры создают, поэтому я и сказал что "заменять на упрощенную симуляцию, но тут вся суть потеряется.". Но навязывать мнение видимо нет смысла, кому-то и в этой игре статическое приближение (и соответствующий рост производительности\эпичности) больше бы понравились.

gwathlobal
Сообщения: 68
Зарегистрирован: 10 май 2013, 16:30

Re: City of the Damned

Сообщение gwathlobal » 12 янв 2017, 19:22

Выпустил версию 1.0.2

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

https://github.com/gwathlobal/CotD/releases/tag/v1.0.2

gwathlobal
Сообщения: 68
Зарегистрирован: 10 май 2013, 16:30

Re: City of the Damned

Сообщение gwathlobal » 17 янв 2017, 19:38

Выпустил версию 1.0.3

- Собрал бинарник под Линукс 32 бита
- Добавил жрецам молитвы, которые могут либо нанести минорный урон всем врагам, либо дать эффект божественного щита всем союзникам в поле зрения жреца. Божественный щит однократно защищает от любого вреда.
- Добавил в Город сатанистов. Они принадлежат фракции демонов, могут вызывать их к себе и проклинать всех врагов в радиусе действия. Проклятие уменьшает вероятность попадания персонажа.
- Добавил в Город солдат. Солдаты прибывают ближе к концу битвы, вооружены однозарядными винтовками и будут атаковать как ангелов, так и демонов.
- Добавил просмотр журнала сообщение по 'm'.
- Добавил новых вариантов зданий в Город.

https://github.com/gwathlobal/CotD/releases/tag/v1.0.3

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

Re: City of the Damned

Сообщение kipar » 18 янв 2017, 07:27

Выиграл но просто повезло, даже до архангела не докачался. Солдаты добавляют разнообразия - можно прикинуться человеком и ходить за солдатом, правда пока я ходил так врагов и не встретил, они оказывается рандомом ходят.
Церковь и сатанисты крутота, но обидно что обычно сделать почти ничего не успеваешь. Все куда-то целенаправленно идут, а игрок может только догонять тех кого видит. Может сделать халявную способность sense evil\good которая будет примерное направление на ближайшего демона\ангела показывать?

Ответить

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

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