Richard's blog

  • 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)

    { … more

  • 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 … more

  • Tower Blocks February Report

    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 … more

  • Tower Blocks January Report

    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 … more

  • Creating the Tower Blocks splash screen

    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 … more

  • 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 … more

  • Criticism

    I’ve played with art through my life, not enough to be a master, but occasionally enough to get better. While studying and practicing art for my A-Levels we were given a still life scene involving a skeleton and some barbed wire to paint. This is the perfect scene for inspiring a teenage artist (far better than fruit).We were being taught by a different teacher than normal. He was a bit intimidating. I wish I could remember his name. All I remember is that he told us that he specialised in punching clay while angry to make sculptures of people. He showed us some pictures of his work … more

    Tags: art

    No Comments
  • 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();

    // … more

  • Real readonly lists in C#

    In C# there is the readonly keyword that enforced the rule that the variable must be initialised as it's declared or in the constructor. This works as expected for simple types, but for objects and lists it's not quite like that. With a list, you can still add, remove and change items in the list. You may also expose a list as a property with a public get and a private set. You want the owner class to be able to modify the list items, but you don't want anything outside the class to modify the list items.

    Here is an example with an almost readonly list, but as you can see it's not as … more

  • Adding a field to a content type in an Orchard data migration

    In Orchard you can create your own content type by welding together several content parts. Here is an example of how you'd do that in your data migration:

    ContentDefinitionManager.AlterTypeDefinition("MyNewType",

    cfg => cfg

    .WithPart("TitlePart")

    .WithPart("BodyPart")

    .WithPart("CommonPart")

    );

    You can also add fields to a content type, but it's not obvious at first how to do this. You can't add a field to a type directly, you can only add fields to parts. To get round this you can add a secret part to a type with the same name as the type. This part is not shown in content … more