This is XP-Cagey's 15th revision of the half life compile tool set. It is based upon Merl's final 1.7 custom build of the original Zoner's Half Life Tools 2.5.3 (which were originally based on the Valve compile tools, modified with permission).
These tools are built upon the final build of Merl's tools (custom build 1.7).
Version 1.7p13 |
HLRAD |
Huge performance gains with custom shadow code. Submitted by hullu <hullu@unitedadmins.com>
|
HLCSG |
Fixed problem with info_compile_parameter code that turned off clip hulls by default.
|
HLBSP |
Fixed incorrect storage of empty clip hulls - the head node pointer now correctly stores the content type instead of a pointer to another model's clip information; this allows zhlt_noclip to work correctly in all cases, and also allows maps created with clip hulls turned off to run in the game without crashing.
|
HLBSP |
Fixed crash error resulting from running HLCSG with nocliphull followed by running HLBSP normally.
|
HLCSG |
Changed the zhlt_noclip and zhlt_invisible attributes' behavior: if either attributes' value is set to '0', the attribute is ignored. This should allow people to add these attributes to FGD files as Choices.
|
HLCSG |
Simplified bevel clip algorithm used by precise, normalized, and simple clip types (thanks to Carsten Fuchs for pointing out the change).
|
DOCS |
Bundled docs from ZHLT 2.5.3 and MHLT 1.7 in their original formats.
|
Version 1.7p5 |
HLCSG |
Added a new zhlt_noclip flag. Adding this key with a non-empty value to any brush entity will cause ALL clipping information for the brush entity to be stripped, making the entity non-solid in the game. Suggested by Yamazaki.
|
??? (HLCSG/HLBSP?) |
Added a new zhlt_invisible flag. Adding this key with a non-empty value to any brush entity will cause the entity to be invisible in the game and not contribute to r_speeds (this is the same as using the null texture for the entire entity).
|
HLCSG/HLBSP |
Wrote in support for BEVEL texture - this texture acts like a NULL texture but also doesn't expand when generating clip hulls. Can be used to eliminate exterior corner clipping bugs without using "-cliptype precise" (although "-cliptype precise" is still the recommended method for removing clipping errors, as this feature is experimental). The BEVEL texture has been added to the zhlt.wad file. Suggested by WolfWings.
|
HLBSP |
Increased MAX_MAP_BRUSHES (the maximum number of brushes in the map) from 8K to 32K. Suggested by A W!seM4n Onc3 Sa!d.
|
RIPENTS |
Updated to support the higher map limits of this release.
|
HLRAD |
HLRAD optimized. Testing showed a ~5% improvement on compiles that weren't using virtual memory. Larger gains are probably possible in the future.
|
ALL TOOLS |
Enabled MSVC++ compiler optimizations for speed. Your milage may vary.
|
These tools are built upon the final build of Zoner's tools (version 2.5.3).
These tools were modifications of the original Valve compile tools, modified with permission.
Version 2.4 |
HLCSG |
Added the ability to define custom sized bounding boxes for the collision hulls through a command line switch called -hullfile. The format is simply three lines containing three numbers of dimensions of the box in x y z format. The default settings are included in a file called default.hull in the ZHLT distribution. This option is only primarily of interest to mod authors and their mapping team.
|
HLRAD |
Malformed face normal errors now output world coordinates of the error.
|
NETVIS |
Netvis clients inherit the -full setting the server uses.
|
NETVIS |
Netvis clients now automatically download .bsp and .prt data from the server.
|
NETVIS |
Netvis clients now download the data calculated during BasePortalVis from the server.
|
NETVIS |
Improved efficiency of netvis clients to nearly optimal levels.
|
HLVIS |
Merged in -full vis patch from Antony Suter <antony@mira.net> This increases the quality of the vis calculations at the expense of a minor speed hit. Anyone who has worked with Quake1 editing should remember this option..
|
HLVIS |
Optimized hlvis and improved its performance by around 20-30%.
|
HLCSG |
Fixed a rare crash with -onlyents updates.
|
HLRAD |
The number of texture lights inside .rad files is now unlimited.
|
Version 2.3 |
HLVIS |
Merged in code from Antony Suter <antony@mira.net> (aka Examiner) which improves vis performance by approximately 40%.
|
HLCSG |
Allow more entities, by not counting static light entities the real Halflife engine limits. Switchable/pulsing lights are still counted, howerver.
|
HLRAD |
Fixed trigger/clip textures consuming RAD resources and affecting the radiosity lighting pass.
|
HLCSG |
Removed obsolete -hullfile and -glview options.
|
HLBSP |
Worked around an error in Halflife (BadSurfaceExtents) which could occasionally occur only in software mode on a map.
|
HLBSP |
Created 'entities.void' 'mapname.void' '-void filename', which is a list of entity names to be allowed in the void without causing a leak. Monster, item, and trigger entities should almost never be allowed in this list, but things like func_door_rotating (which occasionally needs its origin in the void), and multi_managers, etc can be placed in the void without problems.
|
HLCSG |
Correctly not allow brush entities composed of only ORIGIN and CLIP textures which would slip through the error checking in hlcsg and cause hlbsp to crash.
|
Version 2.2.0 |
HLRAD |
Fix rare 'DecompressVis' overflow.
|
HLCSG |
The -noskyclip option now also means to not discard the non-sky textured objects 'inside' a sky zone, as sometimes the skies sometimes come out solid always as a result of removing the faces.
|
HLBSP |
Removed -watervis, will add light through water without hacking vis to do it at some point in the future.
|
HLRAD |
Added -nomatrix command line option. This option causes hlrad to not use a vismatrix cache at all. -nomatrix is faster than -sparse especially on multiprocessor (4+ CPU) machines, or on machines where even -sparse mode uses too much memory. However, if using a large number of opaque brush entities in the world, the nomatrix mode will be dramatically slower than the normal or sparse methods.
|
HLRAD |
Dramatically reduced memory usage of transfers data.
|
HLRAD |
Brush based entities can affect lighting by adding a key/value of zhlt_lightflags.
- 0 is default
- 1 is 'embedded fix'
- is opaque (BLOCKS LIGHT!)
- 3 is both
For opaque brushes, it will be frequently necessary to place point lights inside the brush so that faces obscured by the brushes are properly lit (for example the trim adjacent to a func_door).
|
HLRAD |
Fixed light streaking across edges of surfaces.
|
HLRAD |
Fixed bleed correction code pulling in lightmap pixels unnecessarily far distances in rare cases, when a simple and short nudge into the world would do the trick.
|
HLRAD |
Completely fixed phong shading (smoothing) using bad data in some cases.
|
HLRAD |
Removed the triangulation code (no more MAX_TRI_TRIS, MAX_TRI_POINTS, MAX_TRI_EDGES errors), and replaced it with a simpler and more correct looking algorithm.
|
HLRAD |
Replaced patch subdivision code. A chop of 64 will generate moderately more patches than before, and bounced lighting looks much better overall.
|
HLRAD |
Removed -maxchop, as a result of reworking patch subdivision code.
|
ALL TOOLS |
Allow command line options after the map name in the command line.
|
ALL TOOLS |
Added -noinfo switch to not show extended configuration settings during run.
|
Version 2.1.2 |
HLRAD |
Added -texscale option. This controls the chop value of texture light surfaces. In the past this was set to the same as -chop. The -texchop value is automatically divided by two for any -extra mode compiles.
|
HLRAD |
Added -dscale option. This controls the scaling of direct lighting in the world. The default is 2.0 (which is technically a bug, it should be 1.0). Setting this to zero can show your map with no direct lights, and just the bounced light information, which can be helpful for debugging lighting.
|
HLRAD |
Fixed light bleed code which was a bit on the buggy side in 2.1.0. The -nobleedfix switch has been removed as most of the code was rewritten.
|
HLRAD |
Fixed 'Bad Light Error' which was caused by a change in 2.1.0 for the skyfix.
|
HLRAD |
Eliminated most or all SwapTransfers unmatched warnings.
|
HLCSG |
Fixed 'normal texture inside sky' culling which was added in 2.1.0 which was generating HOM in some cases.
|
Version 2.1.0 |
HLRAD |
Added alternate algorithm to reduce the size of the vismatrix. It is slower to use, but uses a lot less memory. It can also be used to break the 65535 lightmap limit imposed by the normal vismatrix. The command line switch to use is -sparse.
|
HLRAD |
Added -circus command line switch. All pixels in the lightmaps which receive 0 lighting get set to a random and very bright color. Handy for finding lighting anomalies and areas dependent on bounced lighting information.
|
HLRAD |
Fixed the dark spots where sky brushes meet world brushes. The fix also reduces the number of necessary light_environment entities in a map to 1 (it is used globally for all SKY in a map now). The older somewhat broken behavior (which tests line of sight to all surfaces and a light_environment) is still available, as the command line switch -noskyfix.
|
HLRAD |
Fixed light bleeding through thin walls (Can be disabled with -nobleedfix).
|
HLRAD |
Brush entities can have a new key "light_origin" which points to a targetname of an entity. The brush entity is moved to the location of the targeted entity for the purposes of lighting.
|
HLRAD |
Fixed lighting of brush entities which have an origin ORIGIN.
|
HLRAD |
Entries in lights.rad can now have C++ style // comments.
|
HLCSG |
World brush faces on the interior of SKY brushes are now discarded, so as not to consume resources (texture info, lightmaps etc), and make it easier to see the map when noclip'ed outside the world.
|
HLCSG |
Added code to detect when brushes overlap by 'too much'. This feature is disabled by default and can be set with the -brushunion command line switch. The value to specifiy is a percentage of volume a brush is overlapped by, from 0 to 100. When starting out with this command, start with higher values and work your way down, or else you are likely to get spammed for several minutes with warnings.
|
ALL TOOLS |
Revamped command line option help.
|
ALL TOOLS |
All tools display (and log) the user configurable settings when run.
|
Version 2.0.0 |
ALL TOOLS |
Support for a new version of Worldcraft (WC 3.3).
|
HLVIS |
A new program 'netvis' has been added to ZHLT. This program is for distributed VIS compilation across multiple computers. The code came from netvis for Quake1, and was heavily modified so it would work correctly and efficiently. While the code is multithreaded, the portal calculations are not, and one client per processor will need to be fired up on multi-processor machines.
|
HLCSG |
-skyclip is now obsolete. Clipping of skies, by automatically copying all SKY brushes with a duplicate CLIP brush in the same place, is now automatic and cannot be turned off. The brush numbering problems that -skyclip used to create, are no longer a problem.
|
HLCSG |
HLCSG will more actively find brushes of the wrong type in the world or in entities (i.e. CLIP, HINT, etc in entities).
|
ALL TOOLS |
Recompiled with __fastcall on default, and -O2 option with ICL now produces .exe's that won't crash (was previously using -O1). Maybe faster, maybe not.
|
ALL TOOLS |
Cleaned house in the code, ran it all through indent, removed all remaining unused functions in the libraries, integrated the netvis code, started providing MS Visual Studio project files again.
|
PERL UTILS |
Revamped the perl scripts to work in all cases, gave them consistent usage help and command lines. Added a new script called 'dumpline.pl' which will dump an entity based on line number, which is frequently needed to find an entity that stops hlcsg with an 'line XXXX is incomplete!' message.
|
Version 1.6.2 |
HLRAD |
Found one last unnaturally large object created on the stack, it is now allocated from the heap. Unix compiles of ZHLT work better with 'sane' ulimits.
|
HLCSG |
Replaced relatively vague 'Error: ParseEntity: { not found" into one that displays the entity number which had a problem.
|
HLCSG |
Replaced relatively vague 'Error: parsing brush' with a message that displays entity/brush/face numbers as well as the bogus text.
|
HLBSP |
Set MAX_MAP_PLANES back to 32767, it seems Halflife did some really weird things when running a map, by having it be higher.
|
ALL TOOLS |
Increased MAX_MAP_TEXINFO from the original limit 8192 to its maximum 32767.
|
ALL TOOLS |
Created '-dev #' command line switch for developer output, and migrated various messages from -verbose to it. The # is a number from 0 to 6.
- 0 being off
- 1 shows major errors
- 2 shows warnings
- 3 shows informative messages
- 4 shows verbose fluff/lint messages
- 5 is spam mode
- 6 is mega-spam mode :)
-dev is for ZHLT developers and possibly users troubleshooting a ZHLT bug.
-verbose is for map makers to show miscellaneous messages about the map compilation process
|
ALL TOOLS |
Added better error handling logic in the core threading functions for the Win32 platform
|
Version 1.6 |
HLBSP |
Increased MAX_MAP_BRUSHES (the maximum number of brushes in the map) from 4096 to 8192.
|
HLBSP |
Increased MAX_MAP_PLANES from 32767 to 65535, and changed some data structures from short to unsigned short. Halflife seems to tolerate it.
|
HLRAD |
Increased MAX_TRI_POINTS from 3072 to 4096. This made the tringulation_t structure jump from 35 to 70Mb, hopefully this won't cause anyone too much trouble (as it isnt allocated until after the vismatrix is freed).
|
HLVIS |
Added buffer overflow errorchecking in CompressVis and DecompressVis.
|
HLRAD |
Fixed unusally large -bounce's being allowed (or negative bounces).
|
HLRAD |
Fixed swaptransfer messages from printing their descriptions multiple times.
|
HLCSG |
Fixed 'outside world' messages from printing their descriptions multiple times.
|
HLRAD |
Added total number of swaptransfer errors at end of run, for trivia.
|
Version 1.4 |
HLRAD |
Added support for the optional keys _fade and _falloff keys in light entities.
- _fade defaults to 1 if not set. Values approaching zero cause light to travel further, values > 1 cause light to not travel as far.
- _falloff defaults to 2 if not set. The only other valid value is 1. 2 uses inverse square falloff, 1 uses plain 'inverse falloff'. Light travels REALLY far without dissipating with _falloff 1.
|
HLRAD |
HLRAD will refuse to run if there are no lights in a level.
|
HLRAD |
-fade and -falloff added to command line to hlrad. Entities which do no have explicit values set in them will use the global values set by the command line. The defaults are the same as above with the entities.
|
HLCSG |
SKY brushes can be clipped automatically if the -skyclip parameter is specified to hlcsg. Caveat: the brush numbers in error messages will be WRONG with respect to the .map file when -skyclip is in effect.
|
HLRAD |
The tools no longer require lights.rad, and will warn if there isn't one instead.
|
ALL TOOLS |
Added -nolog to all tools to generate 'pre 1.3' behavior (no logfile generation of any kind).
|
ALL TOOLS |
Added -low and -high to all the tools. This changes the proces priority from its default (normal) to a higher or lower value. Caveat: on unix only root can increase the priority level of processes, so usually only -low is of interest in that environment.
|
ALL TOOLS |
Started adding more explanitory help for error messages. The most fatal/common ones have been done first. The rest will have to wait for further versions of ZHLT.
|
Version 1.3 |
ALL TOOLS |
Create a 'fatal warning' type that flags the compile as failing at the end, but allows processing to continue so that muliple warnings can be displayed in a single run.
Examples include:
- CanonicalVector: degenerate
- (brush) outside world
- coplanar brush faces
- mixed contents
|
ALL TOOLS |
Cleaned up the code and removed dead #ifdefs and unused functions. Clarified globals and made as many functions static as possible.
|
ALL TOOLS |
Added simultaneous logging to display and logfile. Logfile names are surprisingly called mapname.log. Errors also get generated into a simplified mapname.err file.
|
ALL TOOLS |
Added error detection bailout. When any of the tools generates an error, the mapname.err file is generated. hlbsp, hlvis, and hlrad will refuse to run if this file exists. This was added as a safety measure for the various compiler front ends and batch files out there which do not properly 'not run' the tools if one of them encounters a problem.
|
ALL TOOLS |
Merged in some changes from MUTILS which was based on ZHLT 1.0. The system should now compile (and run) on Linux, Irix, and probably most other POSIX capable systems.
|
ALL TOOLS |
Tweaked progress indicators. As a result of the MUTILS merge, the progress indicators have changed. Unfortunately for Windows sytems Ihad to disable it by default for the large amount of updates tends to crash Worldcraft if you are using that as your compiler front-end. If you want to see the new display (and you aren't using Worldcraft as a front-end) just add the new command line switch -estimate to each tool. For the Unix versions, it is enabled by default and you should use -noesimate to go back to the old-ish style display.
|
HLRAD |
Bumped MAX_TRI_TRIS up 50%. Aparently some people were running in to this one.
|
HLCSG |
Added code to cleanup stale files. On startup, HLCSG now deletes mapname.p0, .p1, .p2, .p3, .pts, .prt, and .bsp. This helps the other tools not ever run with stale data.
|
HLCSG |
Added WADPATH environment variable. The environment variable WADPATH may be used to point to a single directory (no trailing slash) for wad files. This is primarily of interest to the people running the Unix/Linux/POSIX (whatever) port of ZHLT and need some way of getting hlcsg pointed to the wad files. The directory names inside the "wad" attribute of the worldspawn entity will be preserved as they are, so you can easily compile maps exported from Worldcraft in unix, without having to tweak them first.
|
Version 1.2 |
HLCSG |
Promoted the inability for hlcsg to find a .wad file from a warning to an error (which caused bsp to crash usually).
|
HLBSP |
Added a command line switch "-maxnodesize n". The default value is 1024. A smaller value causes bsp to generate many more portals (making the bsp tree much more complex) which can sometimes help vis do a better job on its own without HINT brushes. Larger values of course, do the opposite. Larger values with well placed HINT brushes can keep the bsp tree simple yet highly efficient.
|
HLBSP |
Removed -draw option and dependency on tools for OpenGL.
|
HLCSG |
Removed -draw option and dependency on tools for OpenGL.
|
HLCSG |
Texture names in the MAP files are converted to UPPERCASE at compile time. Some non-Worldcraft editors occasionally emit lowercase texturenames in the .map files which is bad.
|
ALL TOOLS |
Command line switches are no longer case sensitive.
|
HLCSG |
'plane with no normal' warning was promoted to an Error, to prevent hlbsp from crashing.
|
PACKAGE |
Added installation instructions for Worldcraft, HLCC, and Q2Beaver.
|
PACKAGE |
Added dumpbrush.pl and dumpent.pl scripts to the toolkit. Basically you ask them to display brush (or entity) #n and they do it.
|
PACKAGE |
Added numberbrush.pl scripts to the toolkit. This script adds comments to .map files so you can find a brush (or entity) by number.
|
ALL TOOLS |
Added a command line switch -texdata to all the tools. The default is 4mb. If you wish to use more than 4mb, add "-texinfo n" to the command line for all four tools; hlcsg, hlbsp, hlvis, hlrad; where n is a number in kilobytes. i.e. -texdata 8192 would set texture data to 8mb
This approach is kind of hack-ish now and will get cleaned up later.
|
HLCSG/HLBSP |
Added support for HINT brushes. To use hint a brush in Halflife, place zhlt.wad into your valve directory, and add it to the list of wads in your editor. The tools will always treat zhlt.wad as if it were -wadincluded so there is no danger of people getting stuck with the game crashing error 'unable to open valve/zhlt.wad'.
HINT textures have the following 'gotchas':
- Every face on a hint brush MUST have the HINT texture on it. Treat it just like a sky brush, where the SKY texture is to be applied to all sides.
- It is safe for a hint brush to touch or extend into the 'void'.
- Hint brushes, while creating more vis portals will create more polygons (potentially MANY more if you are not careful) and can make r_speeds worse or ineffective. I.e. You add more polygons splitting brushes than you save by hiding an area.
|
PACKAGE |
Added zhlt.wad which has one texture, the HINT texture. You should put this wad into your 'valve' directory, and add it to your editor.
|
ALL TOOLS |
The logic in the code which limited the length of an entity attribute had 3 values in various stages of compiling, 512, 1024, and 4096 bytes. This in effect limited it to 512, since it was the most restrictive of the 3. All of them have been changed to 4096 now. This change primarily fixes people who have long pathnames to their wad files, as well as many wadfiles in their list.
|
ALL TOOLS |
Extended entity text data from 128k to 512k. Halflife seemed ok with this on my test map, but remember it makes the game use more memory.
|
Version 1.1 |
HLBSP |
Fixed a crashbug which was caused by having a CLIP texture on an entity. Ideally qcsg should detect this.
|
HLCSG |
Merged in Tim Smith's changes to CSG for use with the QuArK editor which stores its map files with raw floating point numbers.
|
HLCSG |
-wadinclude now remembers what you specified on the command line for -onlyents recompiles. However a 'clean build' will erase the temp file used to remember, so full builds will still require -wadinclude [file.wad]
|
HLCSG |
Altered -wadinclude [file.wad] to take partial matches instead of full path. Ex. use -wadinclude file.wad
|
HLCSG |
-wadinclude is no longer case sensitive.
|
HLCSG |
Be careful with the changes to -wadinclude. It does a basic substring match so if you do -wadinclude halflife and your Halflife directory is say D:\Games\Halflife it will match all wad files since it finds the string halflife somewhere in the path to the file.
|
HLCSG |
Changed MAX_MAP_MIPTEX errors into asserts with friendlier descriptions.
|
HLCSG (1.1a) |
Fixed texture alignment for Quark users. Thanks again to Tim Smith for getting me the 'missing' file.
|
PACKAGE |
Added stripnulents.pl and tfcabbrev.pl scripts to the toolkit.
- stripnulents.pl removes unused entity attributes (almost all with the value of "0", plus some troublesome TFC ones from before when the FGD files were fixed).
- tfcabbrev.pl can convert a map's TFC entities to and from the abbreviated format. (Ex: g_a => goal_activation).
- Instructions to use these scripts are contained inside the scripts, at the top. Just look at them in notepad or something.
- To use these you need to install a version of Perl onto your machine. ActiveState has the most up to date port of perl for Windows.
|
Version 1.0 |
HLRAD |
Fixed a bug which caused 'transfer < 0' errors, basically the algorithm which generates the vismatrix didn't have unsigned types everywhere and overflowed to negative array indexes numbers. The end result : division by zero later in the compile during MakeScales causing 'transfer < 0'.
|
HLRAD |
Changed the 'transfer < 0' to be a severe warning in the event it attempts a division by zero. If it happens there will be quite a few messages during the compile, but the map will be playable. However areas will be 'fugly' and have random splotches of bright and dark textures. I've called it the 'sycamore' effect since it kinda looks like that . . . REAL 'transfer < 0' errors not caused by division by zero attempts will still error out as normal.
|
HLCSG |
Fixed -wadinclude to strip the .wad from the worldspawn "wad" tag so the BSP would not cause Halflife to crash when played without the .wad file. HOWEVER if you run hlcsg -onlyents at a later time, the .map file will write in the original value for the "wad" tag and will 'break' the BSP. Solution: Edit the .map, change the worldspawn entity's "wad" listing (it is one of the first few lines in the file) before doing -onlyents updates.
|
HLCSG |
Added a texture usage display to hlcsg runs, so you always know how much texture memory your map is trying to use.
|
ALL TOOLS |
Increased the texture memory limitations from 2mb to 4mb (This is the source of MAX_MAP_MIPTEX errors in qcsg).
|
ALL TOOLS |
Increased the max lightdata from 2mb to 4mb. It was hard to have large patch counts (>45000) with complex lighting.
|
ALL TOOLS |
Added -chart command line paramter to print out the bsp lump (memory) usage that normally qrad only displays when its done. Especially handywith to use with hlcsg in -onlyents mode.
|