The following blog post, unless otherwise noted, was written by a member of Gamasutraís community.
The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company.
(This is a repost from my personal blog)
I want to kick off a series of mini-articles where I’ll provide quick tips on game feel. So this week we’re talking about what I call “the ghost jump”. This seems to be one of those things that are useful to everybody no matter how old the advice really is, so we’re kicking off the series with it.
Video games have this ugly thing going on called “latency”. It’s not only related to networked games, unfortunately – your single-player platformer will have latency from video as well as input devices. I’ll dedicate an entire “game feel” article just to talk about latency, but for now let’s look at one of its most common and frustrating effects: the Bullshit-Fuck-I-Pressed-The-Button-and-I-Still-Fell-Into-the-Sodding-Pit”, or “The Bullshit” for short.
The Bullshit happens when you try to jump from the very edge of a platform to maximize your jump distance. But, alas, the game raises you the middle finger as your character stupidly falls to its demise without ever attempting to jump. Most of the time, it is not actually the player’s fault: a combination of input and video latency gives them the clear impression that, in fact, the button was pressed while the character was still on the platform.
Other times the player really did press the button a little too late, but unless you’re an asshole you really don’t want to punish him/her for that, do you? My school of design, at least, is focused on decision-making and quick thinking instead of perfect precision. Either way, latency does have an influence every time The Bullshit happens.
Here’s a playable example of The Bullshit using assets from a jam game I made called Boomerang Boy (Windows only, sorry about that):
So what do we do about it? The solution is quite simple: implement a Ghost Jump where you actually allow players to jump off a platform that is no longer there.
The way I usually go about it is to have a “Ghosting” variable that determines a delay to be used every time you would switch a character from being “grounded” (that is, able to jump) and in “mid-air” (not able to jump since he is already falling). So the game considers that a character is still able to jump for X seconds after he already fell from the platform, with X being the ghosting amount.
Press “G” in the example playable to toggle it on and off.
In the example above I used 130ms of ghosting, and I think it feels great. Even if you are offended by the notion of giving the player a little leeway on the jump timing, you should use at least 50ms of “ghost jumping” just to make it fair – this should be enough to compensate for most latency issues.
Oh, one last thing: don’t design levels where you require players to jump from the very tip of a platform because every time you do that a little baby dies of cancer.
Until next time!