Hey everyone,
I hope you’re all doing well!
Since the last update, I’ve been reworking the framework that controls block height and elevation.
Block Elevation
Until this update, each block was actually a tall model regardless of its elevation. If you selected the invisible terrain, you could see how tall the blocks were. You may be wondering why the blocks were tall in the first place. The short answer is that the tall blocks helped make the system more performant. If all I do is translate the blocks up and down, I don’t need to rescale a block or procedurally regenerate a mesh.

When I first started working on Battle Map Studio, the Unity DOTS framework was still in its infancy (after 3+ years, DOTS is still experimental…), so scaling a physics object like a block wasn’t exactly straightforward. When using the typical game object Unity setup, scaling a cube and its collider would be trivial, but when working with entities, it’s a little more complicated. Essentially, the block mesh and collider are two components that need to be managed separately. Throughout development, there hasn’t been a reason to change the block height/elevation system so I kept it as is. Until now.
After I added custom asset importing, I thought about what big feature I’d like to tackle next. Going down the list, I came to one feature that I knew would be exciting but also probably cause a lot of headaches: map layers.
Like custom assets, it was necessary to add map layers iteratively, with this being the first of several updates on the path toward full integration. What I needed to address first was how elevation was controlled and displayed.

To get the base layer functioning, I needed a basic framework for map layers so that blocks, plants, and characters would be correctly positioned vertically. In this update, I added support for the base layer, which controls the Ground Level, Base Block Height, and Elevation Step.
I redesigned the terrain options window to include three tabs, one of which includes the
three new base layer options.

The Ground Level setting changes the base vertical position that each block and its components. Changing the ground level moves the entire map (except the terrain plane) up and down. What’s cool about this setting is that enables you to build floating maps and underwater maps!

The Base Block Height setting changes the height of each block at zero-elevation. This setting makes it easier to slightly raise or lower the environment off of or under the ground level.

Finally, the Elevation Step setting changes the vertical height difference between each block elevation. Now that the elevation step is customizable, it’s so much easier to create smoother hills or sharp cliffs.
As I mentioned previously, this update marks the starting point of map layers. In future updates, I plan to add support for multiple layers, layer visibility, and additional layer controls. I am very excited about map layers because they will unlock so many more new possibilities: caves, multistory buildings, world maps, layered props, and so many more!
Here are some other updates:
- Lava, quicksand, and murky water can now be set as the terrain type.
- With the addition of elevation step controls, the elevation step models have become harder to work with. Varying elevation step heights would mean I'd need to either procedurally generate steps (performance intensive) or scale the step model (looks strange and distorted). For now, I've disabled the generation of the block step model, which actually improves performance quite a bit. In the future, I plan to reintroduce block steps, but in a way, that's more customizable.
- Changed the Isolate action hotkey to I instead of F.
- Removed the De-isolate and Unlock hotkeys. Instead, pressing I now toggles block isolation, and L now toggles block edit lock.
- Pressing F now centers the camera on the selected blocks.
Fixes
- Fixed a bug where brush target objects would be duplicated in some cases.
- Fixed a bug where the water tile could be selected as the default block tile type.
- Fixed an organizational issue where the runes were not correctly split into three different sub-groups (blank, symbols, images).
- Fixed a bug where generating large mountains would not trigger an update of the view for long enough to display all blocks created or changed.
- Fixed a visual issue with the brush target render queue where it would not render underwater.
- Fixed an input bug where the pivot position would not by default be set to the top of a block in the center of the screen.
- Fixed an input issue where pressing down on a slider handle would typically change the value slightly, even if the mouse had not moved.
- Fixed a bug where using the image wizard would not immediately update the environment.
- Fixed some minor visual issues with the brush and brush component movement.
- Fixed a bug where choosing the camera pivot position when multiple blocks are selected would use the first selected block instead of the center of the blocks as the pivot point.
- Fixed a bug where adding or removing a local file in the landing panel would not refresh the file view.
That’s it for now – hope you all enjoy this update. Stay tuned for more updates on map layers!
-Bradley
