ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+вопр
Модераторы: Sanja, Максим Кич
ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+вопр
Всем привет!
Решил поделать свой рогалик про вторую мировую в изометрии про Блашковича, сбегающего из плена
В данный момент идет разработка ИИ(в демке солдаты просто стоят)
Пока реализованы : генерация уровня, 4 вида оружия, секретные стены
Выбор оружия : 2- пистолет, 3- дробовик, 4- пулемет, 5- автопушка(которая с шестью стволами)
Передвижение : стрелочками, numpad, или мышкой в режиме ходьбы
Правой клавишей мыши осуществляется переключение режимов :
перемещение/стрельбы/использование
M : карта, R - рестарт уровня
Сейчас пытаюсь разработать систему ходов, но очень туго идет(мало опыта программирования). Цель - примерно как в адоме, основано на трате энергии существ.
Так вот вопрос - как вы ее создаете? Я так понимаю через списки? Например список видимых игроку монстров и невидимых, Невидимые обрабатываются в цикле скопом, а видимые по очереди - с отрисовкой анимации и перемещением? Или обрабатываете всех монстров, а потом создаете списки для отрисовки анимации? Как вплести игрока в эти ходы, он же должен быть на равных с монстрами и обработка его энергии будет вместе со всеми существами? Может непонятно объясняю, сказывается неопытность, в общем хотелось бы получить ваши советы по ИИ и обработке ходов(может надо создавать систему времени?)
Группа
https://vk.com/horndev
Ссылка на Html версию
http://horn.ucoz.net/
Решил поделать свой рогалик про вторую мировую в изометрии про Блашковича, сбегающего из плена
В данный момент идет разработка ИИ(в демке солдаты просто стоят)
Пока реализованы : генерация уровня, 4 вида оружия, секретные стены
Выбор оружия : 2- пистолет, 3- дробовик, 4- пулемет, 5- автопушка(которая с шестью стволами)
Передвижение : стрелочками, numpad, или мышкой в режиме ходьбы
Правой клавишей мыши осуществляется переключение режимов :
перемещение/стрельбы/использование
M : карта, R - рестарт уровня
Сейчас пытаюсь разработать систему ходов, но очень туго идет(мало опыта программирования). Цель - примерно как в адоме, основано на трате энергии существ.
Так вот вопрос - как вы ее создаете? Я так понимаю через списки? Например список видимых игроку монстров и невидимых, Невидимые обрабатываются в цикле скопом, а видимые по очереди - с отрисовкой анимации и перемещением? Или обрабатываете всех монстров, а потом создаете списки для отрисовки анимации? Как вплести игрока в эти ходы, он же должен быть на равных с монстрами и обработка его энергии будет вместе со всеми существами? Может непонятно объясняю, сказывается неопытность, в общем хотелось бы получить ваши советы по ИИ и обработке ходов(может надо создавать систему времени?)
Группа
https://vk.com/horndev
Ссылка на Html версию
http://horn.ucoz.net/
- Вложения
-
- 2016-09-10_09-45-43.png (38.4 КБ) 7194 просмотра
-
- 2016-09-25_23-27-08.png (93.51 КБ) 7225 просмотров
-
- 2016-09-25_23-29-47.png (85.51 КБ) 7225 просмотров
Последний раз редактировалось Karlo 17 дек 2016, 13:07, всего редактировалось 6 раз.
Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+
Ну, отвечу, как у меня идет, а кто по опытнее поправит)
Все мобы хранятся в списке.
Герой является мобом.
У каждого моба есть параметр Лояльность.
У героя он равен "Герой", у остальных может быть "враг", "нейтрал", "торговец" и т. д.
Цикл у меня идет не по мобам, а по времени. У каждого моба есть параметр скорость, у каждого действия своя стоимость. Цикл организован следующим образом:
1. Начало цикла
2. Пробегаем список мобов и получаем список мобов с энергией больше или равной нулю
3. Если список пуст переходим к пункту 8
4. Из полученного списка выбираем моба с максимальной энергией.
5. Передаем ход этому мобу. ИИ срабатывает в зависимости от параметра лояльность. Если лояльность "Герой" - передается управление игроку. Если "враг" - идет к герою, если его видит или атакует, если в пределах атаки. Если не видит, то просто рандомный ход. Если потерял из зоны видимости - идет на последнюю клетку, на которой видел героя.
6. После совершения хода уменьшаем параметр энергия на стоимость совершенного действия
7. Если список мобов с энкой больше равной нулю не пуст, то переходим к пункту 4
8. Всем мобам добавляем энергию в количестве, равном их параметру скорость.
9. Переходим к пункту 2
В принципе у меня все, над ИИ еще работать и работать, но система ходов уже организована, по крайней мере)
Все мобы хранятся в списке.
Герой является мобом.
У каждого моба есть параметр Лояльность.
У героя он равен "Герой", у остальных может быть "враг", "нейтрал", "торговец" и т. д.
Цикл у меня идет не по мобам, а по времени. У каждого моба есть параметр скорость, у каждого действия своя стоимость. Цикл организован следующим образом:
1. Начало цикла
2. Пробегаем список мобов и получаем список мобов с энергией больше или равной нулю
3. Если список пуст переходим к пункту 8
4. Из полученного списка выбираем моба с максимальной энергией.
5. Передаем ход этому мобу. ИИ срабатывает в зависимости от параметра лояльность. Если лояльность "Герой" - передается управление игроку. Если "враг" - идет к герою, если его видит или атакует, если в пределах атаки. Если не видит, то просто рандомный ход. Если потерял из зоны видимости - идет на последнюю клетку, на которой видел героя.
6. После совершения хода уменьшаем параметр энергия на стоимость совершенного действия
7. Если список мобов с энкой больше равной нулю не пуст, то переходим к пункту 4
8. Всем мобам добавляем энергию в количестве, равном их параметру скорость.
9. Переходим к пункту 2
В принципе у меня все, над ИИ еще работать и работать, но система ходов уже организована, по крайней мере)
Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+
Выглядит вполне симпатично
Единственное, имхо было бы неплохо повесить на какую-нибудь кнопку возможность убирать стены, чтоб они не загораживали обзор (Через них, судя по скринам, и так предметы видно, но тем не менее). И светильники я бы убрал тоже (или полупрозрачными сделал, как вариант).
Касаемо очередности монстров, у меня все они находятся в зоне видимости игрока и ведут себя так же, как у vapekreng'a, но с энергией заморачиваться особо не стал - каждое действие стоит два очка, монстр получает за ход или одно очко, или два (соответственно, ходит или каждый раз вслед за игроком, или через раз).
Единственное, имхо было бы неплохо повесить на какую-нибудь кнопку возможность убирать стены, чтоб они не загораживали обзор (Через них, судя по скринам, и так предметы видно, но тем не менее). И светильники я бы убрал тоже (или полупрозрачными сделал, как вариант).
Касаемо очередности монстров, у меня все они находятся в зоне видимости игрока и ведут себя так же, как у vapekreng'a, но с энергией заморачиваться особо не стал - каждое действие стоит два очка, монстр получает за ход или одно очко, или два (соответственно, ходит или каждый раз вслед за игроком, или через раз).
поперёк борозды
Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+
Вот, забыл про это написать. Список мобов общий, как я уже и писал. Просто перед ходом героя ищется его зона видимости и отрисовываются те тайтлы карты, которые изменились. Но у меня ASCII, в твоем случае, наверное, стоит проверять попадает ли положение моба в зону видимости героя и, при попадании, отрисовывать анимациюKarlo писал(а):Например список видимых игроку монстров и невидимых, Невидимые обрабатываются в цикле скопом, а видимые по очереди - с отрисовкой анимации и перемещением? Или обрабатываете всех монстров, а потом создаете списки для отрисовки анимации?
Со своей стороны интересно узнать - на чем пишешь, что используешь - какой ЯП, конструктор, либы?
Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+
Огромное спасибо за ответы! в шапку добавил ссылку для скачивания демки https://yadi.sk/d/Zj7U5i74vhgL8
В ней можно побегать, пострелять. Управление описал сверху, если найдете лифт, то на него можно нажать и перейти на следующий этаж. Пока на этом развлечения заканчиваются))
Самые темные комнаты и коридоры пока можно освещать стреляя (лучше из автопушки, дольше видно)
Пишу на Game Maker Studio, но думаю уже без разницы на чем делать, просто другие языки изучать - это время, плюс на ГМС удобно делать 2Д игры.
Спасибо за алгоритм, модифицирую свои поделки с учетом ваших советов)
Насчет убирания стен, уже внедрено в дебаг версии, атмосфера теряется.
Следующий вопрос хотел поднять, хотя наверно это уже больше к программистам. У меня стена занимает одну ячейку в матрице, соответственно, когда она освещается, то ее видно со-всех сторон. Как возможно исправить? Получается нужно делать направленный свет и узнавать с какой стороны стена открыта и с какой стороны у на нее падает и какой интенсивности свет? В общем, если побегаете в демку, поймете о чем речь, когда стену видно с нескольких сторон и с одной стороны она освещена, а с другой(темной) стороны она светится аж.
Наверно ближе к doom RL хотелось бы сделать(я про геймплей)
В ней можно побегать, пострелять. Управление описал сверху, если найдете лифт, то на него можно нажать и перейти на следующий этаж. Пока на этом развлечения заканчиваются))
Самые темные комнаты и коридоры пока можно освещать стреляя (лучше из автопушки, дольше видно)
Пишу на Game Maker Studio, но думаю уже без разницы на чем делать, просто другие языки изучать - это время, плюс на ГМС удобно делать 2Д игры.
Спасибо за алгоритм, модифицирую свои поделки с учетом ваших советов)
Насчет убирания стен, уже внедрено в дебаг версии, атмосфера теряется.
Следующий вопрос хотел поднять, хотя наверно это уже больше к программистам. У меня стена занимает одну ячейку в матрице, соответственно, когда она освещается, то ее видно со-всех сторон. Как возможно исправить? Получается нужно делать направленный свет и узнавать с какой стороны стена открыта и с какой стороны у на нее падает и какой интенсивности свет? В общем, если побегаете в демку, поймете о чем речь, когда стену видно с нескольких сторон и с одной стороны она освещена, а с другой(темной) стороны она светится аж.
Наверно ближе к doom RL хотелось бы сделать(я про геймплей)
Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+
Установлен линукс, а виртуалку все руки не доходят поставить, так что демку, к сожалению, пока не поиграл. Немного не понял суть вопроса: тебе конструктор не дает возможность осветить стену только с одной стороны или ты не знаешь, какие именно части стены для конкретной ячейки осветить и спрашиваешь про алгоритм определения освещенной стены?Karlo писал(а):Следующий вопрос хотел поднять, хотя наверно это уже больше к программистам. У меня стена занимает одну ячейку в матрице, соответственно, когда она освещается, то ее видно со-всех сторон. Как возможно исправить? Получается нужно делать направленный свет и узнавать с какой стороны стена открыта и с какой стороны у на нее падает и какой интенсивности свет? В общем, если побегаете в демку, поймете о чем речь, когда стену видно с нескольких сторон и с одной стороны она освещена, а с другой(темной) стороны она светится аж.
- Максим Кич
- Администратор
- Сообщения: 1642
- Зарегистрирован: 03 дек 2006, 20:17
- Откуда: Витебск, Беларусь
- Контактная информация:
Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+
Я так понимаю, речь примерно вот об этом: http://rlgclub.ru/forum/viewtopic.php?f=7&t=105.Karlo писал(а): Следующий вопрос хотел поднять, хотя наверно это уже больше к программистам. У меня стена занимает одну ячейку в матрице, соответственно, когда она освещается, то ее видно со-всех сторон. Как возможно исправить? Получается нужно делать направленный свет и узнавать с какой стороны стена открыта и с какой стороны у на нее падает и какой интенсивности свет? В общем, если побегаете в демку, поймете о чем речь, когда стену видно с нескольких сторон и с одной стороны она освещена, а с другой(темной) стороны она светится аж.
Dump the screen? [y/n]
Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+
Я использую конструктор только для упрощенного вывода на экран, а что выводить, что уже кодить надо. Вот у меня матрица 3х3, в центре стена, допустим в матрице это 1, остальные нули. В одном углу стоит игрок(он же может выступать источником света). Ему видно только 2 стороны стены, но открывается вся стена, так как значение для стены только одно. По ASCI это сложнее понять, но при попадании квадрата в LOS, он становится просто видимым для игрока, со всех сторон. У меня, изометрия тоже коварно показывает сразу все стороны.(я рисую каждый спрайт стены отдельно, но привязано это к значению матрицы равному значению стены).vapekreng писал(а):Установлен линукс, а виртуалку все руки не доходят поставить, так что демку, к сожалению, пока не поиграл. Немного не понял суть вопроса: тебе конструктор не дает возможность осветить стену только с одной стороны или ты не знаешь, какие именно части стены для конкретной ячейки осветить и спрашиваешь про алгоритм определения освещенной стены?Karlo писал(а):Следующий вопрос хотел поднять, хотя наверно это уже больше к программистам. У меня стена занимает одну ячейку в матрице, соответственно, когда она освещается, то ее видно со-всех сторон. Как возможно исправить? Получается нужно делать направленный свет и узнавать с какой стороны стена открыта и с какой стороны у на нее падает и какой интенсивности свет? В общем, если побегаете в демку, поймете о чем речь, когда стену видно с нескольких сторон и с одной стороны она освещена, а с другой(темной) стороны она светится аж.
Вообще данное представление уровней исключает межблочных стен, что я тоже хотел бы ввести.
Добавил html версию теперь можно и в линуксе посмотреть http://horn.ucoz.net/
Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+
Очень похоже, спасибо за ссылку! поизучаюМаксим Кич писал(а):Я так понимаю, речь примерно вот об этом: http://rlgclub.ru/forum/viewtopic.php?f=7&t=105.Karlo писал(а): Следующий вопрос хотел поднять, хотя наверно это уже больше к программистам. У меня стена занимает одну ячейку в матрице, соответственно, когда она освещается, то ее видно со-всех сторон. Как возможно исправить? Получается нужно делать направленный свет и узнавать с какой стороны стена открыта и с какой стороны у на нее падает и какой интенсивности свет? В общем, если побегаете в демку, поймете о чем речь, когда стену видно с нескольких сторон и с одной стороны она освещена, а с другой(темной) стороны она светится аж.
Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+
Как вариант, запихать в стену несколько кадров, если возможно - по одному для каждого из вариантов освещения (только с севера, только с юга, с запада и востока одновременно и т.д.) Всего около 16 должно получиться.Karlo писал(а):У меня стена занимает одну ячейку в матрице, соответственно, когда она освещается, то ее видно со-всех сторон. Как возможно исправить?
поперёк борозды
- Максим Кич
- Администратор
- Сообщения: 1642
- Зарегистрирован: 03 дек 2006, 20:17
- Откуда: Витебск, Беларусь
- Контактная информация:
Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+
А неоткуда в изометрии стольким кадрам взяться, просто физически. Если Karlo не пользуется отражением спрайтов по вертикальной оси, то для одной текстуры у него будет ровно два спрайта — «/» и «\», а освещённость реализуется средствами движка. А если пользуется — то один. Но тогда гитлеры будут в разные стороны смотреть местами, это будет сильно потешно выглядеть.aspid писал(а):Как вариант, запихать в стену несколько кадров, если возможно - по одному для каждого из вариантов освещения (только с севера, только с юга, с запада и востока одновременно и т.д.) Всего около 16 должно получиться.Karlo писал(а):У меня стена занимает одну ячейку в матрице, соответственно, когда она освещается, то ее видно со-всех сторон. Как возможно исправить?
Так что речь идёт о ситуации, когда игрок и источник света находятся по разные стороны стены:
Код: Выделить всё
.......
...#...
.*.#.@.
...#...
.......
.......
...#...
По здравому размышлению: игрок будет видеть клетку стены освещённой источником света, если он видит хотя бы одну смежную со стеной свободную клетку освещённой этим источником — мне кажется, это самое простое для формальной реализации условие.
Dump the screen? [y/n]
Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+
2Максим Кич:
Ну тогда в порядке дикого бреда - сделать три слоя для игрового поля:
- на верхнем слое - туман войны
- на среднем - полностью карта уровня, в цветовой схеме как вне зоны видимости игрока
- на третьем - только то, что в поле зрения игрока
Соответственно, каждый ход восстанавливаем средний слой, а затем с верхнего слоя и среднего слоя стираем клетки, попавшие в поле зрения игрока. Всяческие монстры и предметы с источниками света тоже попадают на третий слой и если они не в поле зрения, их просто не видно будет.
Ну я,правда, не как программист рассуждаю, а как обычный человек Да и через конструктор эта система скорее всего будет адово тормозить кстати.
Ну тогда в порядке дикого бреда - сделать три слоя для игрового поля:
- на верхнем слое - туман войны
- на среднем - полностью карта уровня, в цветовой схеме как вне зоны видимости игрока
- на третьем - только то, что в поле зрения игрока
Соответственно, каждый ход восстанавливаем средний слой, а затем с верхнего слоя и среднего слоя стираем клетки, попавшие в поле зрения игрока. Всяческие монстры и предметы с источниками света тоже попадают на третий слой и если они не в поле зрения, их просто не видно будет.
Ну я,правда, не как программист рассуждаю, а как обычный человек Да и через конструктор эта система скорее всего будет адово тормозить кстати.
поперёк борозды
- Максим Кич
- Администратор
- Сообщения: 1642
- Зарегистрирован: 03 дек 2006, 20:17
- Откуда: Витебск, Беларусь
- Контактная информация:
Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+
Как обычному человеку: оно так не работает.aspid писал(а): Соответственно, каждый ход восстанавливаем средний слой, а затем с верхнего слоя и среднего слоя стираем клетки, попавшие в поле зрения игрока. Всяческие монстры и предметы с источниками света тоже попадают на третий слой и если они не в поле зрения, их просто не видно будет.
Ну я,правда, не как программист рассуждаю, а как обычный человек Да и через конструктор эта система скорее всего будет адово тормозить кстати.
Dump the screen? [y/n]
Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+
Посидел, конкретно подумал, нам же важно не полностью моделировать мир, а всего лишь отображать более менее достоверно. А так как у меня изометрия и не вращается, то нам важно анализировать всего 2 клетки от стены на освещенность и на LOS. Это клетка снизу-справа(в матрице i+1) и снизу-слева(j+1). По ним уже вывожу затемненный спрайт, и т.д. В итоге ушли проблемы освещенности стен с неправильной стороны(первый скрин, как стало).
Так же ушла проблема, которая на втором скрине(как было).
На сайте http://horn.ucoz.net/ обновил игрушку, правда я никогда сайтами не занимался и впервые размещаю на хостинге(час разбирался), поэтому может коряво отображаться сам сайт.
Надо бросать уже все силы на ИИ и на геймплей, самое сложное, как по мне
Спасибо за советы и подсказки! С оптимизацией тоже может быть не очень.
Так же ушла проблема, которая на втором скрине(как было).
На сайте http://horn.ucoz.net/ обновил игрушку, правда я никогда сайтами не занимался и впервые размещаю на хостинге(час разбирался), поэтому может коряво отображаться сам сайт.
Надо бросать уже все силы на ИИ и на геймплей, самое сложное, как по мне
Спасибо за советы и подсказки! С оптимизацией тоже может быть не очень.
- Вложения
-
- 2016-09-30_11-19-32.png (67.72 КБ) 7148 просмотров
-
- 2016-09-30_11-28-04.png (110.25 КБ) 7148 просмотров
Последний раз редактировалось Karlo 30 сен 2016, 09:04, всего редактировалось 1 раз.
Re: ISOWolf roguelike(Вольф в изометрии наподобие рогалика)+
А как по мне, задумка хорошая. Осталось дождаться глобального технологического скачка, чтобы всё это дело не тормозило при просчётеМаксим Кич писал(а):Как обычному человеку: оно так не работает.
2Karlo:
Погонял немного Блажковица по коридорам, мне вкатило Единственное, как-то он неспеша совсем с клетки на клетку ходит) Его бы ускорить малость (ну мож дело в компе, он тормозной и старый)
поперёк борозды
Кто сейчас на конференции
Сейчас этот форум просматривают: Bing [Bot] и 36 гостей