0.3.0.00 Is coming soon(ish)
We've decided that the next big update is going to be 0.3.0.00 and the plan is for this to be the update that goes to all of the $20 backers. The $40 option is also going to be removed from our store around the time 0.3.0.00 comes out.
This is not a beta, so much as it is our decision to move into early access because we think the game is getting to be playable. Think of it as open alpha. Of course the game isn't ready right now, we're just saying we think it is close enough that we won't be releasing an update until it's ready for everyone to play...and here is what we're doing for the next update:
We're changing frameworks
We wanted to put a load of new UI stuff into the next patch and we still intend to, but that requires a lot of artwork to be made so I got a bit idle and started tinkering with some things. You know how tinkering often ends up. Well, this time we've ended up tinkering with our core platform: XNA
Problems with XNA
Alright, so everyone knows XNA was abandoned by Microsoft and it's no longer supported. Clearly you can't even make a decent game with it anymore right? Well actually, what Microsoft made was a pretty damn good managed framework for DX on windows. It used some old tech like an old shader model etc, but overall it still does what you want a framework to do: handle the graphics hardware while you write game logic, and it does a pretty good job of it.
Of course, this section is titled "Problems..." so obviously I'm not here to make an XNA sales pitch, the truth is we maxed out XNA's potential and needed to grow out of it to continue future development. XNA was built to run on the original XBox, and it imposes the following limitations:
- Thou shalt not compile to any version of .NET greater than 4.0 - which means the large object heap performance sucks, and since space ships and space stations use massive chunks of memory to store their pixel data, that causes all sorts of memory issues.
- Thou shalt not compile for 64 bit - which means you get about 2 gigs of ram. I say "about" because we are seeing OOM exceptions before hitting the 2GB image size.
- Thou shalt be restricted to shader model 3.0 or earlier - simple rules here, if the XBox can't draw it, nobody can. If you think the game looks good right now, take a moment to consider that it's written on 12 year old technology.
- Thou shalt not modify your visual studio project to try and get around these restrictions - seriously...XNA is a VS extension. It doesn't just restrict options, it removes them, and when you disable the extension your project no longer loads.
So the solution is Monogame maybe why not?
Monogame certainly has advantages. For one, it's designed to be a drop in replacement for the XNA framework. Same syntax, same naming conventions, same functionality, just change some references and recompile right? Of course not, there are lots of little gotchas in there, however the promise is good. With Monogame instead of XNA we would have access to any .NET framework version, 64 bit, and any target platform we like. The most impressive of which is obviously the 64 bit which gives us access to potentially 128 Terabytes of ram....of course I'd be happy with 4 gigs. We actually have the game running pretty consistently at about 1.6GB right now, so raising the ceiling from 2GB to even just 4gb guarantees added stability, speed, and the room to add in more features.
Here's some thoughts on what I might do if I had more memory to play with:
- Simulate other sectors - right now we can very easily hit the memory limit just storing all of the objects in one sector. That's because every ship in a sector has a fully mapped interior with crew wiggling about inside. We already have to be careful about things like station instantiation and terrain spawning because of this limit. Note that currently a sector doesn't use more than a few hundred MB, but since the game as a whole is already so close to the limit we have to be careful regardless. Even another GB of ram would mean 20x as much space for storing sector information.
- Simulate stations all the time - currently we have to shut down a station's interior simulation when you leave because even a single station interior can take up a huge chunk of ram. That's a good part of the reason stations can't be as dynamic as ships with collision and damage etc.
- Render multiple sectors at once - we could make sector edge transitions truly seamless if we could store nearby sectors in ram.
So now's the part where I tell you that we started work on migrating to Monogame already. Yeah we just went for it.
This patch gon' take a while
So far we managed to compile on the new framework. We have the engine, the extensions API and our extensions all migrated to Monogame, and we found replacements or solutions for all libraries that were XNA only. That last one took the longest. We have everything running on .NET 4.5 and with 64 bit support, however we are far from having the game working or playable because of the shaders. Turns out shader support in Monogame is both way better, and also kinda strange, so we are going to have to spend some time fixing all of our shaders before the game will be able to render fully. Our initial impression is that we are going to move to at least SM_5_0 or later, and I promise we have some fun things planned for the new graphics power this will unlock.
The good news is that while all of the shader stuff is being worked on, my hands will become somewhat idle again and so I have all sorts of little plans for gameplay tweaks and features to put in while we work to get rendering fixed. I've already put in a few new things, and I have plans for more. Of course that means there will also be a lot of testing to do once we have all the shaders ready.
Anyhow, all of that means we're probably not going to be able to release an intermediary patch between now and 0.3.0.00 like we had planned. We feel like polishing new features on the old XNA client is only going to be a step backwards in overall progress. The Monogame release will take a bit longer, but it should be faster, more stable, and it will hopefully solve a number of the issues that we recently found in XNA that we had no better way of fixing. Also this has the benefit that none of the $20 backers will have to install or otherwise deal with the XNA framework ever. From the moment they first try the game it will be running on a modern framework.