Plattenset Dokumentation

Im Gegensatz zu meinen bisherigen Tutorials, ist das folgende eher als eine Art Dokumentation der entsprechenden Dateien anzusehen. Sie soll euch erklären was nötig ist um einzelne Platten oder ganze Bodenarten in andere Plattensets zu transferieren oder aber ganz neue Modelle zu implementieren. Um das Folgende bewerkstelligen zu können, solltet ihr schon ein gewisses Grundwissen im Umgang mit den Programmen besitzen (zumindest schon einmal versucht haben ein Plattenset zu duplizieren oder ähnliches). Es ist leider nicht so ausführlich wie meine anderen Tutorials, da es zu diesem Thema bedauerlicherweise keine offiziellen Informationen gibt. Es basiert also auf Informationen, die ich durch die Unterstüzung von Kthoris, Labtek und Velmar gesammelt habe.

Erforderliche Programme:

Welchen Texteditor ihr nehmt, ist euch überlassen. Das Notepag von Windows reicht eigentlich vollkommen aus. Wenn ihr es einfacher haben wollt, würde ich euch jedoch das Textpad empfehlen, da Kthoris hierfür ein Syntax-Highlightning Plug-In geschrieben hat.)

Die .SET Datei

Bevor ihr anfangt zu editieren, solltet ihr euch im Klaren sein, was genau ihr erreichen wollt. Soll das Ergebnis das vorhandene Plattenset überschreiben, soll es die Kombination mehrer Plattensets werden, oder eventuell neue Modelle zu einem bestehenden Plattenset ergänzen?

[GENERAL]
Name=TTR01
Type=SET
Version=V1.0
Interior=0
HasHeightTransition=1
EnvMap=ttr01__ref01
Transition=5
DisplayName=1606
Border=Grass
Default=Grass
Floor=Grass

Die wichtigsten Zeilen dieses Abschnittes sind Name, DisplayName und die drei folgenden Zeilen.

Der Name ist das Plattensetkürzel, des zu entstehenden Sets. Diese Datei (.SET) selbst, so wie die im folgenden erklärten, sollten alle nach diesem Kürzel benannt sein. Am wichtigsten ist aber, dass er mit dem Kürzel in den Palettendateien (.ITP) übereinstimmt.

Der DisplayName ist der Name, den ihr im Werkzeugset bei der Plattensetauswahl zu Gesicht bekommt. Für gewöhnlich verweist dieser auf eine Zeichenreferenz (StrRef). Neverwinter Nights verwendet Zeichenreferenzen um Wörter, Sätze, Textabschnitte usw. eindeutig und sprachenunabhängig zu identifizieren. Ihr könnt diese Einträge mit dem NWN TLK Editor 1.1 einsehen und verändern. Dieser Weg ist aber nicht der eleganteste, da BioWare selbst mit ihren Patches Änderungen an der Dialog.tlk vornimmt und ihr die Datei somit ständig auf dem neusten Stand halten müsstet. Die elegantere Lösung besteht darin einen Name sprachenabhängig festzulegen. Dafür müsst ihr den Eintrag selbst lediglich auf -1 setzen und eine zusätzliche Zeile einfügen. Ungefähr so:

DisplayName=-1
UnlocalizedName=Euer Plattensetname

Die letzten drei Zeilen (Border, Default, and Floor) sind sehr wichtig. Sie verweisen auf den Standardbodentyp des Plattensets. Mit ihm wird das Gebiet bei der Kartenerstellung ausgelegt (so fern es Zufallsplatten von ihm gibt) und mit ihm müssen die anderen Bodentypen kompatibel sein. Wenn ihr zwei Plattensets kombinieren wollt, müsst ihr euch für einen der beiden Bodentypen entscheiden. Wollt ihr z.B. das Stadt(Außen) mit dem ländlichen Plattenset kombinieren, habt ihr die Auswahl zwischen Cobble (Kopfsteinpflaster) und Grass (Gras). Ihr müsstet einen dieser Bodentypen bzw. Wörter (Vorsicht, Groß-/Kleinschreibung ist wichtig) an bei den Einträgen Border=, Default= und Floor= einfügen. (Wenn ihr ein Innenplattenset entwerft, sind Border und Default höchstwahrscheinlich nicht gleich dem Grundbodentyp, sondern eine Wand (Wall).)

Jedes Plattenset hat folgend darauf einen Eintrag [GRASS]. Dieser ist für alle Außenplattensets relevant, da er für die Höhe (Height) einer jeden Platte zuständig ist. Wenn ihr das Stadt(Innen) und Burg(Innen) Plattenset kombinieren wollt, könnt ihr diesen Eintrag ignorieren, da er für Innensets 0 ist. Ist es jedoch ein Außenset, so werdet ihr hier mit verschiedenen Werten konfrontiert. Sucht euch am Besten einen Mittelwert für den neuen Eintrag aus. Das Stadt(Außen) hat z.B. 1.000 und das Ländlich Plattenset 1.200. In diesem Fall solltet ihr also 1.100 wählen.

[TERRAIN TYPES]
Count=3

[TERRAIN0]
Name=Grass
StrRef=63635

Jedes Plattenset fängt mit den grundlegenden Bodentypen an. Auf denen die Platten selbst platziert werden können. Das ländliche Plattenset hat Beispielsweise 3: Gras, Wasser und Bäume (Grass, Water, und Trees). Wohingegen das Stadt(Innen) Plattenset über 5 verfügt: Wall, Livingroom, Kitchen, Inn und Shop.

Die Aufzählung beginnt immer mit der Anzahl der folgenden Bodentypen (Count=3) und der anschließenden Aufzählung dieser.

Wenn ihr vorhabt, zwei (oder mehr) Plattensets miteinander zu kombinieren, dürft hier keine doppelten Bodentypen erzeugen, d.h. es darf z.B. nicht "Water" vom Stadt(Außen) und "Water" vom Ländlich Plattenset gleichzeitig existieren. Zudem müsst ihr für jeden Bodentyp dieser Sektion Regeln in der [PRIMARY RULES] Sektion erstellen.

Übertragt in dem Fall die [TERRAIN] Einträge des einen Plattensets in das andere und nummeriert sie neu, sodass sie sich nahtlos den bestehenden anschließen. Zudem müsst ihr selbstverständlich Gesamtwert (Count=XX) auf die entsprechende Zahl ändern. Berücksichtigt hier, dass der Count einen höher ist, als die letzte Terrain Nummer, da diese mit 0 anfangen.

[CROSSER TYPES]
Count=4

[CROSSER0]
Name=Stream
StrRef=63302

Bei den Crosser Types handelt es sich um Platten, die durch andere hindurch gehen, wie Straßen, Wege, Flüsse oder ThallionStellani's Hügel.

Ihr Verhalten an dieser Stelle ist genau wie bei dem normalen Terrain Types. D.h. wenn ihr Plattensets oder einzelne Crosser dieser kombinieren wollt, müsst ihr wiederum die Einträge kopieren, die Gesamtanzahl (Count=) erhöhen und natürlich darauf achten, dass ihr keine doppelten Einträge erzeugt.

[PRIMARY RULES]
Count=28

[PRIMARY RULE0]
Placed=Grass
PlacedHeight=0
Adjacent=Grass
AdjacentHeight=0
Changed=Grass
ChangedHeight=0

Das ist zweifellos der komplexeste Teil der .SET Datei. Diese Regeln legen fest, welche Platten, abhängig von ihrem Ecktyp, wo platziert werden können. Hier muss es für jeden Bodentyp- oder Höhenwechsel eine Regel geben.

Die Regeln selbst sind eigentlich recht einfach zu verstehen, man muss halt nur erst einmal durchsteigen ;) Ihr benötigt wie erwähnt Regeln für jeden Bodentyp, aber nicht für jeden Crosser, diese kommen später. Wenn ihr Beispielsweise die Bäume (Trees) aus dem ländlichen Plattenset in ein anderes transferieren wollt, braucht ihr Regeln für Bäume mit allen anderen Bodentypen des Plattensets (mit denen sie Kombiniert werden sollen)

Sucht euch in diesem Fall alle Regeln aus der ttr01.set heraus, die "tree" beinhalten. Kopiert all diese (Grass/Tree, Water/Tree, Tree/Tree) in die .set Datei des Stadt(Außen) Plattensets. Ihr müsst wirklich ALLE REGELN haben, andernfalls werdet ihr später im Werkzeugset nicht in der Lage sein, diese Modelle (Bodentypen) zu platzieren.
Sobald ihr alle Regeln (für die Bäume sollten es 15 primäre Regeln gewesen sein) in die neue .SET Datei kopiert habt, solltet ihr in der neuen Datei alle Zeichenketten namens "Grass" mit dem Grundbodentyp (in dem Fall "Cobble") ersetzen. Somit wird das Gras in das Kopfsteinpflaster integriert und die Bodentypen endlich platzierbar.
Vergesst auch dieses mal nicht, die Regeln numerisch ein zu sortieren. Andernfalls stoßt ihr wieder auf das Problem, dass ihr die Platten nicht setzen könnt.

[TILES]
Count=249

[TILE0]
Model=ttr01_a01_01
WalkMesh=msb01
TopLeft=Grass
TopLeftHeight=1
TopRight=Grass
TopRightHeight=1
BottomLeft=Grass
BottomLeftHeight=0
BottomRight=Grass
BottomRightHeight=1
Top=
Right=
Bottom=
Left=
MainLight1=1
MainLight2=1
SourceLight1=1
SourceLight2=1
AnimLoop1=1
AnimLoop2=1
AnimLoop3=1
Doors=0
Sounds=0
PathNode=B
Orientation=0
VisibilityNode=A
VisibilityOrientation=0
ImageMap2D=MITR01_A01

Die .SET Datei enthält einen Eintrag für jede Platte des Sets. Jede Platte wird wiederum durch 8 Bodentypen (4 Ecken und 4 Kanten) definiert. Wird einer Kante (top, bottom, left, right) kein Bodentyp zugewiesen, so nimmt das Werkzeug an, dass es sich dabei um den Standardboden handelt. Es müssen also nur Abweichungen davon definiert werden. Anders verhält es sich hingegen bei den Ecken (topleft, topright, bottomleft, bottomright), diese müssen zwingend einen Boden zugewiesen bekommen. Der Bodentyp der Ecken bestimmt, an Hand der Regeln (der PRIMARY RULES Sektion) welche Platten neben ihr gelegt werden kann.
Topleft=Forest
Topright=Grass

Sie könnte nur neben eine Platte gelegt werden, die an den gegenüberliegenden Ende die gleichen Bodentypen hat.

Den 4 Ecken (topleft, topright, bottomleft, bottomright) einer Platte können ebenfalls Höhen zugewiesen werden. Die Höhe muss immer 0 oder 1 betragen. 0 ist in dem Fall die gleiche Höhe und 1 eine Steigung auf die nächste Ebene. Die Kanten (top, bottom, left, right) werden in diesem Fall für den Höhenübergang genutzt.

TopLeft=Grass
TopLeftHeight=1
TopRight=Grass
TopRightHeight=1
BottomLeft=Grass
BottomLeftHeight=0
BottomRight=Grass
BottomRightHeight=0

Wenn die linksobere und rechtsobere Ecke 1 ist, beinhaltet die Platte eine durchgehende Klippe am oberen Stück. Ist rechtsobere jedoch 0 so gibt es nur in einer Ecke eine Klippe/Erhöhung.
In diese Beispiel muss die (oben) daran anschließende Platte ebenfalls eine Höhe von ein an den gegenüberliegenden Ecken haben.

Jede Platte, die in der Tiles Sektion gelistet, aber nicht in der Groups Sektion verwendet wird, gilt als zufälliger Boden. D.h. das Werkzeugset benutzt sie, um den üblichen Boden auszulegen. Wenn ihr ein Gebiet erstellt, wird der Boden allen Platten ausgelegt, welche die folgenden Angaben enthalten.

TopLeft=Grass
TopLeftHeight=0
TopRight=Grass
TopRightHeight=0
BottomLeft=Grass
BottomLeftHeight=0
BottomRight=Grass
BottomRightHeight=0

Wenn ihr Crosser (Flüsse, Wege etc.) im Werkzeugset verwendet, ersetzt ihr in Wirklichkeit die Platten, die an den Kanten (top, bottom, left, right) keine Einträge haben, gegen die mit dem entsprechenden Crosser. Außerdem verändert ihr mit einem Klick zwei Platten. Habt ihr z.B. zwei untereinander liegende Platten und nehmt den Fluss Crosser, um zwischen ihnen einen Fluss zu ziehen, so werden die beiden Grasplatten (z.B. Tile109 des ländlichen Plattensets) gegen eine Grasplatte mit einem Flussendstück (Tile54 des ländlichen Plattensets) ersetzt.
[TILE109]			[TILE54]
Model=ttr01_o01_01		Model=ttr01_g05_01
WalkMesh=msb01			WalkMesh=msb01
TopLeft=Grass			TopLeft=Grass
TopLeftHeight=0			TopLeftHeight=0
TopRight=Grass			TopRight=Grass
TopRightHeight=0		TopRightHeight=0
BottomLeft=Grass		BottomLeft=Grass
BottomLeftHeight=0		BottomLeftHeight=0
BottomRight=Grass		BottomRight=Grass
BottomRightHeight=0		BottomRightHeight=0
Top=				Top=Stream
Right=				Right=
Bottom=				Bottom=
Left=				Left=
MainLight1=1			MainLight1=1
MainLight2=1			MainLight2=1
SourceLight1=1			SourceLight1=1
SourceLight2=1			SourceLight2=1
AnimLoop1=1			AnimLoop1=1
AnimLoop2=1			AnimLoop2=1
AnimLoop3=1			AnimLoop3=1
Doors=0				Doors=0
Sounds=0			Sounds=0
PathNode=A			PathNode=A
Orientation=0			Orientation=0
ImageMap2D=MITR01_O01		ImageMap2D=MITR01_G05

Wenn ihr Platten zu einem bestehenden Plattenset hinzufügen wollt, gilt das gleiche wie bei den vorangegangenen Sektionen: Ihr müsst die Gesamtzahl (Count=XX) erhöhen und die neuen Platten nahtlos der Nummerierung anschließen.

Wollt ihr zwei (oder mehr) komplette Plattsets kombinieren, müsst ihr (fasst) alle Platten in das andere Set kopieren. Bleiben wir bei unserem Stadt(Außen)/Ländlich Kombinationsbeispiel, so sind das 320 oder 249 Platten, in den entsprechenden Sets. Da ihr wiederum keine doppelten Platten kopieren dürft, fallen ein oder zwei Platten raus, denn Platten wie das Schachbrett oder Portal gibt es in jedem Plattenset. Merkt euch beim kopieren steht's, welcher Platte ihr welche Nummer zuordnet, denn diese müsst ihr später in der Groups Sektion wieder verwenden.

[GROUPS]
Count=57

[GROUP0]
Name=Crystal
StrRef=63678
Rows=1
Columns=1
Tile0=118

[GROUP25]
Name=ShipDocked01_2x2
StrRef=63702
Rows=2
Columns=2
Tile0=178
Tile1=180
Tile2=177
Tile3=179

In der .SET Datei werden sowohl Gruppen (Groups) als auch Ausstattungen (Features) als Groups definiert. Sie unterscheiden sich in dieser Datei lediglich dadurch, dass sie auf eine unterschiedlich Hohe Plattenanzahl verweisen. Ausstattungen haben nur ein Tile0 sowie eine Row und Column (siehe Group0), wohingegen Gruppen mehrere Platten (Tile0, Tile1 usw.) und mehrere Rows und Columns (siehe Group25) haben. Die Rows (Zeilen) und Columns (Spalten) definieren somit die Größe einer Gruppe. Beim obigen Beispiel des angedockten Schiffes ist die Gruppe 2x2 groß und hat somit 4 Tile Referenzen.

Jede Nummer hinter den Tile Einträgen verweist auf die jeweilige Platte in der [TILES] Sektion. Bei diesem Beispiel ist 178 die erste Platte und 180 die zu ihrer Rechten. Platte 177 und 179 befinden sich darunter. Es werden also immer zunächst die Spalten gefüllt und dann erst in die nächste Zeile gesprungen.

Wenn ihr eine Grupe mit einer nicht viereckigen Form erstellen wollt, z.B. in der Form eines L, dann müsst ihr trotzdem die volle Größe bei den Reihen und Spalten angeben, jedoch die leeren Platten mit einer -1 füllen. Das folgende Beispiel hätte also die Form eines L:

[GROUP41]
Name=ShipDocked02_2x2
StrRef=63703
Rows=2
Columns=2
Tile0=230
Tile1=180
Tile2=-1
Tile3=179

Denkt daran, dass ihr eine Gruppe für jede Platte erstellen müsst, die ihr im Werkzeugset als Ausstattung platzieren können wollt.

Bitte beachtet, dass wenn ihr eine Leertaste nach der entsprechenden Platte lasst z.B. Tile0=xxx(Leertaste), das Werkzeugset die entsprechende Platte nicht finden kann. Geht also sicher, dass ihr keine unnötigen Leertasten oder sonstiges einbaut.

Wenn ihr Platten aus einem anderen Plattenset kopiert und hier einfügt, müsst ihr bei Tile0, 1 usw. selbstverständlich die neue Nummer der Platte eintragen, die ihr zuvor in der [TILES] Sektion festgelegt habt.

Die ITP Dateien

Die ITP Dateien sind für die Paletten (auf der rechten Seite des Werkzeugsets) zuständig. Alle Einträge, die in der Palette des Werkzeugsets erscheinen sollen, müssen hier somit ebenfalls eingetragen werden. Wenn ihr Platten "verschwinden" lassen wollt, könnt ihr sie theoretisch in der .SET Datei einer Gruppe zuordnen, die ihr hier nicht eintragt.

Jeder Eintrag für einen Boden, eine Gruppe oder Ausstattung muss über zwei Elemente Verfügen: Einen Namen und eine Resource. Der Name kann wiederum eine Zeichenreferenz (StrRef) oder ein frei definierter Name sein. Die Einträge müssten wie folgt aussehen:

ELEMENT					ELEMENT
   NULLFLAG				   NULLFLAG
   UINT32: STRREF = 63601		   STRING: NAME = "Anthill"
   RESREF: RESREF = "ttr01_p05_01"	   RESREF: RESREF = "ttr01_p05_01"
END ELEMENT				END ELEMENT

Wenn ihr die Einträge mit dem ITP Tool vornehmt, braucht ihr natürlich nur die Zeilen mit der Zeichenkette und der Resource anlegen. Der Rest entsteht automatisch.

Euch ist sicherlich aufgefallen, dass es keine Verbindung außer dem Modell zur .SET Datei gibt. Das bedeutet für euch, dass ihr ein Modell, das als Referenz einer Gruppe genutzt wird, nicht mehrmals verwenden könnt (alle anderen Modelle selbstverständlich schon).

Die .2DA Dateien

Es gibt zwei .2da Dateien, die für die Plattensets von Bedeutung sind, die doortypes.2da, die für alle Plattensets allgemein gilt, und eine xxxxx_edge.2da für das jeweilige Plattenset.

  	Corner1 Edge 	Corner2 Height 	Model 	
0  	Trees 	**** 	Water 	0 	TTR01_Z10_01 	
1  	Grass 	**** 	Water 	0 	TTR01_Z05_01 	
2 	Water 	**** 	Water 	0 	TTR01_Z02_01 	
3  	Trees 	**** 	Grass 	0 	TTR01_Z08_01 	
4 	Grass 	Road 	Grass 	0 	TTR01_Z12_01 	
5 	Grass 	Stream 	Grass 	0 	TTR01_Z15_01

Die xxxxx_edge.2da Datei ist für die Ränder der Gebietskarten zuständig. Wenn ihr auf einer Karte umherwandelt und an den Rand gelangt, seht ihr wie sich ein Geländetyp über den Rand hinaus erstreckt. Diese Datei bestimmt, was ihr dort sehen könnt. Ihr müsst für jeden Bodentyp (2 Ecken und eine Kante), den es in der .SET Datei gibt, ein entsprechendes Modell (das am Rand wiederholt werden soll) hinterlegen.

Wie üblich gilt, wenn ihr Plattensets kombinieren wollt: Einträge kopieren, neu durchnummerieren und keine doppelten Einträge erzeugen. Wenn ihr doppelte Einträge erzeugt, weiß das Spiel nicht welchen Typ es verwenden soll. In unserem Beispiel (Stadt(Außen)/Ländlich) müsstet ihr, wie in der .set Datei, wieder "Grass" gegen "Cobble" ersetzen.

Gutes Gelingen
Pandur
Abt von Tyr der Stadt Corvalinsk

Erstellt von Pandur | am 18.07.2007