=========
Changelog
=========

2.0.0-alpha11
=============

Changes
-------

- common: disable color codes where stdout is not a TTY
- common: ENABLE_WRAP_AT_EOL_OUTPUT for console wrapping on Windows
- qbsp: :option:`qbsp -wrbrushes` no longer implies contented bmodels (https://github.com/ericwa/ericw-tools/issues/467)

Features
--------

- lightpreview: file dialogs now remember the last used directory
- lightpreview: add Face panel which shows info on the clicked face
- qbsp: Half-Life: support ``!`` prefix for liquids, as well as ``!cur_`` water current contents
- light: support for new ``LIGHTGRIDS`` BSPX lump (:option:`light -lightgrid_format` ``lightgrids``)
- lightpreview: added a visualization for lightgrids ("Draw Lightgrid" checkbox)
- light: support Half-Life style :light-key:`light` fields where the value is ``r g b brightness`` or ``r g b`` instead
  of the ususal ``brightness``

Bug fixes
---------

- bsputil: fix :option:`bsputil --svg` option parsing
- light: fix lightgrids to only receive on light channel 1
- qbsp: handle :classname:`func_detail_fence` + :classname:`func_illusionary_visblocker` in q1
- maputil: fix conversion to Valve texture format leaving the "rotate" field uninitialized
- qbsp: fix crash on ``nan`` in the texture offset component of Valve 220 .map format
- qbsp: further :classname:`func_detail_fence` fixes following on alpha10's. This last fix only affects engines
  that frustum-cull leaf bounds.
- light: fix :worldspawn-key:`_bouncecolorscale` being ignored (only worked if specified on command-line).
  regression from 0.18 (https://github.com/ericwa/ericw-tools/issues/424).
- light: fix using :light-key:`delay` ``4`` (local minlight) + :light-key:`_light_channel_mask` together on the same
  light entity

2.0.0-alpha10
=============

Changes
-------

- qbsp: ``.texinfo.json`` file is always written (simplifies passing data between qbsp and vis/light)
- light: switchable shadow casters now self-shadow when the switchable shadow is off.

  Previously, turning off the switchable shadow would both stop casting shadows on the world and stop self-shadowing.

  This won't be a visible change on the majority of switchable shadow uses case that are simple walls, or
  where the bmodel is hidden when the shadow turns off.

Features
--------

- vis: support :bmodel-key:`_noambient` on func_group to selectively disable ambient sounds from the grouped brushes
- light: allow :option:`light -hdr`, :option:`light -bspxhdr`, :option:`light -lux`, :option:`light -bspxlux`
  on Q2 BSP's. These are experimental in Q2 and not yet supported by any engines, but both .lit and BSPX HDR formats can
  be viewed in lightpreview with Q2 BSP's.

Bug fixes
---------

- qbsp: Fix :classname:`func_detail_fence` causing "grey flash" on winquke, FTEQW, and others (but not Fitz/QS), for
  faces embedded inside the :classname:`func_detail_fence`'s volume.

  We were previously implemeting :classname:`func_detail_fence` by emitting marksurfaces for solid leafs, which are
  not rendered in FTEQW/winquake. The new implementation emits marksurfaces on neighbouring leafs which renders
  in all engines.
- lightpreview: don't render marksurfaces on solid leafs, for consistency with FTEQW/winquake
- light: Fix lighting of faces embedded inside :classname:`func_detail_fence` (previously, always solid black)
- light: Better check for whether a map contains color, i.e. whether a ``.lit`` file needs to be generated

Developer Changes
-----------------

- Qt 6 now required for lightpreview (previously Qt 5 was required)
- Embree 4 is now required (previously 3 or 4 were supported)
- Share more code between Q1 and Q2 that was previously duplicated

2.0.0-alpha9
============

Changes
-------

- qbsp: never merge across liquids, deprecate ``-nomergeacrossliquids``
- qbsp: remove treating ``__TB_empty`` as skip
- qbsp: deprecate :bmodel-key:`_chop` and replace with :bmodel-key:`_chop_order`
- macOS builds now compiled on macOS 14

Features
--------

- light: add :worldspawn-key:`_surflight_atten` key, supported on worldspawn/func_group/func_detail/etc.
- light: add :light-key:`_switchableshadow_target`
- qbsp: add :bmodel-key:`_hulls` bmodel key for omitting specific collision hulls
- lightpreview: add "view -> move camera to" menu item, show Q2 area in statusbar

Bug fixes
---------

- qbsp: fix bmodel bounds for bmodels that mix ``clip`` and non-``clip`` brushes
- qbsp: fix software renderer compatibility (only reuse edges once)
- qbsp: add support for the two missing content flags from re-release (``Q2_CONTENTS_NO_WATERJUMP``,
  ``Q2_CONTENTS_PROJECTILECLIP``)
- qbsp: fix :option:`qbsp -notriggermodels` using incorrect bounds
- qbsp: :classname:`func_illusionary_visblocker` fixes
- qbsp: :option:`qbsp -notex` fixes
- common: fix ``std::filesystem::equivalence`` exception on macOS
- bspinfo: fix lightmap dump
- bsputil: fix :option:`bsputil --extract-entities` and :option:`bsputil --extract-textures` command line parsing
- light: fix :bmodel-key:`_surflight_group`

2.0.0-alpha8
============

Changes
-------

- light: invalid "delay" settings are now a warning rather than a fatal error
- qbsp: q2: write out true leaf contents even if CONTENTS_SOLID is set. Previous
  behaviour (including original qbsp3 compiler) was that CONTENTS_SOLID would
  clear any other set contents bits in leafs (but not in brushes.) (#420)

Features
--------

- lightpreview: show leaf contents in status bar
- light: LIGHTING_E5BGR9 + HDR .lit support (from @dsvensson and @Shpoike)

Bug fixes
---------

- light: fix "mangle" on _sun 1 entities (#266)
- light: fix sunlight artifacts (21b3b696)
- qbsp: q2: fix areaportals which were broken in 2.0.0-alpha7 (70a08013)

2.0.0-alpha7
============

Changes
-------

- light: q2: opaque lit liquids receive light from both sides by default (specifically if they have the "warp" surf
  flag)
- qbsp: remove broken ``-transsky`` feature

Features
--------

- bsputil: gained ``--svg`` export
- lightpreview: add camera bookmarks, stats panel with BSP lump sizes

Bug fixes
---------

- qbsp: fix "sides not found" warning spam on Q1 maps with sky
- light: fix ``-dirtdebug`` causing a .lit file to be generated in Q2 mode
- lightpreview: fix ``-dirtdebug`` broken in Q2 mode (due to the above bug)
- light: reduce excess memory use

Enhancements
------------

- qbsp: liquids are automatically detail (according to ``-transwater``).


2.0.0-alpha6
============

This is the sixth alpha release of our 2.0.0 "dev builds".

The old stable v0.18.2-rc1 release still has more optimized output for Q1 and faster/less memory use for
qbsp/light, but we're working on regressions and welcome feedback as we work towards a stable 2.0.0 build.

Changes since alpha5:

- light: fix "-emissivequality high" having incorrect brightness due to a bad gate setting.
  This will cause different output from 2.0.0-alpha1 through alpha5 when emissives / bounce are in use.
- qbsp: change so liquids don't cause splits in perpendicular walls, by default.
  You can opt back into the old behaviour with "-nomergeacrossliquids" (or setting "_nomergeacrossliquids" "1"
  as a worldspawn key/value). This will be necessary for maps targetting water caustics (e.g. ezQuake),
  otherwise the water caustics effect will extend out of the water.
- packaging: get rid of the "bin" subfolder in the releases

Fixes since alpha5:

- fix macOS builds which were broken since alpha1
- lightpreview: package in macOS + Linux builds (@jonathanlinat)
- light: fix -bounce not being recognized as a shortcut for -bounce 1
- qbsp: make Q2_SURF_ALPHATEST imply TRANSLUCENT + DETAIL
- qbsp: never write 0, 1, or 2-vertex faces
- qbsp: improve tjunc logic to avoid excessive welding (Previously in the alpha builds, and a regression from
  0.18.1, func_detail_wall was welding to structural.)

  The new idea is, translucent things (e.g. translucent water, func_detail_fence, etc.) weld to other translucent
  things, and opaque things (func_detail, worldpsawn, etc.) weld to each other. func_detail_wall is special and
  only welds to itself.
- qbsp: fix .tga/.jpg/.png files with the same names as .wad textures causing corrupt .bsp textures

Enhancements since alpha5:

- docs: fill in a lot of missing documentation

Other notes:

- VS runtime for the Windows builds: https://aka.ms/vs/17/release/vc_redist.x64.exe
- Documentation is now at: https://ericw-tools.readthedocs.io

2.0.0-alpha5
============

This is the fifth alpha release of our 2.0.0 "dev builds".

The old stable v0.18.2-rc1 release still has more optimized output for Q1 and faster/less memory use for qbsp/light, but we're working on regressions and welcome feedback as we work towards a stable 2.0.0 build.

Fixes since alpha4:

- qbsp: fix for Q2 animated textures
- qbsp: fix leaks through detail in LibreQuake e3m4.map
- light: fix entire lightmap turning black in some cases when using _surface lights
- light: fix excessive bouncing with lit water, or :bmodel-key:`_shadow` -1
- lightpreview: don't crash when vis is run more than once

Enhancements since alpha4:

- vis: more performance (gmsp3v2.bsp vis, 32 threads: 18.2s -> 10.6s) (@rrika)

Additions since alpha4:

- qbsp: add :option:`qbsp -missing_textures_as_zero_size` flag to allow writing 0x0 textures
- lightpreview: bind arrow keys / pageup / pagedown in addition to WASDQE (@maikmerten)
- lightpreview: add support for fence textures (#402) (@dsvensson)
- lightpreview: frustum culling and cull freeze (#398) (@dsvensson)

Other notes:

- VS runtime for the Windows builds: https://aka.ms/vs/17/release/vc_redist.x64.exe
- Documentation is now at: https://ericw-tools.readthedocs.io

2.0.0-alpha4
============

This is the fourth alpha release of our 2.0.0 "dev builds".

The old stable v0.18.2-rc1 release still has more optimized output for Q1 and faster/less memory use for qbsp/light, but we're working on regressions (this alpha fixes `vis` performance) and welcome feedback as we work towards a stable 2.0.0 build.

Fixes since alpha3:

- qbsp: fix :option:`qbsp -notex` (88885068212f608e4c635d5775656962b908af31)
- qbsp: fix :classname:`func_detail_illusionary` and ``misc_external_map`` with :option:`qbsp -wrbrushes` (#371, #372)

Enhancements since alpha3:

- vis: major performance fixes (gmsp3v2.bsp vis went from 153s to 18.5s with 32 threads)
- light: some performance fixes for large maps using point lights (``light.exe -visapprox none ad_sepulcher.bsp`` went from 45.5s to 22.7s) (22ad2f4141723b492f5fd10ce529d6b9e8e67b3a)

Additions since alpha3:

- qbsp: allow empty brushes in .map files (#391)
- light: compiling with embree 4 is now supported in addition to 3
- bsputil: add :option:`bsputil --replace-textures` for updating textures in a Q1 bsp
- lightpreview: add support for Q1 visdata
- lightpreview: add checkbox for skipping running light
- lightpreview: fix large .bsp's not rendering (de0f66c16e66de8c27fb49090190441927ef3001)

Other notes:

- VS runtime for the Windows builds: https://aka.ms/vs/17/release/vc_redist.x64.exe
- Documentation is now at: https://ericw-tools.readthedocs.io

2.0.0-alpha3
============

This is the third alpha release of our 2.0.0 "dev builds".

Quake mappers will probably want to stick to the previous v0.18.2-rc1 release, as we're still working on regressions in compile time and output quality.

Fixes since alpha2:

- lightpreview: don't crash on Q1 maps with missing textures
- light: fix broken sunlight in Q1 maps (#376)
- qbsp: Q2: fix corruption if texture name exceeds 31 chars (8362ffa3851d4c4df91b74aef2a20dddfccfab95)

Additions since alpha2:

- lightpreview: add ``.lit`` file loading
- initial :doc:`maputil` util planned to be for manipulating .map files with lua scripting
- initial multiple bounce support in ``light`` with :worldspawn-key:`_bounce`

Other notes:

- VS runtime for the Windows builds: https://aka.ms/vs/17/release/vc_redist.x64.exe
- Documentation is now at: https://ericw-tools.readthedocs.io

2.0.0-alpha2
============

This is the second alpha release of our "dev builds", focusing on Quake 2 support.

Quake mappers will probably want to stick to the previous v0.18.2-rc1 release.

Fixes since alpha1:

- fix blown out lightmaps with bounce and lightstyles (2e0e23622bddb533830168dd8e77cb49fe6395a9)
- fix lightstyles being deleted if the map leaks (9d7f83a46af034d256bcb966323847e319dc67be)
- fix surface lights not illuminating the back faces of lit water (b71a4ebaf172d8570ae42c2d15a14e3991fb919e)

Additions since alpha1:

- :bmodel-key:`_light_twosided` bmodel key for enabling two-sided surfaces to receive light from either direction, mostly for Q2 opaque lit water. We might enable this implicitly on Q2 warp surfaces in the future, as we currently do on Q1 lit (opaque) water.  (b893e67309dc9556fa581e9a0a1d69b68782e40c)
- ``_tex_saturation_boost 1`` worldspawn key (light) for boosting texture saturation in bounce calculations, to emulate vanilla Q2 tools (44dadd87b29899920afb23bf5472338f330a6ea1)

Other notes:

- VS runtime for the Windows builds: https://aka.ms/vs/17/release/vc_redist.x64.exe
- Documentation is now at: https://ericw-tools.readthedocs.io

2.0.0-alpha1
============

This is the first alpha release of our "dev builds", featuring Quake 2 support, including some features for the remaster (:option:`light -lightgrid`, :option:`light -world_units_per_luxel`, :option:`light -wrnormals`).

Quake mappers will probably want to stick to the previous v0.18.2-rc1 release.

To get started for Q2, pass :option:`qbsp -q2bsp` to qbsp.

Some known issues which we hope to address before a final 2.0.0 release:

- performance regressions from the previous release
- Quake maps are compiling with elevated stats (faces, clipnodes, etc.) compared to the previous release
- :doc:`lightpreview` gui tool is heavily WIP and only packaged in the Windows build for now
- Bounce lighting differs substantially from the previous stable release
- Improved documentation of new features / changelog

Other notes:

- VS runtime for the Windows builds: https://aka.ms/vs/17/release/vc_redist.x64.exe
- Documentation is now at: https://ericw-tools.readthedocs.io

Upcoming
========

Note
----

- Windows builds are 64-bit only for this release. I'm planning to restore 32-bit support but dropping it for this release made a dependency update easier. Not sure how many users this affects - let me know if it is a problem for you.

Bug fixes
---------

- qbsp: make origin brushes not use hiprotate bounds expansion (c30a0a4)
- qbsp: fix external maps with no worldspawn brushes (5e74b4d)
- qbsp: fixes for ``-wrbrushes`` (cefd20c, 1577981, 209d481)
- qbsp: fix relative paths for .wad files (79d3aa9)
- light: fix ``_shadow`` ``-1`` being interpreted as ``_shadow`` ``1`` for bmodels (b04c06a)
- light: fix "unexpected geomID" error with bounce (dca61f8)

Enhancements
------------

- qbsp: initial multithreading support
- qbsp: experimental Half-Life support (8936594)
- qbsp: more logging of face line numbers for errors/warnings (4ec22ee)
- qbsp: Add support for ``_minlight_excludeN`` where N is in 2..9 (0460165)
- light: support ``_minlight_exclude``, ``_lightignore`` on func_group, detail, etc. (b343b95, a4c1ce6)
- light: add _nostaticlight key (2d3aa22)
- light: add _light_alpha func_group key for making faces translucent for light (d6136c1)
- light: bounce: also make shadow-casting bmodels bounce (unless they opt-out with ``_bounce`` ``-1``) (5010dc9)
- light: support "_suntexture" key on "_sun" "1" entities to limit them to being cast from a specific sky texture. (f220b2f)
- light: support "style" / "targetname" on "_sun" "1" entities. (d2ecc73)
- light: remove 65536 ray limit, fixes #276
- light: support sky faces up to 10^6 units away (ba7bdf8)
- light: allow starting assigning switchable styles before default of 32 (b132152)
- light: add ``_sunlight2``/``_sunlight3`` to be configured with a light entity, similar to "_sun" "1" (fa62b20, d4cc19a)
- light: print key name for ``Key length > MAX_ENT_KEY-1`` error (af4deba)
- vis: temporary hack of raising MAX_PORTALS_ON_LEAF to 512 (e2a5f62)

Removed
-------

- qbsp: -oldleak, -bspleak, -contenthack flags

2019-03-25 ericw-tools 0.18.2-rc1
=================================

Bug fixes
---------

- qbsp: fix "_mirrorinside" on bmodels
- qbsp: fix t-junctions on bmodels (fixes sparkles, lightmap seams, phong shading)
- qbsp: fix a case where func_detail faces were incorrectly deleted during outside-filling
- light: fix seams on "_mirrorinside" geometry (#236)
- light: fix black faces with sunlight pointing straight down
- vis: fix for microleafs blocking vis (e.g. 0.01 units thick). 
  This fixes HOMs appearing when a map was vised. (#261)

Features
--------

- qbsp: support a hybrid Valve 220 texturing + q2/q3 surface flags .map format
- qbsp: added -worldextent option for large maps (deault=65536, meaning +/-65536 units):
- light: Add "_bounce" "-1" model entity key to prevent light from bouncing off those brushes
- light: experimental support for lighting Quake 2 .bsp's

2018-04-05 ericw-tools 0.18.1
=============================

- qbsp: fix crash when worldspawn has 0 brushes
- qbsp: support reading Q2/Q3 detail flag
- qbsp: experimental "_noclipfaces" key
- qbsp: fix "_mirrorinside" on bmodels
- qbsp: improve an error message for when BSP2 is needed
- vis: fix "average leafs visible" message overflowing
- light: fix crash with surface lights

2018-02-18 ericw-tools 0.18
===========================

- light: tweak phong shading to use area and angle weighting
- light: add "_phong_angle_concave" key
- light: fix -bspx option

2018-01-29 ericw-tools 0.17
===========================

- qbsp: fix hint/skip having corrupt texturing with -convert option
- qbsp: warn and heal invalid texture projections
- qbsp: fix -omitdetail to affect all types of detail
- light: warn and ignore invalid texture projections instead of aborting
- light: make more robust against degenerate tris

2017-12-28 ericw-tools 0.16
===========================

- light: add flood-filling to fix black seams in detailwall.map when no -extra/-extra4 used
- light: fix color->greyscale conversion to be compatible with MarkV and some QuakeWorld engines
- light: don't mark sample points inside semi-transparent shadow casters as occluded.
- qbsp: add "_external_map_scale" key for misc_external_map
- qbsp: experimental func_illusionary_visblocker entity
- qbsp: better detection of when a map exceeds BSP29 limits. Previously, a corrupt BSP would be written when
  nodes/leafs exceeded BSP29 limits.
- bsputil: add --convert option. Not very useful, but can convert between BSP2 and 2PSB, for example.
- bsputil: "--check" option logs world mins/maxs
- bsputil, bspinfo: can now read Q2 BSP files

2017-09-17 TyrUtils-ericw 0.15.11
=================================

- light: add "_sun" entity key to configure sunlight in an entity instead of worldspawn.
  More than one "_sun" entity is supported.
- light: add "_falloff" light entity key to configure light falloff in map units.
  Only supported on linear (delay 0) lights.
- light: add "_spotlightautofalloff".
- light: fix light cutoff on curved surfaces (https://github.com/ericwa/tyrutils-ericw/issues/172)
- light: adjust -soft to fix regression in 0.15.10 (https://github.com/ericwa/tyrutils-ericw/issues/171)
- qbsp: add "_mirrorinside" key for mirroring the outside faces of bmodels so they are visible from inside.
  for func_water, or func_illusionary fences, etc.
- qbsp: fix CSG issue with overlapping off grid brushes (https://github.com/ericwa/tyrutils-ericw/issues/174)
- qbsp: fix HOMs introduced in 0.15.10, which were caused by an attempt to fix leaks-through-solids in 0.15.10.
  To re-enable the buggy code that may fix leaks through solids but add HOMs, use "-contenthack"
  (https://github.com/ericwa/tyrutils-ericw/issues/175).

2017-07-30 TyrUtils-ericw 0.15.10
=================================

- light: add "_shadowworldonly" bmodel key - only cast shadows on world, not other bmodels.
- light: switchable bmodel shadows (requires QuakeC support, see light manual).
- light: accept "_minlight" in worldspawn as an alias for "light"
- light: handle degenerate faces, print out the vertex coordinates
- qbsp: misc_external_map prefab system (see qbsp manual)
- qbsp: don't write unused texinfo
- qbsp: rewrite outside filling similar to q3map
- qbsp: revert change to SubdivideFace which was increasing faces a bit (see 53743dd)
- qbsp: add -expand option to dump the hull expansion to a "expanded.map", from q3map
- qbsp: add -leaktest option to abort compilation when a leak is found, from qbsp3
- qbsp: fix handling of duplicate planes, which was causing id1 maps to leak
- qbsp: try to get more reliable leaf content assignment (see a910dd8)
- bsputil: --check: print BSP tree heights at the first few levels of the tree
- bsputil: --check: check for unreferenced texinfo, vertices, planes
- bsputil: --check: print number of used lightstyles
- misc: travis-ci now runs qbsp on all id1 maps, the build fails if any maps leak

2017-06-10 TyrUtils-ericw 0.15.10-beta2
=======================================

- light: styled lights no longer bounce by default, set "_bouncestyled" "1" to enable.
- qbsp: map format conversion: fix reversing of epairs in converted maps
- qbsp: func_detail rewrite to fix vis issues with previous version.
  func_detail no longer seals maps.
- qbsp: add -omitdetail to omit all func_detail entities from the compile
- qbsp: new func_detail_illusionary entity. func_detail variant with no collision
  (players / monsters / gunfire) and doesn't split world faces.
  Doesn't cast shadows unless enabled with "_shadow" "1".
  Useful for hanging vines. Still creates BSP leafs. (Possible
  enhancement: avoid creating new leafs and just insert marksurfaces into
  existing leafs?)
- qbsp: new func_detail_wall entity. func_detail variant that doesn't split
  world faces. Useful for when you want a decoration touching a floor or wall
  to not split the floor/wall faces (you'll get some overdraw instead.)
  If it completely covers up a world face, that face will get clipped away, so
  it's not suitable for fence textures; see func_detail_fence instead.
- qbsp: new func_detail_fence entity. Similar to func_detail_wall except 
  it's suitable for fence textures, never clips away world faces.
  Useful for fences, grates, etc., that are solid and block gunfire.
- qbsp: add -forceprt1 option to generate a .prt file that GTKRadiant's prtview
  plugin can load (but will be unusable by vis).
  When func_detail is in use you normally get a PRT2 file that ptrview
  can't load.
- qbsp, light: allow _shadow -1 to stop a func_detail from casting shadows

2017-03-26 TyrUtils-ericw 0.15.10-beta1
=======================================

- light: fix Linux binary
- light: lights with a lightstyle now bounce
- light: new sample point positioning code
- light: per-light "_bouncescale" key
- qbsp: origin brush support
- qbsp: add -omitdetail option, strips out all func_detail brushes
- qbsp: add -convert option for converting between .MAP formats

2016-11-20 TyrUtils-ericw 0.15.9 release
========================================

- light: fix black fringes on bmodels that are touching against the world
- light: light passing through glass lights up the back side
- light: bmodels with "_alpha" < 1 and "_shadow" "1" set cast tinted shadows
- qbsp: support Quake 3 "Brush Primitives" .MAP format
- qbsp: save "_mincolor" for func_detail/group to the .texinfo file, now used by light 
- qbsp: performance improvements

2016-10-03 TyrUtils-ericw 0.15.8 release
========================================

- light: fix black noise in some cases when using -bounce. (reported by Pritchard)
- light: try to limit artifacts caused by "too many lightstyles on a face", 
  by saving the 4 brightest lightmaps. The previous behaviour was random,
  so you would likely get bad artifacts when that warning occurred.
- light: restore and expand the "unmatched target" warnings.
  Now checks "target", "killtarget", "target2", "angrytarget", "deathtarget".
  Also checks for any "targetname" that is never targetted.
- light: restore support for skip-textured bmodels with "_shadow" "1".
  This is only supported on bmodels where all faces are textured with "skip".
- light: add "_lightignore" model key, makes a model receive minlight only.
- qbsp:  accept absolute path to map (reported by lurq)

2016-09-09 TyrUtils-ericw 0.15.7 release
========================================

Bugfixes
--------

- light: fix shadow-casting bmodels that touch the world from messing up
  sample points on world faces, and prevent the world from messing up
  bmodel sample points (regression in 0.15.5)
- light: clamp lightmap samples to 255 before smoothing, downscaling.
  reduces jaggies in cases with very bright lights casting hard shadows.
- light: fix order of "_project_mangle" value to be consistent with "mangle"
- light: various crash fixes
- light: minlight no longer bounces

Performance
-----------

- light: new, faster raytracing backend (Embree)
- light: estimate visible bounding box each light by shooting rays in a sphere. 
  this gives a speedup similar to vised maps in 0.15.5, without requiring
  the map to be vised. As a downside, there is a small chance of
  introducing artifacts where lights cut off too soon.
  Disable with "-novisapprox".
- light: bounce lighting code redesigned to use less memory

Other
-----

- all: windows builds now require MSVC 2013 runtime:
  https://www.microsoft.com/en-ca/download/details.aspx?id=40784
- all: restore Windows XP support

2016-06-17 TyrUtils-ericw 0.15.6 release
========================================

- rebuild OS X binary as it was built in debug mode by accident

2016-06-10 TyrUtils-ericw 0.15.5 release
========================================

New features
------------

- light: added a better options summary with the -help flag
- light: added -bounce option, "_phong", "_project_texture" key
- light: use vis data to accelerate lighting
- light: "_minlight_exclude" key to exclude a texture from receiving minlight
- light: add "_sun2" "_sun2_color" "_sun2_mangle" which creates a second sun
  (unrelated to "_sunlight2" which is the sky dome light)
- vis: support .prt files written by bjptools-xt
- qbsp: add -objexport flag

Bugfixes
--------

- vis: fix ambient sounds when using func_detail, broken in tyrutils-ericw-v0.15.3

2015-12-10 TyrUtils-ericw 0.15.4 release
========================================

New features
------------

* light: new "-parse_escape_sequences" command-line flag. 
  The "\b" escape sequence toggles red text on/off, you can use this
  in any strings in the map file.
  e.g. "message" "Here is \bsome red text\b..."
* light: new "-surflight_dump" command-line flag. Saves the lights generated
  by surfacelights to a "mapname-surflights.map" file.
* light: new "_sunlight3" and "_sunlight3_color" keys. Same as "_sunlight2", 
  except creates suns on the bottom hemispere ("_sunlight2" creates
  suns on the top hemisphere.)
* build: support compiling with Visual Studio

Bugfixes
--------

* light: fix antilights (broken in last release)
* light: fix _mincolor to accept 0-1 float colors
* light: fix surface lights on rotating bmodels from incorrectly spawning
  lights near the origin
* qbsp: log coordinates for CheckFace errors
* qbsp: round texture coordinates that are close to integers, for Darkplaces
  compatibility
* qbsp: remove 128 char limit on entity key/value values 

2015-10-26 TyrUtils-ericw 0.15.3 release
========================================

* hexen2 support, patch from Spike
* light: add "_surface_spotlight" key for making surface lights into
  spotlights based on the surface normal
* vis: Reuse each cluster's visdata for all leafs in the cluster
* light: add "-sunsamples" flag to control number of samples for
  _sunlight_penumbra and _sunlight2
* qbsp: add "-epsilon" option to control ON_EPSILON, from txqbsp-xt
* light: silence "no model has face" warning generated by "skip" faces.
* light: fix "-gate" (was calculating too-large bounding spheres for delay 2
  lights.)
* qbsp: updates to the "-maxNodeSize" feature added in 0.15.2 to be closer to
  the txqbsp-xt version.
* light: Adjust the trace algorithm to match that in q3map. 
* qbsp: print coordinates for "New portal was clipped away" warning

2015-08-09 TyrUtils-ericw 0.15.2 release
========================================

* qbsp: add "-maxNodeSize" option, from txqbsp-xt. Defaults to 1024. Makes large
  maps process much faster and should generate better bsp trees.
  If it causes a problem disable with "-maxNodeSize 0"
* qbsp: make "mixed face contents" and "degenerate edge" non-fatal, from txqbsp-xt
* qbsp: make "-oldaxis" the default. new "-nooldaxis" flag to get the previous behaviour.
* light: add "-surflight_subdivide" flag to control amount of surface lights created
* light, vis: use below normal process priority on Windows
* light: allow negative surface light offset
* light: average the lit file color components to generate the bsp lightmap value.
  TODO: use a perceptually weighted average.
* light: fix lighting of hipnotic rotating entities.
* light: fix crash in "Bad texture axes on face:"
* light: fix surface lights being mistakenly duplicated
* light: add "-onlyents"
* light: add "-dirtangle" setting to control dirtmapping cone angle, default 88 degrees.

2015-07-09 TyrUtils-ericw 0.15.1 release
========================================

* light: .lux file support from Spike, for deluxemapping
* light: add gamma control with -gamma flag and "_gamma" key
* light: various optimizations
* light: rename -dirty flag to -dirt for consistency
* light: make fence texture tracing opt-in with the "-fence" flag.
  fix an issue with fence texture coords.
* light: support switchable lights with any light* classname, not just "light"
* light: fix debugging spam output from last build

2015-05-01 TyrUtils-ericw snapshot
==================================

* light: fix hang when using _deviance, make _samples default to 16 when
  _deviance is set.
* light: fix for always generating a .lit file when surface lights are used

2015-04-29 TyrUtils-ericw snapshot
==================================

* qbsp: fix broken -onlyents flag
* qbsp: fix texture offset on rotate_object, so they match in the
  editor. Added "-oldrottex" flag to revert to old behaviour. From txqbsp-xt.

2015-04-27 TyrUtils-ericw snapshot
==================================

new features
------------

* light: fence texture tracing, for bmodels with "_shadow" "1"
* light: surface light support via "_surface" "texturename" light key

convenience
-----------

* light: respect "_dirt" "-1" bmodel key in -dirtdebug mode
* light: allow setting "-dist" and "-range" command-line flags in worldspawn
  ("_dist", "_range")
* light: accept "_sunlight_mangle" as an alternative for "_sun_mangle"

other
-----

* all: increase stack size to 8MB. Fixes qbsp crash with bbin1.map on Windows,
  light crashes.
* qbsp: switch to hardcoded MAX_MAP_PLANES (262K), speeds up map file loading
  phase.
* qbsp: MakeFaceEdges: accelerate with a hash table to avoid slow O(n^2) search
  for edges
* qbsp: ChooseMidPlaneFromList: fix off-by-one error in axial plane test. On
  the first SolidBSP pass, gives fewer split nodes on bbin1.map (128k vs 199k)
* light: MatchTargets: disable copying "style" key/value from a light to the
  entity that targets it. Don't see any point, and causes problems if "style"
  is meaningful for the targetting entity (e.g. a monster).

2015-03-05 TyrUtils-ericw shapshot
==================================

* light: support "_dirt" "-1" on bmodels to disable dirtmapping

2015-02-24 TyrUtils-ericw snapshot
==================================

* light: _sunlight2 (sky light/light dome) support from q3map2
* light: _sunlight_penumbra (deviance) from q3map2

2015-01-31 TyrUtils-ericw snapshot
==================================

* light: per-light dirtmapping control

2015-01-21 TyrUtils-ericw snapshot
==================================

* light: revert trace change in TyrUtils 0.7 that was causing artifacts.
  fix bug in determining trace hitpoint

2015-01-19 TyrUtils-ericw snapshot
==================================

* light: handle colours in the range 0-1
* light: ambient occlusion / dirtmapping from q3map2 support
* qbsp: account for miptex struct in wad3 lump disksize
* light: Increase precision of lightmap extents calculations
* qbsp: fix coordinates in degenerate edge error in tjunc.c
* build: bump the fallback version number in Makefile
* bsputil: fix wad export from bsp with missing textures

2014-02-16 TyrUtils v0.15
=========================

* qbsp: Cope with textures names containing '{' or '}' (e.g. for alpha mask)
* qbsp: Increase MAXEDGES limit from 32 to 64
* qbsp: Make transparent water the default (same as txqbsp)
* qbsp: Improve some clip hull errors with map source line numbers
* qbsp: Ignore func_detail entities on -onlyents compiles
* light: Fix bug with minglight clamping with coloured lighting

2013-10-03 TyrUtils v0.14
=========================

* qbsp: Added Quake 2 map compatibility (extra surface attributes ignored)
* qbsp: Add -2psb option to output in RMQ compatible BSP2 format

2013-09-30 TyrUtils v0.13
=========================

* Fix handling of func_group/detail entities with no solid brushes
* Fix automatic adding of animated texture frames

2013-09-29 TyrUtils v0.12
=========================

* Implement the Darkplaces (LordHavoc) style BSP2 format and use as default
* Still support the RMQ style BSP2 format (but don't create any new ones)
* qbsp: Fix bug causing sky brushes to be non-solid

2013-09-24 TyrUtils v0.11
=========================

* Support BSP2 format (qbsp requires the "-bsp2" command line option)
* qbsp: Fix animating texture bug when brushes are textured with alt-animations
* qbsp: Fix a crash in tjunc calculations
* qbsp: Exit with error if verticies exceed 65535 (BSP29 limit)
* qbsp: Add experimental "-forcegoodtree" command line option (thanks Rebb)
* vis: reduce "leaf recursion" error to a warning and continue processing

2013-04-25 TyrUtils v0.10
=========================

* Documentation added for bspinfo and bsputil
* Fix vis bug due to missing vertex copy in v0.9 portal clip changes

2013-04-24 TyrUtils v0.9
========================

* qbsp: fixed bad pointfile generation

2013-04-23 TyrUtils v0.8
========================

* qbsp: fixed surface edge corruption when using skip surfaces
* qbsp: fixed portal generation for transparent water and detail nodes
* qbsp: added "-noskip" option for troubleshooting skip related problems
* light: reduce "no model has face ###" to a warning
* vis: fix portal stack corruption in ClipStackWinding
* bsputil: added a "--check" option (beta!) to check internal data consistency

2013-04-10 TyrUtils v0.7
========================

* Unix man page documentation for the main tools (qbsp, light, vis)
* HTML and text documentation is generated from the man page sources
* qbsp: added support for using WAD3 texture wads used by Hammer
* qbsp: include clip brushes when calculating bmodel bounding box
* qbsp: enable creation of clip-only bmodels
* qbsp: recognise and remove ``*waterskip``, ``*slimeskip`` and ``*lavaskip`` surfaces
* qbsp: added ``hintskip`` texture support
* qbsp: fixed some bugs parsing empty func_group/func_detail entities
* light: implemented self shadowing and full shadows for brush models
* light: implemented the "-soft" command line option
* light: implemented the "-addmin" command line option
* light: implemented the "_anglescale" (aka "_anglesense") key and cmdline
* light: remove support for negative color components (never worked properly)
* light: removed the "-nominlimit" option (now the default behaviour)
* light: removed the "-compress" option (a bad idea from long ago)
* light: make -gate command line affect linear falloff lights as well
* vis: changed the default testlevel to 4
* vis: added the '-noambient*' options to disable auto ambient sounds.

2013-03-07 TyrUtils v0.6
========================

* qbsp: respect floating point texture rotation and shift in map files
* qbsp: support for Valve's 220 map format used in later Worldcraft/Hammer
* qbsp: support func_group entities used by Radiant and similar editors
* qbsp: surfaces with the skip texture are now removed from the compiled bsp
* qbsp: hint brush support similar to Quake 2 for hand-tweaking the PVS
* qbsp: fixed a problem where leak files were not written for hull0 or hull1
* light: fixed a race condition in multithreaded coloured light processing
* light: fixed bug preventing use of all 4 light styles in a common case
* light: implemented attenutation formulae "delay" 4+5, ala Bengt's tools
* light: removed old bsp30 support
* light: lit files now automatically generated when coloured lights detected
* light: implemented 4x4 oversampling with -extra4 command line
* light: implemented the -gate option to help speed processing (default 0.001)
* light: implemented the "_softangle" key for spotlights
* light: implemented minlighting for brush models

2013-02-25 TyrUtils v0.5
========================

* New changelog to summarise changes going forward
* light and vis both now multithreaded on Unix and Windows platforms
* vis now writes a state file every 5 minutes so it can resume if needed
* qbsp and vis now support a form of detail brushes, similar to Quake 2. See
  qbsp.txt for further details.
* added a small optimisation to vis for a minor speedup (usually only 1-2%)
* build system re-written and lots of cleanups all over the code
