Deutsches Simutransforum

Normale Version: makeobj 55.4 für Linux scheitert beim Extrahieren von PAK-Dateien
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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.

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
makeobj kann keine dat aus pak erzeugen, dass ist gewollt einen Einbahnstrasse. Da aber die meisten paks OpenSource sind, wuerde ich da nachfragen; ansonsten einfach mal den Verwalter fragen. Im Notfall druckt simutrans in der Debugversion mit "-log -debug 3" auch reichlich Parameter der pak-Dateien aus.

Ein pak kann aus vielen einzelenen pak bestehen, dazu gehört der Befehl merge. Will man aus dieser pak-Bibliothek wieder einen herausholen, braucht man unmerge.

Wurzelgnom

Wenn es nur um die Datparameter geht, dann kann man auch im Translator nachsehen. Sofern halt die Setbetreuer sie da auch einstellen.

Wobei die nicht immer auf den ganz aktuellen Stand sind.

Dort auf der Setinfo-Seite ist dann auch der Link zu den Sourcen sofern eingetragen von den Setbetreuern.
prissi,'index.php?page=Thread&postID=111696#post111696' schrieb:makeobj kann keine dat aus pak erzeugen, dass ist gewollt einen Einbahnstrasse.

Das ist schade, ich würde mir wesentlich leichter tun etwas zu Simutrans beizutragen, wenn das funktionieren würde. Dann sollte man die EXTRACT Funktion aus dem Code und der Dokumentation entfernen. Derzeit ist das für den Benutzer irreführend.

MfG
Edwin

Wurzelgnom

edwin,'index.php?page=Thread&postID=111705#post111705' schrieb:.... Dann sollte man die EXTRACT Funktion aus dem Code und der Dokumentation entfernen. Derzeit ist das für den Benutzer irreführend.
...

Die Dokumentation ist doch eindeutig.

Code:
MakeObj MERGE <pak file library> <pak file(s)>
         Merges multiple pak files into one [b]new pak file library[/b]
      MakeObj EXTRACT <pak file archieve>
         Creates [b]single files from a pak file librar[/b]y

edwin,'index.php?page=Thread&postID=111705#post111705' schrieb:...
Das ist schade, ich würde mir wesentlich leichter tun etwas zu Simutrans beizutragen, wenn das funktionieren würde. ....

Wo ist da Dein Problem?

Auf SourceForge gibt es mehrere Grafiksets als OpenSource.

Im Wiki gibt es eine fast vollständige Doku zu den Parametern.

Im japanischen Wiki gibt es auch vieles.

Und schlussendlich kann man den Urheber fragen ob man die Dateien bekommt.

Also um etwas bei Simutrans beitragen zu können hat man recht viele Quellen zur Verfügung. Mir erschließt sich jetzt nicht, das man dafür unbedingt eine pak-Datei dekompilieren muss.