Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung |
scripting:tutorials:level1:place_entities [2023/09/15 08:56] – fritz_98 | scripting:tutorials:level1:place_entities [2024/05/13 13:38] (aktuell) – [Objekte selektieren] fritz_98 |
---|
| Backspace | Selektiere Entities löschen | | | 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 [[ https://www.siedler-maps.de/downloads.php?action=download&downloadid=47 |TinyScript]] und der Community-Version des Editors (FIXME Link einfügen) ist dieser Fehler behoben. | ***** 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 [[ https://www.siedler-maps.de/downloads.php?action=download&downloadid=47 |TinyScript]] und der [[ scripting:tutorials:community_tools |Community-Version des Editors]] ist dieser Fehler behoben. |
| |
====Der Selektions-Explorer==== | ====Der Selektions-Explorer==== |
| |
**Hinweis**: Alle hier behandelten Schritte der Beispielkarte können {{ scripting:tutorials:level1:place_entities:entityplacementexample.zip |hier}} einzeln heruntergeladen werden. | **Hinweis**: Alle hier behandelten Schritte der Beispielkarte können {{ scripting:tutorials:level1:place_entities:entityplacementexample.zip |hier}} einzeln heruntergeladen werden. |
FIXME letzte Version nochmal hochladen, Ambients fehlen! | |
| |
---- | ---- |
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 [[ scripting:tutorials:level1:enemy_ai |Ebene 1]] und Ebene 3 (FIXME link) gehen wir näher darauf ein. | 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 [[ scripting:tutorials:level1:enemy_ai |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. | 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. |
**Hinweis**: 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". | **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". |
| |
{{ scripting:tutorials:level1:place_entities:step8.jpg }} | {{ scripting:tutorials:level1:place_entities: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 //Helfer//->//Kartenbegrenzung//, um die Kartengrenzen einzuhalten. |
| |
| {{ scripting:tutorials:level1:place_entities: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. |
| |
| {{ scripting:tutorials:level1:place_entities: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. |
| |
| {{ scripting:tutorials:level1:place_entities: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 //Helfer//->//Ressourcenmanager// 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. |
| |
| {{ scripting:tutorials:level1:place_entities: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. |
| |
| {{ scripting:tutorials:level1:place_entities: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. |
| |
| {{ scripting:tutorials:level1:place_entities: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''. |
| |
| {{ scripting:tutorials:level1:place_entities:properties.jpg }} |
| |
| Die komplette Beispielkarte sieht damit so aus: |
| |
| {{ scripting:tutorials:level1:place_entities: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 //Ansicht//->//Terrain// 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. |
| |
| [[ scripting:tutorials:level1:terrain_textures |Voriges Kapitel: Texturen setzen]] \\ |
| [[ scripting:tutorials:level1:place_entities |Zurück nach oben]] \\ |
| [[ scripting:tutorials#grundlagen_lua-programmierung|Zurück zur Übersicht]] |