05.09.2010, 09:28
(27.08.2010, 09:56)Hendrik schrieb:(16.08.2010, 12:59)LN2 schrieb: Hex offset Uhrzeit 0x009B (Länge "short integer" also 2 Byte ?)
Wert 0x0000 bis 0xffff repräsentieren 12h
Wie darf ich mir das vorstellen? Sind die 12 Stunden gleichmäßig in 2^16 Abschnitte (á ca. 2/3 Sekunden) aufgeteilt, oder werden Minuten bzw. Sekunden gezählt (und somit 0xFFFF nie erreicht)?
Das erstere, die 12 Stunden sind auf 2^16 Abschnitte gleichmäßig aufgeteilt.
Wenn man also 2 Uhr haben möchte (ob nachmittags(pm) oder vormittags(am) hängt wie gesagt von 0x009D ab), rechnet man: "2h/12h *0xFFFF" was ungefähr 0x2AAB ist, wenn man das nach Byte-Vertauschung bei 0x009B einträgt ist es 2 Uhr.
(27.08.2010, 09:56)Hendrik schrieb:(16.08.2010, 12:59)LN2 schrieb: Hex offset Tag des Monats 0x00A0 Werte (für Monate 0x01 bis 0x0C): 0x01 bis 0x1EDas ist interessant. Ich frage mich, warum sie das so programmiert haben.
Werte (für 0x0D [Namenlosen Tage]): 0xFB bis 0xFF (0xFF ist der letzte Namenlosen Tag und damit der letzte Tag des Jahres)
Also, nachdem ich damit nicht soviel Erfahrung habe (also eigentlich so gut wie keine ), kann ich da nur mutmaßen.
Vielleicht ist das mehr oder weniger die Form wie das Datum auch im RAM liegt und da geht es vielleicht darum direkt am Byte für den Tag ablesen zu können, ob man nur den Tag oder auch den Monat verändern muss beim Übergang von einem Tag zum nächsten.
Sprich man spart sich vielleicht auf diese Weise eine If-Anweisung, weil man immer direkt weiß bei den Werten für den Tag 0x1E und 0xFF muss sich der Monat ändern und sonst nicht.
Wären die Werte für die Namenlosen Tage einfach 0x01 bis 0x05, dann müsste jedesmal wenn der Tag den Wert 0x05 annimmt anhand des Monats abgeprüft werden, ob man vielleicht doch den Monat verändern muss.
Zum einen ist das wahrscheinlich ein minimaler Performance Gewinn, zum anderen sah dadurch vielleicht der Source Code des Programmierers (nach dessen eigener Meinung) 'schöner' aus.
Aber wie gesagt ich spekuliere hier bloß.
(27.08.2010, 09:56)Hendrik schrieb:(16.08.2010, 12:59)LN2 schrieb: Hex offset Jahr 0x00A2 gespeichert als "Zweierkomplement"/"Two's complement" (siehe wikipedia)
Als Zweierkomplement? Soll das bedeuten, dass es auch negative Jahreszahlen gibt? Wenn das Spiel die Zeitrechnung nach Hal benutzt, sollten doch gar keine negativen Zahlen vorkommen. Übrigens ist "signed" oder "vorzeichenbehaftet" der gängigere Ausdruck für Zweierkomplement.
Zunächst mal, ja es gibt negative Jahreszahlen (gerade nochmal ausprobiert), was man da als Jahreszahl einsetzt zeigt er auch an (von -128 bis 127).
Die Programmierer werden wohl nicht allzu viele Gedanken darauf verschwendet haben, ob die Zeitrechnung in Ihrem Spiel noch der des offiziellen "Pen-&-Paper"-Rollenspieles entspricht, wenn jemand mit einem Hexeditor an der Jahreszahl 'rumgeschraubt' hat .
Mit dem Ausdruck Zweierkomplement wollte ich nur unzweideutig zum Ausdruck bringen, dass der Wert eine signed integer mit folgender Zuordnung ist: 0xFFFF-> -1;0xFFFE->-2; ... ; 0x7F-> -127; 0x80->-128
Und zum Beispiel nicht einfach das erste Bit das Vorzeichen darstellt. (Man führe sich bei Interesse einfach mal diesen Link zu Gemüte.)
(27.08.2010, 09:56)Hendrik schrieb:(16.08.2010, 12:59)LN2 schrieb: Hex offset Feiertag 0x00A3 0x00='keiner', 0x01='Sommersonnenwende', 0x02='Praiosfest', 0x03='Tag des Schwurs', 0x04='Schwertfest', 0x05='Tag des Wassers', 0x06='Vierter Rastullahellah', 0x07='Nebelfest', 0x08='Fischerfest', 0x09='Prüfungsfest', 0x0A='Tag der Heimkehr', 0x0B='Fest der eingebrachten Früchte', 0x0C='Tag der Helden', 0x0D='Tag der Treue', 0x0E='Totenfest', 0x0F='Fünfter Rastullahellah', 0x10='des Kaisers Geburtstag', 0x11='Tag des großen Schlafes', 0x12='Rohals Verhüllung', 0x13='Erleuchtungsfest', 0x14='Tag der Jagd', 0x15='Tag der Ifirn', 0x16='Erster Rastullahellah', 0x17='Tag der Erneuerung', 0x18='Tag des Phex', 0x19='Glückstag', 0x1A='Versenkungsfest', 0x1B='Saatfest', 0x1C='Zweiter Rastullahellah', 0x1D='Tag des Feuers', 0x1E='Tag des Aufbruchs', 0x1F='Tag der Waffenschmiede', 0x20='Fest der Freuden', 0x21='Reinigungsfest'Auch das finde ich merkwürdig. Wieso wird der Feiertag im Savegame festgehalten, wenn er doch ohnehin berechnet werden muss? Das ist einmalig ein kurzes Nachschlagen in einer Liste beim Laden, was während des Spiels ohnehin täglich geschehen muss. Wieso packt man so etwas in den Spielstand? *grübel*
Auch hier kann ich natürlich nur spekulieren, aber vielleicht haben die Programmierer halt einfach das was das Programm im RAM hat auch so in die Savegame-Datei geschrieben. Und ihnen war es halt nicht wichtig genug das eine Byte Platz pro Spielstand zu sparen.
Soweit ich mich zurück erinnere, waren Festplatten und andere Speichermedien damals zwar klein, aber nicht mehr so klein das man versucht hat jedes einzelne Byte zu sparen.