Antecedentes:
Tengo un problema para obtener la curva de salto correcta para un proyecto de remake de plataformas retro mío. El juego original es para el NES, y la velocidad del jugador se almacena en dos partes separadas: un byte para el número entero y otro para la parte fraccionaria.
La gravedad se agrega a la velocidad Y del jugador a una velocidad de 0.25 / fotograma.
Cuando el jugador salta, su velocidad Y se establece en -4.64453125. El resto de la curva de salto se deja a la gravedad.
A medida que el jugador asciende, su velocidad vertical converge a 0 a una velocidad de 0.25 / cuadro. Sin embargo, cuando la velocidad del jugador alcanza un valor inferior a cero, la velocidad cambia siguiendo un patrón diferente. En lugar de disminuir constantemente en 0.25 cada cuadro, sigue este patrón:
[1.75, -0.25, -0.25, -0.25, 1.75, -0.25, -0.25, -0.25, 1.75, ...]
Parece tener algo que ver con el desbordamiento de enteros.
Datos:
Aquí hay un volcado de los datos del original. Es una tabla de la velocidad.
Jump Curve
Y-Hi Y-Lo Decimal Change/Frame
4 165 4.64453125 ?
4 101 4.39453125 -0.25
4 37 4.14453125 -0.25
3 229 3.89453125 -0.25
3 165 3.64453125 -0.25
3 101 3.39453125 -0.25
3 37 3.14453125 -0.25
2 229 2.89453125 -0.25
2 165 2.64453125 -0.25
2 101 2.39453125 -0.25
2 37 2.14453125 -0.25
1 229 1.89453125 -0.25
1 165 1.64453125 -0.25
1 101 1.39453125 -0.25
1 37 1.14453125 -0.25
0 229 0.89453125 -0.25
0 165 0.64453125 -0.25
0 101 0.39453125 -0.25
0 37 0.14453125 -0.25
-1 229 -1.89453125 1.75
-1 165 -1.64453125 -0.25
-1 101 -1.39453125 -0.25
-1 37 -1.14453125 -0.25
-2 229 -2.89453125 1.75
-2 165 -2.64453125 -0.25
-2 101 -2.39453125 -0.25
-2 37 -2.14453125 -0.25
-3 229 -3.89453125 1.75
-3 165 -3.64453125 -0.25
-3 101 -3.39453125 -0.25
-3 37 -3.14453125 -0.25
-4 229 -4.89453125 1.75
-4 165 -4.64453125 -0.25
-4 101 -4.39453125 -0.25
-4 37 -4.14453125 -0.25
-5 229 -5.89453125 1.75
-5 165 -5.64453125 -0.25
-5 101 -5.39453125 -0.25
-5 37 -5.14453125 -0.25
-6 229 -6.89453125 1.75
Problema:
En mi juego no he podido lograr este efecto. Cuando la velocidad es menor que cero, continúa disminuyendo regularmente en 0.25 en lugar del patrón descrito anteriormente. En lugar de almacenar las partes enteras y fraccionarias por separado, las estoy almacenando juntas en un solo flotador.
¿Cómo se puede lograr este efecto?