I was playing a Metroidvania recently that had wall jumping. It felt awful. (The game also just had bad gamefeel in general but that's outside the scope of this rant haha.) It got me thinking about negative game friction.
For those that don't know, "game friction" in this context is any design element of a game that causes friction with the player. Typically you see it discussed around Fromsoft games and older titles that elements that push against the player in various ways. It is a neutral term, can depend heavily on the context in the specific game and the specific player, and it can apply to any aspect of a game from its appearance to its feel. I'm not going to get into the nitty gritty here, just know that generally it's good to have some friction.
So I was playing this game with wall jumping and it felt so off. To execute a wall jump you had to be pressed against the wall and hit "jump". Simple, right? But it didn't account for if you pressed jump a bit early, or were close to the wall but not fully pressed against it (despite the character sprite "touching"). So there were many times when I would attempt to wall jump only for it to not happen. This is Negative Friction. The rules of the game rub against the player's expectation in a way that negatively impacted the experience.
How could they have solved this? Well there would have been a few things that I would have done.
-
Early Wall Jump Latency - I would have had a short timer in the jump code (probably like 6 frames) that says "if the character touches a while while this timer isn't 0, then wall jump!" This is similar to what I like to call "Edge Latency" but is better known as "Coyote Time", essentially the time allowed for a player to press jump after they have moved off a ledge. This would give the player a bit of wiggle room where they can press jump slightly early and still get their desired result.
-
Distance Leniency - where above is about timing this is about spacing. The game I was playing didn't use pixel art. It had this really nice painted sprite work. However, it wasn't always clear if you were touching a wall. To reveal this what I would have done is check if the player is within a set distance from a wall (like 4 pixels or a quarter the width of the sprite, etc) then allow them to wall jump if they otherwise could. This would help prevent situations as I described above. Close enough is close enough. This is especially good if you're not making a precision platformer or using ultra small pixel art.
-
Can Wall Jump Sprite - Lastly I would have a sprite that shows the character is in a wall jumpable state. This is something games like Super Metroid and Mega Man X did and it helps a great deal. It causes players to go "Oh I can only do this when the character looks like this!" Games are art and art is fundamentally about communication. Telling when you're players can do something, even if subtly, goes a long way to reducing negative friction.
Anyway these are just some late night thoughts and frustrations, and I am the first to admit that one of my major motivators to make games is spite and playing lackluster games makes me want to work on my games by going "fucking I can better than this! Arrggg!"