Plik zapisu

From Treasure Adventure Game Wiki
Revision as of 20:55, 21 July 2023 by TadeLn (talk | contribs) (Created page with "* Liczba w ASCII zakończona spacją (0x20) - długość wpisu * Ciąg tekstowy zakończony nullem - klucz pary klucz-wartość * Ciąg tekstowy zakończony nullem - pierwsza z pary wartości, ciąg tekstowy * Liczba w ASCII bez zakończenia - druga z pary wartości, liczba całkowita. Ta liczba jest odczytywana z pozostałych bajtów we wpisie.")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Plik zapisu to plik gry, który zawiera aktualny stan gry. Gra tworzy lub aktualizuje plik zapisu po tym, jak gracz wejdzie w interakcję z Punktem Zapisu. Treasure Adventure Game może obsłużyć 3 osobne pliki zapisu ("game_save_1.dat", "game_save_2.dat", and "game_save_3.dat"), które są przechowywane w podfolderze "save_data" w folderze gry. Jeśli chcesz, możesz zamieniać lub modyfikować te pliki aby załadować inne pliki zapisu (nawet podczas gdy gra jest uruchomiona).

Plik zapisu przechowuje różne informacje o grze. Można je podzielić na:

Format pliku zapisu

Pliki zapisu to pliki binarne, które nie powinny być otwierane edytorem tekstu takim jak Notatnik. Zamiast tego, powinno używać się edytora heksadecymalnego, bądź dedykowanego narzędzia do edytowania plików zapisu TAG.

Format jest zasadniczo słownikiem, czyli listą par klucz-wartość. Klucze to ciągi tekstowe, a wartość to para składająca się z ciągu tekstowego i liczby całkowitej. Wpisy są położone jeden za drugim, a każdy wpis ma następującą strukturę:

  • Liczba w ASCII zakończona spacją (0x20) - długość wpisu
  • Ciąg tekstowy zakończony nullem - klucz pary klucz-wartość
  • Ciąg tekstowy zakończony nullem - pierwsza z pary wartości, ciąg tekstowy
  • Liczba w ASCII bez zakończenia - druga z pary wartości, liczba całkowita. Ta liczba jest odczytywana z pozostałych bajtów we wpisie.

Cały wpis zajmuje długość + długość_ascii + 3, gdzie długość jest wartością długości (zapisaną na początku wpisu), a długość_ascii jest długością wartości długość, kiedy jest ona przedstawiona jako tekst ASCII. + 3 pochodzi z dwóch bajtów null na końcach ciągów tekstowych i spacji jako zakończenia (0x20).

Przykład

Oto fragment przykładowego pliku zapisu:

34 33 20 63  68 65 73 74  20 32 30 20  63 6F 69 6E  43 chest 20 coin

73 31 39 37  37 31 30 32  00 43 68 65  73 74 20 32  s1977102.Chest 2

30 20 43 6F  69 6E 73 31  39 37 37 31  30 32 00 31  0 Coins1977102.1

34 35 20 63  68 65 73 74  20 32 30 20  63 6F 69 6E  45 chest 20 coin

73 32 30 32  33 30 31 35  30 00 43 68  65 73 74 20  s20230150.Chest

Po lewej stronie znajdują się bajty w systemie heksadecymalnym, po prawej stronie znajduje się przedstawienie tych bajtów jako tekst; bajty null są pokazane jako kropki (.)

Aby odczytać wartości z pliku, należy:

  1. Odczytać długość wpisu - w tym przypadku jest to 43.
  2. Odczytać klucz wpisu, dopóki nie napotka się bajtu null - w tym przypadku: chest 20coins1977102
  3. Odczytać tesktową wartość, dopóki nie napotka się bajtu null - w tym przypadku Chest 20coins1977102
  4. Odczytać następne x bajtów, gdzie x = długość_wpisu - (długość_klucza + długość_wartości_tekstowej). długość_klucza i długość_wartości_tekstowej to długości poprzednich ciągów tekstowych, wyłączając bajt null. Ten ciąg tekstowy zawiera wartość liczbową całkowitą w formie ASCII. W tym przypadku, x = 43 - (21 + 21) = 1, więc należy odczytać 1 znak. Ten znak to "1" więc wartość liczbowa wynosi 1.
  5. Powtórzyć proces od kroku 1 dopóki nie osiągniemy końca pliku

Więc, pierwszy wpis można przedstawić jako

Klucz Wartość tekstowa Wartość liczbowa całkowita
chest 20 coins1977102 Chest 20 coins1977102 1

Przeznaczenie wartości tekstowej jest aktualnie nieznane, i wygląda na to, że jeśli wartość tekstowa jest obecna, klucz jest zawsze wartością tekstową, ale zapisaną małymi literami.