Nicht angemeldet

Eigene Karten erstellen

CreepTD ermöglicht es Entwicklern ihre eigenen Karten für das Spiel zu erstellen. Diese Seite wird alle notwendigen Informationen beinhalten, um dich mit der Entwicklung vertraut zu machen.

1. Einleitung

Die meisten Karten, die im Spiel verfügbar sind, wurden von Community-Mitgliedern erstellt. Wenn du also eine coole Idee hast, probiere es doch einfach einmal selbst.

2. Den Kartenhintergrund zeichnen

Die Grundlagen: Karten müssen 16x16, 32x16 oder 32x32 Felder groß sein. Andere Werte können nicht verwendet werden. Die Größe des Hintergrundbildes ist stets Breite=KARTENBREITE*20+1 und Höhe=KARTENHÖHE*20+1 in Pixeln. Dies liegt daran, dass jede Zelle eine äußere Größe von 20x20 Pixeln hat und nur die äußere linke und obere Gitterlinie beinhaltet (nicht jedoch die äußere rechte und untere, die von der nächsten Zelle gemalt wird). +1 daher, da die letzte Zelle am rechten oder unteren Rand nicht die äußere rechte oder untere Gitterlinie beinhaltet. Diese wird dem Hintergrundbild also hinzugefügt. Dementsprechend ist der innere Bereich einer Zelle, in dem Türme gebaut werden können, 19x19 Pixel groß, wenn man die linke und obere Gitterlinie nicht mit einbezieht.

Grafik-Editoren: Du kannst jedes Bildbearbeitungsprogramm verwenden, das du möchtest (*), so lange du das Hintergrundbild im JPEG-Format (am besten mit 75%-Qualität) unter dem Namen "{kleingeschriebener Kartenname}.jpg" abspeicherst.

Schönere 16x..-Karten Bei der Erstellung einer 16x16 großen Karte wird der Kartenhintergrund für den oberen linken Spieler angezeigt. Für Spieler 2 (oben rechts) wird das Bild um 90° im Uhrzeigersinn gedreht, für Spiele 3 (unten rechts) um 180° und für Spieler 4 (unten links) um 270°. Das beste optische Ergebnis wird daher durch Hinzufügen eines Übergangs an der rechten/unteren Seite des Kartenhintergrunds erreicht. Ähnlich dazu wird der Kartenhintergrund einer 32x16 großen Karte um 180° gedreht.

Du kannst diese blanken 16x16, 32x16 or 32x32 Hintergrundbilder als Ausgangspunkt verwenden (alle herunterladen).

(*) GIMP (frei), Photoshop (kommerziell) können problemlos genutzt werden. Du könntest sogar MS Paint verwenden, das Resultat würde aber etwas...du weißt schon...ausfallen.

3. Einfache Karten-Syntax

Das Erstellen deiner ersten 16x16-Karte ist recht einfach. Alles, was du brauchst, ist ein Hintergrundbild mit den Maßen 321x321 Pixel und eine entsprechende Kartendatei. Die Hintergrundgrafik hat immer den Namen {kleingeschriebener Kartenname ohne Leerzeichen}.jpg und die Kartendatei {kleingeschriebener Kartenname ohne Leerzeichen}.map. Beide Dateien werden dann zu einem ZIP-Archiv mit dem Namen {kleingeschriebener Kartennamen ohne Leerzeichen}.zip hinzugefügt.

Pfadsegmente

In der einfachen Karten-Syntax werden Pfadsegmente Zeile für Zeile als einfache Koordinaten in der Form "X,Y" angelegt. Die obere linke Zelle hat die Koordinaten 0,0, die untere rechte 15,15. Schreibe deinen Pfad einfach in die .map-Datei. Die Creeps werden dem Pfad vom Anfang bis zum Ende folgen. Beispiel:

0,0
0,1
0,2
0,3
0,4
Blockierte Koordinaten

Zusätzlich kannst du sogenannte blockierte Koordinaten von Zellen definieren, an denen keine Türme errichtet werden können. Um blockierte Koordinaten zu definieren, benutze ein ";" statt einem "," um die X und Y Koordinaten voneinander zu trennen. Beispiel:

2;3
2;4
2;5
Kommentare

Um einen Kommentar zu deiner Kartendatei hinzuzufügen, beginne mit einem "#" vor deinem Text. Beispiel:

# Dies ist ein Kommentar 
0,1 # Dies ist ein angehängter Kommentar

Vollständig leere Zeilen sind auch möglich.

Das ist grundsätzlich alles, was du wissen musst, um deine erste Karte mit der einfachen Karten-Syntax zu erstellen. Aber merke: Die einfache Karten-Syntax ist auf Karten der Größe 16x16 beschränkt.

4. Fortgeschrittene Karten-Syntax

CreepTD Version 1.0 führt die fortgeschrittene Karten-Syntax ein, die vollständig abwärtskompatibel zur einfachen Karten-Syntax ist. Sie ermöglicht dir die Erstellung von alternativen Routen mittels Markierungen (Labels), mehreren Start- sowie End-Segmenten sowie Untergrund-Sektionen von Segmenten.

Erweiterung der einfachen Karten-Syntax

Einfache Pfadsegmente und blockierte Koordinaten werden wie bereits aus der einfachen Karten-Syntax bekannt definiert.

@author Vorparser Option

Lasste andere wissen, dass du der Kartenersteller bist. Verwende dazu bitte deinen Spielernamen. Beispiel:

@author Spielername
@size Vorparser Option

Seit Version 1.0 können Karten 16x16, 32x16 oder 32x32 Zellen groß sein. Andere Werte als diese werden vom Parser nicht akzeptiert. Wird die Angabe ausgelassen und der strikte Modus nicht explizit aktiviert, wird eine Größe von 16x16 Zellen angenommen. Um die Kartengröße zu bestimmen, verwende:

@size 16x16
@strict Vorparser Option

Wenn du möchtest, dass der Parser nicht versehentlich zur einfachen Karten-Syntax zurückkehrt, z.B. indem es die Start- und Endsegmente deines Pfades nur annimmt, fehlerhafte Zeilen ignoriert oder versucht irgendetwas zu korrigieren, was du so nicht vorgesehen hattest, kannst du folgendermaßen den strikten Parser-Modus aktivieren:

@strict

Im strikten Parser-Modus wird der Parser keine (versehentlichen) Fehler erlauben.

Start-Segmente

Mit der fortgeschrittenen Karten-Syntax ist es möglich, mehrere Start- und Endsegmente zu definieren, die nacheinander von hereinkommenden Creeps gewählt werden. Beispiel:

1,2 start

Tipps: Creeps werden in stets in der Mitte eines Startsegments auftauchen (um dies zu verwenden, siehe "Untergrundsegmente" weiter unten). Es ist ebenfalls möglich, gewichtete Starts zu definieren, indem die entsprechende Koordinate mehrere Male hinzugefügt wird un der Pfad daraufhin mittels Markierungen (Labels) zusammengeführt wird (siehe unten). Außerdem wird das aller erste Segment in einer Karte automatisch als Startsegment gehandhabt, wenn der strikte Modus nicht aktiviert ist. Ist er aktiviert, müssen Startsegmente immer korrekt definiert werden.

Endsegmente

Ähnlich wie bei den Startsegmenten ist es auch möglich, mehrere Endsegmente zu definieren, die über alternative Routen von den Creeps erreicht werden können. Beispiel:

1,2 end

Hints: Die Creeps werden stets in der Mitte eines Endsegmentes verschwinden (um dies zu vermeiden, siehe "Untergrundsegmente" weiter unten). Wenn kein Endsegment definiert wurde und der strikte Modus nicht aktiviert ist, wird der Parser versuchen, das zuletzt definierte Segment als Endsegment zu verwenden.

Markierte Segmente / Labels

Wenn du alternative Routen erstellen möchtest, musst du Pfadsegmente, die ein "goto"-Ziel sind, entsprechend markieren. Beispiel:

1,2 A

Tipps: Markierungen haben keinen direkten Effekt, sie sind nur Markieren. Markierungen können keine Leerzeichen beinhalten.

Sprungsegmente

Um alternative Routen zu erstellen, benötigst du Sprungsegmente. Wenn ein Segment mit einer oder mehreren Sprungmarkierungen erreicht wird, wird der Creep den Weg ab der definierten Markierung fortsetzen. Beispiel:

1,2 goto A

Tipps: Es ist auch möglich Sprungsegmente mit mehreren Zielen zu definieren: Beispiel:

1,2 goto A,A,B

Erklärung:Die Creeps werden entweder zu A oder zu B gehen, mit einer Gewichtung von 2 (66%) für A und 1 (33%) für B.

Untergrundsegmente

Um Tunnel zu erstellen, gibt es Untergrundsegmente. Untergrundsegmente werden dadurch definiert, dass man sie um mindestens ein Leerzeichen einrückt. Creeps, die sich auf einem Untergrundsegment befinden, werden verborgen und können nicht von Türmen beschossen werden. Beispiel:

   1,2
   1,2 start
   1,3 end
   ...

Tipps: Untergrundsegmente können außerdem ein Feld außerhalb der Karte (aber nicht weiter) platziert werden, z.B. " -1,-1 start" oder " 4,16 end". In diesem Beispiel werden Creeps beim Betreten der Karte so angezeigt, als würden sie die Karte von außen betreten, anstatt mitten auf dem ersten Segment zu starten. Beispiel:

   0,-1 start
0,0
0,1
...
0,15
   0,16 end
Kombinieren der Syntax

Es ist möglich, Segmentdefinitionen miteinander zu kombinieren. Beispiel:

   1,2 start A goto B,B,C

Erklärung: Das definierte Segment ist ein Untergrundsegment (siehe die Einrückung) an den Koordinaten 1,2. Es ist ein Start. Es ist mit "A" markiert, um als Ziel eines Sprungsegments dienen zu können und Creeps, die das Segment verlassen, werden zu den Segmenten mit der Markierung B oder C springen, wobei B mit einer Gewichtung von 2 (66%) und C mit einer Gewichtung von 1 (33%) gewählt wird.

Im Folgenden siehst du einen Spezialfall von gewichteten Startsegmenten:

1,1 start goto B
1,1 start
1,2 B
1,3
...

2,1 start
2,2
2,3
...

In diesem Beispiel werden die Creeps an

Tipps: Endsegmente können nicht mit Sprungsegmenten kombiniert werden, weil sie...Endsegmente sind. Start- und Endsegmente können ebenfalls nicht kombiniert werden. Die Reihenfolge von Kombinationsansweisungen ist darüber hinaus festgelegt und muss der im ersten Beispiel entsprechen.

Endlosschleifen

Es ist nicht möglich Endlosschleifen (weder pur noch konditional) zu deklarieren, in denen Creeps stecken bleiben könnten. Falls dennoch deklariert, wird die Karte vom Parser als ungültig markiert.

Zu guter Letzt: Ein Karten-Beispiel

Die Kartendatei für das obige Beispiel würde folgendermaßen aussehen:

# Map TEST
# compiled by CreepTD PHP library 1.0.3
# at Wed, 12 Oct 2011 14:56:22 +0000

@author dcode
@size 16x16
@strict

1,1 start
2,1
3,1 goto A,B

# Route A
4,1 A
5,1 C
6,1
7,1 end

# Route B
3,2 B
3,3
4,3
5,3
5,2 goto C

Für fortgeschrittene Einblicke in dieses Themengebiet kannst du auch einen Blick in die Quellen der PHP-Bibliothek werfen (Path::validate).

5. Einen Karteneditor verwenden

Statt all diese Schritte manuell durchzuführen, kannst du außerdem den CreepTD Karteneditor verwenden, der dir viel Arbeit abnimmt. Der offizielle Editor unterstützt vollständig die fortgeschrittene Karten-Syntax.

6. Die CreepTD-PHP-Bibliothek verwenden

Wir stellen dir die CreepTD-PHP-Bibliothek zur Verfügung, die CreepTD-Kartendateien sowohl in einfacher als in fortgeschrittener Karten-Syntax parsen, validieren und kompilieren kann. Nutze die Bibliothek, wenn du eine Kartendatei validieren möchtest oder nutze es als Ausgangspunkt, wenn du deinen eigenen Parser, Validierer oder Compiler in einer anderen Programmiersprache erstellen möchtest.


Wirf einen Blick in die "README" und die "test.php" Dateien:

README
test.php