Hallo!
(wem das alles zu lang ist, der lese ganz unten!)
jetzt mal ein paar Fakten, von mir, als Softwareentwickler:
Der Aufbau von X:
Hardcode
X3.exe
- Hauptcode des Spiels, logischerweiße.
- Berechnungen von Waffenfeuer, Geschwindigkeiten, Fenster, Spielerinfos, Startscreen, SPiel laden / Speichern usw.....
dvm.dll (teils vermutung)
- Interaktion mit Betriebssystem, Ansteuerung von Hardware, Treiber, Fenstermanager usw...
ijl10.dll
- Verarbeitung von Bilddaten, Darstellung (z.b. ladescreens)
- Erstellen von Screenshots
(optional) dsound.dll
- Ansteuerung von Creative EAX ab Windows VISTA
d3dx9 usw
- Grafikverarbeitung, Darstellung, Zeichnen von Objekten, Bewegungen, Lichteffekte, Soundeffekte (entfernung, lautstärker..)
libxml2.dll
- Einlesen der Scriptdateien bzw verarbeitung dieser
- das gleiche für tfiles (was für textfile steht)
steam_api.dll (opt.)
- ansteuern der steam anmeldung (verbindung zu service)
- speichern und laden der steam erfolge
- verbessern der game overlays (direkte einbettung)
zlib.dll
- verpacken der spielstände (die sind gzip oder so gepackt)
- ggf. noch verschlüsselung dieser
==> Der Rest sind verschiedene installer-dateien etc, links, readmes usw.
===> Modding-Teil:
-- das Spiel wurde komplett auf modding ausgelegt. wenn auch nicht auf die einfachste/beste art und weise.
==> CAT/DAT: Statische Informationen --> GEPACKT, zum vereinfachen der installation, verringern des speicherplatzes etc.
- Speicherort von Stationsnamen, eigenschaften, typen, völkern. Standardsprachen (FÜR ALLES, auch z.b. hauptmenü)
- Entpacken dieser dateien beschleunigt das spiel, verbraucht aber ungemein mehr speicherplatz.
- "xx.dat" enthält die Daten selbst
- "xx.cat" ist nur ein "catalog" der vorhandenen Daten, für schnelleres durchsuchen.
==> /T: Speicherort aller Textdateien, aller Sprachen.
- xxxx-LTTT ==> TTT = Sprache!! (49, 42 usw)
xxxx = eineindeutige ID.
- Es wird jeweils nur 1 Sprachenkategorie geladen, und von diesen nur die entspr. ID's erkannt.
- Ändern der sprache (z.b. nicht übersetzt scripts) lädt auch die Texte dieser datei, selbst wenns englisch ist!
- "PCK": (Package) gepackte ScripDATEI. Diese sind ca 40% kleiner.
- Original Egosoft scripte sind verschlüsselt (leider)
==> /SCRIPTS
- Speicherort für alle scripdateien im XML Format (was sehr langsam ist, daher imho ungeeignet....)
- ggf. gespeichert und (ggf.) verschlüsselt im PCK format.
Specials:
- "!" Verbirgt das entspr. Script im Scriptmanager INGAME
- "lib". sind library scripts z.b. zu Zeichenketten verarbeitung
- setup wird automatisch ausgeführt beim spielstart (initialisierung, ändern von bezeichnungen oder ressourcen oder völkern oder schiffen oder stationen ......)
- "plugin" Freier Namensraum, d.h. Konvention von allgemeinen script-scriptdateien. z.b. "plugin.meinscriptname.start1" und "plugin.meinscriptname.start2"
==> Specials z.b. "script.backup"
Da die Scripdateien als Dateien vorliegen können diese vor Änderungen abgespeichert werden. Löschen & Ersetzen setzt Änderungen zurück.
==> Hauptordner (C:/.../Eg.../X - TC)
Jetzt wirds interessant.
Jeder Ordner neben "script" und "t" hat eine besondere bedeutung, z.b. "objects/ships...." - dort liegen die Grafiken. d.h. die Grafikmodelle für die Schiffe usw
- JEDER ORDNER der im Hauptverzeichnis liegt, hat vorrang vor JEDER CAT/DAT die im selben liegt!
- Die CAT/DAT verfügen über fast den gleichen aufbau wie das hauptverzeichnis.
- Wird nun 1 Cat/Dat der Reihe hinzugefügt, wird diese als "fakepatch" mitgeladen - das gleiche macht egosoft beim anpassen des X-Standards (patch).
Beispiel:
Cat/dat 01... 10.
Neu ist: 11.cat/dat, d.h. diese wird beim nächsten start mit geladen.
Mehrfach vorhandene Dateien:
X lädt jeweils nur die "aktuellsten" Dateien, dabei folgende Reihenfolge:
- Ausgewählter Mod im Startfenster (z.b. "meinmod.dat")
- Vorliegende Dateien & Ordner im Hauptordner von X (/script, /t, /objects/...)
- 01....xx.cat/dat
-- bei den cat/dat gillt jeweils die höchste Datei! d.h. 15 wird vor 10 geladen.
-- existiert in 15 und 10 eine gleichbenannte Datei im gleichem pfad, wird NUR DIE VON 15 GENOMMEN! (z.b. "15.dat/object/ships/argon/nova.bod" wird anstelle von 10.dat geladen!
Spieldaten
Damit meine ich z.b. TSHIPS (TFactories usw) - Diese dateien befindet sich in vielen der CATDAT's und beschreiben alle FIXEN DATEN im Spiel!
- Z.b. Liste der Schiffe, der Stationen, Sektoren usw
Jedoch ist das spiel so intelligent, und kann nicht feststellen, welcher slot belegt ist, und welcher unbelegt d.h. das spiel kann die mehreren dateien nicht zusammenfügen.
--> mehrere tships überschreiben sich gegenseitig, nur die aktuellste gillt!
--> durch diese Überschreibung werden informationen vorheriger mods entfernt!
Beispiel:
Standard 01.dat - 10.dat
Mod1: 11.dat
Mod2: 12.dat
11.dat/tships.dat enthält schiff ID_MEINSCHIFF auf Slot50! (fiktiver slot, weiß die grad nicht)
12.dat/tships.dat enthält ein anderes neues schiff, heißt MEINANDERES_SCHIFF_ARGON, aber auf Slot51!
in der 12.DAT ist Slot50 LEER, d.h. auf Standard, Keine Information (name o.ä.).
Wird nun über ein SCRIPT auf Slot50 UND slot51 zugegriffen, aber nur Slot51 hat einen relevanten wert, so entsteht ein Fehler im System:
Haufenweise NULL-werte, ReadText-Fehler, Kaputte Schifswerften (s.o.!!) und so weiter.
Das Grundproblem, und nun möchte ich zum Punkt kommen, ist also einzig und allein dass sich VORHANDENE DATEIEN überschreiben!
Daher habe ich bei mir mehrfach vorhandene Dateien zusammengefügt - und das ganz ohne dateityp-dokumentation...
Das heißt:
Mod1 + Mod1 = MeinMod
11.dat + 12.dat = 11.dat (mit integrierter 12.dat)
Mein modding-verzeichnis:
https://dl.dropboxusercontent.com/u/188 ... odding.jpg
EDIT#1: Das tool "X Studio" hat mir geholfen viele Fehler zu finden. Das Lädt nicht nur das X Verzeichnis (d.h. stellt die Verbindungen der Refrenzen usw her) sondern zeigt auch Fehler (readtext usw) an. ReadText ist auch nur ein nicht gefundener string!
<link hab ich grad ne>
(C#) ModFile Merger
Eigentlich sollten wir uns alle zusammensetzen, und z.b. in C# (am simpelsten) einen "modfile merger" schreiben, das ganze als git project auf github oder bitbucket (ich bevorzuge bitbucket
) hochladen und gemeinsam daran arbeiten.
- Auslesen einer XDATAFILE (so nenn ich die TShips usw
)
- Vergleichen der gespeicherten Slots
- Darstellen und zusammenfügen
Zum Modden muss man sich mit dem System beschäftigen, sonst entstehen so verschiedene Fehler!
War bei mir genauso.
Wie man die entsprechenden Dateien öffnet oder entpackt steht im Forum unter Tools!
So, das war mal wieder ne Textwand von mir. Wenn da irgendein Detail falsch ist, bitte informieren.
==> Fragen meinerseits: Wo findet man Dokumentationen zu den Dateitypen z.b. tships, cat/dat usw ?
Insbesondere cat/dat würd ich mir mal gern anschauen.
Grüßlichs't
// Pera