OpenSAGE Dev Diary #5 (2018-01-07)
OpenSAGE is an open-source re-implementation of the SAGE game engine. SAGE was the game engine used in C&C Generals, C&C Generals Zero Hour, Battle for Middle-earth and its sequels, C&C 3 and its sequel, and Red Alert 3 and its sequel. I’ve been working on OpenSAGE for 6 months, and made some good progress, so I’ve started this series of blog posts to talk about what is happening in the project each week. You can also star or watch the OpenSAGE GitHub repo for a more real-time view of things.
Progress this week
The last two weeks have been exciting ones for the OpenSAGE project. For the first time, as much has been done by other contributors as by me, which marks an exciting turning point for the project.
This week’s contributors (other than me):
In the last two weeks:
I simplified the render pipeline, because it was getting unnecessarily complex.
I parsed BFME I and BFME II
.mapfiles. It turned out there were lots of new and modified chunks for these games:
Teams. There aren’t any existing specifications for these chunks so I had to figure them out by hand. BFME scripts have a few new fields, like
Invertedand some related to sequential scripts. There’s a problem with terrain tile texture blending in BFME maps that I still need to fix, as you can see this in screenshot:
Stephan implemented a viewer for .ru files.
.rufiles store the raw geometry for APT UI screens, and this was a major stepping stone to the APT implementation that Stephan is continuing to work on.
I parsed more BFME
.inifiles. These are obviously not required for Generals, but I find it helpful to get a detailed overview of other SAGE games, so I can better design some of the engine abstractions.
Stephan updated the Xunit NuGet package - a small but nice bit of maintenance that makes tests run more reliably.
Paavo added a project for the game executable. This is the start of something that will eventually be the way to play games using OpenSAGE. For now, it launches the Generals main menu with the background scene (“shell map”) underneath.
I started a refactoring of OpenSAGE’s scene framework. Up to now I have been using a simplified version of Unity’s
Componentmodel, but this doesn’t really match how SAGE originally worked. So I’m changing things about a bit, in order to provide a simpler and more stable foundation going forwards.
In non-development news, we now have an OpenSAGE Discord server. Follow that invitation link to join. We’re already having lots of lively discussions, so if you’re at all interested in SAGE games or the OpenSAGE project, please join us.
I also found a mention of OpenSAGE on a Russian C&C website, which is pretty cool. Considering how little effort I’ve put into spreading the word, it’s nice to see that people are hearing about it.
That’s all for this time - until next week!