Forrás belül

Format Source Engine BSP

áttekintés
BSP formátumban tartalmazza az összes szükséges információt a Source motor helyesen megjeleníteni a térképen, és megadta a lehetőséget, hogy játsszon rajta. Ezek közé tartozik: a geometria, azaz minden sokszög szintjén .. A neveket és irányokat minden textúrák, amely akkor jelenik meg a helyszíneken; szükséges adatok a szimuláció a fizika, valamint egyéb tárgyak körül bennünket; helyét és tulajdonságait ecset alapú modell (prop) alapján és nem vizuális (logikai) szervezetek a térképen; Minden BSP-fa és asztali látszat, amelyek segítségével a lejátszót, hogy megtalálja a térképen a geometria és hatékonyan a térképet megjeleníteni a képernyőn. A kártya hordozhatja az azonos vagy akár egy textúra minta mennyiségben használnak, ami belül található Pakfile dudor (lásd alább).
Érdemes megjegyezni, hogy nem minden információt kell tartalmaznia a térképen, például BSP fájl nem tartalmazza a leírást a kártyát (ami látható, amikor betöltődik a CS: S és HL2: DM), és keresse meg az AI, az, hogy az egyes fájlok (létrehozott imya_karty.txt és imya_karty.nav rendre). Source Engine önmagában betölti további fájlokat Pakfile dudor fájlokat a térkép betöltése.
Hivatalos térképek Steam játék cache fájl (GCF) formátumban, és keresztül érhető el a fájlrendszer Steam. A kivonat a fájlokat a GCF fájlt, akkor kell használni a programot Nemesisґ GCF menekülsz.

BSP fájl fejlécében
BSP fájlt kezdődik egy fejlécet. Ez a szerkezet azonosítja a fájlt a Valve Source Engine BSP fájl tartalmaz egy változata a méret, hossz, és verzióját tartalmazó alfejezetek tartalmaz információt különböző részein a térképet.
BSP fájl szerkezete vettünk az SDK (nyilvános / bspfile.h), a fejléc hossza 1036 bájt, és meghatározása a következő:
struct dheader_t
int ident; // BSP fájlazonosító

int változata; // BSP fájl verziója
lump_t csomók [HEADER_LUMPS]; // dudor könyvtár tömb
int mapRevision; // A map`s felülvizsgálata (iteráció változat) száma
>;
Itt ident - 4 bájtos aláírás, amely a meghatározás szerint:
IDBSPHEADER (( 'P'<<24)+('S'<<16)+('B'<<8)+'V') //little-endian 'VBSP';
Ahogy talán már sejtette, megfordult rövidítése «VBSP». Hogy ő azonosítja Valve BSP fájlt; BSP más formátumok más aláírás (például az id Software Quake használt motor «IBSP»). BSP méret HL1 nem használja aláírásokat.
Második Egész határozza BSP fájl verzióját (BSPVERSION); HL2 a pillanatban 19 (decimális számrendszer); VMTB verzióját használja 17 formátumban.
Megjegyzés: BSP fájlt a többi játék használja a saját tartományok verziószámok.
Ezt követi egy 16 bájtos szerkezet lump_t. HEADER_LUMPS állandó értéke 64, ami. E. hoz létre a 64 elemet, és abban a pillanatban csak 48 alkalmazunk.
Itt lump_t szerkezet bejelentett bspfile.h:
struct lump_t
int fileofs; // eltolással a fájlban (bájt)
int FileLen; // hossza dudor (bájt)
int változata; // dudor formátumú változata
char FourCC [4]; // dudor azonosító kódját
>;
Az első két egész változók közé az eltolás bájtban (kezdetéhez képest a BSP fájl), és a mérete a bájtnyi adatot dudor-blokk; majd a formátum változata az aktuális blokk dudor-és 4-bájtos azonosító, hogy majdnem mindig értéke 0, 0, 0, 0 A fel nem használt tömb elemei csomók tartalmazhat változókat nullával egyenlő.
A típus a szereplő adatok a tömb csomók, attól függően, hogy a helyzet a tömbben, például: az első tömb egy összegben (Lump 0) mindig rögzített BSP entitás-adatok (lásd az alábbiakban). A valódi helyét az adatokat a BSP határozza meg kizárólag a mérete egy adott műszak egyösszegű blokk, és nem függ a megrendelés a tömbben, mint például az adatok egység tárolja a fájl végére, míg egy darab blokk az első tömbben.
Listát az összes gombócot a tömb (ismeretlen vannak jelölve egy kérdőjel):
Darabos: Név: Cél:
0 entitások Térkép szervezetek
1 Planes sík tömb
2 Texdata Index textúra nevek
Tetőpontja Vertex tömb 3
4-re sűrített láthatóságát bites tömbök
5 csomópontok BSP facsomópontok
6 Texinfo Face textúra tömb
7 Arcok Face tömb
8 Lighting lightmap tömb
9 Okklúziós Okklúziós adatok (?)
10 Leafs BSP fa levél csomópont
11 A fel nem használt
12 élek Él tömb
13 Surfedges Index élek
14 modell Brush modellek (geometriája kefe szervezetek)
15 Worldlights Fény szervezetek
16 LeafFaces Index arcok minden levél
17 LeafBrushes Index keféket minden levél
18 kefe ecset tömb
19 Brushsides Brushside tömb
20 környékre tömb
21 AreaPortals portálok területek között
22 portálok sokszögek határának meghatározása során a szomszédos levelek (?)
23 A klaszterek levelek, amelyek hatolni a játékos
24 PortalVerts csúcsok a portál sokszögek
25 Clusterportals sokszögek határának meghatározása során szomszédos klaszterek (?)
26 Dispinfo elmozdulási felülete tömb
27 OriginalFaces Brush arcok tömb előtt BSP felosztása
28 A fel nem használt
29 PhysCollide fizika ütközés adat (?)
30 VertNormals Vertex normals (?)
31 VertNormalIndicies Vertex normál indexelt tömb (?)
32 DispLightmapAlphas elmozdulás lightmap adatok (?)
33 DispVerts A csúcsok az elmozdulási felülete hálószemek
34 DispLightmapSamplePos elmozdulás lightmap adatok (?)
35 GameLump Játék-specifikus adatokat dudor
36 LeafWaterData (?)
37 Primitívek (?)
38 PrimVerts (?)
39 PrimIndices (?)
40 Pakfile Embedded tömörítetlen-Zip formátumú fájl
41 ClipPortalVerts (?)
42 Cubemaps Env_cubemap helyét tömb
43 TexdataStringData Texture névadatok
44 TexdataStringTable Index tömb texdata húr adatok
45 lefedések Info_overlay tömb
46 LeafMinDistToWater (?)
47 FaceMacroTextureInfo (?)
48 DispTris elmozdulási felülete háromszögek
49 PhysCollideSurface fizika ütközés felületi adatot (?)
50-64 Nem használt
Szerkezet bizonyos dudor-adatokat az alábbiakban ismertetjük.
Végén a fejléc tartalmazza a csekk száma, amely alapján az ellenőrzések számát, az eredeti VMF-fájl, ráadásul ez hozzáadódik az idő, amikor a térképen megmenekült.

Plane Lump
Az alapja a geometria a BSP vannak síkok, ezek egy vonalban felületek a BSP fastruktúrában.
Sík dudor (1) - egy mutató a szerkezetet dplane_t:
struct dplane_t
Vector normális; // normál vektor
float dist; // távolság származási
int típus; // tengelyében azonosítója
>;
Amennyiben Vektor - ez csak a szerkezet képviselő koordinátarendszer 3-D térben:
struct Vector
float x;
float y;
float z;
>;
Sík elemek határozzák meg a normális, a normális vektor, a mérés egy egység (1,0), és merőleges a sík felület. A helyzet által meghatározott síkban dist - a távolság a központtól a térkép (0,0,0) a gépet.
Matematikailag, sík számítjuk bizonyos ponthalmaz (x, y, z), és az egyenlet:
F (x, y, z) = ax + by + Cz + D
Ahol A, B és C - olyan komponensek normal.x, normal.y és normal.z, D - van ker.
A változó típusa tartalmaz egy bizonyos zászló jelzi, hogy a sík merőleges a koordinátatengellyel, akkor általában nem használják.
A legnagyobb számú sík a kártyán - 65536 (MAX_MAP_PLANES).

Vertex Lump
Vertex dudor (3) tartalmaz egy sor minden vertexґov (sarkok) a térképen geometria. A szög egy egyszerű pont 3 koordinátái (x, y, z).
A maximális számát szögek - 65536 (MAX_MAP_VERTS).

Él Lump
Él dudor (12) - egy mutató struktúra dedge_t:
struct dedge_t
előjel nélküli rövid v [2]; // vertex indexek
>;
Szélig An - él - egy összekötő vonal két sarkában. A maximális számát élek - 256000 (MAX_MAP_EDGES).

Arc és eredeti Face Lumps
Face dudor (7) tartalmaz egy alap geometriai kártyajáték használt motor képek megjelenítésére a képernyőn.
Face dudor - ez egy vagy több összetett struktúrák a map fájlban. Ez a tömb elemeinek dface_t, 56 bájt hosszú.

struct dface_t
unsigned short planenum; // a gépet száma
byte oldalán; // arcok ellentétes node`s sík irányával
byte onNode; // 1 csomóponton, ha a levél 0
int firstedge; // index figyelembe surfedges
rövid numedges; // száma surfedges
rövid texinfo; // struktúra info
rövid dispinfo; // elmozdulás info
rövid surfaceFogVolumeID; //?
byte stílusok [4]; // kapcsolható világítás info
int lightofs; // offset lightmap dudor
lebegnek a területen; // arc területén egységekben 2
int LightmapTextureMinsInLuxels [2]; // textúra világítás info
int LightmapTextureSizeInLuxels [2]; // textúra világítás info
int origFace; // eredeti arc ezt leválasztották
unsigned short numPrims; // primitívek
unsigned short firstPrimID;
unsigned int smoothingGroups; // lightmap simítás csoport
>;

BSP 17 tartalmaz egy kissé eltérő változata a módosított szerkezetű.
struct dface_bsp17_t
byte ismeretlen [32];
unsigned short planenum;
byte oldalán;
byte onNode;
int firstedge;
rövid numedges;
rövid texinfo;
rövid dispinfo;
byte ismeretlen [50];
int origFace;
unsigned int smoothingGroups;
>;

Ecset és Brushside Lumps
Brush dudor (18) tartalmazza az összes kefék, amely mind az eredeti fájl VMF (sőt, nem igényelnek dekompilálhatja, és hozza létre őket alapján decompiled kártya - könnyű feladat). Ez a dudor tartalmaz 12-bájtstruktúra dbrush_t

struct dbrush_t
int firstside; // első brushside
int numsides; // száma brushsides
int tartalmát; // tartalom zászlók
>;

Különösen érdemes megjegyezni, a változó tartalmát, itt van egy táblázat értékeihez neki

Max kefék - 8192 (MAX_MAP_BRUSHES)

Brushside dudor (19) - egy sor 8-bájtos szerkezete:
struct dbrushside_t
unsigned short planenum; // néz ki a levél
rövid texinfo; // struktúra info
rövid dispinfo; // elmozdulás info
rövid ferde; // az oldalsó ferde sík?
>;

A legnagyobb számú brushside - 65536 (MAX_MAP_BRUSHSIDES). Max brushside egy Brachet - 128 (MAX_BRUSH_SIDES).