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.
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.
This is an analysis of the physics mechanics for New Super Mario Bros. Wii (NSMBW). I imagine the physics for the rest of the New Super Mario Bros series (i.e. the original DS game, the 3DS game and the Wii U game) are virtually identical.
Screenshots included in this article are the copyright of Nintendo and are used under fair use.
Like the very earliest Mario games, NSMBW is tile based. Look at this screenshot:
We see that the blocks by Mario’s head are clearly simple squares, but the ground seems to have smooth curves. Now we overlay a grid the same size as the blocks:
Now we see that each part of the slope is just a tile. Here we have three different slopes: flat, 1:2 and 1:1. It’s also interesting to spot the repetitions of the tiles of the terrain.
That said, not everything in Mario is built of square tiles. The moving platforms and rotating circular bits (e.g. World 1-1) are handled differently. I may cover this in a later part.
The Mario games are famous for having a “slippery” feeling, as opposed to many other platformers. The acceleration is slow, but the top speed is quite high, making them feel fast paced.
Without the run button pressed, it takes about a second to get to top speed. With the run button pressed, accelerating is higher and so is top speed, mimicking real drag forces. Friction is also low, taking about a second to stop from walking, and even longer from running.
On ‘ice’ tiles, all these are exaggerated, with acceleration lower, and friction lower too.
I’d always be tempted to code this movement explicitly rather than trying to do force balance, so that top speed and acceleration curve can be fine tuned to what feels best.
On upwards slopes, the horizontal acceleration and top speed are decreased, and on downwards slopes they are unchanged, again as if the forces were resolved correctly, and the force were always in the horizontal direction – rather than up the slope. Note however that Mario never runs off a downwards slope. We’ll come onto this in the next part.
This is a fairly realistic uniform acceleration and drag (so alternatively, acceleration decreases with speed downwards).
Jumping is quite interesting. Mario can jump up to 4 blocks high, but he can only reach this is one holds the jump button until he’s reached the top, otherwise he falls back down. Just tapping the button makes him continue jumping for a while after the button is released – he can never jump less than one block. Holding the button until it makes no difference then means he falls away instantly. So it is neither of these two possible implementations:
The jump speed is uniform up to a certain point in time, when it switches to using gravity
A uniform acceleration is applied when the jump button is pressed, and gravity is present throughout
Instead there seems to be a desired velocity, more or less a parabola, which has less deceleration than it would under normal gravity. Then releasing the button just switches to the usual gravity.
In the next part I will cover collisions in depth.
I’m going to try my first Ludum Dare this weekend. I’m not sure how it will go.
I’m toying with the idea of using GameMaker Studio. It’s been 10 years since I last tried GameMaker and it seems to have really come on since then. Several games that I really like (e.g. Nidhogg, Super Crate Box) were developed with it, and it seems to be very well suited for things quickly.
The other options would be Unity or XNA. Writing in raw Direct3D just isn’t practical when I only have 48 hours for the whole game.
On the audio side, I’ve been playing with sfxr, which I think is really cool, and Bosca Ceoil (which is made by the guy who did Super Hexagon, Terry Cavanagh). If there’s time I’ll master these in Audacity.
I’m not really sure about graphics yet. I have GIMP and Pro Motion ready, but depending on the theme I’m quite likely to use geometric shapes. I don’t think my pixel art is up to scratch and my digital painting is probably too slow.
I plan to record a timelapse, so I’ll post that here when I’m done (or more likely, a week later, as I am going on holiday).
I’ve started reading up on the D programming language. (The book I’m reading is called “The D Programming Language” – á la C – and I’d recommend it, if only for the humorous style.) And I have to say it’s very cool. Whenever I’ve used C++ in the past, I’ve thought of ways it could be better, more useful. There are probably posts in this blog about it in fact. Well D is basically C++, but with all the things that it should have had from the start. I’d like to talk about all the features but you might as well read about them yourself. When I find an interesting way of using one I’ll probably post about it here.
It’s been over two years since I’ve written here, but I think I shall start again. I didn’t really add anything, that I remember, to pdEngine since the last post, and there’s not much that I’d like to add. It was a fun experience to write, but looking back it’s an inefficient mess. Since then I haven’t had any major programming projects. I contributed a few lines of code to an indie game or two, I hacked some features into some audio software for my band and I wrote the odd little program to test maths theories I’ve had, but nothing major. In fact, I pretty much forgot any intermediate to advanced C++ I knew. Reading this blog has taught me things. In three weeks time I start reading the Mathematics Tripos at the University of Cambridge, probably the hardest undergraduate maths degree in the world. So maybe I won’t have time for programming. But then again, I’d like to get into it. There should be lots of people (many of them actually reading computer science, not chickening out like me) who can program, and I might find some guys to do a project with. Or I might start one of my own. Either way, with that in mind – and the fact that I have a few weeks to spare doing nothing – I’ve started reading up on programming. I’ve found textbooks on assembly and algorithms and TCP/IP, and much more importantly, a few on best practices in C++ and in general. This is something I never really learnt, with only limited team experience. We’ll see how that goes.