Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Page 1 of 2 12 Last »
Results 1 to 20 of 36
  1. Visit Homepage View Forum Posts #1 Reply With Quote
    Exodus Sektenspinner's Avatar
    Join Date
    Jul 2004
    Location
    Karlsruhe
    Posts
    7,827
     
    Sektenspinner is offline

    ^_^ [Dialog Tool] DiaDepp

    Anmerkung, März 2011: Es gibt einige Schwächen dieses Programms und auf manchen Systemen Darstellungsfehler. Aufgrund der geringen Nutzerzahlen und des unter der Haube sehr unsauberen Codes entwickle ich DiaDepp nicht weiter. Es wird also keine Updates und Fixes geben. Ich selbst komme mit dem Tool seit langem gut zurecht, was wohl auch daran liegt, dass genau das drin ist, was ich selbst praktisch fand. Ich kann nur das anbieten, was ich 2009 gecodet habe, was mir Leid tut für diejenigen, die sich berechtigterweise zusätzliche Features wünschen.


    Dialogtool für Daedalus ehemals Panic-Panel (also DiaDepp) ist, wie der Name suggeriert eine neue Version des Dialogtools "Panic-Panel".

    Das Tool verfolgt einen speziellen Ansatz und zwar distanziert es sich von Daedalus Konstrukten wie Instanzen und Funktionen und führt stattdessen Dialoge, Dialogoptionen und andere Objekttypen ein, die es erlauben Gothic Dialoge auf viel natürlichere Weise und ohne unnötigen Balast hinzuschreiben. Außerdem werden für bestimmte Befehle schlankere Notationen eingeführt.

    Neben einer verbesserten und erweiterten Funktionalität habe ich mich auch der notorisch schlechten Dokumentation gewidmet und dem Tool eine ganze Stunde erklärendes Videomaterial gegönnt. Um DiaDepp in Aktion zu sehen, eignet sich das erste Video, eine genaue Erklärung der einzelnen Funktionalitäten und Konzepte ist in den beiden folgenden Videos (Funktionalitaet, Besonderheiten) zu finden.
    Schlussendlich werden Export und Import in gesonderten Videos erklärt.

    An diesen Post hänge ich nun noch die Hilfedatei an, die aber im Vergleich zu den Videos sehr stark komprimiert ist.

    Code:
    //#################################################################
    //
    //   ,------.  ,--.        ,------.                       
    //   |  .-.  \ `--' ,--,--.|  .-.  \  ,---.  ,---.  ,---. 
    //   |  |  \  :,--.' ,-.  ||  |  \  :| .-. :| .-. || .-. |
    //   |  '--'  /|  |\ '-'  ||  '--'  /\   --.| '-' '| '-' '
    //   `-------' `--' `--`--'`-------'  `----'|  |-' |  |-' 
    //                                          `--'   `--'   
    //#################################################################
    
    //###########################################
    //
    //  DiaDepp Hilfedatei
    //
    //###########################################
    
    //************************************
    //   0.) Herzlich willkommen!
    //************************************
    
    Dieses Tool soll dir dabei helfen Dialoge mit ihren Dialogoptionen, sowie Events zu erstellen, zu bearbeiten und übersichtlich zu verwalten.
    Den Fortschritt an deinem Projekt kannst du in einem internen Format (.pp) sichern und wieder laden. Ist das Projekt fertig, kannst du es als Daedalus Script(e) exportieren.
    DiaDepp kann auch Daedalus Scripte sowie Miranda-Dialog-Creator Scripte importieren.
    
    Diese Hilfedatei Datei kannst du im Programm jederzeit über einen Klick auf den "Dont Panic" Schriftzug erreichen.
    
    Als Hilfe stehen mittlerweile auch Videos zur Verfügung unter folgenden Addressen zu erreichen sind (Stand Juni 2009):
    
    //------------------------------------------------------------------------
    #### Vorstellung der Idee und Demonstration an einem Beispiel:        ####
    http://exodus.worldofgothic.com/team/Sektenspinner/DiaDepp/Vid_1_Intro.rar
    __________________________________________________________________________
    #### Ausführliche Vorstellung der Funktionsweise und Konzepte:        ####
    http://exodus.worldofgothic.com/team/Sektenspinner/DiaDepp/Vid_2_Funktionalitaet.rar
    __________________________________________________________________________
    #### Erörterung einiger Randfunktionalitäten und Details:             ####
    http://exodus.worldofgothic.com/team/Sektenspinner/DiaDepp/Vid_3_Besonderheiten.rar
    __________________________________________________________________________
    #### Die Exportfunktion und was man dazu wissen sollte:               ####
    http://exodus.worldofgothic.com/team/Sektenspinner/DiaDepp/Vid_4_Export.rar
    __________________________________________________________________________
    #### Die Importfunktion (für den Einstieg nicht nötig)                ####
    http://exodus.worldofgothic.com/team/Sektenspinner/DiaDepp/Vid_5_Import.rar
    __________________________________________________________________________
    #### Zur Import von Miranda Dialog Creator Scripten gibt es kein Video.###
    //------------------------------------------------------------------------
    
    Ich habe die die Videos so gestaltet, dass man sie am besten der Reihe nach anschauen sollte.
    Es folgt hier noch eine kurze Beschreibung aller Features in Textform. Die Beschreibung ist aber sehr technisch, ich schätze, die Videos sind dem Verständnis zuträglicher.
    
    //************************************
    //   1.) Eingabefelder und Buttons
    //************************************
    
    a.) Das Navigationsfeld
    
    Im linken weißen Feld werden die verschiedenen Dialoge, Dialogoptionen, Events, Codeelemente und Ordner aufgelistet. Am Anfang ist die Liste leer.
    Mit Hilfe des Kontextmenüs (rechte Maustaste) können hier neue Bausteine hinzugefügt werden. Diese kann man anschließend anwählen, woraufhin im rechten Teil des Programmfensters die enthaltenen Informationen angezeigt werden.
    
    b.) Die Eigenschaften der Bausteine
    
    Je nach dem, welcher Baustein im Navigationsfeld gewählt ist (Event, Dialog, Dialogoption oder Codebaustein), sind die verschiedenen Eigenschaften im oberen, rechten Bereich anwählbar oder auch nicht.
    Hier können Einstellungen getroffen werden, etwa welchem Npc ein Dialog gehört, oder unter welcher Bedingung (condition) ein Dialog (oder Event) verfügbar ist.
    
    c.) Das große Befehlsfeld
    
    Im großen Feld unten rechts wird das Kernstück eines Dialogs, eines Events, einer Dialogoption oder eines Codebausteins notiert, zu dem zum Beispiel ein Item-Transfer (B_GiveInvItems) oder eine Dialogzeile (AI_Output) gehören können. Das DiaDepp kennt einige Kurzbefehle die Standartzeilen automatisieren. (siehe Punkt 6)
    
    d.) Laden
    
    Hier kann eine zuvor gespeicherte *.pp (= Panic-Panel Save) Datei geladen werden. Eine Beispielprojekt liegt diesem Programm bei.
    
    e.) Speichern
    
    Hiermit kann das aktuelle Projekt in einer *.pp Datei gespeichert werden. Diese Datei ist für Gothic unbrauchbar, kann aber mit dem Panic Panel jederzeit wieder geladen werden. Um brauchbaren Code zu erzeugen muss ein Projekt exportiert werden.
    
    f.) Exportieren
    
    Das aktuelle Projekt kann hiermit als brauchbarer Code (*.d) exportiert werden. Ein exportiertes Projekt kann vom DiaDepp nicht wieder eingelesen werden.
    
    g.) MDC-Import
    
    Hier kann eine Miranda-Dialog-Creator Datei (*.dia) importiert werden. Siehe Punkt 12.
    
    h.) Importieren
    
    Hiermit können Daedalus Scripte eingelesen werden und es wird versucht eine möglichst elegante DiaDepp Repräsentation von ihnen zu erstellen.
    
    i.) Npc-Liste
    
    DiaDepp merkt sich die Zuordnungen von Npc-Namen und Npc-Instanzen. Die Liste kann hier eingesehen und bearbeitet werden, was in der Regel aber nicht nötig ist. Ist DiaDepp eine Zuordnung unbekannt, so fragt er einfach nach.
    
    j.) Vorschau
    
    Ist die Vorschau (Optionsfeld unten links) aktiviert, so wird der aktuelle Baustein ständig im großen Befehlsfeld so angezeigt, wie er später aussehen wird. Besonders am Anfang dürfte das eine große Hilfe sein.
    
    k.) Vorschau beibehalten
    
    Ist die Vorschau aktiviert, kann zusätzlich "Vorschau beibehalten" aktiviert werden. Die Option bewirkt, dass selbst beim Betreten des großen Befehlsfeldes die Vorschau-Version erhalten bleibt.
    So kann etwa der Inhalt dieses Feldes in die Zwischenablage kopiert werden. Um Änderungen am Inhalt des Bausteins vorzunehmen, muss diese Option allerdings deaktiviert sein.
    
    l.) Syntaxprüfung
    
    Ist die Syntaxprüfung aktiviert geben farbige Kästchen oben rechts über den mehrzeiligen Textfeldern Aufschluss darüber, ob ein Syntaxfehler vorliegt oder nicht.
    
    l.) Suche
    
    Kein eigentliches Eingabefeld, aber mit Strg + F kann eine Suchfunktion erreicht werden.
    
    //************************************
    //   2.) Das Navigationsfeld
    //************************************
    
    a.) Einen neuen Baustein erstellen
    
    Durch Rechtsklick auf das Navigationsfeld erscheint ein Kontextmenü. Im Untermenü "Neu" kann nun die Art des neuen Objektes wählen. Dabei gibt es folgende Möglichkeiten:
    
    -Ordner       -> Erstellt einen neuen Ordner. Ein Ordner hat keine Eigenschaften und dient lediglich der Übersicht.
    -Dialog       -> Erstellt einen gewöhnlichen Dialog.
    -Dialogoption -> Eine neue Dialogoption wird erstellt und als solche im übergeordneten Dialogbaustein eingetragen.
    -Event        -> Erstellt ein neues Event. Ein Event ist eine beliebige Funktion oder ein Schleifenobjekt.
    -Code         -> Ein nicht näher bestimmter Baustein. Der Nutzer kann hereinschreiben, was er möchte, etwa eine Funktion oder eine Item-Instanz.
    -Ende Dialog  -> Ein Dialogbaustein wird erstellt, bei dem die Einstellungen so getroffen sind, wie bei einem typischen "ENDE" Dialog.
    
    Zusätzlich kann ein Objekt als "Neues Unterobjekt" erstellt werden. In diesem Fall dient der derzeit markierte Knoten als Ordner und beinhaltet dann das neue Objekt.
    
    In ein und dem selben Ordner dürfen niemals zwei Knoten den gleichen Namen haben. Sonderzeichen, Umlaute und Leerzeichen im Namen sind nicht erlaubt.
    
    b.) Hierarchie bearbeiten
    
    Die Baumstruktur im Navigationsfeld kann jederzeit per Drag&Drop korrigiert werden. Zieht man einen Baustein zu einem anderen, wird er an dieser Stelle gleichrangig eingefügt.
    Wird zusätzlich die Strg-Taste gedrückt, wird der Baustein als Unterobjekt dieses Bausteins eingefügt.
    
    Bausteine können durch einen verzögerten zweiten Klick darauf oder mit Hilfe der Taste F2 umbenannt werden.
    Eventuelle Verknüpfungen des Bausteins mit anderen Bausteinen (etwa Bedingungen) werden automatisch angepasst, wenn ein Knoten umbenannt oder verschoben wird.
    
    c.) Baustein löschen
    
    Durch Drücken der 'Entfernen'-Taste beziehungsweise durch den Menüpunkt 'Löschen' im Kontextmenü, kann ein Baustein entfernt werden.
    Dabei werden stets untergeordnete Bausteine mitentfernt.
    
    d.) Übersicht
    
    Bei großen Projekten helfen die Optionen "Alles ausklappen" bzw. "Alles einklappen" im Kontextmenü. So kann die Übersicht auf die obersten Ordner zusammengestaucht oder alle Ordner geöffnet werden.
    
    //************************************
    //   3.) Die Eigenschaften der Bausteine
    //************************************
    
    Bei allen Bausteinen außer Ordnern kann man oben rechts bestimmte Einstellungen vornehmen. Diese sind:
    
    ->Überschrift
    Ist hier etwas eingetragen, wird ein Überschriftsblock, ähnlich denen in dieser Readme hinzugefügt. Eine solche Überschrift dient nur der anschließenden Übersicht.
    
    ->Npc
    Jeder Dialog "gehört" einem Npc. Der Klarname (nicht der Instanzname!) wird hier eingetragen. Zum Beispiel: 'Bruno'.
    
    ->nr
    Diese Zahlen entscheiden im Spiel über die Reihenfolge der Dialoge im Info-Manager. In der Regel muss dieser Wert nicht verändert werden.
    
    ->description
    Die Beschreibung des Dialogs bzw der Dialogoption, die im Info-Manager erscheint.
    Ist das erste Zeichen der Beschreibung ein Ausrufezeichen (!) dann wird der Inhalt nicht als String, sondern als Konstante interpretiert.
    Beispiel: !DIALOG_ENDE führt dazu, dass die Konstante DIALOG_ENDE (und nicht der Text "DIALOG_ENDE") als Beschreibung angenommen wird.
    
    ->permanent
    Ein permanenter Dialog ist immer wieder anwählbar, solange die Condition erfüllt ist.
    Ein permanentes Event kann entsprechend immer wieder ausgelöst werden, solange die Condition erfüllt ist.
    
    ->important
    Ein important-Dialog wird eigenständig vom NPC gestartet, sobald die Bedingung erfüllt ist.
    Ein Event mit dieser Einstellung wird beim Exportieren in einer Trigger-Schleifen-Funktion gesammelt, mit dem Ziel, dass es eigenständig vom Spiel ausgelöst wird, sobald die Condition erfüllt ist.
    Ein Event ohne diese Einstellung wird lediglich als Funktion im Script abgelegt und muss hinterher, etwa mit dem Öffnen einer Truhe verknüpft oder manuell aufgerufen werden.
    
    ->trade
    Bei einem Dialog mit dieser Einstellung wird am Ende das Handelsinventar des Npcs geöffnet.
    Das DiaDepp fügt automatisch die Zeile 'B_GiveTradeInv (self)' ans Ende des Dialogs ein.
    
    ->condition
    Hier können eine oder mehrere Bedingungen in Gothic Code angegeben werden, z.B.:
    
    ---------------------------------------------
    if (NPC_HasItems (hero, ItMi_Gold) > 50)
    && (hero.guild == GIL_NONE)
    ---------------------------------------------
    
    Die Anweisung 'return TRUE;' in geschweiften Klammern wird später vom Programm selbst hinzugefügt. Ein leeres Conditionfenster steht für eine immer erfüllte Bedingung.
    Siehe auch: 4 (Pfade) und 5 (Spezielle Bedingungen)
    
    Tipp: Durch die ENTER-Taste bzw. die Tastenkombination Strg+ENTER in den mehrzeiligen Textfeldern kannst du bequem und ganz ohne Maus in das nächste Textfeld wechseln.
    
    
    //************************************
    //   4.) Pfade
    //************************************
    
    Der endgültige Name eines Dialogs und anderer Bausteine ist vor dem Export noch nicht bekannt, kann sich ändern oder ist zumindest nur umständlich vorrauszusagen.
    Deshalb beherrscht das DiaDepp ein anderes System, um einen Baustein zu bennenen, etwa um diesen als Bedingung zum Aufruf eines anderen vorrauszusetzen.
    
    Die Benennung des zweiten Bausteins basiert auf einer Pfadangabe relativ zum aktuellen Baustein. Ein Pfad wird mit Rautenzeichen ('#') gerahmt.
    
    Den Pfad zu einem Baustein kann man erhalten, indem man rechts auf einen Knotenpunkt klickt und "Pfad kopieren" anwählt. Entsprechend kann im 'condition'-Fenster oder im großen Befehlsfeld über Rechtsklick -> Pfad einfügen ein so kopierter Pfad eingefügt werden.
    
    Natürlich kann man Pfade auch von Hand schreiben, denn das System folgt einer einfachen Logik:
    Ein Pfad ist die Reihenfolge der Schritte die man unternehmen muss, um vom Startpunkt (dort wo wir sind) zum Ziel (was wir benennen wollen) zu kommen.
    Später, beim Exportieren, werden diese Pfade in die tatsächlichen Namen der Bausteine umgewandelt.
    Das klingt schwerer als es ist.
    
    Hier die Beispiele:
    Wir wollen jeweils in "Start" auf "Ziel" zugreifen.
    
    ----------------------------------------------
    
    ->Ordner
    --->Start
    --->Ziel
    
    "Ziel" und "Start" befinden sich beide im selben Ordner. Die Pfadangabe ist einfach: #Ziel#
    
    ----------------------------------------------
    
    ->Ordner
    --->Ziel
    ->Ordner2
    --->Start
    
    Von Start aus gesehen, müssen wir zunächst eine Ebene nach oben, dann in "Ordner" und dann in "Ziel".
    Die Zeilenfolge für "einen Ordner nach oben" ist: '..\' .
    Die Pfadangabe lautet: #..\Ordner\Ziel#
    
    ----------------------------------------------
    
    ->Ordner
    --->Ziel
    ----->Start
    
    "Start" ist ein Unterobjekt von "Ziel".
    In diesen Fall ist der Pfad einfach leer (##) da wir uns von Anfang an "Ziel" befinden.
    
    ----------------------------------------------
    
    Klingt immernoch schwierig?
    Dann probiere es doch einfach aus! Ich bin sicher, dass du es schnell verstehen wirst.
    
    Sowohl im 'condition'-fenster als auch im großen Befehlsfeld werden solche Pfade interpretiert.
    
    Wenn ein Baustein verschoben oder umbenannt wird (siehe 2.b), verändern sich alle Pfadangaben die von diesem Baustein ausgehen oder auf ihn verweisen im Übrigen automatisch mit.
    Hast du einen Pfad einmal korrekt angegeben ist er gültig, solange das Zielobjekt nicht gelöscht ist.
    
    Was man damit machen kann?
    Nun, zum Beispiel:
    
    if (NPC_KnowsInfo (#Pfad zu Dialog#)) 	--> Ist der Dialog bekannt oder nicht?
    #Pfad zu Event# (); 					--> ruft das Event auf.
    
    Siehe auch: 5 (Spezielle Bedingungen) und 7 (Choices).
    
    
    //************************************
    //   5.) Spezielle Bedingungen
    //************************************
    
    Sowohl im Condition-Feld als auch im großen Befehlsfeld können beliebige if-Konstruktionen stehen.
    DiaDepp unterstützt besondere Bedingungen, die auf den Pfaden (siehe Punkt 4) basieren.
    
    Solche Bedingungen werden mit einem '!' im Pfadnamen gekennzeichnet.
    
    Es sei #INFO# ein Pfad zu einem Dialog, #EVENT# der Pfad zu einem Event und #CHOICE# der Pfad zu einer Dialogoption. Dann lassen sich folgende Bedingungen formulieren:
    
    #!INFO#
    Gibt zurück ob die angegebene Info bekannt ist. Eine permamente Info gilt dann als bekannt, wenn sie mindestens einmal abgefragt wurde (eine Variable wird dann entsprechend deklariert).
    
    #!EVENT#
    Gibt zurück ob das angegebene Event bekannt ist. Ein Event gilt dann als bekannt wenn es mindestens einmal ausgelöst wurde (eine Variable wird entsprechend deklariert).
    
    #!CHOICE#
    Gibt zurück ob die angegebene Dialogoption bislang mindestens einmal aufgerufen wurde (eine Variable wird entsprechend deklariert).
    
    Ein Beispiel:
    
    -------------------
    -> Ordner
    ---> Hallo
    ---> Wie_gehts
    -------------------
    
    In der Condition von Wie_gehts könnte zum Beispiel stehen:
    
    -------------------
    if (#!Hallo#)
    -------------------
    
    Dann kann Wie_gehts erst aufgerufen werden, wenn Hallo bereits bekannt ist.
    
    
    //************************************
    //   6.) Das große Befehlsfeld
    //************************************
    
    In das große Feld kommt der eigentliche Inhalt eines Dialoges eines Events oder einer Dialogoption, also das was wirklich passieren soll.
    Hier kann im Prinzip beliebiger Gothic-Code stehen, es ist allerdings zu empfehlen die Kurzbefehle zu nutzen, die DiaDepp versteht.
    Dies sind Folgende (der * steht jeweils für einen frei wählbaren Text):
    
    >>*
    Der Held sagt *. Eine AI_Output Zeile mit sinnvoller Benennung und automatischer Nummerierung wird in den Code eingefügt.
    
    <<*
    Der Npc sagt *. Eine AI_Output Zeile mit sinnvoller Benennung und automatischer Nummerierung wird in den Code eingefügt.
    
    ++*
    Hiermit wird die Dialogoption '*' hinzugefügt. * muss hierbei ein gültiger Pfad relativ zum aktuellen Baustein sein. Siehe auch Punkt 4 (Pfade) und Punkt 6 (Choices).
    
    --
    Eine Info_ClearChoices-Zeile wird in den Dialog eingefügt. Siehe auch Punkt 7 (Choices).
    
    ENDE
    AI_StopProcessInfos (self); wird in den Code eingefügt.
    
    Alle anderen Befehle, wie etwa CreateInvItems müssen in Gothic-Code angegeben werden. In diesem Zusammenhang möchte ich auf folgende Datei hinweisen:
    http://exodus.worldofgothic.com/team/Sektenspinner/misc/Macros.d
    In ihr befinden sich einige Makros die den Umgang mit Gothic-Funktionen vereinfachen und so Tipparbeit sparen.
    
    
    //************************************
    //   7.) Dialogoptionen
    //************************************
    
    Es ist zu empfehlen Dialogoptionen als Unterobjekte des zugehörigen Dialogs anzulegen, etwa so:
    
    -> Dialog
    ---> Option1
    ---> Option2
    ---> Option3
    
    In "Dialog" selbst könnten dann über:
    
    ++#Dialog\Option1#
    ++#Dialog\Option2#
    ++#Dialog\Option3#
    
    die einzelnen Optionen hinzugefügt werden. Es ist auch möglich eine Dialogoption erst nach Aufruf einer anderen hinzuzufügen.
    Im Befehlsfeld von Option1 könnte Option2 folgendermaßen hinzugefügt werden:
    
    ++#Option2#
    
    Es ist auch ohne weiteres möglich Dialogoptionen aus ganz anderen Ordnern anzufügen.
    Der Befehl -- fügt entsprechend einen Info_ClearChoices Befehl ein.
    
    Doch beachte:
    Wenn ++ oder -- nicht auf den übergeordneten Dialog (sondern auf einen anderen) angewendet werden soll (kommt sehr selten vor), muss dieser explizit angegeben werden:
    
    -> Ordner
    ---> Dialog
    ---> Option
    ---> Option2
    
    Zwar kann in "Dialog" ganz einfach mit '++#Option#' die Dialogoption hinzugefügt werden.
    Soll jedoch in "Option" "Option2" hinzugefügt werden, dann muss das folgendermaßen aussehen:
    
    ++#Dialog#,#Option2#
    oder alternativ:
    Info_AddChoice (#Dialog#, "Beschreibung", #Option2#);
    
    Denn DiaDepp kann sonst in dem Falle nicht entscheiden zu welchem C_INFO Objekt "Option" gehört.
    Soll in "Option" oder "Option2" ein Info_ClearChoices ausgeführt werden, muss das entsprechend so aussehen:
    
    --#Dialog#
    oder alternativ:
    Info_ClearChoices (#Dialog#);
    
    Das liegt in beiden Fällen daran, dass "Option" und "Option2" keine Unterobjekte von Dialog sind.
    Diese Komplikationen können vermieden werden, indem jede Dialogoption in einem Unterordner des zugehörigen Dialogs ist.
    
    
    //************************************
    //   8.) Codebausteine
    //************************************
    
    Ein Codebaustein ist eigentlich nur ein leeres Textfeld in das du eintragen kannst, was dir gerade in den Sinn kommt.
    Das können Items, Npc-Scripte, Funktionen oder einfach nur Notizen sein.
    Letztendlich kannst du es für das benutzen, was DiaDepp nicht kann.
    Die unter 6 genannten Befehle werden in einem Code Baustein wie gewohnt interpretiert!
    
    
    //************************************
    //   9.) Variablen und Makros
    //************************************
    
    Durch einen Klick auf "Variablen" öffnet sich das Fenster "Variablen und Makros" in dem jeder beliebige Text hineingeschrieben werden kann.
    Dieser Text wird am Ende beim Exportieren vor alles andere geschrieben.
    Dieses Eingabefenster ist daher gut geeignet um globale Variablen zu deklarieren (wie etwa in Story_Globals.d) oder um Globale Funktionen also zum Beispiel Makros zu erstellen.
    
    
    //************************************
    //   10.) Die Npc-Liste
    //************************************
    
    Das DiaDepp muss beim Zusammenbauen eines Dialogs wissen, wie der Instanzname der jeweiligen NPCs (z.B. Bruno) ist.
    Diese Namen (z.B. NONE_42_Bruno) merkt er sich in eine Liste, die durch einen Klick auf "Npc-Liste" erreicht werden kann.
    In der Regel ist es nicht nötig diese Liste zu öffnen und zu bearbeiten, da DiaDepp automatisch nach Instanznamen fragt, die ihm noch nicht bekannt sind.
    
    
    //************************************
    //   11.) Exportieren
    //************************************
    
    Damit ein mit dem DiaDepp erstelltes Projekt in Gothic verwendet werden kann, muss es exportiert werden.
    Da dies aber eine Einbahnstraße ist (die Import Funktion ist NICHT eine exakte Umkehrung!) sollten diese Dateien nicht von Hand bearbeitet werden, da beim nächsten Export aus DiaDepp die Änderungen überschrieben würden.
    
    Es ist möglich Teile des Informationsflusses in seperate Dateien umzulenken:
    -Die Option "Variablen in eine gesonderte Datei" führt dazu, dass alle Variablen in eine Story-Globals ähnliche Datei gespeichert werden.
    -Ein Haken bei "Npc-Globals Ableger erstellen" führt dazu, dass in einer gesonderten Datei C_NPC Variablen für alle dem DiaDepp bekannten Npcs (siehe Punkt 10) deklariert werden. Zudem wird eine Funktion bereit gestellt, die diese Variablen initialisiert. Diese Funktion kann dann z.B. aus der originalen Init_Npc_Globals Funktion heraus aufgerufen werden.
    -"Events in eine gesonderte Datei" führt dazu, dass eine Event- und eine Dialogdatei ertellt wird, anstelle von einer Sammel-Datei.
    
    Die Dateien (DIA*.d / EVT*.d / NPCS*.d / PPP*.d / VAR*.d, je nachdem wie die Optionen gewählt sind) werden alle im selben Ordner abgelegt. Ist dies ein Ordner im Content-Verzeichnis der Script, muss lediglich noch die Gothic.src angepasst werden und die Änderungen sind nach dem nächsten erfolgreichen Parsen im Spiel.
    
    //************************************
    //   12. ) MDC-Import
    //************************************
    
    Das Panic Panel kann Miranda-Dialog-Creator (MDC) Scripte (Format: *.dia) importieren. Es besteht auch die Möglichkeit nacheinander mehrere MDC Scripte in das DiaDepp einzulesen.
    Werden mehrere Dateien eingelesen, ist es in der Verantwortung des Nutzers, sicherzustellen, dass keine gleichnamigen Bausteine in ein und dem selben Ordner entstehen. In der Regel geschieht dies nicht, da auch der MDC vorsieht, dass ein NPC keine zwei gleichnamigen Dialoge haben kann.
    In Einzelfällen kann es dazu kommen, dass unsaubere Codierung im Miranda Script ein fehlerhaftes Bild im Panic Panel liefert, etwa, wenn statt dem Befehl '%%' eine '!Info_ClearChoices' Konstruktion im MDC Script stand.
    Externe Bezüge können ebenfalls unbrauchbar werden, so ändern sich Beispielsweise die Output Unit Namen, was problematisch ist, wenn bereits eine Vertonung vorliegt.
    
    Beachte: DiaDepp ignoriert die Stimmnummerangabe im MDC-Befehl "person". Alle Output Units werden im DiaDepp grundsätzlich ohne Stimmnummern angegeben.
    
    
    //************************************
    //	13.) Importieren
    //************************************
    
    DiaDepp kann Daedalus Scripte importieren. Dabei wird DiaDepp versuchen möglichst viele zur Verfügung stehende Kurzformen zu nutzen um eine möglichst saubere Repräsentation zu erreichen. Referenzen innerhalb der Menge der importierten Dialoge bleiben gültig. Spezielle Konstrukte, die von einem einfachen Dialogschema abweichen, können zu visuell unbefriedigenden, uneleganten oder gar fehlerhaft sortierten Ergebnissen nach dem Import führen. Es ist stets nötig nach einem Import die Daten manuell zu überprüfen.
    
    //************************************
    //	14. ) Darstellung
    //************************************
    
    Ein Dialog zum Anpassen der Farben, die beim Syntaxhighlight verwendet werden, sowie der Hintergrundfarben, kann über das Kontextmenü (rechte Maustaste) des großen Befehlsfeldes erreicht werden.
    Das Feld muss aktiv sein (ein Baustein muss angewählt sein), damit das Kontextmenü zur Verfügung steht.
    Ich spare mir ein genaues Changelog, da die Vorgängerversion vermutlich ohnehin nahezu unbekannt ist.



    Über Rückmeldung jeglicher Art freue ich mich natürlich. Zugegeben: Das Tool ist nichts für blutige Anfänger, und wer kein Anfänger mehr ist, gewöhnt sich ungern an eine andere Syntax. Ich kann aber sagen: Für mich hat es sich gelohnt, ich spare mit dem Tool und den zum Teil unveröffentlichten Vorläufern schon seit langem erheblich Zeit ein. Eine Umgewöhnungsphase in der man wohl keine Zeit eingespart, kann ich aber niemandem nehmen.
    Mal sehen was draus wird.

    Ich hoffe die Videos sind einigermaßen frei von Schnitzern. Wenn fragen zu ihnen auftauchen, dann einfach in diesem Thread nachfragen.
    Sie sind mit "Microsoft Video 1" komprimiert, einfach weil sie dadurch bei guter Qualität ziemlich klein geworden sind. VLC hat mit dem Codec Probleme, aber meine anderen Abspielprogramme haben das Video ohne zu Murren abgespielt. Die ersten 10 Sekunden sind schwarz, nicht wundern.

    Im Anhang ist noch ein Bild, dass eine mögliche Szene in DiaDepp zeigt (das abgebildete Projekt ist ziemlich groß). Ich hoffe das Tool gefällt euch!
    Attached Thumbnails Attached Thumbnails Screenshot.jpg  
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts
    Last edited by Sektenspinner; 19.03.2011 at 16:12.

  2. Visit Homepage View Forum Posts #2 Reply With Quote
    Sword Master Thunderhawk's Avatar
    Join Date
    Oct 2006
    Posts
    970
     
    Thunderhawk is offline
    Das Tool erspart einem eine Menge Arbeit. Respekt und Danke.

  3. Visit Homepage View Forum Posts #3 Reply With Quote
    Benutzer, die ihr Benutzerkonto per E-Mail bestätigen müssen Player140's Avatar
    Join Date
    Jul 2004
    Posts
    3,111
     
    Player140 is offline
    Schön dass das Tool noch lebt. Nicht dass ichs produktiv benutzt hätte, aber es war doch eine Inspiration für neue Ideen und Ansätze im Zusammenhang mit meinem Wiki

  4. Visit Homepage View Forum Posts #4 Reply With Quote
    Exodus Sektenspinner's Avatar
    Join Date
    Jul 2004
    Location
    Karlsruhe
    Posts
    7,827
     
    Sektenspinner is offline
    Quote Originally Posted by hawk2hawk
    Das Tool erspart einem eine Menge Arbeit. Respekt und Danke.
    Quote Originally Posted by Player140 View Post
    Schön dass das Tool noch lebt.
    Schön, dass das Tool oder dessen Idee auch noch jemandem außer mir zu gefallen scheint.

    Falls noch Verbesserungsvorschläge existieren, nur her damit; und auch an konzeptioneller Kritik am gesamten Projekt bin ich interessiert.
    Ich habe ja schon bei der Vorgängerversion gemerkt, dass die Idee nicht gar so populär zu sein scheint, ein wenig würde mich aber auch interessieren woran es liegt.

    Aber unabhängig davon, ob und wenn ja, wie viele andere es tatsächlich zu nutzen: Die Videos zu erstellen hat Spaß gemacht, beim Programmieren hab ich einiges dazugelernt und die Verbesserungen (den Import) brauchte ich ohnehin, von daher hat es sich so und so gelohnt.
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  5. Visit Homepage View Forum Posts #5 Reply With Quote
    Krieger pike's Avatar
    Join Date
    Oct 2005
    Location
    Kelkheim (ist bei Frankfurt aM)
    Posts
    465
     
    pike is offline
    Hab mir gerade das erste Video angeguckt.
    Hab bis jetzt immer mit dem guten alten Texteditor gearbeitet, ohne irgendwelchen Schnickschnack. Aber ich muss schon zugeben, das DIADepp ganz interessant aussieht, ich denke ich werde es auch mal ausprobieren...

    Eine Frage habe ich allerdings (Also hab bis jetzt nur das 1. Video geguckt, kann sein, dass die Frage irgendwo in einem Video beantwortet wird)... Kann man mit dieser Import Funktion wirklich einfach alle Dialogskripte importieren und sie werden in dieses DIADepp Format umgewandelt? Klappt das?

  6. Visit Homepage View Forum Posts #6 Reply With Quote
    Benutzer, die ihr Benutzerkonto per E-Mail bestätigen müssen Player140's Avatar
    Join Date
    Jul 2004
    Posts
    3,111
     
    Player140 is offline
    Hab mir nun auch mal die Videos angeschaut, hab nur eine kleine Idee:

    Anscheinend benennst du deine Description oft so wie die erste Dialogzeile. Wie wäre es wenn sich das automatisch ergänzt/anbietet?
    Das könnte so aussehen dass du deine Description eingibst *tab* drückst, dann wird der Description-Text automatisch nach unten kopiert, allerdings so dass du ihn einfach überschreiben kannst (er also vorselektiert ist). Wenn du *enter* drückst wird der Text angenommen ansonsten überschrieben. Eine Ausnahme bildet die Taste *>* mit der du zusätzlich schnell ändern kannst von wem die Dialogzeile ausgeht.

    Die Videos wirken übrigens sehr professionell, angenehme Sprechgeschwindigkeit, keine Fehler, gute Aufnahmequalität... Kann man dich als Sprecher für Lernvideos angagieren?

  7. Visit Homepage View Forum Posts #7 Reply With Quote
    Exodus Sektenspinner's Avatar
    Join Date
    Jul 2004
    Location
    Karlsruhe
    Posts
    7,827
     
    Sektenspinner is offline
    Quote Originally Posted by pike View Post
    Hab mir gerade das erste Video angeguckt.
    Hab bis jetzt immer mit dem guten alten Texteditor gearbeitet, ohne irgendwelchen Schnickschnack. Aber ich muss schon zugeben, das DIADepp ganz interessant aussieht, ich denke ich werde es auch mal ausprobieren...

    Eine Frage habe ich allerdings (Also hab bis jetzt nur das 1. Video geguckt, kann sein, dass die Frage irgendwo in einem Video beantwortet wird)... Kann man mit dieser Import Funktion wirklich einfach alle Dialogskripte importieren und sie werden in dieses DIADepp Format umgewandelt? Klappt das?
    Im Prinzip ja. Ich habe es gerade mit allen Gothic DNDR Dialogen auf einmal probiert und es geht... nicht. Mist.
    Zwei Probleme: Erstens muss man noch ein paar "Fehler" beheben, nämlich zum einen solche Sachen wie:
    Code:
    if (condition) {
    	befehl();
    }
    if (condition) {
    	befehl();
    };
    Der Gothic Parser erlaubt seltsamerweise offenbar, dass das Semikolon nach dem ersten If-Block fehlt. DiaDepp erlaubt das nicht und lieft einen Syntaxerror beim Import. Da muss man also ein handvoll Scripte "verbessern".

    Dann gab es ein paar Situationen in denen Dialogen als "information" Attribut eine Funktion mit Rückgabewert (func int statt func void) zugeordnet wurde. Das ging beim Script von Morgan los. Das erlaube ich auch nicht, nicht nur weil es sinnlos ist, auch weil DiaDepp einen Dialog mit Rückgabewert (was soll das überhaupt sein?!) nicht hergibt.

    Was aber ein für mich noch überraschendes Problem ist (diese ganze Syntaxgeschichten sind zwar ärgerlich, aber nachvollziehbar) war, dass DiaDepp der Speicherplatz ausgegangen ist, nach 128MB war Sense. Jetzt muss ich entweder herausfinden, warum er keinen Speicher mehr bekommt (obwohl noch welcher verfügbar wäre) oder was bei allen Göttern überhaupt 128 MB Speicher frisst. Ich schätze ich gebe irgendetwas zu spät frei oder mein Speicher wird über die Maßen fragmentiert.

    Jedenfalls muss ich da nochmal drübersehen, das kann ich so auf keinen Fall lassen. Ich hätte den Import wohl an größeren Mengen testen sollen.

    Naja, gesetzt den Fall, dass ich das letzte Problem in den Griff bekomme bleibt folgendes zum Import von Scripten zu sagen:

    • Referenzen von außen werden ungültig. Ein Dialog DIA_NPC_HALLO hat nach dem Import nicht mehr diesen Namen. DiaDepp hat hier ein eigenes Benennungssytem (interne Referenzen also innerhalb der Menge der importierten Scripte bleiben gültig).
    • Manche Spezialfälle sind nach dem Import hässlicher anzusehen als sie es vorher waren. Manchmal kann es auch passieren, dass die Parsingreihenfolge nicht mehr korrekt ist, das heißt von Hand Knoten umgeordnet werden müssen. Dies ist aber mehr die Ausnahme.


    Dialoge Importieren ist jedenfalls nichts was in jedem Fall voll automatisch funktioniert. Man muss da je nach Situation selbst noch Arbeit hineinstecken. Das heißt nur "einfach mal so" alle Gothic Dialoge importieren ist nicht zu empfehlen, es sei denn man muss wirklich sehr intensiv mit ihnen arbeiten.

    Grundsätzlich funktioniert der Import allerdings. Im "Import" Video beleuchte ich das auch noch etwas näher. Morgen beschäftige ich mich nochmal mit dem Speicherproblem. Zu wenig Arbeitsspeicher? Das kann ja wohl nicht sein!

    Quote Originally Posted by Player140
    Anscheinend benennst du deine Description oft so wie die erste Dialogzeile. Wie wäre es wenn sich das automatisch ergänzt/anbietet?
    Das könnte so aussehen dass du deine Description eingibst *tab* drückst, dann wird der Description-Text automatisch nach unten kopiert, allerdings so dass du ihn einfach überschreiben kannst (er also vorselektiert ist).
    Ja, das klingt tatsächlich interessant. Ich denke da mal drüber nach, wie man sich das am besten integrieren lässt.
    Quote Originally Posted by Player140
    Eine Ausnahme bildet die Taste *>* mit der du zusätzlich schnell ändern kannst von wem die Dialogzeile ausgeht.
    Ist mir nicht ganz klar wie du das meinst. > und < sind auch sonst wichtige Zeichen, auch im Dialog, ich nutze sie etwa um Gefühle anzuzeigen (Bruno: <ängstlich> Oh nein, ein Schattenläufer! <erleichtert> Oh, zum Glück hat Gunther ihn getötet.). Oder meinst du nur in der Situation wo die erste Zeile gewählt werden soll? Da ist doch klar, dass der Spieler das spricht, wieso sollte man da umschalten wollen? Sofern die Zeile vom Npc ausgeht ist ja die Description unnötig.

    Die Videos wirken übrigens sehr professionell, angenehme Sprechgeschwindigkeit, keine Fehler, gute Aufnahmequalität... Kann man dich als Sprecher für Lernvideos angagieren?
    Hihi.
    Danke für die Blumen!
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts
    Last edited by Sektenspinner; 23.06.2009 at 01:20.

  8. Visit Homepage View Forum Posts #8 Reply With Quote
    Benutzer, die ihr Benutzerkonto per E-Mail bestätigen müssen Player140's Avatar
    Join Date
    Jul 2004
    Posts
    3,111
     
    Player140 is offline
    Quote Originally Posted by Sektenspinner View Post
    Ich denke da mal drüber nach, wie man sich das am besten integrieren lässt. Ist mir nicht ganz klar wie du das meinst. > und < sind auch sonst wichtige Zeichen, auch im Dialog, ich nutze sie etwa um Gefühle anzuzeigen (Bruno: <ängstlich> Oh nein, ein Schattenläufer! <erleichtert> Oh, zum Glück hat Gunther ihn getötet.). Oder meinst du nur in der Situation wo die erste Zeile gewählt werden soll? Da ist doch klar, dass der Spieler das spricht, wieso sollte man da umschalten wollen? Sofern die Zeile vom Npc ausgeht ist ja die Description unnötig.
    Nein, ich meine wenn der ganze Satz der dann unten eingefügt wurde u. noch markiert ist dann bekommt die Taste > eine Sonderfunktion und wechselt
    >>Erster Satz in <<Erster Satz und umgekehrt ohne den ganzen markierten Satz mit ">" bzw "<" zu überschreiben. Standard kann ja ">>" sein, einmal > oder < drücken wechselt dann zu <<.
    Letztendlich nur ne Workflow Sache für den ersten Satz.

  9. View Forum Posts #9 Reply With Quote
    Ehrengarde Nneka's Avatar
    Join Date
    Apr 2008
    Location
    Pforzheim
    Posts
    2,229
     
    Nneka is offline
    Huhu, ich bin echt begeistert von deinem Tool, welches das DialogeScripting echt um ein mehfaches beschleunigt. Ich denke, nun bin ich endlich vom SimpleDialog wegekommen. Wenn wir schon dabei sind, was mit fehlt sind "quicklinks" zu den Standartfunktionen von Gothic. Sprich B_Give, B_Create und wie beim SimpleDialog das CreateTopic:

    [Bild: diapepp.PNG]

    Das sind einfach Sachen die Ich beim Dialogscripting "griffbereit" brauche.
    Eventuell noch einen Lehrerdialog den dann über Rechtsklickt -> Neu -> Lehrerdialog wie alle andere Sachen aufgerufen werden kann. Ganz nett wären auch noch Zeilenangeben in der Codeansicht.

  10. View Forum Posts #10 Reply With Quote
    Veteran
    Join Date
    Mar 2009
    Posts
    511
     
    Hilfebrauch is offline
    also das tool is ja echt ma geil^^

    ich hab nur im moment net so viel zeit es zu benutzen da ich grad mit animationen beschäfftigt bin aber neben bei werd ichs ma benutzen und auch alle bugs und so natürlich melden^^

  11. View Forum Posts #11 Reply With Quote
    Antrum Mod Team Simon's Avatar
    Join Date
    Dec 2007
    Location
    Kiefersfelden
    Posts
    6,607
     
    Simon is offline
    Ich hab mir den Depp auch mal runtergeladen.
    Also erstmal Respekt, das Tool gefällt mir richtig gut!

    Aber die von Nneka. angesprochenen Dinge wären echt praktisch. Ich arbeite sonst auch immer mit dem SimpleDialog und ich könnte mir gut vorstellen umzusteigen.
    Aber ich brauche, wie Nneka. einfach quicklinks. ^^

    MfG Simon
    Risenmodkit
    "Du sagst mir jetzt, was du weißt, oder es gibt ein paar auf's Maul, Paul!"

  12. View Forum Posts #12 Reply With Quote
    Gothic Reloaded Mod EvilTwin's Avatar
    Join Date
    May 2006
    Location
    Erlangen
    Posts
    3,030
     
    EvilTwin is offline
    Quote Originally Posted by simon k View Post
    Ich hab mir den Depp auch mal runtergeladen.
    Also erstmal Respekt, das Tool gefällt mir richtig gut!

    Aber die von Nneka. angesprochenen Dinge wären echt praktisch. Ich arbeite sonst auch immer mit dem SimpleDialog und ich könnte mir gut vorstellen umzusteigen.
    Aber ich brauche, wie Nneka. einfach quicklinks. ^^

    MfG Simon
    wäre nicht sowas genau die im video angesprochenen makros?
    wenn ich mich recht erinnere hat sektenspinner zum panicpannel damals nachträglich sogar fertige macros rausgerückt^^

  13. Visit Homepage View Forum Posts #13 Reply With Quote
    Exodus Sektenspinner's Avatar
    Join Date
    Jul 2004
    Location
    Karlsruhe
    Posts
    7,827
     
    Sektenspinner is offline
    Edit: Mann, ist der Post lang geworden...

    Quote Originally Posted by Player140 View Post
    Nein, ich meine wenn der ganze Satz der dann unten eingefügt wurde u. noch markiert ist dann bekommt die Taste > eine Sonderfunktion und wechselt
    >>Erster Satz in <<Erster Satz und umgekehrt ohne den ganzen markierten Satz mit ">" bzw "<" zu überschreiben. Standard kann ja ">>" sein, einmal > oder < drücken wechselt dann zu <<.
    Letztendlich nur ne Workflow Sache für den ersten Satz.
    Ich verstehe den Nutzen nicht. Sofern der Npc den ersten Satz spricht ist der Dialog ein Important Dialog und braucht ergo keine description, also wird man das Feature in diesem Fall nicht nutzen. Was verstehe ich falsch? Wann würde man denn einen Description schreiben UND den generierten Text umdrehen wollen?

    Quote Originally Posted by Nneka. View Post
    Huhu, ich bin echt begeistert von deinem Tool, welches das DialogeScripting echt um ein mehfaches beschleunigt. Ich denke, nun bin ich endlich vom SimpleDialog wegekommen. Wenn wir schon dabei sind, was mit fehlt sind "quicklinks" zu den Standartfunktionen von Gothic. Sprich B_Give, B_Create und wie beim SimpleDialog das CreateTopic:

    [Bild: diapepp.PNG]
    Also Kurztasten zum Code zusammenklicken mache ich ungerne, weil ich das für eher nutzlos halte. Man schreibt schneller "Pay (200);" anstatt auf irgendwelche Buttons zu klicken und sich "bezahle 200 Gold" zusammenzuklicken. In den allermeisten anderen Fällen ist das ähnlich: Das relevante muss man so und so selbst schreiben und das irrelevante kann man abkürzen.
    Praktisch wäre allenfalls, wenn man an verschieden Stellen gleichzeitg Sachen ändern kann, zum Beispiel, wenn automatisch passende B_CloseTopic Einträge irgendwo erstellt werden, oder sonst etwas, aber dazu ist Panic Panel nicht ausgelegt, das wird vermutlich mehr Gebiet des Stampfers von Sumpfi sein.

    Solche Buttons mit "erster Eintrag", "letzter Eintrag" usw. sparen nur auf den ersten Blick Zeit. Ich schätze auf die Dauer würdest du mehr sparen, wenn du dir eine Funktion "FirstEntry", "LastEntry" oder meinetwegen ganz kurz: Lef (Log-Entry-First) Lel (Log-Entry-Last) erstellst. Man kann natürlich argumentieren, dass die Lesbarkeit hier den Bach runter geht, aber grundsätzlich bin ich der Auffassung, dass man bei Redundanzen (also viel Text für wenig Sinn) besser die Redundanz reduziert anstatt die Generierung von aufgeblähtem Code automatisiert.

    Außerdem möchte ich niemandem Vorschreiben wie er seine Log-Einträge zu verfassen hat. Etwa ist das TOPIC am Anfang ziemlich willkürlich und wer sagt eigentlich, dass B_LogEntry genutzt werden soll und nicht eine andere Funktion? Bei einem Button müsste ich aber genau das vorsehen.

    Wohler ist mir, wenn ich das generisch mache und jeder seine eigenen Kurzformen definieren kann. Vielleicht mit "strg + Leertaste" für ein Popupfenster auf den dann mit selbstdefinierten Kurztasten selbstdefinierte Texte gewählt werden können. Dann könnte dein "give_" etwa zu einem "Strg + Leertaste + G" und dein FirstEntry zu einem "Strg + Leertaste + F" werden. Die Einträge, und wie sie auf diesem Popupformular dann erscheinen könnte man in der Ini wählen, also Zeilenzahl, Spaltenzahl (des Buttonfelds) , Höhe, Breite (der Buttons) und die Einträge und Buchstaben dafür.
    Wäre das was? Dann wuselt das nicht auf dem Hauptformular herum und jeder kann sich genau die Buttons machen die er braucht. Der Preis wäre, dass man die Buttons nicht direkt anklicken kann; der Vorteil, dass alles rein über die Tastatur geht.
    Eventuell noch einen Lehrerdialog den dann über Rechtsklickt -> Neu -> Lehrerdialog wie alle andere Sachen aufgerufen werden kann.
    Lehrerdialoge können sehr verschieden sein. Wenn du einen Standard-Lehrer-Dialog willst, magst du vielleicht diese Funktion (ganz unten):
    Code:
    const int T_STR		= 1 << 0;
    const int T_DEX		= 1 << 1;
    const int T_MANA	= 1 << 2;
    const int T_1H		= 1 << 3;
    const int T_2H		= 1 << 4;
    const int T_BOW		= 1 << 5;
    const int T_CBOW	= 1 << 6;
    
    var int T_curr_Teach_Set; //Gelehrte Attribute / Talent
    var int T_curr_Info_inst; //C_INFO Instanz
    
    var int T_curr_atr_max; //Lehrer Grenze Attribute
    var int T_curr_tal_max; //Lehrer Grenze Kampftalent
    
    func void T_AddChoices()
    {
    	Info_ClearChoices (T_curr_Info_inst);
    	BACK_CHOICE (T_curr_Info_inst);
    	
    	if (T_curr_Teach_Set & T_CBOW)
    	{
    		Info_AddChoice (T_curr_Info_inst, B_LearnStringTalent (NPC_TALENT_CROSSBOW, 5), T_CBOW5);
    		Info_AddChoice (T_curr_Info_inst, B_LearnStringTalent (NPC_TALENT_CROSSBOW, 1), T_CBOW1);
    	};
    	if (T_curr_Teach_Set & T_BOW)
    	{
    		Info_AddChoice (T_curr_Info_inst, B_LearnStringTalent (NPC_TALENT_BOW, 5), T_BOW5);
    		Info_AddChoice (T_curr_Info_inst, B_LearnStringTalent (NPC_TALENT_BOW, 1), T_BOW1);
    	};
    	if (T_curr_Teach_Set & T_2H)
    	{
    		Info_AddChoice (T_curr_Info_inst, B_LearnStringTalent (NPC_TALENT_2H, 5), T_2H5);
    		Info_AddChoice (T_curr_Info_inst, B_LearnStringTalent (NPC_TALENT_2H, 1), T_2H1);
    	};
    	if (T_curr_Teach_Set & T_1H)
    	{
    		Info_AddChoice (T_curr_Info_inst, B_LearnStringTalent (NPC_TALENT_1H, 5), T_1H5);
    		Info_AddChoice (T_curr_Info_inst, B_LearnStringTalent (NPC_TALENT_1H, 1), T_1H1);
    	};
    	
    	if (T_curr_Teach_Set & T_MANA)
    	{
    		Info_AddChoice (T_curr_Info_inst, B_LearnStringAtt (ATR_MANA_MAX, 5), T_MANA5);
    		Info_AddChoice (T_curr_Info_inst, B_LearnStringAtt (ATR_MANA_MAX, 1), T_MANA1);
    	};
    	if (T_curr_Teach_Set & T_DEX)
    	{
    		Info_AddChoice (T_curr_Info_inst, B_LearnStringAtt (ATR_DEXTERITY, 5), T_DEX5);
    		Info_AddChoice (T_curr_Info_inst, B_LearnStringAtt (ATR_DEXTERITY, 1), T_DEX1);
    	};
    	if (T_curr_Teach_Set & T_STR)
    	{
    		Info_AddChoice (T_curr_Info_inst, B_LearnStringAtt (ATR_STRENGTH, 5), T_STR5);
    		Info_AddChoice (T_curr_Info_inst, B_LearnStringAtt (ATR_STRENGTH, 1), T_STR1);
    	};
    };
    
    func void T_CBOW5(){ B_TeachFightTalentPercent (self, other, NPC_TALENT_CROSSBOW, 5, T_curr_tal_max); T_AddChoices(); };
    func void T_CBOW1(){ B_TeachFightTalentPercent (self, other, NPC_TALENT_CROSSBOW, 1, T_curr_tal_max); T_AddChoices(); };
    
    func void T_BOW5(){ B_TeachFightTalentPercent (self, other, NPC_TALENT_BOW, 5, T_curr_tal_max); T_AddChoices(); };
    func void T_BOW1(){	B_TeachFightTalentPercent (self, other, NPC_TALENT_BOW, 1, T_curr_tal_max); T_AddChoices(); };
    
    func void T_2H5(){ B_TeachFightTalentPercent (self, other, NPC_TALENT_2H, 5, T_curr_tal_max); T_AddChoices(); };
    func void T_2H1(){ B_TeachFightTalentPercent (self, other, NPC_TALENT_2H, 1, T_curr_tal_max); T_AddChoices(); };
    
    func void T_1H5(){ B_TeachFightTalentPercent (self, other, NPC_TALENT_1H, 5, T_curr_tal_max); T_AddChoices(); };
    func void T_1H1(){ B_TeachFightTalentPercent (self, other, NPC_TALENT_1H, 1, T_curr_tal_max); T_AddChoices(); };
    
    func void T_MANA5(){ B_TeachAttributePoints (self, other, ATR_MANA_MAX, 5, T_curr_atr_max); T_AddChoices(); };
    func void T_MANA1(){ B_TeachAttributePoints (self, other, ATR_MANA_MAX, 1, T_curr_atr_max); T_AddChoices(); };
    
    func void T_DEX5(){ B_TeachAttributePoints (self, other, ATR_DEXTERITY, 5, T_curr_atr_max); T_AddChoices(); };
    func void T_DEX1(){	B_TeachAttributePoints (self, other, ATR_DEXTERITY, 1, T_curr_atr_max); T_AddChoices(); };
    
    func void T_STR5(){	B_TeachAttributePoints (self, other, ATR_STRENGTH, 5, T_curr_atr_max); T_AddChoices(); };
    func void T_STR1(){	B_TeachAttributePoints (self, other, ATR_STRENGTH, 1, T_curr_atr_max); T_AddChoices(); };
    
    //************************************
    //		Erstellt einen Lehrerdialog
    //************************************
    
    /**
    	Info_Inst: Dialoginstanz zu der hinzugefügt werden soll.
    	Teach_Set: Flags für die Attribute und Talente (siehe oben)
    	atr_max:   Attributslehr-Grenze (falls nur Talente gelehrt werden irrelevant)
    	tal_max:   Talentlehrgrenze (falls nur Attribute gelehrt werden sollen irrelevant)
    	
    	Beispiel: Bruno lehrt Stärke bis 150 und 2H bis 80.
    	B_TeachDialog (DIA_Bruno_Teach, T_STR | T_2H, 150, 80);
    **/
    
    func void B_Teach_Dialog (var int Info_Inst, var int Teach_Set, var int atr_max, var int tal_max)
    {
    	T_curr_Teach_Set = Teach_Set;
    	T_curr_info_Inst = Info_Inst;
    	
    	T_curr_atr_max = atr_max;
    	T_curr_tal_max = tal_max;
    	
    	T_AddChoices();
    };
    Ein Aufruf von B_TeachDialog (DIA_Bruno_Teach, T_STR | T_DEX | T_2H, 150, 80); sorgt (aus der Funktion DIA_Bruno_Teach_Info aufgerufen) dafür dass der Spieler Stärke, Geschick und Zweihand lernen kann (in einer und fünfer Schritten) bis zu den angegebenen Grenzen und alle Optionen (auch die "Zurück" Option) wird automatisch verwaltet.
    Ganz nett wären auch noch Zeilenangeben in der Codeansicht.
    Bringen zwar nicht viel, da sich nichts auf Zeilenangaben bezieht, aber schön wären sie, ja. Ich schau nochmal ob ich eine schnelle Möglichkeit finde, das zu implementieren. Da mein Richeditfeld die aber nicht mitbringt, wird das etwas komplizierter. Wenn ich Lust hab, mache ichs, sonst nicht. (hätte ich damals vor zwei Jahren richtig programmieren können, hätte ich mir eine bessere Textfeldkomponente rausgesucht, ich kriegs nichtmal die Tabgröße eingestellt und das Syntaxhighlighting war ein Flacker-Krampf).

    Quote Originally Posted by simon k View Post
    Ich hab mir den Depp auch mal runtergeladen.
    Also erstmal Respekt, das Tool gefällt mir richtig gut!

    Aber die von Nneka. angesprochenen Dinge wären echt praktisch. Ich arbeite sonst auch immer mit dem SimpleDialog und ich könnte mir gut vorstellen umzusteigen.
    Aber ich brauche, wie Nneka. einfach quicklinks. ^^

    MfG Simon
    Siehe oben. Wärst du mit einem solche Popupfenster mit beliebig vielen Buttons, die du selbst wählen kannst einverstanden?
    Tastenkombination ruft das Fenster auf, mit der passenden Taste oder per klick wird ein Button gewählt.

    Quote Originally Posted by EvilTwin View Post
    wäre nicht sowas genau die im video angesprochenen makros?
    wenn ich mich recht erinnere hat sektenspinner zum panicpannel damals nachträglich sogar fertige macros rausgerückt^^
    Hab ich hier auch. *klick*. Dürften noch fast die selben sein wie damals.

    Quote Originally Posted by pike
    Kann man mit dieser Import Funktion wirklich einfach alle Dialogskripte importieren und sie werden in dieses DIADepp Format umgewandelt? Klappt das?
    So, zweiter Anlauf: Ja, es klappt.
    Ich habe mich noch ein bisschen mit Gothic und manchen eigentümlichen Formulierungen umhergeschlagen, manche Fehler in Warnungen umgebaut und, weil es sonst viel zu lange gedauert hätte, manche all zu naiven Lösungsstrategien verbessert, sodass sie besser skalierbar sind. Außerdem habe ich ein paar mehr Sonderbehandlungen hinzugefügt, die in manchen Fällen zu einem schöneren Importergebnis führen. Die DNDR Dialoge ließen sich jetzt, abgesehen von einer Parserunstimmigkeit (siehe letzten Post) importieren.
    Ich habe mal alle Warnungen und sonstige Abfragen weggedrückt (was man eigentlich nicht tun sollte) und das Ergebnis mal hochgeladen (siehe Anhang). Die Datei kann einfach mit DiaDepp geöffnet werden.
    Es schaut eigentlich ganz gut aus, aber einige Tücken gibt es sicher noch
    Da ich demnächst den Import auch in der Praxis verwenden werde, kann es gut sein, dass sich die Funktionalität auch noch ein wenig weiter verbessert.

    Der Export ist leider noch nicht so schnell wie man es für so große Projekte wie das ganze Gothic 2 braucht. DiaDepp hat für die Gothic Dialoge bestimmt 5 Minuten verbraten. Bei kleinen bis mittleren Projekten ging der Export immer so schnell, dass ich nichtmal einen Fortschrittsbalken dafür vorgesehen habe. Das sollte ich wohl ändern.

    Im Anhang auch nochmal eine neue Version, die jetzt aus meinen Verbesserungen am Importer hervorgegangen sind. Da ich ein paar Änderungen an ewig alten Prozeduren aus dem Programmkern vorgenommen habe (ohne sehr viel zu testen), würde ich erstmal nicht empfehlen die Version zu benutzen, es sei denn man braucht eine bessere (von Performanz und Qualität her) Importfunktion.
    Attached Files
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  14. View Forum Posts #14 Reply With Quote
    Antrum Mod Team Simon's Avatar
    Join Date
    Dec 2007
    Location
    Kiefersfelden
    Posts
    6,607
     
    Simon is offline
    Siehe oben. Wärst du mit einem solche Popupfenster mit beliebig vielen Buttons, die du selbst wählen kannst einverstanden?
    Tastenkombination ruft das Fenster auf, mit der passenden Taste oder per klick wird ein Button gewählt.
    Ja vollkommen.


    Im Anhang auch nochmal eine neue Version, die jetzt aus meinen Verbesserungen am Importer hervorgegangen sind. Da ich ein paar Änderungen an ewig alten Prozeduren aus dem Programmkern vorgenommen habe (ohne sehr viel zu testen), würde ich erstmal nicht empfehlen die Version zu benutzen, es sei denn man braucht eine bessere (von Performanz und Qualität her) Importfunktion.
    Lohnt es sich dann nicht eher zu warten, bis du eine, sagen wir mal, endgültige Version rausbringst? Dauert noch ein bischen wahrscheinlich, aber ich würd sie mir dann sicher runterladen.

    MfG Simon
    Risenmodkit
    "Du sagst mir jetzt, was du weißt, oder es gibt ein paar auf's Maul, Paul!"

  15. Visit Homepage View Forum Posts #15 Reply With Quote
    Exodus Sektenspinner's Avatar
    Join Date
    Jul 2004
    Location
    Karlsruhe
    Posts
    7,827
     
    Sektenspinner is offline
    Quote Originally Posted by simon k View Post
    Lohnt es sich dann nicht eher zu warten, bis du eine, sagen wir mal, endgültige Version rausbringst? Dauert noch ein bischen wahrscheinlich, aber ich würd sie mir dann sicher runterladen.
    Eine endgültige Version gibt es erst, wenn ich mit dem Modden aufhöre, bis dahin kann es immer sein, dass ich noch daran herumwerkel.

    Die Version im Einleitungspost ist ziemlich gut getestet und wird im groben auch so bleiben. Die Importfunktion ist das einzige, was im Moment recht stark im Wandel ist, sie ist aber nur ein Nebenfeature, dessen Gebrauch auch nicht zum normalen Arbeitsfluss gehört. Das heißt auf neue Versionen zu warten, ist nur sinnvoll, wenn du den Import unbedingt benötigst (oder zum Beispiel auf das Buttonfenster wartest). Es ist nicht so, dass noch wesentliche Verbesserungen in anderen Bereichen zu erwarten sind. Zumindest habe ich nichts Großes mehr geplant.

    Die Version die ich in meinem letzten Post angehängt habe ist mehr als Quickfix zu verstehen, damit die Importfunktion auch wirklich fähig ist, alle Gothic Dialoge zu importieren. Nicht, dass das total wichtig wäre, ich wollte den Makel "einfach nicht auf mir sitzen lassen".
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  16. View Forum Posts #16 Reply With Quote
    Antrum Mod Team Simon's Avatar
    Join Date
    Dec 2007
    Location
    Kiefersfelden
    Posts
    6,607
     
    Simon is offline
    OK danke für die Antwort.

    Du schreibst mich gefälligst an, wenn du doch eine große Änderung vornimmst, ist das klar??!!
    Risenmodkit
    "Du sagst mir jetzt, was du weißt, oder es gibt ein paar auf's Maul, Paul!"

  17. Visit Homepage View Forum Posts #17 Reply With Quote
    Ehrengarde VarusBiker's Avatar
    Join Date
    Aug 2006
    Posts
    2,178
     
    VarusBiker is offline
    Die neue Version kommt gerade rechtzeitig. Fahre demnächst wieder ne Woche weg und da kann ich nur nen alten Windows 95 Labtop benutzen. PanicPanal war das einzige Tool das auf dem Laptop lief. Hoffe der DiaDepp läuft da auch druff läuft!

    Schön das dein Tool nicht zustaubt!

  18. View Forum Posts #18 Reply With Quote
    Deus Oparilames's Avatar
    Join Date
    May 2004
    Location
    ex contrariis
    Posts
    10,848
     
    Oparilames is offline
    *StaubMitSpachtelAbkratze*
    Hi.
    Durch "Zufall" beschäftige ich mich gerade mit von der Comunity erstellten Tools und arbeite mich gerade in DiaDepp ein. Vorweg:
    Die Videos gefallen mir sehr, das Tool scheint nützlich zu sein.

    Ich habe drei Fragen und eine Bitte
    Frage 1) Wie kommt der Eintrag "++#INVALID:Gelöscht!#" zustande? (Ich lösche zur Zeit Einträge noch per ENTF-Taste)
    Frage 2) Darf ich dich zu dem .pp-Dateiformat befragen [vielleicht ist das auch garnicht nötig und ich bin gerade nur zu unkonzentriert um das Format zu verstehen]? (Weiteres dann per PN; Die folgende Frage hat indirekt damit zu tun.)
    Frage 3) Solche Ablürzungen wie das "<<" in DiaDepp kann man nicht selbst einbauen, richtig? (Die Makros sind ja nur einfache Scriptfunktionen, die DiaDepp/Gothic verwendet) Ich meine wirkliche Textersetzungsmakros.
    Bitte) Wäre es möglich beim Erstellen (genauergesagt bei der Benennung) von Ordnern, Objekten usw. im linken Bereich der GUI den Erstellungsprozess per Druck auf ESC abzubrechen?

    Ansonsten ein klitzekleiner Verbesserungsvorschlag:
    1) Wenn man in einem Dialog oder einer Chocie die Description weglässt UND der erste AI_Output-Befehl bzw. der erste AI_Output-kürzel ein vom Helden ausgehender Output ist, wird der erste Satz - bzw. falls der Satz zu lang ist die ersten paar Zeichen (bis zum ersten Komma oder eben die ersten ca. 30 Zeichen) - der Ausgabe als Description festgelegt.

    Ich habe mir bisher nur die Videos angesehen (schönes Schlusswort übrigens ) und habe selbst noch fast nichts mit DiaDepp getan, daher kann ich so wenig Kritik äußern.

    Allerdings habe ich auch noch längst nicht alles verstanden, was du in den Videos versucht hast zu erklären. Das mag daran liegen, dass es eine Dreiviertelstunde vor 4:00 ist oder einfach daran, dass ich mit solchen Ausdrucksweisen, wie du sie verwendet hast, nicht oft in Kontakt komme.
    Wie auch immer, schöne Arbeit - das Tool werde ich wohl verwenden. (Zumindest für Dialoge)

    P.S.: Darf ich einen Satz aus deinem Video zitieren, wenn ich demnächst ein Tool veröffentliche?

    mfg Sumpfopa
    Oparilames nachdem er seinen Gesellenbrief erhalten hat:
    »Das war's mit dir, du Mistvieh!«
    Last edited by Oparilames; 05.02.2010 at 03:31.

  19. Visit Homepage View Forum Posts #19 Reply With Quote
    Exodus Sektenspinner's Avatar
    Join Date
    Jul 2004
    Location
    Karlsruhe
    Posts
    7,827
     
    Sektenspinner is offline
    Quote Originally Posted by Oparilames View Post
    Frage 1) Wie kommt der Eintrag "++#INVALID:Gelöscht!#" zustande? (Ich lösche zur Zeit Einträge noch per ENTF-Taste)
    Das ist gewollt so.
    Wenn du einen Knoten, zum Beispiel eine Dialogoption referenzierst, aber dann diese Dialogoption löschst wird überall dort, wo die Option referenziert war, "INVALIDelöscht!" anstelle der ursprünglichen Referenz (auf das jetzt nicht mehr existierende Ziel) stehen.

    Das weist also auf eine Inkonsistenz aufgrund einer Löschoperation hin.

    Frage 2) Darf ich dich zu dem .pp-Dateiformat befragen [vielleicht ist das auch garnicht nötig und ich bin gerade nur zu unkonzentriert um das Format zu verstehen]? (Weiteres dann per PN; Die folgende Frage hat indirekt damit zu tun.)
    Ist in meinen früheren Programmierzeiten entstanden. Das Format ist essentiell eine Textdatei und nicht mal vollständig robust gegenüber böswilligen Eingaben in die Textfelder (ein Steuerzeichen wird nicht escaped, das ist aber noch keinem aufgefallen).
    Du kannst eine pp Datei in einem Texteditor öffnen um dir ein Bild zu verschaffen. Es werden in einer wohldefinierten Reihenfolge alle Informationen als Strings abgelegt.
    Frage 3) Solche Ablürzungen wie das "<<" in DiaDepp kann man nicht selbst einbauen, richtig? (Die Makros sind ja nur einfache Scriptfunktionen, die DiaDepp/Gothic verwendet) Ich meine wirkliche Textersetzungsmakros.
    Das ist richtig. Es ist nicht möglich die Sprache zu erweitern.
    Bitte) Wäre es möglich beim Erstellen (genauergesagt bei der Benennung) von Ordnern, Objekten usw. im linken Bereich der GUI den Erstellungsprozess per Druck auf ESC abzubrechen?
    Ich sehe ein, dass es etwas ungeschickt ist, dass man die Erstellung eines Knotens nicht abbrechen kann sondern den Knoten fertig einfügen und dann wieder löschen muss. Falls es eine neue Version geben wird, werde ich das berücksichtigen.

    Ansonsten ein klitzekleiner Verbesserungsvorschlag:
    1) Wenn man in einem Dialog oder einer Chocie die Description weglässt UND der erste AI_Output-Befehl bzw. der erste AI_Output-kürzel ein vom Helden ausgehender Output ist, wird der erste Satz - bzw. falls der Satz zu lang ist die ersten paar Zeichen (bis zum ersten Komma oder eben die ersten ca. 30 Zeichen) - der Ausgabe als Description festgelegt.
    Das wäre eine sinnvolle Erweiterung ja. Wobei der umgekehrte Weg vermutlich noch sinnvoller wäre:
    Falls gerade eine description eingegeben wurde und der Anweisungsblock selbst noch leer ist, könnte man eben jene description als Dialogzeile für den Helden generieren. Auch hier gilt: Wenn es eine neue Version gibt, werde ich versuchen das einzubauen.

    Um ehrlich zu sein, habe ich aber zur Zeit nicht vor DiaDepp weiter zu verbessern, nicht nur, weil er kaum benutzt wird (und ich mich daher nicht wirklich moralisch verpflichtet fühle ihn nach Kräften auszubauen), sondern auch weil er softwaretechnisch grauenhaft zu warten ist. Gerade in dem Code, der über zweieinhalb Jahre alt ist (zu dem Zeitpunkt konnte ich zwar Programmieren, aber verstand nichts von Softwaretechnik) fühlt man sich als Programmierer wie ein Elefant im Porzellanladen. Eine falscher Schritt und alles geht kaputt.

    Es gibt kaum objektorientierung, kein vernünftiges MVC, von überall wird auf alles zugegriffen, alles hängt mit allem zusammen und fast alles ist in einer riesen Datei.

    Als junger Quick & Dirty Coder will man das nicht glauben, aber es stimmt: Softwaretechnik ist das Chaosverhütungsmittel für Programmierer. Es nervt beim Coden, aber erspart einem Monate später viel größeren Ärger, den das unwartbare Code-Monster bereitete, das man sonst in die Welt gesetzt hätte.

    P.S.: Darf ich einen Satz aus deinem Video zitieren, wenn ich demnächst ein Tool veröffentliche?
    Klar, warum auch nicht.
    Für Spieler:
    Velaya # Velaya in English # Exodus Demo # Irrwichtel
    Tools für Modder:
    DiaDepp # DOPA-PARTER # zSlang
    Scripte für Modder:
    Ikarus Skriptpaket # Floats # Broadcasts

  20. View Forum Posts #20 Reply With Quote
    Dea
    Join Date
    Jul 2007
    Posts
    10,173
     
    Lehona is offline
    Ist es evtl. möglich, dass du "dynamische" Textmacros einbaust? Hier mal ein Beispiel (welches mehr sagt als tausend Worte) :
    Code:
    //! textmacro suicide takes INSTANCE
    (Hlp_GetNPC($INSTANCE$)).attribute[ATR_HITPOINTS] = 0;
    Print((Hlp_GetNPC($INSTANCE$)).name);
    //! endtextmacro
    
    //! runtextmacro suicide(PC_Hero)
    //! runtextmacro suicide(myInstance)
    wird zu:

    Code:
    (Hlp_GetNPC(PC_Hero)).attribute[ATR_HITPOINTS] = 0;
    Print((Hlp_GetNPC(PC_Hero)).name);
    
    (Hlp_GetNPC(myInstance).attribute[ATR_HITPOINTS] = 0;
    Print((Hlp_GetNPC(myInstance)).name);
    Natürlich nur, wenn es nicht zu viel Aufwand ist. Das ganze vereinfacht bzw. verkürzt teilweise Code wirklich.

Page 1 of 2 12 Last »

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide