ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+вопр

Темы, связанные с проектированием и программированием roguelike-игр

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

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

ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+вопр

Сообщение Karlo » 28 сен 2016, 13:21

Всем привет!
Решил поделать свой рогалик про вторую мировую в изометрии про Блашковича, сбегающего из плена

В данный момент идет разработка ИИ(в демке солдаты просто стоят)

Пока реализованы : генерация уровня, 4 вида оружия, секретные стены
Выбор оружия : 2- пистолет,  3- дробовик,  4- пулемет,  5- автопушка(которая с шестью стволами)
Передвижение : стрелочками, numpad, или мышкой в режиме ходьбы
Правой клавишей мыши осуществляется переключение режимов :

перемещение/стрельбы/использование
M : карта, R - рестарт уровня

Сейчас пытаюсь разработать систему ходов, но очень туго идет(мало опыта программирования). Цель - примерно как в адоме, основано на трате энергии существ.
Так вот вопрос - как вы ее создаете? Я так понимаю через списки? Например список видимых игроку монстров и невидимых, Невидимые обрабатываются в цикле скопом, а видимые по очереди - с отрисовкой анимации и перемещением? Или обрабатываете всех монстров, а потом создаете списки для отрисовки анимации? Как вплести игрока в эти ходы, он же должен быть на равных с монстрами и обработка его энергии будет вместе со всеми существами? Может непонятно объясняю, сказывается неопытность, в общем хотелось бы получить ваши советы по ИИ и обработке ходов(может надо создавать систему времени?)

Группа
https://vk.com/horndev

Ссылка на Html версию
http://horn.ucoz.net/
Вложения
2016-09-10_09-45-43.png
2016-09-10_09-45-43.png (38.4 КБ) 4080 просмотров
2016-09-25_23-27-08.png
2016-09-25_23-27-08.png (93.51 КБ) 4111 просмотров
2016-09-25_23-29-47.png
2016-09-25_23-29-47.png (85.51 КБ) 4111 просмотров
Последний раз редактировалось Karlo 17 дек 2016, 13:07, всего редактировалось 6 раз.

vapekreng
Сообщения: 45
Зарегистрирован: 22 фев 2016, 22:33

Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+

Сообщение vapekreng » 28 сен 2016, 21:21

Ну, отвечу, как у меня идет, а кто по опытнее поправит)
Все мобы хранятся в списке.
Герой является мобом.
У каждого моба есть параметр Лояльность.
У героя он равен "Герой", у остальных может быть "враг", "нейтрал", "торговец" и т. д.
Цикл у меня идет не по мобам, а по времени. У каждого моба есть параметр скорость, у каждого действия своя стоимость. Цикл организован следующим образом:

1. Начало цикла
2. Пробегаем список мобов и получаем список мобов с энергией больше или равной нулю
3. Если список пуст переходим к пункту 8
4. Из полученного списка выбираем моба с максимальной энергией.
5. Передаем ход этому мобу. ИИ срабатывает в зависимости от параметра лояльность. Если лояльность "Герой" - передается управление игроку. Если "враг" - идет к герою, если его видит или атакует, если в пределах атаки. Если не видит, то просто рандомный ход. Если потерял из зоны видимости - идет на последнюю клетку, на которой видел героя.
6. После совершения хода уменьшаем параметр энергия на стоимость совершенного действия
7. Если список мобов с энкой больше равной нулю не пуст, то переходим к пункту 4
8. Всем мобам добавляем энергию в количестве, равном их параметру скорость.
9. Переходим к пункту 2

В принципе у меня все, над ИИ еще работать и работать, но система ходов уже организована, по крайней мере)

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

Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+

Сообщение aspid » 29 сен 2016, 06:10

Выглядит вполне симпатично
Единственное, имхо было бы неплохо повесить на какую-нибудь кнопку возможность убирать стены, чтоб они не загораживали обзор (Через них, судя по скринам, и так предметы видно, но тем не менее). И светильники я бы убрал тоже (или полупрозрачными сделал, как вариант).

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

vapekreng
Сообщения: 45
Зарегистрирован: 22 фев 2016, 22:33

Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+

Сообщение vapekreng » 29 сен 2016, 07:14

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

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

Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+

Сообщение Karlo » 29 сен 2016, 12:37

Огромное спасибо за ответы! в шапку добавил ссылку для скачивания демки https://yadi.sk/d/Zj7U5i74vhgL8
В ней можно побегать, пострелять. Управление описал сверху, если найдете лифт, то на него можно нажать и перейти на следующий этаж. Пока на этом развлечения заканчиваются))
Самые темные комнаты и коридоры пока можно освещать стреляя (лучше из автопушки, дольше видно)

Пишу на Game Maker Studio, но думаю уже без разницы на чем делать, просто другие языки изучать - это время, плюс на ГМС удобно делать 2Д игры.
Спасибо за алгоритм, модифицирую свои поделки с учетом ваших советов)
Насчет убирания стен, уже внедрено в дебаг версии, атмосфера теряется.

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

Наверно ближе к doom RL хотелось бы сделать(я про геймплей)

vapekreng
Сообщения: 45
Зарегистрирован: 22 фев 2016, 22:33

Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+

Сообщение vapekreng » 29 сен 2016, 20:18

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

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

Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+

Сообщение Максим Кич » 29 сен 2016, 21:56

Karlo писал(а): Следующий вопрос хотел поднять, хотя наверно это уже больше к программистам. У меня стена занимает одну ячейку в матрице, соответственно, когда она освещается, то ее видно со-всех сторон. Как возможно исправить? Получается нужно делать направленный свет и узнавать с какой стороны стена открыта и с какой стороны у на нее падает и какой интенсивности свет? В общем, если побегаете в демку, поймете о чем речь, когда стену видно с нескольких сторон и с одной стороны она освещена, а с другой(темной) стороны она светится аж.
Я так понимаю, речь примерно вот об этом: http://rlgclub.ru/forum/viewtopic.php?f=7&t=105.
Dump the screen? [y/n]

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

Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+

Сообщение Karlo » 29 сен 2016, 23:04

vapekreng писал(а):
Karlo писал(а):Следующий вопрос хотел поднять, хотя наверно это уже больше к программистам. У меня стена занимает одну ячейку в матрице, соответственно, когда она освещается, то ее видно со-всех сторон. Как возможно исправить? Получается нужно делать направленный свет и узнавать с какой стороны стена открыта и с какой стороны у на нее падает и какой интенсивности свет? В общем, если побегаете в демку, поймете о чем речь, когда стену видно с нескольких сторон и с одной стороны она освещена, а с другой(темной) стороны она светится аж.
Установлен линукс, а виртуалку все руки не доходят поставить, так что демку, к сожалению, пока не поиграл. Немного не понял суть вопроса: тебе конструктор не дает возможность осветить стену только с одной стороны или ты не знаешь, какие именно части стены для конкретной ячейки осветить и спрашиваешь про алгоритм определения освещенной стены?
Я использую конструктор только для упрощенного вывода на экран, а что выводить, что уже кодить надо. Вот у меня матрица 3х3, в центре стена, допустим в матрице это 1, остальные нули. В одном углу стоит игрок(он же может выступать источником света). Ему видно только 2 стороны стены, но открывается вся стена, так как значение для стены только одно. По ASCI это сложнее понять, но при попадании квадрата в LOS, он становится просто видимым для игрока, со всех сторон. У меня, изометрия тоже коварно показывает сразу все стороны.(я рисую каждый спрайт стены отдельно, но привязано это к значению матрицы равному значению стены).
Вообще данное представление уровней исключает межблочных стен, что я тоже хотел бы ввести.

Добавил html версию теперь можно и в линуксе посмотреть http://horn.ucoz.net/

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

Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+

Сообщение Karlo » 29 сен 2016, 23:09

Максим Кич писал(а):
Karlo писал(а): Следующий вопрос хотел поднять, хотя наверно это уже больше к программистам. У меня стена занимает одну ячейку в матрице, соответственно, когда она освещается, то ее видно со-всех сторон. Как возможно исправить? Получается нужно делать направленный свет и узнавать с какой стороны стена открыта и с какой стороны у на нее падает и какой интенсивности свет? В общем, если побегаете в демку, поймете о чем речь, когда стену видно с нескольких сторон и с одной стороны она освещена, а с другой(темной) стороны она светится аж.
Я так понимаю, речь примерно вот об этом: http://rlgclub.ru/forum/viewtopic.php?f=7&t=105.
Очень похоже, спасибо за ссылку! поизучаю

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

Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+

Сообщение aspid » 30 сен 2016, 00:45

Karlo писал(а):У меня стена занимает одну ячейку в матрице, соответственно, когда она освещается, то ее видно со-всех сторон. Как возможно исправить?
Как вариант, запихать в стену несколько кадров, если возможно - по одному для каждого из вариантов освещения (только с севера, только с юга, с запада и востока одновременно и т.д.) Всего около 16 должно получиться.
поперёк борозды

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

Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+

Сообщение Максим Кич » 30 сен 2016, 06:10

aspid писал(а):
Karlo писал(а):У меня стена занимает одну ячейку в матрице, соответственно, когда она освещается, то ее видно со-всех сторон. Как возможно исправить?
Как вариант, запихать в стену несколько кадров, если возможно - по одному для каждого из вариантов освещения (только с севера, только с юга, с запада и востока одновременно и т.д.) Всего около 16 должно получиться.
А неоткуда в изометрии стольким кадрам взяться, просто физически. Если Karlo не пользуется отражением спрайтов по вертикальной оси, то для одной текстуры у него будет ровно два спрайта — «/» и «\», а освещённость реализуется средствами движка. А если пользуется — то один. Но тогда гитлеры будут в разные стороны смотреть местами, это будет сильно потешно выглядеть.

Так что речь идёт о ситуации, когда игрок и источник света находятся по разные стороны стены:

Код: Выделить всё

.......
...#...
.*.#.@.
...#...
.......
.......
...#...
Вот тут игрок будет видеть стену слева от себя освещённой, хотя не должен.

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

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

Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+

Сообщение aspid » 30 сен 2016, 06:58

2Максим Кич:
Ну тогда в порядке дикого бреда - сделать три слоя для игрового поля:
- на верхнем слое - туман войны
- на среднем - полностью карта уровня, в цветовой схеме как вне зоны видимости игрока
- на третьем - только то, что в поле зрения игрока

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

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

Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+

Сообщение Максим Кич » 30 сен 2016, 07:17

aspid писал(а): Соответственно, каждый ход восстанавливаем средний слой, а затем с верхнего слоя и среднего слоя стираем клетки, попавшие в поле зрения игрока. Всяческие монстры и предметы с источниками света тоже попадают на третий слой и если они не в поле зрения, их просто не видно будет.
Ну я,правда, не как программист рассуждаю, а как обычный человек :oops: Да и через конструктор эта система скорее всего будет адово тормозить кстати.
Как обычному человеку: оно так не работает. :P
Dump the screen? [y/n]

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

Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+

Сообщение Karlo » 30 сен 2016, 08:35

Посидел, конкретно подумал, нам же важно не полностью моделировать мир, а всего лишь отображать более менее достоверно. А так как у меня изометрия и не вращается, то нам важно анализировать всего 2 клетки от стены на освещенность и на LOS. Это клетка снизу-справа(в матрице i+1) и снизу-слева(j+1). По ним уже вывожу затемненный спрайт, и т.д. В итоге ушли проблемы освещенности стен с неправильной стороны(первый скрин, как стало).
Так же ушла проблема, которая на втором скрине(как было).

На сайте http://horn.ucoz.net/ обновил игрушку, правда я никогда сайтами не занимался и впервые размещаю на хостинге(час разбирался), поэтому может коряво отображаться сам сайт.
Надо бросать уже все силы на ИИ и на геймплей, самое сложное, как по мне :)
Спасибо за советы и подсказки! С оптимизацией тоже может быть не очень.
Вложения
2016-09-30_11-19-32.png
2016-09-30_11-19-32.png (67.72 КБ) 4034 просмотра
2016-09-30_11-28-04.png
2016-09-30_11-28-04.png (110.25 КБ) 4034 просмотра
Последний раз редактировалось Karlo 30 сен 2016, 09:04, всего редактировалось 1 раз.

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

Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+

Сообщение aspid » 30 сен 2016, 09:04

Максим Кич писал(а):Как обычному человеку: оно так не работает. :P
А как по мне, задумка хорошая. Осталось дождаться глобального технологического скачка, чтобы всё это дело не тормозило при просчёте :idea:

2Karlo:
Погонял немного Блажковица по коридорам, мне вкатило :D Единственное, как-то он неспеша совсем с клетки на клетку ходит) Его бы ускорить малость (ну мож дело в компе, он тормозной и старый)
поперёк борозды

Ответить

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

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