My First Omega

Download Alpha and Omega v2.
Binaries as Win32 Installer (486 kB)
Download Alpha and Omega v2.
Source as Visual Studio 2010 Solution (122 kB)

It has finally happened! My first omega-version comes to see the light of day. I didn't even implement my own rendering loop so it is just the default blue screen when creating a new XNA project. Blue is a nice color and Windows had a lot of experience with nice blue screens, but I think that i'll change it to black in the next versions to come. It looks like a boring release but I ensure you, a lot of coding had been done.

P.S. "Alpha and Omega" is just a working title, maybe we'll keep it, maybe we won't.


It is possible to have multiple versions at your computer at the same time without having them interfere with each-other. It may be a bit strange talking about this since we only have one version, but if we didn't implement this from the get-go it would have taken a lot of effort. Needless to say, it is also possible to uninstall separate versions from the control panel. The default shortcut that is created on the desktop will always run the most recent version. Shortcuts to run older versions are archived in a sub-folder in the start-menu. I do have to think about 'clutter'. I have no intention to become like Java where all sorts of different JRE versions are installed on your computer. Nowadays Java likes you to manually uninstall older versions because it is a security risk. Java also tells you that uninstalling older versions may break some application but that you can resolve this by nagging to the author of that specific piece of software[really? yes really]. As a software engineer this is a really cool feature because we like to support every piece of software we make till the end of days... Not! The .NET framework is similar, but at-least they take responsibility if a security risk is found in an older version. Wait, I digress, what was I talking about? O right, clutter. In some future release I should probably make it the default action to replace the existing version with the new one.

The binary release is wrapped in a simple installer, but I've kept in mind that someday we might want to create a portable version. We also need to think of the method to detect that a newer version is available. Just another item to add to my TODO-list.


I decided to implement DRM, but I didn't decide on how to publish the DRM in the source distributions. It is really weird to create an open-source DRM, even if we use online verification methods. For offline, single player games, cracking a DRM is simply a matter of identifying subroutines and replacing them with a new one (even if we use checksum verification or encryption). For multiplayer LAN-games it is often as easy as creating a simple keygen and for online multiplayer it is as easy as emulating a server which is easy as π for opensource projects :P. The first thought that popped in my mind was to make it a challenge. Back in the day I really loved the challenge of circumventing security measures and DRM is one of those systems that gives a hacker a 100% guarantee that it is possible. The downside of this challenge-idea is that DRM-code usually is scattered all over the place. If DRM-code is tightly packed in a single DLL the hacker just needs to identify calls made to that dll and remove it. For this reason DRM code needs to be tighly coupled to code fragments that are vitally important to inner workings of the program. Making only the DRM closed source is for this reason infeasible. The only logical thing to do is to make the DRM opensource alongside with the rest of the code. Hmm I wonder, would this be the first project that is completely opensource yet still uses DRM? So far I only implemented the offline part of the DRM and did not implement any consequences when signs of tampering has been detected. There is nothing to protect (yet) so it should be okay. For the next omega-release I need to start the online verification.

I'm not going to talk about how exactly I build the DRM for obvious reasons (it's a secret!). If you want to know how it works just read the source-code :P. Suffice to say I've used synchonous encryption (DES), asynchronous signing (RSA), hasing (SHA), product key generation and even thrown in a couple of XOR operations just for the fun of it.

What's Next

There are a lot of omega-versions before we can release the first alpha-version. The simplistic goals that we set during the brainstorming session are still far from realization. Hopefully, after two weeks or so, I can read this sentence and say "thanks for all the hard work, past-me". Somehow I think that future-me is going to be angry at me for adding more items to the TODO-list while keeping busy with features that do not contribute to the game. For the next omega-version I'm going to keep busy with adding online verification and payment options. Say what you want future-me, but these are features that can be copy-pasted for any other project that needs payment verification.

Let The Programming BeginDRM - Part 1