• Dizzy Dalek at NDC 2014

    The video of my talk on MonoGame and 3D (featuring a dizzy dalek) is now live on Vimeo:

    You can find the demo code on GitHub.

    Other NDC Game Development Related talks

    If you enjoyed this talk, you may also enjoy:

    Cross-platform physics-based gaming using MonoGame and Farseer

    Game and Simulator Physics for Developers, Gamers and Petrol Heads

    Porting Quake III to F#: A Journey to Functional Programming

  • Game development talks at NDC 2014

    It's less than a week to go till NDC 2014. I've been going through the talks for ones I want to see and already found so many great ones that there is no chance I will get to see them all, particularly as some of them are on at the same time.

    As I'm talking about game development and the other talks on this subject also look excellent here are the talks I will definitely not miss:

    Game and Simulator Physics for Developers, Gamers and Petrol Heads – Alan SmithWednesday 17:40 - 18:40

    Cross-platform physics-based gaming using MonoGame and Farseer – Rune Andreas GrimstadThursday 13:40 - 14:40 …

  • Tower Blocks March Report

    So, I'm 3 months in and Tower Blocks has not yet become an Internet sensation. Also, I've been really busy with client projects and found it really hard to find the time to focus on Tower Blocks. This must be the dip I've heard so much about and experienced on most projects I've ever worked on. I've still got lots of ideas for this project, but I've also got new project ideas and it's very tempting to abandon this one and move on to new green pastures.

    In March the iOS version of Tower Blocks went live, but I didn't have enough time to get the problems I've got with the Windows Phone 8 …

  • Putting iAds in a MonoGame game

    Here is the code you need to add to Main.cs in you game to get iAds working. You don't need to add any unique IDs. The iAd SDK is able to work out what you app is by magic. Everything will work fine as long as your app is registered for iAds in iTunes Connect.

    I call the method SetupAdvert at the end of FinishedLaunching in Main.cs:

    private object _adBannerView;

    private bool _advertPausedGame;

    private void SetupAdvert()


    int width, height;

    var view = (game.Services.GetService(typeof(UIViewController)) as UIViewController).View;

    if (view.Bounds.Width <= 320)

    { …

  • The Monument Valley Gap

    There's a great quote by Ira Glass, captured nicely in this video. The quote is about learning to writing stories, but I'm going to apply it to creating games. It talks about the gap between your skill to produce something and your taste to recognise something truely special. Sometimes the gap is so painful to see that you want to quit, but all great creative people making interesting stuff have stuck with it through the gap till their skills caught up.

    Monument Valley for iOS recently came out and I was reminded of the gap between my taste in games and my current ability.

    If you haven't …

  • Tower Blocks February Report

    Uploading Tower Blocks to iTunes

    This report follows on from my January report on the progress and experiments on my 3D tetris-like game Tower Blocks. In February Flappy Birds became a phenomenon and download figures for Tower Blocks improved slightly. I've also made good progress on the iOS and Windows Phone 8 versions of the game.

    The iOS version has been submitted to Apple and is waiting for review. The most difficult part of getting my code to run on different platforms has been converting the 3D models, images, sounds and fonts to the different formats that each platforms supports. I’m currently working on making the …

  • Tower Blocks January Report

    Tower Blocks - 3D Tetris

    Tower Blocks is Tetris with a 3D twist. I've been developing this game in my spare time since July 2013, although I first wrote down the idea in November 2012. On 1 December 2013 I put an early release into the Windows 8 Store. I was slightly embarrassed by this first release, but I wanted to get it out as soon as possible so I could get feedback and also some idea of numbers so I can set my expectations realistically.

    In 2014 I plan to be very business-like in how I develop and market the game. In these monthly reports I plan to share my plans and my results. Hopefully other people will find …

  • Creating the Tower Blocks splash screen

    Tower Blocks Splash Screen designs

    Andy Sykes AKA Hexjibber is an excellent illustrator, cartoonist and a good friend of mine. He's designed the splash screen and tiles for Tower Blocks, the latest game I've produced. I love the final work so much it's actually my favourite part of the game.

    I also love the process we went through together getting to the final piece and it's good to see the evolution of the idea. I wanted to give Andy a lot of freedom and I didn't have a strong idea of what I wanted. I gave him some examples of splash screens I liked had a bit of a chat and then sent him on his way. A few days later I opened …

  • Text effects in MonoGame and XNA

    In MonoGame you can load a SpriteFont in an XNB file created using the XNA Content Pipeline. You can then write text using SpriteBatch.DrawString. If you want to add effects to your text, there is no way to do this using just the DrawString method. There is a way however to create a SpriteFont that has effects built into this.

    There are two ways of building a font using the XNA Content Pipeline. The first way is using a Sprite Font Description. This uses an XML file and is an easy to compile a Sprite Font from a font on you computer. This is easy to make changes to, but it won't help us here. …

  • Sharing your view model between Monogame and XAML

    If you create a new Monogame Windows Store XAML Project. You will get a XAML page called GamePage.xaml and you'll get the monogame game class Game1.cs. If you want display data from your game class in XAML or if you want to take input from XAML into your game then these two sides are going to need to communicate.

    One way they can communicate is by sharing a view model. As the XAML page creates the instance of your game class, it can also let your game class know about it's view model. Like this in GamePage.xaml.cs:

    public GamePage(string launchArguments)


    this.InitializeComponent(); …