Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripting:tutorials:level1:place_entities

Objekte platzieren

Objekte/Entitäten werden mit dem Entitäten-Werkzeug (Shortcut Ctrl+2) platziert. Wenn man den Cursor im Viewport bewegt, erscheint das gewählte Entity unter dem Cursor. Dieser hat folgende Funktionen:

Tastenkombination Effekt
Linke Maustaste Objekt an der Cursorposition platzieren. Der Objekt/Entity-Typ kann im Daten-Explorer gewählt werden
Rechte Maustaste Auswahl des Entity-Typs unter dem Cursor im Daten-Explorer
Shift + Mausrad Entity vor dem Platzieren drehen
B (gedrückt halten) Blocking ignorieren - so können Entitäten, die keine Gebäude sind, auf geblocktes Gelände gesetzt werden

Alle Entitäten sind im Datenexplorer in verschiedenen Kategorien angeordnet: Animals, Doodads, Entities (Other), Entities (Player) und Misc.

In Animals sind alle Tiere verfügbar. Sie haben das Präfix XA.

In Doodads sind alle „Naturobjekte“ enthalten. Dazu zählen Bäume, Felsen, Büsche und Gräser, Kisten und Lagerfeuer, Blumen und Spinnweben und viele andere. Auch Mauerabschnitte und Ressourcenhaufen sind hier zu finden. Sie haben das Präfix XD.

In Entities (Other) sind Gebäude (Präfix CB) und Siedler-Typen (Präfix CU) gelistet, die in einem normalen Spiel nicht von einem menschlichen Spieler gebaut oder rekrutiert werden können. Man sollte einem menschlichen Spieler solche Entitäten auch nicht setzen, da sie im Spiel-Interface nicht richtig funktionieren. Nicht-Spieler-Gebäude haben beispielsweise kein Vorschaubild und Nicht-Spieler-Arbeiter und NPCs beanspruchen in der Regel Plätze im Wohnhaus und Bauernhof und können weder angewählt noch bewegt werden. Ausnahme hierbei sind die bösen Helden und Banditentruppen.

In Entities (Player) sind Gebäude (Präfix PB), Siedler-Typen (Präfix PU) und Kanonen (Präfix PV) gelistet, die (bis auf wenige Ausnahmen) in einem normalen Spiel von einem menschlichen Spieler gebaut oder rekrutiert werden können. Zu den Ausnahmen zählen unter anderem dunkle Türme und fahrende Händler. Letztere haben die gleichen Probleme wie Nicht-Spieler-Einheiten.

In Misc sind nur zwei Entitäten verfügbar:

  • Das XD_ScriptEntity ist im Spiel unsichtbar und wird dazu benutzt, eine bestimmte Position auf der Map festzulegen, die im Skript referenziert werden kann
  • Das XS_Ambient ist im Spiel unsichtbar und wird dazu benutzt, Umgebungsgeräusche wie Vogelzwitschern oder Wind an bestimmten Positionen auf der Karte zu definieren

Werkzeug-Container

Für alle Entitäten, die einem Spieler gehören, also Gebäude (Präfix CB und PB) und Siedler (Präfix CU und PU), kann im Werkzeug-Container im Voraus die zu verwendende Spieler-Id gewählt werden. Spieler-Ids sind im Bereich von 1 bis 8, wobei Spieler 1 der menschliche Spieler im Singleplayer ist.

Wenn im Werkzeug-Container „Zufällige Position“ angewählt ist, wird der sich im Werkzeug-Container darunter befindliche Abschnitt „Entitätengruppe“ aktiv. Außerdem wird der Cursor im Viewport zu einem Brush, der wie die Brushes im Höhenwerkzeug und im Texturenwerkzeug mit Ctrl + Mausrad skaliert werden kann.

Innerhalb dieses Brushes werden mit zufälliger Rotation eine zufällige Auswahl aller Entitäten platziert, die in dem weißen Feld bei „Entitätengruppen“ im Werkzeug-Container gelistet sind. Diesem Feld kann ein beliebiger Entity-Typ mit einem Rechtsklick im Daten-Explorer hinzugefügt werden. Folgende Funktionen bietet die Entitätengruppe an:

  • Anzahl der Entitäten: Anzahl der Entitäten, die zufällig innerhalb des Brushes platziert werden sollen
  • Öffnen…: Eine vorgefertigte oder selbst abgespeicherte Entitätengruppe laden
  • Speichern…: Speichere die aktuelle Entitätengruppe ab
  • Entfernen: Entferne den in dem unteren Feld angewählten Entity-Typ aus der Gruppe
  • Zurücksetzen: Leere die Entitätengruppe

Wenn im Werkzeug-Container „Zufällige Skalierung“ angewählt ist, werden alle platzierten Doodads zufällig skaliert.

Objekte selektieren

Entitäten werden mit dem Selektions-Werkzeug (Shortcut Ctrl+1) selektiert. Im Viewport können wie im Spiel alle platzierten Entitäten mit einem Klick oder Lasso-Selektion ausgewählt werden.

Tastenkombination Effekt
Linke Maustaste oder Lasso ziehen Entitäten selektieren
Rechte Maustaste Ausgewählte Entitäten zum Mauszeiger bewegen*
Shift + Mausrad Selektierte Entities drehen
Alt + Mausrad Selektierte Entities skalieren
Backspace Selektiere Entities löschen

* Im ursprünglich mit der Gold Edition ausgelieferten Editor sorgt ein Bug dafür, dass nur die Hälfte der gewählten Entities verschoben wird. Im TinyScript und der Community-Version des Editors (FIXME Link einfügen) ist dieser Fehler behoben.

Der Selektions-Explorer

Die genauen Eigenschaften jedes selektierten Objekts finden sich in einer Liste im Selektions-Explorer, der mit einem Klick auf ein bestimmtes Attribut auch danach sortiert werden kann.

Mit einem Doppelklick auf ein Objekt im Selektions-Explorer können einige dieser Attribute verändert werden. Dazu zählen beispielsweise die Position, die Spieler-Id und der Skriptname. Insbesondere das Setzen eines Skriptnamens ist dabei von Bedeutung.

entity_properties.jpg

Der Selektions-Explorer bietet außerdem die Möglichkeit, mehrere selektierte Entities in der Liste erneut auszuwählen, um sie zu löschen oder aus der Selektion zu entfernen.

Weiterhin kann im Selektions-Explorer ein Selektionsfilter eingestellt werden, sodass beispielsweise nur Gebäude oder Einheiten selektiert werden können. Mit einem Klick auf Alles selektieren werden alle Objekte gemäß dieses Filters ausgewählt. Mit Setze Spieler ID kann für alle selektierte Gebäude oder Einheiten gleichzeitig ein neuer Spieler festgelegt werden. Mit Zeige Entität nach ID springt der Viewport zur Entität mit der gegebenen Id.

Exkurs: Entity-Id vs Skriptname

Mit der Entity-Id wird eine Entity eindeutig identifiziert. Sie wird im Selektionsexplorer und bei den Entity Properties angezeigt. Jede Entity auf der Karte hat eine einzigartige Entity-Id und die Entity-Id ist später im Skript die einzige Möglichkeit, eine Entity zu manipulieren (wie beispielsweise rotieren, löschen, bewegen, usw.) oder ihren Status abzufragen (beispielsweise Position, Lebenspunkte, etc. ermitteln). Die Id einer Entity kann nicht verändert werden.

Um im Skript nicht mit wenig aussagekräftigen Zahlen hantieren zu müssen, kann jeder Entity ein Skriptname zugewiesen werden. Viele Funktionen, die wir später vorstellen, können mit Skriptnamen arbeiten. Aber auch diese Funktionen ermitteln intern zuerst die Entity-Id, die zur Entity mit dem angegebenen Skriptnamen gehört. Damit die Zuweisung einer Entity-Id zu einem Namen immer funktioniert, müssen alle Skriptnamen ebenfalls eindeutig sein! Keine zwei Entities dürfen den gleichen Skriptnamen besitzen.

Ein weiterer Vorteil von Skriptnamen ist, dass sie unverändert bleiben und eine Entity auch nach bestimmten Aktionen eindeutig identifizierbar lassen. Beispielsweise ändert sich die Entity-Id, wenn du eine Entity einem anderen Spieler zuweist. Ihr Skriptname bleibt allerdings gleich.

Umgekehrt können per Skript Entities auf der Karte gesucht werden, zum Beispiel alle Türme in einem gewissen Gebiet. Auch in solchen Fällen wird immer mit Entity-Ids gearbeitet, niemals mit Skriptnamen - alle gefundenen Entities werden über deren Id angegeben.

Der Unterschied zwischen Entity-Id und Skriptname ist wichtig, um zu verstehen, in welchen Fällen sie jeweils gebraucht werden (können). Skriptnamen erleichtern lediglich die Bedienung; intern läuft alles über Ids.

Achtung: Vergib niemals Skriptnamen, die Umlaute enthalten! Dadurch wird die Kartendatei beim Speichern zerstört.

Rohstoffe setzen

Rohstoffschächte werden mit einem separaten Tool (Shortcut Ctrl+9) platziert. Das liegt daran, dass neben dem Schacht auch passende Texturen platziert werden und die Höhenlevel automatisch so gesetzt, dass der Schacht gut in der Landschaft sitzt.

Jeden Rohstoffschacht gibt es in zwei Varianten: Normal und verschüttet (closed). Verschüttete Schächte sollten logischerweise nur auf Karten vorkommen, in denen Pilgrim zur Verfügung steht. Im Daten-Explorer kann der gewünschte Schacht gewählt und im Viewport mit einem Linksklick platziert werden.

Achtung: Wenn du das Grid aktivierst, siehst du um den Rohstoffschacht herum einen grünen Bereich. Dies ist der Bereich, auf dem später das Minengebäude platziert wird. Vermeide es unbedingt, Blocking in diesen Bereich zu bringen, sei es durch das Höhentool, blockende Texturen, Wasser oder Objekte.


Umsetzung der Beispielkarte: Objekte

Um die Gestaltung der Karte abzuschließen, Platzieren wir zuerst alle Rohstoffschächte gemäß unseres Plans, gefolgt von Siedlungsplätzen, dem Haupthaus für den Spieler und der feindlichen Stadt.

Hinweis: Alle hier behandelten Schritte der Beispielkarte können hier einzeln heruntergeladen werden.


Wir setzen zuerst die Rohstoffschächte, da sie in der Regel noch in die Landschaft „eingearbeitet“ werden müssen. Die Rohstoff-Brushes (Crtl + 9) zeigen im Viewport unter der Maus die Größe eines Schachtes an.

Wenn der Schacht nicht auf komplett planem Untergrund platziert wird, muss nachgearbeitet werden. Das heißt, dass Kanten geglättet und an den Rändern Höhen angepasst werden müssen, damit der Schacht natürlich in der Umgebung liegt. Der Rohstoff-Brush setzt automatisch passende Texturtypen. Diese sollten in die Landschaft integriert werden. Versuche, passende Texturen zu finden und einen Übergang zwischen Schacht und Umgebung zu gestalten. Beispielsweise passt zum Lehmschacht dunkle Erde, die wiederum gut zu dunklem Gras oder heller Erde passt. Die Standardtextur um den Schacht komplett zu ersetzen sieht sehr unnatürlich aus. Ein Schwefelschacht sollte nicht komplett in der grünen Wiese liegen, sondern seiner sandigen Textur entsprechend.

Speziell Steinbrüche erfordern etwas Geduld, da deren „Rückseite“ in einen bestehenden Berg eingearbeitet werden muss. Besonderes Augenmerk sollte darauf liegen, dass der im Grid (Crtl + G) grün sichtbare Bereich nicht editiert wird.

mines1.jpg

Abhängig davon, auf welcher Höhe du Schächte platzierst, kann es passieren, dass sie zum Teil mit Wasser gefüllt sind. Mit dem Wasserhöhen-Tool (Crtl + 8) und aktivierter „Einfüllen“-Option kannst du das Wasser aus dem Schacht entfernen.

mines2.jpg

Nach den Schächten setzen wir außerdem noch die Siedlungsplätze (XD_VillageCenter bei den Doodads) für den Spieler und auch für den Gegner. Die Rohstoffmenge eines Schachts kann eingestellt werden, wenn man den Schacht durch einen Doppelklick im Selektions-Explorer editiert.

Hinweis: Es kann sehr verlockend sein, dem Spieler Unmengen an Rohstoffen und Siedlungsplätzen zur Verfügung zu stellen. Wir lehnen uns wahrscheinlich nicht zu weit aus dem Fenster, wenn wir behaupten, dass das fast jedem Mapper, vor allem bei seiner ersten Map, so ging. Die beste Therapie dagegen ist, diesem Verlangen mal nachzugeben und das zu spielen. Man wird sehr schnell feststellen, dass der Aufbau für den Spieler immer nach dem gleichen Schema ohne Variation und ohne Herausforderung verläuft. Viel Spielspaß kann dadurch erzeugt werden, die Erschließung von neuen Rohstoffen und Siedlungsplätzen nicht zu einfach zu gestalten.

Achtung: Ändere nie die Rohstoffmenge eines Schachts, wenn bereits ein Bergwerk darauf steht. Das stört die Funktion der Grube; sie muss in so einem Fall gelöscht und neu gesetzt werden.

Anschließend geben wir beiden Spielern ein Haupthaus und dem Computerspieler außerdem noch eine fertige Stadt. Siedler 5 verfügt standardmäßig über keine selbstständig aufbauende KI, sodass allen Computerspielern ihre Siedlung fertig platziert werden muss. In den KI-Tutorials in Ebene 1 und Ebene 3 (FIXME link) gehen wir näher darauf ein.

Damit die KI später Armeen rekrutieren kann, braucht sie Militärgebäude. Um die Siedlung etwas zu beleben, setzen wir außerdem einige Stadtzentren und Wirtschaftsgebäude. Einige wenige Türme zur Verteidigung machen das ganze wehrhaft.
Auch was Türme betrifft: Der Drang, sehr viele davon zu setzen, wird in der Regel damit bekämpft, dagegen mal zu spielen. Kämpfen wird durch zu viele gegnerische Türme zu einer zähen Fleißarbeit. Sie sollten deshalb mit Bedacht eingesetzt werden.

Wichtig: Auf unserer Beispielkarte haben wir keine Mauern gesetzt (XD_Wall… oder XD_DarkWall… in den Doodads). Bei Mauern oder Palisaden ist ganz besonders mit dem Grid darauf zu achten, dass sie geschlossen sind. Andernfalls könnten Einheiten durch die geschlossene Befestigung „hindurchlaufen“.

Nachdem alle Gebäude und Rohstoffschächte auf der Karte sind, sieht unser Beispiel so aus:

step8.jpg

Wir fahren mit Bäumen fort, da sie ebenfalls Rohstoffe liefern und ihnen deshalb genug Platz auf der Map eingeräumt werden muss. Im Werkzeug-Container setzen wir Häkchen bei Zufällige Position und Zufällige Skalierung und öffnen die Entitätengruppe north_fir, um Fichten zu setzen. Das Präfix north soll nicht stören - Nadelbäume passen auch zum europäischen Landschaftsstil. Die Anzahl der Entitäten sollte zwischen 2 und 5 liegen, sodass man eine gute Kontrolle darüber behalt, wie viele Entitäten gesetzt werden.

Tipp: Sehr wahrscheinlich wird dir bei diesem Schritt noch die ein oder andere Stelle auf der Karte auffallen, die nicht richtig geglättet ist oder eine Nachbearbeitung mit dem Texturtool erfordert. Dafür ist es nie zu spät; bei jedem Arbeitsschritt besteht die Gelegenheit, Details einzuarbeiten und einen vorigen Arbeitsschritt zu ergänzen.

Achte insbesondere bei Bäumen darauf, dass sie alle einen gewissen Abstand zueinander haben. Bäume, die zu nah ineinander stehen, sehen unnatürlich aus. Gleichzeitig sollten nicht alle Bäume den genau gleichen Abstand zueinander haben, da das ebenfalls nicht realitätsnah wirkt.

Achtung: Platziere keine Bäume außerhalb der Kartenbegrenzung! Die Wegfindung der Leibeigenen könnte sonst das Spiel zum Absturz bringen. Nutze HelferKartenbegrenzung, um die Kartengrenzen einzuhalten.

doodads1.jpg

Wie beim Texturieren gilt auch hier, nicht alles nach dem gleichen Schema zu bearbeiten. Erlaube deinem Design zu variieren, sodass nicht jeder Teil der Karte gleich aussieht.

Ebenfalls solltest du beachten, dass die gesetzten Objekte die Landschaft ergänzen und nicht für sich stehen. Das bedeutet, dass Wälder nicht hauptsächlich auf sandigen oder felsigen Boden gehören. Hier und da können Ausnahmen das Design aufwerten - im Allgemeinen sollte die Landschaft aber logisch bleiben.

Oft ist es sinnvoll, in die Nähe von Rohstoffschächten oder an anderen Orten, an denen es Sinn ergibt, kleine Rohstoffhaufen zu setzen (z.B. XD_Clay1 für Lehm). Auch deren Rohstoffmenge kann über den Selektions-Explorer angepasst werden.

Als nächstes bleibt die Karte mit Deko-Entities zu schmücken. Dazu wählen wir beispielsweise normal_meadow für Wiesen oder normal_bushes für das Unterholz in Wäldern. Falls uns eine Entity-Gruppe nicht so wie sie ist gefällt, entfernen wir einzelne Entity-Typen oder fügen mit Rechtsklick auf einen Entity-Typ im Daten-Explorer einen Typ der Gruppe hinzu.

doodads2.jpg

Wichtig: Achte darauf, nicht zu viel Bauplatz zu blockieren, indem du wortwörtlich Steine in den Weg legst. Prüfe mit dem Grid (Ctrl + G), ob durch Entities in der Gruppe Blocking entsteht. Ein üblicher Verdächtiger ist die Gruppe normal_unterholz, die viele blockende Steine enthält. In den meisten Fällen solltest du die aus der Gruppe nehmen. Bäume sind kein Problem, da sie sich fällen lässen. Steine darunter können jedoch nicht entfernt werden.

Im Bereich um den Lehmschacht im Westen setzen wir wenig Wald und viele Gräser, um den trockenen Boden zu unterstreichen.

doodads3.jpg

Hinweis: Es können nicht beliebig viele Entitäten auf der Karte platziert werden. Über ein Maximum von 42000 Entitäten hinaus werden nicht alle Entitäten gespeichert, sodass zuvor platzierte Objekte wieder verschwinden. Die aktuelle Anzahl der Entitäten kann unter HelferRessourcenmanager gefunden werden. Der zweite Wert bei Logic related/Entities zeigt sie an.

Gebiete, die ohnehin durch Felstexturen oder steiles Terrain blockiert werden, können wir ohne Bauplatzverlust mit Felsen bedecken. Dazu müssen wir beim Platzieren die B-Taste gedrückt halten.

doodads4.jpg

Im letzten Schritt kannst du dir für bestimmte Orte auf der Karte besondere Designs überlegen, sogenannte Blockfänger. Wasserfälle, Friedhöfe oder Schafweiden gehören da beispielsweise dazu. An solchen Orten können Quests, Schatzsuchen oder andere Ereignisse stattfinden.

doodads5.jpg

Weil der Spieler ohne Dorfzentrum und Leibeigene nicht starten kann, stellen wir ihm einige der letzteren zur Verfügung. Außerdem soll er diverse Helden erhalten, die wir um ein Lagerfeuer herum anordnen.

doodads6.jpg

Tipp: Die Leibeigenen wurden mit aktiviertem Am Raster ausrichten im Helfer-Tab gesetzt. Ist diese Option aktiv, werden alle Entities genau auf den Rasterpunkten mit einer Rotation in 90°-Schritten platziert.

Der weiße Kasten auf dem Lagerfeuer ist ein XD_ScriptEntity (zu finden unter Misc). Diese Entities sind im Spiel unsichtbar und werden dafür benutzt, Positionen auf der Karte zu markieren und im Skript nutzbar zu machen. Dafür sollten sie immer einen Skriptnamen erhalten. Ein ScriptEntity ohne Namen ist nicht sinnvoll. Unser ScriptEntity nennen wir PositionCampfire und benutzen es später im Skript, um die Kamera auf diese Position zu bewegen.

Damit im Skript außerdem Sieg und Niederlage festgestellt werden können, geben wir den Haupthäusern der beiden Spieler die namen Player1 und Player2.

properties.jpg

Die komplette Beispielkarte sieht damit so aus:

step9.jpg


Ambient Sounds

Noch sind wir nicht fertig! In einem letzten Schritt, der leider oft vergessen wird, platzieren wir Umgebungsgeräusche/Ambient Sounds auf der Karte. Die sorgen im Spiel dafür, dass in Wäldern Vogelzwitschern und auf Bergen heulender Wind zu hören ist.

Im Misc-Ordner im Daten-Explorer findet sich dazu XS_Ambient. Das platzieren wir in die Mitte der Umgebung, in der Geräusche zu hören sein sollen. Weil diese Entities manchmal schwierig zu selektieren sein können, stellen wir im Selektionsexplorer den Selektionsfilter auf Skripte. So können wir mit dem Auswahlrahmen ausschließlich XS_Ambient-Entities in einem Bereich selektieren.

Mit einem Doppelklick auf ein XS_Ambient im Selektions-Explorer öffnen sich die Entitätseigenschaften, wo wir für den Ambient Sound den Typ und den Radius festlegen können. Mit dem Radius wirst du experimentieren müssen. Ein Typ muss allerdings immer gesetzt werden! Der Name des Typs lässt auf den Sound im Spiel schließen, auch dafür bietet sich Experimentieren an.

Auf der Beispielkarte setzen wir einige Sounds für Wald, Berge und den Fluss.
Hinweis: Einige der Umgebungssounds sind deutlich lauter als andere, wie z.B. WindMountain. Für diese Sounds solltest du die Lautstärke (Volume in den Entitätseigenschaften) herabsetzen, um dem Spieler nicht zu nerven. Für den Wind haben wir die Lautstärke 30 gewählt. Welche Lautstärken für andere Sounds gut passen, solltest du beim Spielen ausprobieren.

Tipp: Beispielsweise bei Flüssen passiert es oft, dass Ambient Sounds unter dem Terrain verschwinden. Wenn du unter AnsichtTerrain das Terrain ausblendest, werden sie wieder sichtbar.


Cleanup

Zum Schluss solltest du erneut überprüfen, ob die gesamte Karte korrekt funktioniert. Sind alle Rohstoffe und Gegner, die zu Beginn zugängig sein sollen, auch wirklich zugängig? Sind keine Ressourcenschächte oder -Haufen durch Terrain oder Felsen blockiert? Sind alle Bäume innerhalb der Kartengrenzen? Fallen noch Fehler aus den vorigen Schritten auf? Vor dem Testen der Karte sollten möglichst viele dieser Fehler auffallen, um unnötige Testiterationen zu vermeiden.


Die Gestaltung der Beispielkarte ist komplett. Im nächsten Abschnitt führen wir die wichtigsten Aspekte der Lua-Programmierung ein, um in den folgenden Abschnitten einen Kartenablauf gemäß unseres Plans zu skripten.

Voriges Kapitel: Texturen setzen
Zurück nach oben
Zurück zur Übersicht

scripting/tutorials/level1/place_entities.txt · Zuletzt geändert: 2023/09/18 12:10 von fritz_98