Openage Development News: January 2023

We're back with updates from December & January. Despite holiday stuff and being plagued by illnesses, we've made some progress on the codebase.


The renderer now supports a camera that acts as players' view into the rendered scene. It's pretty basic at the moment, but already supports moving around as well as zooming in and out of the scene. There's also functionality to look at a position by centering the camera view on a scene coordinate. The latter should become more useful when there is actual gameplay to center on.

Since openage implements a mixture of 2D (units/buildings) and 3D (terrain) for rendering, the camera can technically be used to display arbritrary 3D objects, i.e. calculate the necessary view and (isometric) projection matrices for 3D rendering. This is probably not interesting for classic Age of Empires gameplay, but we could use it for debug purposes in the future, e.g. to show collision boxes.

Merging Progress & Technical Demos

The current state of the renderer has matured enough that we can merge it into the main codebase now (see PR Link). There's still some things to do, but the structure of the renderer will likely stay the same for now. With the renderer "finished", this means we can focus on the gamestate part of the engine next.

The code in the PR contains a few technical demos that show off the new renderer features and their usage. You can try them yourself, if you want, by building the project and running

./bin/run test --demo renderer.tests.renderer_demo X

in the project folder and replacing X with a number between 0 and 3. For example, demo 3 allows controlling the camera in a basic test scene. That's also where the camera video comes from.

What's next?

Well, how about some gameplay? This is obviously the next step, although it could take us a while to get something playable running. The crucial step will be the implementation of the internal event simulation, e.g. getting input events and converting them into commands for the gamestate. We also need a way to time events with a simulation clock (which is already implemented in the renderer PR) and save them to an event log.


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: