Openage Development News: August 2023

Welcome to our monthly openage update. As we wrap up for release v0.5.0, we can talk about a few quality-of-life and speed improvements that happened over the last weeks.

Tales of Renderer Troubles

In last month's update, we announced the implementation of a stresstest for the renderer. This has now been added in form of a simple render demo that incrementally adds renderable objects to the render loop and logs the current FPS. It's very bare bones, but it gets the job done:

However, while playing around with the first few stresstest runs, we noticed that the renderer performance was extremely bad (not to say abysmal). It barely managed handling 400 objects with 30 FPS and there were massive slowdowns after only 100 rendered objects. Keep in mind that the objects in question are not just units. They are everything that needs to be displayed in the game world: buildings, trees, birds, cacti... If 400 objects were the limit, we would run out of frames pretty quickly in a real game.

So we set out to investigate and fix the bottleneck. It turns out that there was a call to the Python API in the objects' frame update. Every frame the renderer would check its asset cache to see if the texture required for a render object was already loaded from disk. The cache lookup would resolve the texture path, initiating a Python call and introducing a massive overhead. We have since removed the calls to Python and the stresstest now easily manages >3500 objects at 30 FPS - almost 9x as much as before.

New Startup Flow

In the new release, we want to make the initial startup more user-friendly, so that it's easier to get the engine running. Well, maybe you should imagine large quotation marks around "user-friendly" because the engine is very much not ready to be used by the general public. However, we wanted to make sure that at least the people who get as far as successfully compiling everything are not greated with crashes.

To accomplish this, there is a new CLI startup flow that guide users through the initial setup phase and the conversion process. Common installation folders for games can be automatically searched, so that it should be easier to create usable modpacks no matter which AoE game or release you have. Even if no installation is available, the converter is now able to download the AoC Trial Version as a fallback. We also made sure that the engine works with all game releases.

Units from all games

What's next?

After release v0.5.0 is done, we will do a brief planning session to set the milestones for the next months. It's possible that we will prioritize removing legacy code in the next minor release and take a step back from adding new features until that's done.

Questions?

Any more questions? Let us know and discuss those ideas by visiting our subreddit /r/openage!

As always, if you want to reach us directly in the dev chatroom:

  • Matrix: #sfttech:matrix.org

links

stalking