Tony and Friends im Kellogs Land
Verfasst: 19.09.2026, 01:47
Moin,
ich versuche mich gerade an einem Windows nachbau von einem alten DOS Spiel.
Das Original kann man hier finden, und auch online direkt spielen: https://www.retrogames.cz/play_1464-DOS.php
Ein paar einleitende Worte zum Projekt hab ich ja schon hier geteilt: https://zfx.info/viewtopic.php?p=77280#p77280
Aktuell gibt es ein (recht grobes) Jump-and-Run Grundgerüst und die ersten Assets sind erfolgreich extrahiert. Hier mal ein Video vom aktuellen Stand: Der nächste Schritt, ist das exakte Gameplay zu extrahieren. Naja, zumindest exakt genug. Ich will später vielleicht ein paar Modernisierungen oder Anpassungen einbauen aber beim Spielen soll es sich zunächst genau so anfühlen, wie das Original. Frame- und Pixelgenaue Übereinstimmung ist aber optional.
Disassemblieren erschien mir zu aufwändig, daher habe ich einen anderen Weg gewählt. Das Spiel läuft ja in DosBox und ist 2D, ist tilebasiert und es gibt keine Bildschirmeffekte. DosBox kann verlustfreie Videos vom Gameplay aufnehmen, durch 2d matching kann man so also die Kamerabewegung und damit das komplette Level extrahieren. Hat man erstmal die Spieler-Sprites kann man außerdem für jeden Frame feststellen, wo der Spieler ist (in dem man herausfindet, welches Animationsframesprite gerade angezeigt wird, die genaue Bildschirmposition ermittelt und auch weiß, wo genau die Kamera ist, weil man ja das ganze Level kennt).
Dafür gibt es dann jetzt ein Tool, was entsprechend so aussieht: Man kann durch das Video scrollen und sich die extrahierten Werte anschauen und auch ein bisschen gucken, was in den Frames wo es nicht ermittelt werden konnte vielleicht schief läuft.
Der nächste Schritt ist dann, einfach ein bisschen rumzulaufen und rumzuhüpfen. Mit Frame-genauen Spielertracking kann man jetzt die Laufgeschwindigkeit ermitteln und anschauen, wie genau die Sprungparabel wohl aussieht. Die Ergebnisse dieser Analyse kann man hier nachlesen: Am Ende kriegt man dann folgende Referenzimplementierung heraus:
Joah, das sieht doch total sinnvoll aus, damit können wir jetzt erstmal weiter machen :)
ich versuche mich gerade an einem Windows nachbau von einem alten DOS Spiel.
Das Original kann man hier finden, und auch online direkt spielen: https://www.retrogames.cz/play_1464-DOS.php
Ein paar einleitende Worte zum Projekt hab ich ja schon hier geteilt: https://zfx.info/viewtopic.php?p=77280#p77280
Aktuell gibt es ein (recht grobes) Jump-and-Run Grundgerüst und die ersten Assets sind erfolgreich extrahiert. Hier mal ein Video vom aktuellen Stand: Der nächste Schritt, ist das exakte Gameplay zu extrahieren. Naja, zumindest exakt genug. Ich will später vielleicht ein paar Modernisierungen oder Anpassungen einbauen aber beim Spielen soll es sich zunächst genau so anfühlen, wie das Original. Frame- und Pixelgenaue Übereinstimmung ist aber optional.
Disassemblieren erschien mir zu aufwändig, daher habe ich einen anderen Weg gewählt. Das Spiel läuft ja in DosBox und ist 2D, ist tilebasiert und es gibt keine Bildschirmeffekte. DosBox kann verlustfreie Videos vom Gameplay aufnehmen, durch 2d matching kann man so also die Kamerabewegung und damit das komplette Level extrahieren. Hat man erstmal die Spieler-Sprites kann man außerdem für jeden Frame feststellen, wo der Spieler ist (in dem man herausfindet, welches Animationsframesprite gerade angezeigt wird, die genaue Bildschirmposition ermittelt und auch weiß, wo genau die Kamera ist, weil man ja das ganze Level kennt).
Dafür gibt es dann jetzt ein Tool, was entsprechend so aussieht: Man kann durch das Video scrollen und sich die extrahierten Werte anschauen und auch ein bisschen gucken, was in den Frames wo es nicht ermittelt werden konnte vielleicht schief läuft.
Der nächste Schritt ist dann, einfach ein bisschen rumzulaufen und rumzuhüpfen. Mit Frame-genauen Spielertracking kann man jetzt die Laufgeschwindigkeit ermitteln und anschauen, wie genau die Sprungparabel wohl aussieht. Die Ergebnisse dieser Analyse kann man hier nachlesen: Am Ende kriegt man dann folgende Referenzimplementierung heraus:
Code: Alles auswählen
vx = approach(vx, 1.5 * direction, 0.125)
x += vx
if jump_started_on_ground:
vy = -4.5
if jump_released_or_not_held and vy < -2:
vy = -2
y += vy
vy = min(vy + 0.125, 4)
resolve_ground_and_other_collisions() # not identified by this fitting experiment
render_full_sprite_box(floor(x), floor(y))