Hintergrund:
Ich habe ein Problem damit, die Sprungkurve für ein Retro-Platformer-Remake-Projekt von mir zu korrigieren. Das ursprüngliche Spiel ist für das NES und die Geschwindigkeit des Spielers wird in zwei getrennten Teilen gespeichert: einem Byte für die ganze Zahl und einem anderen für den Bruchteil.
Die Schwerkraft wird zur Y-Geschwindigkeit des Spielers mit einer Rate von 0,25 / Frame addiert.
Wenn der Spieler springt, ist seine Y-Geschwindigkeit auf -4,64453125 eingestellt. Der Rest der Sprungkurve bleibt der Schwerkraft überlassen.
Wenn der Spieler aufsteigt, konvergiert seine vertikale Geschwindigkeit mit einer Geschwindigkeit von 0,25 / Bild gegen 0. Wenn die Geschwindigkeit des Spielers einen Wert unter Null erreicht, ändert sich die Geschwindigkeit jedoch nach einem anderen Muster. Anstatt sich mit jedem Frame stetig um 0,25 zu verringern, folgt es diesem Muster:
[1.75, -0.25, -0.25, -0.25, 1.75, -0.25, -0.25, -0.25, 1.75, ...]
Es scheint etwas mit Integer-Überlauf zu tun zu haben.
Daten:
Hier ist ein Dump der Daten aus dem Original. Es ist eine Tabelle der Geschwindigkeit.
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
Problem:
In meinem Spiel konnte ich diesen Effekt nicht erzielen. Wenn die Geschwindigkeit kleiner als Null ist, nimmt sie statt des oben beschriebenen Musters regelmäßig um 0,25 ab. Anstatt die gesamten und gebrochenen Teile getrennt zu lagern, lagere ich sie zusammen in einem einzigen Schwimmer.
Wie kann dieser Effekt erzielt werden?