The original Wing Commander's birthday is on September 26!. Since I've run out of time for the CIC birthday, I'll give it some more time in the oven; but hopefully it shouldn't be too far off. 🤞 I'm now aiming for a few weeks from now, so we'll see how that goes.
It's something which I plan to implement gradually in layers, but yes - ultimately some kind of dynamic/strategic campaign system is exactly the sort of thing I'd like to implement. The current plan is that the first layers of that will actually be released prior to the WC1 campaign being fully playable; i.e. simple preset or dynamic scenarios to test things out.Speaking of dreams, I think my ideal Wing Commander game would have an Armada-like strategic layer, but with a dynamic generator that spits out pilotable/autoresolvable missions similar to WC1/WC2 for when two opposing fleets are present in the same system. Would this kind of thing be within the scope of Confederation, or are you strictly focussing on recreating the 'classic' story-driven experience of the originals?
I've been working on it on-and-off since 2016 or thereabouts, but posting about it (or more the community response) has been a big motivation boost.I'm still somewhat in disbelief at how this whole project just appeared out of nowhere for me.
New game modes, missions, campaigns, art, translations and so on wouldn't have to obey the limits of the original engine, since Confederation isn't based on the original game engine(s) at all; new content isn't stored in the old formats.One more thought that came up when you mentioned setting up the core systems for easier expansion later on: If you're going to support a strategic layer, it might be a good idea to allow each star on the hyperspace map potentially contain more than just one planet, unlike Armada. Even if that's not how it'll actually be implemented in the beginning, having the code in place to eventually allow some back-and-forth fighting within vital and heavily populated systems seems like it could lead to some really fun gameplay.
Thank you so much for this write up. Repacking sprite sheets from 1991with GPU driven genetic algoritms to save memory calls is a wonderful encapsulation of so many programatic and hardware trends. I teach CS and it's going to be very hard not to talk about this in class tomorrow.Just thought I'd post a quick progress update, mostly probably-dull semi-technical stuff - sadly some contract work is kicking my butt at the moment, so the 26th is looking kind of dubious... But things are still progressing steadily!
I'm currently knee-deep in the revised audio system, which (amongst other things) I'm hoping will be able to render the OPL2 (Adlib) sound effects and music purely from the original data. Things seem positive, but I'm not finished with it yet. My previous effort involved using some external data to send to the OPL chip emulation code, but it was a little janky and not ideal. MT-32/CM-32L emulation is already re-integrated and working (bring your own ROMs as usual ).
Another thing I've been working on improving is the texture atlassing, which I'm using to support quite a broad set of GPUs (e.g. most from around 2006 onwards should work, plus weaker embedded/Intel ones). This is quite basic stuff, where you pack multiple textures into a single larger one, so the renderer doesn't have to swap between them while drawing - since as a rule of thumb the more things you can draw in one go (in one "draw call"), the better the performance. Even the most retro graphics can easily bottleneck on a top-of-the-line GPU without taking this sort of thing into account.
Creating atlasses is more often done using dedicated tools and then shipped with the game, but since Confederation loads directly from the original game data I decided to pack the atlasses on the fly. For instance this is the atlas in video RAM while running the OriginFX logo scene:
View attachment 13343
The generated atlas is different every time a scene starts, since it's assembled with some randomisation involved. On the technical side there's actually a fair bit going on to make this happen efficiently; it uses k-d trees and a genetic algorithm to hone in on an optimal solution, using all CPU cores to do so. It also crops out empty border pixels for each sprite, and pads out the colours to make sure there are no artifacts when rendering; here's the same atlas without the alpha channel:
View attachment 13344
Anyway that's it for now - maybe some of that was interesting to someone out there ; next update should have some gameplay video(s), if not the first test release.