Contexte:
J'ai un problème pour obtenir la courbe de saut correcte pour un projet de remake de plateforme rétro. Le jeu original est pour la NES, et la vitesse du joueur est stockée dans deux parties distinctes: un octet pour le nombre entier et un autre pour la partie fractionnaire.
La gravité est ajoutée à la vitesse Y du joueur à un taux de 0,25 / image.
Lorsque le joueur saute, sa vitesse Y est fixée à -4,64453125. Le reste de la courbe de saut est laissé à la gravité.
Au fur et à mesure que le joueur monte, sa vitesse verticale converge vers 0 à raison de 0,25 / image. Cependant, lorsque la vitesse du joueur atteint une valeur inférieure à zéro, la vitesse change suivant un modèle différent. Au lieu de diminuer régulièrement de 0,25 à chaque image, il suit ce modèle:
[1.75, -0.25, -0.25, -0.25, 1.75, -0.25, -0.25, -0.25, 1.75, ...]
Il semble avoir quelque chose à voir avec un débordement d'entier.
Les données:
Voici un vidage des données de l'original. C'est un tableau de la vitesse.
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
Problème:
Dans mon jeu, je n'ai pas réussi à obtenir cet effet. Lorsque la vitesse est inférieure à zéro, elle continue de diminuer régulièrement de 0,25 plutôt que le schéma décrit ci-dessus. Plutôt que de stocker les parties entières et fractionnaires séparément, je les stocke ensemble dans un seul flotteur.
Comment obtenir cet effet?