Hilfe:Tutorials/Dialog

Aus RPG-Dev-GOM
Wechseln zu: Navigation, Suche
Gomwebsitelogo tutorial.png
Dieses Tutorial soll zeigen, wie man einen Dialog auf einer Npc-Seite oder Dialog-Seite schreibt.

Inhaltsverzeichnis


Dialoge können grundsätzlich nur zwischen dem SC (Spiele-Charakter -- engl. Player Character, PC) und endlich vielen, aber mindestens einem NSC (Nicht-Spieler-Charakter -- engl. Non-Player-Caracter, NPC) stattfinden. Die Dialoge finden also, abstrakt gesprochen, zwischen unserem Helden PC und den Dialogpartnern 1, 2 usw. statt.

Hier ein kleines, fiktives Gespräch in einer selbsterklärenden Pseudo-Syntax als Beispiel:

Dialog
Hans spricht den hereinkommenden Helden an:
Hans: Hallo, was kann ich für Sie tun?
PC: Ich hätte gern ein Brot.
Hans: Ich habe da ein ganz Spezielles. Möchten Sie es kaufen?
+ PC: Ist den auch frisch?
  Hans: Ich habe es heute morgen erst gebacken.
+ PC: Ja, ich möchte es kaufen
  Hans: Das macht 5 Goldmünzen.
+- PC: Hier.
   Held gibt 5 Gold an Hans
   Hans: Danke. Hier Ihr Brot.
   Hans gibt Held spezielles Brot. 
   Ende des Dialogs
+- PC: Hmm, doch nicht. Es ist zu teuer.
   Hans: Schade. Beehren Sie uns doch bald wieder.
   Ende des Dialogs
+ PC: Nein, danke.
  Hans: Schade. Beehren Sie uns doch bald wieder.
  Ende des Dialogs

Das Beispiel mag simpel sein, enthält jedoch viele wichtige Beispiele, die im Folgenden in der RPG-Dev-Wiki Syntax für Dialoge erklärt werden.

Dialog definieren

Dialoge werden in diesem Wiki in <dialog>-Tags gefasst. Wie in HTML kann man diesem Tag noch Attribute übergeben. Wir übergeben als Attribute die NPC-Seiten aller Sprecher, außer dem Helden. Dabei schreiben wir den ersten Sprecher in das Attribut npc1, den zweiten in das Attribut npc2 und so weiter. Wenn wir das gemacht haben, können wir innerhalb des Dialog-Tags die Sprecher mit 1:, 2: usw. identifizieren. Der Held wird stets mit PC: als Sprecher identifiziert.

<dialog npc1="Person">
1: Hallo!
PC: Hallo <Name::1>, wie gehts?
1: Kann mich nicht beschweren.
</dialog>
  • Person: Hallo!
  • Spieler: Hallo <Name von Person>, wie gehts?
  • Person: Kann mich nicht beschweren.

Anstelle die Abfragesyntax <?Name::R:Bäcker> zu verwenden sollte innerhalb von Dialogen die Syntax <Name::1> verwendet werden um z.B. den Namen von dem in npc1 definierten NPC auszugeben.

Dialoge auf Quest-Seiten

Wenn wir einen Dialog auf einer Quest-Seite schreiben, kann(können) der(die) Dialogpartner entweder durch NPC-Seiten angegeben werden, oder durch Quest-Rollen. Dazu mehr im Tutorial Hilfe:Tutorials/Quest. Wir übergeben hier die Rolle unseres Bäckers (übernommen aus dem Quest-Tutorial R:Bäcker) an das Attribut npc1. Weitere Rollen oder NPC-Seitennamen könnten wir an die Attribute npc2, npc3 usw. übergeben. An der Dialog-Syntax selbst ändert sich nichts, alles bleibt beim Alten:

<dialog npc1="R:Bäcker">
1: Hallo!
PC: Hallo <Name::1>, wie gehts?
1: Kann mich nicht beschweren.
</dialog>
  • R:Bäcker: Hallo!
  • Spieler: Hallo <Name von Ref R:Bäcker>, wie gehts?
  • R:Bäcker: Kann mich nicht beschweren.

Dialoge auf NPC-Seiten

Wenn wir einen Dialog auf einer NPC-Seite schreiben, möchten wir das ja meist für NPC auf der entsprechenden Seite tun. Der Dialog soll also normalerweise zwischen Held und NPC stattfinden. Hier gibt es eine Vereinfachung gegenüber der Standart-Syntax. Für den Helden als Sprecher verwenden wir, wie sonst auch, PC:. Für den NPC verwenden wir hier kurz NPC:, allerdings ohne dass wir ihn an das Dialog-Tag als Attribut übergeben müssen.

<dialog>
NPC: Hallo!
PC: Hallo <?Name>, wie gehts?
NPC: Kann mich nicht beschweren.
</dialog>
  • Hilfe:Tutorials/Dialog: Hallo!
  • Spieler: Hallo <Name>, wie gehts?
  • Hilfe:Tutorials/Dialog: Kann mich nicht beschweren.

Natürlich bleibt es auch weiterhin möglich einen Sprecher über das npc1-Attribut zu übergeben.

Dialog-Gliederung

Um klar zu definieren wie ein Dialog vom Spieler navigiert werden kann ist eine logische Gliederung unabdingbar. Zum einem ist es möglich Dialogoptionen zu definieren, zum anderen können diese zusätzlich ineinander verschachtelt werden.

Dialogoptionen

Im Spiel will man auf einen Schriftzug mit der ersten Dialogzeile klicken, also praktisch die direkte Erwiderung auswählen. Anschließend folgt ein Dialog, der automatisch abläuft. Solche Optionen markiert man mit einem +. Da der Bäcker den Spieler anspricht ist auch diese Zeile eine Dialogoption, jedoch eine wichtige (engl. important) Dialogoption gekennzeichnet durch ein ! am Zeilenanfang.

<dialog npc1="R:Bäcker">
!1: Hallo, was kann ich für Sie tun?
+PC: Ich möchte etwas kaufen.
 1: Fein!
+PC: Ich schaue mich nur mal hier um.
 1: Nur zu.
</dialog>
  • R:Bäcker: Hallo, was kann ich für Sie tun?
  • Spieler: Ich möchte etwas kaufen.
    • R:Bäcker: Fein!
  • Spieler: Ich schaue mich nur mal hier um.
    • R:Bäcker: Nur zu.

Dialogebenen

Manchmal macht es Sinn, dass bestimmte Dialogoptionen innerhalb von Dialogblöcken aufgerufen werden. Dabei werden alle anderen Optionen ausgeblendet und nur die Suboptionen angezeigt. So erhalten wir eine Art Baumstruktur. Im Wiki macht man das, indem man alle untergeordneten Dialogzeile mit einem - am Zeilenanfang nach dem + (bei Dialogoptionen) versieht. Das Ganze sieht dann so aus:

<dialog npc1="R:Bäcker">
!1: Hallo, was kann ich für Sie tun?
 PC: Ich hätte gern ein Brot.
 1: Ich habe da ein ganz Spezielles. Möchten Sie es kaufen?
+PC: Ist den auch frisch?
 1: Ich habe es heute morgen erst gebacken.
+PC: Ja, ich möchte es kaufen
 1: Das macht 5 Goldmünzen.
+-PC: Hier.
 -1: Danke. Hier Ihr Brot.
+-PC: Hmm, doch nicht. Es ist zu teuer.
 -1: Schade. Beehren Sie uns doch bald wieder.
+PC: Nein, danke.
 1: Schade. Beehren Sie uns doch bald wieder.
</dialog>
  • R:Bäcker: Hallo, was kann ich für Sie tun?
    • Spieler: Ich hätte gern ein Brot.
    • R:Bäcker: Ich habe da ein ganz Spezielles. Möchten Sie es kaufen?
  • Spieler: Ist den auch frisch?
    • R:Bäcker: Ich habe es heute morgen erst gebacken.
  • Spieler: Ja, ich möchte es kaufen
    • R:Bäcker: Das macht 5 Goldmünzen.
    • Spieler: Hier.
      • R:Bäcker: Danke. Hier Ihr Brot.
    • Spieler: Hmm, doch nicht. Es ist zu teuer.
      • R:Bäcker: Schade. Beehren Sie uns doch bald wieder.
  • Spieler: Nein, danke.
    • R:Bäcker: Schade. Beehren Sie uns doch bald wieder.

Zu beachten gilt, dass alles was vor der ersten Dialogoption, die durch den Spieler ausgelöst wird alle Dialogzeilen zu einer Art Intro gehören, das automatisch stattfindet wenn der Spieler den NPC anspricht oder wie in diesem Fall angesprochen wird. Es ist also nicht notwendig alle Dialogoptionen bis auf die Erste mit ! gekennzeichnete Option des Bäckers mit - eine Ebene tiefer zu setzen.

Kommentare

Um zusätzliche Informationen zu einer Dialogzeile zu geben, z.B. für die Programmierer, ist es möglichen Kommentarzeilen zu definieren. Kommentare werden mit einem > am Zeilenanfang eingeleitet. Ein Kommentar bezieht sich immer auf die nachfolgende Dialogzeile, außer es folgt nach dem Kommentar eine leere Zeile oder keine weitere Zeile, dann bezieht sich der Kommentar auf die vorhergehende Dialogzeile.

<dialog npc1="R:Bäcker">
> Hans spricht den hereinkommenden Helden an:
!1: Hallo, was kann ich für Sie tun?
 PC: Ich hätte gern ein Brot.
 1: Ich habe da ein ganz Spezielles. Möchten Sie es kaufen?
+PC: Ist den auch frisch?
 1: Ich habe es heute morgen erst gebacken.
+PC: Ja, ich möchte es kaufen
 1: Das macht 5 Goldmünzen.
+-PC: Hier.
 > Held gibt 5 Gold an Hans
 -1: Danke. Hier Ihr Brot.
 >Hans gibt Held spezielles Brot. 
 >Ende des Dialogs

+-PC: Hmm, doch nicht. Es ist zu teuer.
 -1: Schade. Beehren Sie uns doch bald wieder.
 > Ende des Dialogs

 > Spieler lehnt ab:
+PC: Nein, danke.
 1: Schade. Beehren Sie uns doch bald wieder.
 > Ende des Dialogs
</dialog>
    • Hans spricht den hereinkommenden Helden an:
    R:Bäcker: Hallo, was kann ich für Sie tun?
    • Spieler: Ich hätte gern ein Brot.
    • R:Bäcker: Ich habe da ein ganz Spezielles. Möchten Sie es kaufen?
  • Spieler: Ist den auch frisch?
    • R:Bäcker: Ich habe es heute morgen erst gebacken.
  • Spieler: Ja, ich möchte es kaufen
    • R:Bäcker: Das macht 5 Goldmünzen.
    • Spieler: Hier.
      • Held gibt 5 Gold an Hans
      • R:Bäcker: Danke. Hier Ihr Brot.
      • Hans gibt Held spezielles Brot.
      • Ende des Dialogs
    • Spieler: Hmm, doch nicht. Es ist zu teuer.
      • R:Bäcker: Schade. Beehren Sie uns doch bald wieder.
      • Ende des Dialogs
    • Spieler lehnt ab:
    Spieler: Nein, danke.
    • R:Bäcker: Schade. Beehren Sie uns doch bald wieder.
    • Ende des Dialogs

@ Blöcke und das Ende des Dialogs

Wie beschreibt man, dass ein Dialog vorbei ist? Im Beispiel haben wir dafür dreimal "Ende des Dialoges" geschrieben, was natürlich auf Dauer unschön ist. Hierfür gibt es ein Tag: [ENDE] Es wird speziell hinterlegt und so erkennt man sofort dass der Dialog nun in einen anderen Bereich springt, in dem Fall halt das Ende des Dialogs. Mann kann auch [ZURÜCK] schreiben um eine Dialogebene herauf zu gehen, äquivalent [2x ZURÜCK] für zwei Ebenen usw. Man kann auch eigene Blöcke festlegen, zu denen man dann springen kann. Dazu verweise ich hier auf die Dokumentation zu @-Definitionen auf der Vorlagenseite.

<dialog npc1="R:Bäcker">
> Hans spricht den hereinkommenden Helden an:
!1: Hallo, was kann ich für Sie tun?
 PC: Ich hätte gern ein Brot.
 1: Ich habe da ein ganz Spezielles. Möchten Sie es kaufen?
+PC: Ist es denn auch frisch?
 1: Ich habe es heute morgen erst gebacken.
+PC: Ja, ich möchte es kaufen
 1: Das macht 5 Goldmünzen.
+-PC: Hier.
 > Held gibt 5 Gold an Hans
 -1: Danke. Hier Ihr Brot. [ENDE]
 > Hans gibt Held spezielles Brot. 
+-PC: Hmm, doch nicht. Es ist zu teuer.
 -1: Schade. [ENDE]
+-PC: Nein, danke.
 1: Schade. [ENDE]

@ENDE:
1: Beehren Sie uns doch bald wieder.
</dialog>
    • Hans spricht den hereinkommenden Helden an:
    R:Bäcker: Hallo, was kann ich für Sie tun?
    • Spieler: Ich hätte gern ein Brot.
    • R:Bäcker: Ich habe da ein ganz Spezielles. Möchten Sie es kaufen?
  • Spieler: Ist es denn auch frisch?
    • R:Bäcker: Ich habe es heute morgen erst gebacken.
  • Spieler: Ja, ich möchte es kaufen
    • R:Bäcker: Das macht 5 Goldmünzen.
    • Spieler: Hier.
      • Held gibt 5 Gold an Hans
      • R:Bäcker: Danke. Hier Ihr Brot. ENDE
      • Hans gibt Held spezielles Brot.
      Spieler: Hmm, doch nicht. Es ist zu teuer.
      • R:Bäcker: Schade. ENDE
    • Spieler: Nein, danke.
    • R:Bäcker: Schade. ENDE
  • @ENDE
    • R:Bäcker: Beehren Sie uns doch bald wieder.

Die entsprechenden Tags dürfen übrigens nur in Dialogzeilen stehen. In Kommentaren oder Itemtransfers haben sie keine Wirkung.

Gegenstände übergeben

Sehr oft werden im Dialog Gegenstände hin und her gereicht. Dies lässt sich mit >PC> und >1> formschön bewältigen.

Dahinter könnt ihr Items schreiben. wenn ihr mehrere Items übergeben wollt können das zB sein: 50 Gold oder Brot, 50 Gold, 1 Käsekuchen. Trennt mehrere Items mit einem Komma. Wenn ihr von einer Sorte mehr als ein Item haben wollt, schreibt die Zahl einfach mit einem Leerzeichen getrennt davor.

<dialog npc1="R:Bäcker">
>Hans spricht den hereinkommenden Helden an:
!1: Hallo, was kann ich für Sie tun?
 PC: Ich hätte gern ein Brot.
 1: Ich habe da ein ganz Spezielles. Möchten Sie es kaufen?
+PC: Ist den auch frisch?
 1: Ich habe es heute morgen erst gebacken.
+PC: Ja, ich möchte es kaufen
  1: Das macht 5 Goldmünzen.
+-PC: Hier.
 >1> 5 Gold
 -1: Danke. Hier Ihr Brot. [ENDE]
 >PC> R:I:Brot 
+-PC: Hmm, doch nicht. Es ist zu teuer.
 -1: Schade. [ENDE]
+PC: Nein, danke.
 1: Schade. [ENDE]

@ENDE:
1: Beehren Sie uns doch bald wieder.
</dialog>
    • Hans spricht den hereinkommenden Helden an:
    R:Bäcker: Hallo, was kann ich für Sie tun?
    • Spieler: Ich hätte gern ein Brot.
    • R:Bäcker: Ich habe da ein ganz Spezielles. Möchten Sie es kaufen?
  • Spieler: Ist den auch frisch?
    • R:Bäcker: Ich habe es heute morgen erst gebacken.
  • Spieler: Ja, ich möchte es kaufen
    • R:Bäcker: Das macht 5 Goldmünzen.
    • Spieler: Hier.
    • Spieler: Hmm, doch nicht. Es ist zu teuer.
      • R:Bäcker: Schade. ENDE
  • Spieler: Nein, danke.
    • R:Bäcker: Schade. ENDE
  • @ENDE
    • R:Bäcker: Beehren Sie uns doch bald wieder.

In diesem Beispiel haben wir das Item 'R:I:Brot' angegeben. Dies ist eine weitere Besonderheit auf Quest-Seiten. Hier können wir wieder anstatt eine Seite anzugeben, eine Rolle des Quests angeben. Hier hat ein Item eine Rolle bekommen und wird wie gezeigt verwendet.

Abhängigkeiten

In einem Dialog sollen manche Dialogzeilen oder auch ganze Dialogoptionen von anderen Dialogzeilen oder -optionen abhängen. Eine solche Abhängigkeit wird hier auf einen gerichteten Pfeil von A B abstrahiert. Der Pfeil kann auch mehrere Start- oder Endpunkte haben. Die Punkte A, B werden ganzzahlig nummeriert, damit man mehrere Abhängigkeiten modellieren kann. Hier erweitern wir unser Beispiel etwas:

<dialog npc1="R:Bäcker">
> Hans spricht den hereinkommenden Helden an:
!1: Hallo, was kann ich für Sie tun?
 PC: Ich hätte gern ein Brot.
 1: Ich habe da ein ganz Spezielles. Möchten Sie es kaufen?
+PC: Ist den auch frisch?
 1(A1): Ich habe es heute morgen erst gebacken.
+PC: Ja, ich möchte es kaufen
  1: Das macht 5 Goldmünzen.

+-PC: Hier.
 >1> 5 Gold
 -1: Danke. Hier Ihr Brot. [ENDE]
 >PC> <?R:I:Brot>

+-PC(B1): Aber nur weil es so frisch ist.
   >1> 5 Gold
 -1: Danke. Hier Ihr Brot. [ENDE]
   >PC> <?R:I:Brot>
  
+-PC: Hmm, doch nicht. Es ist zu teuer.
 -1: Schade. [ENDE]

+PC: Nein, danke.
 1: Schade. [ENDE]

@ENDE:
1: Beehren Sie uns doch bald wieder.
</dialog>
    • Hans spricht den hereinkommenden Helden an:
    R:Bäcker: Hallo, was kann ich für Sie tun?
    • Spieler: Ich hätte gern ein Brot.
    • R:Bäcker: Ich habe da ein ganz Spezielles. Möchten Sie es kaufen?
  • Spieler: Ist den auch frisch?
    • R:Bäcker (A1): Ich habe es heute morgen erst gebacken.
  • Spieler: Ja, ich möchte es kaufen
    • R:Bäcker: Das macht 5 Goldmünzen.
    • Spieler: Hier.
    • Spieler (B1): Aber nur weil es so frisch ist.
    • Spieler: Hmm, doch nicht. Es ist zu teuer.
      • R:Bäcker: Schade. ENDE
  • Spieler: Nein, danke.
    • R:Bäcker: Schade. ENDE
  • @ENDE
    • R:Bäcker: Beehren Sie uns doch bald wieder.

Was bedeuten A1 und B1 in den Klammern? Diese sorgen dafür, dass die Dialogoption Aber nur weil es so frisch ist. nur sichtbar wird, wenn die Dialogzeile Ich habe es heute morgen erst gebacken. bereits gesprochen wurde. Also wenn der Spieler nach der Frische gefragt hat. Diese As und Bs werden in Klammer hinter den Sprecher geschrieben. Sie lassen sich auch beliebig miteinander kombinieren. zB B1 und B2 oder B4 oder B2, A1 oder nicht B1 aber B2 && B3. Es ist auch möglich diese mathematisch anders zu verknüpfen, solange das Ergebnis Sinn macht, z.B. B1 + B2 + B3 + B4 >= 2.

Browserdarstellung

Wenn ihr JavaScript an habt, fahrt mal mit der Maus über die Dialogzeilen mit den As und Bs und ihr könnt die Abhängigkeiten grafisch dargestellt betrachten. Auch das Klicken auf diese Zeilen ist möglich um die Darstellung zu fixieren (hilfreich zum scrollen).

Drückt außerdem Shift und anschließend Strg. Durch gleichzeitiges Drücken von Enter fixiert diese Ansicht auch nach dem Loslassen der Tasten, bis diese erneut gedrückt werden.

Siehe auch

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
RPG-Dev-Wiki
Story
Organistion
Werkzeuge