Hey all, I’ve made a fair amount of progress on the game over the past month, so let’s get into what I’ve been up to.
“Gary Island” map
One conundrum I had while designing the tutorial scenario was where to locate it (i.e. which map to use and whereabouts on that map). I could have used one of the existing maps but they are all pretty large and “open plan”, which made it hard to lay out the scene for the tutorial. I needed something small with clear boundaries that spatially confine the player.
For a while I had been resistant to the idea of adding another map for the tutorial scenario, but it became apparent that this was going to be necessary, and worthwhile investing the time and effort in. So I decided to make a new map, an island surrounded by water, with a 250×250 m playable area.
For long time followers of the game’s development, I resurrected the water from those old procedural island maps! I was also reluctant to do this actually, as introducing water brings about a whole host of implications (what happens when you go in the water? buoyancy? drag? sound & particle effects? player swimming animations?) So for now the water is beyond the map boundary and is just there for visual effect.
As usual, first I started with making the terrain height map:
Then, painted the textures (reusing those from the other maps):
Finally, added details (e.g. grass) and trees:
Overall I’m quite pleased with how the map turned out. It has a central area (which I’ve used for the tutorial scenario), and other areas that are connected via paths for a bit of variety. I’m thinking this will be good for other scenarios, and also as a general starter map for players.
Water reflection optimisations
After bringing back the water, I needed to do some performance optimisations to the old reflection rendering implementation (water reflections are rendered using another camera with a view that is flipped upside relative to the main camera).
I improved the code by eliminating some expensive per-frame calls (GameObject.Find(), GetComponent(), etc.) and getting rid of GC allocs. I also reduced the level of detail during the reflection render (by overriding the LOD bias, turning off terrain details, and reducing the tree LOD switch distance).
Finally, I added a “video options” setting to make the water reflection rendering only include the terrain & sky, or be turned off altogether (falling back to a reflection probe).
Tutorial scenario
To finish the final iteration of the tutorial scenario, first I had to create a scene in the new map. I laid out all the constructions, checkpoints, and so on for each of the tutorial stages that the player completes in sequence.
Then I worked on the scenario scripting, organising the Lua scripts by breaking them up into the tutorial stages. The scripts are responsible for tracking player progress through the tasks they have to complete for each stage, showing a UI window with instructions (text and videos), and helping the player get back on track if they make a mistake. This turned out to be a huge amount of work, but I think the results turned out really well.
Here’s a sneak peak of the start of the tutorial scenario:
So the tutorial scenario is now (more or less) complete, which is a huge milestone, as that was the last major task before early access release. There’s still a bunch of work to do, but I’m now in a position to prepare the game for release which is very exciting!
Part resizing indicator
I’ve implemented another indicator that shows unit dimension numbers near a part when resizing it with the resize manipulator.
This makes it much easier to see the part dimensions while resizing, as it saves having to look down at the part UI overlay.
Script mods
The script mods included with the game have continued to develop. For example, I implemented a “builder tool extensions” script mod that provides an interface with options for precise part placement.
I also improved and added to the various debug tools, and added a simple “hello world” example. I can’t wait to see what script mods of their own players can come up with!