Генерация мира

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

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

Darkness
Сообщения: 33
Зарегистрирован: 13 апр 2012, 18:47

Re: Генерация мира

Сообщение Darkness » 10 фев 2017, 09:57

kipar писал(а):
10 фев 2017, 08:05
на вики вот он: http://rlgclub.ru/wiki/Процедурная_гене ... в_TinyKeep
В любом случае я не очень понимаю что такого хорошего в этом алгоритме (ну кроме нереального количества обсуждений и красивых картинок генерации). Он позволяет делать широкие коридоры с кривыми стенками. Для чего-то похожего на диабло, что может эти коридоры густо забить статуями\дверями\колоннами\решетками и прочими предметами интерьера это неплохо, для большинства рогаликов - выглядит просто как странные коридоры из прямоугольников. Это тоже конечно можно использовать, но на универсальный алгоритм не тянет.
А никто не говорит, что это универсальный алгоритм. Он заточен под создание уровня коридор-комнаты, а не полнозаливного уровня. Поэтому для генерации подвала замка или уровня на космической станции он подходит отлично, а для обычного рогалика как-то не особо.

Darkness
Сообщения: 33
Зарегистрирован: 13 апр 2012, 18:47

Re: Генерация мира

Сообщение Darkness » 10 фев 2017, 10:03

kipar писал(а):
10 фев 2017, 08:05
Из тех что на вики мне вот этот алгоритм понравился: http://rlgclub.ru/wiki/Алгоритм_построения_подземелий
Точнее даже не сам алгоритм а идея что надо привязывать генерацию к содержимому. Т.е. не сначала делать комнаты а потом генерировать для них содержимое, а сразу добавлять комнаты с конкретным смыслом (алтарь, казармы, бойня, сокровищница) и в зависимости от их роли генерить соседние проходы и комнаты. Но реализовывать я не пробовал.
Но это уже будет не рандомная генерация, а структурная со всеми вытекающими. ИМХО, это намного интереснее, но тогда народ начнет вопить, что это не рогалик, а нечто совершенно иное и т.д.

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

Re: Генерация мира

Сообщение Jesus05 » 10 фев 2017, 10:18

Какой народ? народ кажется на все подряд вопит "Фу.. рогалик" или "О! рогалик" не смотря на то что это на рогалик может быть вообще никаким местом не похоже.

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

Re: Генерация мира

Сообщение kipar » 10 фев 2017, 10:29

Darkness писал(а):
10 фев 2017, 10:03
Но это уже будет не рандомная генерация, а структурная со всеми вытекающими. ИМХО, это намного интереснее, но тогда народ начнет вопить, что это не рогалик, а нечто совершенно иное и т.д.
Почему, тоже рандомная. Во всяком случае добавить туда достаточно рандома по-моему легко. И подземелья будут всё такими же уникальными и реиграбельными, но при этом с более логичным расположением комнат.

Darkness
Сообщения: 33
Зарегистрирован: 13 апр 2012, 18:47

Re: Генерация мира

Сообщение Darkness » 10 фев 2017, 12:29

Jesus05 писал(а):
10 фев 2017, 10:18
Какой народ? народ кажется на все подряд вопит "Фу.. рогалик" или "О! рогалик" не смотря на то что это на рогалик может быть вообще никаким местом не похоже.
Ну вот тот же TinyKeep за рогалик не считают особо, хотя ключевое отличие, ИМХО, от классики в графике. Так что определение рогалика в берлинской интерпретации это скорее для гиков и прочих. Но его упорно пихают везде, где не лень, пытаются подогнать интересные проекты в узкие рамки немецкого сборища и т.д.
Вот тут вот если выложить Данжтетрис, мало кто скажет, что это рогалик, хотя соответствует минимум 6 из 9 первичным фактора.

Darkness
Сообщения: 33
Зарегистрирован: 13 апр 2012, 18:47

Re: Генерация мира

Сообщение Darkness » 10 фев 2017, 12:44

kipar писал(а):
10 фев 2017, 10:29
Почему, тоже рандомная. Во всяком случае добавить туда достаточно рандома по-моему легко. И подземелья будут всё такими же уникальными и реиграбельными, но при этом с более логичным расположением комнат.
Ну вот смотри, классика для многих геймеров икона своего жанра - HoMM III. Несмотря на то, что там вся соль в рандомных картах, рандома в них не особо много, так то. В зависимости от размера, подземелья и количества игроков используются различные шаблоны на разное количество игровых зон и все. Если игрок выбирает мало островов - зоны будут разделены горами и прочим декором, если островной вариант - морями. На переходах из зоны в зону группа существ, силой Х, которая также определяется шаблоном. В каждой зоне определенное количество шахт, групп монстров и бонусных/уникальных мест. Если за этим не следить - не заметишь, но если ты сейчас запустишь игру и сыграешь десяток партий с одними и теми же настройками, то закономерности уже будут тебе видны.
Как это уже не раз обсуждалось в других ветках - игроку все равно, что происходит за пределами текущего экрана. Будет там симуляция всего и все или сплошной рандом, ему безразлично. Структурная генерация позволяет улучшить дизайн уровней, сделать интересный геймплей и удержать фокус внимания игрока. Можно вспомнить тот же LfD и его "режиссер" - это сильное решение, которое улучшило игру. Но если сделать такой вот рогалик - это не тру, тру это чистый рандом и все такое.
Так что я только за структурного всякого, но с точки зрения рогалиководов с тру сектора это будет предательством того "святого" канона. Так что будь готов к критике;)

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

Re: Генерация мира

Сообщение Максим Кич » 10 фев 2017, 12:58

Darkness писал(а):
10 фев 2017, 12:44
Так что я только за структурного всякого, но с точки зрения рогалиководов с тру сектора это будет предательством того "святого" канона. Так что будь готов к критике;)
Да ладно… Вон в Angband генератор карт использует шаблоны только в путь — и ничё, народ не жужжит. Ну и, в целом, прислушиваться к ортодоксам, когда что-то новое создаёшь — худшее, что можно сделать.
Dump the screen? [y/n]

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

Re: Генерация мира

Сообщение kipar » 10 фев 2017, 13:58

Darkness писал(а):
10 фев 2017, 12:44
Но если сделать такой вот рогалик - это не тру, тру это чистый рандом и все такое.
Это скорее от цели зависит, а не от метода. Если генерить этим методом карты для того чтобы обеспечить баланс, например чтобы игроку поочередно встречались сокровищницы и комнаты с врагами, еще и подобрать число врагов так чтобы максимизировать ожидаемый донат - да, не тру и казуальность.
Но при этом Incursion где каждая комната имеет ярко выраженный стиль - вполне рогалик. Но при этом там стиль на комнаты накладывается уже после генерации и ферма водорослей вполне может соседствовать с лавовым озером. А если накладывать во время генерации - можно создать локальные закономерности, при том что картина подземелья в целом повторятся не будет и казуального "баланса" тоже не будет.

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

altmax
Сообщения: 118
Зарегистрирован: 15 сен 2012, 11:59

Re: Генерация мира

Сообщение altmax » 10 фев 2017, 17:44

Работаю над следующим алгоритмом сейчас. Рандомно кидаю комнаты, комнаты могут накладываться друг на друга. Каждая комната - это вершина графа. Для получившегося графа рассчитываю компоненты связности (это оказалось гораздо легче, чем я думал), и между этими компонентами (если их несколько) уже строю коридоры, коридоры строятся вообще не учитывая другие комнаты.
В итоге имеем уровни, очень похожие на Dungeon Crawl, чего я и добивался. Регулируя количество и размеры комнат, можно получать и запутанную сеть коридоров между небольшими комнатами, и огромные залы странной формы. По сути это генерация из TinyKeep, только без физического движка, раздвигающего комнаты.
В общем дело достаточно интересное. До этого главное меню писал - там тоже загнался и оно полностью настраивается из файла mainmenu.txt. Ничего перекомпилировать не надо, разве только что количество пунктов меню изменится.
Вообще рогалик не самоцель, а средство изучения С++.

altmax
Сообщения: 118
Зарегистрирован: 15 сен 2012, 11:59

Re: Генерация мира

Сообщение altmax » 14 фев 2017, 18:46

Вот в итоге что рисуется, теперь буду отрабатывать перемещения по лабиринту. Медленно только работает - на генерацию того что на рисунке ушло около 180 мс, если размер больше, то время растет в квадратичной зависимости (вообще-то зависит не от размера, а от числа начальных комнат). Но это всё из-за использования библиотечной функции set_intersection () для определения пересечений комнат в начале генерации, можно сделать гораздо быстрее.
Вложения
Level1.jpg
Level1.jpg (330.35 КБ) 3409 просмотров

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

Re: Генерация мира

Сообщение Максим Кич » 14 фев 2017, 18:56

altmax писал(а):
14 фев 2017, 18:46
Медленно только работает - на генерацию того что на рисунке ушло около 180 мс, если размер больше, то время растет в квадратичной зависимости.
Dwarf Fortress, помнится, около часа на моей машине мир генерировал. Вот это было «медленно». А всё что в пределах минуты — терпимо, в зависимости от конечного результата. Тем более, что никто не мешает генерировать уровень отдельным потоком.
Dump the screen? [y/n]

altmax
Сообщения: 118
Зарегистрирован: 15 сен 2012, 11:59

Re: Генерация мира

Сообщение altmax » 15 фев 2017, 06:06

Dwarf Fortress генерирует мир один раз перед игрой, а тут каждый раз надо будет запускать генерацию при переходе на новый уровень. Да еще сохранение старого время займет. Хотя в том же Dungeon Crawl при переходе на новый уровень возникает задержка на пол секунды где-то, так что в целом это не критично для пошаговой игры.
Помню, еще на спектруме хода компьютера в стратегии приходилось ждать секунд 20 - так долго он считал.

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

Re: Генерация мира

Сообщение kipar » 15 фев 2017, 07:40

Да, скриншот выглядит как в кравле. Надо в bearlib добавить.

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

altmax
Сообщения: 118
Зарегистрирован: 15 сен 2012, 11:59

Re: Генерация мира

Сообщение altmax » 15 фев 2017, 07:58

kipar писал(а):
15 фев 2017, 07:40
Да, скриншот выглядит как в кравле. Надо в bearlib добавить.

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

Аватара пользователя
BreakMT
WANDER Team
Сообщения: 903
Зарегистрирован: 27 ноя 2006, 12:16

Re: Генерация мира

Сообщение BreakMT » 15 фев 2017, 08:52

Я похожие карты генерировал и без всяких сложных алгоритмов - просто соединял комнаты без обхода. Почему бы не соединять их последовательно, зачем какие-то графы и "компоненты связанности"? :shock:

PS: посмотрел свои исходники. Я делал так - у комнаты может быть от 1 до 4 дверей. Первая дверь обязательно соединяется со следующей комнатой, остальные двери с рандомной.

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

#########
#.......#
+...@.z.#             "Got ya, didn't I, you little sucker!!!"
#.......#
#########
>>Play Market<<

Ответить

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

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