Autor Thema: [Fallout2] Scripting / Dialoge (Deutsch)  (Gelesen 7062 mal)

Vault 0 Bewohner

  • Gast
[Fallout2] Scripting / Dialoge (Deutsch)
« am: 21. März 2009, 10:22:16 Uhr »
Dialogue scripting tutorial

Durchaus haben einige Leute aus diversen Fallout modding Foren nach Hilfe beim Scripten gefragt. Ich schrieb bereits eine Übersicht über das Hauptkonzept des Scriptens, welches hier (Link leider tot :() gefunden werden kann. Dieses Mal werde Ich mich mit Dialog Scripting befassen. Bevor Du dieses Tut liest, empfehle Ich Dir das besagte Tutorial durchzulesen und ColJack's Tutorial über das Aufetzen eines Compilers. Das Tutorial kannst du irgendwo auf der Seite von "Mutant Rising” finden.
Um einen Dialog für einen Charakter zu schreiben, benötigst Du zwei Dateien. Eine wird die Text Datei sein, die den gesamten Dialogtext beinhalten wird, die andere wird das Charakter Script sein, welche entscheidet, wann der Char wann was sagt. Sie werden beiden den selben Namen tragen, die Textdatei wird aber mit der Endung .msg und die Scriptdatei mit .int enden. Die Textdatei wird im Pfad data\text\english\dialog im Fallout Hauptverzeichnis zu finden sein. Die Scriptdatei hingegen wird unter data\scripts zu finden sein.
Die Textdatei wird folgendermaßen aussehen:


{100}{}{A line of dialogue}
{101}{}{Another line of dialogue}


und so weiter. Es ist egal in welcher Reihenfolge die Dialoge stehen, wichtig ist, dass die Zeilennummern einmalig sind. Das ist der leichte Teil. Das Script entscheidet, welche Dialogzeilen wann angezeigt werden. Das ist der schwierige Teil.
Das erste was Du in dem Script brauchst ist eine talk_p_proc procedure. Die Prozedur wird abgerufen, wenn der Spieler versucht eine Konversation mit einem Critter zu starten. Die Grund Prozedur sieht wie folgt aus:


procedure talk_p_proc begin
    start_gdialog(NAME,self_obj,4,-1,-1);
    gSay_Start;
        call Node001;
    gSay_End;
    end_dialogue;
end


Du kannst im Mapper Handbuch nachschauen, was die einzelnen Befehle machen, das wichtigste aber, ist die Zeile


call Node001

Das hier wird die Prozedur aufrufen, die den Dialog starten wird. Also schreiben wir eine Prozedur, die call Node001 heisst.


procedure Node001 begin
    Reply(100);

    NOption(101,Node999,004);
end


Die Ziele Replay(100) sagt aus, dass der NPC die Zeile 100 aus der Textdatei sprechen wird. NOption(101, Node999, 004) bedeutet, dass der Spieler die Option besitzt die Zeile 101 zu wählen, wenn seine Intelligenz größer als 4 (004)ist, nach dem wird die Prozedur Node999 aufgerufen. Prozedur Node999 ist immer die Prozedur, welche den Dialog beendet. Wir haben nun einen kompletten (obgleich sehr kurzen) Dialog! Lass uns nun eine weitere Prozedur schreiben:


procedure Node002 begin
    Reply(103);
   
    NOption(104, Node999, 004);
end

und ändere procedure Node001 zu:

procedure Node001 begin
    Reply(100);

    NOption(102,Node002,006);
    NOption(101,Node999,004);
end


In Node001 hat der Spieler nun die Möglichkeit Zeile 102 zu wählen, wenn seine Intelligenz größer als 6 (006)ist. Wenn er sich für diese Option entscheidet, dann wird Node002 aufgerufen, worauf der NPC mit Zeile 103 antwortet, darauf kann der Spieler nur mit Zeile 104 antworten. Das ist im Grunde alles, was es da zu sagen gibt. Dialoge schreiben ist eigentlich nur Nodes im Dialogbaum miteinander zu verbinden.
Hingegen, Noption und eine Anzahl von Dialog verwandten Befehlen sind Befehle der gSay/giQ Familie. Hier ist eine komplette Beschreibung der wichtigsten gSay Befehle:


Name: gSay_Message
Returns: void Dialog
Arguments:
  msg_list (int)
  msg_num (int)
  reaction (int)


Setzt eine sayMessage auf, welche eine Anwort mit einer [Done] Option ist. Die msg_list entscheidet, in welche Nachrichten Datei geschaut werden soll und msg_num entscheidet welche Zeile in dieser Datei verwendet werden soll.


Name: gSay_Option
Returns: void Dialog
Arguments:
  msg_list (int)
  msg_num (int)
  target (procedure)
  reaction (int)


Setzt eine Optionen-Wahl für einen Antworten-Block. Wenn man den string (Schnur/Faden) von der Nachrichten Datei  (msg_list) und Nachrichten Nummer (msg_num) erhält, verursacht es eine gegebene Reaktion (reaction) und, wenn Ausgewählt springt es zu der Prozedur (target).


Name: gSay_Reply
Returns: void Dialog
Arguments:
  msg_list (int)
  msg_num (int)


Setzt einen Antworten-Block (Was der *CRITTER* sagt).


Name: giQ_Option
Returns: void Dialog
Arguments:
  iq_test (int)
  msg_list (int)
  msg_num (int)
  target (procedure)
  reaction (int)


Setzt eine Option-Wahl für einen Antworten-Block, wenn der Intelligenzquotient des Spielers gleich zu oder größer als ein gegebenen Wert ist (iq_test). Wenn man den string (Schnur/Faden) von der Nachrichten Datei  (msg_list) und Nachrichten Nummer (msg_num) erhält, verursacht es eine gegebene Reaktion (reaction) und, wenn Ausgewählt springt es zu der Prozedur (target).
___________________________________________________________________________________________________________________________________________________

©2003-2004 Daniel Sjöblom
mail me! dsjoblom@mbnet.fi

Dies ist lediglich die Übersetzung ins Deutsche. Der Originaltext kann hier (Link leider tot :() eingesehen werden.

Viel Spass und Glück beim Dialoge schreiben.  :s000:
________________________________________________________________________________________________________________________________________

***UPDATE***

Folgende Fehler wurden behoben:

* Der Quellcode wurde eingerückt.
* Die Verlinkungen wurden verkürzt und eingefärbt.
* Einige Rechtschreibfehler wurden korrigiert.

Folgende Fehler wurden behoben -Teil2-:

* Der Quellcode wurde mit dem Quellcode- Button editiert.
* Links wurden auf ihre Aktualität geprüft.
* Links wurden hinzugefügt, andere als "tot" markiert.
* Überschriften wurden editiert.
« Letzte Änderung: 29. November 2012, 21:37:05 Uhr von Vault 0 Bewohner »