Spielstand beim Wechsel der internen Batterie

Wir sammeln alle Infos der Bonusepisode von Pokémon Karmesin und Purpur für euch!

Zu der Infoseite von „Die Mo-Mo-Manie“
  • Hey,
    da ich vorhabe, demnächst die internen Batterien meiner GBA-Spiele zu wechseln, wollte ich mich hier mal erkundigen, ob dadurch die Spielstände auf den Cartridges verloren gehen. Kann mich erinnern, das mal gelesen zu haben und würde ungern meine Saves verlieren.
    Für alle hilfreichen Antworten schon einmal ein Danke im Voraus ^^

  • Blattgrün und Feuerrot besitzen keine Batterie, nur Rubin, Saphir und Smaragd.


    Bei den Spielen mit Batterie wird diese auch nicht zum Speichern genutzt, sondern um z.B. Beeren wachsen zu lassen.


    Auch wenn die Batterie leer ist, kann man noch Problemlos speichern, allerdings nicht mehr alle Sachen im Spiel machen.


    Kannst also Problemlos deine Batterie wechseln und brauchst keine Angst um deinen Speicherstand zu haben.

  • Bei mir steht so ein Batteriewechsel auch noch an und ich wollte mich irgendwann mal daran versuchen.


    Ich habe allerdings gehört, dass die Information "Batterie ist leer" auch noch irgendwo im Spielstand geflaggt wird - dass man also einen neuen Spielstand beginnen muss, um die Uhr wirklich wieder zum Laufen zu bekommen.


    Kann das irgendjemand, der so einen Wechsel schonmal vorgenommen hat, bestätigen oder widerlegen?


    Grüße,


    TCC

  • Habe den Batteriewechsel kürzlich vorgenommen und bei allen drei Editionen wurde weder der Spielstand gelöscht noch musste ich einen neuen beginnen, um zeitliche Events zum Laufen zu bringen, demnach würde ich sagen, brauchst du dir da keine Sorgen zu machen ^^


    Inzwischen habe ich das ebenfalls bei zwei Editionen gemacht und ich kann bestätigen, dass die Uhr weiter läuft.
    Allerdings läuft sie natürlich von der zuletzt bekannten Uhrzeit los und stellt sich nicht automatisch richtig. Mit einigen Tricks konnte ich die beiden Editionen jetzt auf annähernd richtige Zeit bringen und habe dadurch einen Verdacht zu der Uhr:


    Der RTC-Chip speichert nicht die Uhrzeit. Der RTC-Chip speichert die Zeiteinheiten, die seit der letzten RTC-Rücksetzung vergangen sind.
    Wenn gespeichert wird, wird die "aktuelle Zeit" (siehe unten) als neue "zuletzt bekannte Uhrzeit" gespeichert und der Zähler auf Null gesetzt.. Auf diese Art und Weise kann man den RTC zurücksetzen - was ohne Tricks wenig hilfreich ist.
    Ich habe den Verdacht (s.u.) , dass das auch beim Laden eines Spielstandes (Titelbild?) geschieht. Da das relativ schnell geht und die Indizes der "großen" Blöche nicht verändert, müsste die "zuletzt bekannte Uhrzeit" im globalen (kleinen) Teil des Spielstandes stehen. Ich habe noch nicht gesucht, ob und wo man die dort findet.
    Wenn im Spiel die "aktuelle Zeit" benötigt wird (Beerenfelder kommen in den Scope, Küstenhöhle wird betreten, Evoli entwickelt sich...), wird die RTC-Menge auf die "zuletzt gespeicherte"/"zuletzt bekannte" Uhrzeit addiert.


    Grundlage dieses Verdachtes:
    Die "zuletzt bekannte Uhrzeit" im Spielstand bleibt erhalten, wenn man zwischenzeitlich einen neuen Spielstand anlegt und die Uhr anders stellt.
    Ich hatte den Spielstand einer zeitlosen Edition einmal extern gesichert, einen neuen Spielstand, die Uhr gestellt, dann das Backup zurückgespielt. Die Uhrzeit war wie zuvor.
    Ich würde damit auch vermuten, dass sich die Uhrzeit übertragen würde, wenn man den Spielstand auf eine komplett andere Edition überspielt.


    Man kann "vergangene Zeit" in anderen Spielständen verschwinden lassen:
    Ähnliches Verfahren. Ich habe mir die Uhrzeit des Spielstandes der zeitlosen Edition gemerkt. Nachdem die Batterie ausgewechselt war, lief die Uhr von dieser Uhrzeit weiter. Dann habe ich den Spielstand gelöscht, einen neuen angelegt (es reicht, im Lastwagen zu speichern) und dann das Backup zurückgespielt. Es war nur soviel Zeit addiert wie nach dem Speichern des Zwischenspielstandes vergangen. Wenn man den Zwischenspielstand zur richtigen Real-Uhrzeit erstellt und anschließend den Backup-Spielstand zurückspielt, ist die Edition wieder auf der richtigen Zeit.


    Disclaimer:
    Diese Methoden erfordern natürlich eine Methode, einen GBA-Spielstand extern zu sichern und zurückzuspielen (Backup über Link-Port; Homebrew-Software auf Flashmodul).
    Derartige Methoden sind nach manchen Definitionen "Cheaten". Sie greifen die Hoheit des Spieles über den Spielstand an. Sobald diese Hoheit verletzt wird, sind "Zeitreisen" und damit einige potenziell fiese Dinge möglich: Zurücksetzen von unangenehmen Statistiken, Wiederholung von fehlgeschlagenen Turmkämpfen, mehrfaches Sammeln und Weitergeben von Unique-Items (Meisterbälle, Clamperl-Entwicklungsitems) und Unique-Pokemon (nicht-Klons), Echtes Klonen (Pokemon wegtauschen und Spielstand zurückspielen).


    Grüße,


    TCC

  • Hallo nochmal;


    sorry wegen "Double-Post" und Ausbuddelns eines alten Threads. Inzwischen habe ich mich nochmal etwas mit dem Thema beschäftigt (beschäftigen müssen) und kann mit den neuen Informationen den Verdacht etwas zurücknehmen. Einen neuen Thread war mir das allerdings nicht wert.


    Der RTC-Chip ist in der Lage, komplette Zeit- und Datumsinformationen zu speichern. Es gibt Felder für Jahr, Monat und Tag. 1.1.2000 00:00 Uhr ist möglich; laut Datenblatt gibt es zwei Ziffern für das Jahr - damit geht das bis zum 31.12.2099 23:59.
    Es könnte also auch bei einer Edition mit einer niemals endenden Batterie Probleme geben, wenn man das Spiel vor hundert echten Jahren begonnen hat. Möglicherweise müssen die Ur-Ur-Urenkel dann doch mal einen neuen Spielstand beginnen.


    Quelle: Datenblatt des Chips; Tool zum direkten Stellen des RTC-Chips.


    Somit wäre das Spiel in der Lage, ständig die "echte" Uhrzeit griffbereit zu haben. Das tut es aber nicht. Wenn ein neues Spiel begonnen wird, dann wird die Uhr auf 0 gesetzt. Alles ab da ist dann nur noch die "Zeit, seitdem der Spielstand gestartet wurde". Das wird noch mit einem Zeit-Offset aus dem Spielstand verheiratet; dieser ist aber nicht ganz so wichtig (< 1 Tag). Offen gesprochen: Ich habe ihn auch nicht komplett verstanden und nach einer kurzen Testreihe (n=3) hatte ich auch keine Lust mehr dazu.


    Quelle: Eigene Experimente


    Grundsätzlich scheint es zwei Typen von Zeitabhängigkeit im Spiel zu geben: Ich nenne sie mal "Uhrzeit" und "Timeout".


    "Uhrzeit"-Sachen sind abhängig von der "echten" (bzw. berechneten) Uhrzeit. "Von x bis y ist Ebbe, von y bis x ist Flut. Von x bis y heißt Psiana, von y bis x heißt Nachtara." Diese Uhrzeit wird auch in den Kinderzimmern angezeigt.


    "Timeout"-Sachen sind davon abhängig, dass Zeit abläuft. "In n Stunden sind die Beeren zur nächsten Stufe gewachen. In n Stunden wird die nächste Beere gratis herausgegeben." Stellenweise mag der Timeout so gesetzt sein, dass er um Mitternacht eines Tages abläuft, dennoch wird nicht auf den Tag geprüft, sondern auf abgelaufene Zeit.


    Die Küstenhöhle ist in der Hinsicht witzig, dass sie beide Typen vereinbart: Die Gezeiten sind von "Uhrzeit" abhängig, die Schalen und Salze werden über "Timeout" wieder aufgefüllt.
    Eigene Erfahrung: Manchmal ist es nötig, alle (leeren) Positionen abzulaufen und mit dem alten Mann zu sprechen, um diesen Timeout wieder in Betrieb zu setzen.



    Ein Problem hier ist: Nach einem Batteriewechsel funktionieren "Timeouts" meist (?) nicht mehr. Die Uhr im Zimmer läuft weiter - aber Beeren wachsen nicht.
    Das liegt darin, dass der Spielstand sich die zuletzt gesehene RTC-Zeit speichert (wieder: plusminus ein wenig Offset-Magie) und abgelaufene Zeit nur registriert, wenn die gespeicherte Zeit *kleiner* ist als die aus dem Chip gelesene.
    Das ist kein Problem, wenn die Uhr regulär läuft.
    Beispiel:
    * Ich habe 5 Jahre gespielt. Die interne Uhr sagt also "5 Jahre" (wurde zum Spielstandstart auf null gesetzt). Ich pflanze eine Beere und speichere. Der Spielstand merkt sich "5 Jahre".
    * Ich lasse das Spiel 3 Stunden lang liegen. Die interne Uhr sagt also "5 Jahre und 3 Stunden".
    * Ich lade den Spielstand. Das Spiel sieht "5 Jahre und 3 Stunden" in der Uhr und "5 Jahre" im Spielstand und weiß somit: "3 Stunden sind vergangen" - und lässt die Beeren entsprechend wachsen.


    Das ist aber ein Problem, wenn die Uhr zwischenzeitlich mal auf Null gesetzt wurde. Selbiges passiert leider, wenn die Batterie leer ist: Der Speicher im RTC-Chip kann nicht mehr gehalten werden. Nach Einlegen einer neuen Batterie geht es bei Null los.
    * Ich lade den Spielstand. Das Spiel sieht "Null Jahre und ein paar Minuten" in der Uhr und "5 Jahre" im Spielstand - und weiß somit, dass etwas schief gelaufen ist. Technisch könnte es jetzt noch vermuten, dass "100 Jahre und ein paar Minuten" der echte Fall ist - aber die Entwickler haben sich wohl dafür entschieden, das als "null" zu werten. Die Timeout-Events werden nicht aktualisiert: Beeren wachsen nicht. Leider wird beim Speichern auch nicht das Feld im Spielstand auf "Null Jahre und ein paar Minuten" gesetzt - sonst wäre das Problem mit dem nächsten Start behoben.


    Startet man einen neuen Spielstand, so werden die Felder wieder auf Null gesetzt. Legt man nach einem Batteriewechsel also nicht viel Wert auf den Spielstand, sondern eher auf die Beeren, so kann man einen neuen Spielstand starten und alles sollte wieder funktionieren.


    Komplizierter wird das, wenn man den Spielstand gerne behalten *und* mit Timeout-Events arbeiten möchte.
    * Wenn man direkten Schreibzugriff auf den Spielstand hat, kann man die Felder natürlich editieren und dem Spiel vorgeben, man hätte das Spiel tatsächlich bei "Null Jahre und ein paar Minuten" gespeichert. Hierfür müsste man einen bösen Savegame-Editor verwenden.
    * Wenn man die Möglichkeit der Speichermanipulation hat (Stichwort: "Cheatmodul"), könnte man auch hier schauen, ob man das Feld vor dem Speichern erfasst und korrigieren kann. Wer allergisch gegen Speichermanipulationsmodule ist, wird die Option auch nicht mögen.
    * Es gibt Homebrew-Software, mit dem man den RTC direkt auf eine Wunsch-Uhrzeit setzen kann. Das habe ich inzwischen bei meinen Modulen gemacht. Hierbei ist das praktisch, eine Beere einzupflangen und dann verschiedene Zeiten auszuprobieren. Wenn sich die Beere nicht verändert hat, muss man ein späteres Datum ausprobieren. Wenn die Beere schon wieder verschwunden ist, ist man in der Zeit zu weit nach vorne gereist. Man könnte noch versuchen, die "richtige" Zeit einzupendeln, aber auch bei "zu weit nach vorne gereist" sollten alle zukünftigen Timeout-Events wieder funktionieren.
    Auch diese Methode kann man zu unlauteren Zwecken nutzen. Ersetzt man "Ich lasse das Spiel 3 Stunden liegen" gegen "Ich schreibe 5 Jahre 3 Stunden in den RTC", ist die Beere gewachsen, obwohl ich nichtmal fünf Minuten Arbeit investiert habe. Somit könnte auch diese Methode ungern gesehen werden.


    Der Vollständigkeit halber: Wenn man irgendwann einmal einen Spielstand auf einem Medium gespielt hat, bei dem die "echte" Systemzeit als RTC-Zeit gemeldet wird, dann wird auch beim Speichern das Feld im Spielstand sehr weit nach oben gesetzt und man wird so bald mit dem Spielemodul nicht mehr daran kommen.
    Wer nicht zwischen den Zeilen lesen möchte: Das betrifft Emulatoren.
    * Ich speichere das Spiel auf dem VBA. Das Spiel sieht "14 Jahre, 8 Monate, 26 Tage, 18 Stunden" und speichert das im Spielstand.
    * Ich übertrage den Spielstand auf das Modul. Ich lade das Spiel auf dem Modul
    * Das Spiel sieht "5 Jahre 3 Stunden" im RTC und "14 Jahre plus" im Spielstand - irgendwas ist komisch: keine Beeren wachsen.
    "Beheben" lässt sich das Problem, indem man im RTC eine Datum aus der "realen" Zukunft einstellt. Das heißt natürlich, dass das gleiche Problem nun beim Einladen auf dem VBA entsteht.



    Fazit:
    Nach dem Auswechseln der Batterie ist es gut möglich, dass Beeren immer noch nicht wachsen - obwohl die Uhr sich bewegt. Einfach lässt sich das Problem nur durch Löschen des alten Spielstand und Starten eines neuen Spielstands beheben.


    Grüße,


    TCC