Dungeon Master Build Jam 2022!
Itchio Link - Dungeon Master Asset Pack (Build Jam 2022) by CCCreation for $50,000 Crayta Build Jam - 'Dungeon Master' - itch.io
For screenshots of included assets please click this link!
CC Creations Contributors -
TheMadraver_
Jackus_J
RayqwayZ
RubikCubeMan
About The Package:
To download the map search “Dungeon Master Asset Pack” and click Install!
For Designers, we have set up the pieces in a way that they can interconnect within their respective themes seamlessly (via a grid based system). However, this is not to say you can’t mix them up. It might look slightly more awkward, hence why we have also included a transitional straight path from the Castle Dungeon to the Courtyard, in case you feel the need to bridge the themes more seamlessly.
What can this package be used for?
The set pieces aren’t particularly filled up so there is plenty of room to remove or add any additional assets you may like to adjust the map to your liking. This allows the package to be used for a plethora of genres besides DnD (RPG) such as Treasure Hunts, Shooters & Horror. The set pieces can also be arranged a number of different ways to create a bunch of different layouts.
A catalogue of each of the themes are compiled below, which detail the set pieces that are in each theme as well as an example of how they can be used.
How To Use The Package As a Designer
To create your very own dungeon complex, simply find which module you would like to use from the template tab and drag and drop it into the world. Each module will easily slot together in a grid like fashion as they are all in uniform scale with each other. This is for people looking for a quick and simple way to build levels.
For those wanting to take these assets and their game to the next level, below we have compiled steps for development of procedurally randomly generated dungeons using these assets.
Developing Random Dungeons
Each of the Dungeon assets has been built to allow for the development of procedurally randomly generated dungeons. (The package does not currently support this)
This package does not include any code to randomly generate any dungeons. You will need to write that to suit your needs, however, the assets inside this package include some configuration to help make your life easier.
Getting the Dungeon Parts
Firstly, you want to figure which parts you want to use in your dungeon. You can find each of the parts available to use in the list of templates. Once you’ve figured out which ones you want to use, you’ll need to add these to a table for easy access. For example:
function DungeonGenerator:Init()
self.dungeonParts = {}
table.insert(self.dungeonParts, Template.Find("castledungeon_4way_1"))
table.insert(self.dungeonParts, Template.Find("castledungeon_4way_2"))
table.insert(self.dungeonParts, Template.Find("castledungeon_4way_3"))
table.insert(self.dungeonParts, Template.Find("castledungeon_corner_1"))
table.insert(self.dungeonParts, Template.Find("castledungeon_corner_2"))
table.insert(self.dungeonParts, Template.Find("castledungeon_straight_1"))
table.insert(self.dungeonParts, Template.Find("castledungeon_straight_2"))
table.insert(self.dungeonParts, Template.Find("castledungeon_straight_3"))
table.insert(self.dungeonParts, Template.Find("castledungeon_Tshape_1"))
end
To spawn in a Dungeon asset, you need to use the GetWorld():Spawn(...)
function. Using this you can spawn in your first Dungeon asset. You might want to start by spawning an asset randomly selected from the list above, or you might want to configure a certain one to always spawn at the middle.
Connecting Dungeon Assets Together
Now that you know how to get Dungeon Assets and how to spawn them into the world, now comes the tricky part.
If you’re developing randomly generated Dungeons, you’ll need to know the dimensions of each of the dungeon pieces that you’re placing into the world, so they line up. Fortunately, a lot of the hard work has been done already for you.
Each of the templates has a script attached called “DungeonAsset”. Inside this, it consists of a bunch of properties to make getting information about itself much easier. You can get these properties by doing this:
local dungeonAssetProperties = dungeonTemplate:FindScriptProperty("DungeonAsset")
The properties include in this are:
Additional Cubes
additionalCubesXPositive
additionalCubesYPositive
additionalCubesXNegative
additionalCubesYNegative
These properties define the size of the Dungeon piece. “Cubes” are part of the grid system within the Dungeon system allowing for easy alignment of Dungeon Assets. Each Cube is 1250x1250
in-game centimetres (The standard unit of measurement for Crayta).
If all the above properties are set to 0, this means that the Asset you are dealing with is 1 Cube by 1 Cube. If additionalCubesXPositive
is set to 1, this means that it reaches out 1 more Cube in the positive X direction from the centre Cube. This would mean that the asset would looks something like this: (Up is positive X and Right is positive Z)
Note how the centre of the asset remains locked on a single Cube.
Larger assets may have multiple of them set. For example, if all of the above properties are set to one, it would look like this:
Finding the Doors
The properties that we have obtained above, also include information about the doors on a certain asset that we’ve put into our world.
I suggest copying this code into your script, as it’ll make extracting a list of doors from the template much easier:
function DungeonGenerator:GetDoors(dungeonAssetTemplate)
local dungeonAssetProperties = dungeonAssetTemplate:FindScriptProperties("DungeonAsset")
local doorVectors = {}
if (dungeonAssetProperties.numberOfDoors > 0) then
for doorNumber=1,dungeonAssetProperties.numberOfDoors do
table.insert(doorVectors, dungeonAssetProperties["door" .. doorNumber])
end
end
return doorVectors
end
Then all you need to do is call this method with the parameter of the template you wish to get the door locations for and this function will return them.
The door locations are identified by a Vector. These however do not relate to a location inside the world. They instead refer to the relative Cubes which these doors lead to. As described above the assets included inside the package are all built to dimensions multiples of 1250x1250
.
Using the above logic of Cubes (Up if positive X, Right is positive Z), as the door on the Right here, is one to the right of the centre (0, 0
), we would say that it was located at 0, 1
.
In this image, we can see why a door is defined by the Cube that it leads to, and not the Cube that it’s currently in, as you can see in this example, there is one room with 2 doors. The coords of these two doors would be -2, 1
and -1, 2
.
At the moment, there currently isn’t any assets which allow you to climb vertically, and as a result, the Z coordinate from the above script will always be 0.
Getting Started
Getting started on a project like this can be massive. We’d highly recommend if you want to develop procedurally generated dungeons to start assets that are 1 by 1, and from there work on expanding to the more complex shapes.
The above documentation is for how we would implement these dungeon pieces, if we would develop this ourselves, and if just a guideline. We have also added the DungeonAsset
script as merely a way of Configuring each of the parts - so that when it comes to developing it, you don’t need to configure all the parts yourself. I would highly recommend checking out how each of the DungeonAsset’s are configured, as this would help get an appreciation for how all this fits together.
Enjoy!
-CC Creations Team