Seite 1 von 1

Tony and Friends im Kellogs Land

Verfasst: 19.09.2026, 01:47
von Jonathan
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:
kellogs_remake.mp4
(8.95 MiB) 2-mal heruntergeladen
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:
ChatGPT_7DgsU20EP6.png
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:
kellogg-movement-report.pdf
(667.44 KiB) 2-mal heruntergeladen
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))
Joah, das sieht doch total sinnvoll aus, damit können wir jetzt erstmal weiter machen :)