aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Metin2

Metin2-Modell hinzufügen: .gr2 Granny-Dateien und Index

Metin2 model ekleme — ein Modell zu Metin2 hinzufügen — ist etwas, worauf jeder früher oder später stößt, der ein neues Monster, einen NPC oder ein Reittier ins Spiel bringen will. Im Kern steht ein einziges Dateiformat: .gr2, die Modelldatei der Granny3D-Engine von RAD Game Tools. Wenn du den Modellordner nicht korrekt vorbereitest und ihn nicht an den richtigen Index bindest, bleibt selbst das schönste Mesh im Spiel unsichtbar oder lässt den Client sofort abstürzen. Diese Anleitung erklärt Schritt für Schritt die Logik, ein neues 3D-Modell von Grund auf zu integrieren und es an eine mob_proto-vnum zu binden.

Was ist .gr2 und wie Granny mit Metin2 zusammenhängt

Der Metin2-Client nutzt die Granny3D-Runtime (granny2.dll), um Charakter- und Objektmodelle zu rendern; deshalb werden alle Mesh-, Skelett- und Animationsdaten mit der Endung .gr2 gespeichert. Eine einzelne .gr2-Datei kann nur ein Mesh enthalten oder auch ein Skelett und Bewegungsdaten. Der übliche Ansatz in Metin2 ist dieser: Eine Datei trägt das Mesh plus Skelett, während separate Dateien jede Animation tragen (Gehen, Angreifen, Sterben). Damit sich dein Modell im Spiel richtig verhält, muss dieses Trio — Mesh, Skelett, Bewegung — untereinander kompatibel sein.

Was in einem Modellordner steckt

Im Client lebt jedes Monster oder jeder NPC in einem eigenen Ordner; diese Ordner liegen meist in den Pack-Archiven unter monster2/ (Monster) oder npc/. Ein typischer Ordner enthält:

  • Mesh .gr2 — Das Modell selbst, zusammen mit seinem Skelett. Die meisten Ordner geben ihm einen festen Namen (zum Beispiel model.gr2).
  • Bewegungs-.gr2-Dateien — Jede enthält eine einzige Animation: Warten, Laufen, Angreifen, Schaden nehmen, Sterben.
  • Texturdateien — Meist im .dds-Format (DXT-komprimiert). Sie müssen mit dem Materialnamen des Meshes übereinstimmen.
  • .msm-Datei — Das "Monster State Module"; eine textbasierte Statemachine, die definiert, welche Bewegung in welchem Zustand abgespielt wird.

Du kannst all das mit dem Granny Viewer öffnen und prüfen; damit siehst du, ob Mesh, Skelett und Texturen korrekt laden, ohne überhaupt ins Spiel zu gehen.

Das Modell vorbereiten: Skelett, Rig und Export

Der sicherste Weg, ein neues Modell einzubringen, ist, es auf das Standard-Metin2-Skelett zu riggen. Wenn du dein Modell an die Skeletthierarchie eines bestehenden Monsters bindest (mit identischen Knochennamen), kannst du alle fertigen Animationen dieses Monsters wiederverwenden — du musst keine einzige Bewegung zeichnen. Verwendest du ein völlig neues Skelett, musst du auch eigene Bewegungsdateien für jeden Zustand (Warten, Angreifen, Sterben) erstellen.

Das native Export-Werkzeug ist das Granny exporter-Plugin, das auf älteren Versionen von 3ds Max installiert wird. Der Ablauf ist meist: Modell und Skelett ausrichten, die Texturen als .dds vorbereiten, dann das Mesh und jede Animation einzeln als .gr2 exportieren. Achte beim Export auf die Skalierung: Metin2-Charaktere verwenden eine bestimmte Einheitenskala, und ein zu großes oder zu kleines Modell wirkt im Spiel absurd oder bekommt eine falsche Hitbox.

.msm — die Statemachine binden

Selbst wenn Mesh und Animationen bereit sind, liest der Client die Antwort auf "welche Datei spiele ich ab, während dieses Monster wartet?" aus der .msm-Datei. Diese Textdatei ordnet Spielzustände den entsprechenden Bewegungs-.gr2-Dateien zu. Ihre Struktur sieht grob so aus:

MotionMode  GENERAL
{
    Group  WAIT
    {
        MotionCount  1
        Motion0  "wait.gr2"  1.0
    }
    Group  ATTACK
    {
        MotionCount  1
        Motion0  "attack.gr2"  1.0
    }
}

Die Logik ist klar: Jede Zustandsgruppe verweist auf die abzuspielende Bewegungsdatei und ihr Gewicht. Eine fehlende Gruppe (zum Beispiel DEAD nicht zu definieren) führt dazu, dass das Monster beim Tod einfriert oder einen Fehler wirft. Der praktischste Start ist, die .msm eines ähnlichen bestehenden Monsters als Vorlage zu nehmen und die Dateinamen gegen deine eigenen Bewegungen auszutauschen.

Index-Bindung: npclist.txt und mob_proto

Hier passiert die eigentliche "Bindung". Der Client identifiziert ein Monster über seine vnum (Proto-Nummer), erfährt aber aus npclist.txt, in welchem Ordner das Modell liegt. Diese Datei im Client-Stammverzeichnis ordnet die vnum dem Ordnerpfad zu. Jede Zeile ist durch Tabs getrennt:

20101	monster2/neues_monster	Neues Monster

Die Spalten sind der Reihe nach: die vnum, der Pfad zum Modellordner und der Anzeigename. Die vnum hier muss exakt dieselbe sein wie die vnum des mob_proto-Eintrags auf der Serverseite. Der Server definiert das Monster mit seinen Werten (HP, Angriff, Typ, KI) in mob_proto und kümmert sich nicht um das Modell. Der Client wiederum schlägt diese vnum in npclist.txt nach, findet den Ordner und lädt das Modell. Verwenden beide Seiten unterschiedliche vnums, erscheint das Monster mit dem falschen Modell oder gar nicht. Da auch NPC-Dialoge und Quests auf diese vnum verweisen, wähle die Nummer von Anfang an sorgfältig.

Granny-Versionskompatibilität und häufige Abstürze

Der ärgerlichste Fehler beim Hinzufügen eines Metin2-Modells ist, dass eine anderswo gefundene .gr2-Datei den Client beim Start abstürzen lässt. Die Ursache ist meist eine Granny-Versionsunverträglichkeit: Verschiedene Client-Versionen verwenden verschiedene Granny-Runtimes (zum Beispiel 2.4 gegenüber 2.9), und eine für eine Version geschriebene .gr2 kann von der granny2.dll einer anderen Version nicht gelesen werden. Die Lösung ist, das Modell in die Granny-Version deines eigenen Clients zu konvertieren oder es mit dieser Version neu zu exportieren. Weitere häufige Absturzursachen:

  • Fehlende Textur — Sucht das Mesh nach einer .dds, die nicht existiert, siehst du ein weißes/transparentes Modell oder einen Fehler. Prüfe die Materialnamen und Texturpfade.
  • Falscher Pfad in npclist.txt — Der Ordnername muss Buchstabe für Buchstabe übereinstimmen; falsche Groß-/Kleinschreibung oder Tab/Leerzeichen-Verwechslung macht das Modell "nicht gefunden".
  • Falsche Platzierung im Pack — Solange die Dateien nicht an dem Pfad liegen, der zur Archiv- (Pack-)Struktur des Clients passt, kann das Spiel sie nicht sehen.

Stößt du auf einen Absturz, beschleunigt ein Blick in die clientseitigen Fehlerlogs und die syserr-Dateien die Diagnose.

Häufige Fragen

Reicht es, das Modell nur zum Client hinzuzufügen?

Das Modell hinzuzufügen und in npclist.txt einzutragen, reicht, damit die Grafik erscheint, aber damit das Monster im Spiel wirklich existiert, brauchst du auch einen mob_proto-Eintrag mit derselben vnum auf der Serverseite. Ohne beides erhältst du entweder ein unsichtbares Monster oder eine vnum ohne Modell.

Muss ich neue Animationen zeichnen?

Nein. Wenn du dein Modell auf ein Standard-Metin2-Skelett riggst, kannst du alle fertigen Bewegungen dieses Skeletts wiederverwenden und einfach die Dateinamen in der .msm zuordnen. Eine neue Animation ist nur nötig, wenn du eigene Bewegungen willst.

Der Client stürzt beim Start ab — was sollte ich zuerst prüfen?

Prüfe zuerst die Granny-Versionskompatibilität: Ist deine .gr2 mit der granny2.dll-Version deines Clients kompatibel? Prüfe dann die Texturpfade und den Ordnernamen in der npclist.txt-Zeile. Diese drei erklären die große Mehrheit der Abstürze.

Möchtest du dein neues Modell sauber ins Spiel bringen? Vom Granny-Export über die .msm-Statemachine bis zur npclist.txt-Index-Bindung können wir die gesamte Integration gemeinsam aufsetzen. Kontaktiere mich und lass uns über dein Projekt sprechen.

Bu kategorideki tüm yazılar →

Devamı için