In Part 3 we set up the groundwork for objects. Now let’s get them to do things.
Here a .zip of the project by the end of today:
Tile Based Platformer
In Part 3 we set up the groundwork for objects. Now let’s get them to do things.
Here a .zip of the project by the end of today:
Tile Based Platformer
I thought it would be useful to write about coordinates for isometric games. Disclaimer: I have a degree in maths. You might not. Let me know if anything needs explaining more fully.
Firstly, grab a copy of my new game. It will help understand what I’m talking about. You might even enjoy it.
Ok let’s begin.
Read more An Isometric Primer: coordinates
In Part 2 we wrote the Room class including the loader. Of course, I made a mistake in the code I hadn’t tested.
var type = Type.GetType(instance.Attributes["objName"].Value);
var type = Type.GetType("Tile_Based_Platformer.Objects"+instance.Attributes["objName"].Value);
I thought it checked the current namespace by default, clearly I was wrong.
Today, we’re going to write the code to draw and update objects, and we’ll start to implement the player object.
In Part 1 we set up the solution for our game.
One thing I forgot to mention was that after importing room0.room.gmx, that too needs to have its Copy to Output Directory property set to “Copy if newer”.
Now let’s write some code.
I recently changed from using GM:S for a game I’m working on to using MonoGame. There are a few good reasons for doing this, mainly to do with low-level control, and some performance improvements. There are many good reasons not to do this. A few that spring to mind are:
With all that said, MonoGame is a great cross-platform library, and for much of what you’d want to do there is an easy one-to-one conversion into C# with MonoGame.
Things which will be more difficult to convert include Time Lines and Texture Pages. I shan’t go into much detail on these, but be aware for the latter that your performance could be significantly worse if you use lots of individual sprite files rather than unified sprite atlases.
I’m going to talk through a conversion process for the Tile Based Platformer project which comes with GM:S. Hopefully for other simple projects the conversion is just as easy.
I think I’m at a point now where I can usefully discuss the problem of choosing the basis on which to develop a game. This summer I’ve been working on games in Unity, and in my spare time I’ve been using GameMaker: Studio. I also have several years of experience with XNA and raw DirectX and recently, MonoGame.
I started writing games in Flash a decade ago now, but desperately wanted to make 3D games. Back then, all 3D games were written in C++ or C. In fact, my first ever exposure to a full sized game’s code was the GPLed Quake II, which I modded. I assumed that it was only possible to make large games in native code, and perhaps it was even true then.
It took a while after this for it to dawn on me that for 2D games, one doesn’t need native efficiency at all, and if a game is running slowly it’s probably bad design than the tool you’re using.
This summer especially using C# with Unity, I was surprised at how efficiently I could run quite complicated games. Even on a low-end laptop, I was seeing a solid 60 fps on anything I wrote, as long as I put a bit of thought into how it would execute.
Separately, in the evenings, I’ve been working on a game with GameMaker: Studio. This was inspired mostly by the discovery that a lot of my favourite 2D games were written in GMS and a sudden desire to create 2D games from start to end. I suspect I will continue to use GMS for Ludum Dares.
However, GMS has some issues, after which I converted my game to MonoGame. I’ll go into more detail on that in a future post.
So, allow me to weigh up the pros and cons of various different game development tools. All this assumes comfort in switching between imperative languages.
On the face of it, The Floor is Jelly by Ian Snyder is a great example of an indie platformer. The graphics are excellent, the music is good and it all comes together in a coherent mood. Not only that, but it has a unique and interesting mechanic, namely that … the floor is jelly.
It’s only when one comes to interact with it that the cracks start to appear. There is no proper controller support, although occasionally I can get it to work by unplugging and reconnecting my gamepad. It loads in a window – but not a splash screen – and then switches to full screen, which is quite jarring.
There are some elements in the game which make noises which change pitch, but do so in a seemingly random way. If it’s meant to spell out a recognisable tune, it doesn’t. In Mario games, the pitch rises continuously as you pick up red coins. Maybe that’s not appropriate. Try the fun little game Winterbells. All the bells have the same pitch sound. I think this would make for a much smoother experience.
These are minor interaction issues, which make the game feel very hodge-podge and not worth the £6.99 it is on Steam.
But then we come to actually playing the game (on a keyboard). The jelly physics works well and has super smooth curves, presumably using something cool with pixel shaders. Ian Snyder deserves a lot of credit for that alone, and bringing it into game form.
However, the levels are not balanced and the learning curve is steep, and after any period of gametime I quickly lose interest. Also, the jumping, the very basis of all platforming, feels broken. It takes careful timing to build up high jumps, as it should, but not in a meaningful or intuitive way.
Imagine if the rotation in Fez were delayed somehow, and it started out very hard. It takes not only a good mechanic, but carefully crafted levels and carefully balanced controls to make a game fun.
For my LD33 entry Hue and Cry I wanted a rain effect to add atmosphere. I tried various things with particles and objects. This is what I came up with in the end:
It really does look a lot better in-game, promise!
I’ve followed all the steps to make an example project:
Here’s how to recreate it.
I thought I’d write a short review/analysis of two games I’ve been playing recently: Outland and Stealth Inc. 2. It’s worth saying that Stealth Inc 2 is free, and Outland very cheap right now on the Humble Store.
Both are great games, and both are 2D platformers, but that’s where the similarities end.
This is a platformer with strong bullet-hell elements. This makes for some fast paced platforming action, but also slow and careful analysis of areas. I wouldn’t go so far as to call them puzzles, because with enough lives one can just run through.
The movement in Outland uses actions we’re all familiar with (wall jumps, stomping etc.). But it’s pretty far removed from the Mario/Super Meat Boy style of fast paced platforming – it also includes ledge-hanging and uses a accurately proportioned humanoid, reminding me of Prince of Persia or Another World.
Most platformers these days have some kind of unique twist on the classic Mario or Megaman formula. In the case of Outland, this is the ability to change between two different colours, blue and red, to avoid bullets and activate triggers. Lots of 3D games recently have used switching between two different modes to add additional elements – I’m thinking of the Veil from Wolfenstein, Wraith abilities in Shadow of Mordor and Eagle Vision in Assassin’s Creed, to name just three. In fact these have been getting pretty tiring recently, but I can’t think of any platformers I’ve played that use a similar tactic. It’s quite refreshing really. Admittedly, the games I just listed had asymmetric modes whereas in Outland the areas would work equally well the other way round.
The world in Outland is a ‘Castlevania’ exploration, with a map to keep track of where you are, and easy teleportation between places. It features relatively difficult boss battles before one acquires new powers, which grant access to new areas. All this I like.
The setting and story is vaguely mythological, and is told through text screens. I don’t think it adds much, it follows that famous Carmack quote: “Story in a game is like a story in a porn movie. It’s expected to be there, but it’s not that important.”
The graphics are excellent: It uses intricately detailed silhouettes against pastel shades to create quite a unique atmosphere. I wasn’t a massive fan of the music or sound though, and I think Outland lacks ‘game feel’ – some screen shake when jumping or landing would have added a lot, sometimes it seems as though one is controlling a lifeless ragdoll rather than an actual person interacting with a world.
Stealth Inc. 2
This is the sequel to a game called ‘Stealth Bastard’ which, full disclosure, I’ve not played. It belongs very squarely in the post-Portal world of puzzle games: there are even ‘test chambers’. In fact, the world game is oddly reminiscent of this video.
The game expands as areas are lit up on a black background. I really like the way it looks, using pixel art but at normal resolution, and a rendered 3D character.
The platforming is Megaman-esque, with high friction and low jumps, which feels great. There is basic physics which is used in some of the puzzles, but the main unique element is the simple stealth system, where one can be visible or invisible depending on whether the player is standing in a shadow or not.
The puzzles are quick but sometimes require thought. It makes me feel like I’m progressing quickly and exploring new areas.
There is a story, told through simple animations which don’t look all that good or fit the feel of the rest of the game in my opinion. I also didn’t really understand the story, but perhaps that’s because I didn’t play the first game.
The game also seems pretty badly optimized, and runs very slowly in 1080p, which shouldn’t happen on my machine, certainly not for a 2D game like this. The slowdown actually affects the game too, as opposed to dropping frames in most 3D games where the game takes this into account and moves objects further: that is to say, the physics is all calculated per frame rather than per second.
In Outland, every collision with an enemy loses one life, and when all lives are gone the game restarts with lives full at the last checkpoint. These checkpoints are relatively spread out, and the game only saves between sessions at each level.
In contrast, in Stealth Inc dying (by falling off, hitting a fan or being shot by a laser…) results in immediately respawning at a checkpoint just before, and these are close together. It’s not quite what happens in Fez where you return to wherever you fell off from, but it creates that same fast paced experience, and I think it works very well.
It’s been a week since Ludum Dare and Hue and Cry has been rated 23 times: I don’t know what the ratings are like yet but there are plenty of comments to mull over.
Firstly, here is a timelapse of me making the game:
Let me examine each aspect of the game in detail:
After reading the theme of LD33 (“You are the Monster”) I went straight to bed (it was 2AM BST). I didn’t sleep much of course, but I at least wanted the cold light of morning before I started on anything.
I assumed most people would take this theme as meaning the player controls what would be the enemy in a normal game. I couldn’t think of any original or interesting ways of doing this, so I instead interpreted “monster” in the way it is used for people.
I was, of course, not the only one to do this,
The direction I took was quite a dark one, and I don’t think I handled it well enough for the serious topic. I originally wanted the player to feel she was accidentally causing the deaths of well-meaning innocent bystanders, but that’s not quite how it came out.
Mood and Setting
The mood of the game followed immediately from the concept. Everything was grey as soon as I started drawing, and the rain effect occurred to me pretty quickly.
The setting in England happened fairly naturally as I started drawing, as that is what I know. I think it worked well, but it meant several references were probably lost on foreigners (e.g. ‘ASCO’ and signs pointing to ‘The North’).
I was pretty pleased with how the graphics came out. This is the first time I’ve drawn a significant amount of pixel art, and most of it looked alright to me. Several tips I’d picked up recently helped, especially the recommendation that everything should be slightly desaturated.
I used GIMP, which I hadn’t thought was good for pixel art in the past, but I pretty quickly set it up for quick workflow.
When I started I thought the introduction and conclusion would be told with a series of still digital paintings, but when it came to it I realised I didn’t have the skill or time to do that. The epistolary approach was very fast and I think effective too, though of course people are prone to skipping long chunks of text.
The human figures still need work. Animation was a pain to start with too.
The audio was one thing I think that could have gone better. The sounds I had in my mind were not what I managed to get out of bfxr and no amount of processing in Audacity seemed to fix that. I think experience will help in future, but live foley is an option too if I can get my old recording things set up properly.
Bosca Ceoil was a very pleasant discovery last week, and using it was a breeze. The songs I made were very simple and repetitive, but I think that was the correct thing to do given the limited time. The one thing I wish BC had is a simple level mixer but equilization in Audacity managed to get the sound I wanted.
When researching before LD started, I practiced with GameMaker: Studio a little. About 10 years ago I used GameMaker but had thought it was pretty restrictive in terms of deployment especially, and moved onto Flash – which was what everyone was playing at the time. Now most of my peers get games off Steam, and GameMaker is much more appealing. It was very quick to develop with, even given the steep learning curve. I was pleasantly surprised at how efficiently the games seem to run, as someone who usually develops in compiled C++.
I’ll be the first to admit that the gameplay isn’t great. it feels very unnatural that just touching an enemy kills you instantly, and it was necessary for some of the levels that this happened quickly, which together didn’t feel good at all.
It wasn’t obvious which blocks were solid and which were merely decorative, either.
The difficulty curve wasn’t great either, and at times the puzzles probably seemed very difficult. Several reviewers got all the way to the end though, which is reassuring.
I was pleased with the character controller, which I wrote in about an hour. That’s the first time I’ve written a tile-based platformer from scratch, and it seems pretty robust. I am indebted to Zack Bell for is excellent blog, which I read the preceeding week and whose ideas it was largely based on.
The game wasn’t perfect by a long way, but for my first game jam I think it went pretty well, especially the mood and graphics.