Dungeon Architect

@ReenOne There’s a multiplayer sample in the quick start guide and it works with dedicated server

Some progress on a new dungeon layout algorithm (like ziggaurath)

I start with a world bounds, and binary split it till a min/max room size is reached

The splits don’t have to be in the center

Connect the doors based on the tree connections. This helps us enforce conditions, i.e. two child subtrees of a node are guaranteed to be isolated and connected only through the node’s door. This helps in created a door / lock combo. It can also loop

Purge the tree and tag the doors (notice E, L, K)

Hi Ali,

There’s two if statements inside UGridDungeonBuilder::ConnectRooms like this:

if (PreviousCell->CellType == FCellType::Room || PreviousCell->CellType == FCellType::Room)

Note the two sides of the || are identical. I’ve changed it to this:

if (CurrentCell->CellType == FCellType::Room || PreviousCell->CellType == FCellType::Room)

This fixes rooms sometimes not having doors connected to them from corridors… I think.



I also added:

FORCEINLINE uint32 GetTypeHash(const FRectangle& rect)
	return FCrc::MemCrc_DEPRECATED(&rect, sizeof(FRectangle));

To MathUtils.h so I can put an FRectangle in a TSet and/or TMap.



@LuaChunk Thanks for the fix. I’ve added it to the code and will be available in the next build

A new version has been uploaded to the website for engine version 4.16 and 4.17. I’ll also submit to Epic shortly

Version 2.7.0

  • Marker replacement volumes now run after all the Marker Emitter blueprints have emitted their markers
  • Fixed a bug in the grid builder that was causing doors to not create properly in some cases
  • Fixed a crash issue with the Actor theme node
  • Improved the stair connection model
  • Refactored the SceneProvider C++ API to take in a context object
  • Fixed a bug with pooling where actors from another dungeon where deleted
  • Exposed the snap confiugration to blueprints
  • Exposed the grid tool paint data to blueprints
  • Added wall separators to floorplan builder
  • Added support for engine version 4.17

[MENTION=28980]Ali Akbar[/MENTION]

Does DA work with World Composition to create truly massive procedurally generated worlds ?

the Epic Launcher is saying its installed in every version of the engine I have but I cannot get it to run at all…can’t even find it. any suggestions

Yes, I would expect that behavior. I wouldn’t expect the scale to be applied to the translation though. The problem with this is that it also repositions the wall. Think of it this way: what’s happening is akin to applying the scale to the rotation. Let’s say I rotate a wall by 90 degrees and then I have a transform logic that scales the wall by .5. Now my wall is only rotated 45 degrees. That would be unexpected behavior. It’s similar to applying the scale to the translation. It might make some sense (maybe) if the pivot point was always in the exact center of the mesh, but I think that’s pretty rare.

Is it enabled in the list of plugins?

How long does it take epic to get around to updates?

Hi Ali,

There’s actually two places this bug exists. In 2.7.0 you fixed line 1325 when sweeping the x axis, but not 1365 when sweeping the y axis.



@motorsep World Composition is not supported. I played around with the engine’s world composition framework while experimenting with the snap builder so it shouldn’t be too difficult to add. I understand it is required for VR and FPS games. I’ll add it in the future

@Tkat5200 Could you try deleting the plugin from the “Installed plugins” link under the engine version and re-downloading. After you launch, navigate to Edit > Plugins. In the left pane, choose Procedural category and make sure Dungeon Architect is installed and enabled

@TheCouch Ah, I misunderstood your post. Scaling the rotation is clearly wrong. I’ll have a look tomorrow and have it fixed in 2.7.1

They are usually pretty fast (~24 hours). I have just submitted 2.7.0 to Epic as Mac QA was pending. I’ve also added 4.17 support which was released yesterday

@LuaChunk I’ll fix it in 2.7.1

That would be great! How far off is such future? :o

Btw, World Composition is for massive levels, so it can be used in any sort of game, not just FPS and not just in VR.

Note though that the rotation is definitely not being affected, the translation (position) is being affected. My example was meant to illustrate that it’s strange to apply the scale to the translation (at least I think it is).

Greetings ,
Thanks for such an awesome plugin , has helped out a lot in development.

Lately have been leaning more and more toward using the Snap Builder as the flexibility to be off grid and use custom pieces is super useful .
I know it is still experimental at this time however wanted to give some suggestions for when you have time to refine.
Currently in UE4.16 DungeonArchitect 2.6.3


  1. Modules are randomly rotated 180 on Z axis , please allow for modules or the builder to turn this off ( for specific isometric modules we dont want them rotated )
  2. Add probability variable to modules ( on the builder )
  3. Include something similar to the Cluster Theme Selector volume for Snap to snap to a different specified set of modules ( and option to place a specific transition module at the intersection point ) . Or if the volume is impractical because the generated dungeon might not overlap being able to have a probability variable to switch to different set of modules would also be awesome so if had a A set of modules and a B set the output would be something like AAAAA<AtoB>BBBB<BtoA>AA
  4. Custom Collision option for Snap Check ( when only the path collision matters , and is ok if exterior \ background objects collide )

Connections and Doors -----------------------------------

  1. Connections with Door Class , the Door BPs appear to zero out in world space ( however connections are in correct location ) .
  2. Doors on Connections , cant set the Connection Door class to None after having assigned it (crashes )
  3. Doors on Connections also can randomly make the map unsaveable ( graph linked to external private object Unknown )