Dungeon Architect

Hello,

I have recently purchased your plugin as I’am interested in the Graph Grammars that you are using, however I cannot find any information on your Mission Grammar and how to use it.

Is there any documentation on this feature?

Thank you,

Hello,

I’am trying to use SnamMap Builder, however im getting errors when saving my level:

Everytime I open a level I get this (see picture)

Also I cannot save my levels anymore.

LogFileManager: Error: Error deleting file ‘D:/Perforce/SHPerforce/PRojectName/Dev/prototype/Content/pcg/Chunks/C_Corridor.umap’.
LogSavePackage: Error: Error saving ‘D:/Perforce/SHPerforce/PRojectName/Dev/prototype/Content/pcg/Chunks/C_Corridor.umap’

this is very frustrating to see as I have no idea where this error occurs.

Thank you

[USER=“28980”][/USER] Is floor planner ever going to be a thing? :slight_smile:

EDIT: I have been playing around with “Custom Grid Builder” recently. And with some success I was able to generate random buildings that follows my expectations. So they still used procedural inputs in the dungeon settings like min and cell size, although cells were placed in a different manner. All rooms were placed next to each other always, and sometimes there was special palce left for corridor to connect rooms but in a tight space so there are no free cells. entire thing created a “house” like structure. Querying rooms isn’t so hard also - so I was able to place rooftops in an organized way without overlapping elements.
I Also checked the example for runtime edition by player and found it super easy. The example spawns only corridor cells, but with extra fast tweaking I was able to place rooms or corridors and on bigger space than single cell.
Still I lack the possibility of control. I made in my theme extra markers like “window”, or simply negation empty markers. I am using the swap volumes to edit the building in edit mode to for example swap auto placed walls with windows, detecting unnecessary pillars by spatial constraints and custom market emiter spawn rules.
However I still lack tools to be able to edit it how I want.
And the goal is…
creating a complex set of markers emitters, spawn logic, custom builder etc to be able to either build by hand in-game or randomize a building by a specific theme. After creating the blueprints just produce more and more themes. In case of mixing themes just use theme overwrite volumes.
Why?
Because for example I want player to be able to populate large amount of buildings in relatively short time with simple settings. Picking size of buildings, bound, theme, and some features (like contains balcony or not, etc. Or not, as they could be part of the theme itself) and change how they look like with a random seed. Or be able to custom build a house from scratch.
First use case is super important as all I need to store in save objects or multiplayer replication are the settings and random seed he picked. Second benefit is that once player find a random number that generates a building he likes, he can store it with all his settings to reuse it multiple times later, and the effect will always be the same.
Second use case is house building in edit mode similar to THE SIMS, however due to theme and how DA works a lot faster as walls, etc could be placed automatically and bind to certain rules, still able to change by hand some small details. In this case I have great trouble to save the data about the building keeping it small. Cant replicate this data easily. and I don’t know if I can spawn markers at runtime without using volumes? Or delete markers? Can I access the build data as a single structure and store it?

Dungeon Architect is by FAR the BEST tool I’ve worked with in ue4. And I bet it can do much more then I know about. But some functions, events etc lack documentation and sometimes I can read a variable or access function - that I have no idea what it does.

This looks amazing!
Does anyone know if this is fully compatible with switch / PS4 ?

it is. Were using DA on both platforms with success. It makes level design so much easier

Hello, I have a simple question but I cant find a solution for this.
Using GridDungeonBulder, is there a way to rotate some meshes (corridors) if they are placed along a particular axe? Say if the corridor is along X no rotation but if is on Y rotate 90 degrees.

Has anyone had experience with DA in multiplayer with pickups? I have the pickups as part of the dungeon theme, but when I do a destroyactor() on the server side, the items don’t disappear on the clients.

I followed the tutorial for building the map in multiplayer and noticed that each client is sent the seed to build their own version of the map. Does this mean that each client then has it’s own version of the pickups and therefore removing them on the server wouldn’t remove the versions on the clients?

The pickups are set as replicated.

Is there a better way of doing this that will work? Like not having pickups as part of the theme, and instead having the server place them after all client dungeons are built?

Thanks for any help. This has been driving me crazy for a couple of days.

Edit:
My pickups are being generated on all clients (as the multiplayer code asks all clients to generate their own dungeons), so when removing a pickup from the server, the client ones still remain which made it look like replication wasn’t working. I could use multicast or iterate through all clients to remove the extra object, but that is pretty messy. I’d rather just have one copy generated on the server and replicated to the clients.

My first solution was to check after each dungeon build if it was a client or server, and if it was a client I just found all actors of the pickup type and destroyed them. A messy solution, but it worked.

I then tried making selection logic so at the point of creating the dungeon I could decide whether or not to place it based if it was a server or client. This doesn’t work as the grid selection blueprint class doesn’t seem to be parented to a class that will allow me to use switch authority or anything to check if server or client.

So, I am not sure what an elegant fix to this issue is. I considered different themes depending on if it is a client or server (where the client themes would not include pickups) but that concerned me that the random number seed would no longer be in sync on all clients and different dungeon layout would incur.

, if you could add an option to the theme panel to only generate a node on the server (replicated), that would be perfect.

Until then, if anyone else has an idea on how I can generate pickups as part of a theme and not have multiples as the clients build their dungeons, I’d like to hear them. I’d like a nice clean solution, not a hack and slash one. :slight_smile:

Instead of having a pickup item you must have something different. a pickup item spawner blueprint.
Why? Because the theme builds objects on all clients and server. that mean that even if you have an actor that is replicated and relevant, it will spawn twice on client side :smiley: and the one getting destroyed is the server instance only.
SO to solve this make a small object BP that on begin play goes to node “has authority” to make sure any logic happens on server, and then ON SERVER ONLY spawns a blueprint object from class that is replicated and always relevant replicated. this way it will spawn on all clients as part of the replication process without culling or anything and will be tracked by all, but only server will have authority over it.
You see you can spawn replicated actors on client but they don’t affect game logic and are ignored by server. when spawning power-ups, pick-able etc - you just spawn them on server so the server is the owner.
However “ownership” doesn’t work on dedicated server as it doesn’t have a controller but that’s another pair of shoes. but “has authority” always gives “is server” basically.

[USER=“28980”][/USER] - I will simplify my question. Can I by any mean spawn specific Markers in a location I desire, much like I can edit “floor/coridor” in the runtime example. Although its not technically spawning markers… in consequence it is spawning markers.
Can I spawn by hand other types of markers? In example “MyInnerWall” on a brush I make ingame?

Greetings ,
Thanks again for the updates [USER=“28980”][/USER] ! we are using the latest SnapMapDungeonBuilder and its very nice making the modules in levels now !
For Fixed Camera / Isometric games there are a few features would like to request :

Allow / Disallow Module Rotation - currently we are designing the map modules for a specific isometric view and DONT want them to be rotated 180 by the builder . Could we perhaps specify what modules shouldn’t be rotated in the Snap Map Module Database ? or have a setting on the builder to disable rotating modules ?

**Module Bounds from Mesh - **In general the computed bounds of modules is too simplistic and large . Adjusting meshes within the map modules by “ Relevant for Level Bounds “ has been very useful , however is still limited to a singular level bounding box for the collision checks where the power of Snap Dungeons is their unique shapes . In the Module Database if we could specify a custom static mesh that we make to be used for the Level Modules Collision Detection that would be amazing .

Thanks again !

Just downloaded the Dungeon Architect, but it doesn’t seem too happy with UE4.22:-

Module.DungeonArchitectRuntime.cpp (0:06.59 at +0:00)
2>C:\Program Files\Epic Games\UE_4.22\Engine\Source\Runtime\Core\Public\Templates/Sorting.h(38): error C4800: Implicit conversion from ‘int’ to bool. Possible information loss
2>C:\Program Files\Epic Games\UE_4.22\Engine\Source\Runtime\Core\Public\Templates/Sorting.h(38): note: consider using explicit cast or comparison to 0 to avoid this warning
2>C:\Program Files\Epic Games\UE_4.22\Engine\Source\Runtime\Core\Public\Templates/Sorting.h(37): note: while compiling class template member function ‘bool TDereferenceWrapper<T *,PREDICATE_CLASS>::operator ()(T *,T *) const’
2> with
2>
2> T=UGrammarRuleScriptGraphNode,
2> PREDICATE_CLASS=anonymous-namespace'::GrowNode::<lambda_5e70c48b025ba0820f91d9d03284bc29> 2> ] 2>C:\Program Files\Epic Games\UE_4.22\Engine\Source\Runtime\Core\Public\Algo/IntroSort.h(63): note: see reference to function template instantiation 'bool TDereferenceWrapper<T *,PREDICATE_CLASS>::operator ()(T *,T *) const' being compiled 2> with 2> 2> T=UGrammarRuleScriptGraphNode, 2> PREDICATE_CLASS=anonymous-namespace’::GrowNode::<lambda_5e70c48b025ba0820f91d9d03284bc29>
2> ]
2>C:\Program Files\Epic Games\UE_4.22\Engine\Source\Runtime\Core\Public\Templates/Sorting.h(94): note: see reference to class template instantiation ‘TDereferenceWrapper<T *,PREDICATE_CLASS>’ being compiled
2> with
2>
2> T=UGrammarRuleScriptGraphNode,
2> PREDICATE_CLASS=anonymous-namespace'::GrowNode::<lambda_5e70c48b025ba0820f91d9d03284bc29> 2> ] 2>C:\Program Files\Epic Games\UE_4.22\Engine\Source\Runtime\Core\Public\Containers/Array.h(2401): note: see reference to function template instantiation 'void Sort<UGrammarRuleScriptGraphNode,PREDICATE_CLASS>(T **,const int32,const PREDICATE_CLASS &)' being compiled 2> with 2> 2> PREDICATE_CLASS=anonymous-namespace’::GrowNode::<lambda_5e70c48b025ba0820f91d9d03284bc29>,
2> T=UGrammarRuleScriptGraphNode
2> ]
2>E:\DungeonTest\Plugins\DungeonArchitect\Source\DungeonArchitectRuntime\Private\Builders\SnapMap\SnapMapDungeonBuilder.cpp(725): note: see reference to function template instantiation ‘void TArray<UGrammarRuleScriptGraphNode *,FDefaultAllocator>::Sort<anonymous-namespace'::GrowNode::<lambda_5e70c48b025ba0820f91d9d03284bc29>>(const PREDICATE_CLASS &)' being compiled 2> with 2> 2> PREDICATE_CLASS=anonymous-namespace’::GrowNode::<lambda_5e70c48b025ba0820f91d9d03284bc29>
2> ]
2>E:\DungeonTest\Plugins\DungeonArchitect\Source\DungeonArchitectRuntime\Private\Builders\SnapMap\SnapMapDungeonBuilder.cpp(720): note: see reference to function template instantiation ‘void TArray<UGrammarRuleScriptGraphNode *,FDefaultAllocator>::Sort<anonymous-namespace'::GrowNode::<lambda_5e70c48b025ba0820f91d9d03284bc29>>(const PREDICATE_CLASS &)' being compiled 2> with 2> 2> PREDICATE_CLASS=anonymous-namespace’::GrowNode::<lambda_5e70c48b025ba0820f91d9d03284bc29>
2> ]
2>
2>Error executing C:\Program Files\Epic Games\UE_4.22\Engine\Build\Windows\cl-filter\cl-filter.exe (tool returned code: 2)

Just trying to figure out what’s going on… anyone had similar?

EDIT: This is VS2019, implicit conversion from T to bool generates an error.

EDIT2: Looks like there are numerous issues with VS2019… trying to modify the theme ground model causes a crash. In the end I just gave up on 2019 and installed 2017… which, so far, appears to work.

FYI, the error above is VS2019 related. “Implicit conversion from ‘T’ to bool” generates an error in VS2019.

THIS^^^

We’re having significant problems with the Z fighting too… corners and wall ends suffer the same problem. It’s also a major issue on “T” pieces when two rooms are adjacent but offset slightly.

It only seems to work in situations where the mesh isn’t textured, but soon as a reflection or light hits it, it’s a real mess :frowning:

Has anyone had any joy trying to implement 90 degree corners rotated to fit more accurately, or wall ends (180 degree) that don’t intersect the existing geometry, or knows how to achieve that?

Been playing around with this a bit more, using the GridCustomDungeonBuilder… sadly, it looks like it’s got a few bugs.

I setup two rooms as per the example:

UGridCustomDungeonBuilder::GenerateCustomLayout_Implementation(UGridDungeonConfig* GridConfig)
{
int32 Room1ID;
int32 Room2ID;
RegisterRoom(5, -3, 9, 7, 7, Room1ID);
RegisterRoom(8, -11, 7, 6, 5, Room2ID);
ConnectRooms(Room1ID, Room2ID);
}

… and the corridor that is generated utterly fails to connect them in a somewhat spectacular fashion, though it does put the doors in the correct place :frowning:

Judging from the responses, I’m guessing bugs aren’t being fixed? Is the plugin even being maintained anymore?

You remember that one time tht [USER=“28980”][/USER] disapeared? : P

Hey,

First off, I would like to thank you for this plug-in. Even though I have had the plugin for awhile, I have never tried anything with it. I would like to ask a question if I may. Months ago, you said that you used XYZ dungeon kit to make the underground dungeon. What kit was that again? I have skimmed over the pages and I am not able to find that one post.

Cliff

What happened to landscape modification in Grid? I cant seem to find this option anywhere. Its not where the video is showing, and the example project is ue4.12 :confused: [USER=“28980”][/USER]

Apologies for the delayed response

Hello @DaveStitch Please check this: https://coderespawn.github.io/dungeo…ser-guide-ue4/

Sure, you can use transform rules for this. In the “Get Node Offset” function, you’ll find a pin called MarkerTransform. Use that to determine the existing rotation and rotate accordingly

Hey @AngeIV Thank you for the feedback. I’m working on completely rewriting the documentation and a brand new feature that I’ve implemented in Unity and will bring the UE4 in a month or so (see below for more info) that will give you more control on the dungeon generation process as a designer