Help with 2d Sonic style jump, walking speed acceleration

I’ve been trying to figure out how to do a variable style jump similar to mario and sonic, from their early games.

I found one solution based on gravity scaling.

It works on the surface, but unfortunately, if there’s a super long fall, then gravity is far too high given the circumstances. I’ve tried putting a simpler timeline on the released action, but the gravity would always end up making the player fall too fast.

Is there a way to make the variable jump via methods that don’t require changing gravity scaling?

The 2nd thing I’d like help with is movement acceleration over time. I’d like to control how fast the player start walking and eventually turns into running. I couldn’t find any helpful guides online, so I would greatly appreciate some ideas on this. I would like to avoid the use of a timeline for this as well.