OpenLoco v23.07 is out! So much work went on this month! As the dev log reads, we’ve focused mainly on game command implementation, working towards multiplayer support 🚂 We’ve also improved compatibility with Windows 11, and stability in general. Please find all details at the release page on GitHub. Happy playing!

Use height instead of width to initialize the RT buffer (#2001)

Recent work on using a hardware backend for window scaling accidentally introduced a bug which could lead to failure to start OpenLoco when using window scaling. This rendered the game unplayable for some. This has now been fixed. Our apologies!

Allow scrolling up and down on steppers to change their values (#2019)

One of the often-cited favourite quality of life features introduced by OpenRCT2, our sister project, is the ability to manipulate +/- stepper values using the mouse scrollwheel. @Broxzier’s work has now been introduced in OpenLoco as well.

Fix Breakpad crash dump creation (#2032)

For a few years, we have used the Breakpad library on Windows. This allows us to handle crashes gracefully, generating crash reports that may be analysed by us developers to find the cause. Unfortunately, a recent refactor of our CMake configuration files led to it being disabled for Windows builds as well. @ZehMatt has fixed this, so crashes are handled through Breakpad once more.

Introduce getClampedRange and getWorldRange (#2024)

As you might image, the game often iterates over map tiles to perform certain calculations over them. This could be as a result of player interaction, e.g. applying a terraform tool, or without player interaction, e.g. calculating cargo generated by an industry. Either way, it is important that the range of tiles is both complete and valid. We have now introduced two helper functions that make sure our tile ranges do not extend outside the map bounds. This fixes a bug that some players reported when trying to change tile textures on the map edge.

Implement more terraform game commands (#1998, #2008, #2010, #2031)

Last month, we implemented the clear land game command. This set up the stage for the other terraform game commands to be implemented. This month, we’ve tackled five more of them: raise/lower land, raise/lower water, and create wall. These do pretty much what you’d expect them to do, except many hidden caveats that led to us spending many hours debugging why our implementations behaved slightly different to vanilla! We should be fully compatible now, though. One more terraform game command remains: the mountain tool game command. And boy, is it a big one…

Implement the build/remove company HQ game commands (#2020, #2021)

Continuing our folly of reimplementing all game commands in C++, we have also tackled the construction of company headquarters! Thankfully, after the terraform game commands, these were relatively simple functions that deferred most of the logic to the general build/remove building game commands. However, having now tackled them, we can start thinking of extending them, e.g. to expose building rotation to the HQ placement tool.

Implement the create/remove town game commands (#2022, #2023)

While town creation or removal isn’t a common occurrence in normal scenario play, both are game commands as well! Our quest to reimplement all of them lead us to work on both. Ultimately, this should make it easier to place new towns in a more organic way as well.

Implement vehicle pickup aircraft game command (#2025)

There are three game commands dealing with picking up vehicles: one deals with road and track vehicles, one for boats, and one for aircraft. This game command deals with the latter. This means we’ve now implemented all three!

Remove window event interop (#2015)

Now that all windows have been reimplemented in C++, we can drop the compatibility layer for interopting with vanilla window routines. This also means we can work towards increasing the amount of windows players can have open at the same time.

Add BH/CH/D/G headers to tile inspector (#2013)

OpenLoco’s tile inspector can be an invaluable tool for debugging tile behaviour. While not yet remotely as powerful as OpenRCT2’s, we make use of it quite often to figure out and label tile fields. This month, we’ve made it a bit more useful, adding headers for base height, clearance height, direction, and ghost flag to the list of tile elements.

Actually use our vehicleOrderInsert implementation (#2014, #2016)

Last month, we proudly touted that we’d reimplemented all route order game commands. Except… we weren’t actually using one of them yet! After changing this, we promptly found an edge case that could lead to a crash. Thankfully, we discovered that one ahead of the release, so it hasn’t bothered any players.

Updated: