27-09-2016, Tuesday-14:33:06
Um mich in die Struktur der PAK-Dateien einzuarbeiten, habe ich versucht mit dem aktuellen makeobj bestehende PAK-Dateien zu extrahieren. makeobj bricht stets mit folgender Fehlermeldung ab:
""ERROR: Unmerge: factory.Moebelhaus.pak is not an archieve (aborting)
For help with this error or to file a bug report please see the Simutrans forum:
http://forum.simutrans.com""
Software: Simutrans 120.1.3 und diverse PAK-Sets (z. B. PAK128.german 0.9) als kompilierte RPMs aus den OpenSUSE repositories. Da OpenSUSE makeobj nicht mitliefert wurde zusätzlich der Sourcecode von Sourceforge gezogen (simutrans-src-120-1-3.zip) und daraus makeobj kompiliert. Nach der Installation der entsprechenden Bibliotheken ist das dann auch gelaufen.
Schritte zur Fehlerreproduktion:
1) Terminalprogramm öffen
2) Anlegen eines Arbeitsverzeichnisses und dann hineinwechseln
3) Kopieren eines oder mehrerer PAK-Dateien in das Verzeichnis
4) makeobj ausführen
Das selbe Ergebnis tritt mit allen von mir getesteten PAK-Dateien (mehrere aus PAK128.german, eines aus PAK) auf.
LIST und DUMP liefern folgende Ergebnisse:
Ich konnte den Bug bis in die Zeile 372 der Datei root_writer.cc zurückverfolgen. Dort wird mit der Methode obj_node_t::read_node eine Datenstruktur root vom Typ obj_node_info_t aus der übergebenen Datei gelesen, wobei dann root.children den Wert 1 erhält. Weiter habe ich den Code nicht verstanden.
Ich hoffe, das hilft. Das Spiel selbst ist bei mir problemlos gelaufen.
MfG
Edwin
""ERROR: Unmerge: factory.Moebelhaus.pak is not an archieve (aborting)
For help with this error or to file a bug report please see the Simutrans forum:
http://forum.simutrans.com""
Software: Simutrans 120.1.3 und diverse PAK-Sets (z. B. PAK128.german 0.9) als kompilierte RPMs aus den OpenSUSE repositories. Da OpenSUSE makeobj nicht mitliefert wurde zusätzlich der Sourcecode von Sourceforge gezogen (simutrans-src-120-1-3.zip) und daraus makeobj kompiliert. Nach der Installation der entsprechenden Bibliotheken ist das dann auch gelaufen.
Code:
> makeobj
Makeobj version 55.4 for Simutrans 120.1.3 and higher
Usage: MakeObj [QUIET] [DEBUG] <Command> <params>
MakeObj CAPABILITIES
Gives the list of objects, this program can read
MakeObj PAK <pak file> <dat file(s)>
Creates a ready to use pak file for Simutrans from the dat files
MakeObj pak128 <pak file> <dat file(s)>
Creates a special pak file for with 128x128 images
Works with PAK16 up to PAK32767 but only up to 255 are tested
MakeObj LIST <pak file(s)>
Lists the contents ot the given pak files
MakeObj DUMP <pak file> <pak file(s)>
List the internal nodes of a file
MakeObj MERGE <pak file library> <pak file(s)>
Merges multiple pak files into one new pak file library
MakeObj EXTRACT <pak file archieve>
Creates single files from a pak file library
...
Zoom: If image is zoomable or not
Schritte zur Fehlerreproduktion:
1) Terminalprogramm öffen
2) Anlegen eines Arbeitsverzeichnisses und dann hineinwechseln
3) Kopieren eines oder mehrerer PAK-Dateien in das Verzeichnis
4) makeobj ausführen
Code:
Simutrans-MyData> ../Simutrans/makeobj/makeobj EXTRACT good.Fisch.pak
Makeobj version 55.4 for Simutrans 120.1.3 and higher
ERROR: Unmerge: good.Fisch.pak is not an archieve (aborting)
For help with this error or to file a bug report please see the Simutrans forum:
http://forum.simutrans.com
Simutrans-MyData>
Das selbe Ergebnis tritt mit allen von mir getesteten PAK-Dateien (mehrere aus PAK128.german, eines aus PAK) auf.
LIST und DUMP liefern folgende Ergebnisse:
Code:
Simutrans-MyData> ../Simutrans/makeobj/makeobj LIST good.Fisch.pak
Makeobj version 55.4 for Simutrans 120.1.3 and higher
Contents of file good.Fisch.pak (pak version 1003):
type name nodes size
---------------- ------------------------------ ----- ----------
good Fisch 3 17
Simutrans-MyData>
Simutrans-MyData> ../Simutrans/makeobj/makeobj DUMP good.Fisch.pak
Makeobj version 55.4 for Simutrans 120.1.3 and higher
File good.Fisch.pak (version 1003):
000 ROOT-node (root) 0 bytes
000 GOOD-node (good) 10 bytes
000 TEXT-node (text) 6 bytes 'Fisch'
001 TEXT-node (text) 1 bytes ''
002 TEXT-node (text) 10 bytes ' Paletten'
thomas@benno:~/Software_Development/Simutrans-MyData>
Ich konnte den Bug bis in die Zeile 372 der Datei root_writer.cc zurückverfolgen. Dort wird mit der Methode obj_node_t::read_node eine Datenstruktur root vom Typ obj_node_info_t aus der übergebenen Datei gelesen, wobei dann root.children den Wert 1 erhält. Weiter habe ich den Code nicht verstanden.
Ich hoffe, das hilft. Das Spiel selbst ist bei mir problemlos gelaufen.
MfG
Edwin