Game Maker - создание игр | HellRoom Games
Июль 13, 2025, 21:23:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Dungeon Generator Extension  (Прочитано 36439 раз)
0 Пользователей и 1 Гость смотрят эту тему.
jes490
Посетитель
**

Репутация: 12
Offline Offline

API: GameMaker Studio Standard
Сообщений: 30


« : Июль 10, 2016, 07:39:53 »



Всем привет!

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

Подземелья генерируются примерно такого типа:


Используя этот генератор вы получаете объект подземелья в виде ds_map. В этом объекте имеются: а) сетка, на которой отмечены главные, побочные комнаты, коридоры и выходы; все это определено константами; б) граф, с узлами в виде главных комнат; в графе отмечены основные и побочные проходы; в) список всех основных и побочных комнат с указанием их размеров и местоположения.

В экстеншене определено несколько функций для основного использования.

Три метода для генерации подземелья. Начиная от самого простого с минимум настроек и заканчивая полным методом генерации.

Код:
pg_create_dungeon(seed)
pg_create_dungeon_ext(seed, number, ellipse_width, ellipse_height, size, ways)
pg_create_dungeon_full(seed, number, ellipse_width, ellipse_height, min_width, max_width, min_height, max_height, main_width, main_height, ways, ways_length)

  • seed - задает семя подземелья
  • number - количество комнат для генерации (всего, т.е. основных и побочных)
  • ellipse_width, ellipse_height - ширина и высота эллипса, в пределах которого производить генерацию; меняя эти параметры вы получаете подземелья различной формы; я обычно ставлю 50/20
  • size - размер случайно генерируемых прямоугольников; приблизительно такого размера будут генерироваться комнаты; мое оптимальное значение - 12
  • min_width, max_width, min_height, max_height - тоже размер случайно генерируемых прямоугольников, но более детальный
  • main_width, main_height - размер основных комнат; все комнаты равны или больше этого размера будут помечены, как основные
  • ways - процент создаваемых побочных коридоров; может быть от 0 и больше; используйте 0, если побочные коридоры вам не нужны; обычное значение - 15%
  • way_length - максимальная длина побочных коридоров; для себя я подобрал оптимальное значение в 50

При успешной генерации методы возвращают объект dungeon в виде ds_map. Объект имеет следующие поля:

Код:
dungeon[? "seed"] //семя подземелья
dungeon[? "width"] //ширина всего подземелья в клеточках
dungeon[? "height"] //высота всего подземелья в клеточках
dungeon[? "grid"] //сетка, на которой отмечена основная информация
dungeon[? "rooms"] //ds_map, содержащая в себе все комнаты в подземелье
dungeon[? "main rooms"] //ds_list с ключами от основных комнат карты "rooms"
dungeon[? "side rooms"] //ds_list с ключами от побочных комнат карты "rooms"
dungeon[? "graph"] //ds_map, содержащая в себе граф/пути в подземелье
dungeon[? "main ways"] //ds_list с ключами от карты "graph" для основных путей
dungeon[? "side ways"] //ds_list с ключами от карты "graph" для побочных путей

Следующий метод уничтожает объект подземелья и освобождает всю выделенную память.

Код:
pg_destroy_dungeon(dungeon)

  • dungeon - объект подземелья в виде ds_map

Данный метод возвращает сурфейс с нарисованным подземельем. Отрисовывает он его как на скринах.

Код:
pg_draw_dungeon(dungeon, tile_size, exits)

  • dungeon - объект подземелья
  • tile_size - размер рисуемых клеточек, я обычно ставлю 4
  • exits - рисовать ли выходы, true/false

Методы для сохранения/загрузки подземелья в файлах. Метод загрузки возвращает загруженный объект подземелья.

Код:
pg_save_dungeon(filename, dungeon)
pg_load_dungeon(filename)

  • filename - имя файла для чтения/записи
  • dungeon - подземелье для записи

Несколько утилитарных методов, проверяющих является ли ячейка (x, y) коридором, комнатой, выходом и т.д. В экстеншене определены константы (DG_EMPTY, DG_SIDE_ROOM, DG_MAIN_ROOM, DG_CORRIDOR, DG_EXIT, DG_SIDE_EXIT), используя которые можно добиться того же самого.

Код:
pg_is_corridor(grid, x, y)
pg_is_exit(grid, x, y)
pg_is_side_exit(grid, x, y)
pg_is_empty(grid, x, y)
pg_is_main_room(grid, x, y)
pg_is_side_room(grid, x, y)

Если есть какие-то вопросы или замечания, пишите.  

* dungeon_generator.rar (16.97 Кб - загружено 954 раз.)
« Последнее редактирование: Июль 12, 2016, 05:13:18 от jes490 » Записан

Генератор Подземелий - Dungeon Generator Extension
Консолька - Console Extension
luden
GM Pro user
*

Репутация: 151
Offline Offline

Награды:
500 сообщений!За постоянность! [200 дней на форуме]
API: GameMaker Studio Master
Сообщений: 704


« Ответ #1 : Июль 11, 2016, 09:58:50 »

И тишина такая подавленная. А вот по схеме. Синие поля это просто расширения коридоров? И когда входы через одну клеточку друг от друга(например, на первом скрине в квадрате 145 сверху и снизу) это ж как-то странно наверное?
Записан
jes490
Посетитель
**

Репутация: 12
Offline Offline

API: GameMaker Studio Standard
Сообщений: 30


« Ответ #2 : Июль 11, 2016, 11:10:05 »

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

Насчет входов пока даже не знаю. Я держал в голове Vagante, когда представлял подземелье, поэтому такие штуки там только в плюс, наверное. Но в принципе, можно проанализировать и поудалять все лишнее, да. Пожалуй, сделаю, но оставлю эту возможность опциональной.



Добавлено: Июль 12, 2016, 05:16:37
Порезал лишние выходы и подправил несколько других мелочей, перезалил новый вариант в начальном посте. Теперь получается примерно так:

« Последнее редактирование: Июль 12, 2016, 05:16:37 от jes490 » Записан

Генератор Подземелий - Dungeon Generator Extension
Консолька - Console Extension
Лер да Рим
On standby...
GM Pro user
*

Репутация: 103
Offline Offline

Пол: Мужской
Награды:
500 сообщений!За постоянность! [50 дней на форуме]
API: Game Maker 8.0 Pro
Сообщений: 896


фрр-фрррр


« Ответ #3 : Июль 12, 2016, 06:10:57 »

Очень странно выглядят расширения коридоров. Неестественно. Либо цель должна быть специфичной.
Местами даже основные коридоры смотрятся излишне.
Записан

Всё гениальное просто.
jes490
Посетитель
**

Репутация: 12
Offline Offline

API: GameMaker Studio Standard
Сообщений: 30


« Ответ #4 : Июль 12, 2016, 07:30:44 »

Лер да Рим, отчасти согласен. Думаю, надо сделать проверку к отношению ширины/высоты, как я сделал на главных комнатах. Но в целом расширения служат для того, чтобы в них делать небольшие "мини комнаты". Кроме того, расширенный метод создания подземелья позволяет их полностью исключить.

Насчет коридоров можно точнее? Плохо смотрится то, что они в 3 клеточки?
Записан

Генератор Подземелий - Dungeon Generator Extension
Консолька - Console Extension
FakeKevin
Новичок
*

Репутация: 0
Offline Offline

API: GameMaker Studio 2
Сообщений: 1


« Ответ #5 : Февраль 12, 2017, 00:56:40 »

Привет.

Пытаюсь запустить генератор подземелья на Game Maker Studio 2, но возникает проблема. Данж создаю при помощи объекта, которому в код создания добавляю
Код:
my_dungeon=pg_create_dungeon(123)
Если в его ивенте Draw или Step добавить
Код:
pg_draw_dungeon(my_dungeon,5,true)
фпс игры падает, но ничего не выводится.

Файл с сохраненным данжем прикрепил.

При этом при генерации данжа любым из двух первых методов и любым сидом выходит данж  на 1 main rooms и 10 side rooms.

Это я что-то не то делаю, или генератор не работает с Studio 2?

* dung.txt (781.11 Кб - загружено 710 раз.)
Записан
jes490
Посетитель
**

Репутация: 12
Offline Offline

API: GameMaker Studio Standard
Сообщений: 30


« Ответ #6 : Февраль 20, 2017, 07:03:04 »

Насчет GMS:2 не знаю, смотрел про неё только в общих чертах, поэтому насколько она поддерживает код первой студии не имею представления. Вероятно, какую-то часть они всё-таки перелопатили, так что поддерживать вряд ли будет, поскольку написано было под первую студию.
Записан

Генератор Подземелий - Dungeon Generator Extension
Консолька - Console Extension
OKG
Посетитель
**

Репутация: 3
Offline Offline

Пол: Мужской
API: GameMaker Studio Pro
Деятельность: Программист-повар; Специализация: спагетти.
Сообщений: 36



« Ответ #7 : Февраль 20, 2017, 17:42:16 »

Reading project file....GMExtensionConstant - Unable to parse node - hidden - text - 0
GMExtensionConstant - Unable to parse node - hidden - text - 0
GMExtensionConstant - Unable to parse node - hidden - text - 0
GMExtensionConstant - Unable to parse node - hidden - text - 0
GMExtensionConstant - Unable to parse node - hidden - text - 0
GMExtensionConstant - Unable to parse node - hidden - text - 0
GMExtensionConstant - Unable to parse node - hidden - text - 0
finished.
Remove DnD...finished.
Compile Constants...finished.
Compile Scripts...finished.
Compile Objects...finished.
Compile Timelines...finished.
Compile Triggers...finished.
Compile Rooms...finished.
Compile Extensions...Asset Compile finished: 17:37:53
Записан
jes490
Посетитель
**

Репутация: 12
Offline Offline

API: GameMaker Studio Standard
Сообщений: 30


« Ответ #8 : Февраль 21, 2017, 00:30:05 »

Какой-то гон в работе чтения констант, что ли; вероятно из-за различия версий или еще чего. Скинь проект, гляну. Я писал под 1.4, у тебя EA 1.9?
Записан

Генератор Подземелий - Dungeon Generator Extension
Консолька - Console Extension
OKG
Посетитель
**

Репутация: 3
Offline Offline

Пол: Мужской
API: GameMaker Studio Pro
Деятельность: Программист-повар; Специализация: спагетти.
Сообщений: 36



« Ответ #9 : Февраль 22, 2017, 17:33:44 »

Какой-то гон в работе чтения констант, что ли; вероятно из-за различия версий или еще чего. Скинь проект, гляну. Я писал под 1.4, у тебя EA 1.9?
Версия 1.4.1451

* dungeon_generator_test.gmz (994.3 Кб - загружено 695 раз.)
Записан
jes490
Посетитель
**

Репутация: 12
Offline Offline

API: GameMaker Studio Standard
Сообщений: 30


« Ответ #10 : Февраль 23, 2017, 18:09:19 »

Когда extension загружен, правой кнопкой по нему в дереве проекта --> свойства (properties) --> вкладка import resources --> import all. Для работы надо, чтобы импортировались все скрипты. Кроме того, рекомендовал бы сделать размер комнаты немного поменьше (хотя бы 1920x1080), чтобы нормально отрисовывалось, либо сделать вид.

(Кроме того, в вашем проекте у меня тоже почему-то ошибка возникает, но я просто удаляю экстеншен, потом правой кнопкой импортирую его заново, и всё нормально).
« Последнее редактирование: Февраль 23, 2017, 18:39:54 от jes490 » Записан

Генератор Подземелий - Dungeon Generator Extension
Консолька - Console Extension
RP
Новичок
*

Репутация: 1
Offline Offline

Пол: Мужской
API: GameMaker Studio Pro
Сообщений: 12


Роман всея Руси


WWW
« Ответ #11 : Июль 04, 2017, 12:35:29 »

Вот какая ошибка появляется у меня:

Что с этим делать?
Записан

Используйте поиск по сайту от Гуугл:
в строке поиска введите: site:forum.hellroom.ru ваш вопрос и не засоряйте форум)
Мой блог: http://romanlovetext.blogspot.ru
Группа в ВК: https://vk.com/globalgamedev
Dmi7ry
Гл. Администратор
*

Репутация: 1379
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+1000 репутации]За помощь в развитии форума!Знаток Game Maker!За помощь новичкам!
API: GameMaker Studio Master
Деятельность: Code, design
Сообщений: 6626



WWW
« Ответ #12 : Июль 04, 2017, 14:12:05 »

Вот какая ошибка появляется у меня:
Версия GMS какая?

Цитировать
Что с этим делать?
Подозреваю, что использовать актуальную версию GMS.
Записан

- А какой, собственно, командой процессора колобок ест черта?
- Командой EAT...
Справка и FAQ в правом верхнем углу...
Space Owl
Посетитель
**

Репутация: 1
Offline Offline

API: GameMaker Studio 2
Сообщений: 20


« Ответ #13 : Июль 28, 2018, 23:11:28 »

Я правильно понимаю, что генератор отрисовывает черный сурфейс, из которого вырезано подземелье?
Записан
Dmi7ry
Гл. Администратор
*

Репутация: 1379
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+1000 репутации]За помощь в развитии форума!Знаток Game Maker!За помощь новичкам!
API: GameMaker Studio Master
Деятельность: Code, design
Сообщений: 6626



WWW
« Ответ #14 : Июль 29, 2018, 06:20:58 »

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

- А какой, собственно, командой процессора колобок ест черта?
- Командой EAT...
Справка и FAQ в правом верхнем углу...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 0.104 секунд. Запросов: 33.