Topic:
The theme of this month's project was “Movement Experimentation”. Celeste is one of my favorite movement-based games, both as a casual player and as a speedrunner, so I wanted to see how difficult it would be to recreate some of the more advanced dashing mechanics like Super Dashes and Wavedashes.
Basic Movement:
My goal was to replicate Celeste's system of jumping and dashing inherently, without having to specifically program each special interaction. I couldn't get this to work for everything, but I decided to use a RigidBody and apply forces to it as the primary method of movement (I thought this would fit Celeste's system because it also seems primarily force-based). I messed around with the AddForce method until I was happy with the results.
![](https://uploads.gamedev.net/blogs/monthly_2024_02/5acf44861a1b4e75aaf6a6537af5efb3.image.png)
I also had to adjust the RigidBody's angular and linear drag. Since the player is a circle, it rolls on the ground, which wasn't really my intention, but I liked the look of the circle, so I maxed out the angular drag to make it feel more like a “human” instead of a ball.
![](https://uploads.gamedev.net/blogs/monthly_2024_02/8ddff3d95e41402cadcadb0a07be2a02.image.png)
![](https://uploads.gamedev.net/blogs/monthly_2024_02/771f89f70a7e4fd79e841d07a6719f1d.RoleProjectJump.gif)
![](https://uploads.gamedev.net/blogs/monthly_2024_02/4000a8994fa74834a2b95dafca0698e8.jelly-madeline.gif)
![](https://uploads.gamedev.net/blogs/monthly_2024_02/75c44934886c4eeaaffa3e2a9c825e25.RoleProjectDashing.gif)
![](https://uploads.gamedev.net/blogs/monthly_2024_02/8fc26486736741289f1bce860a3af814.Demodash.webp)
Like Celeste, you can dash in all 4 cardinal directions, and diagonals.
Advanced Movement:
There are some advanced techniques in Celeste that require both jumping and dashing with precise timing and direction. The two I wanted to implement were Super Dashes and Wavedashes. However, they weren't emergent with the basic force methods I used, so I had to implement them manually. I kept track of the player state, and if the player was still dashing when they jumped (plus a small window for leniency), they would get the modified AddForce values instead of the usual jump values.
![](https://uploads.gamedev.net/blogs/monthly_2024_02/95bbbd071d6f44caa0f704f1211e7183.image.png)
A Super Dash just involves jumping immediately after you dash forward on the ground. It gives you a slight speed boost and height boost, compared to just a normal jump/dash.
![](https://uploads.gamedev.net/blogs/monthly_2024_02/1a6922a7caf74391b9ba38aa98d27673.RoleProjectSuper.gif)
![](https://uploads.gamedev.net/blogs/monthly_2024_02/cde8621c82114c41ab71e3432c98432d.fh18xlkyrl561.gif)
A Wavedash is similar, but requires dashing diagonally into the ground from the air, then jumping. It doesn't provide as much of a height boost, but gives even more of a speed boost.
![](https://uploads.gamedev.net/blogs/monthly_2024_02/606660cefb46473882ba6b87325a3717.RoleProjectWave.gif)
![](https://uploads.gamedev.net/blogs/monthly_2024_02/f881f9820b3f4fa9aad08b03b964e968.2py1rskyrl561.gif)