The Future of XNA and This Site

Don't Panic

I'm about to tell you some bad news, but don't panic. (Perhaps you've already heard.) Read the whole page before you make any rash decisions.

I'd rather have you hear this from me than some random yahoo on an obscure forum somewhere. The bad news is tempered by some pretty awesome news, and a plan for moving forward.

It's kind of long, so go get yourself a fresh cup of coffee or find a comfy chair, or whatever.

Take a deep breath, and here it goes…

The Bad News

The bad news is, Microsoft has basically announced that they're retiring XNA. That we won't see an XNA 5.0.

And I know you're probably sitting there saying, "Well crap. I've just wasted the last six weeks of my life learning XNA, and now it's all a waste." (Or perhaps the last six minutes, if this is your first time here.)

Well join the club.

I've been doing XNA since XNA was born. I've invested years of my time and effort in it. And I can tell from my intense visceral reaction to this news, that I'm incredibly invested in XNA emotionally as well. Perhaps you are too.

Either way, you came here because you wanted to learn XNA, and now this happens. It's a bummer to say the least.

But it's not so bad.

Don't Abandon XNA Yet

At this point, you're probably wondering what this means. Where to go next. You're probably thinking that if XNA is being retired, it's probably time to move on, and sooner rather than later.

There are plenty of alternative options to take a look at. We'll get to those in a minute.

We're at a very odd point right now. We know XNA is being retired, but the reality is, we don't have enough information to really know what the next best choice is. This puts us into a waiting game of sorts. One that will probably last months longer.

Many of the likely candidates for being alternatives to XNA don't quite fill the void like they should. They're rushing to get themselves into position, but they're not there yet. And they won't be for months.

And then there's the fact that the new edition of the Xbox is pending. We'll probably know a whole lot more about its capabilities and the tools Microsoft will provide to us to make awesome games for it at the E3 convention in June. Until then, rushing to learn an alternative technology may be a very poor move.

The point is, while we know XNA is going to reach the end of the line eventually, there's no rush to switch just yet. We'd be switching to options that currently have some limitations, and perhaps only to have Microsoft announce a new technology that is an effective replacement for XNA.

And the other thing to understand is that while it feels like something bad happened, nothing actually broke here. If you've been working on a game using XNA (or dreaming of making a game with XNA) everything you had planned to do with that game will still work, just like you had thought it would before this.

A Quick Look at Some Possible Options

To help you not panic, I want to quickly outline some of the things that are out there that may be good alternatives, eventually.

MonoGame

Let's start with MonoGame. MonoGame is an open source port of XNA. It runs on Mono.NET, which is the open source implementation of the .NET Framework. They have tried very hard to have the exact same behavior as XNA. I've used it quite a bit, and I can tell you that all of your XNA code works just fine with only a few minor differences.

MonoGame has the distinct advantage of not only running on Windows, but also on Linux, Mac, iOS, Android, Windows 8 (including the Surface tablet and Windows 8 Phone), plus the PlayStation Mobile, and the upcoming OUYA console. That's hard to beat.

The one real drawback is that there's no content pipeline. So building your art assets is pretty tough in MonoGame itself. In fact, the MonoGame people tell you that you should build your art assets using XNA's content pipeline, and then pull them in to MonoGame. So there's a workaround, but it's missing a pretty important piece.

They're working hard to get their own content pipeline up and running, but it will be several months still.

If you think you want to go this route, the best thing to do right now is keep learning XNA. Since nearly everything transfers directly over, just keep going. In a few months, when the MonoGame content pipeline is finished, it will be more reasonable to switch over completely. And if you make your game in XNA, and you're ready to push it out to the world, it is very easy to port it to MonoGame at the last minute.

For what it's worth, though, I've begun the process of porting my XNA tutorials over to MonoGame. Most are identical to their XNA counterparts, but I provide you with what you need to get started, which is the hardest part. You can find them here.

The Unity Game Engine

If you're more of an artist, and you want less programming, Unity may be for you. Unity is a free (mostly) game engine that targets a lot of the same platforms that MonoGame hits.

But I think its worth making a point that Unity is not a counterpart to XNA. It's a game engine. XNA is not. It's a good one, and it may help you make cool games, but I wouldn't say it truly helps you learn how to program games.

Something to consider here is Joel Spolsky's Law of Leaky Abstractions. In short, the Law of Leaky Abstractions states that any time you write a layer to abstract away something and make it simpler, the lower hidden layer still bubbles through. Sure, you can use the simpler layer, but you still need to understand the hidden layer below it. Unity, and any game engine, fits squarely in this category. While you may find Unity useful, it will be tough to truly master game development in Unity without a firm understanding of things at the lower level, like XNA.

It is my opinion that you can't call yourself a game programmer if all you know are game engines. You just won't get it when I try to talk to you about the order of transformation matrices, left-handed vs. right-handed coordinate systems, or vertex and index buffers.

The other thing here is that it, like all game engines, is a framework. And while frameworks help you build things quickly, they place restrictions on what you can and can't accomplish. If Unity can do what you need it to, you're good. If it can't, well, you're out of luck. Which stinks especially bad if you get 80% of the way through your game before you discover the limitation.

I'm not trying to discourage you from learning Unity. As I said, it is a very powerful and cool tool. Indeed, as you'll see in a minute, I intend on adding some tutorials for Unity as soon as I get the chance. I'm just saying that Unity shouldn't be the extent of your game development knowledge. You need to supplement it still with something like XNA, MonoGame, OpenGL, DirectX (more on that in a second), etc.

SharpDX

A third option that I consider pretty intriguing is SharpDX. If you look around the Internet, you'll see a lot of people saying things like, "All you XNA people need to go learn C++ and DirectX. That's what all of the cool people are using." First of all, if you're including the people who messed up the ending to Mass Effect 3, you've got to quit calling them cool. Second of all, not everyone is using C++/DirectX. That's especially so if you're looking at the lighter casual games. (More of the high-end AAA games do so.)

But if you're saying you really think we should switch to C++, you'd better think again. I've been there. It's where I started programming. And where I started game programming. As soon as I got a hold of XNA, I knew I'd never go back. Making games with C# and XNA is actually fun to do. Challenging, sure, but fun. C++ sucks the fun out of game development in a hurry.

I can't count the number of times that I've either gotten an email from somebody or talked to them in person, and heard them say something to the effect of, "I love making games, but I refuse to learn C++ to do so." Like me, doing this just turns what was once a fun and exciting prospect into tedious dull work.

Besides, C++ really shouldn't be a requirement for making cool games. Even if we don't have XNA, we should at least be able to keep C#. (Or really, any other language that's focused on actually getting stuff done.)

Welcome to SharpDX. SharpDX is a (very thin) wrapper around DirectX, making it available in a form that C# (or any other .NET language) can use. And it takes only a very small performance hits in the process. It's impressive, and getting better.

One of the things the SharpDX developers are doing is making a SharpDX toolkit. This is essentially providing code that looks a whole lot like XNA, which translates into getting going quickly.

What I think I like about this the most is that not only can you get going quickly, but then when you feel the need, you can pull the covers back and do DirectX type things.

If you're really interested in game programming, and you really want to get into the nuts and bolts, this is a great option.

Interestingly, like MonoGame, they're trying to build an XNA-like content pipeline, but it's missing still. (Just like MonoGame!) This is, again, the biggest drawback that I see here.

But this is cool: if I'm not mistaken, MonoGame and Unity are both at least partially built on top of SharpDX. So going with this option really gets you under the hood of these other tools. And since you can get a feel for DirectX, if you end up being one of those people and decide to jump to C++/DirectX, you'll be in great shape.

Like with Unity, I don't have tutorials for this yet. (Well, I sort of do. They're just not available to you yet.) But the plan is to add a whole bunch of tutorials about SharpDX as well, as soon as I reasonably can.

Possible XNA Evolution?

And this is where things get interesting. XNA is being retired, but perhaps it was time for it. We knew it needed some growing up anyway. It was still based on DirectX 9. It's entirely possible that we'll get something that is the "spiritual successor" of XNA before long. Something that carries the heart and soul of XNA forward, while still being a different and new technology.

If this were true, we'd find out about it no later than E3, as I mentioned earlier.

But it's something like this that prevents me from making a wholehearted recommendation to go with one of the above three.

But Keep Going with XNA Right Now

As I said, we're in a waiting game right now. But it is worth noting that for each and every one of the above options, it still makes a ton of sense to keep learning as much about XNA as you can while the waiting game progresses. Take it from somebody who has explored all of these, and other technologies. Your time and efforts in XNA over the next few months will not be a waste by any stretch of the imagination. It's still the right place to be, for the time being.

The Future of This Site (and Everything Else that I'm Doing)

This site is going to be going through an evolution of its own, over the next few weeks and months.

I'm currently suspending any new XNA-specific tutorials, in favor of ones that are more general. Things that could apply across the spectrum. So you might see more C# tutorials, game math tutorials, networking, and the like.

And you will begin to see tutorials for MonoGame (already started), SharpDX, and Unity. This takes time to do, so be patient. Also, tell me what problems you're facing with these paths, so that I can add tutorials to help with them.

I think you may also see an update to the appearance/CSS of this site. It's probably due for some changes.

I really, truly am spending nearly all of my free time working on this. It's something I care about a lot. It might be strange, but I do actually care about your game development adventures. Your experiences, your challenges, and your achievements. That's what this site was created for. The things that are going on with XNA doesn't change any of that. It just means I've got my work cut out for me, as we begin to look at the alternatives.

My Other Big Announcement…

Tied into all of this is my other big project. The day I was going to announce this other project to the world was the day that I found out about XNA's future. This other project got delayed while I tried to begin addressing this news here on this site. (A handful of people know about it, so this other big project kind of got a soft launch.)

But it's time for a more public launch. Drum roll please…

I'm making a game! A real, true, fun, awesome game of my own!

But because simply making a game is not challenging enough, I've decided to make it in a 100 day span. And I've decided to keep a blog/journal about what's going on with it, and also describe general game development techniques and principles as I go. I think the experience might be something that other people (like you) can benefit from as well.

So a lot of my time is going into that as well. I think the content being created over there is going to be at least as beneficial to you as what you see here on this site.

Here's the site: 100ExperiencePoints.com.

Go visit it. And keep checking back. Heck, go bookmark it. And follow it in your RSS reader. Here's the URL for that: http://100experiencepoints.com/feed/

I'll start cross-posting updates for this site over there, so you can keep up-to-date with everything from one place.

And yes, you'll be happy to know that I'm using XNA to make my game still. (That's part of my proof to you that I mean what I'm saying here.)

Stick with Me

The point that I want to make with all of this is to stick with me.

I am 100% dedicated to teaching people how to make games using languages and technologies that make game development as fun as playing games. For years, XNA was the perfect vehicle for that. That's why I invested so much of my personal time into it. (I'm not getting paid to do this.)

It would appear the age of XNA is ending, but the underlying principle of building fun games that are even more fun to make, is still there.

So stick with me here.

Keep learning C#. It will be an absolutely necessary skill, no matter which direction you go. (And C# is good for things besides making games, too!)

Keep learning XNA. As I've said, in many cases, the code you write will transfer directly over to wherever the future lies. In all places, the concepts and principles you learn will transfer over. The time will come to move along to something else, but that's not for several more months, as things get sorted out. And in the mean time, everything you do, and everything you learn, will be extremely valuable, regardless of where things end up.

Try out some of these options and tell me what you think of them. Have you ported your game to MonoGame? Have you ever played around with Unity? I'd love to hear what you think.

Keep learning about game development in general. Learn the math that goes into games. Learn the design patterns that are used (in XNA and out) like game loops and content management.

Get involved here. I'm fine writing all of the tutorials, but I need your comments and suggestions on what your priorities are, and what you think I should focus on. Whether I should be concentrating on MonoGame, SharpDX, Unity, or something else that I haven't even thought of yet. Make comments, make suggestions. Jump into the forum. Send me an email.

Spread the word. I can't reach everybody. When your programmer friends are talking about the future of XNA, or any of the other tools I've talked about here, tell them what I've told you. Share this page. On forums or discussion groups where this stuff comes up, make sure they know that there are people like me who will help lay the path forward, as the future becomes clearer, and the time is right.

Perhaps most importantly, keep coming back. I personally, and all of us as a community, will help you as the future begins to take shape. Like I said, bookmark this site, follow the RSS feed, follow me on Twitter (I really am kind of a noob, there)… whatever makes sense to you.

Just set yourself up to know what's going on here, and you'll be going a long way in setting yourself up for your own future game development adventures!