Tony and Friends im Kellogs Land

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Antworten
Benutzeravatar
Jonathan
Establishment
Beiträge: 3018
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Tony and Friends im Kellogs Land

Beitrag 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 :)
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Antworten