This is BSP version 3.0 dos extended, written by Colin Reed, Lee Killough Please send all comments and/or questions about BSP to Lee Killough (killough@classicgaming.com). ------------------------------------------------------------------------------- Changes in 3.0x: Lee Killough 9/98: Fixed many cases of slime lines by going back to using slightly slower BSP21x splitting algorithm. Removed approximate visplane overflow detection code, as being too inaccurate to be useful. If visplane overflows need to be detected, then modifying the Doom source code to display them exactly in real-time would be a better idea. The visplane counting code in BSP22x and BSP23x was never 100% accurate, but was about as close as I could make it based solely on empirical evidence. NOTE: this change does not remove the -vp option, which attempts to reduce the chances of visplane overflows by using a special node line heuristic, and which is the more useful of the visplane-related options. This change only removes the -vpwarn and -vpmark options, which attempted to detect where visplane overflows occurred, but which were too crude. Exact detection of visplane overflows is unnecessary to remove them, because techniques are available which reduce the probability of visplane overflows without having to know whether they actually occur. ------------------------------------------------------------------------------- Changes in 2.3x: Lee Killough 2/98: Fixed a minor bug which caused textures to bleed sometimes. Thanks to Jonathan Campbell (joncamp@tiac.net) for finding it. Switched from djgpp v1.12 to v2.01. Linux builds now supported (thanks to Andre Majorel for the port). Possible future enhancement: >64K blockmap support (requires changes in Doom source code as well). ------------------------------------------------------------------------------- Changes in 2.2x: Lee Killough 10/97: Added -vp option to reduce the chances of visplane overflows, without loss of detail. Using -vp causes node line picker to choose node lines in a way that is empirically known to reduce or eliminate visplane overflows (see visplane.txt). No guarantees, though!!! Added -vpwarn option to warn about possible visplane overflows (see visplane.txt). -vpmark option also added, which leaves permanent marks in the form of player 1 starts. It's a good idea to write to a separate output file when using this option!!! You can then use an editor, play each alternate player start, and see if each one causes visplane overflows, and then remove it. Usually no- clipping must be used, at least to step out from the wall, since it inserts player starts without regard to collisions, and it uses walls as a basis for visplane calculations. Added -noreject option, to allow building nodes without messing up an already-built reject map. Added -thold option to change the visplane threshold. May be used to report more potential visplane overflows if the -vpwarn or -vpmark approximations estimate too few visplanes. Default threshold is 128. Changed the way level markers in the lump directory are handled, to accomodate DCK3.61, EdMap, and perhaps other editors. Some editors, such as DCK3.61, do not always set the length field in a level marker to 0, and EdMap requires that the offset field in a level marker be equal to the offset of the first resource. ------------------------------------------------------------------------------- Changes in 2.1x: Lee Killough 06/97 Fixed design bug which caused invisible barriers or disappearing Things. Problem was in how segs incident to a partitioning node line were partitioned -- they were partitioned according to sidedef, rather than vertex, orientation w.r.t. the node line. Flipping the affected seg's linedef usually fixed the problem. Now an incident seg is properly partitioned either on the left or right side of a node line depending on whether the two segs are in the same direction or not, not whether they are both flipped or not. Added special effects features: If a linedef has a sector tag >= 900, then it is treated as "precious" and will not be split unless absolutely necessary. This is good to use around borders of deep water, invisible stairs, etc. Furthermore, just for grins, if the linedef's tag is 999, then the sidedefs' x-offsets set an angle adjustment in degrees to be applied -- you can look straight at a wall, but it might come right at you on both sides and "stretch". ----------------------------------------------------------- New to 2.0x: Multilevel support!!! Automatically builds all levels in wad. Does not strip textures or other lumps from wads anymore!!! Supports HOM-free transparent doors: Simply make the sector referenced by the doortracks have a sector tag of >= 900. No need to remember sector numbers and type them in on a command line -- just use any sector tag >= 900 to permanently mark the sector special. See TRANSDOR.WAD for an example of sector tags in the 900's being used to create HOM-free transparent door effects. ----------------------------------------------------------- Changes from 1.4x to 1.5x: Replaced GO32.EXE with newer version, to support Windows and DPMI. ----------------------------------------------------------- Changes from 1.3x to 1.4x: Lee Killough: Fixed bug which caused BSP to "do nothing" on systems where GO32.EXE was not in the user's path. Added -factor option to allow changing the heuristic used by the node picker. Factor can be any positive integer, and the larger the factor, the more costly seg splits are. A factor of 17 is the default and behaves just like earlier versions of BSP. Changing the factor can sometimes prevent visplane overflows in wads. But then again, some wads have just too many visible 2s linedefs for the node builder to make a difference. If you have visplane overflows, experiment with the -factor option before giving up. ----------------------------------------------------------- Changes from 1.2x to 1.3x: New version due to performance enhancements by Lee Killough (killough@rsn.hp.com). Runs at least 3 times as fast as before, due to changes in PickNode. Same results are obtained, but with greater speed. Differences from 1.2x: PickNode() rewritten to maximize performance. New PickNode() algorithm features pruning strategy which allows inner loop to exit as soon as a seg is detected as being worse than the best so far. All floating-point arithmetic inside inner loop has been eliminated. GetVertexes() changed and Reference() removed, replaced with a faster vertex renumbering algorithm which also removes lines of length zero. IsLineDefInside() tuned by eliminating bit mask variable. Functions are static, to reduce code size by permitting total inlining. Various other minor performance enhancements ----------------------------------------------------------- Changes from 1.1 to 1.2x: New version 1.2 due to bug found by Mark Harrison that caused some problems with flipped segs having their textures buggered up. The GO32 dos extender has been pre-pended to the executable. ----------------------------------------------------------- This builds a BSP node tree for your DOOM wad files. Usage: BSP [-factor nnn] [] If no output file is specified 'tmp.wad' is written. ----------------------------------------------------------- This ZIP includes the fullly commented source code for all you Doom editor/utility writers out there. ----------------------------------------------------------- A known problem is a conflict between the GO32 dos extender and QEMM's DPMI... put 'set GO32=nodpmi' in your autoexec.bat to avoid problems. ----------------------------------------------------------- Future enhancements (possibly, depending on demand): * Ability to specify level(s) to build separately * Reject map build