- 1. Theme-Struktur
- 2. Grafiken und Animationen
- 3. Sounds
- 4. Die theme.ini
- 4.1 Turm-Spezifikationen
- 4.2 Creep-Spezifikationen
- 4.3 Rotationswerte
- 4.4 Farbwerte
- 4.5 Konturwerte
- 4.6 Turm-Schusstypen
- 4.7 Creep-Effekt-Werte
- 5. Dein Theme testen
- 6. Beispiel Themes
Deine eigenen Themes erstellen
CreepTD ermöglicht es Entwicklern ihre eigenen Themes für das Spiel zu erstellen. Diese Seite wird alle notwendigen Informationen beinhalten, um dich mit der Entwicklung von eigenen Themes vertraut zu machen.
1. Theme-Struktur
Im Grunde besteht ein Theme aus einer Reihe an Grafiken und/oder Sounds, deren Verhalten in der "theme.ini" festgelegt wird. Du musst also alle Grafiken und Sounds erstellen, die dein Theme beinhalten soll, und daraufhin festlegen, wie sie sich im Spiel verhalten sollen.
Um dein Theme im Spiel lauffähig zu machen, musst du alle benötigen Dateien zu einem ZIP-Archiv zusammenfügen. Du kannst auch mit einem der Beispiel-Themes beginnen. Das ZIP-Archiv muss eine 'theme.ini' im Stammverzeichnis beinhalten. Beispiel:
your-theme-archive.zip ˫ theme.ini ˫ towers/ ˪ ... ˫ creeps/ ˪ ... ˪ sounds/ ˪ ...
2. Grafiken und Animationen
Das Spiel verwendet zum Speichern von Animationen ein eigenes Format auf der Basis von PNG24, es steht dir aber völlig frei, dies auch zu nutzen. Einfache Bilder ohne Animationen funktionieren ebenfalls (Animationen sehen aber natürlich besser aus!). Um dies zu ermöglichen beinhaltet jede Grafik eine Sequenz aus Einzelbildern in der Horizontalen. Jedes Einzelbild muss dabei stets die gleiche Größe haben. Am unteren linken Rand jedes Einzelbildes befindet sich jeweils ein Beschreibungspixel, der die Anzeigezeit (0-255) in dessen blauen Farbwert beinhaltet. Ein Beispiel:
Wie du siehst wird die Animation aus 19x19 px Einzelbildern plus einer weiteren Zeile für die Beschreibungspixel zusammengesetzt. Lass uns das einmal Bild für Bild betrachten:
1 | Blauer Farbwert im Beschreibungspixel ist 0. Dies ist ein Stop-Bild. |
---|---|
2 | Blauer Farbwert im Beschreibungspixel ist 6. Dieses Einzelbild wird für 6 Ticks angezeigt. |
3 | Blauer Farbwert im Beschreibungspixel ist 6. Dieses Einzelbild wird für 6 Ticks angezeigt. |
4 | Blauer Farbwert im Beschreibungspixel ist 35. Dieses Einzelbild wird für 35 Ticks angezeigt. |
5 | Blauer Farbwert im Beschreibungspixel ist 6. Dieses Einzelbild wird für 6 Ticks angezeigt. |
6 | Blauer Farbwert im Beschreibungspixel ist 6. Dieses Einzelbild wird für 6 Ticks angezeigt. |
Präziser: Das zweite Einzelbild wird erstmals dargestellt, sobald der Turm schießt (und daraufhin nachläd). Sobald das 6. Einzelbild erreicht wurde, beginnt die Animation erneut mit dem 1. Einzelbild und stoppt.
Dennoch ist es, wie bereits erwähnt, nicht notwendig Animationen zu verwenden. Du kannst auch einfach ein einfaches Bild ohne Animation, das keine Beschreibungspixel enthält, verwenden.
Hinweis: Die meisten Bildbearbeitungsprogramme (Photoshop beispielsweise) 'optimieren' Bilder, wenn sie gespeichert werden. Das führt in der Regel dazu, dass jeder Beschreibungspixel einen Farbwert von 000000 (das ist schlecht) erhält, so dass du sicherstellen solltest, dass die Optimierungen beim Speichern deaktiviert sind.
3. Sounds
Soundeffekt-Dateien müssen im WAV-Format (OGG und MP3 sind noch experimentell und scheinen in manchen Fällen nicht den gesamten Sound abzuspielen) vorliegen und müssen so geschnitten werden, dass sie ohne Verzögerung abgespielt werden können.
Wenn du es also richtig machen möchtest, schneide die Stille vor und hinter dem ersten Geräusch heraus, so dass die Tonkurve in etwa wie im Bild oberhalb aussieht.
Hinweis: Verwende WAV-Dateien mit 22050 kbit (wenn sich das zu schlecht anhört 44100 kbit), 16 bit, mono (1 Kanal), um die Dateigröße deines Themes gering zu halten. Es ist auch immer eine gute Idee, die Sounddateien so kurz wie möglich zu halten, da immer nur eine bestimmte Anzahl zur gleichen Zeit abgespielt werden kann.
4. Die theme.ini
Die theme.ini legt fest welche Grafiken für welchen Turm und für welchen Creep verwendet werden sollen und ermöglicht es dir viele Optionen für jedes einzelne Objekt festzulegen. Die ersten Zeilen definieren stets den Namen deines Themes, dich als Autor und welche Anpassungen es überhaupt bereitstellt. Beispiel:
name=My Cool Theme author=MyPlayerName providesTowers=yes providesTowerSounds=yes providesCreeps=yes providesCreepSounds=yes
Optionally, a custom theme may extend one of the default themes (default or classicplus) as a starting point. However, it will only extend the theme.ini (effects, file names) and has no access to the actual contents of the extended theme (like images or sounds). You need to add those to your custom theme also, if you want to re-use them. Example:
extends=default
Daraufhin beinhaltet die theme.ini die Definitionen der Türme und Creeps entsprechend der Anpassungen, die es bereitstellt.
4.1 Turm-Spezifikationen
Jeder Turm wird durch eine Turm-Definition beschrieben und du musst für jeden einige Parameter festlegen. Der Anfang einer Definition wurd stets durch den jeweiligen Namen in eckigen Klammern markiert, wie z.B.: [TOWER1]. Verfügbare Türme sind:
TOWER1 | Geschütz | Level 1 |
---|---|---|
TOWER11 | Geschütz | Level 2 |
TOWER12 | Geschütz | Level 3 |
TOWER13 | Geschütz | Level 4 |
TOWER2 | EMP Sender | Level 1 |
TOWER21 | EMP Sender | Level 2 |
TOWER22 | EMP Sender | Level 3 |
TOWER23 | EMP Sender | Level 4 |
TOWER3 | Kanonenturm | Level 1 |
TOWER31 | Kanonenturm | Level 2 |
TOWER32 | Kanonenturm | Level 3 |
TOWER33 | Kanonenturm | Level 4 |
TOWER4 | Raketensilo | Level 1 |
TOWER41 | Raketensilo | Level 2 |
TOWER42 | Raketensilo | Level 3 |
TOWER43 | Raketensilo | Level 4 |
TOWER5 | Teslaturm | Level 1 |
TOWER51 | Teslaturm | Level 2 |
TOWER52 | Teslaturm | Level 3 |
TOWER53 | Teslaturm | Level 4 |
TOWER6 | Ionenkanone | Level 1 |
TOWER61 | Ionenkanone | Level 2 |
Du musst für jeden Turm einige Parameter definieren (einige sind optional), die festlegen, wie sich der Turm verhalten soll und welche Inhalte er dafür verwenden soll. Paramter werden stets wie folgt festgelegt: name=Cooler Turmname. Verfügbare Parameter sind:
Wenn Grafiken bereitgestellt werden: | ||
name | The textuelle Name des Turms (ja, dieser kann geändert werden) | |
---|---|---|
rotation | Die Rotation der Turmkanone (siehe) | |
shot | Der Schusstyp des Turms (siehe) | Nicht verfügbar für TOWER4* |
shotInnerStroke | Innere Kontur des Schussstrahls (siehe) | Optional, Nicht verfügbar für TOWER4* |
shotInnerColor | Innere Farbe des Schussstrahls (siehe) | Optional, Nicht verfügbar für TOWER4* |
shotOuterStroke | Äußere Kontur des Schussstrahls (siehe) | Optional, Nicht verfügbar für TOWER4* |
shotOuterColor | Äußere Farbe des Schussstrahls (siehe) | Optional, Nicht verfügbar für TOWER4* |
splashInnerStroke | Innere Kontur des Splashkreises (siehe) | Optional, Nur verfügbar für Türme mit Umgebungsschaden |
splashInnerColor | Innere Farbe des Splashkreises (siehe) | Optional, Nur verfügbar für Türme mit Umgebungsschaden |
splashOuterStroke | Äußere Kontur des Splashkreises (siehe) | Optional, Nur verfügbar für Türme mit Umgebungsschaden |
splashOuterColor | Äußere Farbe des Splashkreises (siehe) | Optional, Nur verfügbar für Türme mit Umgebungsschaden |
targetInnerStroke | Innere Kontur des Zielstrahls (siehe) | Optional, Nur verfügbar für shot=ORBIT |
targetInnerColor | Innere Farbe des Zielstrahls (siehe) | Optional, Nur verfügbar für shot=ORBIT |
targetOuterStroke | Äußere Kontor des Zielstrahls (siehe) | Optional, Nur verfügbar für shot=ORBIT |
targetOuterColor | Äußere Farbe des Zielstrahls (siehe) | Optional, Nur verfügbar für shot=ORBIT |
ani | Turmgrafik/-animation (19x19px Einzelbilder) (siehe) | |
turretAni | Kanonengrafik/-animation (10x10px Einzelbilder) (siehe) | Optional |
projectileAni | Projektilgrafik/-animation (7x7px Einzelbilder) (siehe) | Optional, Nur verfügbar für TOWER4* |
buildAni | Bauanimation (überlagernd, 19x19px Einzelbilder, 50 Ticks) (siehe) | Optional |
upgradeAni | Ausbauanimation (überlagernd, 19x19px Einzelbilder, 50 Ticks) (siehe) | Optional, Nur verfügbar wenn ausbaubar |
changestrategyAni | Strategiewechselanimation (überlagernd, 19x19px Einzelbilder, 50 Ticks) (siehe) | Optional |
sellAni | Verkaufsanimation (überlagernd, 19x19px Eizelbilder, 50 Ticks) (siehe) | Optional |
Wenn Sounds bereitgestellt werden: | ||
sound | Schuss-Sound (Schlachtfeld) (siehe) | |
projectileSound | Projektiltreffer-Sound (siehe) | Optional, Nur verfügbar für TOWER4* |
buildSound | Baubeginn-Sound (siehe) | Optional |
upgradeSound | Ausbaubeginn-Sound (siehe) | Optional, Nur verfügbar wenn ausbaubar |
changestrategySound | Strategiewechselbeginn-Sound (siehe) | Optional |
sellSound | Verkaufsbeginn-Sound (siehe) | Optional |
Wenn du einen optionalen Parameter auslässt, wird dieser nichts zeigen, malen oder abspielen.
Wenn die Länge in Ticks einer Animation angegeben wurde, kann die Animation aus maximal dieser Anzahl an Einzelbildern zusammengesetzt werden (z.B. ausführliche Bauanimationen, die den Turm mit der Zeit immer ein Stückchen fertiger darstellen). Eine 'ani' Animation beginnt stets mit einem Stop-Bild, der den nichtstuenden Zustand anzeigt und kann eine zusätzliche Anzahl an Einzelbildern beinhalten, deren Anzahl der Nachladezeit des Turms entspricht (siehe das Raketensilo-Beispiel oben).
4.2 Creep-Spezifikationen
Wie Türme werden auch die Parameter der Creeps mit einer Creep-Definition festgelegt und du musst für jeden Creep eine Reihe von Parametern festlegen. Der Start einer Creep-Definition wird stets durch dessen Namen in eckigen Klammern markiert, wie z.B.: [CREEP1]. Verfügbare Creeps sind:
CREEP1 | Mercury |
---|---|
CREEP2 | Mako |
CREEP3 | Fast Nova |
CREEP4 | Large Manta |
CREEP5 | Demeter |
CREEP6 | Ray |
CREEP7 | Speedy Raider |
CREEP8 | Big Toucan |
CREEP9 | Vulture |
CREEP10 | Shark |
CREEP11 | Racing Mamba |
CREEP12 | Huge Titan |
CREEP13 | Zeus |
CREEP14 | Phoenix |
CREEP15 | Express Raptor |
CREEP16 | Mothership |
Für jeden Creep musst du eine Reihe von Parametern (einige davon sind optional) festlegen, die bestimmen, wie sich der Creep im Spiel verhalten und welche Inhalte er dafür verwenden soll. Parameter werden stehts wie folgt festgelegt: name=Cooler Creep-Name. Verfügbare Parameter sind:
Wenn Grafiken bereitgestellt werden: | ||
name | Der textuelle Name des Creeps (ja, dieser kann geändert werden) | |
---|---|---|
rotation | Die Rotation des Creeps (siehe) | |
ani | Creepgrafik/-animation (19x19px Einzelbilder) (siehe) | |
dieAni | Sterbeanimation (19x19px Einzelbilder) (siehe) | Optional |
effect | Eingebauter Creep-Effekt, der verwendet werden soll (siehe) | Optional |
Wenn Sounds bereitgestellt werden: | ||
dieSound | Sterbesound (Schlachtfeld) (siehe) | Optional |
incomingSound | Einfall-Sound (siehe) | Optional |
escapeSound | Flucht-Sound (siehe) | Optional |
Wenn du einen optionalen Parameter auslässt, wird dieser nichts zeigen, malen oder abspielen.
4.3 Rotationswerte
AUTO | Die Kanone des Turms zielt automatisch auf Creeps / der Creep rotiert automatisch entsprechend des Pfads |
---|---|
float value | Unabhängige Rotation zwischen -PI (gegen den Uhrzeigersinn) und +PI (im Uhrzeigersinn) pro Tick (50ms). Für eine zufällige Richtung hänge ein "R" an. |
4.4 Farbwerte
RGB | Hexadezimale rot/grün/blau-Werte in Kurznotation (0-F) |
---|---|
RRGGBB | Hexadezimale rot/grün/blau-Werte (00-FF) |
RGBA | Hexadezimale rot/grün/blau/alpha-Werte in Kurznotation (0-F) |
RRGGBBAA | Hexadezimale rot/grün/blau/alpha-Werte (00-FF) |
4.5 Konturwerte
solid[:thickness] | Eine feste Kontur | solid:1 |
---|---|---|
dashed[:thickness[:dashlength[:spacelength]] | Eine gestrichelte Kontur | dashed:1:10:10 |
zigzac[:thickness[:amplitude[:wavelength]]] | Eine zickzack Kontur | zigzag:1:1:3 |
wobble[:thickness[:amplitude[:detail]]] | Eine verwackelte Kontur | wobble:1:3:1 |
4.6 Turm-Schusstypen
DIRECT | Der Turm schießt mit einem direkten Strahl auf Creeps |
---|---|
ORBIT | Der Turm schießt über den Orbit auf Creeps (wie die Ionenkanone) |
4.7 Creep-Effekt-Werte
REGENERATE | Die Lebensanzeige des Creeps blendet sich ein und aus |
---|---|
SLOWIMMUNE | Um den Creep wird ein Schild-Effekt dargestellt |
Natürlich musst du die eingebauten Effekte nicht zwingend nutzen und kannst deine eigenen innerhalb der Creepgrafiken verwenden.
5. Dein Theme testen
Um dein Theme zu testen wähle "Neues Theme installieren" innerhalb der Theme-Auswahlbox im Optionsbildschirm aus. Nun starte ein Sandbox-Spiel und probiere aus, ob alles funktioniert, wie du dir das vorstellst. Sobald alles richtig funktioniert kannst du dein Theme veröffentlichen.
Hinweis: Ein guter Ort zur Veröffentlichung deines Themes könnte ein Beitrag für jeden im Forum sein.
Viel Spaß!
5. Beispiel Themes
Du kannst die Arbeit an deinem eigenen Theme gerne auf Basis eines der Standard-Themes, die du dir unten herunterladen kannst, beginnen. Dennoch, alle Inhalte der Standard-Themes dürfen nur für CreepTD verwenden werden. Es ist nicht erlaubt Inhalte daraus für etwas anderes zu verwenden.