Tales from the Dev Side: MonoGame is The One
February 12, 2013 24 Comments
XNA, which my non-developer readers will note is the development framework of Xbox Live Indie Games, is being put out to pasture. It’s not quite dead yet. Put it this way: the family has been notified and doctors are starting to determine what organs are viable for transplant, but the plug is not completely pulled yet. Although I’m confident indies will exist in a similar (but hopefully better) form on the next generation Xbox, creating games for the platform will be a much different experience. I’ve been seeking out possible XBLIG alternatives. MonoGame isn’t necessarily what I had in mind, but the more I read and heard about it, the more I saw the potential in what they offer.
I should probably preface this editorial by noting that I have absolutely no clue what any of this means. Like traveling in a country with Romance Languages, I’m at best picking out an odd word here or there, but otherwise it’s all Greek to me. Which is weird because Greek is not a Romance Language and doesn’t fit into the metaphor at all.
MonoGame is The One
by Dominique Louis
The Present
If you are reading this, you will have probably heard that XNA is no longer being developed/enhanced by Microsoft, though it will continue to be supported on Windows 8 and Windows Phone 8, in a limited capacity.
Most XNA developers saw this coming, but hearing an official announcement makes it a reality and can make it hard to take. So what are your choices? Some of you may move to Unity3D (great product), if you have not done so already. But those of you who have invested time, blood, sweat and probably tears in your C# XNA codebase have a better option. That option is MonoGame!
My aim is that you, an XNA developer, will at the very least take a look at it, instead of just taking my word for it and make up your own mind. I believe most XNA developers will find it will fit their needs. For some it will not and of course there will be those who won’t like it… just because.
The Past
For those of you reading about MonoGame for the first time, MonoGame is an Open Source implementation of the XNA 4.x API. It supports 2D, 3D, touch, mouse, gamepad, keyboard, audio and also a networking stack (via the open-source Lidgren networking library). We have ports for iOS, Android, Mac OSX, Linux, and Windows 8. We are already working on ports for Windows Phone 8, PlayStation Mobile, Raspberry Pi and plan to support Ouya and Chrome. Maybe one day we’ll support consoles too.
As of this writing, we are the *only* way to get your XNA 4.x game onto Windows 8 (thanks to a SharpDX backend) as a fully managed Windows 8/RT Store App. So far we have close to 20 MonoGame powered games on the Windows Store. These include Skulls of the Shogun by 17Bit (our first Microsoft Studios published game, and it won’t be our last), ARMED! by Sickhead Games and Draw a Stickman: Epic by Hitcents(on Windows 8/RT, iOS and Android). On iOS, Mac, Linux and Chrome, Bastion, by Supergiant Games, was powered by a forked version of MonoGame. As most of you know, Bastion has won many awards and topped the iOS AppStore charts in many countries. Late last year, Draw a Stickman: Epic was No. 1 in the UK, Australia, Ireland and New Zealand on the iOS AppStore as well. Most recently Tin Man Can became our first iOS title that was published by Chillingo (the publishers behind Angry Birds).
As you can see, many developers using MonoGame are having tremendous success with their innovative and highly polished games, on both Windows and non-Windows platforms.
The Future
In the current market, you cannot have all your eggs in one marketplace. Due to MonoGame’s cross-platform nature, it is relatively easy to port to other operating systems and devices. Massive markets like iOS and Android cannot be ignored, nor can you ignore the emerging Windows 8 and Windows Phone markets, because Microsoft is committed to seeing them succeed.
Our aim is to maximize code reuse, hence why we use exactly the same namespaces as those in XNA. This means your code has the minimal amount of changes for things to work across the platforms you target. In most cases you create a new project from our project templates, reference the MonoGame.Framework.* assembly, create links to your xnbs and source files and recompile. Once you get the hang of porting to new platforms it should take about an hour or two (depending on its complexity) to get your game compiling onto another platform. Then you will need to tweak things for that specific device or operating system. Some game developers who have used MonoGame, like Hitcents, claim up to 95% code reuse between platforms. Hence our motto, Write Once, Play Everywhere.
So what will you need to get started on each platform?
Windows | Windows 8 | iOS | Android | Mac OS X | Linux | |
---|---|---|---|---|---|---|
Installer | Yes | Yes | No | No | No | No |
Machine | PC | PC | Mac | Mac or PC | Mac | PC |
IDE | Visual Studio | Visual Studio | Mono Develop | Visual Studio or Mono Develop | Mono Develop | Mono Develop |
Examples | Yes | Yes | Yes | Yes | Yes | Yes |
Building a community takes time, just like becoming good friends with someone takes time. The community has to build up trust. We understand that. MonoGame and the fact it is Open Source, gives XNA developers the opportunity to take control of the future of the technology they have invested so much in, and with it will come increased community spirit. But the community will not happen if XNA developers don’t want it to. Jump In 😉 and make it all it can be!
Now that MonoGame 3.0 is stable and publicly available, work has begun on a cross-platform content pipeline that will integrate into MonoDevelop and Visual Studio. Here is a video of it working on Linux, other platforms to follow:
We won’t just stop there. There are plans to enhance MonoGame to take it past its XNA 4.x roots. For example we plan to create a DirectX 11 backend for Windows 7, so that those who have not upgraded to Windows 8 can still use the latest Direct X features instead of being stuck with the DirectX 9 feature set. Another area we plan to improve is documentation. These are just a few examples of how MonoGame will continue to move forward. If you are an XNA fan who works on console games, why not help us get MonoGame onto the NextBox or PlayStation 4 in the future.
Open Source projects succeed or fail based on the passion of the core team and the community that builds up around them. The team is very passionate! Why else would Tom and his team (Sickhead Games) implement the 3D stack donated to use by the Infinite Flight team, or work feverishly to get Windows Phone 8 support working only 2 days after the Windows Phone 8 SDK was publically released? Or 2 weeks before that, Dean getting the Raspberry Pi port working? We have Steve (slygamer, a Krome Studios employee) and Aranda (Gnomic Studios) constantly fixing bugs that are raised as well as implementing features. Why else would I spend over $2000 of my own money, on a hobby, to help promote it at //Build, if I didn’t believe in the project? We want this project to succeed, but we cannot do it alone. We need XNA developers to help this project realise its full potential! The future of XNA is now in your hands, through MonoGame.
Here are a few things to think about:
- There are over 1 billion PCs in the world.
- There are over 1 billion smartphones/tablets in the world.
- MonoGame supports nearly all of them.
It is..
- Being used in AAA games published by Microsoft Studios and Chillingo
- Extendable
- Growing (games, developers, platforms)
- In your hands
- Now supported by Microsoft evangelists(Tara Walker, Bob Familiar, Lee Stott to name a few)
- Currently the only way to use XNA on the Windows 8/RT Store App
- Open Source
- Actively being developed.
If you are interested, visit our main page @ http://monogame.net.
If you want to help, create a http://GitHub.com account, fork our GitHub repo @ http://GitHub.com/mono/MonoGame, then send us some pull requests.
On irc.gnome.net some of us hang out on #MonoGame.
Follow us on twitter @MonoGameTeam and send us a message when you release a game with MonoGame so that we can retweet it.
I’m sitting right now (as im writing this) with monogame to port Smooth Operators to iPad. I love it (most of the times)!
Anyway, i’m also learning objective c, but as i’m going along with monogame, i’m starting to think that it’s probably what i’ll continue to use.
I’ve used Monogame 2.x to get 48 Chambers and Chasm running on Mac and Linux. I will back up the 95% code re-use statement, all it takes is just some #ifdefs to work around platform specific calls, and you’re golden.
Personally, I love the flexibility and power XNA gives me for 2d games, and am proud to be using it for my next game Chasm.
Also, I should mention that 2.x was a little rough around the edges, and I had to do some work getting sound effects, fullscreen, and some other miscellaneous stuff working properly. However, I’m confident that it will only become a smoother experience in the future. Really excited to see the content pipeline make its way into the fold as it will make things much easier!
I used MonoGame about a year ago to put DLC Quest on Mac, including in the Mac App Store. I’m using it again for the update and Steam version. It still has its rough patches, but it has come a long way, continues to be refined, and is overall quite an impressive bit of tech.
One of the biggest draws for XNA (for me) is the ability to easily get a game published for sale on a major home console through XBLIG. It’s really the only option in this category. Hopefully the next generation of consoles changes this (and for the better – it’s possible XBLIG is dropped and nothing similar takes its place on any console). This is something that still eludes MonoGame, though it’s unfortunately out of their hands. It’s amazing how many platforms it has expanded to support though!
This comment isn’t about MonoGame as much as it is about the author here. It paints a pretty lovely picture of MonoGame and leaves off some key points – missing parts of the framework, requires Microsoft XNA for the content pipeline (meaning if you are on a Mac you need a Windows PC/VM to build your assets, then copy the results over). I think a more honest (yet longer) look is Ben’s posts on porting DLC Quest http://benkane.wordpress.com/tag/monogame/
MonoGame is a very valid option, but a write up should also be honest and point out potential flaws. When I got to the end of this article and saw “Begin Now” spelled out and bolded I logged into my back account to make sure I didn’t just buy into a time share condo in Cancun.
Also, not a knock against IGC – it would be hard for you to spot all this. I hear someone is writing a counter point and I love the “tales” articels so I’m looking forward to it!
Indeed there is a counterpoint coming. I’ve known it was coming since before this was published. Dominique was made aware of this, and even given the name of the writer. You can expect that soon.
I agree, this was definitely more of a sales pitch than anything. I’ve noticed their marketing/PR person seems to be a bit.. over enthusiastic? I’m not sure what the right word is, bu they should realize a bit more honesty would probably help.
To be fair, he does mention they’re getting the content pipeline working in 3.0, which will be a huge step forward for the project, and should break the XNA dependency.
Hi Mike,
The key missing part, which we’ve left to the very last, is the content pipeline. It was a big job so on our roadmap it was only ever going to happen after we added 3D.
There was supposed to be a video of the work we’ve already done this year on getting a cross-platform content pipeline working. The video is here – http://www.youtube.com/watch?v=XvYOtWdMV2Q. Hopefully Catherine will update the article as it was meant to be in there. *EDIT FROM CATHY: I’ve done so.*
The “Begin Now”, was my attempt and being whimsical about joining the project. It seems my British/Australian humour didn’t translate very well.
I’ve spent a couple hours looking into / trying to get MonoGame to work with Visual Studio. Ultimately I couldn’t get a project to compile even. Perhaps it only works in Visual Studio 2012? I’m not sure. I have the Pro version of 2010 but not 2012 and am not eager to buy a new update.
I like the direction I see MonoGame going but I don’t think it’s there yet. On top of that, my main reason to use MonoGame would be for iOS ports and my searching just didn’t reveal that many others doing it. A product like Unity3D that has a much larger user base, many books written how to use it (I’m a big fan of books for learning) and is more mature. For the time being I think that’s the route I’m going to go, even if it means rewriting my games. I’m not ruling out trying out MonoGame again down the road though.
Hi Kris,
Up until the release of Windows 8, iOS was the platform that most people targeted. Once Windows 8 came out, the easy of porting to it has shown ports leap frog past the iOS releases. There are still iOS releases coming out every week. Check our Twitter feed and monogame.net for more details.
Some notable iOS ports are Draw a Stickman : Epic, Infinite Flight, Tin Man Can ( our first Chillingo title ). Bastion used a version of the MonoGame for their iOS port.
D.
I agree with Kris on Unity. The ideal case for hobbyists and even most indies would be if the next Xbox supports hobbyist-published games created with Unity, though that’s probably a pipe dream. Even just the fact that there is technically a hobbyist-friendly console coming out that Unity supports (Ouya) is encouraging. Who knows if anybody will buy that though. 😦
I’ve been learning Unity over the last few weeks and have been surprised at how code-oriented you can make it if you want to. I grabbed some classes for a finite state machine implementation from one of my XNA games and they came over just fine into Unity. I had to remove the namespace declaration and change a Debug.Asset to Debug.Log, and that’s it. That’s quite a bit beyond what I think of as “scripting.” Unity uses Mono, so you can continue to code your game logic and AI, etc in C# .NET and even continue to use Visual Studio if you want. And for 3D games, I’ve found that I can get things implemented much faster. It’s a full-blown engine with a ton of built-in shaders, 3D physics/collision engine, and all kinds of stuff that all works together in a consistent and visual way. And yeah, there are tons of code examples and assets out there for it too. It’s been a blast so far.
Dominique/Mike:
I am a hobbyist game programmer, I don’t contribute to the MonoGame project, I just post questions when I get stuck so in torrent terms I am a leecher :). I don’t see anything “over-selling” in this post. Here is my honest opinion about this. Being a C#/Windows programmer who knows absolutely nothing about Android, iOS and did not want to go barebones C++/DX for W8-Metro, I could not imagine my c# code running on Windows Phone, Android, iOS and Windows 8 Metro. My game “Air Soccer Fever” is already released on Windows Phone and Android powered by XNA/MonoGame. I do have a released version on Windows 8 Metro but that’s XAML and has perf issues so am replacing that. I am currently running MonoGame based ports (not-released) on iOS and Windows 8 Metro. I literally spent 2 weeks total in porting to Android, iOS and Windows 8. Got the basic gameplay running as well as real time online multiplayer across all these platforms.
Yes, MonoGame is not “perfect” yet.. and yes it takes some time to handle some edge cases and there have been bugs that the MonoGame team keeps fixing but if you have your project broken down and properly structured, you end up modifying, extending a very minor part of the solution to make it work on all platforms. I can vouch that I have had to make 3% code modification at the most. For the most part I just have one PlatformUtility Class with lots of #ifdefs and that’s it.
And really to say that separate content projects is the main hurdle in taking your game cross platform for free?
So if MonoGame folks are providing all this for free in their own time and making my life a hell lot easier than going and learning ObjectiveC, Android NDK, C++/DX and spending months before I could release my game on all platforms, I say they deserve to be whimsical and downright cocky if they want.. about this!
For any developer with XNA roots and wants to stick with it, MonoGame is the way to go. OR jump ship and adopt Unity3D.
What a coincidence though.. I was scribbling stuff for my blog post , that I hope to finish this weekend and the title is “MonoGame – A tale of love 😉 “
There are things to mention, like iOS and Android is not free. Technically you don’t buy MonoGame, but you do need to buy MonoTouch and/or Mono for Android to deploy to these platforms.
Beyond the content pipeline, XACT audio is not supported, custom HSLS shaders will need to be rewritten, no XNA gamer services are available including storage, profiles, networking (these were never available on PC XNA, but many XNA devs likely used them for Xbox). Some games will be a simple tweak or two and others will be more involved. By listing the “present” state a developer can make an informed choice.
You mention Unity as if it’s a huge undertaking for an XNA/C# dev. Unity is using Mono and scripting can be in C#, so it’s not as far as a “jump” as you might think. Luke of Radiangames had a great few posts on what it was like porting his games from XNA to Unity, but they are no longer up after his new site launched.
Other C# options include SharpDX and Sunburn (assuming this gets a public release in the near future). There are probably more I’m missing here.
Point is there are several cross platform options for someone wanting to leverage C# and XNA experience going forward, and a summary of each of these should also include the negatives so that you can decide what’s best for your game.
Sure, I agree with the other options. I have used both Unity and SunBurn for a couple projects and they are great no doubt. You just cant compare them to XNA/MonoGame – that’s what I meant by Jump, not necessarily that’s its difficult, but that its apples and oranges. Personally when I started learning Unity/SunBurn, it was a shift in the way I (as an XNA developer) approach game development since everything is a component with added behaviors and its editor centric. So yes, after 2 days of going through samples and documents I welcomed Unity/SunBurn as great tools. For one they make prototyping so easy and it has all the stuff either built in or via plugins that one would require for big game titles . But if someone wants to stick with XNA style and there will be lots who would.. MonoGame is still the best option out there.
Pingback: Windows Store Developer Links – 2013-02-13 | Dan Rigby
We’ve only been using XNA for little over a year so to move to an entirely new framework & coding language would be a nightmare. MonoGame provides us with the option to continue building our XNA skillset rather than re-learning a whole load of new stuff from scratch. Once we have a few more Windows Phone games out we’ll be using MonoGame to port to other platforms & then we’ll see how it develops as a third party XNA.
Over at Leda Entertainment (http://www.ledaentertainment.com/) we’ve been using MonoGame to port our WP7 games to Android and eventually iOS. Yes, the lack of a content pipeline is a bit of a pain especially for the Mac; but that’s being resolved – and for Android you can pretty much reuse the .xnb files you built for your Windows version anyway, or just load the original assets (pngs, wavs, mp3s, whatever).
For Indies that have already invested heavily in XNA, MonoGame is a bit of a no-brainer. Sure you have to pay Xamarin for a licence but it’s affordable. Most of our games took less than an hour to port, much of which was setting up the project structure in MonoDevelop!
Unity3D seems appealing, but you won’t be able to carry much over. Coding for Android in Java is a huge PITA, as is needing to learn Objective C. So unless you have a native C++ library you want to use, I’d advise using MonoGame.
Wow, this sounds awesome! I messed around with Unity a couple of years ago and it didn’t feel “right” to me. With XNA “dead”, I was looking into Java, but I wasn’t looking forward to converting EVERYTHING. Now maybe I don’t have to? That’s just too appealing to not try out.
Thanks for all of your hard work MonoGame Team!
XNA is dead! Long live XNA!
I spent a couple of hours last night trying to make my game work with Monogame and guess what? IT WORKS! It’s not 100%, but hey, after just a couple of hours reading forum threads and tweaking files, 99% isn’t bad for a game with 45K lines of code!
Way to go Monogame Team! And thanks again for all of your hard work! Now where’s that content pipeline!!!!!!! 😉
Monogame is the futur Bravo to monogame team
Pingback: Tales from the Dev Side: Unity in a Splintered Industry | Indie Gamer Chick
MonoGame is a really great project, one I’m making use of now to port a game to Android. But it has some drawbacks – MonoGame is hampered by two things as I see it:
First it’s documentation is woeful. The “hello world” basics are well covered with videos, but once you start doing something “real” you’ve got a frustrating time ahead of you. Everyone using MonoGame is forced to scrabble around forums posts and blogs trying to piece together how to do basic things like load language resources or deal with known bugs. I’m speaking from experience here, the forums are pretty helpful, and none of it is that hard, but it would make adoption of the product more likely if it were more accessible.
Second is price. MonoGame is awesome value as it is free. But to use it on iOS or Android you need to use the Mono layer underneath, and that is sold to you by Xamarin who have just “restructured” their pricing. As of now, To load any game >32KB (ie any game at all) onto the emulator or a device using that Mono layer costs you 300 USD per PLATFORM per USER per YEAR, upping to 1000 USD if you want some premium features like LVMM compilation. I see that as insane, considering Unity is not per year pricing. But that is outside MonoGame’s control and may hopefully change.
Just to clarify that a bit… my reading of the Xamarin license is that the license itself is perpetual, but the support and maintenance/upgrades is payable yearly. If you’re happy to continue on the same version in an unsupported fashion, I don’t think you have to dish out any more cash.
At this stage though I’m not sure if I’ll be continuing with MonoGame more than 12 months anyway. It depends what is supported on WP9 and the next generation of XBoxes.
Indeed you are correct there Paul, thanks for clarifying. The license is perpetual and the annual fee is only for upgrades.