TreeQBSP v1.61 Written by Greg Lewis (http://www-personal.umich.edu/~gregl/quake.html) Based on code originally by John Carmack, Ken Alverson, and Yahn Bernier. *** Summary This version of QBSP is intended as a memory-friendly replacement for the currently existing variants of QBSP, including all features of other programs (except as noted below) and a few totally new improvements. A list of the big features: Drastically reduced memory requirements (up to 90% for small maps, averaging perhaps 50-60% for large maps) Removed most hard-coded limits (MAX_MAP_PLANES, MAX_MAP_etc) Removed hull files (*.h1 and *.h2) Transparent water support for OpenGL cards Multiwad (WorldCraft-style) support, unlimited number of WADs New, cleaner .pts file for leaky maps Supports .por files for the BSP editor Support for Hipnotic/Ritual entity rotation Creates a qbsp.log file containing the qbsp output messages Automatic degenerate edge healing *** Important notes The default behavior for this QBSP is slightly different from the QBSP that John Carmack originally released. Most importantly, tjunc calculations are turned OFF by default, and can be enabled by a command line option. If you want to have exactly the same options as the original QBSP, run it like this: qbsp -tjunc -nopercent -oldaxis -oldleak [mapname] Errors and warnings are now neatly categorized by number (similar to the way compilers work). You will find a reference guide for these errors available in the errors.txt file included with this program. This is available on my web page and may contain updated info on fixing problems. *** Todo list The following are potential bugs and other issues that may be fixed in future versions of this program. I cannot guarantee any future releases due to overload in work at school, but watch the web page for more info. Investigate internal limits on .bsp format (such as clipnodes < 32767) Rare problem (?) with new .pts file going through walls (if you see this, please email me the .map) *** Contacting the author I'll preface this by saying that I receive too much email already. I won't reply to useless email. I am definitely interested in hearing bug reports and feature requests for this program. But before you send me email check out my site first to make sure that I haven't already addressed a particular bug or feature: http://www-personal.umich.edu/~gregl/quake.html If you still feel you have something important to tell me, you can email me at gregl@umich.edu. If you are reporting a bug, chances are that I will want a copy of your .MAP to reproduce the error, so be prepared for me to ask for it. *** For the Curious Currently, QBSP works something like this. The numbers in parentheses after each section is the approximate percent of the total QBSP that each portion takes. This entire cycle (except for LoadMapFile) is actually done 3 times in a row, once for each "hull". Each hull contains information for one size of creature: point-size, player-size, and shambler-size. LoadMapFile (2%) Converts from the .MAP format into an internal map format. Brush_LoadEntity (18%) Converts brushes from a plane-based description into a set of polygons describing each brush. CSGFaces (50%) Chops brushes into pieces where they intersect, removes the pieces that are "inside" other brushes, and merges the remaining pieces back together. SolidBSP (6%) Builds a BSP tree for the level. Portalize (6%) Creates the "portals" that vis uses, from the BSP information. FillOutside (0.1%) Checks for leaks in the level, and strips away the "outside" area of the level if it is sealed. If there is a leak, writes the .pts file. MergeAll (1%) Merges more surfaces together, once the outside has been removed. SolidBSP (5%) Builds another BSP tree, now that the outside has been removed. Portalize (4%) Creates another set of portals using the new BSP tree. MakeFaceEdges (4%) GrowRegions (0%) These two perform some final processing of information before storing it in the .BSP file. *** Credits John Carmack for the original code Ken Alverson for wqbsp source Yahn Bernier for ywbsp source and helpful advice ArchVile for general qbsp algorithm help Crowbar for -transsky and -splitspecial stuff EvlGenius for -noverbose Everyone else for everything else *** Revision log v1.61 Fixed bug which occasionally ignored areas of a .map, and which suppressed "Duplicate plane" warnings Added percent-done estimates (and -nopercent) v1.59 Increased estimate for total map plane count Fixed rotate_* with no target key crash (it's a warning now) Fixed long filename support (WC) Removed .prt file if leak exists (and empty .pts file if no leak) v1.55 Attempts to heal degenerate edges automatically Changed the loading order of brushes/faces back to reverse, same as other qbsp variants, to fix .prt bloat problems Fixed -onlyents with rotation Removed debug printfs v1.50 The first thing. More dynamic memory everywhere.