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.