It has been three years since Andrew Lamb (Daffyflyer), Jayelinda Suridge (Nortala) and myself have taken a proper break. I am returning to my homeland for my 30th birthday.
I am personally pretty happy with how the UE4 launch went; I expected there to be problems, as there is so much more variety in hardware and setups that we could hope to replicate ourselves in a small studio. Thankfully as we approached launch, we learnt that BugSplat supported UE4 and that saved us. UE4 itself cannot be configured to report back to us very readily. They are working on a new system, and it isn’t ready yet. Thanks to all of those lovely crash reports, we could rapidly fix up issues, here is an excellent graph of crashes per day:
Our new fixture system was highly threaded (2 threads per fixture when it was conforming), this hammered lower spec systems when loading a car save with many fixtures on it. This highly threaded system also exhibited some race condition issues that could leave the fixture threads working on deleted meshes causing crashes. The new system uses a centralised job system and the fixtures processed in a queue by the worker threads. On a slower machine, loading a car with a lot of fixtures you will see them ‘pop’ into place over a few seconds, as one by one, they get conformed.
(Created by ‘Clint Eastwood’ http://steamcommunity.com/sharedfiles/filedetails/?id=487209398)
Ah yes, the dreaded Lua Errors. Now they have basically vanished, no-one mentions them. This is one of my favourite changes with the UE4 port. The view (the UI, the engine meshes, car meshes) are now properly decoupled from the model (the Lua simulation). There is now a solid interface layer allowing the view to poke, prod and examine the model in an elegant, error-free fashion.
In the Kee engine, as everything was in Lua if there was a fault somewhere in either the simulation or the interface, the game would stall. If this error corrupted a state, you could then acquire a new error that would hit every frame. Womp-Womp, time to restart the game. In the UE4 version, if the UI tries to grab a value that doesn’t exist, and the UI code doesn’t handle it, that is fine. A placeholder value will be acquired instead. If an action like choosing a part, or a slider throws a Lua exception. The exception is then logged and the game will continue. As only the simulation is running in Lua side, the subset of issues has substantially decreased. The simulation code was already the most robust, and the port made it even more so. As the simulations had to cope with missing data or crazy bogus data while the gaps were being filled. My favourite was the car that was lifting the rear wheels off the ground at moderate speed. Due to a wing being incorrectly saved and placed 30m in front of the car.
Over the years, the Kee engine was full of muddled waters between the UI doing some the work of the simulation, and UI built on a system pushed beyond its limits. It was a great to feel that burden of technical debt lifted. Adding polish, or refining a system is no longer like squeezing blood from a stone it once was.
While we are away, Hamish will be working on adding new fixtures and bringing in more car bodies. Isaac will be doing more fixes and working with Rob to build the UI for the new Light Campaign. We have had some great ideas for improving the project management flow and revising a car series over many generations.
Time for us to escape our New Zealand winter for a bit, and enjoy the English summer. Hopefully, it hasn’t all been used up in June.