{"id":13485549,"url":"https://github.com/BenPyton/ProceduralDungeon","last_synced_at":"2025-03-27T19:31:20.701Z","repository":{"id":45797436,"uuid":"189371379","full_name":"BenPyton/ProceduralDungeon","owner":"BenPyton","description":"This is an Unreal Engine 4/5 plugin to generate procedural dungeon.","archived":false,"fork":false,"pushed_at":"2025-03-11T23:11:38.000Z","size":99411,"stargazers_count":610,"open_issues_count":4,"forks_count":70,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-03-12T00:19:35.909Z","etag":null,"topics":["cpp","dungeon-generator","game-development","plugin","procedural","procedural-generation","ue4","ue4-plugin","ue5","ue5-plugin","unreal","unreal-engine","unreal-engine-4","unreal-engine-5","unreal-engine-code-plugin","unreal-engine-cpp-plugin","unreal-engine-plugin"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BenPyton.png","metadata":{"files":{"readme":"ReadMe.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"ko_fi":"benpyton","liberapay":"benpyton","custom":"https://www.paypal.com/donate/?hosted_button_id=9VWP66JU5DZXN"}},"created_at":"2019-05-30T07:58:41.000Z","updated_at":"2025-03-09T03:35:42.000Z","dependencies_parsed_at":"2024-05-13T20:26:27.263Z","dependency_job_id":"46b1710a-5bea-4748-b59a-d7b6f7591b97","html_url":"https://github.com/BenPyton/ProceduralDungeon","commit_stats":null,"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenPyton%2FProceduralDungeon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenPyton%2FProceduralDungeon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenPyton%2FProceduralDungeon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenPyton%2FProceduralDungeon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BenPyton","download_url":"https://codeload.github.com/BenPyton/ProceduralDungeon/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245910781,"owners_count":20692498,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","dungeon-generator","game-development","plugin","procedural","procedural-generation","ue4","ue4-plugin","ue5","ue5-plugin","unreal","unreal-engine","unreal-engine-4","unreal-engine-5","unreal-engine-code-plugin","unreal-engine-cpp-plugin","unreal-engine-plugin"],"created_at":"2024-07-31T18:00:25.645Z","updated_at":"2025-03-27T19:31:20.690Z","avatar_url":"https://github.com/BenPyton.png","language":"C++","readme":"# Procedural Dungeon Plugin\n\n[![Plugin version number](https://img.shields.io/github/v/release/BenPyton/ProceduralDungeon?label=Version)](https://github.com/BenPyton/ProceduralDungeon/releases/latest)\n[![Unreal Engine Supported Versions](https://img.shields.io/badge/Unreal_Engine-4.27_%7C_5.2_%7C_5.3_%7C_5.4_%7C_5.5-9455CE?logo=unrealengine)](https://github.com/BenPyton/ProceduralDungeon/releases)\n[![License](https://img.shields.io/github/license/BenPyton/ProceduralDungeon?label=License\u0026color=blue)](LICENSE)\n![Download count](https://img.shields.io/github/downloads/BenPyton/ProceduralDungeon/total?label=Downloads)\n[![Actively Maintained](https://img.shields.io/badge/Maintenance%20Level-Actively%20Maintained-green.svg)](https://gist.github.com/cheerfulstoic/d107229326a01ff0f333a1d3476e068d)\n[![Discord](https://img.shields.io/discord/1182461404092055574?logo=discord\u0026logoColor=white\u0026label=Discord\u0026color=%235865F2)][Discord]\n\n## Overview\n\nThis Unreal Engine plugin allows you to create rich, diverse dungeon experiences that combine the best of both worlds: the creativity and precision of handmade room designs, paired with the unpredictability and excitement of procedural generation.\n\nRooms are handmade Unreal levels instanced in the world.\nYou define their size and their doors as well as several other parameters.\nYou code your own rules in blueprints or C++, with great flexibility and customization, to generate the dungeons ***you*** want.\n\nIf you have any bug or crash, please open an issue in the Github repo.\\\nIf you have suggestions, questions or need help to use the plugin you can join the [Discord server][Discord] dedicated to this plugin.\\\nIf you want to contribute, feel free to create a pull request (*contributions to the wiki are also welcomed!*).\n\n## Features\n\n- Handcrafted rooms, giving full control of their design by the level designers.\n- Generation rules defined in blueprint or C++, allowing flexible and powerful procedural generation.\n- A new editor mode to ease the creation and edition of the rooms.\n- Several interfaces and components for your actors (RoomVisitor, RoomObserver, DeterministicRandom, etc.)\n- Different door types, allowing more complex dungeons.\n- Optional room culling system, allowing to render only the relevant rooms to the player.\n- Ready for multiplayer games (push model and subobject lists are implemented).\n- :construction:[^experimental] Save/Load nodes for the dungeon, easy to use with any game save system (blueprint or C++)\n\n[^experimental]: :construction: : Experimental features\n\n## Example\n\nSome hand-made rooms defined with bounds and doors:\\\n\u003cimg src=\"https://github.com/BenPyton/ProceduralDungeon/wiki/Images/ProceduralDungeonDemo_RoomSpawn.gif\" alt=\"Animated GIF\" width=\"125\"/\u003e\n\u003cimg src=\"https://github.com/BenPyton/ProceduralDungeon/wiki/Images/ProceduralDungeonDemo_RoomA.gif\" alt=\"Animated GIF\" width=\"125\"/\u003e\n\u003cimg src=\"https://github.com/BenPyton/ProceduralDungeon/wiki/Images/ProceduralDungeonDemo_RoomB.gif\" alt=\"Animated GIF\" width=\"125\"/\u003e\n\u003cimg src=\"https://github.com/BenPyton/ProceduralDungeon/wiki/Images/ProceduralDungeonDemo_RoomC.gif\" alt=\"Animated GIF\" width=\"125\"/\u003e\n\u003cimg src=\"https://github.com/BenPyton/ProceduralDungeon/wiki/Images/ProceduralDungeonDemo_RoomD.gif\" alt=\"Animated GIF\" width=\"125\"/\u003e\n\u003cimg src=\"https://github.com/BenPyton/ProceduralDungeon/wiki/Images/ProceduralDungeonDemo_RoomExit.gif\" alt=\"Animated GIF\" width=\"125\"/\u003e\n\nSome extremely simple generation rules:\n\n- A special room (red) used to spawn the player.\n- Then 10 rooms chosen randomly in a list (blue, green, yellow, cyan).\n- Then a special room (purple) used as an end goal for the player.\n- Finally 10 other rooms chosen randomly.\n\nPossible results:\\\n\u003cimg src=\"https://github.com/BenPyton/ProceduralDungeon/wiki/Images/ProceduralDungeonResult.gif\" alt=\"Animated GIF\" width=\"400\"/\u003e\n\u003cimg src=\"https://github.com/BenPyton/ProceduralDungeon/wiki/Images/ProceduralDungeonResult2.gif\" alt=\"Animated GIF\" width=\"400\"/\u003e\n\n[Demo Video on Youtube](http://www.youtube.com/watch?v=DmyNEd0YtDE \"Procedural Dungeon Demo\")\u003cbr\u003e\n\nYou can find an example project [here](https://github.com/BenPyton/DungeonExample) too.\n\n## How to use it\n\nFollow the [Getting Started guide on the wiki](https://benpyton.github.io/ProceduralDungeon/guides/Introduction) to start working with the plugin.\n\nIf you want more details about how it works internally, you can read the [wiki](https://benpyton.github.io/ProceduralDungeon/guides/Home).\n\nYou have also access in the wiki to all the exposed [classes and nodes](https://benpyton.github.io/ProceduralDungeon/api) in Blueprint.\n\nYou can also join the [Discord server][Discord] dedicated to this plugin if you want to ask question or get help from the community.\n\n## Installation\n\nInstall it like any other Unreal Engine plugin.\n\nIf you have any trouble with installation, read the [Installation](https://benpyton.github.io/ProceduralDungeon/guides/Getting-Started/Installation) page of the wiki.\n\n## FAQ\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eCan I generate levels during runtime? What I mean is if I can generate a new dungeon while the player is in it.\u003c/b\u003e\u003c/summary\u003e\n\n\u003e Yes, you can generate during runtime.\\\n\u003e If you call the `Generate` function, then the previous rooms unload, and a new dungeon generate and load new rooms.\\\n\u003e There is no map travel during the process, the player remains in the master map, only the dungeon's rooms are loaded/unloaded.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eHow large can I make the map?\u003c/b\u003e\u003c/summary\u003e\n\n\u003e You are only limited by the performance of the machine your game runs on.\\\n\u003e Mostly, the performance of the dungeon depends on the complexity of your rooms/meshes, and the hardware of your computer. The more details and diversity of actors there are, the more resources will be consumed on the computer.\\\n\u003e To be able to generate a very large map, you will need to optimize the meshes/textures for the RAM and GPU, the collisions and number of dynamic actors (enemies, etc.) for CPU, etc.\\\n\u003e The simple occlusion culling system I provide in the plugin is one (rudimentary) way to optimize the GPU side (less drawing).\n\u003e It is far from perfect but a good start.\\\n\u003e You will need to do the other optimizations yourself.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eCan I save and load dungeons?\u003c/b\u003e\u003c/summary\u003e\n\n\u003e Since version 3.5 of the plugin, There are [some nodes](https://benpyton.github.io/ProceduralDungeon/guides/Advanced-Features/Saving-Dungeon) to help you easily setup a save/load of the dungeon.\n\u003e It'll need some works on your side but it is definitely possible to do it.\\\n\u003e The dungeon save should be compatible with any save system you are using.\n\u003e In C++ you can also use some functions for archive-based save systems ( `StructuredArchive` compatible too).\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eHow many different rooms can I have?\u003c/b\u003e\u003c/summary\u003e\n\n\u003e You can have the number of room you want, there is not really a limit in the plugin.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eIt is pretty much up to my creativity to design whatever I want, right? If I want rooms to have enemies or anything like that, I can just create it in the level, right?\u003c/b\u003e\u003c/summary\u003e\n\n\u003e Yes, you can design everything you want in the room. It is the purpose of the plugin: providing a generic way to generate a dungeon, without any compromise on the DA nor the game design.\\\n\u003e If you don't want to create the rooms manually, you may use other procedural plugins (like PCG) to create the content of the rooms (I've never tested that myself though).\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eHow does the room culling work for multiplayer?\u003c/b\u003e\u003c/summary\u003e\n\n\u003e The room culling system built in the plugin is client side. It will show only the room where the local player is and any adjacent rooms.\\\n\u003e You can read further details about the room culling system of this plugin from the [wiki page](https://benpyton.github.io/ProceduralDungeon/guides/Advanced-Features/Occlusion-Culling).\\\n\u003e You can also disable the room culling system from the [plugin's settings](https://benpyton.github.io/ProceduralDungeon/guides/Getting-Started/Plugin-Settings) and do it yourself in another way.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eIs there a seed?\u003c/b\u003e\u003c/summary\u003e\n\n\u003e Yes, there is a seed for the dungeon generation.\\\n\u003e I made a parameter in the [`DungeonGenerator`](https://benpyton.github.io/ProceduralDungeon/guides/Getting-Started/Generating-Dungeon/Dungeon-Generator#seed-type) actor to have different types of seed:\n\u003e\n\u003e - You can have a fixed seed you can set in the actor which will be always used (useful for testing and debugging purpose, or to set manually the seed in Blueprint or C++).\n\u003e - You can have an incrementing seed, using the fixed seed for the first generation, then adding a value to it at each generation (useful for demonstration purpose).\n\u003e - You can have a random seed generated for each generation (for released game mostly, or to test quickly a lot of dungeon generations).\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eCan I have some sort of flow to the dungeon? Like have a secret room spawn only once and have boss rooms only spawn 4 rooms?\u003c/b\u003e\u003c/summary\u003e\n\n\u003e Yes, you can define the flow you want for your dungeon. It is the purpose of the plugin.\\\n\u003e There is the function [`ChooseNextRoomData`][ChooseNextRoom] where you define what I call your \"rules\" of the dungeon.\\\n\u003e You can, for example, check a minimum number of room before spawning a secret room, and then don't spawn it if you already have one in the dungeon.\\\n\u003e If you need help on how to define your dungeon rules, you can check this [example](https://benpyton.github.io/ProceduralDungeon/guides/Best-Practices/Workflows/Dungeon-Generation-Algorithm) and get help on the [Discord server][Discord] dedicated to this plugin.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eCan I increase the difficulty of the dungeon? Lets say room level 1 is easy and room level 5 is hard, can I tell the dungeon to not go from level 1 to level 5?\u003c/b\u003e\u003c/summary\u003e\n\n\u003e Of course, you can do that sort of thing!\n\u003e For this difficulty example, you should create a child blueprint of `RoomData` class to add new parameters like a `DifficultyLevel`, which you can set a different value for each room in your `RoomData` assets.\\\n\u003e Then for example, in your [`ChooseNextRoomData`][ChooseNextRoom] function you can choose a room depending on its difficulty level compared to the difficulty level of the previous room.\n\n\u003c/details\u003e\n\n## License\n\nThis plugin is under [MIT license](LICENSE).\\\nThis means you are free to use this plugin for personal/free/commercial projects, you are also allowed to modify the source code and/or redistribute it.\\\nThe only condition is to add the copyright notice and a copy of the license with your project and/or any redistribution of the source code, modified or not.\n\n## *Support Me*\n\n If you like my plugin, please consider leaving a tip, it would mean so much to me! 😊\n\n[![Ko-fi](https://img.shields.io/badge/Ko--fi-FF5E5B?logo=kofi\u0026logoColor=fff\u0026style=for-the-badge)](https://ko-fi.com/M4M3NW2JV)\n[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-FFDD00?logo=buymeacoffee\u0026logoColor=000\u0026style=for-the-badge)](https://buymeacoffee.com/benpyton)\n[![Liberapay](https://img.shields.io/badge/Liberapay-F6C915?logo=liberapay\u0026logoColor=000\u0026style=for-the-badge)](https://liberapay.com/BenPyton/donate)\n[![PayPal](https://img.shields.io/badge/PayPal-003087?logo=paypal\u0026logoColor=fff\u0026style=for-the-badge)](https://www.paypal.com/donate/?hosted_button_id=9VWP66JU5DZXN)\n\n[Discord]: https://discord.gg/YE2dPda2CC\n[ChooseNextRoom]: https://benpyton.github.io/ProceduralDungeon/guides/Getting-Started/Generating-Dungeon/Choose-Next-Room-Data\n","funding_links":["https://ko-fi.com/benpyton","https://liberapay.com/benpyton","https://www.paypal.com/donate/?hosted_button_id=9VWP66JU5DZXN","https://ko-fi.com/M4M3NW2JV","https://buymeacoffee.com/benpyton","https://liberapay.com/BenPyton/donate"],"categories":["Game Environment","Awesome Unreal Repositories"],"sub_categories":["World Building"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBenPyton%2FProceduralDungeon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FBenPyton%2FProceduralDungeon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBenPyton%2FProceduralDungeon/lists"}