[Tutorial] Dialoge einfach schreiben mit CHAIN

Dieses Thema im Forum "Modding Forum" wurde erstellt von Jastey, 7. April 2020.

  1. Jastey

    Jastey Matron Modderholic

    Registriert seit:
    Mai 2004
    Beiträge:
    7.767
    Zustimmungen:
    185
    Beim Schreiben von Dialogen möchte man manchmal auch schnell mal andere NPC etwas einwerfen lassen, während der eigentliche Gesprächspartner zum Beispiel mit dem HC spricht.

    Einwürfe von NPCs sind eigentlich ganz einfach. Dazu bietet sich die CHAIN an. Die einfachste CHAIN ist ein Banter zwischen zwei NPC ohne Antwortmöglichkeiten des HC. Dazu findet man auch Beispiele in der Liesmich der WeiDu.

    Zu Beginn noch die nötigen Trigger. Da der NPC nur sprechen soll, wenn er in der Gruppe ist, in der Nähe ist und reden kann, brauchen wir also im Prinzip drei Trigger:
    -InParty("npcname")
    -See("npcname") oder alternativ Detect("npcname")
    -und der Trigger, ob der NPC sprechen kann: hierzu hat CamDawg einen Trigger definiert, der alle Fälle ausschließt, die das Sprechen verhindern würden, also stumm, bezaubert, betäubt, ... etcpp.
    Dieser ist !StateCheck("mynpc",CD_STATE_NOTVALID)

    Um ihn zu verwenden, tut Ihr folgendes in die tp2 Eurer Mod, zu Beginn oder in den ALWAYS Block:

    Code:
      /* STATE.IDS patching to ToB - thanks, Cam, if you read it */
      /* adds custom IsValidForPartyDialogue state */
      APPEND ~STATE.IDS~ ~0x80101FEF CD_STATE_NOTVALID~ UNLESS ~CD_STATE_NOTVALID~
    Achtung. Imoen ist in allen Spielen eine Extrawurst, wenn Ihr für mehrere Plattformen (BGT/EE) schreibt. Ich verwende hier die Crossplattform-Codes, die Ihr wie gesagt über die cpmvars.tpa einlesen müsst, um sie in der Mod zu verwenden.


    1. Einfache CHAIN, zwei NPC sprechen miteinander:

    Beispiel: Banter zwischen Ajantis und Rasaad, der von Ajantis ausgeht.

    2. Zwei NPC sollen miteinander sprechen, aber der HC soll eine Antwortmöglichkeit haben.

    Nehmen wir dafür einfach das Ajantis-Rasaad Beispiel und erweitern es um Antwortmöglichkeiten. Dann sieht es so aus:


    Das ist die Kurzversion: nach der Antwort des HC hört der Dialog auf. Im nächsten Beispiel antworten die NPC darauf noch einmal:
    Das kann man beliebig weiterspinnen. Sagen wir mal, Rasaad soll am Ende auch nochmal was sagen, nachdem Ajantis auf den Einwurf des Hc reagiert hat, und Imoen kann ihren Mund eh nie halten. Und dafür nehmen wir natürlich wieder eine CHAIN!


    3. Weitere Möglichkeiten für CHAIN: Gespräch mehrerer NPC und dem HC

    Im letzten Beispiel wurde ja schon deutlich, welche Möglichkeiten es gibt. NPCs reden miteinander, Gruppen-NPCs machen einen Einwurf, der HC darf auch was sagen und dann reden NPCs wieder miteinander. Die Elemente, die ich dabei verwende, sind APPEND und CHAIN - und zwar ordne ich sie im d-File so an, dass man den Dialog gut lesen kann. Dem Installer ist es egal, ob er beim Kompilieren hin- und herhüpft. Mir beim Lesen ist es das nicht, und unübersichtliche d-Files machen einem das Leben beim Debuggen und Weiterschreiben schwer.

    Zum Abschluss noch folgendes Beispiel: Ein neuer NPC (z.B. Euer!), der sich der Gruppe vorstellt und ein Gruppenmitglied soll etwas dazu sagen, bevor der HC seine Antworten geben kann.


    4. Weitere Möglichkeiten für CHAIN: NPC soll sich auf verschiedene Begebenheiten beziehen

    CHAIN bietet aber noch mehr Möglichkeiten. Z.B ist es eine sehr einfache Art, den HC zu ganz verschiedenen Begebenheiten in einem Gespräch Bezug nehmen zu lassen. Nehmen wir mal das Beispiel, ob ein bestimmtes Event bereits geschehen ist oder nicht. Das fragen wir mit einer selbstgesetzten Variable "Global("xxWichtigesEventPassiert","GLOBAL",1)" ab. Die Unterhaltung mit dem NPC sieht dann so aus:

    Dies kann in allen Dialogen für alle möglichen Trigger / Begebenheiten / Romanzenstatus / Rasse/Klasse/Kit/Charismalevel der HC verwendet werden. Das ist wirklich Klasse, da man dadurch in den Dialogen auf viele vorher getane oder gesagte Dinge (sofern man sie detektieren kann) Bezug nehmen kann, was die Dialoge sehr viel immersiver macht - und es ist kein bisschen aufwändig, das zu programmieren!

    (Dieses Tutorial soll die Prinzipien verdeutlichen. Es könnten sich also einzelne Syntaxfehler darin befinden, die erst beim Kompilieren auffallen. C# ist mein persönliches Präfix. Bitte reserviert Euch Euer eigenes in der Präfixliste.)
     
    Zuletzt bearbeitet: 7. April 2020
    Edraderes und Acifer gefällt das.
  2. Acifer

    Acifer Senior Member

    Registriert seit:
    Apr. 2019
    Beiträge:
    763
    Zustimmungen:
    52
    Etwas, das ich die ganze Zeit schon sagen wollte: Das ist ein ganz tolles Tutorial!

    Mein Problem bisher war zum Beispiel, dass ich nicht genau wusste, wie ich in einer bestehenden Chain Antwortoptionen des Spielers einbringen konnte und die Unterhaltung zwischen den NPCs dennoch weiterläuft.
    Sodass ich nach der ersten Antwort des HC dann wieder per 100x EXTERN im PingPong-Verfahren zwischen den NPCs hin- und hergesprungen bin.
    Dein Ansatz, nach der ersten Antwort des Spielers einfach eine neue Chain zu starten, kam mir gar nicht in den Sinn. :hae::cool::up:!
    So liest sich der Dialog natürlich dann absolut flüssig und man weiß auch nach einem halben Jahr noch, wo was im D-file weitergeht.
    Danke für Deine wertvollen Erläuterungen. :)
     
    Jastey gefällt das.
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden