Outdoor Environments and Water

To turn a level into an outdoor environment, a few preparations are needed. First, we should add some more outdoorsy tiles on the level instead of the dungeon walls by placing forest_ground, forest_trees and forest_wall tiles using the brush tool. When changing the tiles on large areas, you can use shift+clicking to flood fill areas of the map with the selected tile. Next, if you start the preview, you can probably see that the ground and the sky are not visible. To fix these issues, you need to add a forest_sky and a forest_heightmap objects into the level so that the game knows that the sky needs to be rendered and that a terrain, with a possibility for texture blending and smoothly varying height differences, is present. The placement of these objects don’t matter so feel free to tuck them in any corner of the map that is convenient to you.

To get some more variety into the level, you can add forest_trail and forest_ground2 tiles on the map as well. You’ll notice that, thanks to the heightmap, the textures between these different tiles are smoothly blended. You’ll have to pay close attention when using these though since trying to blend too many different textures within a close proximity is not possible and this can produce visible seams on the textures.

Heightmap and Elevations
heightmapAnother technique that the heightmap enables us to use is, well, height. If you go to the brush tool and pick “heightmap” from the Layer-dropdown menu, you can paint height differences on the level that produces gently rolling hills. Use the Height parameter (shortcut: keypad “/” and “*”) to define how deep or high the current tile is. You can also use the “noise” layer to introduce some very small scale variety to the heightmap to make it look more lively. Left click adds and right click erases noise while the layer is active.

Another more dramatic way of getting height differences in your levels, which doesn’t require a heightmap object and which also works with many indoor tiles as well, are elevation differences. These are defined while you are in the “tiles” layer with the Floor and Ceil -parameters and then painting on the map. The shortcuts for changing the floor elevations is keypad “/” and “*” and with ctrl,/ and ctrl,* you can modify the ceiling elevation. Do note that not all of the tiles support these parameters: if some wall meshes are missing from the elevations, it’s likely that the tile doesn’t support it. You can try out the elevation differences with swamp_ground tiles and setting the floor height to -1. When placing objects, such as monsters or items, you should be careful to add them to the correct height: the H (for height) parameter in an object’s inspector defines the elevation the object will be placed to. The height of one or more selected objects can be easily modified with the “<" and ">” keyboard shortcuts.

Water
There’s two types of water in Grimrock 2: the ocean, where the player can wade around in, and then the deeper bodies of water like the rivers and underground sewers.

To create an ocean shore, you can place a beach_ocean object along the shoreline of the beach and when the heightmap on the beach is lowered to -2, the water is revealed underneath. Make sure to rotate the object correctly so that the open sea is where it should be: the facing of the object should point towards inland.

Rivers, sewers and other water tiles, where the player can fall into and dive around in, are placed as tiles to the map. To create a small pond or a river in your map, you can simply select forest_underwater tile, set Floor elevation to -1 and then brush it on your map. Any level that uses these tiles also needs a water_surface object in the level somewhere and, like with the sky and heightmap objects, its placement doesn’t matter.

With both the ocean and the water tiles, for the reflections to work you also need to define which tiles can be seen reflected off the water. You can do so by using the “reflection” Layer of the brush tool.

In the next tutorial, we’ll take a look at how to use connectors and other interesting components!