Scripting Engine – Teil 1

Bisher habe ich immer wenn ich etwas Neues für die starLiGHT.Engine entwickelt habe geplant und aufgeschrieben, wie das jeweilige Feature aussehen soll, habe es dann entwickelt und später eine Dokumentation geschrieben. Dies möchte ich diesmal etwas anders handhaben und gleichzeitig das erste Tutorial für die starLiGHT.Engine schreiben.

Aber erstmal zum Thema: Es geht um Scripting.

Hmmm, Scripting. Was ist denn das, wird sich jetzt vielleicht der ein oder andere fragen. Das ist relativ einfach zu erklären, aber trotzdem nicht unbedingt einfach zu verstehen.

Scripting ist das Fernsteuern von Systemen.

Fernsteuern von System? Ne, brauch ich nicht. Wofür soll das denn gut sein?

In der Spieleentwicklung wird Scripting häufig eingesetzt und ist eine ausgezeichnete Möglichkeit um die Engine bzw. das Grundprogramm von der Logik zu trennen. Dies hat eine Reihe von Vorteilen, wie wir in diesem ersten Tutorial zum Thema nun erfahren werden.

Sobald das Scripting-System fertiggestellt ist, kann der Level-Designer das Spiel mittels eines Scripts beeinflussen. Lassen wir uns das nochmal auf der Zunge zergehen:

Der Level-Designer kann das Spiel mit einem Script beeinflussen.

Wow, das ist schon was, aber immer noch keine Ahnung, wofür man das benötigt? Das ist relativ einfach, eine ganze Menge von Vorteilen ergeben sich daraus.

Erstmal muss der Level-Designer kein Programmierer sein. Er muss nur eine Reihe von einfachen Befehlen kennen (nämlich die Befehle, die in unserer Script-Sprache definiert sind) und kann damit tolle Dinge erledigen und die Spielwelt und deren Bewohner beeinflussen.

Ein weiterer, großer Vorteil ist, daß der Scripter (so nennen wir ab jetzt denjenigen, der Scripts schreibt) nicht den Quellcode des Spieles benötigt und diesen auch nicht bei jeder Änderung neu kompilieren muss. Dies spart Zeit und Nerven. Der Arbeitsfluss ist viel einfacher und vor allem schneller.

Durch die Abstraktion wird aber auch durchaus einiges einfacher: Die Bewegung eines NPC (=Non Player Character =Computergesteuerte Spielfigur) erfolgt zum Beispiel mit Befehlen wie: Goto(haus). Um den Rest kümmert sich die Script-Engine.

Einige Dinge kann man nun auch einfach ausprobieren und im Falle der starLiGHT.Engine kann man die Scripte sogar zur Laufzeit des Spiels verändern und so die Auswirkungen sofort kontrollieren.

Wir werden so jedenfalls in die Lage versetzt uns in der Spielwelt zu bewegen und gleichzeitig neue Verhaltensweisen zu implementieren. Wenn wir uns z.B. eine Spielfigur vorstellen, die durch den Wald läuft wie in einem klassischen Rollenspiel und auf ein Reh trifft können wir ein kleines Script für das Reh schreiben, daß dieses dazu bewegt zu flüchten, sobald der Spieler in seine Nähe kommt. Im Script sind dies vielleicht zwei Zeilen Code, für das Spiel haben wir aber in dem Moment eine tolle Dynamik entwickelt, die dem Spieler sicherlich positiv auffallen wird.

Scripting hat allerdings auch Nachteile, die ich hier nicht verschweigen möchte.

Da durch das Scripting eine zusätzliche Abstraktionsebene eingezogen wird, ist die Entwicklung etwas komplizierter und aufwendiger. Die Befehle die durch Scripte aufgerufen werden müssen, wollen gut durchdacht und geplant sein. Aktionen, die der Scripter ausführen kann und sollte müssen bedacht werden. Fehler, die nicht zur Kompilierzeit auftreten müssen abgefangen werden. Dieser Punkt hört sich im ersten Moment viel schlimmer an, als er in Wirklichkeit ist, da Planung in der Spieleentwicklung sowieso die halbe Miete ist.

Ein weiterer Punkt ist die Tatsache, daß durch Scripting ein Overhead entsteht. Es wird zusätzliche Rechenzeit benötigt. Die starLiGHT.Engine versucht dies möglichst gering zu halten und so viel wie möglich zu optimieren, trotzdem ist ein Script immer langsamer, als nativer Code.

Der Standard für die Entwicklung von Scripten in der Games-Branche ist LUA. Dies werden wir hier nicht einsetzen, sondern wir werden C# für das Scripting einsetzen. Warum? Ganz einfach. Die starLiGHT.Engine ist in erster Linie für die XBox und das Windows Phone entwickelt worden. Dort läuft das .NET-CompactFramework und es gibt begrenzte Ressourcen, sowohl in Sachen Rechenzeit, als auch Arbeitsspeicher. Beides ist problematisch, wenn eine interpretierte Sprache oder eine neue Virtual-Machine gestartet werden muss um Code auszuführen.

Die starLiGHT.Engine geht einen etwas anderen Weg. Während der Entwicklung auf dem PC wird jede Änderung an einem Script automatisch erkannt und übernommen. So haben wir die Vorteile, daß wir während der Laufzeit des Spiels Scripte ändern können.

Sobald das Spiel jedoch für die XBox oder das Windows Phone kompiliert wird, so wird das Skript ebenfalls kompiliert und in das Spiel integriert. Dadurch wird die höchstmögliche Geschwindigkeit erzielt und Ressourcen werden gespart.

Um die Script-Engine möglichst nahtlos in ein mit XNA und der starLiGHT.Engine entwickeltes Spiel zu integrieren, verwendet die Script-Engine selbstverständlich die Content-Pipeline, was eine Reihe von Vorteilen bedeutet.

Wie geht es nun weiter?

Nachdem wir nun wichtiges Grundlagenwissen geschaffen haben und nun wissen, was eine Script-Engine ist und welche Vor- und Nachteile es gibt, werde ich in den folgenden Teilen dieses Tutorials aufzeigen, wie die starLiGHT.Engine dem Entwickler hilft ein solches System zu etablieren.

Ich werde während ich den Scripting-Part der starLiGHT.Engine entwickele dieses Tutorial weiterführen und beides parallel entwicklen.

Was wird denn hier in den nächsten Teilen gezeigt?

Wir werden folgendes entwickeln und scripten:

– Eine Welt in der Draufsicht (klassische Tile-Engine, Top/Down)
– Eine Spielerfigur, die durch diese Welt laufen kann
– betretbare Häuser inkl. Map-Wechsel
– NPC die sich selbständig auf der Karte bewegen
– NPC mit denen der Spieler sprechen kann
– NPC, die auf den Spieler reagieren

Am Ende dieses Tutorials wird eine neue Sandbox existieren, die demonstriert, wie das Scripting in der starLiGHT.Engine funktioniert.

Advertisements

Veröffentlicht am 15.10.2010, in Mini-Tutorial, XNA. Setze ein Lesezeichen auf den Permalink. 11 Kommentare.

  1. *Interesse an einer Fortsetzung bekund*

  2. „und starte direkt damit“ bedeutet hoffentlich, dass der nächste Teil schon diese Woche folgt 🙂

    • Hehe… Wenn jetzt noch 8 Personen folgen, die ihr Interesse bekunden, oder 4 Pingbacks auf diesen Artikel gesetzt werden, dann lege ich sofort damit los.

      Ich vermute mal, daß ich ca. eine Woche dafür benötige… Es wird also knapp mit dieser Woche 😉

  3. Hi Glatzemann,

    wieder mal eine nette Einführung. Ich würde mich auch über eine Fortsetzung freuen.
    Was mich noch interessieren würde wäre, wie ich so eine ScriptEngine selber schreibe und wie sie Aufgebaut ist. Hast du dazu noch Referenzen?

    • Danke schön, bist als Interessent registriert 😉

      Nein, ich habe leider keine Referenzen oder Anleitungen, wie man selbst eine Scripting-Engine entwickelt. Dies ist aber, wenn man einen der beiden notwendigen Teile nicht betrachtet auch nicht weiter schwierig. Ich betrachte jetzt einfach mal nicht den „Sprachenteil“, also Parser und Interpreter/Compiler.

      Der verbleibende Teil ist dann ja eigentlich nur noch eine Sammlung von Befehlen, die dann von einer Sprache (in diesem Fall C#) aufgerufen werden. Also nach dem Motto: „Drehe rechts“ etc.

      • OK, danke. Ich wollte mich schon länger mal damit auseinander setzen, bin aber nie dazu gekommen. Ich werde mir deine kommenden Artikel zum scripting durchlesen und dann mit einer ScriptEngine anfangen.

  4. Bin auch interessiert – sehr sogar, da ich grad im Bereich Scripting keinen Plan habe 😉

    Danke 🙂

  5. Find ich super Glatze. Mach weiter.

    lg michi

  1. Pingback: Scripting Engine – Teil 2 « "Mit ohne Haare"

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: