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.
Following on from the previous post, here is what’s been happening this week in OpenSAGE.
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:
-
Paavo fixed parsing of floating-point values in .ini files for locales with decimal separators other than “.”, and fixed a related issue.
-
I simplified the render pipeline, because it was getting unnecessarily complex.
-
Paavo added support for the Origin version of Zero Hour’s registry key.
-
I parsed BFME I and BFME II
.map
files. It turned out there were lots of new and modified chunks for these games:CameraAnimationList
,EnvironmentData
,LibraryMapLists
,MPPositionList
,NamedCameras
,PolygonTriggers
,PostEffectsChunk
,RiverAreas
,SkyboxSettings
,StandingWaterAreas
,StandingWaveAreas
, andTeams
. 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, likeEnabled
andInverted
and 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:
-
Paavo fixed a crash in the Data Viewer that occurred when switching between different assets.
-
Paavo fixed / implemented a number of things related to loading campaign maps.
-
Stephan implemented a viewer for .ru files.
.ru
files 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
.ini
files. 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.
Something pretty experimental... #OpenSAGE pic.twitter.com/6IOaAWTbLY
— Paavo Huhtala (@paavohtl) January 3, 2018 -
I started a refactoring of OpenSAGE’s scene framework. Up to now I have been using a simplified version of Unity’s
GameObject
/Component
model, 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!