Allgemeiner Aufbau von Dialogdateien
Aus PantheonWiki
Dieser Artikel ist vermutlich veraltet. Siehe #ToDo. Außerdem weiß natürlich mal wieder keiner, inwiefern der Dialog überhaupt noch aktuell ist bzw. inwiefern ers bis zur nächsten Version bleibt. Bitte überprüfe, ob du etwas dazu weißt, korrigiere den Inhalt und entferne diesen Kasten. Verlasse dich andernfalls nicht auf die Information, sondern befrage einen Verantwortlichen (und bitte ihn, den Artikel zu aktualisieren).
Allgemeines
.dialog ist ein .xml-Format. Innerhalb der Paragraphen-Tags dürfen keine Kommentare stehen!
Context
In einem Dialog können die Gesprächspartner 2 verschiedene Rollen haben: Die des Fragenden und die des Antwortenden. (In der Regel ist die Spielfigur der Fragende.) Je nach Rolle können die Dialog-Definitionen eine leicht andere Bedeutung haben. Um in den Dialogen zwischen diesen Rollen zu unterscheiden, wurde der Context eingeführt, wobei die folgenden Unterscheidungen gemacht werden:
- response - Entspricht der Rolle des Antwortenden. Alle Definitionen innerhalb eines solchen Contexts werden als eine Antwort angesehen.
- option - Die Rolle des Fragenden, der mehrere Möglichkeiten der Fragestellung hat. Die Definitionen werden daher als unterschiedliche Optionen interpretiert.
- selection - Zusätzliche Funktionalität für die Rolle des Fragenden. Da die Qualität der Frage in RL auch von den Eigenschaften und Talenten der Charaktere abhängen soll, muss es möglich sein, die Optionen des Fragenden nach diesen Kriterien zu variieren. Diese Funktionalität liefert der selection-context. Da dieser Context eine Variation einer Option darstellt, kann dieser Context nur innerhalb des Option-Contextes verwendet werden.
Eine vollständige Dialogpunkt-Definition könnte so aussehen: Beispiel
Mögliche Definitionen
Variablen
<dialogvariable name="name"/>
Die Abfrage einer Dialogvariablen.
<queststate quest="quest" property="property"/>
Abfrage eines Questzustandes
<attributecheck attribute="AT" target="target" [modifier="mod"]/>
Durchführen einer Attributprobe
<talentcheck attribute="Tal" target="target" [modifier="mod"]/>
Durchführen einer Talentprobe
<random maximum="maximum"/>
Würfeln einer Zahl (0 <= Zahl < maximum)
<variable name="name" type="type" data="data"/>
<setvariable name="name" value="data"/>
Responses
Response heißen die einzelnen Punkte des Dialoggraphen. Hier werden dem Spieler Auswahlmöglichkeiten geboten (Options), Proben abgelegt oder einfach ein festes Textprogramm abgespielt.
<response id="n"></response>
<switchresponse id="n"></switchresponse>
Innerhalb einer switchresponse kann, etwa über Variablen, zwischen mehreren Response-Möglichkeiten entschieden werden. Ein Zweig wird mit <case></case> umschlossen. Mögliche Bedingungen sind
- <equals value="value"/>
- <greater value="value"/>
- <greatereq value="value"/>
- <lower value="value"/>
- <lowereq value="value"/>
- <inrange from="from" to="to"/>
Die erste zutreffende Bedingung erhält den Zuschlag.
<start></start>
Umschließt die erste Response - eben den Startpunkt des Dialogs.
<gotoresponse id="n" />
Schickt den Dialog von diesem Punkt zur Response n.
<exit/>
An dieser Stelle endet der Dialog.
Options
Options sind dem Spieler gegebene Auswahlmöglichkeiten innerhalb einer Response.
<option id="n" label="name" autoSelect="boolean"></option>
Label bezeichnet den in der Auswahlbox angezeigten Text im Gegensatz zu dem daraufhin abgespielten innerhalb der Paragraphen. ("NSC bedrohen" im Gegensatz zu "Sprecht endlich, oder Ihr werdet mich kennenlernen!") autoSelect muss auf true gesetzt sein, wenn die Option ohne weitere Spielereingriff gewählt werden soll - etwa, weil nur eine Option zur Verfügung steht.
<switchoption id="n"></n>
Innerhalb einer switchoption kann, analog zur Switchresponse zwischen mehreren Möglichkeiten entschieden werden.
OptionRef
? Testen ob das funktioniert
Translations
<t language="xy"></t>
Ermöglicht, innerhalb einer Option (oder Response) unterschiedliche Texte anzugeben, die alternativ dargestellt werden - für unterschiedliche Sprachen, zwischen denen in der conf gewählt werden kann.
Paragraphen
<p></p>
Eine Texteinheit, so wie sie abgespielt wird. Möchte man eine Antwort in mehrere Teile zerlegen - etwa, weil sie länger ausfällt, oder um eine Überraschung noch einige Sekunden hinauszuzögern, schreibt man sie in mehrere Paragraphen.
Innerhalb eines Paragraphen dürfen keine Kommentare stehen!
Effekte
Durch Auswahl einer Option (oder Response) können Veränderungen im Dialog oder der Spielwelt geschehen.
<setvariable name="variableName" value="value"/>
Setzt eine Dialogvariable auf den Wert value.
<incvariable name="variableName" value="value"/>
Erhöht eine Dialogvariable um value.
<decvariable name="variableName" value="value"/>
Verringert eine Dialogvariable um value.
<setoptionactive id="optionId" value="value"/>
Aktiviert (value=true) oder deaktiviert (value=false) eine Dialogoption.
<exit/>
Beendet den Dialog.
<changequest quest="questId" property="property" newvalue="newvalue/>
Verändert einen Questzustand.
Beispiel
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<dialog name="testdialog">
<variable name="geheimnisbekannt" type="BOOL" data="false"/>
<variable name="begrüßung" type="BOOL" data="false"/>
<start>
<switchresponse id="0">
<dialogvariable name="begrüßung"/>
<case><equals value="false"/>
<response id="33">
<setvariable name="begrüßung" value="true"/>
<t language="de">
<p>Hör gut zu, denn ich sags dir nur einmal: Du solltest mir nur drohen, wenn Geheimnisbekannt true ist. Geheimnisbekannt ist momentan {$geheimnisbekannt}.</p>
</t>
<gotoresponse id="100"/>
</response>
</case>
<case><equals value="true"/>
<gotoresponse id="100"/>
</case>
</switchresponse>
</start>
<response id="100">
<option id="1" label="Abstraktionstext">
<t language="de" label="Deutsches gebrabbel">
<p>Dies beweist, dass ich auch was anderes sagen kann als das was sich hinter der Option verbirgt!</p>
</t>
<t language="en" label="English gibberish">
<p>This proofs that I can say something different than what the option itself says. It also proofs that I can speak english. Crazy stuff, right?</p>
</t>
<response id="2">
<t language="de">
<p>Der NPC fängt mit seinem Monolog an...</p>
<p>...und hört auch direkt wieder damit auf</p>
</t>
<option id="3" autoSelect="true"><p>Jetzt soll der PC aber auch mal monologen...</p><p>...warum auch nicht?</p>
<gotoresponse id="0"/>
</option>
</response>
</option>
<switchoption id="4">
<t language="de" label="[Dem NSC auf deutsch drohen]"/>
<t language="en" label="[Threaten the NPC in english]"/>
<!-- If we use the <t>-Tag, the following will be ignored-->[Dem NSC drohen]
<dialogvariable name="geheimnisbekannt"/>
<case><equals value="false"/>
<option id="5">Ich drohe dir, kenne aber dein Geheimnis nicht!
<gotoresponse id="10"/>
</option>
</case>
<case><equals value="true"/>
<option id="6">Ich drohe dir und kenne dein schreckliches Geheimnis!
<response id="19">Oh nein! Ich gebe auf! Du darfst ins Menü zurück!
<option id="20">Tja, Informiertheit ist alles. Gut, dass ich das Tutorial zu dem Thema gelesen habe. Danke, Steele.
<gotoresponse id="0"/>
</option>
</response>
</option>
</case>
</switchoption>
<option id="11">Ich werde dein Geheimnis dem Alrik Faßbauer erzählen.
<if><dialogvariable name="geheimnisbekannt"/><equals value="true"/></if>
<response id="12">
<p>Oh, nein, nicht dem Alrik! *heul*</p>
<gotoresponse id="0"/>
</response>
</option>
<option id="13">Morgen bin ich zum Kaffeetrinken beim Alrik eingeladen
<if><dialogvariable name="geheimnisbekannt"/><equals value="false"/></if>
<response id="14">
<p>Ja, der Alrik ist ein netter Mensch.</p>
<gotoresponse id="0"/>
</response>
</option>
<option id="7">Wie lautet das Geheimnis?
<switchresponse id="18">
<dialogvariable name="geheimnisbekannt"/>
<case><equals value="false"/>
<response id="8">Mein Geheimnis ist: Ich kann keine Geheimnisse behalten! *schluchz*
<setvariable name="geheimnisbekannt" value="true"/>
<option id="9">Har har har... Na warte, Freundchen!
<gotoresponse id="0"/>
</option>
</response>
</case>
<case><equals value="true"/>
<response id="17">
<p>Du kennst mein Geheimnis doch schon längst!</p>
<gotoresponse id="0"/>
</response>
</case>
</switchresponse>
</option>
<switchoption id="23"><![CDATA[Ich will dir mal eines meiner unglaublichen Talente zeigen!]]>
<talentcheck talent="Athletik" target="pc"/>
<!-- Ist die Probe gelungen? (>= 0)-->
<case><greatereq value="0"/>
<option id="32"><p>*tada*: Eine athletische Meisterleistung!</p>
<gotoresponse id="0"/>
</option>
</case>
<!-- Ist die Probe nicht gelungen? (<0) -->
<case><lower value="0"/>
<option id="33">
<p>Ähm....tja....das hättest du jetzt nicht gesehen, ja?</p>
<gotoresponse id="0"/>
</option>
</case>
</switchoption>
<switchoption id="24"><![CDATA[Ich zeig dir jetzt mal wie mutig ich bin!]]>
<attributecheck attribute="MU" target="pc"/>
<!-- Ist die Probe gelungen? (>= 0)-->
<case><greatereq value="0"/>
<option id="42">Ich bin total mutig!
<gotoresponse id="0"/>
</option>
</case>
<!-- Ist die Probe nicht gelungen? (<0) -->
<case><lower value="0"/>
<option id="43">Ahhh! Bitte tu mir nichts!
<gotoresponse id="0"/>
</option>
</case>
</switchoption>
<switchoption id="25"><![CDATA[Zeig mir mal eines deiner unglaublichen Talente!]]>
<talentcheck talent="Athletik" target="npc"/>
<!-- Ist die Probe gelungen? (>= 0)-->
<case><greatereq value="0"/>
<option id="52">Donnerlittchen, ich bin unglaublich beeindruckt, dass kann ich dir ehrlich sagen mein lieber!
<gotoresponse id="0"/>
</option>
</case>
<!-- Ist die Probe nicht gelungen? (<0) -->
<case><lower value="0"/>
<option id="53">
<p>Naja, mach dir nichts draus. Ich seh zwar athletisch aus, bins aber eigentlich gar nicht. Das ist MEIN schreckliches Geheimnis.</p>
<gotoresponse id="0"/>
</option>
</case>
</switchoption>
<switchoption id="26"><![CDATA[Zeig mir doch mal wie mutig du bist!]]>
<attributecheck attribute="MU" target="npc"/>
<!-- Ist die Probe gelungen? (>= 0)-->
<case><greatereq value="0"/>
<option id="62">Donnerlittchen, ich bin unglaublich beeindruckt, dass kann ich dir ehrlich sagen mein lieber!
<gotoresponse id="0"/>
</option>
</case>
<!-- Ist die Probe nicht gelungen? (<0) -->
<case><lower value="0"/>
<option id="63">
<p>Also wenn DAS mutig war, dann bin ich Chuck Norris!</p>
<p>Bin ich aber nicht! Ich bin nämlich die Alrike!</p>
<p>Folgerichtig bist DU sowas von überhaupt nicht mutig!</p>
<gotoresponse id="0"/>
</option>
</case>
</switchoption>
<option id="21">[Gespräch beenden]
<p>Tschüß.</p>
<response id="22">
<p>Geh' doch!</p>
<exit/>
</response>
</option>
</response>
<response id="10">Dann musst du sterben! (bzw. den Dialog verlassen)
<option id="15">Ok ... schade
<response id="16"><exit/></response>
</option>
</response>
</dialog>
ToDo
- Verwendung von DTD Entities erklären
- Näher auf die möglichen Tags eingehen
