Update 52

Garret is currently busy with moving to a new place, so I’ve used this week to do some more experimental technical work.

Probably the biggest and most important system that’s still entirely missing is the scenery visibility checking. I had done some initial tests a couple months ago though, and this week was a good opportunity to push it a bit further to figure out what we can do with it.

Here’s a debug screenshot:

Every white line here connects a path tile with the scenery items that are visible from that spot, taking occlusions into account. Of course it’s just a rough approximation, and it has only been done for the rock objects here for testing purposes, but as you can see that’s still a slightly crazy amount of calculations that need to be done.

You can imagine that it’s not a great idea to test every path tile against every single scenery item in the game world - a method for quickly getting only nearby objects relative to a given point is needed. This can be achieved using space partitioning: for example, imagine that the game world is divided into two halves, A and B, and you have done some calculations beforehand to figure out which objects are inside half A and which are inside half B. If you now want to know which objects are within a certain range of some point you first check how far away that point is from your two halves - if one of the halves is further away than the range you’re interested in, you know that all objects inside that half are outside the range as well and you don’t need to do any distance checks against them individually. Nice!

Now, instead of using just two halves a better and slightly more sophisticated approach is to use a hierarchy of ever-smaller cubes that partition space more fine-grained in areas with lots of objects. This structure is called an Octree, and it’s one of the usual solutions for doing space partitioning (see the linked Wikipedia article if you’re interested in learning more about it!).

To my own surprise we so far got away without using one, but we rarely had to do checks against nearby objects so far (e.g., for checking collisions when building something new - this is only done for one single frame, and checking against every single object in the game world was fast enough so far to not cause any overly noticeable lag).
There are so many scenery visibility checks to do though that it was necessary now, and we would have needed it for bigger parks anyways.

Here’s what an octree looks like in action:

And with that the performance of doing the visibility checks is in a feasible range now (and some older code received a performance boost too!). The main problem left is that recalculating everything when loading a park still takes too long, but before working on that we should figure out for which kinds of objects we’ll use these visibility checks anyways (probably not for every single little stone?), and how much they add to the gameplay.

Update 51

We added a mode that visualizes guests happiness:

It helps with spotting unhappy guests so you can check what complaints they might have. Or maybe you want to pick just the happy guests to get some praise for the amazing park you built ;)

It also helps us with debugging and balancing, actually, since we can more easily see ourselves now how guests react.
And it looks pretty cool.

And of course we added the Suspended Coaster that Garret modeled during his art stream this week:

Watching it swing around the corners is quite fun!

The above screenshot also demonstrates that tracks and some other things received a slightly more metallic look.

If you missed this months live streams we now got the time lapse videos for you! Here’s the Teacups:

And the Suspended Coaster:

Update 50

Art Stream

Hey, there’s a second art stream happening this month! As usual: on Wednesday, Garret creates some nice new Parkitect art live on his Twitch channel. We’re starting one hour earlier this time though - 12pm to 2pm.

Devlog

This week, we worked on hedges and fences.

You build them similarly to paths using click & drag:

They automatically snap to the closest tile edge.

At first we tried implementing them tile-based, like we did with the park fences, so there’d be one model for a flat fence, and one model for a sloped fence, and it’d place the correct one and rotate it depending on the terrain elevation. However, with hedges it quickly became clear that this wasn’t the best approach, since they need to follow the terrain shape pretty closely to look good, and we would have needed to create and manage quite a bunch of different tiles.

So in the end what we did instead is to have just one single flat hedge/fence model and warp that to match the terrain shape.

We got a nice selection of hedges/fences now, and adding more is pretty simple.

(The hedges are custom-colored by the way, just like the trees)

We also added these topiaries. They can be build off-grid, but sometimes you want to build them on-grid, for example when placing one precisely next to a hedge. We made it so you can hold a button to snap them to a grid:

You can build some nice gardens now :)

And we improved last weeks zone visualization to more clearly show the boundaries:

Update 49

The plan for this month is to focus on putting more content into the game, ideally making use of the features that we already have.

Here’s the Teacups ride from this weeks livestream (timelapse coming soon):

And we started working on different terrain types!

(We finally fixed that gap in the path between the ride platform and entrance/exit :D)

No transitions between different types of terrain yet, but we’ve got a rough idea how it might work.

Also started working on a zoning tool:

You can utilize it as a sort of planning tool, apart from that it doesn’t have much use yet.

Garret also made a set of new scenery objects that are not in the game yet. Hopefully they will be soon!