After writing this article on Sonic the Hedgehog I went back to the drawing board with regards to Tosh's movement system.
It was - on the surface - very sonic-like, but lacked a lot of the movement and momentum tricks that naturally informed level design. So I went back to first principles. I read up on sonics physics again and went back and played Sonic the Hedgehog 2.
Though Christmas and New Year took me away from coding, I've finally sat down and started working on it. The new movement system has a more fluid transition from air to ground, conserving momentum based on your velocity and the angle of the ground you hit, as well as detecting for the ground 'ahead' of you while in the air, and seeing if the ground angle matches your velocity, in order to mimic Sonic's ability to jump or spring up a wall, hit a quarter loop and start running on the ceiling. There is also the ability to build up momentum faster by spinning down hills and in U-shaped sections.
The first test is a basic replica of Emerald Hill Zone in order to narrow down the movement style and to see how to piece together sonic-like elements in an actual build environment, and the issues that using a modern engine would throw up. There's no enemies, no spikes, no power ups no end of level. You can't actually die. There's only springs. This level is just a test, and won't be in the final game.
It's not perfect. There's a few corner issues and there's a few bits of geometry that'll just kill your speed, and the animations aren't done. But you can run, jump and do a sonic-spin attack. There's no spin dash (and I'm doubtful about putting it in). The corkscrew platforms aren't in since I think Sega still hold a patent on them :|
Future tests should include more ceiling walking, bouncing on enemies, power ups, moving platforms etc. Once I get those in I can start thinking about actually building levels.
I've also moved to a new Level design system. Rather than building levels out of discrete tiles, I've employed the rather effective Ferr2D terrain system which should reduce draw-calls and increase performance over the previous way I was building levels. It should also ensure levels don't feel 'samey' being made out of the same reskinned pieces.