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

Metin2 Model Ekleme: .gr2 Granny Dosyaları ve Index

Metin2 model ekleme, oyuna yeni bir canavar, NPC ya da binek getirmek isteyen herkesin er ya da geç karşılaştığı bir konudur. İşin kalbinde tek bir dosya formatı yatar: .gr2, yani RAD Game Tools'un Granny3D motorunun model dosyası. Bir model klasörünü doğru hazırlayıp doğru index'e bağlamazsan, en güzel mesh bile oyunda görünmez ya da client'ı anında çökertir. Bu rehberde yeni bir 3B modeli sıfırdan entegre etmenin ve onu mob_proto vnum'una bağlamanın mantığını adım adım anlatıyorum.

.gr2 nedir, Granny ile Metin2 ilişkisi

Metin2 client'ı, karakter ve nesne modellerini render etmek için Granny3D çalışma zamanını (granny2.dll) kullanır. Bu yüzden tüm mesh, iskelet ve animasyon verisi .gr2 uzantısında saklanır. Bir .gr2 dosyası tek bir mesh tutabileceği gibi, iskelet (skeleton) ve hareket (motion) verisini de barındırabilir. Metin2'de yaygın yaklaşım şudur: bir dosya mesh + iskeleti, ayrı dosyalar ise her bir animasyonu (yürüme, saldırı, ölüm) taşır. Modelinin oyunda düzgün durması için bu üçlünün — mesh, iskelet, motion — birbiriyle uyumlu olması şarttır.

Bir model klasöründe ne bulunur

Client'ta her canavar veya NPC, kendi klasöründe yaşar; bu klasörler genellikle monster2/ (canavarlar) ya da npc/ altındaki pack arşivlerinde durur. Tipik bir klasörün içeriği şudur:

  • Mesh .gr2 — Modelin kendisi; iskeletiyle birlikte. Çoğu klasörde sabit bir adı (örneğin model.gr2) olur.
  • Motion .gr2 dosyaları — Her biri tek bir animasyonu içerir: bekleme, koşma, saldırı, hasar alma, ölüm.
  • Doku dosyaları — Genelde .dds (DXT sıkıştırmalı) formatında. Mesh'in malzeme adıyla eşleşmesi gerekir.
  • .msm dosyası — "Monster State Module"; hangi durumda hangi motion'ın oynayacağını tanımlayan metin tabanlı durum makinesi.

Bu dosyaların hepsini açıp incelemek için Granny Viewer kullanabilirsin; mesh'in, iskeletin ve dokuların doğru yüklenip yüklenmediğini oyuna girmeden görürsün.

Modeli hazırlamak: iskelet, rig ve export

Yeni bir model getirmenin en güvenli yolu, onu standart Metin2 iskeletine rig etmektir. Modelini mevcut bir canavarın iskelet hiyerarşisine (kemik adları aynı olacak şekilde) bağlarsan, o canavarın tüm hazır animasyonlarını yeniden kullanabilirsin — tek bir motion bile çizmen gerekmez. Tamamen yeni bir iskelet kullanırsan, her durum için (bekleme, saldırı, ölüm) kendi motion dosyalarını da üretmek zorunda kalırsın.

Export için yerleşik araç, 3ds Max'in eski sürümlerine yüklenen Granny exporter eklentisidir. Akış genelde şöyledir: modeli ve iskeleti hizala, dokuları .dds olarak hazırla, sonra mesh'i ve ayrı ayrı her animasyonu .gr2 olarak dışa aktar. Export sırasında ölçeğe dikkat et: Metin2 karakterleri belirli bir birim ölçeğindedir; çok büyük ya da çok küçük bir model oyunda saçma görünür ya da hitbox'ı yanlış olur.

.msm — durum makinesini bağlamak

Mesh ve animasyonlar hazır olsa bile client, "bu canavar beklerken hangi dosyayı oynatayım?" sorusunun cevabını .msm dosyasından okur. Bu metin dosyası, oyun durumlarını (state) ilgili motion .gr2 dosyalarıyla eşler. Kabaca şuna benzer bir yapısı vardır:

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

Mantık net: her durum grubu, oynatılacak motion dosyasını ve ağırlığını gösterir. Eksik bir grup (örneğin DEAD tanımlamamak) canavarın ölünce donmasına ya da hata vermesine yol açar. Var olan benzer bir canavarın .msm dosyasını şablon alıp dosya adlarını kendi motion'larınla değiştirmek en pratik başlangıçtır.

Index bağlama: npclist.txt ve mob_proto

Asıl "bağlama" işi burada olur. Client, bir canavarı vnum (proto numarası) üzerinden tanır ama modelin hangi klasörde olduğunu npclist.txt dosyasından öğrenir. Client kök dizinindeki bu dosya, vnum ile klasör yolunu eşler. Her satır sekmeyle ayrılmıştır:

20101	monster2/yeni_canavar	Yeni Canavar

Sütunlar sırasıyla: vnum, model klasörünün yolu ve görünen ad. Buradaki vnum, server tarafındaki mob_proto kaydının vnum'u ile birebir aynı olmalı. Server canavarı istatistikleriyle (can, saldırı, tip, AI) mob_proto'da tanımlar; modeli umursamaz. Client ise aynı vnum'u npclist.txt'te arayıp klasörü bulur ve modeli yükler. İki taraf farklı vnum kullanırsa canavar ya yanlış modelle çıkar ya da hiç görünmez. NPC diyalogları ve quest'ler de bu vnum'a referans verdiği için numarayı baştan dikkatli seç.

Granny sürüm uyumu ve sık çöküşler

Metin2 model eklemede en sinir bozucu hata, dışarıdan bulduğun bir .gr2 dosyasının client'ı açılışta çökertmesidir. Sebep çoğu zaman Granny sürüm uyuşmazlığıdır: farklı client sürümleri farklı Granny çalışma zamanları (örneğin 2.4'e karşı 2.9) kullanır ve bir sürüm için yazılmış .gr2, başka sürümün granny2.dll'i tarafından okunamaz. Çözüm, modeli kendi client'ının Granny sürümüne dönüştürmek ya da o sürümle yeniden export etmektir. Diğer yaygın çöküş sebepleri:

  • Eksik doku — Mesh, var olmayan bir .dds'i arıyorsa beyaz/şeffaf model ya da hata görürsün. Malzeme adlarını ve doku yollarını kontrol et.
  • npclist.txt'te yanlış yol — Klasör adı harf harf eşleşmeli; küçük/büyük harf ve sekme/boşluk karışıklığı modeli "bulunamadı" yapar.
  • Pack içine yanlış yerleştirme — Dosyaları client'ın arşiv (pack) yapısına uygun yola koymadan oyun göremez.

Çöküş yaşarsan client tarafındaki hata loglarına ve syserr dosyalarına bakmak teşhisi hızlandırır.

Sık Sorulan Sorular

Modeli sadece client'a eklesem yeterli mi?

Modeli ekleyip npclist.txt'e yazmak görselin çıkması için yeterlidir, ama canavarın oyunda var olması için server tarafında aynı vnum ile bir mob_proto kaydı da gerekir. İkisi olmadan ya görünmez bir canavar ya da modelsiz bir vnum elde edersin.

Yeni animasyon çizmem şart mı?

Hayır. Modelini standart bir Metin2 iskeletine rig edersen o iskeletin tüm hazır motion'larını yeniden kullanabilir, .msm'de sadece dosya adlarını eşleyebilirsin. Yeni animasyon sadece özgün hareketler istiyorsan gerekir.

Client açılışta çöküyor, ilk neye bakmalıyım?

Önce Granny sürüm uyumuna bak: .gr2 dosyan client'ının granny2.dll sürümüyle uyumlu mu? Ardından doku yollarını ve npclist.txt satırındaki klasör adını kontrol et. Bu üçü, çöküşlerin büyük çoğunluğunu açıklar.

Yeni modelini sorunsuz oyuna almak ister misin? Granny export'tan .msm durum makinesine ve npclist.txt index bağlamaya kadar tüm entegrasyonu birlikte kurabiliriz. Benimle iletişime geç ve projeni konuşalım.

Bu kategorideki tüm yazılar →

Devamı için