Bei diesem Projekt wird das klassische ZX Spectrum 48K-Spiel „The Great Escape“ von Denton Designs mithilfe von SkoolKit von einem Bandbild des Originalspiels in einen mit Querverweisen versehenen und kommentierten HTML-Disassembly- und Full-Assembler-Quellcode zurückentwickelt.
The Great Escape ist ein isometrisches 3D-Gefängnisausbruchspiel aus dem Jahr 1986 für 48K ZX Spectrum, in dem Sie einen Kriegsgefangenen spielen, der versucht, aus einem Nazi-Gefangenenlager zu fliehen. Es ist eines der angesehensten Spectrum-Spiele und ich möchte wissen, wie es den Autoren gelungen ist, all diese Magie in das 48K ZX Spectrum zu packen.
Lesen Sie hier die aktuelle Version der Demontage. Es handelt sich nicht nur um eine Montageliste, sondern auch um entschlüsselte Spielgrafiken, Charaktere, Gegenstände, Animationen und verschiedene andere Details zur Funktionsweise des Spiels.
Beachten Sie, dass die Disassemblierung möglicherweise hinter dem Kopf des Quellbaums zurückbleibt: Die neuesten Änderungen werden möglicherweise erst dann angezeigt, wenn ich einen aktualisierten Build pushe.
Mein erstes Ziel ist es, eine vollständig dokumentierte Zerlegung des Spiels zu erstellen. Mit SkoolKit können wir sowohl eine kommentierte Assembly-Liste erstellen, die für die Wiederherstellung eines exakten Abbilds des Originalspiels geeignet ist, als auch eine detaillierte, mit Querverweisen versehene Disassemblierung im HTML-Format.
Die zweite besteht darin, die kommentierte Assembly in C-Quellcode umzuwandeln, der sich genau wie das Originalspiel verhält. Das in Arbeit befindliche Neuimplementierungsprojekt befindet sich in diesem Repository und die beiden Projekte laufen parallel ab.
SkoolKit ist das unvergleichliche Python-Toolkit zum Zerlegen der ZX Spectrum-Software, geschrieben von Richard Dymond.
Neben der Erstellung der querverwiesenen HTML-Disassemblierung kann SkoolKit auch eine kommentierte Assembly-Liste erstellen. Damit können wir das Spiel wieder in eine .TAP-Datei zusammensetzen, die Sie in einen Emulator laden können. Sie können damit das Spiel verändern und 30 Jahre alte Fehler beheben!
git clone https://github.com/dpt/The-Great-Escape.git
cd <cloned repo>
make disasm
Wenn alles in Ordnung ist, sehen Sie eine Ausgabe wie:
$ make disasm
tap2sna.py --output-dir build @TheGreatEscape.t2s && mv build/TheGreatEscape.z80 build/TheGreatEscape.pristine.z80
Downloading http://www.worldofspectrum.org/pub/sinclair/games/g/GreatEscapeThe.tzx.zip
Extracting The Great Escape.tzx
Writing build/TheGreatEscape.z80
mkdir -p build
sna2skool.py --hex --sft TheGreatEscape.sft build/TheGreatEscape.pristine.z80 > TheGreatEscape.skool
Using skool file template: TheGreatEscape.sft
skool2html.py --hex --asm-labels --rebuild-images TheGreatEscape.skool
Using ref files: TheGreatEscape.ref, TheGreatEscapeBugs.ref, TheGreatEscapeChangelog.ref, TheGreatEscapeFacts.ref, TheGreatEscapeGame.ref, TheGreatEscapeGlossary.ref, TheGreatEscapeGraphics.ref
Parsing TheGreatEscape.skool
Output directory: build/TheGreatEscape
Copying /usr/local/lib/python3.7/site-packages/skoolkit/resources/skoolkit.css to skoolkit.css
Copying TheGreatEscape.css to TheGreatEscape.css
Copying static-images/BarbedWire.png to static-images/BarbedWire.png
Copying static-images/GameWindow.png to static-images/GameWindow.png
Copying static-images/JoystickControls.png to static-images/JoystickControls.png
Writing disassembly files in asm
Writing maps/all.html
Writing maps/routines.html
Writing maps/data.html
Writing maps/messages.html
Writing maps/unused.html
Writing buffers/gbuffer.html
Writing reference/bugs.html
Writing reference/changelog.html
Writing reference/facts.html
Writing reference/glossary.html
Writing graphics/glitches.html
Writing Intro.html
Writing Controls.html
Writing Completion.html
Writing Characters.html
Writing Items.html
Writing Masks.html
suggested width 17 > actual 16
Writing RoomObjects.html
Writing Rooms.html
Writing Map.html
Writing index.html
build/TheGreatEscape/index.html
in Ihrem Browser und tauchen Sie ein. make tap
erstellt build/TheGreatEscape.tap
make z80
um ein .z80-Image zu erstellen, wenn Sie dies bevorzugen.Jeder der oben genannten Schritte ruft automatisch den vorherigen Schritt auf.
make skool
– um die .skool-Datei zu erstellenTheGreatEscape.skool
make tap
build/TheGreatEscape.tap
in Ihrem Emulator neu Wenn Skool-Dateien nicht Ihrem Geschmack entsprechen und Sie eine reguläre Assembly-Auflistung bevorzugen: make asm
erstellt build/TheGreatEscape.asm
. Dies kann dann beispielsweise an Pasmo übergeben werden, um eine Binärdatei zu erstellen.
Das Reverse Engineering des Spiels ist nun abgeschlossen, es wird jedoch weiterhin daran gearbeitet, die Genauigkeit und Lesbarkeit der Zerlegung zu verbessern.
Hier sind die Folien einer Präsentation, die ich meinen Kollegen im Januar 2016 über das Projekt gehalten habe.
Es gibt auch eine neuere aktualisierte Version, die für eine Präsentation des Projekts im Jahr 2020 vor der ABug-Benutzergruppe geschrieben wurde: http://abug.org.uk/index.php/2020/07/04/the-great-escape-risc -os-conversion-david-thomas/
Im Jahr 2019 habe ich auf meiner Website ausführlich über das Projekt geschrieben: http://www.davespace.co.uk/the.great.escape/