How To - Create Custom Theme

Updated 4 months ago

Setup

1. Requirements

  • To build custom Map Generator content you first need to setup Unity with Atlas, you can do so by following this tutorial - Link
  • It's important that you have 1 Unity project per Map Generator Theme, build times can be very slow with unused content in the Unity project, so make sure you clear Unity of any unused assets that aren't apart of your theme
  • Any assets can exist in sub folders as long as they are in their respective package folder

2. Importing Map Generator to Unity

  1. Download the Map Generator SDK unity package file: Download here
  2. Go into Unity Editor and right click the Project tab then Import Package > Custom Package..., navigate and select the SDK unity package file you just downloaded
  3. If everything was properly setup you shouldn't have any red errors and are ready for creating a package

3. Creating Package

  1. In your root Assets folder in your Project tab, create a new folder of the name of the theme you wish to setup e.g. ExampleTheme
  2. Open your new Theme folder in the Project tab and Right Click in the Project Tab and go to Create > Map Generator > New Package, a new file called Package should appear. Hit enter and leave it named Package. Very Important that this file isn't renamed and remains in the root of your theme folder
  3. Click on the new Package File, in the Inspector tab there should be a list of editable options you can fill out. The important 3 are:
    • Theme Name - The name that appears in the Map Generator when selecting this theme
    • Theme Description - A short description of what the theme is, e.g. A desert town
    • Theme Preview - The preview image that appears when a theme is selected, 16:9 aspect ratio, this has to be a sprite which can be set in the Inspector when the image is selected in the Project tab
  4. At the bottom of the Inspector with the package file selected you should see a Build Package button, this will build the package and all of its content within its folder. (This will also build all other Packages in the project)
  5. Navigate to your Project folder in windows and find the AssetBundles folder, here you should find your compiled theme ready for the map generator. The file should be labeled with your package name, e.g. ExampeTheme.mapgen
  6. To load your Package into the map generator, it can be placed in any mod folder within your games plugins folder, which means it can be packaged with other mods if wanted.
  7. Create a mod (Not covered in this tutorial) and include the theme .mapgen and .manifest files within that mod and the map generator will automatically find them

Creating a Theme

Package - Map / Terrain

Textures

The visual and effect components of the terrain, set Primary texture to None for it to be ignored. Each can be assigned with a unique texture or the same texture multiple times.

  • Primary - The main texture that will appear the most across the map
  • Secondary & Tertiary - Both of these textures are randomly scattered throughout the map to help break up the primary texture
  • Scale - Affects how much the textures will loop
  • Normal - Normal bump map that can be optionally assigned

Atlas Mat Def

  • The Physical properties of the terrain for bullet reactions and other mods like Player Footstep effects

Skybox Model

  • Skybox - A GameObject prefab spawned in the center of the game world and scaled to the same size as the map, it assumes the center of the skybox is 1x1x1 in size. Anything within the 1x1x1 would be apart of the game world and anything outside of the 1x1x1 would be on the outskirts of the terrain

Audio

Used for ambient background sounds

  • Background Audio - The audio clip that will play on loop forever
  • Audio Indoor Volume - How loud the background audio will be in Reverb environments that are considered indoors
  • Audio Outdoor Volume - How loud the background audio is when in reverb environments that are considered outside or when the player isn't in any reverb environment

Package - Models

Themes are made up of lists of Game Object prefabs that spawn into the world, each category performs a different form of spawning of objects.

Model Description Internal
Hubs A single structure that sits in the middle of the map and often acts as the starting position for Supply Raid A single hub is randomly selected from all enabled themes
Interior Props Props that only spawn inside of structures, they are assumed to be about 1x1x1 in size Props are randomly selected and filled into all structures by the % setting amount randomly
Exterior Props World props that only spawn on the terrain that aren't environmental They can only spawn on terrain and are randomly selected
Environmental All external environmental objects such as trees, rocks and bushes These objects can only be spawned on the terrain and are randomly selected
Terrain Objects that serve as unique terrain elements such as a hill, cliffs, large rocks or some other terrain piece that serves as a surface for other objects to spawn on Spawned before all other game objects and function the same as the generated terrain
One Of A Kind A one off unique Game Object that spawns randomly in the world, can be anything but spawns after all terrain is generated. Used for unique objects such as a landmark or unique structure Selected randomly from all loaded themes

Materials

Materials or "Terrain Materials" are assigned in the package file, these materials receive the same material data that the terrain is given allowing for smoother transitions between the terrain and objects. This also allows for themes to override the visual look allowing everything to blend together no matter the theme being used.

To setup a material to work with this system, you first need to set the shader to Alloy/Vertex Blend. Then assign this material to anything you wish to use the terrain materials for, then add the material to the theme's Package Terrain Materials list.

The distribution of Terrain material textures is determined by the Vertex color on the mesh:

  • Red - Ground (The main looping texture for the terrain e.g. Grass)
  • Green - Ground Scattered (Secondary ground texture to break up the main texture e.g. dirt)
  • Blue - Slope (Used for cliff faces and other more vertical surfaces)

Package - Landscapes

Landscapes is the system that changes how the terrain generates its form

Creating a New Landscape

Landscapes are confusing at best and require a lot of tweaking to get working and understand.

  1. You can create new Landscapes by right clicking inside your package's folder in the Project tab and selecting Create > Map Generator > New Landscape and naming it anything you want
  2. Set a Title, Description and preview image to what ever best describes your terrain.
  3. Each of the generation uses Curves to adjust the generation information, these are made up of Time and Value. For generation to properly work each curve needs at least a linear 0 to 1 line from Time & Value = 0 TO Time and Value = 1. There is a default one at the bottom of the curve editor screen with a green line going from the bottom left to the top right.
  4. A way to view this curve is that Time represents what input height data is received from 0.0 to 1.0, this comes in the form of perlin noise. Value is what the curve will do with that data, so if 0.5 Time inputs, we can set it to default 0.5 OR do something different like 0.75 to increase the height of that terrain point.
  5. Mountains are for larger height points layered on the terrain, you can enable or disable it. Adjusting the scale affects the depth and width of the mountain and the strength affects the height
  6. Detail Noise is the minor bumpy noise to keep the terrain interesting in the smaller scale, this is less effective with the terrain resolution so low but it is optional. Like Mountains the scale works the same