[MOD/MAP] Suche Sektorkarte - neue Sektoren

Hier ist der ideale Ort um über Scripts und Mods für X³: Terran Conflict und X³: Albion Prelude zu diskutieren.

Moderators: Scripting / Modding Moderators, Moderatoren für Deutsches X-Forum

User avatar
Pion
Posts: 37
Joined: Thu, 8. Dec 05, 19:42
x3tc

Post by Pion »

@Glumski
Ich mache die Karte, egal was du damit machst.


@Alle
Ich habe die Lösung für die Parameter im X2-Forum für Scripts und Modding gefunden. Der Thread "Schritt für Schritt zum eigenen Xenon M0" ist da (mit den weiteren angegebenen Links) eine wahre Goldgrube.

Allerdings führt die dort angegebene Handhabungsweise für die Parameter zu einem erheblichen Rechenaufwand, den man aber stark vereinfachen kann. Ausführliche Erklärung folgt in Kürze.
User avatar
Pion
Posts: 37
Joined: Thu, 8. Dec 05, 19:42
x3tc

Post by Pion »

Eines erstmal vorweg. Die bis jetzt beschriebenen Drehungen finden (wie angenommen) in der x,y-Ebene statt. In diesem Artikel findet zwar noch eine Verallgemeinerung statt, die bisherige Schreibweise kann aber weiterhin benutzt werden.


DIE DREHPARAMETER IN DER 00749.BOD

Nochmal nur zur Definition - Allgemeiner Datensatz in der 00749.bod:

{ 0x2002; x; y; z; k; m; n; s; -1; -1; }

0x2002 und -1 sind Konstanten, ebenso Semikolon und Klammern

die x,y,z-Werte sind die 3D-Anzeige-Positionen für Boxen, Gates und Titles in der InGame-Galaxiekarte

k,m,n,s sind Parameter mit denen die DREHUNG von Objekten gesteuert wird.
k gibt einen gewählten Winkel an
m,n,s sind für die drei Rotationsachsen



Reihenfolge der Parameter

Der Parameter k steht für den Winkel alpha (Grad), mit dem rotiert wird. Es gilt: k = alpha/360
Dieser Winkel gilt für alle drei Rotationsachsen gleichzeitig.

Die nachfolgenden Werte m,n,s geben dann an, wie der angegebene Winkel auf der jeweiligen Achse angewendet werden soll: 1.00 = 100%, 0.5= 50% usw.

Die Drehungen werden durch folgendene Parameter präsentiert:

m: y,z-Ebene: Neigeachse (rauf/runter)
n: x,z-Ebene: Drehachse (links/rechts)
s: x,y-Ebene: Rollachse (Uhrzeiger/gegen Uhrzeiger)


Diese Art der Darstellung kann man als Cockpitsicht bezeichnen und wird auch in anderen Dateien benutzt.

Beim Auftreten von drei Drehwinkeln führt diese Handhabungsweise aber zu einem größeren Rechenaufwand. um Werte über 1 zu vermeidem müsste man hier stets den größsten auftretenden Winkel für den Paramater k nehmen. Dann muss man die beiden anderen Drehungswinkel extra umrechnen. Außerdem wird der Datensatz dadurch unübersichtlich.


Parametrisierung der Parameter k,m,n,s

Den Rechenaufwand kann man sich ersparen, wenn der Winkel für den Parameter k durch eine feste Größe, die dann als Referenzgröße dient, ersetzt wird. Am besten würde sich die volle Spannweite von 360 Grad, also gleich 1, eignen. Aber weder 360 Grad (1) noch 180 Grad (0.5) werden hier akzeptiert, sondern in der Anzeige behandelt als wenn der Wert 0 wäre.

Da praktisch alle vorkommenden Winkel in einem Bereich von -90 bis +90 Grad liegen bzw. darstellbar sind, ist folgende Parametrisierung möglich:

Die Winkel für die Drehung in der jeweiligen Ebene:

y,z-Ebene - Neigeachse: beta
x,z-Ebene - Drehachse: gamma
x,y-Ebene - Rollachse: delta

Parameter k = 0.25 fest gewählt (90 Grad) und -90 =< beta,gamma,delta =< 90

Der parametrisierte Datensatz für eine räumliche Drehung sieht dann so aus:

{ 0x2002; x; y; z; 0.25; beta/90; gamma/90; delta/90; -1; -1; }

Man kann jetzt alle Winkel gleich behandeln, also nur Teilung durch 90 erforderlich. Und man übersieht den Datensatz besser.



Drehen in einer Ebene

Drehungen in einer Ebene sind noch relativ einfach zu realisieren. Es gibt allerdings mehrere Formen dies zu ereichen. Hier zwei Möglichkeiten, wobei die erste Schreibweise auf dem gegebenen Aufbau der Parameter beruht, während die zweite Schreibweise die gerade beschriebene parametrisierte Form benutzt.


Drehen um den Winkel alpha in der y,z-Ebene: Neigeachse (rauf/runter)

{ 0x2002; x; y; z; alpha/360; +/-1; 0.0; 0.0; -1; -1; }

Parametrisiert:

{ 0x2002; x; y; z; 0.25; alpha/90; 0.0; 0.0; -1; -1; }



Drehen um den Winkel alpha in der x,z-Ebene: Drehachse (links/rechts)

{ 0x2002; x; y; z; alpha/360; 0.0; +/-1; 0.0; -1; -1; }

Parametrisiert:

{ 0x2002; x; y; z; 0.25; 0.0; alpha/90; 0.0; -1; -1; }



Drehen um den Winkel alpha in derx,y-Ebene: Rollachse (Uhrzeiger/gegen Uhrzeiger)

{ 0x2002; x; y; z; alpha/360; 0.0; 0.0; +/-1; -1; -1; }

Parametrisiert:

{ 0x2002; x; y; z; 0.25; 0.0; 0.0; alpha/90; -1; -1; }


Auf diese Art und Weise lassen sich z.B. die Sektorboxen in den drei Ebenen drehen. Die Kombination der Drehwerte liefert bei den Boxen allerdings meistens optisch nicht verwertbare Resultate.



SEKTORVERBINDUNGEN

KORREKTUR FÜR DIE BERECHNUNG DER RÄUMLICHEN VERBINDUNGSLINIEN

Den Teil zur Berechnung der räumlichen Verbindungslinien (der hier ursprünglich stand) habe ich wieder entfernt um überflüssige Infos zu vermeiden bzw. auch um keine Verwirrung zu stiften.

Wie sich inzwischen gezeigt hat führen die Drehungen für die Verbindungslinien ein gewisses Eigenleben, das sich noch NICHT richtig deuten liess. Es ist mir bisher noch nicht gelungen aus den Positionen zweier Boxen eine räumliche Richtung zu ermitteln, die dann auch in der Anzeige korrekt erscheint.

Die Frage der räumlichen Verbindungen bleibt damit erstmal noch offen.

Es hat sich noch gezeigt das die Richtungen für die Drehungen in der 00749 NICHT einheitlich gehandhabt werden. zudem gibt es noch Unterschiede bzgl. der Drehrichtung bei Boxen und Verbindungen. Daher erfolgen im Weiteren erstmal noch Infos zur Drehung von Sektorboxen.
Last edited by Pion on Thu, 8. Jan 09, 12:35, edited 1 time in total.
User avatar
Pion
Posts: 37
Joined: Thu, 8. Dec 05, 19:42
x3tc

Post by Pion »

@Vanger
Noch mal zum Ende der 00749: Durch die Orginal-00749 bedingt habe ich nach dem letzten Datensatz immer ein carriage return eingefügt. Die Frage ist: hast du nur ein Kommentarzeichen eingefügt oder carriage return mit Kommentarzeichen?
Ein carriage return langt bereits für einen sauberen Abschluss.
Sieht so aus als wenn durch den Zeilenwechsel bzw. das Kommentarzeichen dem Programm erst klar wird dass ein Datensatz zu Ende ist.
User avatar
Pion
Posts: 37
Joined: Thu, 8. Dec 05, 19:42
x3tc

Post by Pion »

KORREKTUR FÜR DIE BERECHNUNG DER VERBINDUNGSLINIEN

Den Teil zur Berechnung der räumlichen Verbindungslinien habe ich wieder entfernt um überflüssige Infos zu vermeiden bzw. auch um keine Verwirrung zu stiften.
Wie sich inzwischen gezeigt hat führen die Drehungen für die Verbindungslinien ein gewisses Eigenleben, das sich bisher noch NICHT richtig deuten liess.

Darüber hinaus: Die Richtungen für die Drehungen werden in der 00749 NICHT einheitlich gehandhabt


Grundkoordinatensystem

Das zugrund liegende x,y,z-Koordinatensystem für die InGame-Galaxiekarte ist so aufgebaut:

X-Achse
Man zeichne eine waagerechte Linie. Rechts ist plus, links ist minus.

Y-Achse
Man zeichne eine senkrechte Linie. Oben ist plus, unten ist minus.

Z-Achse
rechwinklig zu den beiden anderen Achsen in den Raum zeigend. Nach vorn ist plus, nach hinten minus.


Die InGame-Galaxiekarte ist anzeigenmäßig so aufgebaut, dass man direkt auf die x,y-Ebene schaut. Also rechts ist +x, links ist -x. Oben ist +y, unten ist -y.
Die Tiefenrichtung Z steht anzeigemäßig ebenfalls senkrecht dazu. Die positive Z-Achse zeigt in die Karte hinein.

Jetzt muss man sich noch folgendes merken: Werden zwei Objekte so positioniert das die Koordinaten sich nur in z-Richtung unterscheiden, dann werden die Objekte NICHT perspektivisch angezeigt, sondern in der Anzeige hintereinander gelegt. In z-Richtung findet keine richtige perspektivische Anzeige statt
Die scheinbar räumliche Darstellung (z.B. bei Drehung von Boxen) wird durch perspektivische Verzerrung gewonnen - mit gewissen Konsequenzen für die Anzeige.


Nullachsen für Drehungen bei Sektorboxen

y,z-Ebene (rauf/runter)
Die Nullachse ist die positive Y-Achse. Drehung in Richtung der positven Z-Achse ist positiv. Drehung in Richtung der negativen Z-Achse ist negativ.

x,z-Ebene (links/rechts)
Die Nullachse ist die positive X-Achse. Drehung in Richtung der positven Z-Achse ist negativ. Drehung in Richtung der negativen Z-Achse ist positiv.

x,y-Ebene (Uhrzeiger/gegen Uhrzeiger)
Die Nullachse ist die positive X-Achse. Drehung in Richtung der positven Y-Achse ist positiv. Drehung in Richtung der negativen Y-Achse ist negativ.


Drehung einer Sektorbox in der y,z-Ebene (rauf/runter)
Optisch verwertbar sind nur Drehungen kleiner als +/- 80 Grad. Die Anzeige erfolgt durch perspektivische Verzerrung der Box. Drehung um 90 Grad erzeugt einen waagerechten Strich für die Box. Der Kreis in der Box ist aber noch sichtbar.
Um die perspektivische Sicht zu erhalten die man eigentlich bei der 90 Grad-Drehung erwartet, muss man die Box etwa um etwa +80 Grad drehen.


Drehung einer Sektorbox in der x,z-Ebene (links/rechts)
Optisch verwertbar sind nur Drehungen kleiner als +/- 60 Grad. Die Anzeige erfolgt durch perspektivische Verzerrung der Box. Drehung um 90 Grad erzeugt einen senkrechten Strich für die Box. Auch der Kreis in der Box ist nicht mehr sichtbar.
Um die perspetivische Sicht zu erhalten die man eigentlich bei der 90 Grad-Drehung erwartet, muss man die Box etwa um etwa -60 Grad drehen.


Drehung einer Sektorbox in der y,z-Ebene (Uhrzeiger/gegen Uhrzeiger)
Optisch verwertbar sind nur Drehungen kleiner als +/- 45 Grad, da alle anderen Werte schon bekannte Resultate liefern. Es erfolgt keine perspektivische Verzerrung. Die Box wird im/gegen Uhrzeigersinn um sich selbst rotiert.


Drehung einer Sektorbox in zwei Ebenen

Optisch verwertbar sind noch Drehungen der Sektorbox in zwei Ebenen, z.B. Drehung in der x,z-Ebene und Drehung in der y,z-Ebene. Nimmt man +/- 45 Grad für beide Drehungen erhält man optisch gut verwendbare Objekte.
User avatar
JoJaCorp
Posts: 238
Joined: Wed, 14. Feb 07, 18:23

Post by JoJaCorp »

Kann mir denn wirklich keiner helfen und einen Mod machen, in dem 9 neue Sektoren für den Spieler erstellen und diese neben Karge Küste einfügen.
Ich selber habe schon alles ausprobiert aber leider bekomme ich das nicht hin.
Ich brauche eine cat/dat zum einfügen.

Gruß
JoJa Corp.
User avatar
kampfmoehre
Posts: 7
Joined: Sun, 18. Feb 07, 15:35
x4

Post by kampfmoehre »

Hallo,
ich weiß, der Thread ist schon etwas älter, aber ich hoffe du kannst mir mit deinem Fachwissen helfen.
Hab mir den ganzen Thread gerade durchgelesen, und ich bin beeindruckt, was du alles herausgefunden hast. Mein Wissen über die 00749.bod beschränkte sich vorher auf das was ich aus dem "Wir basteln uns einen Sektor"-Thread gelernt hab.
Auf dieser Grundlage habe ich mir eine eigene "flache" .bod erstellt, also komplett neu. Habe lediglich die Daten bis P2 aus der Original .bod kopiert und dann den Datensatz immer wieder Kopiert und nur die Werte ausgetauscht. Dabei habe ich Z immer 0 gesetzt, weil ich erst mal nur eine flache Karte wollte.
Hab mir so alle 20x24 möglichen Felder als Sektoren gesetzt (also bis X24 Y19 - ja eine Y hatte ich vergessen) also bis P 457. Die Verbindungslinien sind mir erst mal Wurscht.
Ich habe dabei immer das Problem, dass meine Galaxiekarte einfach leer ist. Also komplett. Ich hab mir eine fertige .bod gezogen, die zumindest die Standardsysteme in flach hat, aber auch da sehe ich einfach nix. Nichtmal das Startsystem im Galaxieeditor. Ich nutze den internen Editor gerne zum Verbinden der Sektoren, da ich im X3Editor jedes mal die ganzen Daten für die Tore eingeben muss.
Was mache ich falsch? Ich hab ja im Prinzip einfach nur einen Datensatz aus der Original .bod zigfach kopiert und nur die Werte für Sektorkoordinaten und die Koordinaten auf der Karte ausgetauscht.

Braucht es die // 0 / am Ende der Zeile?

Bzw. sehe ich gerade, dass mir das kleine B nach den B XXYY N XXYY; fehlt. Das befindet sich allerdings auch nicht in meiner original .bod

Sollte eventuell noch erwähnen dass ich X3 Reunion meine.

Zur Veranschaulichung mal drei Zeilen aus meiner .bod:

Code: Select all

P 66; B 1703; N 1703;
  { 0x2002;  32000; -56000; 2000;  0.000000; 0.000000; 0.000000; 0.000000;  -1;  -1; }
P 67; B 1803; N 1803;
  { 0x2002;  40000; -56000; 2000;  0.000000; 0.000000; 0.000000; 0.000000;  -1;  -1; }
P 68; B 1903; N 1903;
  { 0x2002;  48000; -56000; 2000;  0.000000; 0.000000; 0.000000; 0.000000;  -1;  -1; }

Hoffe du kannst mir da helfen und alle Achtung was du alles herausgefunden hast. Sollte mir den Thread kopieren als eigenes Dokument ^^

Gruß Kampfmoehre


Edit:
Ich habe gerade gemerkt, dass ich in der 08.cat auch eine 00749.pbd habe. Ich habe die aus der 03.cat genommen wie im Tutorial beschrieben war. Könnte es eventuell daran liegen? Die hat allerdings auch nicht das kleine b nach den Koordinaten

Da sieht eine Zeile so aus:


Achja und die .bod aus dem diesem Thread hier habe ich auch probiert.

Code: Select all

P 62; B 04090408; N 04090408;  { 0x2002;  -6433; -41724; 0;  0.471900; 0.702794; 0.705675; 0.090018;  -1;  -1; } // 0
Edit2:
Habe jetzt mal einen .bod-Generator versucht, genau dasselbe. Ich sehe nix in der Galaxiekarte. Woran kann das liegen?
Jetzt hab ich aus spass mal die Original .bod in meine Mod gebunden und da habe ich auch eine leere Galaxiekarte. Was ist da los? oO

Edit3:
Ahh Ok, ich hab des Rätsels Lösung. Der Kompressor vom mod Manager war auf X3:TC eingestellt. Ich korrigiere also, der Generator funtzt, habs grad probiert. Nur mein eigenes bod-file leider nicht. Irgendwie wäre es schon stylischer wenn ich mir die Datei selber schreiben würde. Jedenfalls funtzt es jetzt und sollte ich doch noch ein eigenes File schreiben, sollte ich wohl besser das File aus der 08.cat nehmen, falls ich die Datei nicht komplett selber schreibe.
Ich hab mir die beiden Files angeschaut und in der 08.cat fehlen die ganzen Kommentare, also das Datum und ob es sich um Box, Node usw handelt.
Trotzdem, deine Arbeit ist Spitze, darauf werd ich auf jeden Fall aufbauen, wenn ich das bod-file selber noch kreire.

Return to “X³: Terran Conflict / Albion Prelude - Scripts und Modding”