OpenLoco v25.03 has been released! This release had 9 different contributors! We have been focusing on the Company AI code for this release and are hoping that all of the AI code will be completed within the next few months. After that is completed, we can start looking into making the AI better. I also had a look into how far we are from completely reimplementing the game and I think we are roughly 92% complete! 🎉 We are entering the end stages now!

For a complete summary of changes, please find the OpenLoco changelog on GitHub.

Company AI

I implemented almost all of the initial company AI code. This code decides what the AI should do. First the AI picks from a list of ‘thoughts’ which can be things like ‘Transport cargo between two industries by rail’ or ‘Create a loop around a town for transporting passengers by bus’. It then tries to find a suitable location to apply this ‘thought’. It will then check to see if the ‘thought’ matches its predetermined play style (yes, who knew AI had play styles!). Finally, it will decide on the types of track, station, vehicle etc. required to complete the ‘thought’. It has then completed the initial setup and enters the estimation phase.

In addition to the initial company AI code, I also implemented the code for vehicle placement. There wasn’t anything too special in this code, but one interesting note is that AI, if they fail to place a vehicle, will try again at a random location within 7 tiles of their desired location. This may cause them to place vehicles on road that is unconnected to their desired route!

(#2969, #2985, #2993, #3013).

UI Refactoring

@ZehMatt and @AaronVanGeffen continued their UI refactoring work. This month it was using our new label widgets more, simplifying widget state and reworking widget positions. @ZehMatt is confident he can complete the UI refactoring before I complete the Company AI… we shall see! With the latest changes to the widgets, we have finally removed the ability of a widget to be both ‘enabled’ and ‘disabled’, a state which logically you would think wouldn’t exist.

(#2960, #3014, #3015, #3035, #3036, #3040).

Open Graphics

@shudaura85 has added replacement walls for all of the original walls and created a replacement interface skin. @Phosphorus551 added a replacement Re 4/4 locomotive. These are all automatically available in the latest release so feel free to try them out.

New interface skin, Re 410, all new walls

Miscellaneous

@spacek531 has been renaming a few unknowns, trying to standardise field names and removed a broken unused feature of vehicles (#2975, #2988, #2990, #3004, #3005).

@LeftOfZen added a helper enum to demystify one of the game commands (#2976, #2977).

@LeeSpork fixed a few naming mistakes and UI mistakes, particularly with bankruptcy warnings (#2968, #3003, #3009, #3012, #3018, #3021.

@DC-4444 fixed a mistake in the vehicle reliability calculation that I had made many years ago (#3043). Turns out the logic for it was quite counter-intuitive, so we’re thinking about changing and expanding reliability calculation in the future.

@ZehMatt cleaned up a few parts of the code, leading to less allocations, therfore making things marginally faster. More importantly, the code has become more maintainable as a result (#2998, #2999, #3000).

Updated: