BSP dosyası nedir? Header, lump'lar ve pakfile
BSP dosyası, Source Engine'in derlenmiş harita formatıdır. Yapısı şöyle: header, lump'lar, entity lump ve pakfile, ayrıca dosyayı açmaya yarayan araçlar.
BSP dosyası, bir haritanın Source Engine ve dolayısıyla Garry's Mod için derlenmiş, oynanmaya hazır sürümüdür. Derleyiciler Hammer editöründeki düzenlenebilir VMF dosyasını alıp geometriyi, görünürlüğü ve ışıklandırmayı hesapladığında ortaya çıkar. Dosya, bir sunucunun ve oyuncularının haritayı yüklemek için ihtiyaç duyduğu neredeyse her şeyi içerir: geometri, entity'ler, lightmap'ler ve çoğu zaman gömülü texture'lar, modeller ve sesler.
BSP ne demek ve dosya nasıl oluşur
BSP, Binary Space Partitioning demektir. Bu, bir haritanın hacmini daha küçük bölgelerden oluşan bir ağaca bölen bir tekniktir. Motor bu ağacı, neyin görünür olduğuna ve oyuncunun neye çarptığına hızlıca karar vermek için kullanır.
Bir haritayı Hammer'da VMF dosyası olarak kurarsın. Bu, istediğin zaman düzenlemeye devam edebileceğin bir metin dosyasıdır. Derleme sırasında üç program art arda çalışır: VBSP geometriyi ve entity'leri oluşturur, VVIS görünürlüğü hesaplar, VRAD ışığı hesaplar. Üç adımı VBSP, VVIS ve VRAD nedir? yazısı ayrıntılı olarak anlatıyor. Sonuç, uzantısı .bsp olan ve düzenlemek için değil, yüklemek için optimize edilmiş tek bir ikili dosyadır.
Yapı: header ve lump'lar
Her BSP bir header ile başlar. İçinde şunlar bulunur:
- araçlara bunun bir Source haritası olduğunu söyleyen
VBSPtanımlayıcısı - format sürüm numarası (Garry's Mod için genellikle 20)
- 64 girdili bir dizin, yani lump tablosu
- harita revizyonu, yani VMF'nin derlemeden önce kaç kez kaydedildiği
Lump, sabit bir görevi olan bir veri bloğudur. Lump tablosu her blok için dosyanın neresinde başladığını ve ne kadar uzun olduğunu belirtir. 64 slotun hepsi kullanılmaz. En önemli gruplar:
| Lump | İçerik |
|---|---|
| Entities | Tüm entity'lerin ve özelliklerinin metin listesi |
| Planes, nodes, leafs | Haritayı uzamsal olarak düzenleyen BSP ağacı |
| Vertices, edges, faces | Görünen yüzeyler |
| Brushes, brush sides | Brush'lar; başka şeylerin yanında çarpışma için de kullanılır |
| Texinfo, texdata | Hangi yüzeyin hangi materyali taşıdığı |
| Visibility | VVIS'in hesapladığı görünürlük verisi |
| Lighting | VRAD'ın hesapladığı lightmap'ler |
| Displacement data | Biçimi değiştirilmiş arazi yüzeyleri |
| Game lump | Başka şeylerin yanında tüm prop_static prop'ları |
| Pakfile | Dosyalardan oluşan gömülü bir arşiv |
Bir tablo girdisi yanlışsa, örneğin bir blok dosyanın sonunu aşıyorsa dosya bozuktur. Bu, örneğin yarıda kesilen yüklemelerde olur.
Entity lump: ikili dosyanın içinde düz metin
Entity lump sıradan bir metindir. Her entity, süslü parantezler içinde anahtar ve değer çiftlerinden oluşan bir bloktur:
{
"classname" "info_player_start"
"origin" "0 0 64"
"angles" "0 90 0"
}
İlk entity her zaman worldspawn olur; skybox adı gibi haritanın temel ayarlarını tutar. Ardından spawn'lar, ışıklar ve mantık gibi point entity'ler ile kapılar ve trigger'lar gibi brush entity'ler gelir. Entity'ler arasındaki bağlantılar (input'lar ve output'lar) da burada metin olarak saklanır.
Bazı entity'ler entity lump'ta yer almaz, çünkü derleyici onları başka bir yere işler: örneğin prop_static game lump'a gider, func_detail ise dünya geometrisinin parçası olur.
Lump düz metin olduğu için herkes onu basit araçlarla okuyabilir. Bu, haritanın adlarını ve mantığını ilgilendirir, güvenliği de ilgilendirir: bir lua_run entity'si sunucuda Lua kodu çalıştırır; diğer Source oyunlarında konsol komutu gönderen point_servercommand ise Garry's Mod'da devre dışıdır. Başka birinin haritasını sunucuna koymadan önce bu bölüme bir göz atmaya değer.
Pakfile: haritanın içindeki özel içerik
Pakfile lump, BSP'nin içindeki bir ZIP arşividir. Haritanın yanında getirdiği dosyaları barındırır: materyaller, texture'lar, modeller, sesler. Yükleme sırasında motor bunlara oyun klasöründeymiş gibi davranır. Motor da buraya yazar, örneğin buildcubemaps ile oluşturulan cubemap texture'larını.
Pakfile, Valve'ın BSPZIP aracıyla ya da Pakrat, VIDE veya CompilePal gibi yardımcı programlarla doldurulur. Bunun nasıl yapılacağını Özel içeriği BSP içine paketleme yazısı gösteriyor.
Pakfile'daki her şey her oyuncuya gönderilir. Bu dosya boyutunu etkiler ve yanlışlıkla paketlenen dosyaların herkese açık hale gelmesi anlamına gelir.
BSP dosyası nasıl açılır
- Hammer BSP dosyalarını açmaz, yalnızca VMF açar. Geri dönmek için BSPSource gibi bir decompiler gerekir. Bundan ne elde edeceğini BSP decompile nedir? yazısı anlatıyor.
- Pakfile'a bakmak: VIDE, Pakrat veya GCFScape gömülü dosyaları gösterir.
- Entity'leri okumak: Entspy gibi bir entity editörü ya da gerekirse bir metin veya hex editörü entity lump'ı gösterir.
- Otomatik kontroller: bspmarket.de'deki Map Scanner header'ın, lump tablosunun ve offset'lerin tutarlılığını kontrol eder, riskli entity'leri bulur ve pakfile'daki dosyaları listeler.
Yapı, sorun giderme ve koruma için neden önemli
Pek çok tipik sorunun izi dosyanın belirli bir bölümüne kadar sürülebilir. Bir materyal ne oyun klasöründe ne de pakfile'daysa o tanıdık damalı deseni görürsün. Bir lump bir motor limitini aşarsa derleme başarısız olur ya da harita yüklenmez. Hangi bölümün neden sorumlu olduğunu bilirsen nedeni daha hızlı bulursun.
Bir haritayı korumak açısından belirleyici bir özellik var: motorun dosyayı okuyabilmesi gerekir ve sunucuna giren her oyuncu onu alır. Dolayısıyla bir BSP uzun süre gizli kalacak hiçbir şey içermez. Koruma önlemleri yapı üzerinde çalışır. Bir fingerprint bir kopyayı izlenebilir kılar, obfuscation ise yalnızca bir editörün işine yarayan bilgileri azaltır. Genel bakışı GMod haritasını sızıntılardan koruma yazısı veriyor.
Sık sorulan sorular
Bir BSP dosyasını doğrudan Hammer'da açabilir miyim?
Hayır. Hammer VMF dosyalarıyla çalışır. Bir BSP'nin önce decompile edilmesi gerekir ve ortaya çıkan şey orijinal çalışma dosyası değil, onun yeniden oluşturulmuş bir halidir.
BSP dosyası şifreli mi?
Hayır. Format iyi bilinir ve pek çok araç tarafından okunur. Entity lump düz metindir, pakfile da bir ZIP arşividir. Valve wiki'sine göre GMod, lump'ları ve pakfile içeriği LZMA ile sıkıştırılmış haritaları da yükler; bu şifreleme değil, sıkıştırmadır.
BSP dosyam neden bu kadar büyük?
Çoğunlukla LDR ve HDR için yapılan bir derlemenin iki kez sakladığı lightmap'ler ve gömülü texture'ları, modelleri, sesleri ve cubemap'leri barındıran pakfile yüzünden. Lump tablosu hangi bloğun ağır bastığını, pakfile listesi ise yeri hangi dosyaların kapladığını gösterir.
Garry's Mod hangi BSP sürümünü kullanır?
Garry's Mod için alışılmış derleme araçlarıyla yapılan haritalar sürüm 20'yi taşır. Numara header'da, tanımlayıcının hemen ardından yer alır. Valve wiki'sine göre GMod'un motoru sürüm 21'i de okur. Diğer Source oyunları kimi durumlarda farklı sürümler kullanır ve aynı numarayı taşıyan haritalar bile oyunlar arasında serbestçe birbirinin yerine kullanılamaz.