Was ist eine BSP-Datei? Aufbau, Lumps und Pakfile erklärt
Eine BSP-Datei ist die kompilierte Map der Source Engine. So ist sie aufgebaut: Header, Lumps, Entity-Lump und Pakfile, plus Tools zum Öffnen.
Eine BSP-Datei ist die kompilierte, spielfertige Fassung einer Map für die Source Engine und damit auch für Garry's Mod. Sie entsteht, wenn die Compiler aus der bearbeitbaren VMF-Datei des Hammer Editors Geometrie, Sichtbarkeit und Beleuchtung berechnen. In der Datei steckt fast alles, was Server und Spieler zum Laden brauchen: Geometrie, Entities, Lightmaps und häufig auch eingebettete Texturen, Models und Sounds.
Wofür BSP steht und wie die Datei entsteht
BSP bedeutet Binary Space Partitioning. Gemeint ist ein Verfahren, das den Raum einer Map in einen Baum aus kleineren Bereichen zerlegt. Die Engine nutzt diesen Baum, um schnell zu entscheiden, was sichtbar ist und womit ein Spieler kollidiert.
Du baust eine Map in Hammer als VMF-Datei. Das ist eine Textdatei, die sich jederzeit weiterbearbeiten lässt. Beim Kompilieren laufen drei Programme nacheinander: VBSP erzeugt Geometrie und Entities, VVIS berechnet die Sichtbarkeit, VRAD das Licht. Was die drei Schritte im Einzelnen tun, steht im Artikel VBSP, VVIS und VRAD erklärt. Das Ergebnis ist eine einzige binäre Datei mit der Endung .bsp, die für das Laden optimiert ist und nicht für das Bearbeiten.
Der Aufbau: Header und Lumps
Jede BSP beginnt mit einem Header. Er enthält:
- die Kennung
VBSP, an der Tools eine Source-Map erkennen - die Versionsnummer des Formats (bei Garry's Mod üblicherweise 20)
- ein Verzeichnis mit 64 Einträgen, die Lump-Tabelle
- die Map-Revision, also wie oft die VMF vor dem Kompilieren gespeichert wurde
Ein Lump ist ein Datenblock mit einer festen Aufgabe. Die Lump-Tabelle nennt für jeden Block, an welcher Stelle der Datei er beginnt und wie lang er ist. Nicht jeder der 64 Plätze ist belegt. Die wichtigsten Gruppen:
| Lump | Inhalt |
|---|---|
| Entities | Textliste aller Entities mit ihren Eigenschaften |
| Planes, Nodes, Leafs | der BSP-Baum, der die Map räumlich gliedert |
| Vertices, Edges, Faces | die sichtbaren Flächen |
| Brushes, Brushsides | die Brushes, unter anderem für die Kollision |
| Texinfo, Texdata | welche Fläche welches Material trägt |
| Visibility | die von VVIS berechneten Sichtbarkeitsdaten |
| Lighting | die von VRAD berechneten Lightmaps |
| Displacement-Daten | verformte Geländeflächen |
| Game Lump | unter anderem alle prop_static |
| Pakfile | ein eingebettetes Archiv mit Dateien |
Stimmt ein Eintrag der Tabelle nicht, etwa weil ein Block über das Dateiende hinausreicht, ist die Datei beschädigt. Das passiert zum Beispiel bei abgebrochenen Uploads.
Der Entity-Lump: Klartext in der Binärdatei
Der Entity-Lump ist normaler Text. Jede Entity steht als Block in geschweiften Klammern, mit Paaren aus Schlüssel und Wert:
{
"classname" "info_player_start"
"origin" "0 0 64"
"angles" "0 90 0"
}
Die erste Entity ist immer worldspawn mit den Grundeinstellungen der Map, etwa dem Namen der Skybox. Danach folgen Punkt-Entities wie Spawns, Lichter und Logik sowie Brush-Entities wie Türen und Trigger. Auch die Verbindungen zwischen Entities (Inputs und Outputs) stehen hier als Text.
Einige Entities findest du im Entity-Lump nicht, weil der Compiler sie auflöst: prop_static landet zum Beispiel im Game Lump, und func_detail wird Teil der Weltgeometrie.
Weil der Lump Klartext ist, kann ihn jeder mit einfachen Mitteln lesen. Das betrifft Namen und Logik deiner Map, aber auch die Sicherheit: Eine lua_run-Entity führt Lua-Code auf dem Server aus, während point_servercommand, das in anderen Source-Spielen Konsolenbefehle absetzt, in Garry's Mod deaktiviert ist. Bevor du eine fremde Map auf deinen Server legst, lohnt sich deshalb ein Blick in diesen Bereich.
Das Pakfile: Custom Content in der Map
Der Pakfile-Lump ist ein ZIP-Archiv innerhalb der BSP. Darin liegen Dateien, die die Map selbst mitbringt: Materialien, Texturen, Models, Sounds. Die Engine behandelt sie beim Laden so, als lägen sie im Spielordner. Auch die Engine schreibt hinein, zum Beispiel die Texturen der Cubemaps nach buildcubemaps.
Befüllt wird das Pakfile mit dem Valve-Tool BSPZIP oder mit Werkzeugen wie Pakrat, VIDE oder CompilePal. Wie du dabei vorgehst, zeigt der Artikel Custom Content in die BSP packen.
Alles, was im Pakfile liegt, wird an jeden Spieler ausgeliefert. Das wirkt sich auf die Dateigröße aus und bedeutet, dass versehentlich mitgepackte Dateien öffentlich werden.
Womit du eine BSP-Datei öffnest
- Hammer öffnet keine BSP, nur VMF. Für den Weg zurück brauchst du einen Decompiler wie BSPSource. Was dabei herauskommt, erklärt BSP dekompilieren erklärt.
- Pakfile ansehen: VIDE, Pakrat oder GCFScape zeigen die eingebetteten Dateien.
- Entities lesen: Ein Entity-Editor wie Entspy oder notfalls ein Text- oder Hex-Editor zeigt den Entity-Lump.
- Automatisch prüfen: Der Map Scanner von bspmarket.de prüft Header, Lump-Tabelle und Offsets auf Konsistenz, findet riskante Entities und listet die Dateien im Pakfile auf.
Warum der Aufbau für Fehlersuche und Schutz wichtig ist
Viele typische Probleme lassen sich einem Bereich der Datei zuordnen. Liegt ein Material weder im Spielordner noch im Pakfile, siehst du das bekannte Schachbrettmuster. Überschreitet ein Lump eine Grenze der Engine, bricht der Compile ab oder die Map lädt nicht. Wer weiß, welcher Bereich wofür zuständig ist, findet die Ursache schneller.
Für den Schutz einer Map ist eine Eigenschaft entscheidend: Die Engine muss die Datei lesen können, und jeder Spieler, der deinem Server beitritt, bekommt sie. Eine BSP enthält deshalb nichts, was dauerhaft geheim bleibt. Schutzmaßnahmen setzen an der Struktur an. Ein Fingerprint macht eine Kopie zuordenbar, Obfuscation reduziert Informationen, die nur einem Editor nützen. Den Überblick gibt GMod Map vor Leaks schützen.
Häufige Fragen
Kann ich eine BSP-Datei direkt in Hammer öffnen?
Nein. Hammer arbeitet mit VMF-Dateien. Eine BSP musst du erst dekompilieren, und das Ergebnis ist eine Rekonstruktion, nicht die ursprüngliche Arbeitsdatei.
Ist eine BSP-Datei verschlüsselt?
Nein. Das Format ist bekannt und wird von vielen Tools gelesen. Der Entity-Lump ist Klartext und das Pakfile ein ZIP-Archiv. Laut Valve-Wiki lädt GMod auch Maps, deren Lumps und Pakfile-Inhalte mit LZMA komprimiert sind; das ist Kompression, keine Verschlüsselung.
Warum ist meine BSP-Datei so groß?
Meist liegt es an den Lightmaps, die ein Compile für LDR und HDR doppelt speichert, und am Pakfile mit eingebetteten Texturen, Models, Sounds und Cubemaps. Die Lump-Tabelle zeigt, welcher Block überwiegt, und die Pakfile-Liste, welche Dateien den Platz belegen.
Welche BSP-Version nutzt Garry's Mod?
Maps, die mit den üblichen Compile-Tools für Garry's Mod erstellt werden, tragen Version 20. Die Nummer steht im Header direkt hinter der Kennung. Laut Valve-Wiki liest die Engine von GMod auch Version 21. Andere Source-Spiele nutzen teils abweichende Versionen, und selbst Maps mit gleicher Nummer lassen sich nicht ohne Weiteres zwischen Spielen austauschen.