## BSPViz BSPViz ist ein kompaktes Go-Tool zum Analysieren von Doom-WAD-Dateien. Es lädt Maps, inspiziert Geometriedaten und baut daraus BSP-Bäume samt Statistiken oder Visualisierungen. Das Projekt entstand im Rahmen einer Seminararbeit und dient als Baukasten, um verschiedene BSP-Build-Heuristiken auszuprobieren. ### Features - Lädt klassische Doom-WADs und listet die enthaltenen Lumps - Extrahiert einzelne Lumps als Dateien zum Debuggen - Führt Geometrie-Diagnosen (Segment-Splits, Bounding Boxes) durch - Baut BSP-Bäume mit konfigurierbaren Parametern und misst resultierende Metriken - Exportiert BSP-Strukturen als DOT, optional weiterverarbeitbar zu PNG ### Voraussetzungen - Go >= 1.25 (siehe `go.mod`) - Graphviz (nur nötig, wenn DOT-Dateien gerendert werden sollen) - Eine Doom-kompatible WAD-Datei als Eingabe #### Graphviz installieren - **Linux (Debian/Ubuntu):** `sudo apt install graphviz` - **macOS (Homebrew):** `brew install graphviz` - **Windows (Chocolatey):** `choco install graphviz` Alternativ stehen aktuelle Pakete und Installationshinweise auch auf der offiziellen Seite: ### Installation ```bash git clone cd bspviz go build ./... ``` Alternativ lässt sich das Tool ohne vorherigen Build direkt ausführen: ```bash go run ./main.go -wad MYMAP.wad -map MAP01 -info ``` ### Verwendung Wichtige Flags (vollständige Übersicht mit `-h`): - `-wad ` (Pflicht): Pfad zur WAD-Datei. - `-map `: Map-Marker wie `MAP01`, `E1M1` oder benutzerdefinierte Namen. - `-list`: WAD-Verzeichnis anzeigen und beenden. - `-info`: Basisstatistiken zu Vertices und Linedefs ausgeben. - `-extract `: Angegebene Lumps (z. B. `VERTEXES,LINEDEFS`) nach `-out` speichern. - `-geomtest`: Segment- und Split-Diagnose für die gewählte Map ausgeben. - `-buildbsp`: BSP-Baum erzeugen; Parameter wie `-alpha`, `-beta`, `-leafmax`, `-maxdepth`, `-cands` und `-seed` steuern das Verhalten. - `-dot `: Gebauten BSP als DOT exportieren (setzt `-buildbsp` voraus; benötigt ein installiertes Graphviz für die weitere Verarbeitung). Beispiel: BSP bauen und als PNG visualisieren (Graphviz vorausgesetzt): ```bash go run ./main.go -wad MYMAP.wad -map MAP01 -buildbsp -dot tree.dot dot -Tpng tree.dot -o tree.png ``` ### Entwicklung - Code formatieren: `gofmt -w .` - Tests ausführen: `go test ./...` - Temporäre Artefakte (DOT/PNG) sind über `.gitignore` bereits ausgeschlossen. Beiträge, Erweiterungen oder neue Heuristiken sind willkommen.