[Tutorial] Wie bastle ich eine Modifikation?

Seradin

Kleine Drow
Registriert
20.09.2002
Beiträge
1.386
So dann beginne ich mal.
Ich werde versuchen anhand eines neuen NPC die Erschaffung eines solchen zu zeigen. Das ganze mache ich mit WeiDu, da damit eine einfache Integation ins Spiel möglich ist. Ihr findet alles was ich hier vorstelle und noch vieles mehr im Resourcen-Topic.

1. Tools
Um richtig basteln zu können braucht man auch eine entsprechende Ausrüstung, deshalb hier eine kleine Auflistung der Programme die ich benutzen werde.
  • Als erstes würde ich den ConText empfehlen. Er ist ein Editor, was bei ihm recht schön ist, es gibt eine Syntax-Unterstützung für WeiDu. Zur Unterstützung braucht man noch diesen WeiDU-Highlighter (zip-Datei). Mit diesem Programm werde ich die Dialog-Datein schreiben.
  • Für die Skripte der NPC benutze ich immer NearInfinity. Dies ist ein Browser/Editor auch teilweisse für NWN und IWD2 .
    Man kann Skripte auch mit WeiDu compilieren, was dann Sinn macht, wenn man Strings in diesen verwendet. Die Strings kann man dann ganz einfach mit tra-Dateien einbinden. Ohne Strings sind compilierte Skripte besser.
  • Zum schnellen testen und auch zur der Creature-Datei benutze ich den ShadowKeeper. Er ist auch ein Editor, aber speziell für BG2.
Dies sind natürlich nur Vorschläge und jeder sollte die Programme benutzen, die ihm liegen. Weitere Programme zum Arbeiten mit der Engine findet man bei TeamBG.

2. Foren
Nun noch zu einigen Foren in denen sich mit dem Basteln von Modulen (Mods) beschäftigt wird. Ich nenne hier nur zwei, aber es gibt natürlich noch einige weitere, die man auch im Ressourcen-Topic findet.

3. Tutorien
So zum Schluss verweisse ich noch auf maus NPC-Tutorial, aber auch hier gibt es viele weitere im Netz, die meisten sind aber englischsprachig.

4. NPC-Module
Hier noch eine kleine Tabelle mit den schon gemachten oder gerade in Abreit stehenden NPC.
  • NPC: Klasse/Kit, Rasse, Gesinnung, Bastler
  • Drizzt: Waldläufer, Drow, ?G, D.Klingauf/Octavian (Rosenranken)
  • Vanim: Meuchelmörder, Mensch?, NB?, maus
  • Roar: Mönch, Mensch, ?, maus
  • Teddy: Barbar, Halb-Ork, ?, maus
  • SilverStar: Meuchelmörderin, Elf, NB, ?
  • Valen: Kämpfer/Diebin, Vampir, CB, ?
  • Kelsey: Hexer, Mensch?, ?, ?
  • Tashia: Hexe, Elf, ?, ?
  • Solaufein: Kämpfer/Magier?, Drow, ?, Weimar
  • Elvanshalee: Klerikerin, Drow, CG, Seradin
  • Fedegar: Barbar, Mensch, NG, Seradin
  • Cynthia: Hasardeurin, Mensch, N, Ozzy
  • Ozzy: Magierkiller, Mensch, N, Ozzy
  • Chiara: Kämpfer(Dieb)in, Vampir, ?G, Leute aus diesem Forum

5. Lexikon der Module-Bastler
  • String: Mit einem String wird eine Kette von Zeichen bezeichnet. Man verwendet den Begriff haupsächlich für die Sätze in Dialogen.
  • Skript: Mit einem Skript werden die Handlungen eines NPC gesteuert, wenn der Spieler keinen Einfluss darauf haben soll, was passiert. In einem Skript können zum Beispiel die EP-Anpassung bei der Aufnahme stehen, oder aber auch wie sich ein NPC in einer Situation im Kampf verhalten soll. Die letztgenannten kennt man als künstliche Inelligenz (KI) schon aus dem Spiel.
  • dlg-Dateien: dlg bedeutet Dialog. Hier steht die Struktur der Dialoge, wobei die Strings in die Dialog.tlk und DialogF.tlk ausgelager sind.
  • d-Dateien: Bei WeiDu schreibt man die Dialogsyntax in die d-Dateien, die dann mit hilfe von WeiDu compiliert werden.
  • compilieren: Man schreibt alles in einem Syntax und dieser wird dann von einem Programm in die 'Spielsprache' übersetzt (compiliert).
  • Syntax: Die Grammatikregeln einer Sprache.
  • IF-Anweisung: Hiermit gibt man an was das Programm tun soll, wenn eine bestimmte Vorrausetzung erfüllt ist. IF ~VORRAUSETZUNG~ THEN... bedeutet nichts weiter als WENN die VORRAUSETUNG erfüllt ist, DANN...
  • Dialog.tlk und DialogF.tlk: Hier stehen die Strings der Dialoge. In der Dialog.tlk stehen die Strings für einen männlichen Hauptcharakter und in der DialogF.tlk diejenigen für einen weiblichen. Bei einer Installation mit WeiDu werden diese Dateien ergänzt.
  • chr-Datei: Hier stehen alle Informationen eines Spieler-Charakters. (Charakter-File)
  • cre-Datei: Hier stehen alle Informationen eines Nicht-Spieler-Charakters. (Creature-File)
  • d-Datei: Hier steht der Syntax für einen Dialog
  • BEGIN: Anfang von Dialogen, Zwiegesprächen ...
  • EXIT: Dialog beendet
  • END: Ende von Zwiegesprächen ...
  • tra-Datei: Dateityp, in dem die Strings für Dialoge stehen, wenn der MOD in verschiedenen Sprachen existiert. Welche tra-Dateien gelten, werden bei der Installation festgelegt.
  • P-Datei: Umgangssprachlich für den Rauswurf- und Wiederaufnahmeteil.
  • exe-Datei: Programm zum Ausführen der Installatin/Deinstallation/Reinstallation
  • tp2-Datei: Struktur (Rezept) der Installation

6. Wie mache ich ein NPC-Modul

a) Das erzeugen eines Creature-files

[flüster]Das Beispiel ist kursiv geschrieben.[/flüster]

Was bracht man alles?
  • eine Idee
  • das Baldurs Gate 2 Spiel
  • den ShadowKeeper
Was muss man tun?
Man sollte sich als erstes klar werden, was man eigentlich machen will und wie der Charakter grob aussehen soll. Ob der neue NPC nun nur einer wird, der in die Gruppe aufgenommen werden kann, oder ob man einige Quests und vielleicht sogar eine Romanze zu ihm schreibt, ist für den Anfang ganz egal. Ich würde auch vorschlagen, erst einen zu erstellen, der nur in die Gruppe aufgenommen wird, und wenn man danach immer noch Lust hat, ihn langsam ausbaut.

Wenn man nun also seinen Charakter sich etwas überlegt hat, startet man das Baldurs Gate 2 Spiel und zwar Schatten von Amn im Mehrspieler Modus. Dort betätigt man den 'Charakter generieren' Button. Nun ist man im Charakter-Erstellungs-Bildschirm, den man ja kennen sollte. Jetzt generiert man sich seinen Charakter grob. Damit meine ich, man muss nicht würfeln bis die Attribute so sind wie man sie gerne hätte, das kann man später noch. Nach dem Einstellen
auf den Button 'Exportieren' klicken und einen unverwechselbaren Namen abspeichern. So, nun kann man das Spiel wieder schliessen.

Nun startet man den ShadowKeeper (SK). Sollte es noch nicht installierte sein, so sollte man sich das Programm runter laden und die exe-Datei starten.
Um die gespeichte Datei zu bearbeiten, öffnet man 'File' und in dort dann 'Open Character File...'. Nun öffnet sich ein Fenster in dem man seinen Charakter suchen muss. Wenn man ihn gefunden habt, klickt man auf den Namen und markiert dadurch die Datei. Nun betätigt man den Button 'OK'. Nun sieht man die chr-Datei seines Charakters. Hier kann man nun einiges ändern.
WICHTIG: Man sollte nie die Stufe des Charakters ändern. Wenn man ihm eine höhere Stufe geben will, dann sollte man dies immer über 'Experience' (Erfahrungspunkte) tun und dann im Spiel den Charakter aufsteigen lassen.
So nun aber zu den einzelnen Teilen. Unter 'Abilities' findet man:
  • Attribute {hier kann man diese nun einstellen wie man sie gerne hätte}
  • 'Base HP' (Basis Trefferpunkte) {dies sind die HP ohne Konstitutionsbonus, dieser kommt vom Spiel automatisch dazu}
  • 'Current HP' (momentane Trefferpunkte){auch hier fehlt der Konstitutionsbonus und kommt erst durch's Spiel dazu}
  • 'Base AC' (Basis Rüstungsklasse) {dieser Wert gibt die natürliche RK ohne Geschicklichkeitsbonus an, der auch wieder erst vom Spiel dazu gebracht wird}
  • 'THAC0' (ETW0) {dies ist der ETW0 ohne irgendwelche Modifier, diese kommen erst durchs Spiel}
  • 'Reputation' (Ruf)
  • 'Attacks' (Angriffe) {Angriffe ohne Modifier, diese kommen erst durchs Spiel dazu}
  • 'Experience' (Erfahrungspunkte)
  • 'Exp for Kill' (Erfahrungspunkte für's Töten) {hier sollte bei einem Gruppen NPC eine Null stehen}
  • 'Gold' {damit der NPC nicht nur wegen seines Goldes aufgenommen wird, hier eine Null eintragen}
  • 'Levels' (Stufen) {dran denken, nicht selber ändern}
Unter 'Charakteristics' findet man nochmal eine Aufschlüsselung der Merkmale wie zum Beispiel das Geschlecht des NPC, unter 'Appearance' die eingestellten Farben und die Körperstruktur im Spiel, dann gibt es noch 'Inventory', wo man das Inventar einstellen kann. Diese Teile sollte man bis auf die Kleiderfarbe und die Körperstruktur so lassen, wie es ist. Höchstens natürlich man wollte
eigentlich einen ganz anderen Charakter erstellen. Die nächsten vier Seiten, 'Memorization' (wieviel ist von welcher Zauberstufe memoriert; nicht mit spielen), 'Innate' (Innate-Fähigkeiten, wie z.B Fallen stellen, Wunden heilen; nicht mit spielen), 'Wizard' (bekannte Zauber des Magiers und Hexers) und 'Priest' (Priester- und Druidenzauber) sind für spells (Zauber) da. Bei 'Saving Throws' sind wieder die Grundwerte der Rettungswürfe ohne Modifier angegeben. 'Proficiencies' hier verteilt man die Waffenfertigkeitspunkte (darauf achten nur soviele vergeben, wie man auch weggenommen hat). Danach kommt 'Resistances' hier kann man seinem NPC Resistenzen vergeben (in Prozent). Unter 'Thievs' findet man die Diebesfähigkeiten, auch diese sind wieder nur die Grundwerte und das Spiel speichert intern die Boni und die Stufenabhängigen. Der Rest 'State Flags', 'Affects' und 'Global Variables' sind für diese Moderstellung unwichtig, also Finger weg.
Wenn man nun alles eingestellt hat speichert man alles ab. Dazu öffnet man wieder 'File' und klickt auf 'Save'. Man sollte beachten, dass man mit dem SK keine Datei überschreiben kann und deshalb einen neuen Dateinamen vergeben muss.
Nun, da man seine Änderungen abgespeichert hat, kann man die Kreaturen Datei (.cre) erschaffen. Dazu öffnet man 'Tools' und dort aktiviert man 'Convert to CRE' und erstellt dadurch die cre-Datei. Damit es keine Probleme mit schon existierenden Dateien gibt, ist es empfehlenswert vor seine eigenen Dateien eine Buchstabenkombination und einen Lattenzaun '#' zu setzten. Dies machen schon einige Module-Bastler, deshalb sollte man schaun welche Kürzel schon vergeben sind. Dazu hatte maus mal eine Liste angefangen.

Es ist noch zu empfehlen alles in einem extra Ordner zu speichern. Ich lege dafür immer einen Ordner, auf einer anderen Partition, mit dem Namen des Moduls an. Um die cre-Datei dort hinein zu bekommen, öffnet man den override-Ordner im BG2-Verzeichniss und sucht die Datei. Danach kopiert man sie aus diesem Ordner und fügt sie in den Modul-Ordner ein.

Da man nun den Charakter hat, kann man seine Aufmerksamkeit den Dialogen widmen.

b) Das Erstellen eines Dialoges

Was bracht man alles?
  • Einen Editor, zum Beispiel ConText
Was muss man tun?

Am Anfang braucht man zwei Dialoge auf jeden Fall
  • Aufnahmedialog
  • Rauswurfdialog
Alle anderen kann man mit der Zeit hinzufügen.
Die ganzen Dialogdateien speichert man am Besten auch bereits im Modul-Ordner. Zum Schreiben der Dialoge empfihlt sich der ConTEXT-editor zusammen mit dem WeiDu Zusatz. Man kann aber auch jeden anderen Editor verwenden. Man sollte darauf aufpassen, das alles als eine Text-Datei angesehen wird.

So nun zu den Dialogen:
Am Anfang der Dialogdatei muss immer ein
BEGIN ~Dateiname für dlg-Datei~
stehen. Dies ist nötig, damit der WeiDu-Übersetzer weiss wo die Datei beginnt. Der Name zweischen den Tildes (~) wird dann der Name der dlg-Datei.

Die einzelnen Zwiegespräche zwischen dem NPC und anderen sind immer gleich aufgebaut.
  • IF ~Bedingung~ THEN BEGIN Nummer => Dies beginnt ein neues Zwiegespräch
  • SAY ~Text~ => Dies ist der Text, den der NPC sagt
nun gibt es verschiedene Möglichkeiten, wie diese Zwiegespräch weiter gehen kann:
  • IF ~Bedingung~ THEN REPLY ~Text~ GOTO Nummer2 => Dies gibt den Text aus, den der Gesprächspartner sagt und der Dialog geht bei Zwiegesprächer 'Nummer2' weiter
  • IF ~Bedingung~ THEN REPLY ~Text~ EXIT => der Gesprächspartner sagt wieder einen Text, aber diesmal geht das Gespräch nicht weiter, sondern ist beendet
  • IF ~Bedingung~ THEN REPLY ~Text~ DO ~Anweisung~ EXIT => auch hier wird der Text des Gesprächspartners ausgegeben, aber danach wird eine Anweisung ausgeführt und erst dann der Dialog beendet.
  • IF ~Bedingung~ THEN REPLY ~Text~ DO ~Anweisung~ GOTO Nummer2 => selbe wie zuvor, nur das nach der Anweisung der Dialog beim Zwiegespräch 'Nummer2' weiter geht
  • END => muss immer am Ende eines Zwiegespräches stehen
Dies sind die Befehle, die man braucht. Was noch zu beachten wäre
  1. die Bedingung muss erfüllt sein, damit die Dinge danach ausgeführt werden. Soll die Bedingung immer erfüllt sein, macht man das so, das man nichts zwischen die Tildes (~) schreibt oder ein TRUE()
  2. ein Dialog geht immer von dem Charakter aus, dem die Dialogdatei gehört
  3. der Charakter dem die Dialogdatei gehört, hat niemals mehrere Optionen
  4. der Gesprächspartners kann auch mehrere Optionen haben, das Gespräch bezieht sich intern dann aber immer auf den HC
  5. nur der Beginn eines Dialoges hat eine Bedingung am Anfang
  6. ein Zwiegespräch ist immer durch ein END beendet

Eine Dialogoption würde nun so aussehen:
Code:
IF ~Bedingung1~ THEN BEGIN 1
SAY ~Text1~
IF ~Bedingung2~ THEN REPLY ~Text2~ GOTO 2
IF ~Bedingung3~ THEN REPLY ~Text3~ EXIT
END  {Zwiegespräche 1}

IF ~~ THEN BEGIN 2
SAY ~Text4~
IF ~Bedingung4~ THEN DO ~Anweisung~ EXIT
END {Zwiegespräch 2}

Möchte man unterschiedliche Texte bei männlichen und weiblichen HC's machen dann funktioniert dies so:
  • ~Text bei männlichem HC~ ~Text bei weiblichen HC~ => dies geht aber nur beim Text des Charakters, dem die Dialogdatei gehört
  • IF ~Bedingung für männlichen HC~ THEN REPlY ~TextM~
    IF ~Bedingung für weiblichen HC~ THEN REPLY ~TextW~ => beim Gesprächspartner muss man die Unterscheidung mit Hilfe der Bedingungen treffen

Nun zu den häufigsten Bedingungen:
  • Global("VariablenName","Zuordnung",Wert) => die Bedingung ist nur erfüllt, wenn die Variable einen bestimmten Wert hat
    • VariablenName => Name der Variablen, bei Modulen wird gerne wieder die Variante mit dem Lattenzaun benutz, damit es keine Überschneidungen gibt
    • Zuordnung => es gibt drei Zuordnungen:
      1. GLOBAL => ordnet dem Spiel die Variable zu
      2. LOCALS => ordnet dem Charkter die Variable zu
      3. AREA => ordnet der Area die Variable zu
    • Wert => Wert (Zahl) der Vartiablen
  • Gender(Player1, Geschlecht) => nur erfüllt, wenn Player1 dieses Geschlecht hat (MALE ; FEMALE)
  • Alignment(Player1,Gesinnung) => nur erfüllt beim richtiger Gesinnung (LAWFUL_X ; NEUTRAL_X ; CHAOTIC_X ; X= GOOD, NEUTRAL, EVEL ; NEUTRAL_NEUTRAL gibt es nicht, das ist einfach nur NEUTRAL)
  • NumTimesTalkedTo(0) => gibt an, das der Charakter noch nie mit der Gruppe (HC) geredet hat
  • NumTimesTalkedToGT(#) => Durch die Zahl in Klammern, kann man angeben, nach wievielen Dialogen mit der Gruppe (HC) dieser Dialog kommt.
  • weiter folgen

Unter Anweisungen versteht man meisstens das setzten von Variablen
SetGlobal("VariablenName","Zuordnung",neuer_Wert)
oder bestimmte Befehle
JoinParty() => in die Gruppe beitreten

Das Beispiel für den Aufnahme-Dialog ist hier

So nun kommt der Rauswurfdialog:

Dieser Dialog ist genauso aufgebaut wie jeder andere Dialog auch.
Man muss aber auf den dlg-Dateinamen aufpassen. Rauswurfdialoge werden mit einem
P gekennzeichnet. Also zum Beispiel so: NPCNameP.
Im Rauswurfdialog befindet sich auch der Wiederaufnahmedialog.

Nun muss man die Dialoge noch speichern. Dafür sind die d-Dateien da. Der
Aufnahmedialog wird in ?#NPCName.d und der Rauswurfdialog in der ?#NPCNameP.d
gespeichert. Dabei steht das ? für das eigene Kürzel (bei mir wäre das ein S).
Den Aufnahmedialog speichere ich in der S#Germon.d Datei und den Rauswurfdialog
in der S#GermP.d (beides im Mod-Ordner).
Achtung: Nicht mehr als 8 Zeichen verwenden.
Die Dialoge, die wir bis jetzt gemacht haben, sind nur für den SoA-Teil (man
kann den Mod aber auch mit ToB spielen).

Soll das Mod in mehreren Sprachen vorhanden sein, benützt man ausser den d-
Dateien noch tra-Dateien für die enzelnen Sprachen. In den d-Dateien steht dann
nur der Syntax des Dialoges und in den tra-Dateien dann die Strings des Dialoges
. Der Verweis auf den entsprechenden String wird mit @Zahl gemacht. Die
tra-Dateien stehen dann in einem Ordner 'deutsch', 'english' usw.

Beispiel:
Code:
d-Datei:
BEGIN ~DateiName~

IF ~Bedingung~ THEN BEGIN 1
SAY @1
IF ~Bedingung2~ THEN REPLY @2 EXIT
END

tra-Datei:
@1 = ~String1~
@2 = ~String2~

Das Beispiel für den Rauswurfdialog ist
hier

c) Die tp2-Datei
Zum Zuweisen der beiden Dialoge, muss man jetzt das Mod installieren. Dafür
braucht man zwei Dateien:
  • exe-Datei
  • tp2-Datei
Die exe-Datei bekommt man ganz einfach, man nimmt sich einfach eine exe-Datei
eines schon vorhandenen WeiDu-Mods und kopiert diese Datei. Danach benennt man
sie um, zum Beispiel Setup-NPC.exe.
Bei mir heisst sie einfach Setup-Germon.exe.
Die exe-Datei ist für das Ausführen der Installation da.

So nun fehlt noch die tp2-Datei. Dieses kann man wie fast alles einfach mit einem editor schreiben. In dieser Datei steht sozusagen das Rezept für die Installation. In dieser Datei wird genau aufgeschlüsselt, welche Mod-Datei wohin
installiert werden soll und welche Datein überhaupt zu dem Mod gehören. Es sorgt auch für das compilieren der d-Dateien.

Auch die tp2-Datei folgt, wie die meisten WeiDu Dateien einem bestimmten Schema.
Als Kopf hat man die vier Anweisungen
  • BACKUP ~Pfad~
  • AUTHOR ~Author, email~
  • LANGUAGE ~Spache~ ~Ordner der entprechenden tra-Dateien~
  • BEGIN ~NPC, Mod, ...~
BACKUP: Hier wird der Pfad für die Backup Dateien angegeben. Man braucht diesen
Teil, damit nach einer Deinstallation alles wieder so ist wie vor dem Mod. Der
Ordner muss selber bereits im NPC-Ordner erstellt worden sein.
AUTHOR: Hier kann man seinen Namen, email oder was einen sonst kennzeichnen soll
eingeben
LANGUAGE: Hier gibt man die Sprachen, für die das Mod ausgelegt wurde an und die
entsprechenden Ordner. (Braucht man nur, falls man tra-Dateien benutzt)
BEGIN: Hier steht, was man gerade installiert und ab hier beginnt nun auch der
Installationspfad.

Für den Rest empfiehlt es sich geordnet vorzugehen, also zum Beispiel erst alle
Sounds installieren, dann Bilder ...

Ich gehe jetzt nicht auf die Struktur ein, die kann man hier bei meinem Beispiel
ansehen, sondern auf die Befehle, die man braucht.

  • EXTEND_BOTTOM: Diesen Befehl braucht man, wenn man ein schon vorhandenes
    Skript ergänzen will (wird am Ende des Skriptes angehängt). Zum Beispiel eine
    weitere Person in eine Area einbringen.
    Aussehen: EXTEND_BOTTOM ~Skript~ ~Pfad zur Ergänzung~
  • EXTEND_TOP: Zum Dazufügen am Anfang eines Skiptes.
    Aussehen: EXTEND_TOP ~Skript~ ~Pfad zur Ergänzung~
  • COPY: Kopiert eine Datei von dem einen Ort zum andreren.
    Aussehen: COPY ~Pfad der zu kopierenden Datei~ ~Pfad zum Zielort~
  • SAY: Hiermit werden Strings zugewiesen.
    Aussehen: Im Zusammenhang mit dem Charakter-file, kommen die drei Varianten
    zutage:
    • SAY NAME1 ~Voller Name~
    • SAY NAME2 ~Rufname~
    • SAY BIO ~Biographie~
    Im Zusammenhang mit Sounds (wird aber bei der Installation des Charakters
    zugewiesen, nicht bei der Installation der Sounds), gibt es viele Varianten die
    aber diese Form haben:
    SAY SOUNDZUWEISUNG ~Was wird gesagt (als String)~ [sound-Datei (ohne Endung aber)
    ]
    Im Zusammenhang mit items:
    • SAY NAME1 ~Name vor dem identifizieren (vermute ich)~
    • SAY NAME2 ~Name nach dem identifizieren~
    • SAY DESC ~Beschreibung des items~
    Im Zusammenhang mit spells (hier nur für Innate-Zauber)
    SAY NAME1 ~Name des Zaubers~
  • COMPILE: Übersetzt die d-Datei in eine dlg-Datei und ergänzt die tlk-Dateinen
    .
  • USING: Installiert die richtigen tra-Dateien. Braucht man aber immer, auch
    wenn man keine tra-Dateien hat. Dann ist der Bereich zwischen den ~~ einfach
    leer.

    Diese beiden gehören immer zusammen. Aussehen:
    COMPILE ~Pfad der d-Datei~
    USING ~Pfad der entsprechenden tra-Datei; der Sprachenordner wird hier durch ein
    %s symbolisiert (Das Installationsprogramm nimmt so immer den richtigen
    Sprachenordner)~
  • APPEND ~pdialog.2da~
    ~Deathvariable P-Dialog J-Dialog D-Dialog~
    UNLESS ~Deathvariable~
    UNLESS ~25POST~

    Dialog-Datei-Anfänge mit HC in SoA
  • APPEND ~pdialog.2da~
    ~Deathvariable P-Dialog J-Dialog D-Dialog 25P-Dialog 25J-Dialog 25D-Dialog 25-
    Dialog~
    UNLESS ~Deathvariable~
    IF ~25POST~

    Dialog-Datei-Anfänge mit HC in SoA+ToB
  • APPEND ~interdia.2da~
    ~Deathvariable B-Dialog~
    UNLESS ~Deathvariable~
    UNLESS ~25FILE~

    Dialog-Datei-Anfänge mit NPCs in SoA
  • APPEND ~interdia.2da~
    ~Deathvariable B-Datei~
    UNLESS ~Deathvariable~
    IF ~25FILE~

    Dialog-Datei-Anfänge mit NPCs in SoA+ToB

Komentare im tp2-file werden mit // begonnen.
Achtung: Die tp2-Datei wie die exe-Datei benennen.

Beispiel für die tp2-Datei.

d) Dialog-Dateien zuweisen/Deathvariable verteilen/und und und

So nun den Mod-Ordner, die tp2-Datei und die Setup-Mod.exe in das BG2-Verzeichnis
kopieren. Dann mit hilfe der exe-Datei installieren. Sollte ein Fehler auftraten, wird alles wieder deinstalliert. In der Debug-Datei, die angelegt wird, kann man nachschauen wo der Fehler auftrat, oder wenn alles klappte, was wie installiert
wurde.
Nach erfolgreichem installieren, den NearInfinity öffnen und die entsprechende cre-Datei suchen (über Game; Open File...; Open external file; cre-Datei suchen und
auswählen). Hier auf edit (obere linke Ecke) gehen und nun:
  • Flags: auf ( No flags set )
  • Gold: auf den gewünschen Wert
  • Small portrait: Dateiname des kleinen Bildes aussuchen
  • Large portrait: Dateiname des grossen Bildes aussuchen
  • Sound: Zuweisen, falls das nicht schon automatisch geschehen ist
  • Death variable: richtigen Variablennamen eintagen
  • Dialog: richigen aussuchen (Aufnahme-dlg-Name)
  • Override skript: wird auch das richtige ausgesucht, sobald man es erstellt hat

Nun auf 'Save' gehen und alle Änderungen werden gespeichert. Jetzt wieder
deinstallieren, die Änderungen sollten gespeichert bleiben (sonst lief etwas falsch).

e) Ergänzen eines Area-Skriptes

So da nun der NPC soweit fertig ist, wird es an der Zeit ihm einen Erscheinungsort zu geben. Dafür überlegt man sich am besten, wo und wann man den NPC das erstemal treffen soll. Wenn man sich einen Platz ausgesucht hat, geht
man ins Spiel und reist mit hilfe eines gespeicherten Spielstandes zu dem Ort. Man sollte sich keinen Ort aussuchen der zuvoll ist, da es sonst zu Problemen
kommen könnte. Wenn man die Daten für den Ort haben will, setzt man den Curser einfach auf die gewünschte Erscheinungsstelle und drückt die 'x'-Taste. Nun
erscheint im Dialogfenst die x- und y-Koordinate der Stelle und auch die Area in der man sich im Moment befindet. Manchmal können sich Areas im Laufe des Spieles
verändern, dass muss man berücksichtigen und die richtige Area finden oder wenn der NPC immer dort sein soll ihn in jeder Area ergänzen.
Bei mir, wird man Germon im Obergeschoss der Tarverne des Stadttor-Viertels finden.

So nun da man sich einen Ort ausgesucht hat, öffnet man am Besten einen Editor.
Wenn man nur einen NPC in die Area einfügen will, ist die Anweisung ganz einfach. Das einzige was man dann als Bedingung braucht, ist, dass der NPC noch nicht erschaffen wurde, was man über eine Variable steuern kann.
Der Syntax sieht dann so aus:

Code:
IF
Global("Variable","AR????",Wert)
THEN
RESPONSE #100
SetGlobal("Variable","AR????",Neuerwert)
CreateCreature("chr-Datei-Name",[x-Koord.y-Koord],Gesichtsrichtung)
END

  • Global frägt, wie bei Dialogen, ab, ob die Variable in der auf einem bestimmten Wert steht.
  • RESPONSE und der Wert nach dem # gibt an, mit welcher Wahrscheinlichkeit das Nachfolgende eintritt (in Prozent).
  • SetGlobal setzt, wie bei Dialogen, den Wert der Variablen auf einen neuen.
  • CreateCreature erschafft eine Kreatur an den Koordinaten in [ ] und mit der Blickrichtung, die er letzte Zahlenwert angibt (hier sind die Werte 1-12 möglich)

Das ist alles, jetzt muss man die Datei nur noch als ein bcs-file abspiecher.
Da der Computer diesen Syntax aber noch kompalieren muss, muss man das ganze noch mit dem NearInfinity öffnen.
Das ganze was jetzt abgespiechert wurde, findet man nun im oberen Fenster des geöffneten bcs-files wieder. Von dort muss man es rauskopieren und in das untere Fenster einfügen. Jetzt auf Compile gehen und nicht vergessen die Datei wieder abzuspeichern. Damit die Datei auch ins Spiel installiert wird, muss man noch die tp2-Datei um diese ergänzen. Das geht, wie im Teil d) erklärt mit dem Befehl
EXTEND_BOTTOM.

f) Erstellen eines Charakter-Skriptes

So nun brauchen der NPC noch ein Charakterskript um fertig zu sein. Dieses Skript ist dazu da, um zum Beispiel Dialoge zu triggern (auszulösen), um Rufabzug oder Rufsteigerung bei Aufnahme bzw. Austritt zu steuern oder auch innate-Fähigkeiten bei Stufenaufstiegen zu geben...
Die einzelnen Anweisungen in dem Skript, sind immer so aufgebaut:

Code:
IF
 Bedingung1
 Bedingung2
 OR(2)
      Bedingung3
      Bedingung4
THEN
 RESPONSE #?1
  Anweisungen1a
  Anweisungen1b
 RESPONSE #?2
  Anweisung2
      .
      .
      .
END

Das ?Ziffer steht für die Wahrscheinlichkeit, dass die Nachfolgende Anweisungen ausgeführt werden.

Bedingungen sind zum Beispiel:
  • InParty("DeathVariable"): Anweisungen starten nur, wenn der gewünsche NPC in der Gruppe ist
  • Global("Variable","Bezug",Wert): Anweisungen starten nur, wenn die Variable den Wert 'Wert' hat
  • Level("DeathVariable",Wert): Anweisungen startetn nur, wenn der gewünsche NPC das Level 'Wert' hat
  • AreaCheck("AR????"): Anweisungen startetn nur, wenn man sich in der gewünschen Area befindet
  • See("DaethVariable"/GruppenNummer): Anweisungen startetn nur, wenn man den gewünschen NPC sieht (Mit GruppenNummer ist z.B. Player1 für den HC gemeint)
  • StateCheck("DaethVariable"/GruppenNummer,Status): Anweisungen startetn nur, wenn sich der Gewünsche NPC in diesem 'Status' (z.B. schafend) befindet
  • XPGT("DaethVariable"/GruppenNummer,?): Anweisungen starten nur, wenn die Erfahrungspunkte des gewünschen NPC mehr als ? sind
  • ...

Dies sind nur einige der möglichen Bedingungen, eine vollständige Liste mit allen Detais findet man im NearInfinity in der Datei TRIGGER.IDS. Man kann auch mehrere der Bedingungen kombinieren. Sollen alle gelten (AND-Anweisung) schreibt man sie einfach untereinander, sollen mindestens eine Bedingung erfüllt sein, kann man das ganze mit einem OR(?) und den gewünschen Bedingungen danach machen. Das ? steht hier für eine Zahl, die angibt, wieviele Bedingungen zum OR (oder) gehären. Soll eine Bedingung nicht erfüllt sein, macht man das mit einem ! vor
den Bedingung.

So nun zu einigen Anweisungen, hier kann man eine vollständige Liste in der ACTION.IDS finden.
  • SetGlobal("Variable","Bezug",NeuerWert): weisst der Variablen einen neuen Wert zu
  • Wait(?): lässt den Besitzer des bcs-files ? Sekunden lang wareten
  • DestroyItem("Dateiname"): zerstört das item (keine Datei-Endung verwenden)
  • GiveItemCreate("Dateiname","DeathVariable",1,?1,?2): Erschafft das item und gibt es dem gewünschten NPC mit den Ladungen ?1, ?2 (Bei den Ladungen bin ich mir nicht so ganz sicher, am besten ungeladen erstellen und 0 für ?1, ?2
    eintagen)
  • ReputationInc(?): Addiert ? zum Ruf der Gruppe dazu, wird ein Minus vor ? gesetzt, wird ? abgezogen vom Gruppenruf
  • AddXPObject("DaethVariable"/GruppenNummer,?) gewünschtem NPC ? Erfahrungspunkte geben
  • Continue(): fortfahren
  • ...

Anweisungen können auch zu mehreren auftreten (kein OR() benuten)

So das Charakter-Skript macht man genauso wie das Area-Ergänzungsskript, nur dass man dieses hier, für alle Dinge verwendet, die man vom NPC her steuern will. Ach ja, das Skript muss auch nicht kronologisch sein, das Spiel sucht sich einfach aus, welche Bedingung erfült sind und führt dann die Anweisungen aus. Komentare fügt man wie beim tp2-file mit // ein.

So nun muss man noch das Charakterfile dem NPC zuordnen, das geht genauso wie das Zuordnen der dlg-Datei. Das Charakter-Skript muss als Override script zugeordnet werden.
Zum Schluss kann man jetzt noch im Spiel testen ob alles passt.

Hier die Beispiele für das Area-Ergänzung-Skript und das Charakter-Skript.


Ich werde einen neutral guten männlichen Halbling Dieb erstellen, dem ich später ein eigenes Kit geben möchte.

Bei dem Beispiel ist das
  • Geschlecht: Männlich
  • Rasse: Halbling
  • Klasse: Dieb
  • Gesinnung: neutral gut
  • Attribute:
    1. Stärke: 14
    2. Geschicklichkeit: 19
    3. Konstitution: 13
    4. Intelligenz: 13
    5. Weisheit: 10
    6. Charisma: 11
  • Fähigkeiten:
    1. Kurzschwert
    2. Krummsäbel
    3. Keule
    4. Schleuder
    5. Taschendiebstahl: 65
    6. Schlösser öffnen: 85
    7. Fallen finden: 85
    8. Schleichen: 65
    9. Verstecken: 65
    10. Illusionen entdecken: 15
    11. Fallen stellen: 10
  • Aussehen: Farben und Sound
  • Name: Germon Leichtfuss
Nun habe ich auch meinen NPC mit dem SK geöffnet und ändere sein Charisma noch auf den Wert 12, alle anderen Attribute passen. Da ich bei der Generierung schon alles andere verteilt hatte wie ich wollte, lasse ich den Rest so, wie er ist. Ich speichere nun den NPC unter dem original Dateinamen, nur mit einer 1 am Ende ab. Nun erstelle ich das cre-file unter dem Namen 'S#Germon.cre'. Die Beispiele sind auf meiner
homepage

So das wär's erstmal mit der Ausrüstung, einige Hilfen und der Anfang eines Lexikons für die 'Bastler-Sprache'. Ich werde versuchen diesen Post aktuell zu halten und falls ich etwas vergessen oder falsch habe, dann meckert bitte.

Achtung: Ich hatte beim einfügen der dlg-Datei geschrieben, dass XP auf 0 sein muss, dass ist falsch. Dieser Wert sind nämlich die XP des NPC und die müssen natürlich auf einem Wert stehen, die zum Level passen.
 
Zuletzt bearbeitet von einem Moderator:

Ozzy

Gesandter der Welten
Registriert
11.03.2003
Beiträge
469
*mecker*

Unter 4. NPC Module hast du meine beiden NPC's vergessen.

Cynthia: Hasardeurin, Mensch, N, Ozzy
Ozzy: Magierkiller, Mensch, N, Ozzy

Achja jetzt fehlt ja nur noch wie man den NPC bastelt.
 

Seradin

Kleine Drow
Registriert
20.09.2002
Beiträge
1.386
Habe es nachgetragen!
Das basteln werde ich Schritt für Schritt hier dann auch noch erklären, keine Angst. Ich muss nur halt selber erst mit dem Basteln beginnen.
 

Caswallon

Chronist
Registriert
13.08.2001
Beiträge
11.460
Sieht gut aus. :)

Ergänzung vielleicht zu DLG:
Die Texte (Strings) selbst stehen in den Dateien Dialog.tlk und DialogF.tlk. Die dlg-dateien enthalten nur Verweise auf die Strings in der tlk. (Oder sowas in der Art; ich finde meine Erklärung nicht übermäßig klar...)

Bei ConText könnte man vielleicht noch einen Link zum WeiDU-Highlighter setzen:
http://weidu.org/WeiDU_ConTEXT_Highlighter-v7.zip

Cas
 

Seradin

Kleine Drow
Registriert
20.09.2002
Beiträge
1.386
So nun ist auch der erste Teil für das NPC basteln drin.

@Cas: Danke, ist nun auch drin.
 

Ozzy

Gesandter der Welten
Registriert
11.03.2003
Beiträge
469
Sieht schon gar nicht mal so schlecht aus. Das wird bestimmt ne sehr gute Anleitung. Wenns fertig muuste mal nen Mod fragen ob der das antackert.
 

Blue

Kleptomanische Hexe
Registriert
10.07.2000
Beiträge
2.627
*erstmalnurgelesenhat*
Wow...das gefällt mir :up:

Zusammen mit den anderen Tutorials da machts doch einiges klarer...vor allem das Lexikon gefällt mir.....braucht man doch nicht so blöd fragen dann...;)

Muss in die Liste nicht auch noch Chiara rein?

Bin mal gespannt wie das mit den Dialogen da weiter geht.....hab zwar schon einiges gelesen aber nie ganz kapiert :rolleye:
Auf jeden Fall machts Geschmack aufs selber probieren!
Müsste später wirklich angetackert werden...unbedingt...schon für die ganzen Links da drin und überhaupt....;)
 

Seradin

Kleine Drow
Registriert
20.09.2002
Beiträge
1.386
Danke, das es euch gefällt.
Das mit dem antackern braucht man nicht unbedingt, wenn die Mods sich einfach einverstanden erklären, das dieses Topic nicht gelöscht wird, kann man immer einen Link hierher setzten. Ich werde es auch in meine Sig aufnehmen und vorallem muss es erstmal fertig werden. Und das wird länger dauern, da ich jetzt erstmal vier Tage auf dem Forumstreffen bin und danach sehen muss wie ich alles organisiert bekomme.

Wegen dem Lexikon, es wäre nett, wenn jeder der etwas nicht versteht sofort meckert, so dass man die Erklärung dann verständlicher schreiben kann.
 

Klingauf

Senior Member
Registriert
21.05.2003
Beiträge
185
Hallo zusammen!

Auch ich möchte mich dem Lob anschließen, Seradin; bis jetzt sehr übersichtlich und informativ.

Du wirst es wahrscheinlich noch erwähnen, aber ich würde noch den Punkt "Death Variable" aufführen, der ja zur eigentlichen Identifizierung der Figur dient.

Gruß

D.Klingauf
 

Seradin

Kleine Drow
Registriert
20.09.2002
Beiträge
1.386
Wie meinst du das nun?
Meintest du, dass ich erklären soll, was eine Death Variable ist, das kommt noch, keine Angst. Oder meintest du die einzelnen Death Variablen der Module? Bei denen müsste mir dann einer der Mod-Spieler helfen.
*zu Tjen und Fedegar schiel*
 

Klingauf

Senior Member
Registriert
21.05.2003
Beiträge
185
Hi!

Ich meint die Bedeutung der Death Variable allgemein. Aber wie ich ja schon sagte und du es bestätigt hast: Das kommt ja noch...:)

Gruß

D.Klingauf
 

Seradin

Kleine Drow
Registriert
20.09.2002
Beiträge
1.386
Der Aufnahme-Dialog:

Code:
BEGIN ~S#Germon~

IF ~NumTimesTalkedTo(0)~ THEN BEGIN 1
SAY ~Hallo ihr da, wartet mal kurz.~
IF ~~ THEN REPLY ~Was gibt es Fremder?~ GOTO 2
END

IF ~~ THEN BEGIN 2
SAY ~Ich habe gehört, das ihr Abenteurer seid, könntet ihr nicht einen fähigen Dieb gebrauchen?~
IF ~~ THEN REPLY ~Nein danke, wir brauchen im Moment keinen.~ GOTO 3
IF ~~ THEN REPLY ~Hm, warum eigentlich nicht?! Aber bevor ich dich mitnehme, sagt mir doch bitte wer du bist.~ GOTO 4
IF ~~ THEN REPLY ~Verschwindet Junge, husch husch.~ DO ~SetGlobal("S#GermonAblehn","LOCALS",1)~ EXIT
END

IF ~~ THEN BEGIN 3
SAY ~Na gut, solltet Ihr aber irgendwann einen brauchen, dann wisst Ihr ja, wo Ihr mich finden könnt.~
IF ~~ THEN EXIT
END

IF ~~ THEN BEGIN 4
SAY ~Oh, ich bin Germon Leichtfuss, Halbling und Dieb von Beruf.~
IF ~~ THEN REPLY ~Sei willkommen Germon, ich bin <Gabber>.~ THEN DO ~SetGlobal("S#GermonJoinedParty","GLOBAL",1) JoinParty()~ EXIT
END

IF ~NumTimesTalkedToGT(0) Global("S#GermonJoinedParty","GLOBAL",0)~ THEN BEGIN 5
SAY ~Ach hallo, sucht Ihr nun einen Dieb?~
IF ~~ THEN REPLY ~Ja, hättet Ihr Lust?~ GOTO 6
IF ~~ THEN REPLY ~Nein. Wir wollten nur mal nach Euch sehen.~ EXIT
END

IF ~~ THEN BEGIN 6
SAY ~Da fragt Ihr noch? Natürlich habe ich Lust.~
IF ~~ THEN REPLY ~Darf ich noch fragen wer uns ab sofort Begleiten wird?~ GOTO 4
END

IF ~NumTimesTalkedToGT(0) Global("S#GermonJoinedParty","GLOBAL",0) Global("S#GermonAblehn","LOCALS",1)~ THEN BEGIN 7
SAY ~Ach nun kommt man zu mir zurück. Doch nun will ich nicht mehr zu Euch, also um es mit Euren Worten zu sagen: Husch, husch.~
IF ~~ THEN EXIT
END
 
Zuletzt bearbeitet von einem Moderator:

Magister Ludi

Member
Registriert
25.06.2003
Beiträge
47
So da ich hier diese tolle Beschreibung vorfinde mach ich mich mit 0% Erfahrung in solche Dingen mal selbst ans Werk!

Nur sind (wie sollte es anders sein!?) schon kurz nach dem Download der hier empfohlenen Tools Undklarheiten/Probleme aufgetreten, da wären:

1. Wie öffne ich diese NearInfinity.jar Datei?
2. Wie öffne ich diese BG2 Weimer Dialog.chl Datei?
3. Im Programm ConTEXT finde ich mich einfach nicht zurecht. Könntet ihr
mir da bitte weiterhelfen/eine hilfreiche Erklärung posten?

Bin wie immer dankbar für wirklich sehr guten Erklärung die wirklich jeder hier immer und immer wieder bekommt.
Hoffe auf eure Hilf - Magister Ludi -
 
Zuletzt bearbeitet:

Maus

Senior Member
Registriert
07.08.2002
Beiträge
9.409
1. Einfach durch Doppelklicken, wenn du die JavaRumtimesLibraries installiert hast. Ohne die geht nix. Falls bei einem Doppelklick ein Packer gestartet wird (RAR z.B.) musst du dort die Verknüpfung mit *.jar Dateien entfernen. Am besten, wenn du den Packer einfach nochmal schnell installierst.

2. Die Datei soll gar nicht geöffnet werden. Du musst sie irgendwo in einen Ordner von Context reinkopieren. Die richtige Stelle findest du, indem du dich mal durchklickst und schaust, wo schon chl-Dateien stehen.

3. Naja, in Context musst du eigentlich nur eine Datei öffnen wie immer und dann ist es ein ganz normaler Texteditor :confused:
Nur halt mit dem Vorteil, dass der Syntax farbig ist.
 

Caswallon

Chronist
Registriert
13.08.2001
Beiträge
11.460
1. Gar nicht. ;) Du mußt Java installiert haben (Link dazu ist auf der NI-Download-Seite), dann sollte man die JAR wie ein normales Programm ausführen können.
Alternativ gibt es bei NI eine BAT-Datei zum Ausführen (auf der Download-Seite unter Troubleshooting).

2. Auch nicht. Die CHL ist der "Highlighter" für ConText; du mußt die Datei in das Verzeichnis "Highlighters" deiner ConText-Installation schieben.

3. ConText ist ein ganz normaler Texteditor. Wenn du 2. gemacht hast und eine D-Datei öffnest, siehst du die Befehle usw. in verschiedenen Farben; das erleichtert das Editieren.

Cas
Zweitschnellster. Und das im Bastlerforum. :D
 

Blue

Kleptomanische Hexe
Registriert
10.07.2000
Beiträge
2.627
*mal hochschieb*

Weil doch ne Menge drin was immer wieder gefragt wurde, auch wenns um Dialoge geht ;)

Neue Frage:
Hat man da nun einen was auch immer erstellt, wie kriegt man ihn denn dann dahin wo er auftauchen soll?
Irgendwo muss er /sie ja rum stehen um aufgenommen werden zu können?
oder seh ich vor Müdigkeit das offensichtliche wieder nicht...? nachdem ich in dem kurzen Post gut 10 Fehler gemacht hab iss ja alles möglich...;)
 

Lokadamus

Buddelmagier
Registriert
01.03.2000
Beiträge
4.861
mmm...

In dem Tutorial von Maus wird erklärt, wie man eine Figur erschafft:

Code:
IF 
        Global("ThorvidExists","AR0700",0)
THEN 
        RESPONSE #100
        CreateCreature("Thorvid",[2135.1835],12)
        SetGlobal("ThorvidExists","AR0700",1)
END

Dateiname: Ar0700.baf, das Gebiet, in dem die Person erschaffen werden soll.
Zuerst wird überprüft, ob die Bedingung zutrifft (bei mir heist der Typ Thorvid), wenn es zutrifft, wird die Person mit CreateCreature an der Stelle Ar0700 (das ist Waukeens Promenade) an der Position 2135.1835 (das ist etwas südlich von Abenteuers Allerlei) erschaffen, die 12 gibt die Gesichstrichtung an, weiss gerade nicht, ob das Norden oder Süden war. Mit SetGlobal wird noch die Variable, die im IF-Zweig überprüft wurde, umgeändert, ansonsten wird alle paar Sekunden eine neue Person erschaffen ;) ...
 
Zuletzt bearbeitet von einem Moderator:

Seradin

Kleine Drow
Registriert
20.09.2002
Beiträge
1.386
@Blue: Das hatte ich noch nicht erklärt, aber versprochen, am Wochenende setzte ich mich hin und arbeite weiter daran. :)

Und deine Frage hat ja Lokadamus schon schön erklärt.
 

Arodon

Kleriker des Helm
Registriert
01.04.2002
Beiträge
1.787
Genau dieses Topic hab ich vorgestern gesucht :)

@Seradin Super :)
 

Blue

Kleptomanische Hexe
Registriert
10.07.2000
Beiträge
2.627
Ah..danke mal wieder ;)
*wiederwasgelernthat*
weitere Fragen werden Folgen...jaja...:D
 
Oben