Platformer based on Celeste and Celeste Origin
Download the CelesteClone.zip in Release tab on the right side.
Built for windows.
Arrow Key is for direction and movement
Press C to jump
Press X to dash
Procedural Terrain Generation was used in menu. Triangle.net library helped a lot.
The idea basically came from here.
Hood Color Change on dash is implemented using lookup table. It was inspired by this devlog.
I first made tools to convert sprite texture to lookup texture and table texture then used it in shader.
Dust(when player jump and land) and Dash Line Effect is implemented
using compute shader. Using Particle system was
possible option but wasn't efficient
as I had to set Every particle's position with cpu each frame.
Death Effect is implemented with pooling because
I had to create 8 game objects for circles.
Pooling system is left be more optimized.
Death Circles would be more pretty if they behave like metaball.
Collision is not implemented using unity built-in components.
It is because I wanted to implement the similar
collision system as the original game.
The Physics(collision) system is based on three
types of entities. Solid, Actor, and Trigger.
Specifics can be found here.
For entities that are collide-able and don't block actor,
I added Trigger class up on original system.
(for example, strawberry and dash orb inherit this class)
Tiles are solids but they can't inherit solid class because they
inherit from RuleTile class(In UnityEngine). So I created
TypeTile class that inherits RuleTile with AABB attached to handle collisions with actor.
Player moves based on state machine.
I could implement every single state inherit from IState.
But I wanted to keep every state in player class because it looked more intuitive.
For example for normal state, I declared NormalBegin(), NormalUpdate(), NormalEnd() in
player script and linked as callback from state machine.
The player class was referenced by this.
There are only two states currently but can easily be expended.
Got idea mainly from UserForgiveness
coyote time, jump buffering, lift momentum storage implemented
dashing wall jump and corner correction is yet to be implemented.