Dungeon Architect

Hi Lars,
I am working on this problem as well. One thing to try is to use a GridDungeonPlatform at the edge of the dungeon, set the cell type to “room” and then use a theme override volume with an empty theme along one of the walls of the platform. In the empty theme volume build the door into the dungeon.

The only problem I’m seeing with this is that if you’re building the dungeon at runtime and you have a height variation > 0, there’s a chance that the platform will not match the Z value of the door you built. I have contacted the author to see if there’s a workaround.

Dungeon Architect User Group

Hey fellow DA enthusiasts - does anyone want to share notes on what we’ve learned? I’ve gone through all the videos and done quite a bit of experimentation on my own. I have some learned some pretty neat tricks, but I’m also up against what seem to be some limitations. I plan to make some tutorial videos on some of the finer points I’ve learned. I’ll share those here when I finish them.

Has anyone gone advanced with building your own marker emitters? I built one to emit in the center of rooms which is working very well. However I’m very interested in going deeper as it seems the possibilities are powerful.

Specifically, when getting the bounds of rooms and corridors, does anyone understand that model very well? I’d love to chat.

If anyone’s interested, here’s a blueprint marker emitter I made for the center of the room. It is based on one of the DA author’s demo emitters with few a very minor tweaks. cbdb3fc36aea1978514a874b9df6ece466aa871a.png

Hi DrinkThisPotion!
Thanks for you suggestion - I have not thought about using GridDungenPlatform and ThemeOverideVolume for dungeons build at runtime … might get handy to add special rooms inside of the dungeon.
But I think there is no way to make sure that the runtime dungeon actually hits these volumes - but I’ll experiment with this to see what I can get from it.

But there must be an build in way for runtime dungeons - you have to max out the time a player searches through a dungeon level by separating entrance and exit (and some special goals/quest items) far away from each other.
… and what’s the purpose of a dungeon without an entrance … :wink:

Edit: just discovered that a GridDungeonPlatformer of type Room is always connected - great!

Yes, let me know if you find a way to deal with the elevation issue. (or if you even run into it)

Does anyone have a video or written tutorial for SnapDungeonBuilder functionality? I checked on Ali’s youtube page where he has a demo of it, but no explanation or set up. MTIA.

Hey Ali, I still don’t have the DA in my Vault.

@demonseedgfx, @MiDri suggestion is a nice workaround. Here’s another approach that lets you rotate your dungeon at runtime by attaching all the dungeon objects to a root actor:

  1. Generate your dungeon
  2. Grab all your generated dungeon actors and attach them to some root actor (which you will rotate around the orbit)
  3. Rotate the root actor to rotate your dungeon

@MiDri This should be fixed in the latest version. There was a build error in the version I submitted to epic on one of the platforms. I’ve resubmitted it yesterday and it should be available soon.

Adding negation volumes should be straight forward. I’ll add it in the next build

Thank you @sazigirl! I got a good quality microphone a while back and I’ll re-record the videos soon. Feel free to ask here if you need any help

I’ve sent a mail to Epic asking for the status. I’ll let you all know when I hear from them

Cedric, the emitter BP can see your variables from code. You need to add a reference to your C++ actor that drives this variable and read it from there

Here’s an example where from the BP, I’m grabbing the distance (random value between 1-6) from C++

C++ code that drives the distance variable:

#pragma once
#include "AMyDungeonController.generated.h"

class AMyDungeonController : public AActor


	UFUNCTION(BlueprintCallable, BlueprintPure, Category = MyDungeonController)
	int32 GetMountainDistance();



#include "DA413X.h"	// pch
#include "AMyDungeonController.h"

int32 AMyDungeonController::GetMountainDistance()
	return FMath::RandRange(1, 6);

Add a variable in the emitter BP that takes a references to your controller code and make it public

Grab the distance from your C++ code

Finally, set the reference of your C++ code in the marker emitter when you register it in the Dungeon actor. (The assumption is that you have it somewhere placed in the level, which you probably do)

Clicking build now randomly generates rocks that are 1-6 layers deep

@sazigirl, You can disconnect a link using Alt+Left click on the node’s pin. I’ll add this in the documentation

You can do that with spatial constraints. The tutorials for it are missing. I’ll add it soon. Here’s a quick overview:

Thank you for using it :slight_smile:

Cedric, Thanks for the video. I’ll have a look


All good, in my library now… Thanks.


@Laurentius,    @DrinkThisPotion
  1. The latest version 2.2.0 (soon to be updated in the marketplace) has an API and samples to find the furthest rooms in the dungeon

  2. You can use the Query API (in the examples) to orient the playerstart away from the entrance

  3. @DrinkThisPotion’s suggestion would work but it requires some work for properly wrapping theme override volumes around it. You can do that with a dungeon event listener (will work for dynamic runtime dungeons too) where you listen for dungeon layout build event (where the layout is built but the theme is not applied) and place the volume around it. I have a sample for this in Unity. I’ll add a demo soon

@DrinkThisPotion Great work! There’s a lot you can do with marker emitters. You can also use it to decorate the empty space around your dungeons (unity example but also applies to UE4)



@RedSaturnSix I’ll add detailed video tutorials soon. In the mean time, the snap builder section in the user guide has info to get you started

@MiDri please test with the new version (2.2.0) which will be updated in the marketplace in a day or two. I sent the request yesterday. As for removing the one of the two closed mesh between modules, I got this request from others as well. I’ll add a flag to remove or retain it

Is there documentation anywhere on the dungeon model and dungeon layout? A diagram showing how the XY grid works and how the rectangular bounds are formed and stored would be very helpful.

The new version (2.2.0) has a new query system that will hide the low level data structures in the model and give you a easier system to work with. Here are a list of functions in the query object of the grid builder which you can call from a blueprint

[FONT=Courier New]
GetCellDimension(int32 CellId, FVector& OutCenter, FVector& OutSize);
GetPathBetweenCells(int32 CellA, int32 CellB, TArray<int32>& OutResult, bool& bOutSuccess);
GetFurthestRooms(int32 &OutRoomA, int32 &OutRoomB);
GetCellAtLocation(const FVector& WorldLocation, int32& OutCellId, bool& bOutValid);
GetCellType(int32 CellId);
GetRandomCellOfType(FCellType CellType);
GetRandomCellFromStream(FRandomStream& RandomStream);
GetRandomCellOfTypeFromStream(FCellType CellType, FRandomStream& RandomStream);
ContainsStairBetween(int32 CellA, int32 CellB);
ContainsDoorBetween(int32 CellA, int32 CellB);
GetStairBetween(int32 CellA, int32 CellB);
GetDoorBetween(int32 CellA, int32 CellB);
GetOpeningPointBetweenAdjacentCells(int32 CellA, int32 CellB);

I’ll add more on request