pigdevstudio / platform_template

Template project for platform games in Godot Engine.
MIT License
72 stars 12 forks source link

Add a Coyote Timer and Jump Input buffering #36

Closed Zerokami closed 6 years ago

Zerokami commented 6 years ago

https://www.gamasutra.com/blogs/LisaBrown/20171005/307063/GameMaker_Platformer_Jumping_Tips.php https://www.youtube.com/watch?v=vFsJIrm2btU

Most modern platformers have a Coyote timer. Meaning Character can still jump for some time after they have gotten off the floor.

Also there is jump input buffering needed for polish. If player presses jump just before landing it will not register and player will feel they pressed jump and didn't jump. They will feel the game is buggy.

Here are demo images.

Without Coyote timer

Jump Without Coyote timer

With Coyote timer

Jump with Coyote timer

Without Jump input buffering

Jump Without input buffering

With Jump input buffering

Jump With input buffering

henriiquecampos commented 6 years ago

Let's break this into two issues:

The Coyote fall-timer is a really improvement to the game feeling I'll actually add it into milestones/juiceness.

But the jump buffering is different, it seems that I'll need some work-around (maybe a raycast or something) to actually achieve it and I don't see this in many games, although it seems a good thing to have, I'll postpone it for a future update. Although I'll be really happy if someone is able to implement it and make a PR :stuck_out_tongue:

henriiquecampos commented 6 years ago

Awesome, I implemented it at 36023ce check it out! Closing the issue until further feedback :pig:

Zerokami commented 6 years ago

Regarding Jump Input Buffering:

I think you'd just need to check if Player is falling and set a timer and if the player hits the wall below during the timer, you jump.

I don't think a raycast is needed.

As it is related to the player's reflexes and eyes which is related to time and not distance, it'd be undesirable to measure the distance.