Projects

Back to Portfolio

Glitch Auction House

Details

Category
Mobile App
Description
Companion app to support the Massively Multiplayer Online Flash game Glitch
Date
February 2012
News
Glitch Auction House is no longer available due to Glitch The Game sadly closing down

Introduction

Auction House was an app for iPod or iPhone which accompanied the massively multiplayer online game Glitch which sadly no longer exists. You can no longer run the app because it needed the Glitch servers and API in order to work. Therefore it is no longer available on the App Store.

Features


Player Information and Statistics – View your mood, health and player level. See how much more experience you need to move to the next level and check how many Currants you have in your purse. Watch your character animate in all their finery and tap the screen to make them jump up and down. Careful you don’t make them angry though!


Inventory – View your current inventory including all of your bags and their content. Sort the inventory in a variety of ways; by slot, by category and alphabetically! See the number of items in each slot and get an idea of how much everything could be worth if you wanted to sell. When you do decide to sell you can do it right from your inventory, just tap and  update count and price.


Auctions – Using Auction House you can view the latest auctions or search for an item by category. You can see the latest list of items you have up for auction and for all auctions you can see the seller and get a description of the item.


Glitch Auction House is a fully functional visual aid enhancing your experience of Glitch whether you are online playing the game in your browser or just want to sell a few items whilst you are out and about in the real world.

Back to Portfolio

Quiz Climber Rivals

Details

Category
Mobile App
URL
Quiz Climber Rivals on the App Store
Developer
Relentless Software
Release Date
Dec 06, 2011

Screenshots

Quiz Climber was the first iOS release that I helped to create. It is based on a simple concept of answering questions within a time limit against your friends and it was executed as a highly polished and beautifully animated 2D vertical scroller with a colourful parallax background. It was integrated with Facebook to help you find your friends easily and the background was used to reinforce a strong sense of progression.


The prototype for this game was done using native xCode, with a simple list of friends, showing their avatar and their current best score. Each time you played, if you got a better score and overtook some more friends you would be shown to overtake them in the list with a visual swap of rows. The idea is that no matter what it looked like, this aspect of the game needed to have a hook on it's own, because no amount of pretty graphics is going to make this game fun if it wasn't already. It worked, this prototype was already a hit with those around the office and those who got to play it externally. The stage was set to go into full production with this idea.



Next the character you played as needed to be endearing to players and to provide an identity for the game. Our in house concept artists mocked up some ideas for what this character could look like and a design was chosen. The little guy was cut up with a few frames of body graphic to help animate him jumping around. With a tail that we could rotate around behind him and some facial expressions to swap in and out depending on what was happening around him. So he could be happy when he overtook friends and sad when they jumped ahead of him.


As part of the concept art used to create the identity of the character there was also a selection of possible backgrounds. A few backgrounds were chosen and cut up into layers to create a parallax background. I love parallax backgrounds in games as it gives the player really great feedback following their input and they are really fun and rewarding to make. It also allowed us to create a strong sense of progression as you moved from question to question: you start up in the dark depths of the forest and as you answer questions correctly you move further and further up through less and less foliage until you break out into blue sky and then eventually on into space! This means that in an instant you can look at the screen and gather how well someone is doing without even needing to read the number of questions that have been answered correctly. If I did this background again then I would add a little background drift as you move the device around which could really add to the sense of depth.

I have mixed feelings about the Facebook integration. It is by far the best way to get access to all friends already playing the game. As soon as you sign in with Facebook you are already playing against your friends list without the need to post on their wall or send any further invitations. But at the time it was launched people were still very wary of Facebook integrated games because they had been burnt in the past by apps that posted to their wall excessively and annoyed their friends. Only a few months after Quiz Climbers release Draw Something really took off and I think a big part of that was the Facebook integration. It seemed like it was the right time to launch with Facebook integration and just a little message promising not to post to your wall was enough to convince people that it was safe. Now Facebook integration is far more accepted and it is an easy way to sign up a new player and get access to people they already know who are also playing your game. It's the kind of thing that can really help your game to go viral.


Quiz climber is loved by all who play it, as it has a great combination of a brilliant hook and the high quality polished graphics to keep it looking attractive to new players. It was a shame that Facebook integration received such a backlash initially, but I think it was just months away from being the right time to release such a game, and it really picked up after this initial feedback. All in all I am immensely proud of the end result and it gives me great satisfaction that I was part of the team that created it.

Available on the App Store!

Details

Category
Console Game
URL
Buzz! Quiz World review
Developer
Relentless Software
Release Date
2008 - 2010

Buzz Franchise

Relentless Software helped create many Buzz! titles. I personally contributed to Buzz! Quiz TV, Buzz! Quiz World, Buzz! The Ultimate Music Quiz and Buzz! (Quiz Pack Player).

Buzz! Quiz World
Back to Portfolio

MotoGP 07

Details

Category
Console Game
URL
MotoGP 07 Review
Developer
Climax Racing
Release Date
2007

The main feature I was responsible for implementing on MotoGP '07 for Xbox 360 was the online Pink Slip mode. The game already had a fantastic system for customising your bike, you could store multiple bikes that you may have bought or been awarded in your garage, and you could paint them different colours, fit different upgrades and fit logos over sections of the fairing. What could we do to make more of a feature of the bike customisation? Well, you don't know what you've got till you lose it, so how about you get to gamble your bike with real people over Xbox Live?

Moto GP Screenshot

So, I was tasked with creating the online Pink Slip mode. Online players would be able to challenge other Live players in a one on one race for victory. If you crossed the line first you would win your opponents bike for your own garage, if you lost the race your bike would be gone forever.

After thinking this over for a while I realised the main issue with this is, put simply: cheating. How do I stop people from just quitting out of the race as soon as they knew they were going to lose? I could remove their bike for quitting the race or pulling the network cable, but the bike was stored in the save game on the Xbox 360 hard drive, so what could I do if they just switched off the box?

First I decided to look at who else, if anyone, had implemented a similar feature. How do they stop cheaters from devaluing it? After some fruitless investigation, I was directed towards Need for Speed: Most Wanted. I got hold of a copy but it turned out to be a single player career mode. A great feature but not really what I was after. It turned out that no one else was really doing the same thing, so this was going to be a unique feature.

Moto GP Screenshot

The ideal solution would require a dedicated server, when the players agreed to the terms of the race and started the game you would remove the bike details from their garages and save their games. The bike details would then be held on the server which would be responsible for deciding the winner at the end of the race and awarding them with both bikes. This way you have removed the bikes from the respective players saved games before they had even started the race and they no longer have the opportunity to cheat. Unfortunately, as is often the case, we didn't have the budget to implement the feature in this way and it also seemed unreasonably harsh to punish a player by removing their carefully customised bike if they had legitimately lost their network connection during the race, through no fault of their own.

It's a tricky problem but maybe one way to solve it would be to hold the bikes on the server, and allow a rematch whether a player had legitimately lost their connection or not. There would be some design issues to solve, for example what would happen if when a player regained connection their opponent was now in a another race? However, I'm sure it would lead to a nicer experience for the player.

The solution we ended up using in GP'07 was to simply punish cheaters by naming and shaming using a dedicated pink slip leaderboard.

When you started a race the race_starts column was incremented and when you finished a race the race_finished was incremented. This meant that I could calculate a reliability rating which would become part of the search and sort criteria for sessions, clearly shown when you looked for lobbies to join. Additionally I also included a races_won column. With a percentage won and a percentage completed, I gave the player everything they needed to pick the lobbies that contained honest competitors.

All in all I would have liked to have done the server side solution and no doubt that would have ended up being a more slick experience. But we often have to weight up the cost to benefit in this industry and make difficult decisions. In the end I think that Moto GP 2007 had the best online Pink Slip mode of any console game at the time.

Moto GP Screenshot

A worthy addition can be found in the online section, where you can now gamble your hard-earned (and painstakingly customised) bikes in pink slip races. Lose the race, lose your bike. MotoGP has always had a robust multiplayer component and community and this idea serves both well.

- eurogamer

Moto GP Screenshot
Back to Portfolio

Search for a Star

Details

Subject
Search for a Star 2012
URL
Search for a Star on facebook
Stage
One
Assessed
February 2012

Search for a Star is a competition run by Aardvark Swift every year that helps to highlight talented programmers just about to graduate from University. It is open to final year students who are aiming for a career in Computer Games Programming. The competition was started because feedback Aardvark Swift was getting from employers suggested that Graduates were not finishing University with the skills required for a career in games. The competition stages are designed and assessed by professional programmers and should give students a taste of the kind of assessment they can expect when interviewing for and during a graduate year in a Games Company.

I have been helping to assess the competition since its inception and this article explains the process I go through when marking one of the open questions. This explaination is aimed at those wishing to take part in the competition, those who already took part in this years stage one and are looking for more indepth feedback, plus those interested in the level of technical assessment of the stage and the level of skill the competition as a whole demands.

Stage 2 Entry

The assessment is comprised of three stages. The first is a test completed under exam conditions, this is similar to the kind of test you would expect at the interview stage of any games company. If you cannot demonstrate, on paper, that you are a competent programmer then you are unlikely to progress any further. The second is a more practical coding exercise where candidates must fix and update a drop of existing code. The third and final stage is a panel interview which last year included members of Aardvark Swift, Headstrong Games, Relentless Software and Rockstar.

Every candidate who makes it through to the final stage of the competition would make an excellent graduate programmer and to prove this previous finalists have all gone on to start excellent careers within the games industry. The competition serves to give them confidence through recognition of their skills and interview practice, it is also an added extra on their CV to help stand out in an extremely competitive job market. I love meeting the finalists and I continue to follow their careers with interest.

It is standard practice to test the skills of a programmer before you hire them. The questions that we ask in Stage 1 are the kind of questions that candidates could expect to be asked at the interview stage of any AAA Games Company. On your first day starting a new job, most likely you will be asked to take existing code, get it running, fix any bugs and improve it. Stage 2 is designed to mirror this sort of task.

Question 12

As well as 10 multiple choice questions, the first stage contains two additional open questions. Questions 11 and 12 attract as many marks each as all the multiple choice questions together. One reason to do this is to see how well candidates can manage their time, an important skill in any job where you must work to strict deadlines. I have written Question 12 to test the candidates understanding of the number of components that make up a finished game, it is deliberately left open ended.

Imagine that you have been tasked with designing the code for a board game. In this game two players have a position on a board and they are racing to reach the end of the board. There are 2 dice and three types of square they can land on: Positive, Negative and Random Chance. Show the API that you would design for this game: this means class declarations only. State any assumptions you make.

Ten points can be scored for this question, but that requires an extensive answer which includes a reference to everything contained in the question and demonstrated thought about other common game features such as; rendering, user input, save game, sound, HUD, Menus, asset loading and visual effects. I am looking for good code quality, use of a variety of C++ features and object oriented code design.

Here is a breakdown of an answer to this question that would attract full marks. Note that I include colour coded text for ease of reading, students are not expected to colour code their answers and are not marked down for syntax errors caused by the word processor.

GameObject Class

The GameObject class above shows some of the features of C++ that we were looking for when assessing this question. First of all C++ is an object oriented language and I want to see students who demonstrate understanding of this concept by using inheritance. This is obviously a base class because it contains pure virtual methods. These methods must be implemented by a child class otherwise that child class cannot be instantiated. The destructor is virtual, if it wasn't then calling delete on a pointer to a GameObject that was really a Player, would only free data allocated by GameObject and could leak data allocated by Player. The Render method here is marked as constant, the user of the API knows that this method cannot change the state of the GameObject, it also means that a constant pointer to a GameObject isn't useless because we can call the constant methods of an object through a constant pointer. Update passes in the time which has passed since the last Update call, this is important because it shows that students understand that a frame could take a variable amount of time and in order for your code to run correctly on multiple types of system you need to update objects according to how much time has actually passed. Even if you do not want to pass in a variable frame time, doing this is still very useful because you can easily implement code to speed up, slow down and pause the game time. Including a class such as a singleton where you could fetch the current frame time from anywhere would also have been a valid way to demonstrate this understanding.

I include a render method in my game object class, this isn’t necessarily the right way but it is a way to render your game. Depending on whether your scene is 2D or 3D, contains skinning or if there are a lot of lights, you might consider forward Vs. deferred rendering. I would have given a bonus for mentioning this but this sort of consideration is way beyond the scope of the question. Breaking GameObject out into Renderable and Updateable base classes, would allow you to use multiple inheritance for objects that needed to update and render but not inherit unnecessary members into objects that don’t need both. Showing that the GameObject or Renderable classes could have implementations for multiple platforms or technologies would also attract a bonus.

Square Class



Many students demonstrate inheritance using the Square class, which could be because the question leads them in that direction. However, it may be unnecessary for Positive, Negative and Random to inherit from Square, as it stands they don't need extra functionality over that of Square. If the functionality of Square started to grow larger then child classes could be added later when types start to contain different data and functionality. Instead you can represent the types with an enum. It is important that this is a child of GameObject and this means it must override Render and Update in order to be instantiated.

Dice Class



A lot of students create a class to represent the Dice, I think this is great. I include this sort of class as well because designs tend to change over time, if we end up throwing the dice from a number of locations, it is better if the definition of what happens when you throw the dice exists in only one place, so when the design changes, we only need to change the implementation in one place. This simplifies the calling code as well which makes everything more readable and less likely to contain bugs. Some students make Dice a member of Player, this is unnecessary, the dice doesn't need to store data it's just a named location for some shared logic.

Overall, I want to see good clean code that is readable, use of constant methods and some thought going into the way classes will work together. It's an API design and one that you would end up tweaking as you started to fill in the detail of the implementation and the platform. The point of the question isn't to get a perfect answer but to demonstrate thought about the objects required to support the design and the way that those objects will interact and encapsulate data.

The Player Class
The Board Class
Game Class





The students who scored the highest thought about an all-round game. Mentioning things like menus, sound, particle systems, HUD, loading of assets, saving state, player messaging, pausing and game state. All this shows an understanding of the various common requirements of a game.



Sound Class

Students can include a Sound class like this or just mention that they assume a class for playing audio already exists. Either way it demonstrates that they have thought about the game making noises or having music.

How did they do?

With hindsight I realise that I would like to write Question 12 slightly differently next time, after marking over 100 entries you start to get a pretty good idea of which terms are confusing and which parts you need to explain better. Next year I will make it clear which features of C++ I want the candidate to try to use. I do want to leave this question as open as possible though because this gives exceptional candidates a chance to really shine.

Fourteen percent of entrants don't seem to understand that the question was only asking for an API or Application Programming Interface. This term refers to the interface that objects use to communicate with each other. This means that the solution should contain source code but should not include implementation, only the class declarations or headers. I will have to be much clearer about this next time!

Every test paper included instructions with the line "All multiple choice questions are in C++ and open questions should be answered using C++." but five students answered question 12 using C# and many answered without using any code at all. Rather shockingly, only 4 answers included virtual destructors and only eight students used either constant methods or constant parameters.

Encapsulation was much improved over previous years, some students used private data and some students included private methods as well, but this was still a disappointing 61% and only 29% demonstrated use of inheritance. Eight students showed they had thought about a GUI and 25 students mentioned rendering or included a method.

This year we have had some promising candidates but there have been no maximum scorers for question 12 and only 19 students scored 50% or more on this question. I was a little disappointed with the general standard of entries this year but I concede that I need to be clearer about what I want when wording the question. However, I am deeply concerned that so many final year students could score this badly on a test of this nature. I believe that degrees aimed at game programming should have C++ exams taken on paper but an alarming number do not and I worry that this is affecting their performance at interviews.

What Next?

The second test that we give to the candidates is my favourite part of the competition. They will be given a drop of broken code and they have only a few days to fix the bugs and turn the skeleton game into something fun. This task mirrors the experience you will have during your first few days programming in a new job, you have to get used to alien code, you have a new coding standard to follow, you need to get the game set up on your first day and probably debug other peoples code. Once that's over then the real fun begins:

Stage 2 Entry

We want to see candidates show their creative side at this stage, they need to have a good understanding of what makes a game, pulling the skeleton code we give them into something which is fun and different. The reason stage 2 is my favourite of all? This task results in some excellent games that are fun to play and mark, I love seeing the amazing variety of entries that we get back, all born out of the very same bit of very basic starting code.

For those who haven't made it to Stage 2, don't get down, keep practicing, keep learning and always remember: even if you don't get to make games for a living, no one can stop you from making games.

For those who have made it through to Stage 2, good luck - I can't wait to see what you come up with!

Stage 2 Entry
Back to Home

About Me

Introduction

I've been working as a generalist game programmer for ten years, in that time I've contributed to multiple commercial titles in areas as diverse as: Gameplay, Networking, Physics, Graphics and Presentation.

I have a keen interest in recruitment and encouraging new talent into the industry. I'm a lead evaluator for Skillset, this involves visiting Universities to assess and feedback on Game Programming courses submitted for accreditation. I've been helping to organise Aardvark Swift’s Search 4 A Star competition for three years, discovering and evangelising young game programming talent.

I have experience of leading projects with multi-million dollar budgets, but I also excel at individual and small team projects where passion, independence and self-reliance are key.

My Skills

C++
...
Objective-C
...
C#
...
Multi platform
...

Downloads

Contact Me

Contact Information

Address
Sheffield South Yorkshire, UK

Contact Form