Toolset-Quickstart

Grundlagen des Gesprächseditors

Startet den Gesprächseditor aus dem Werkzeuge-Menü (STRG-ALT-V) und lasst uns eine

Bildschirmfoto
Bildschirmfoto

Unterhaltung mit Peridian entwerfen.
Keine Angst, es ist weitaus einfacher, als es auf den ersten Blick aussieht. Drückt den "Hinzufügen" Knopf links oben und gebt den Empfangsdialog für den NSC ein. Um Dialoge auf direkt auf den Spieler zuzuschneiden gibt es sogenannte Tokens. Hierbei handelt es sich um bestimmte Ausdrücke in spitzen Klammern wie z.B. (vollständiger Name). Ihr könnt sie statt dem Namen oder einer Anrede einsetzen. Das Spiel ersetzt sie dann automatisch gegen den richtigen Namen oder die entsprechende Anredefloskel. Eine Auflistung dieser Tokens erhaltet ihr, wenn ihr in dem Texteingabefenster den rechten Mousebutton drückt und "Token einfügen" auswählt.
Wenn die Gesprächspassage des Charakter fertig ist, müsst ihr die neu erstellte Zeile auswählen und wiederum den "Hinzufügen" Knopf drücken, um die Antwort des Spielers einzugeben. Fügt mit dem gleichen Knopf in der neuen Zeile einen weiteren Satz ein, wenn Peridian darauf wiederum etwas antworten soll. Wenn ihr eine zweite Antwort auf einen Satz geben wollt, so klickt den vorherigen einfach noch mal an und drückt abermals "Hinzufügen".

Bildschirmfoto

An einigen Stellen des Gesprächs kann es von Vorteil sein, Dialoge wiederholen zu lassen. Hierzu gibt es ebenfalls eine sehr einfache Lösung: Wählt den zu wiederholenden Dialog aus, drückt den "Kopieren" Knopf am linken Bildschirmrand, selektiert die Stelle, an der der alte Satz erscheinen soll, drückt die rechte Maustaste und wählt "Als Verknüpfung einfügen". Wie ihr sehen könnt, erscheint der alte Satz grau unterlegt an der Stelle. Der Dialogeditor wird dementsprechend den Dialog auf diesen Satz zurückführen. Falls ihr das Prinzip nicht verstanden haben solltet, schaut euch die Dialoge der offiziellen Kampagne an.

Skriptgesteuerte Dialogstränge

Bildschirmfoto

Wow! Das hört sich komplex an! Der Entwurf von "skriptgesteuerten Dialogsträngen" ist aber nicht halb so kompliziert wie es sich anhören mag, denn für dieses Unterfangen hat BioWare den Skript-Assistenten eingebaut. Doch bevor ich auf die Skripte eingehe, solltet ihr zunächst zwei Dialogstränge erschaffen, auf die wir die Skripte anwenden können. Erstellt zur Übung die folgenden Dialoge:

1. Einen Empfangsdialog

In dem der Waldläufer dem Spieler die derzeitige Situation erläutert und im sagt, er solle das Gebiet im Norden erkunden.

2. Einen normalen Dialog

Den der Spieler zu Gesicht bekommt, sobald er einmal mit Peridian geredet hat. Also so eine Art Smalltalk

Bildschirmfoto

Beim aktuellen Stand würde der Spieler alle beiden Dialoge zur Auswahl bekommen, sobald er den Waldläufer anspricht. Dieses unterbinden wir durch die Scriptsprache. In der rechtsunteren Ecke des Gesprächseditors könnt ihr im Reiter "Text erscheint wenn..." eine solche Startbedingung festlegen. Über das Pulldown-Menü könnt ihr bereits fertige Skripte auswählen

Bildschirmfoto

und über bearbeiten ein neues erstellen, wenn ihr euch in NWScript bereits fit fühlt.
Für diese Startbedingung sollten wir jedoch auf den Skript-Assistenten zurückgreifen. Wählt den ersten (Empfangs) Dialog aus und drückt dann auf den Zauberhut neben dem Bearbeitenknopf.
"Welche Bedingung wollen Sie Prüfen" ist die erste Frage des Skriptassistenen. Hakt in diesem Fall "lokale Variable" ab und drückt auf weiter. Wählt in dem neuen Fenster eine Integer Variable (Int.) und gebt einen plausiblen Namen dafür ein. In dem folgenden Beispiel habe ich sie Peridian_Talktimes genannt. Die zweite Zeile definiert die Bedingung. Lasst sie auf "Ist gleich" stehen, fügt in der dritten Zeile eine 0 ein und drückt den "hinzufügen" Knopf. Nach einem Druck auf den Weiter Knopf braucht ihr nur noch einen Namen für ihr Skript angeben und anschließend erscheint euer erstes selbsterstelltes Skript in dem Fenster rechtsunten!
Der Skripteditor erzeugt eine Menge erklärenden Text, um den eigentlichen Quellcode. Aber im Grunde steht im Herzen nun genau das was ihr soeben angeklickt habt:

return GetLocalInt(GetPCSpeaker(),"Peridian_Talktimes") == 0;

Bildschirmfoto
Bildschirmfoto

Da eine NWScript Variable immer mit 0 initialisiert wird, ist diese Startbedingung erfüllt. Der Dialog erscheint also immer dann, wenn der Spieler noch nicht mit Peridian geredet hat.
Fast das gleiche Skript, sollten ihr jetzt für den zweiten Dialogstrang definieren. Nur das ihr die Bedingung dieses mal auf 1 statt 0 setzen solltet.

Bildschirmfoto

Damit der zweite Dialog auch wirklich eines Tages erscheint, müssen wir die Variable an der richtigen Stelle erhöhen. Klappt euren ersten Dialogbaum ganz auf und begebt euch an die letzte Stelle des Dialogstrangs. Klickt dort angekommen darauf, anschließend den Reiter "Erfolgte Aktionen" an und dort wiederum auf den Assistentenknopf.
In dem Fenster "Welche Aktion soll durchgeführt werden?" ist "Lokale Variable zuweisen" die richtige Wahl. Daraufhin solltet ihr in der ersten Zeile wiederum den vorherigen Variablennamen "Peridian_Talktimes" angeben und diesen in der zweiten Zeile auf 1 setzen. Wenn ihr auf hinzufügen drückt, sollte die folgende Zeile erscheinen:

SetLocalInt(GetPCSpeaker(),"Peridian_Talktimes ",1);

Benennt das Script wiederum und fertig ist der erste Dialog mit unterschiedlichen Startbedingungen! (Wenn euer erster Dialogstrang mehrere Enden hat, müsst ihr das Skript an den anderen Enden ebenfalls einfügen.) Speichert eure Arbeit und testet das Ergebnis im Spiel.

lokale Variablen und Tokens

Egal was ihr im Spiel speichern wollt, ihr braucht dafür entweder eine Variable oder einen Token (englisch: Zeichen). Lasst uns den Waldläufer Peridian Raes betrachten, mit dem diese Mini-Kampagne beginnt. Beim ersten Gespräch macht er den Spieler auf die Vorkommnisse im Norden aufmerksam. Sobald der Spieler sich einmal mit ihm unterhalten hat, wolltet ihr nicht mehr, dass er ihm beim nächsten Gespräch wieder das Gleiche erzählt. Daher habt ihr diesen Zustand in einer lokalen Variable über die Funktion SetLocalInt() gespeichert.
Die offizielle Kampagne macht dieses meist mit OBJECT_SELF, d.h. die Variable wird auf dem Charakter, mit dem der Spieler spricht (z.B. Aribeth oder Aarin Gend), gespeichert. Der Skriptassistent wendet in diesem Fall jedoch immer GetPCSpeaker() an, wodurch die Variable auf dem Spielercharakter gespeichert wird. Der Unterschied besteht darin, was ihr mit der Änderung vorhabt. Speichern ihr die Variable auf dem Waldläufer Peridian, so würde er den nächsten Spieler nicht mehr um Hilfe bitten, weil er bereits einen für die Erfüllung seiner Quest gefunden hat. Speichern ihr die Variable hingegen auf dem Spieler, so spricht er jeden weiteren Spieler wieder an.
Die alternative Möglichkeit zur Verwendung von Variablen sind sogenannte Token-Gegenstände. Also Gegenstände die ein bestimmtes Ereignis repräsentieren. Zurück in der offiziellen Kampagne hat BioWare für die Erfüllung der Zutatenquests 4 Token-Gegenstände verwendet. Die Hahnenfeder, das Intellektfressergehirn, das Nymphenhaar und das Yan-Ti Herz ersetzen die Variablen und zeigen Aribeth das die entsprechenden Tiere getötet wurden und die Quest somit erfüllt ist. Diese Möglichkeit hat zahlreiche Vorteile:

  • Die Variable kann, versehentlich überschrieben oder gelöscht werden. Der Spieler kann den Gegenstand maximal ablegen, wobei er dann selbst für den Verlust verantwortlich ist.
  • Das Spiel muss ein Skript weniger verarbeiten
  • Der Gegenstand dient als Erinnerung für den Spieler. Er weiß, dass er in der Richtung noch etwas zu erledigen hat.
  • Der Gegenstand kann an einen anderen Spieler übergeben werden, sodass der Spielfortschritt nicht verloren geht, sofern der ausführende Spieler ausscheidet.

Mehr Abfragen

Bildschirmfoto
Bildschirmfoto

Für die Fortführung unserer Geschichte benötigen wir noch eine weitere Abfrage, deren Variable dieses mal nicht in dem Gespräch erzeugt werden soll. Vielmehr soll eine weitere Dialogmöglichkeit auftauchen, sobald der Spieler das erste mal auf die Dunkelelfen trifft.
Erstellt zunächst einen weiteren Dialogstrang innerhalb des zweiten Gesprächsbaumes, sodass der Spieler die Antwortmöglichkeit hat, Peridian Raes davon zu informieren, dass er auf die Drow gestoßen ist.
Definiert für diesen mit dem Skriptassistenten die Startbedingung Darkelf_Encounter = 1. Das Ergebnis müsste also ungefähr so aussehen:

return GetLocalInt(GetPCSpeaker(),"Darkelf_Encounter") == 1

Diese Variable setzen wir nun in der Tat in dem Augenblick auf eins, wenn der Spieler den ersten Drow gesehen hat. Das schaffen wir, indem wir das OnEnter Ereignis der Begegnung ausnutzen. Klappt die Begegnungenliste eures derzeitigen Gebietes (auf der linken Seite des Werkzeugsets) auf, wählt die Dunkelelfenbegegnung aus und drückt den rechten Mousebutton, um ins Eigenschaftenmenü zu gelangen. Wechselt zum Skripte Reiter und drückt dort auf den Bearb. Button hinter dem OnEnter Ereignis. Ihr seid nun (zum ersten mal) im eigentlichen Skripteditor. Schreibt hier die folgenden Zeilen rein und speichert das Skript anschließend unter einem plausiblen Namen ab:

void main()
{
object oPC = GetEnteringObject();

if (GetIsPC(oPC))
{
SetLocalInt(oPC,"Darkelf_Encounter",1);
}
}

Zur Erklärung: Das Skript erfasst zunächst das Objekt, welches die Begegnung betritt und definiert es als oPC. Anschließend überprüft es ob es sich bei dem Objekt um einen Spielercharakter (PC) handelt. Trifft dieses zu, so speichert es die Variable Darkelf_Encouter mit dem Wert 1 auf ihm ab.
Somit ist auch dieser Schritt erledigt. Ihr könnt eure Arbeit nun speichern und im Spiel testen.

Gesprächsanimationen

Bildschirmfoto

Der letzte Clou ergibt sich durch die entsprechenden Animationen. Unter "Andere Aktionen" könnt ihr u.a. jedem einzelnen Satz eine entsprechende Animation zuweisen. Wählt z.B. euren Begrüßungssatz aus, nehmt aus der Animationspalette ebenfalls die Begrüßung und deaktiviert das "Schleife" Kästchen, damit die Animation nur einmal abgespielt wird. Für den nächsten Satz könnt ihr "Gespräch, normal" und die Schleife auswählen und der Job ist erledigt.

Erstellt von Pandur | am 18.07.2007