C64 Mini-SaveGames manipulieren mit dem C64MiniSaveGameCheater

Vor einer Weile habe ich mir ja den C64 Mini angeschafft und hier vorgestellt.

So ziemlich das erste war, auf die neue Firmware 1.20 zu updaten, damit ich auch eigene Spiele mit .d64-Dateien laden und spielen kann. Davon hatte ich noch genügend aus C64-Zeiten erst auf den Amiga und dann auf später auf den PC gesichert.

Doch so schön und komfortabel das ist, nur ein Spiel auszuwählen und es wird dann automatisch geladen, so ganz ohne LOAD "$",8: etc., so fehlt einem doch die Möglichkeit nach dem Laden einen Cheat-Poke einzugeben. Auch einen Reset-Taster wie am C64 (immer als erstes nachgerüstet) hat der C64-Mini nicht, so dass auch sowas wie POKE 2710,55 : SYS 2048 nach einem Reset nicht funktionieren kann.

Als ich ein Let's Play für Loderunner aufnehmen wollte, für das ich keine Trainer-Version hatte, kam mir eine Idee:

1. Wenn man Spiele mit dem C64 Mini so speichern kann, dass es egal ist, an welcher Stelle man sich gerade beim Spielen befindet, dann muss in einem C64-Mini-Savegame doch ein gesamtes Speicherabbild gespeichert sein.

2. Wieviele Leben man hat, muss der C64 ja irgendwo im Speicher ablegen, damit er es runterzählen kann. Dieser Speicherort sollte für ein laufendes Spiel immer dieselbe Adresse sein, schließlich muss das Spiel den Ort ja wiederfinden.

3. Wenn ich jetzt 4 Spielstände speichere, jeweils mit unterschiedlicher Anzahl von Leben dann sollte die Speicheradresse in den 4 Savegames unterschiedliche Werte annehmen.

Ich könnte dann ein Programm schreiben, dass die 4 Savegames vergleicht und die entsprechende Speicherstelle findet. Und da schreibe ich dann einfach einen Maximal-Wert wie 255 hinein, speichere das als Savegame und schiebe es dem C64 Mini wieder unter. Dann müsste ich 255 Leben haben, vorausgesetzt, ich habe die richtige Speicheradresse erwischt und es gibt nicht so etwas wie eine Checksumme über den Programmspeicher, was ich dem C64 aber nicht zutraue. Der C64 ist eine Single-Task-Maschine mit sehr begrenztem Speicher. Da wird man nicht Routinen zur Sicherung der Programmintegrität implementieren.

Doch wie an die 4 Speicherstände herankommen? Nichts einfacher als das. Diese werden auf dem eingeschobenen USB-Stick im Ordner \.THEC64SAVE und dann unter Spielnamen gespeichert.

Mit dem Wissen habe ich ein kleines Progrämmchen entwickelt, für das mir kein dümmerer Name als "C64MiniSaveGameCheater" eingefallen ist:



Nachdem man 4 Speicherstände wie oben auf dem C64-Mini erstellt hat, zieht man den USB-Stick aus dem C64 Mini und steckt ihn in den PC. Dann gibt man den Pfad an und klickt auf Get Save Games - die 4 Screenshots der Spielstände werden angezeigt.

Danach gibt man die 4 Werte, um die es geht - hier die Anzahl der Leben - unter den jeweiligen Spielständen ein. Da die Zahl nicht sonderlich hoch ist, die die Anzahl Leben annehmen kann, kann die Auswahl bei 1 Byte bleiben. Auch die Byte Order lassen wir so. Dann wird auf Analyze geklickt und das Programm spuckt uns eine Zeile aus: 5004: SG1=01 02 06 00 *05 FF 20 01 C0 | SG2=01 02 06 00 *04 FF 20 00 00 | SG3=01 02 06 00 *03 FF 20 01 E0 | SG4=01 02 06 00 *02 FF 20 00 00 | Die bedeutet, dass es eine Speicherstelle (und zwar an Position 5004) gefunden hat, die die Suchkriterien erfüllt, nämlich die eingegebenen Werte zu den jeweiligen Speicherständen hat. Das muss unsere Speicherstelle für die Leben sein.

Hätten wir mehr als eine Zeile, so müssten wir diese entweder durchprobieren und schauen, ob auf dem C64 Mini das gewünschte Ergebnis erscheint, oder aber weitere Spielstände erstellen und die Speicherstellen wegstreichen, die nicht in allen Prüfungen vorkommen.


Wir haben aber Glück gehabt und haben eine eindeutige Speicherstelle. Nun tragen wir 255 rechts neben der Liste ein und klicken auf Save as Save Game 4 with new value. Das Bild für Spielstand 4 sollte sich nun verändert haben.

Dann stecken wir den Stick wieder in den C64 Mini, starten das Spiel neu und laden Speicherstand 4 (sollte am Bild erkennbar sein). Wenn alles geklappt haben, haben wir jetzt 255 Leben und unseren eigenen Trainer kreiert.

Eigentlich habe ich das Programm nur für mich selbst geschrieben. Aber mir ist klar, dass ein gewisses Interesse an solch einem Programm bestehen dürfte. Und deshalb habe mich entschieden, es auch anderen zur Verfügung zu stellen. Ihr könnt es also als Freeware downloaden - wer mag, darf natürlich eine kleine Spende auf meine Homepage da lassen.

Da unter denen, die das Programm gebrauchen können, sicher auch solche sind, die der deutschen Sprache nicht mächtig sind, habe ich mich entschieden, die Benutzeroberfläche in englisch zu halten. Was zu mit dem Programm zu tun ist, sollte eigentlich auch ohne diese Anleitung klar werden. Ansonsten gibt es ja auch noch reichlich Online-Übersetzer. Die Nur-Deutschsprachigen wiederum haben diese Anleitung und nachfolgend noch ein Video, in dem ich es kurz vorführe.

Das Programm ist wie gesagt eigentlich nur für mich selbst und ein Schnellschuss und nicht in allen Facetten ausgetestet. Es kann sein, dass es euch mit einer deutschen oder englischen Fehlermeldung abbricht. Dann habt ihr etwas falsch gemacht und müsst es nochmal versuchen. Wundert euch also nicht über Fehler, wenn ihr z. B. "Apfelmus" statt einer Zahl eingebt. Es braucht eine Menge Zeit ein Programm "idiotensicher" zu machen und die will ich nicht investieren, weil wie gesagt: das Programm war eigentlich nur für mich selbst gedacht. Darum keinerlei Gewährleistungen für geschrottete Spielstände oder sonst irgendwas. Benutzung auf eigene Gefahr.

Download

Aktuell ist Version 0.86 vom 2019-09-09

Installationsanleitung: Das Programme sollte auf allen Systemen von Windows 95 bis Windows 7 laufen. Danach kann ich keine Aussagen mehr machen. Wahrscheinlich läuft es auch auf Windows 8, Windows 10 weiß ich nicht. Aber normalerweise achtet Microsoft auf Abwärtskompatibilität.

Und hier noch einmal eine kleine Vorführung / Erklärung, wie man das Programm bedient: