
Enhanced RVis/Light/BspInfo utilities
=====================================

Main features are :

* Progress feedback that works in any console and does not cause performance loss.
* Large map capacity; most limits are beyond the Quake engine capacity.
* RVis: AutoSave feature for securing long vis runs.
* Light: High quality 4x4 oversampling is available.
* Light: Fast processing using new options.
* Light: Soft anti-aliased shadows using new option.
* Light: Support for Hipnotic/Ritual entity rotation.
* Light: Support for min/maxlight, enhanced sunlight and wait/delay/mangle/antilight keys.
* Light: Emulation of TyrLite/IKLite/ArghLite/LightDLX lighting using new options.
* Light: Enhanced control of light distribution via new options and keys.
* Light: Support for QuArK/Hammer ETP (Enhanced Texture Positioning) using new option.
* BspInfo: Portal (prt) file generation available.
* BspInfo: Statistical light data printout available.
* Enhanced warning/error messages.
* Log file.

==================================================================================================

The changes from the original Vis, RVis, Light and BspInfo source code are as follows :

RVis 2.31, Light 1.43 and BspInfo 1.27 (May 1 2006)

1. Light: Fixed a crash bug that could occur when the warning "Texture axis perpendicular ..." was
   printed. This also means that the printed coordinates have been invalid.
2. Added many more checks for corrupt bsp data. The checks are always enabled for RVis and Light,
   while BspInfo needs the new option "-chk" to do the same.
3. BspInfo: Improved so errors during bsp load will not abort program when using wildcards.
4. RVis: Changed so verbose printout will update better and now always contains the extra progress
   bar for each portal.


Light 1.42 (Dec 28 2005)

1. Fixed a bug that could cause invalid lighting when using "-soft" and "-tyrlite"/"-tyrlite95"
   options together with overriding worldspawn minlight with a lower value from command line.
2. Changed so all non-light entities that has a "light" key will also be considered unsourced
   lights.


Light 1.41 (May 23 2005)

1. Added multi target check for any entity except lights. This means that any "target*",
   "targetname*" or "killtarget*" will match each other, e.g. "target" "name" will match
   "targetname3" "name" or "killtarget10" "name". Max 16 targets are allowed for each of the three
   variants in each entity.
2. Added warnings for potentially missing triggers also for trigger_teleports.
3. Added warning for missing targetname for func_spawn*.


RVis 2.30 (Mar 25 2005)

1. Added new options "-noambient", "-noambientlava", "-noambientsky", "-noambientslime", and
   "-noambientwater" to better control ambient sounds.


Light 1.40 (Feb 14 2005)

1. Improved handling when the warning "Too many light styles ..." appears. If "-soft" option is
   enabled, normal light (style 0) and minlight will always be kept since they are most likely
   dominant. Also added warning when minlight overrides. 
2. Added warnings for potentially missing triggers in each skill. Only specific targets are
   checked (all func_* and most trigger_*). The warnings can be disabled with the "-noskill"
   option.
3. Added new option "-nowrite" which does the same as "-onlyents" but with bsp write disabled.
   Useful when only checking entities.
4. Disabled "Elapsed time" printout when using options "-onlyents" or "-nowrite".


Light 1.39 (Oct 29 2004)

1. Added new option "-shadowsense #" which sets the angle (shadow) sensitivity for 2nd sunlight,
   see details below.
2. Added new option "-sunlight3 #" and "_sunlight3" key which just enables 2nd sunlight and at the
   same time sets the shadow sensitivity to 0.4, see details below.
3. Added warning for having targeted (switchable) sourced lights.


Light 1.38 and BspInfo 1.26 (Oct 5 2004)

1. Light: Added new option "-gate #" which enables Fade Gate (default 0.0). This can dramatically
   speedup processing with only minor light distortion, recommended gate value is 1.
2. Light: Speedup of maps with many spotlights.
3. Light: Added new option "-tyrlite95" which enables closer TyrLite 0.95 emulation, see details
   below.
4. Light: Added new option "-noanti" which disables antilights.
5. Light: Added warning for having targeted (switchable) lights with style < 32 set (style
   overrides).
6. Light: Fixed bug when having targeted lights with style < 32 set.
7. Light: Fixed bug when using "-noflash" option and having targeted lights with style < 32 set.
8. BspInfo: Changed warning for # faces exceeding normal engine capacity from 64k to 32k.


Light 1.37 (Sep 21 2004)

1. Fixed a serious bug that invalidated light data when using "-onlyents" option. Bug was
   introduced in 1.36.


RVis 2.29, Light 1.36 and BspInfo 1.25 (Sep 13 2004)

1. Light: Changed error "Bad surface extents" into a warning with more information. Ignoring this
   might cause bad lighting in the specified area. One cause is excessive # vertexes in bsp.
2. Light: Added printout of # light casts that will be made. This is the product of the total
   amount of light emitting objects and the total amount of surface points. It is not affected by
   the "-fast" option.
3. RVis: Speedup of ambient sound calculations.
4. Light: Added detection of entity compression when using the "-detect" or "-unsup" options.
5. Light: Added texture name to several messages.
6. Light: Increased stack in raytracing from 64 to 128 for more complex maps.
7. Light: Added check for too many nodes in bsp.
8. BspInfo: Added warnings for various objects exceeding normal engine capacity.
9. Fixed a crash bug when a bsp lump object was partly beyond filesize.


RVis 2.28 and Light 1.35 (Aug 14 2004)

1. RVis/Light: Added new option "-priority #" to set the thread priority 0-2 (below/normal/above,
   default 1) in order to make the program more flexible in the Windows environment.
2. RVis: Strengthened check for portal file consistency.
3. RVis: Minor improvement in the linearity of the extra progress bar in slow portals.
4. Light: Added printout of # disabled flashing lights when using the "-noflash" option.


RVis 2.27, Light 1.34 and BspInfo 1.24 (Jul 2 2004)

1. Light: Fixed a bug that could cause light distortion if a non-light entity had a delay 4 (local
   minlight) key. Map must also use minlight and not options "-oldlight" or "-iklite". Bug was
   introduced in 1.30.
2. Light: Fixed a bug that caused minor light distortion when using "light" (minlight) key in
   worldspawn. This light would be cast as normal light entity in addition to its minlight
   function.
3. Light: Fixed a bug that could cause minor light distortion when using additive minlight in maps
   with sunlight.
4. Light: Fixed a bug that disabled 2nd sunlight if sun mangle wasn't explicitly set.
5. Light: Fixed a bug that caused sunlight to be slightly different depending on whether sun
   mangle was explicitly set or not. In some emulation modes, the old behaviour is maintained.
6. RVis: Fixed a crash bug when portal (prt) file was inconsistent (too few portalleafs).
7. RVis: Added check for bsp+portal file mismatch.
8. RVis: Added warning for bsp+state file mismatch when loading state file.
9. RVis: Added more info to several error messages.
10.BspInfo: Fixed minor bug when using "-cutvislight" option.
11.BspInfo: Minor light statistics printout change.


RVis 2.26, Light 1.33 and BspInfo 1.23 (Jun 2 2004)

1. Light: Added new option "-solidsky" that enables also solid sky brushes to cast sunlight. This
   method isn't perfect but normally it produces pretty good results.
2. Light: Fixed a bug that prevented the "-oldlight" and "-iklite" options from disabling
   antilights.
3. Light: Fixed a bug that sometimes caused minor light variations when using the "-oldlight" or
   "-iklite" options.
4. Light: Fixed a bug that caused invalid lighting when light entity keys "target" or "targetname"
   were set to empty strings ("").
5. RVis: Fixed a crash bug when all textures were missing in bsp.
6. RVis: Minor speedup and memory reduction.
7. BspInfo: Fixed minor bug in light statistics printout.
8. BspInfo: Minor printout change.


Light 1.32 and BspInfo 1.22 (May 6 2004)

1. Light: Added support for new attenuation formula (delay 5 lights), see details below. Thanks to
   Kinn for this one.
2. Light: Added new option "-kinn" which translates all delay 2 lights into delay 5.
3. Light: Added new option "-addmin" which enables additive minlight (same as ArghLite). This may
   help reducing the sometimes uniform minlight effect.
4. Light: Changed so sunlight isn't affected by the additive minlight in ArghLite emulation.
5. Light: Minor speedup.
6. Light: Minor improvement of TyrLite emulation when using antilights.
7. Light: Added printout of total capped light amount when using the "-lightcap" option.
8. BspInfo: Added warnings for various objects exceeding normal engine capacity.
9. BspInfo: Fixed a crash bug when using option "-prt" on a bsp with too many nodes or leafs.
10.BspInfo: Added printout of # fullbrights (light > 255) when using the "-lightstat" options.


Light 1.31 (Apr 14 2004)

1. Added recognition of a new key "_softangle" in each light entity that sets the angle of an
   inner spotlight cone for a softer transition, see details below.
2. Expanded the "-fast" option so you can now also specify "-fast #" (default 2, same as before).
   Higher values are faster but with less quality, recommended values are 2-8. Light quality
   varies greatly with map but should be sufficient for checking general light levels.
3. Added new option "-onlyents" which only updates switchable light entities and doesn't alter the
   actual light data. This is convenient after doing an "-onlyents" run with qbsp which might
   disable switchable lights.
4. Added new option "-srclight" which disables all unsourced light entities (classname "light").
5. Added new option "-noglobrange" which disables global range. Only useful with "-arghlite" or
   "-tyrlite" options.
6. Fixed a bug which sometimes caused minor light distortions when using "-fast".
7. Fixed a bug which caused minor light variations when using sunlight, odd range values and not
   "-globrange".
8. Fixed a bug which sometimes caused entity "style" keys to be incorrectly omitted.
9. Disabled usage of the "_anglesense" key in local minlights.


RVis 2.25, Light 1.30 and BspInfo 1.21 (Mar 18 2004)

1. Light: Added support for local minlights (delay 4 lights), see details below.
2. Light: Added new option "-anglesense #" which sets the angle sensitivity globally, see details
   below.
3. BspInfo: Added new option "-copyents" which copies all entities in the bsp and writes them to a
   text file with extension ".ent".
4. Fixed a bug which aborted bsp load if there was a texture index table but all textures were
   missing.


RVis 2.24, Light 1.29 and BspInfo 1.20 (Feb 16 2004)

1. Light: Added basic support for antilights, see details below. Thanks to Tyrann for this one.
2. RVis: Removed the vis limitation (MAX_MAP_VISIBILITY) of 4 MB.
3. Changed some printouts for higher capacity and clarity.


BspInfo 1.19 (Jan 29 2004)

1. Added new option "-prt" which generates a portal (prt) file from the bsp, similar to the
   bsp2prt utility. BspInfo has larger capacity and produces a better portal file with fewer
   leafs/portals, which helps vis. On older operating systems, it's also several times faster and
   requires less memory.
2. Added new option "-nowatervis" which disables portal information for transparent water when
   using the "-prt" option.
3. Added new option "-quiet" which disables the bsp summary printout.


RVis 2.23 and Light 1.28 (Jan 2 2004)

1. Light: Added new option "-softdist #" which controls directional tolerance, see details below.
2. Light: Added recognition of the key "_anglesense" also in worldspawn, thereby affecting the
   sunlight. This can have quite a large effect on the sunlight appearance, see details below.
3. RVis: Added persistence of the high resolution percent mode in the state file.
4. RVis: Added calculation and printout of the total time spent in state file handling. This is
   the extra time that the AutoSave feature costs. It will only be printed for fullvis runs and
   only if it's at least one second.


RVis 2.22 and Light 1.27 (Dec 14 2003)

1. Light: Improved the accuracy of all emulation modes, see details below.
2. Light: Added new option "-tyrlite" which enables closer TyrLite emulation, see details below.
3. Light: Added new option "-etp" which enables support for QuArK/Hammer ETP, see details below.
   Thanks to Tyrann for this one.
4. Light: Added new option "-lightcap #" which sets a maximum light entity intensity. Any light entity
   that is brighter than this level gets capped.
5. Light: Added new option "-detect" which enables printout of detected keys summary. Enabling "-unsup"
   will also activate this printout.
6. Light: Added a warning for multiple light values in each entity. The last "light" value will be used.
7. Light: Added a warning for misplaced sunlight key (should be in worldspawn).
8. Light: Added a check to prevent multiple emulation mode activation.
9. Light: Added a printout when "-oldlight" mode is enabled.
10.RVis: Minor speedup of Base processing, typically about 10%.
11.RVis: Fixed a minor potential bug in ambient sound calculations.


Light 1.26 (Nov 13 2003)

1. Added new option "-iklite" which enables IKLite emulation, see details below. Thanks to Iikka
   Kernen for this one.
2. Added new option "-ikangle" which enables an angle sensitivity partly similar to IKLite.
   Sensitivity for delay 3 lights is set to 1 and for delay 2 lights it is set to 0.
3. Added recognition of a new key "_anglesense" in each light entity that controls the angle
   sensitivity, see details below.
4. Added new option "-arghlite" which enables ArghLite emulation, see details below.
5. Added new option "-dlx" which enables partial LightDLX emulation, see details below.
6. Removed option "-nodelay" which is replaced by "-arghlite".
7. Fixed a bug which could cause light bleeding and prolonged processing time when using the
   "-soft" option on a map with delay 1-3 lights.
8. Added new option "-norev" which prevents the usual entity key order reversal. This helps when
   doing binary comparisons between bsp files.
9. Fixed a bug which caused the printout of # switchable light styles to behave unexpectedly.


RVis 2.21, Light 1.25 and BspInfo 1.18 (Oct 29 2003)

1. Light: Added new option "-nodelay" which disables the entity delay feature.
2. Light: Added new option "-noflash" which converts flashing light entities into normal ones.
3. Light: Changed error "Texture axis perpendicular ..." into a warning. Ignoring this might cause
   bad lighting in the specified area.
4. Light: Changed error "LoadEntities: not 2/3 values for mangle ..." into a warning.
5. Light: Fixed minor bugs in the unsupported key handling and improved information for several
   errors and warnings.
6. Light: Fixed a bug which disabled maxlight when using the "-globrange" option.
7. Light: Fixed a bug that in rare cases could abort processing of entity section.
8. Light: Fixed a crash bug when an entity had no classname.
9. Light: Fixed a crash bug when loading bsp files with corrupt node data.
10.Fixed a crash bug when loading bsp files with corrupt lump info.
11.Fixed a crash bug when loading bsp files with corrupt texture index data.
12.BspInfo: Fixed a crash bug when there were no textures in bsp.
13.BspInfo: Fixed a memory leak when using the "-cutvislight" option.


Light 1.24 and BspInfo 1.17 (Oct 15 2003)

1. Light: Added new directional tolerance feature to the "-soft" option, see details below.
2. Light: Fixed a bug which in some cases prevented usage of the "-soft" option.
3. Light: Fixed a bug which sometimes caused min/sunlight to be slightly lower than specified.
4. Light: Fixed a bug which sometimes caused minor light variations.
5. Light: Fixed a bug which sometimes caused unnecessary warning "Too many light styles ...".
   Thanks to Tyrann for this one.
6. Light: Added entity # to several error messages.
7. Light: Added printout of # faces in map.
8. Light: Added warning for multiple worldspawn entities.
9. BspInfo: Added new options "-lightstat", "-lightstat2" and "-lightstat3" that enable printout
   of statistical light data. The first just prints a brief summary and the other two add an ASCII
   graphics representation with auto/fixed scale of the light distribution in the bsp. The summary
   contains the three highest peak light levels and mean & standard deviation values. Note that
   complete dark spots (level 0) are not included due to random noise problems.
   This can help in determining what light options that have been used to build a bsp and also to
   better understand how a map is lit and e.g. if there are many areas with fullbright lighting.
10.BspInfo: Added a more descriptive option printout.


Light 1.23 (Sep 25 2003)

1. Added new option "-soft" to reduce jagged shadows, see details below.
2. Added new option "-globrange" which makes the "-range #" option affect global light levels
   (sun/min/maxlight) as well (for compatibility with TyrLite).


Light 1.22 (Sep 15 2003)

1. Added new option "-extra4" which enables 4x4 oversampling instead of the normal 2x2 for even
   higher quality. This also adds more suns for the 2nd sunlight. Naturally, this is a lot slower
   but for some maps it makes a difference, typically for bright maps with high-contrast shadows.
2. Fixed a bug which caused bad "ripple" shadows when using "-fast" option. Now also sunlight is
   affected by "-fast".
3. Fixed a bug where entity "style" keys could be incorrectly inserted or changed.
4. Reduced processing time with up to 20% in some cases.


Light 1.21 and BspInfo 1.16 (Sep 4 2003)

1. Light: Added support for wait/delay/mangle keys in light entities, see details below. Thanks to
   Tyrann for this one.
2. Light: Added new option "-fast" which cuts the processing time in half. When used without
   "-extra", there are visible shadow artifacts in some spots, but it should still be useful for
   quickly checking out the lighting. When used together with "-extra", these artifacts are hardly
   visible, making it useful even for release builds.
3. Light: Added support for old TyrLite _sun_mangle format "x y z".
4. Light: Fixed a bug that could cause an abort with error message "FindFaceOffsets: numfaces ...
   exceeded".
5. Light: Changed error "Bad sun mangle pitch ..." into a warning. This means that it's now
   possible to have sunlight that shines upwards (normally completely pointless).
6. Light: Changed error "FindFaceOffsets: Couldn't find entity for model ..." into a warning.
7. Light: Added new option "-unsup" which enables detailed printout of unsupported keys.
8. BspInfo: Added new option "-texname" which repairs missing texture names with "noname1",
   "noname2" etc. Experimental.
9. BspInfo: Added printout of missing textures.


RVis 2.20, Light 1.20 and BspInfo 1.15 (Aug 4 2003)

1. Removed most of the bsp data limits except for vis/light/entities (4/4/1 MB). This also means
   that normally, less memory is required for processing.
2. RVis: Fixed a bug that allowed for changing fullvis level unnoticed when reloading a saved
   state file. Now the fullvis level is also saved and will override any command line option.
3. Light: Fixed a bug where random garbage bytes could be written to the light data lump.
4. RVis: Minor reduction of state file size. The 2.20 version can still read 2.19 state files.
5. RVis/Light: Added high resolution percent printout to the AutoRate feature. When enabled,
   percent is printed in the form 12.34% instead of 12.3%. It is activated when the same
   percentage value has been printed repeatedly.
6. RVis/Light: Removed printout of estimation when it's not done yet.
7. RVis/Light: Minor adjustments to estimation handling.
8. RVis: Minor adjustments to extra progress bar handling.


RVis 2.19, Light 1.19 (Jul 24 2003)

1. RVis: Added an AutoSave feature for securing long vis runs, see details below.
2. RVis: Added new option "-visdist #" that makes it possible to set a maximum distance that vis
   will consider visible. This can be useful when tracking down spots with high r_speeds. With
   careful map design, this feature might make it possible to lower r_speeds in areas where normal
   vis-blocking doesn't help. This is done by using simple brushes (e.g. closed doors) to hide the
   HOMs that is a result of the range limited vis. Thanks to KrimZon (slightly.quakesrc.org) for
   this one.
3. RVis: Removed the max numportals limitation of 65536.
4. RVis/Light: Added an AutoRate feature for the progress feedback which tries to adjust the
   percentage rate down to avoid long periods with no updates. Using the "-rate" option will
   disable AutoRate.
5. RVis: Added an extra progress bar when processing one portal is very slow, see details below.
6. RVis/Light: Added possibility to set the percentage rate as a float (e.g. 0.2) in the "-rate"
   option.
7. RVis/Light: Changed time format when hours > 0 to "HHh MMm" (e.g. 12h 13m). There is a new
   option "-oldhformat" if you prefer the old format "HH:MM:SS" (e.g. 12:13:14).
8. RVis/Light: Fixed small bugs in timing calculations.
9. RVis: Added printout of "Session time" when an AutoSave state file is loaded at startup. This
   is the totally accumulated time spent in Base/Full and is useful in disrupted sessions.
10.RVis: Changed default Full vis level from 2 to 4, i.e. if you don't specify "-fast", a level 4
   vis will be made.
11.RVis/Light: Added a more descriptive option printout.


RVis 2.18, Light 1.18 and BspInfo 1.14 (Jun 25 2003)

1. Light: Added support for sunlight, see details below. Thanks to Tyrann for this one.
2. Light: Added support for a 2nd sunlight, see details below.
3. Light: Added recognition of "_maxlight" key in worldspawn for maxlight values ("maxlight" is
   still supported but causes a warning at engine startup).
4. Light: Added support for "_dist" and "_range" keys in worldspawn. The command line overrides
   worldspawn settings.
5. RVis/Light: Added simplified progress feedback, see details below.
6. Light: Added new option "-nowarnings" which disables printout of the more repetitive warnings
   to screen.
7. BspInfo: Added new option "-extents" which extracts non-brush entities from the bsp and writes
   them to a text file with extension ".ent". All other entities remain in the bsp. Experimental.
8. BspInfo: Added new option "-cutvislight" which just deletes the light/vis data lumps.
   Experimental.
9. RVis/Light: Improved timing precision.
10.RVis: Added recognition of "-verbose" option ("-v" still works).
11.RVis: Removed printout of c_chains when "-fast" option is used.
12.BspInfo: Changed name of "-fixup" option to "-limit" for clarity.


Light 1.17 (May 20 2003)

1. Added support for Hipnotic/Ritual entity rotation.
2. Added coordinates to the error message "Texture axis perpendicular to face".


RVis 2.17, Light 1.16 and BspInfo 1.13 (Apr 30 2003)

1. BspInfo: Added new option "-fixup" for repairing bsps that appear to have exceeded the Q1 map
   limits. This is experimental and should only be used when required. Backup original file before
   usage.
2. Fixed a bug where loading and saving a bsp would cause random garbage bytes to be written at
   the end of each data lump. These bytes aren't harmful but may be confusing in a file
   comparison.


RVis 2.16, Light 1.15 and BspInfo 1.12 (Mar 25 2003)

1. Fixed a bug in printout of bsp version when mismatch.


Light 1.14 (Aug 15 2002)

1. Added min/maxlight support using options "-light #"/"-maxlight #" or "light"/"maxlight" keys in
   worldspawn. Note that these light levels are normally not affected by the "-range" option. This
   makes the combination of global options more useful.
2. Added support for disabling all light entities using option "-nolight". Using this option
   together with e.g. "-light 50" is very efficient for quickly setting a low light level in the
   map. This in turn is very useful when looking for thin brush seams or tjunction effects.
3. Added more relevant info to the warning message "Entity at ... has unmatched target".
4. Added a warning message when there are unsupported light keys detected and a recommendation for
   proper light tool (TyrLite/IKLite).
5. Reduced memory requirements, typically about 50%.
6. Added several safety checks when reading entities to prevent data corruption.
7. Clarified error message when light data size is exceeded.


RVis 2.15, Light 1.13 and BspInfo 1.11 (Jul 30 2002)

1. RVis: Fixed a serious bug that caused data corruption when vising a map with more than 16384
   numportals. The limit is now set to 65536 and a safety check is added to prevent corruption.
2. RVis: Removed the limitation that causes the error message "Leaf with too many portals".
3. Increased two bsp data limits : MAX_MAP_VISIBILITY and MAX_MAP_LIGHTING from 1 to 4 MB. This
   allows for more complex maps that QBSP compilers now are capable of.
4. RVis/Light: Fixed bugs in the option handling.
5. RVis/Light: Improved printout when warning messages appear.


BspInfo 1.10 (May 29 2002)

1. Increased several bsp data limits : MAX_MAP_ENTITIES from 1024 to 4096, MAX_MAP_ENTSTRING from
   64KB to 1MB, MAX_MAP_PLANES from 8192 to 32768 and MAX_MAP_TEXINFO from 4096 to 8192. This
   allows for more complex maps that QBSP compilers now are capable of.
2. Added safety check to ensure data integrity when the bsp data limits are exceeded.
3. Fixed a bug in printout of surfedges.
4. Added printout of models.
5. Added handling of file name wildcards.
6. Minor adjustments to handle larger values in printouts of big maps.
7. Added version number. The original BspInfo is assumed to have version 1.00.


RVis 2.14 and Light 1.12 (May 28 2002)

1. Made option parsing case insensitive.


RVis 2.13 and Light 1.11 (May 17 2002)

1. Increased several bsp data limits : MAX_MAP_ENTITIES from 1024 to 4096, MAX_MAP_ENTSTRING from
   64KB to 1MB, MAX_MAP_PLANES from 8192 to 32768 and MAX_MAP_TEXINFO from 4096 to 8192. This
   allows for more complex maps that QBSP compilers now are capable of.
2. Added safety check to ensure data integrity when the bsp data limits are exceeded.
3. Added printout of percent estimated time completed.
4. Light: Fixed a bug when writing entity strings longer than 128 byte to the bsp file.
5. Light: Added log file (LIGHT.LOG) handling.
6. Light: Added coordinates to the warning message "Too many light styles on a face".
7. Light: Removed option "-threads" as it didn't work anyway.


RVis 2.12 (Apr 16 2002)

1. Added log file (VIS.LOG) handling.
2. Added printout of # leafs (if more than one) where the "max leafs visible" can be seen.
3. Added coordinates to the complete leaf list when "-v" (verbose) is used.
4. Minor adjustments to improve printouts.


RVis 2.11 (Apr 9 2002)

1. Changed the error message "Leaf portals saw into leaf" into a warning and added coordinates.
2. Added coordinates to the error message "CheckStack: leaf recursion".
3. Added printout of max leafs visible with coordinates. This indicates the position in the map
   where the framerate will be low. Note that only worldbrushes count here, no entities.
4. Minor adjustments to handle larger leaf values in printouts of big maps.
5. Removed option "-threads" as it didn't work anyway.


RVis 2.10 and Light 1.10 (Jan 16 2002)

1. Fixed a bug in estimation when using option "-rate" with percent parameter 0 and process is
   lengthy.
2. Added version numbers. The original Vis is assumed to have version 1.00, RVis 2.00 and Light
   1.00.


RVis/Light, no version number (Nov 5 2001)

1. Improved overall estimation accuracy.


RVis/Light, no version number (Nov 2 2001)

1. Improved estimation accuracy at the beginning of a process.


RVis/Light, no version number (Oct 31 2001)

1. Added useful progress feedback and an option to control it, see details below.
2. Added a check for read-only file before processing.

==================================================================================================

Details regarding progress feedback
-----------------------------------

One of the major enhancements is the ability to display progress while running.
This is especially important in the RVis process, since it may require a long time to finish.
There are other variants available (e.g. RVis+, HVis) that can also display progress, but they :

1. Increase total process time significantly.
2. Output a large amount of text and this is bad when running in the console of e.g. QuArK or WC.
3. Do not make any serious attempt to estimate how long time left until the process is finished.
   It is definitely not enough in the Vis process to display the # objects (or percentage thereof)
   that is finished, since the process is non-linear. It is quite normal to have 60% objects done
   but 80% processing time left.

--------------------------------------------------------------------------------------------------

Progress is normally displayed in the form (example from RVis) :

Base:  68.3%, Elapsed:   13:09, Left:    6:43, Total:   19:52,  68%

The "Left" time is a filtered, dynamically calculated linear estimate. It is NOT a 100% reliable
figure, but it _will_ indicate the overall progress. The first percent number displays processed
objects and the last displays estimated time completed.

A new linear coefficient estimation is calculated normally when the integer part of the object
percent value changes, e.g. when 12.9% becomes 13.0%. In some cases, estimations will be done more
often. Intermittent updates will use the previously estimated coefficient.

The progress feedback is always printed between the processing of two portals. In large maps, one
portal can be very slow to process and to avoid complete absence of feedback for a long time, an
extra progress bar has been added. It has the form "----+----+" and is activated when more than 12
times the SecRate (see "-rate" option below) has passed inside processing one portal. The default
time is then 12 * 10 = 120 seconds.

Usually, the bar is not updated in a very linear fashion but it may offer some indication of
progress. Using the "-rate" option with a PercRate value of >= 0.1 will disable the extra progress
bar. When using option "-verbose", the extra progress bar is always displayed for each portal.

With the verbose mode it's also possible to track down the origin of slow portals. Just read the
portal number it's currently working on, divide by 2, add 3 and the resulting value is now a line
number in the portal file (prt). Open this file in an editor, go to the line number and read the
first coordinate on that line. This is one of the vertices of the portal.

The portal translation formula is because there are two memory portals (front and back) for each
file portal and there are three header lines in the prt file before the long list of portals.
Example: if portal number is 12345, then the prt file line number is (12345/2 + 3) = 6175.

--------------------------------------------------------------------------------------------------

There is an option that controls the normal progress feedback, "-rate sec,perc,line,tot".

Explanation :

sec	SecRate, minimum # seconds between screen updates, default 10
perc	PercRate, minimum # percent between screen updates, default 1.0
line	NewLine, new linefeed for each screen update, default 1 (TRUE)
tot	Total, display total estimated time, default 1 (TRUE)

The default setting has been tweaked to suit most situations.

--------------------------------------------------------------------------------------------------

Simplified progress is displayed in one of the following forms (example from RVis) :

Base
----+--

Base
73%

The first is enabled by the "-barpercent" option and the second by "-numpercent". For Light and
RVis Base, the percentage values are here just the object percentage value. For RVis Full, the
values are derived from the object percentage value, but weighted. The weighting is an attempt to
make the progress info more linear and a simple third degree equation curve is used to balance the
percentage values.

The following translation table can be used to obtain the actual object percentage value.

Displayed    Objects	   
   0%	        0%
  25%	       63%
  50%	       79%
  75%	       91%
 100%	      100%

The net result is that the progress is slowed down in the beginning and then sped up to counteract
the typical RVis behaviour.

==================================================================================================

Details regarding sunlight features in Light
--------------------------------------------

Sunlight is enabled via command line options "-sunlight #" and "-sunmangle #,#" or via
"_sunlight"/"_sun_mangle" keys in worldspawn. _sun_mangle uses the format "# #" (or "# # 0"),
where the first value is the yaw angle (0 to 360 degrees around the Z-axis, negative values are
also OK) and the second value is the pitch angle (90 degrees up to -90 down). Default values are
"0 -90" and the command line overrides worldspawn settings. Note that sunlight is normally not
affected by the "-range" option.

A good start combination is "_sunlight" "250" and "_sun_mangle" "45 -75" and then experiment
for best results. Note that the important thing is normally not to create light, but interesting
shadows.

You can also control how the sunlight is attenuated by its incoming angle for each face by using
the "_anglesense" key in worldspawn. Higher values means more attenuation (darker). Valid float
values are 0-1 with 0.5 as default.

The 2nd sunlight is enabled via command line option "-sunlight2 #" or via "_sunlight2" key in
worldspawn. This 2nd sun is actually many suns automatically positioned in an arrangement with
different yaw/pitch to eliminate bad shadows. When option "-extra" or "-extra4" is enabled, more
suns are used.

This 2nd sunlight value can be used to soften the shadows in outdoor areas from the normal
sunlight without using minlight, which in turn then may be reserved for indoor areas. A value of
60 is a good starting point for the 2nd sunlight if the normal sunlight is 250.

You can also add the "-shadowsense #" option which sets the angle (shadow) sensitivity for 2nd
sunlight (default 0.0). This can reduce the sometimes uniform look of sunlight. Recommended value
is 0.4 together with an increased 2nd sunlight level of about 10. For convenience, you can also
use option "-sunlight3 #" or "_sunlight3" key which just enables 2nd sunlight and at the same time
sets shadow sensitivity to 0.4.

==================================================================================================

Details regarding wait/delay/mangle/antilight/angle/_softangle/_anglesense features in Light
--------------------------------------------------------------------------------------------

Several keys can be added to a light entity to better control its behaviour. The "wait" key
controls the fade distance and the default value is 1.0. Using a higher value will make the light
fade faster thus making it darker, e.g. "wait" "1.5".

The "delay" key sets the attenuation formulae, possible values are:

0 (default)  - Linear falloff, identical to id's original light program.
1            - Use the 1/x attenuation formula, has wider range than default.
2            - Use the 1/(x*x) attenuation formula, faster falloff than delay 1.
3            - No attenuation (light stays same brightness at any distance).
4            - Local minlight (no attenuation, non-additive and minlight override).
5            - Similar to 2 but with more attenuation and never brighter than "light" value.

Local minlight can be used to have different minlight levels in different areas. Just add these
lights until all corners of an area are lit. Local minlight will never add more light to a face if
it's already sufficiently lit. Just remember that its range is only limited by solid architecture
or using spotlight cone.

Local minlight also override each other (brighter wins) and normal minlight with any level. This
means that they can be used both to brighten or darken (similar to antilights below) areas that
are otherwise controlled by minlight. However, local minlight cannot darken areas that are lit by
normal lights or sunlight. Local minlights open for many possibilities, some experimentation is
recommended here.

The "mangle" key controls the direction of a light, i.e. a spotlight. It has the form "# #" (or
"# # 0"), where the first value is the yaw angle (0 to 360 degrees around the Z-axis, negative
values are also OK) and the second value is the pitch angle (90 degrees up to -90 down), e.g.
"mangle" "45 -75". Also, similar to targeted lights, you can change the width of the spotlight
cone with the "angle" key (default 40 degrees).

For spotlights, you can also specify an inner cone using the "_softangle" key. This creates a
softer transition between full spotlight effect within the inner cone and then gradually lower
effect until reaching the outer cone. This key must be smaller than the angle key and its default
value is 0, which means disabled.

The "_anglesense" key controls how a light is attenuated by its incoming angle for each face.
Higher values means more attenuation (darker). Valid float values are 0-1 with 0.5 as default.
Local minlight can't use this feature and is always 0. Angle sensitivity can also be globally set
from command line but will not override the entity values. See also "-shadowsense #" option above.

Using antilight (lights with negative value) will "cast darkness" with the same rules (wait, delay
etc) as for positive lights. Note that light styles are important here; antilights will only
darken lights with matching light style. Also note that with antilights, you can go below the
ambient (min/sunlight etc) limit. You can't use antilight as ambient lights.

Using the "-oldlight" or "-iklite" options will disable the wait/delay/mangle/antilight features,
using the "-dlx" option will disable the wait/delay/mangle features and using the "-noanti" option
will disable antilights.

==================================================================================================

Details regarding the softening feature in Light
------------------------------------------------

Adding the "-soft" option can reduce the jagged edges of shadows by slightly softening (blurring)
the lighting. This is especially useful in bright maps with high-contrast shadows.

The option can be used with ("-soft #") or without a value ("-soft"). If used without a value, an
automatic mode is set where the softening value follows the level of oversampling (the "-extra*"
options). If no oversampling is enabled, a value of 1 is used. Together with "-extra" or
"-extra4", a value of 2 or 3 respectively will be used.

Setting the value manually will override the auto mode and is normally not recommended. A higher
value means a softer lighting for the same level of oversampling. Keeping the value in the range
1-5 is recommended, since otherwise visible distortions might appear near face edges. This is due
to the softening being performed separately for each texture face. If distortions appear, either
lower the softening value or manipulate the lighting slightly (yaw/pitch etc) in that particular
area.

Some experimentation might be required here for best results.

The "-soft" option also enables higher tolerance for the directional relationship between each
face and the light sources that cast light on it. Traditionally, a light source is disregarded if
it's on the same plane or behind a face. This may cause some faces to be strangely dark even if a
visible light source is nearby. Enabling the "-soft" option will consider a light source visible
even if it's slightly behind the face.

The distance behind the face is default 3, but can be set using the "-softdist #" option.

Tip : For a very fast but somewhat sketchy lighting, use "-fast -soft". For a very high quality
      but still not too slow lighting, use "-fast -soft -extra4".

==================================================================================================

Details regarding Light emulation capabilities
----------------------------------------------

Original Light features are supported by default. Use the "-oldlight" option for closer emulation
and to prevent detection of newer features. Setting "-light 0" from the command line can also help
avoiding undesired effects.

Most TyrLite 0.94 features are also supported by default, main exceptions are coloured lighting
and some antilight features. Use the "-tyrlite" or "-tyrlite95" options for closer emulation.
These options enable global range and disable lights in non-light entities (i.e. with a classname
that doesn't begin with "light"). Automatic detection and conversion of the older TyrLite
_sun_mangle format (x y z) is always enabled. Should it fail, override with the "-sunmangle"
option. Light distribution may differ compared to older TyrLite versions.

Use the "-etp" option for maps that are created in QuArK/Hammer using the ETP or Valve 220 format
and built with an ETP capable compiler (e.g. Tx/TreeQBSP). It's probably valid for any editor that
can generate these formats. TyrLite 0.94 and later use this mode for any map.

IKLite emulation is enabled by the "-iklite" option. All features are supported. Emulation is done
by translating the angle keys into corresponding delay keys, adjusting distance attenuation and
setting angle sensitivity for delay 3 lights to 1 and the default range to 1. The range can be
overridden by command line or worldspawn if necessary. As above, setting "-light 0" from the
command line is sometimes required.

ArghLite emulation is enabled by the "-arghlite" option. All features are supported. Emulation is
done by disabling the entity delay feature and enabling additive minlight and global range.

Partial LightDLX emulation is enabled by the "-dlx" option. Only antilights and the "message"
"max #" feature are supported.

Using any of the emulation modes and not having "-extra4" enabled will enforce maximum
compatibility. Enabling "-extra4" will favour quality over compatibility.

Detection of unsupported keys varies with the currently enabled options and should only be
considered a hint. Since several of the entity keys are the same for different light tools, it's
very difficult to always correctly identify the proper emulation. Use the "-unsup" option to
display unsupported key details. Use the "-detect" option to display a summary of detected keys.

==================================================================================================

Details regarding AutoSave feature in RVis
------------------------------------------

The AutoSave feature makes vis save its state at certain intervals while it's running. If it gets
interrupted for various reasons, you can just restart and it will proceed from the last valid
state. This is very convenient in long vis runs and you e.g. need to shut down the computer or in
case of a power failure.

The default save time is 60 seconds but this can be changed using option "-savetime #". Note that
using a too short interval may prolong the total vis time significantly and may also cause intense
disk activity. Also, the state can only be saved between the processing of two portals. This means
that if vis gets interrupted while processing one slow portal, the time spent in that portal will
be lost.

AutoSave uses a new file "map.vis" (if the map name is "map.bsp") for saving the state. In case of
disrupted state save, there might also be a "map.vi0" file that will automatically be removed when
restarting. For successful restart from a saved state, vis requires the state file (vis/vi0),
the portal file (prt) and the bsp file itself.

Note that if the portal file gets updated (new file date/time stamp), the state file will be
considered out of date and hence not loaded. It will be overwritten at the next state save time.

The same state file is used for both Base ("-fast") and Full ("-level #") sessions, which means
that after a partial or completed Base session, you can start a Full and vis will take advantage
of what's been done already. Conversely, after a partial or completed Full session, you can start
a Base and it will complete immediately. However, you cannot change fullvis level afterwards and
starting with version 2.20, this will be enforced.

There is a "-nosave" option to disable the AutoSave feature altogether.

==================================================================================================

Tip : When you leave your computer for processing a lengthy operation (e.g. RVis), make sure
      you're using a very simple screen saver (e.g. the one that just makes the screen black).
      Modern CPU intensive screen savers can _easily_ add 50-100% processing time.

==================================================================================================

Original Vis/Light/BspInfo source code by John Carmack,       http://www.idsoftware.com
RVis modification by Antony Suter, TeamFortress Software,     antony -at- teamfortress -dot- com
Several modifications inspired by Tyrann's RVis+ and TyrLite, http://disenchant.net
IKLite features inspired by Iikka Kernen's IKLite,           http://www.planetquake.com/ikq
LightDLX features inspired by Neal White III's LightDLX,      nwhite -at- softblox -dot- com
ArghLite features inspired by Tim Wright's ArghLite,          argh -at- ntplx -dot- net
Delay 5 attenuation formula by Kinn,                          http://kinn.spawnpoint.org

