Valheim-1.0-Speicherformat: die neue .fwl2-Datei erklärt
Valheim 1.0 ändert, wie das Spiel Welten schreibt. Iron Gate sagt es in zwei Sätzen in den Patchnotes; wir wollten die Dateien sehen. Diese Seite ist das rohe Messprotokoll, mit der Methode zum Nachmachen.
Nichts hiervon ist einer Pressemitteilung entnommen: alles kommt von Valheim-1.0-Servern, die wir
betreiben (l-1.0.7), und von einer alten Welt, die wir beim Konvertieren beobachtet haben.
Wenn du keine eigene Maschine betreiben möchtest, kannst du einen Valheim-Server stundenweise mieten: Abgerechnet wird nach angefangener Stunde, der Start zählt nicht mit, und ein gestoppter Server kostet nichts.
Die Methode, damit du sie ablehnen kannst
Zwei Messungen, zwei Quellen. Die Form der Dateien wird aus den Archiven unserer eigenen 1.0-Server gelesen: Weltarchiv öffnen, Inhalt auflisten, bei den kleinen Dateien die Bytes ansehen — ohne Interpretation. Die Konvertierung einer alten Welt wurde getrennt beobachtet, auf einer für den Anlass gemieteten Maschine (2 geteilte vCPU, 4 GB RAM, in Deutschland): eine Welt im alten Format erzeugt, sauber beendet, damit sie geschrieben wird, dann dasselbe Datenverzeichnis mit dem neuen Speichersystem neu gestartet. Dieser Wechsel zeigt die Konvertierung — und daher kommen die Bytes in der Tabelle weiter unten.
Vorher: zwei Dateien
Im alten Format ist eine gespeicherte Welt ein flaches Paar:
worlds_local/
tickserv.db 322 596 B
tickserv.fwl 49 B
tickserv.fwl.old 49 B
tickserv_backup_auto-20260906114306.fwl 49 B
Zwei Dinge, die wir nicht erwartet hatten und die zählen, wenn du eine Welt von Hand umziehst. Die
.fwl ist 49 Byte groß und existiert ab dem Moment der Welterzeugung: die .db erscheint erst
beim ersten Speichern. Ein Ordner mit nur einer .fwl ist also keine leere Welt, sondern eine Welt,
die nie gespeichert wurde. Und das Spiel legt seine eigenen Kopien neben die Welt, mit dem Präfix
_backup_auto- — sie liegen in dem Ordner, den du kopierst, ohne dass es irgendwo steht.
Nachher: ein Ordner, und Stücke
Mit dem neuen Speichersystem neu gestartet, wird aus derselben Welt das:
worlds_local/
tickserv/
_main.1.fwl2 49 B
_main.1.db2 133 435 B
_main.1.chunks 32 B
_main.1.ok 4 B
00_00__0_1.chunk 1 464 B
00_01__0_1.chunk 6 B
tickserv_backup_20260906-115918.db 322 596 B
tickserv_backup_20260906-115918.fwl 49 B
Das Entscheidende: die Endung ändert sich. Es ist nicht mehr .fwl, sondern .fwl2, und aus der
.db wird .db2 samt .chunk-Dateien. Ein Werkzeug, das nach *.db und *.fwl sucht — ein
Backup-Skript, der Importer eines Anbieters — findet auf einer 1.0-Welt nichts. Und das
stillschweigend: kein Fehler, nur eine fehlende Welt.
Der Name der Welt lebt im Ordnernamen — und, wie wir weiter unten sehen, auch in der .fwl2. Die
Dateien darin sind generisch, und ihre Nummer steigt mit jedem Speichern (_main.1.*, dann
_main.2.*).
Die Konvertierung behält eine vollständige Kopie und kostet 42 %
Das Serverprotokoll sagt Moved old World save into backup!. Das ursprüngliche Paar bleibt
unverändert erhalten, umbenannt zu <welt>_backup_<zeitstempel>. Gemessenes Ergebnis:
| Byte | |
|---|---|
| Vor der Konvertierung | 322 743 |
| Nach der Konvertierung | 457 733 |
Also +42 %, nicht die Verdopplung, die man befürchten könnte: die konvertierte Welt (133 kB) ist deutlich kleiner als die daneben liegende Kopie der alten (322 kB). Diese Kopie ist auch dein einziger Ausweg, wenn die Konvertierung schiefgeht — das Spiel kann eine Welt nicht selbst zurückrollen.
Was sich nicht ändert: der Download
Der dedizierte Server ist genauso groß wie vorher. Aus der SteamCMD-Ausgabe gelesen: 1 761 753 577 Byte, also etwa 1,76 GB — dieselbe Größenordnung wie die 1,75 GB, die wir vor 1.0 gemessen haben. Wenn du eine Maschine für 1.0 umdimensionierst, ist der Download nicht das, was sich bewegt hat.
Die Netzwerkversion: 39 in 1.0
Der Server meldet Valheim version: l-1.0.7 (network version 39), wo er vor 1.0 noch
network version 36 sagte. Diese Zahl entscheidet, ob ein Spieler hereinkommt. Da Steam die Clients
von allein aktualisiert, ist ein Server, der noch nicht gewechselt hat, ein Server, in den niemand
mehr hineinkommt — bis er sich aktualisiert.
Die Backups des Spiels gehen nicht mit denen des Images aus
Eine Hosting-Falle. Das lloesche-Image hat eine BACKUPS-Einstellung für seine eigenen
stündlichen Archive. Sie hat keine Wirkung auf die Backups, die das Spiel selbst anlegt, und der
Server sagt es in seinem Protokoll:
Considering autobackup for World. […] short time: 7200, long time: 43200, backup count: 4
Das sind die drei von Iron Gate dokumentierten Standardwerte (-backups 4, -backupshort 7200,
-backuplong 43200): bis zu vier Kopien, eine nach zwei Stunden, dann drei im Abstand von zwölf
Stunden. Sie liegen in worlds_local, also in jedem Archiv, das du von diesem Ordner machst. Auf
einem Server, der nur wenige Stunden am Stück läuft, greifen die drei „langen" nie — -backups 1
verliert also fast nichts.
Eine Welt umzubenennen funktioniert, in beiden Formaten
Nützlich beim Umzug: Valheim lädt eine umbenannte Welt, es baut keine neue. In beiden Formaten
geprüft, und der Richter ist eine Protokollzeile — Done generating locations erscheint nur bei
einer neuen Welt.
| Format | Handgriff | Done generating locations |
|---|---|---|
| Vor 1.0 | MeineWelt.db + .fwl umbenannt |
0-mal (gegen 1-mal bei der Erzeugung) |
| 1.0 | Ordner MeineWelt/ umbenannt |
0-mal |
In beiden Fällen waren die Bytes der Welt nach dem Umbenennen unversehrt.
Der Weltname steht IN der Datei — entscheiden tut aber der Ordner
Die _main.<n>.fwl2 hat nicht 49 Bytes wie die alte .fwl: 179 bis 232 Bytes auf unseren
Servern, denn sie trägt den Weltnamen, den Seed und die Liste der bekannten Spieler (Kennung, Name,
Token). Ihre ersten acht Bytes sind zwei 32-Bit-Ganzzahlen — die Länge alles Folgenden, dann die
Formatnummer des Speichersystems (41, dieselbe in _main.<n>.ok und am Anfang der .chunks).
Dann kommt der Name, dem seine Länge vorangeht, dann der Seed:
e4 00 00 00 29 00 00 00 08 't','i','c','k','s','e','r','v' 0a 'R','b','j',…
└ 228 = der └ 41 = das └ 8 + der Name └ 10 + der Seed
Rest der Speicher-
Datei format
Und trotzdem entscheidet der ORDNER darüber, was geladen wird. Eine Welt, deren .fwl2
MeinLauf nennt, in einem Ordner tickserv/ abgelegt, wird von einem mit -world tickserv
gestarteten Server anstandslos geladen — genau der Fall einer Welt, die ein Spieler mitbringt und die
unter dem Namen abgelegt wird, den der Server öffnet. Und der Server sagt es selbst, mit beiden
Namen:
ZNet.LoadWorld: MeinLauf (tickserv), save number 8
ZoneSystem.Load => Loaded 12.327 locations
Das ist die Zeile, die du suchst, wenn du wissen willst, ob ein Server DEINE Welt geladen oder eine
andere gebaut hat: der erste Name ist der deiner Welt, der zweite der, den der Server verlangt hat.
Der Zähler save number steigt mit jedem Speichern — praktisch, um zu prüfen, dass eine Welt noch
lebt.
Was wir nicht gemessen haben
RAM und CPU eines 1.0-Servers mit Spielern darauf: dafür braucht es echte Spieler, und wir wollten keine Schätzung als Messung ausgeben. Da der Deep North nur auf unerkundetem Gelände erscheint, stellt sich die Frage ohnehin erst nach einigen Erkundungssitzungen.
Das Verhalten der Konvertierung mit Mods wurde ebenfalls nicht getestet — Iron Gate schreibt ausdrücklich, dass das neue Speichersystem es nicht wurde.
Diese Messungen stammen aus unserem eigenen Betrieb von Valheim-Servern. Wenn du dich damit nicht beschäftigen willst: Valheim ansehen.