Hexen II: Hammer of Thyrion
Release Notes for version 1.4.2
===============================

Changes since HoT-1.4.1 :

General:
--------
- The engine version is now at 1.19 for Hexen II and 0.19 for HexenWorld.
- Added support for 64 bit architectures: The crashes on amd64 are fixed.
- Added support for protocol 18: Hammer of Thyrion is now fully network-
  compatible with Raven's 1.11 windows version, as it has been with other
  Hexen II ports.
- The net compatibility works both ways: When H.o.T is run as a client,
  it can connect to Raven-1.11 servers and can play just fine.  On the
  other hand, if a 1.11 client wants to connect to a H.o.T. server, the
  server must be started with "-protocol 18" command line argument.
- You can also load and play games saved with the 1.11 windows version and
  can playback the demos recorded with the 1.11 version.
- Fixed and improved parsing of puzzles.txt: This fixes the bug where the
  names used to be listed as Unknown in the puzzle pieces inventory display
  (you can access the puzzle pieces inventory display using a key bound to
  the +showdm command, the default is q).
- Updated the loading of strings.txt, infolist.txt and puzzles.txt.
- Added ability of deleting saved games from within the game: press the DEL
  key in the load or save menu and press y at the dialog. Alternatively, the
  new console command deletesave <savename> does the same thing.
- Updates to SDL input code.  Added the Shift-Escape key combination as a
  new means for opening the in-game console.
- Fixed wheelmouse for direct input mode in the windows version. Added the
  direct input support of HexenWorld to Hexen II. DirectInput is activated
  by the "-dinput" command line argument.
- Revised pak data checking.
- Added experimental support for using unpatched, off-the-cdrom 1.03 version
  pak files as a compile time option. Disabled by default.
- Several cvar tweaks.
- Made the load and connect commands to get rid of the menu or the console.
- Made the item inventory bar to wrap around.
- Fixed multiplayer episode selection in the menu system.
- Updates to zone memory usage: a 256 KB secondary zone for static textures
  (sec_zone) is now initialized, which is especially useful for the software
  renderer and have its merits for the opengl version, too.
- Revised several unsafe LoadStackFile and LoadBufFile usage.
- Removed the useless net_vcr facility.
- Tweaked the init sequence.
- Changed the remnants of malloc usage into hunk or zone allocations.
- Stabilized the gcc-4.0.x unit-at-a-time mode compilations by allocating
  several sizebufs dynamically instead of pointing to a static buffer.
- Mac OS X: Ensured that the basedir always stays the same (fix was added
  in 1.4.1-rev1).

Gameplay:
---------
- The gamecode is now at version 1.19.
- Origin fixes for tomed fires of vorpal sword and purifier: paladin used
  to fire them always from the non-crouched eye position, and it was even
  the worst when he was looking up (and down). You won't be shooting your
  back when standing just in front of a wall and fire your tomed purifier
  to the sky, from now on ;)
- Fixed an obscure bug where the assasin with her 4th weapon uses the tome
  of power and can't fire it (gamecode version 1.16a, the fix was added in
  1.4.1-rev1).

Console:
--------
- Added prefix matching support to the maplist command.
- A bug in duplicate name detection in the maplist command was fixed.
- Updated and sanitized the command lister procedures.
- Added a -developer command line argument which sets the developer cvar to
  1 during the init phase (ie. before the config is read).
- Consolidated all Con_Printf and Sys_Printf family of procedures into a
  single flag based procedure. Added macros for compatibility with the old
  api.
- Revised the logging system, made all Con_Printf and Sys_Printf output to
  be written into the logs from the start. Added a -devlog command line
  switch to enable logging of developer message even when the developer cvar
  isn't set.

Network:
--------
- Hexen II, UDP: added network interface scanning to overcome cases where the
  host address resolves to 127.0.0.1 (loopback) using the old hostent method.
  If, for some reason, you want to disable this feature, use the command line
  argument -noifscan.
- Added -localip command line option to hexen2, usage: -localip <ip_address>.
  This changes the ip address embedded in the response packets for serverinfo
  and connect requests to use the command line provided ip address. The server
  still binds to INADDR_ANY and it can see the broadcast requests.
- Added a hexenworld (quakeworld) style ip binding option for hexen2, usage:
  -ip <ip_address> or -bindip <ip_address>. This enables the server admins to
  bind to a specific IP address on a multi-homed host. Note that using this
  option will prevent the us from receiving broadcast packets, so the server
  discovery on the LAN will not work if the server is started this way.
- Hexenworld: added -bindip as an alternative for the -ip option to follow the
  similar hexen2 change (both options are the same, -ip is checked first).
- Fixed net driver checks in Hexen II dedicated server: It was broken in the
  1.4.1 release and works properly now.
- Fixed Datagram_Init returning success even if it couldn't initialize any of
  the lan drivers.
- Fixed a long-standing 0 byte udp packet DoS bug in hexen2.

Server:
-------
- Fixed a bug in NET_SendToAll (mainly used for reconnecting clients upon
  changing levels) where it didn't skip non-connected clients.
- Fixed a crash when changelevel2 is requested for a non-existant map.
- Fixed the mission pack's doWhiteFlash server message: it used to affect the
  local client only. Naturally, the recorded demos didn't carry the message
  and the flash didn't appear, either. It works properly now.
- Made the Hexen II dedicated server to exec not hexen.rc or config.cfg, but
  server.cfg if available. As an alternative, any config file can be exec'ed
  when starting the server, such as: "h2ded +exec myconfig.cfg"
- Hexen II dedicated server now starts the demo1 map, if the server is still
  not active when initialization is complete.

Video:
------
- Added 'apply changes' and 'reset changes' items to the video options menu.

Software Renderer:
------------------
- Added support for non-intel cpus: x86 assembly is not needed anymore.
- Fixed a few endianness issues.
- r_transwater now always acts as an on-the-fly water translucency switch:
  it used to fail if a map was loaded with r_transwater disabled. works now.
- Added ability to load external wal texture files instead of internal pixel
  data of the brush model (depends on the new r_texture_external cvar).

OpenGL Renderer:
----------------
- Some speed-ups in the alias model drawing.
- Fixed RGBA lighting.
- Fixed sprite translucencies, such as punch hits, demoness' fireball and
  powered-up acidball attacks.
- Fixed an invalid glTexParameterf call which used to result in extra lines
  being drawn on the screen.
- Fixed bug that the array size for playertextures must be MAX_CLIENTS, but
  was hardcoded as 16.
- Added ability to load external wal texture files instead of internal pixel
  data of the brush model (depends on the new r_texture_external cvar).

Sound:
------
- Added a new version of SDL audio driver which fixed a rare bug where the game
  would randomly quit with an error message 'Cache_MakeLRU: active link'.
- Made 22050 Hz the default sample rate.
- Added external music file support via SDL_mixer as an extra patch.

CDAudio:
--------
- Updated the volume setting procedures.

HexenWorld:
-----------
- OpenGL: Fixed bug that netgraphtexture was not reset during re-initializa-
  tion of the draw subsystem (used to affect the packet loss status graph by
  r_netgraph).
- OpenGL: Fixed bug that dynamic lights had a problem with RGBA lightmaps,
  such as torches didn't illuminate, but luminance mode was fine. Lightmaps
  in RGBA mode are working now.
- OpenGL: Added colored dynamic lights and extra dynamic lights (stuff copied
  over from hexen2). The gl_colored_dynamic_lights and gl_extra_dynamic_lights
  cvars and their menu entries are functional now.

Launcher:
----------
- Added integrated ability to patch the pak files.
- The launcher now scans the installation directory against known game versions
  for pak file health, and pops up the patch window with a short report if it
  finds something bad. It now disables the mission pack or hexenworld options
  according to the results it took from the installation scanning.
- Added ability to specify a different data installation directory.
- Added ability to specify extra command line arguments which aren't directly
  supported by the graphical interface.
- Many clean-ups. Now at version 1.0.2.

Utilities:
----------
- Added the bsp2wal tool which extracts all texture data into hwal files.
- Added the lmp2pcx tool which converts hexen2 texture data into pcx and tga.
- Fixed the broken project path decision in qbsp. it doesn't scan for a maps
  directory anymore.
- Added a findfirst/findnext implementation to the common library.
- Several fixes in dcc.
- Minor updates to the hexenworld utilities hwmquery, hwrcon and hwterm. Added
  extra patches against xqf and qstat for similar functionality.

Other:
------
- Fixed many printf format string errors.
- Imported the latest xdelta-1.1 sources into the tree.
- Started a large scale attempt at improving const-correctness.
- Updated inline commentaries.
- A lot of code clean-up all over the tree.

Credits:
--------
Many thanks to Juraj Styk for his help and for the code he provided for the
non-intel software renderer support, to Davide Cendron for 64 bit testing and
to Kevin Shanahan (aka. Tyrann) for useful discussions and ideas.

