# Doom Legacy Changelog

## 1.48.14 SVN1657 (2023-11-30)

### FEATURES 1.48.14

- UMAPINFO, derived from umapinfo-lib (GPL) written by Michael Bäuerle, who has allowed us to use and modify it in DoomLegacy (FR_0100). In DoomLegacy the original library code got heavily modified, eliminating use of FLEX and YACC, removing internal structure hiding, and making it embedded in DoomLegacy. Errors and messages were rewritten to attach to DoomLegacy error reporting.
- Add viewfit control. This allows a wider monitor to be used with drawing at correct aspect ratio.
  - auto: auto select based on actual screen size.
  - stretch: stretch to fit screen.
  - fit width: fit to screen width, scale to correct aspect ratio.
  - fit height: fit to screen height, scale to correct aspect ratio.

### BUG FIXES 1.48.14

- In Pagodia.wad, Map06, the hanging vine texture had visual artifacts. (AUR008, texture #624, lump 132961). Due to some of the patch columns being totally empty, some of the columns of the generated texture had the 0xFF termination, in the wrong place. Fixes bug 687.
- In Lost Civilization Map04, the arch texture ARC1ABRN was rendered with black holes. The wad uses it on a wall and as a masked texture, next to each other. These two uses generate incompatible texture formats.

  The use on a wall had texture generation using the TM_picture format. The masked use requires a TM_masked compatible texture format. To fix this, gave the masked texture draw the capability to generate an extra texture_render holding a TD_2s_ready texture.

- The MIDI output included some padding of Track 0, that caused the Win10 and Win11 MIDI player to delay the track and change it to a piano. Do not know why these were in the MIDI output. The Track 0 padding has been disabled, and may be removed entirely (eventually). The Program_Change inclusion is now enabled by control variable "midi_create_program", which is default 0. The midi compression is enabled by control variable "midi_compress", which is default 1. These are not in any menu, can be changed by console. This fixes bug 0674.
- Add JOYSTICK_SUPPORT compile-time option, so that joystick code can be disabled. This was necessary due to some port situations not having joystick hardware.
- Steven Newbury has been trying to compile for DOS. These are changes based on a something he summitted. I suspect this may not be complete. It covers some network problems with DOS. Within djgppdos, there are DOS sound fixes and many other fixes to bring the DOS port up to date with the interface.
- Fixing complaints from gcc 11.2. Also snprintf does not honor string max field size. Must copy possibly long strings to some shorter buffer first. The code_size seems to have been reduced by 56K, perhaps due to new compiler.
- Fix error from w104_23. When BOB_MOM code was made a standard feature, one of the compile tests was missed. Removing the BOB_MOM define, made some of the old code active again. This may have had some obscure effect upon when the weapon bobbing stops. Have removed that old code. Some other cleanup, ptr declares.
- Disabled a RANGECHECK in wi_stuff as many wads violate those assumptions. Fixed many other typo and ptr declares encountered while working on UMAPINFO.

## 1.48.12 SVN1642 (2022-11-30)

### FEATURES 1.48.12

- Added SDL2 support, as a compile option. This provides video, sound, and keyboard alterations for the SDL2 library calls. The source code still supports SDL1. This supports target machines that are not supported by SDL2. At this point, for some things like MIDI music, we have not yet found optimal SDL2 solutions.
- Add a control to select music type, with an automatic mode. Add automatic music type selection and playing.
  This works better with SDL1 than SDL2. SDL2 will always use Fluidsynth for MIDI. It even builds a copy of Fluidsynth into SDL2.
- Added controls to adjust monster health, health pickup, armor pickup, and ammo pickup. This allows adjusting play of an overly difficult map such as one with multiple cyberdemons, such as when you have only three players on your coop team and one is a newbie, or just adjusting a map weak in ammo. The user can also increase difficulty when feeling cocky.

### BUG FIXES 1.48.12

- Mingw32 does not have strcasestr. Had to write one for Mingw32 and Watcom.
- Fixed a segfault in biowar.wad Map08 with OpenGL. It would segfault when a texture being drawn in cache, had one patch extending lower than the texture bottom. The cache write now tests against the cache limits, and not the source.
- Fixed X11 musserver quitting whenever trying any device other than TiMidity. Made the FluidSynth MIDI detection work. Included the DEBUG options. Fixed a HAVE_ZLIB test that would error when compiling for X11.
- Fixed where Player picks up clip when already has full ammo. A bug was introduced in patch w105_22_playermsg, svn 1225. This resulted in the clip being used up, even when the player already has max ammo.
- Rewrote the flat animation, to load all flats of an animation. A long time ago the flats were optimized by only loading the flats that appeared in the level map. This is incompatible with flat animation, as the animation requires flats that may not have appeared otherwise. This results in the animation not working for some flats that should be animated (doom2 map17). Updates the flat animation again when levelflats has moved during the update. Removed the old animation code that checked all flats in the wad.
- Fix the existing MIDI, MP3, and OGG music playing. Fix MP3 music playing, so that it does not try to play it as MUS. Detect the music type upon replay too.
- VISPLANE_DYNAMIC_COVER. Replaced arrays of [MAXVIDWIDTH] in visplane with dynamically allocated arrays of the current video width. This reduces each visplane from 6464 bytes to 3268 bytes. This will allow MAXVIDWIDTH to be increased, to allow larger screen sizes, without affecting the memory usage for everybody.
- Transition to new software renderer, to fix sprites that are drawn in conflict with 3d floors.
  Removed drawnodes code. Sprites could not be sorted into the drawnodes to satify all the conflicts that occur. Instead of trying to save all the sprite conflicts in one sprite structure (like a drawnode), the sprite is split and clipped until all parts of it have been drawn (or masked),
- Replaced openings code (from PrBoom) with pool16 code, which does not have to adjust existing pointers when expanding the pool.
- Fix to sprite draw, so that flipped sprites drawing is independent of the sprite x1 position. This fixes draw errors of some flipped sprites.
- Fixed the OpenGL dynamic lights, where wall textures would distort when a fireball or rocket would pass by. This affected walls under a 3d floor, when it experienced a dynamic light.
- Fixed a zip seek error that only affected some zip files. Opening a zip archive when there already was a zip file open, required that the zip file be closed, or its file position will be different than our recorded position. This fixes bug when loading cyberarena3.zip.
- Protect against NULL line ptr in some light functions. This mitigates a segfault in cyberarena3.zip, that was not reproducible.
- Fixed compile errors in dynamic load of zlib, and libzip. Detect version of libzip from header file. Remove version of libzip from make_options.
- Add SDL_DIR to the compile make_options, because compile on win/mingw32 cannot reliabily find SDL/include otherwise, and it is better than having end users editing the Makefile. SDL installs with sdl-config are not affected, and most users do not need to specify it.
- Fixed the new SDL sound code to compile with SDL Mixer 1.2.8, SDL Mixer 1.2.10, SDL Mixer 1.2.12, and SDL2 Mixer. This is detected at compile. The SDL Mixer 1.2.8 does NOT have MIX_INIT, but the SDL Mixer 1.2.10 does, and SDL2 does too. The MIX_INIT provides some device detection and reporting to the user what was found.
  Still supports compiling for SDL Mixer older than 1.2.8, but those do not have RWOPS, and thus music playing with that Mixer will then use the hard-drive. This is detected and determined at compile-time, and running with a newer SDL Mixer will not affect that compile decision.
  The user must have a compatible SDL Mixer installed (same or better). Newer SDL installs have bug fixes (especially on win), and may be customized to the users machine, so this is up to the user.
- Changes to support compiling on Mac OS X (Darwin). Uses App folder. Based on support from Gibbon.

## 1.48.10 SVN1608 (2021-12-13)

### FEATURES 1.48.10

- Support for DeepBSP V4 extended nodes (based on crispy doom). Also ZDoom extended nodes (based on code from woof 1.2.0), supporting uncompressed, and compressed nodes (when zlib is present). Allows playing several wads, such as Avactor, and Lost Civilization, that are otherwise playable by DoomLegacy, but use extended nodes for several of their maps. Code provided by Michael Bäuerle (FR_0095).
- Added the blockmap generation code provided by Michael Bäuerle (FR_0096). Some of the code is borrowed from crispy doom, altered a bit by Michael Bäuerle to suit DoomLegacy, and then totally mangled by WJ.
  A blockmap control has been put into the menu.
  - Vanilla: Load the blockmap, preserves blockmap tricks.
  - Large: On large blockmaps (error prone), Generate the blockmap instead.
  - Generate: Always Generate a blockmap.
  - Auto: Try to Load the blockmap, upon significant errors then Generate a blockmap.
- The hardware sky draw (OpenGL, etc.) now uses the extended textures. The scaling and alignment of the sky in hardware draw has been made consistent with software draw. The sky movement from head turning is greatly reduced. There is still some horizontal wander.

  The hardware sky still does not change when the player is Invulnerable. The hardware draw sky does not support the necessary multiple colormaps right now.

- A dehacked thing translation command line switch, -dehthing. This selects the dehacked translation for thing numbers in the range 138 to 150. This overrides the Automatic translation detection.
  - legacy : DoomLegacy untranslated
  - boom : translate things according to Boom
  - prboom : Boom and Beta things
  - ee : Eternity Engine things
- A separate supplementary wad is provided that has dog sprites and sounds. Specified before a wad, it provides default dog sprites and sounds. Specified after a wad, it replaces the dog sprites in a wad.
- More ports now allow a second mouse. This allows using PC, mousesystems, and PS2 type mice. The ports that have the second mouse support are SDL, WIN32, and X11.
- The Linux X11 port got a total rewrite of sfx sound. It previously was only supporting OSS sound, and ESD sound. Can now select between OSS, ALSA, ESD, PulseAudio, and JACK sound devices using the sound menu. For music, can now select between MIDI, TiMidity, FluidSynth, external MIDI, FM_Synth, and AWE32_Synth, using the sound menu. This depends upon which support got compiled into the program, as selected in the make_options file.

  Many of the options are untested. The last two Synth options depend on older specific sound cards, and will not be included in released binaries. I have not managed to get a FluidSynth installation to work, I don't have an external MIDI device to test with, and JACK wants to take over the entire sound system.

### BUG FIXES 1.48.10

- Added failure detection for setting drawmode from config file. If the config file drawmode fails then use a window at native bpp. This used to fail ungracefully.
- Improved Gcc10 compilation, eliminating most of the nuisance messages. Fixed usages of snprintf, and strncpy. Fixed bug 0671.
- The Clang compiler caught some mistakes. The old code probably did work. Fixed bug 0672.
- Fixed where the program is stuck in client mode. Once having tried to connect as client, the program would not go back to server mode, not even when starting a netgame as server. A symptom was the player wait count being initialized to 99. Fixed to set server mode. Fixes bug 0677.
- Players were kicked during netgame when their blood splat setting was different than the server. As it was desireable to allow players to turn off blood splats independently of the server setting, this was fixed by making the off code call P_Random appropriately. This also fixes a demo consistency error. Fixes bug 0678.
- Changed the netgame repair function to correctly report differences in random number settings for the server. The message syntax was only appropriate for the client, displaying reversed server/client values at the server.
- Adding extended nodes fixed several bugs. Fixes bug #657, due to DeepBSP V4 extended nodes. Fixes the segfault in Eviternity.wad Map15 and Map32, due to use of uncompressed ZDoom extended nodes.
- Fixed dehacked code to read Avactor.wad dehacked lump. Increased the dehacked buffer length to 1028. Made all the string comparisons caseless. Adopted some logic from PrBoom and Eternity regarding exiting sections on a blank line. Detect "//" lines as comments.
- Fixed the hardware draw to clip lights at 0..255. Some wad editors put in a default light value of 256. This fixes some wads, like Avactor.wad, which has light values of 256 for some sectors. These would show up as black sectors. Most ports allow the light field to exceed 255, allowing some lighting tricks (that few wads take advantage of).
- In Avactor.wad, there are an excessive number of BSP partition lines that miss the subsector. In this case the hardware draw BSP must determine if the subsector poly is to the right, or to the left of the divide line. This must match the BSP partitioning, as those poly will be assigned to the front sector, and back sector. Sometimes it was testing a vertex on the divline, leading to the poly being assigned to the wrong subsector. This fixes a missing floor in Avactor.wad (Map04, sector 1757).
- Fixed some bad subsector draws for hardware-draw in Avactor.wad (Map05 sector 1502). These were using the wrong sector to draw the subsector. For the polygons that do not have a linedef as a side, there must be a search of all linedefs to find one that indentifies the sector that this subsector is within. The test needed to be more robust for large maps.
- Lost Civilization uses some masked textures on upper textures and single sided walls. This is not entirely valid usage, but it happens. The software render draws black in the missing portions of the texture. With hardware render, OpenGL, this shows sky through the wall. Fixed the hardware render to also draw black in this usage.
- Fixed the menu selected extra dogs, to be spawned using the correct type code. This fix was revised three times, as more problems with dehacked dogs arose. Fixes bug 0681.
- Fixed the rocket in Valiant.wad. It uses dehacked thing numbers from Beta versions, that are valid in PrBoom, but in Doom Legacy they match thing numbers for Dogs, smoke, and other Legacy specific things.

  Implemented dehacked detection that translates these to more appropriate DoomLegacy things. This affects dehacked things in Lost Civilization, Avactor, Valiant, and especially antaxyz.

- Always include the missing sprite detect, from Debug. Often the dog sprite is missing from the wad.
- Made Voodoo card support optional. The base code is no longer tied to support for Glide.
- Fix Load savegame menu controls to allow ESCAPE from the Load savegame after changing to another directory.

## 1.48.8 SVN1568 (2020-12-19)

### FEATURES 1.48.8

- Sky generation has gotten a Vanilla setting. Sky drawing (software draw) now puts a solid texture above and below the sky, and no longer tiles the sky. The OpenGL sky draw has separate sky draw behavior.
- The mouse2 serial support has been expanded to handle PC mice, MouseSystems mice, and PS/2 mice, for SDL and Win32 ports. The PC and MS mice have been tested. If anyone has found a way to route a PS/2 mouse, possibly on USB, to a serial port input, please let us know.

### BUG FIXES 1.48.8

- A savegame buffer overflow was fixed. An overflow prevention test had been misplaced. such that it could be avoided in some conditions. Fixes BUG 0667.
- Cleaned out some of the accumulated cruft in sky drawing. Fixed sky tiling, and then made changes to prevent sky tiling.
- Changed the software mode sky drawing to TM_picture format. This eliminates the line artifacts that were drawn above and below the sky, and restores the vertical alignment.
- Limited the software sky drawing to the texture, so to not tile the sky draw. Created a skytop_flat for above the sky, and a ground_flat for below the sky. These are drawn when the viewed sky exceeds the bounds of the sky texture. For now, these flats are created as solid textures. Hardware draw has a separate sky draw behavior.
- In the case of 200 or 240 sized sky textures (Heretic and Legacy substitutes), fixed the texture sky height so that the correct size TM_picture is created. Fixes BUG 0668.
- Changed the freedoom wad names, avoiding doom wad names as that was conflicting with doom2 gamemode. Freedoom: "freedoom2.wad", "freedoom.wad", and "fdoom2.wad". Ultimate freedoom: "freedoom1.wad", "freedu.wad", "fdoomu.wad".
- Fixed BUG 0670, Monsters mysteriously disappearing, moving large distances into the void space.
  This bug was introduced in the moonwalk patch (SVN 1540) by copying the opposite direction calculation code from PrBoom. This was done in an effort to reduce differences that might lead to bugs. It replaced a table lookup implementation. However, the PrBoom calculation must be guarded against the value DI_NODIR, which the table implementation could handle inherently. Without that protection, an olddir of DI_NODIR introduced a direction of 12 into the logic, which can only handle directions of 0..7, with NODIR=8. Several times a game that 12 value would survive long enough to get used, which would be expressed as a wild walk movement.
- Improved the large blockmap handling to deal with more issues of blockmap overflow in the presence of zennode blockmap compression. It can now handle more maps of the Lost Civilization wad, although some other issues are still present.
- The mouse2 support was found to be disabled and missing for the SDL port. It has been fixed, and expanded to handle PC mice, MouseSystems mice, and PS/2 mice, for SDL Linux, SDL Windows, and Win32 ports. Fixes BUG 0669.
- Made LOGMESSAGES work again, which writes debugging logs. Release binaries do not have this code. If DoomLegacy is compiled with LOGMESSAGES enabled (doomdef.h file), a log.txt file will be produced. This is currently enabled when compiled with DEBUG.
- Fixed the overlapped string copies detected by GCC 10. Fixes BUG 0671, Michael Bäuerle.
- Reduced warnings when compiling with GCC 10. This was mostly due to signed char being used as an index, which may cause problems on some platforms. Fixes BUG 0671.
- Fixed a crash when hardware draw (OpenGL) tried to compose a texture from patches that exceeded the lower texture boundary.

## 1.48.6 SVN1550 (2020-09-09)

### FEATURES 1.48.6

- DoomLegacy can read zip archives (Linux Only, enabled by compile option ZIPWAD). When an load file is a zip archive, all loadable files within the archive are loaded. When searching for a known file, zip archives of the same name (but with .zip) are also searched.
  This uses library libzip. When built with dynamic loading, DoomLegacy detects if the libzip library is present on the user machine. This allows DoomLegacy to run without the feature, when the user does not have libzip.
  A libzip before version 1.2 does not have an fseek function. The compile will detect the libzip version and generate our own zip_fseek function, so libzip 1.0 can be used. With dynamic loading, the fseek presense is also tested at execution.
- Recorded Demos now include both the Version and Revision numbers, so revision specific behaviors can be enabled. DoomLegacy 1.48.6 has modified its native demo format, which is revision specific. Older demo formats are still playable.
- Recognize and handle DeePsea Tall patches. Enabled with compile option DEEPSEA_TALL_PATCH. Michael Bäuerle submitted the orignial patch, derived from crispy doom.

### BUG FIXES 1.48.6

- DoomLegacy and PrBoom monster infighting does not have missile invulnerability between monsters of the same species. Some other ports (Boom, MBF, Eternity engine) do not have the infight test, so their monsters are always invulnerable to missiles from their own species.
  Added another item to the infight control to select the behavior.
  Implements "Full Infight" setting with missile damage (Legacy, PrBoom).
  Implements other infight settings without missile damage (Boom, MBF, Eternity).
  Fixes BUG 0664.

  Added MBF infight logic, thats stops monsters from firing on friends.

- Legacy demo would fail to start due to blocking the textcmd that loads the map.

  The Legacy 1.48.4 demo was recorded with player 0 issuing the map textcmd. Player 0 was not in the game yet, and this was detected as a textcmd from a non-existant player, which got caught by new security code. For textcmd issued before player 0 is in the game, the demo needs to use SERVER_PID.
  Fixed demo read to redirect player 0 demo textcmd to SERVER_PID.

  DoomLegacy 1.48 has a single long combined textbuf, containing the textcmd from all players. Within the combined textbuf, there are individual textcmd marked with the player id. Individual textcmd are still limited to 255 chars as in an ordinary textbuf. The DoomLegacy 1.48.6 demo format has been changed to store the entire combined textbuf buffer into the player 0 slot. This is simpler for recording and playback, has the same effect, and allows SERVER_PID textcmd, which the previous demo format did not.

  The commands to create a player (and other server actions) are now issued by SERVER_PID, where in older demos they were issued by player 0, before player 0 existed. DoomLegacy 1.48 has better protection against malicious network traffic than previous versions, and checking textcmd validity is part of the security protection. This fixes demo playback to work with the security checking.

  Changed the SERVER_PID to 250 now, for future expansion of players.

  This fixes bug 0665.

- Fixed the moonwalk bug, where monsters would sometimes walk backward. This was due to a bad translation of an everything-in-one-expression to more maintainable code.
- Make an oof sound when hit a 2s line, just like when hit a 1s line. Adopted from PrBoom, a Killough enhancement.
- Make optional, and disabled, some old development hacks.
  Option DEVPARM_LOADING:
  Loaded development wads from a special directory. This used switches -wart, -devgame (even older -shdev, -regdev, -comdev).
  Option WADFILE_RELOAD:
  If a filename started with a tilde "~", it was taken as an indication to reload the file on every lump access. This was to enable leaving doom running while changing wad files.
  Option LOADING_DISK_ICON:
  Not implemented in any port anyway.
- The Full Graphics startup was fragile, requiring constant fixing. Video startup now changes directly to the config modes, which is faster and cleaner. Removed some antiquated code and interactions, adopting an interface that puts the main code in control.
- Fixed the violet line, trees, and tall sprites of "Lost civilization" wad. This required being able to save the same texture as both a transparent patch texture, for drawing hanging vines, and as a picture format texture, for drawing tiled walls. This fixes Bug 0663.
- The fast drawing of wall textures required them to be a power-of-2 in width, so they could be tiled. To handle the case where it is not a power-of-2 in width, it now uses a slower masked draw similar to that in PrBoom, which also handles a negative offset. This fixes the large tree in "Lost civilization".
- Fixed some old code to use POSIX fcntl, which allows it to compile on SunOS. Patches submitted by Michael Bäuerle. Fixes Bug 0666,

## 1.48.4 SVN1531 (2020-05-16)

### BUG FIXES 1.48.4

- Config file width and height were not passed to the port video drivers. Created explicit parameters and functions to pass these to the port video drivers, separate from the current video state. This clarifies the inputs to the port video drivers.
- Prevent the command-line restore code from changing the current drawmode setting back to the default drawmode setting, wrongly. A new state bit for certain control variables now blocks command-line restore. This did not actually change the drawmode. It did change the current drawmode display in the drawmode menu. which deceived users, and testers.
- Fix the config file fullscreen setting not being passed to the port video drivers. Update the config file fullscreen setting in the video settings after the fullscreen enables are set.

## 1.48.3 SVN1526 (2020-05-08)

### FEATURES 1.48.3

- Menu offers to create an initial drawmode config file.
  - Goto Video menu.
  - Press "F3" to enter drawmode config mode.
  - Select a drawmode.
  - Press "C" to create initial drawmode config mode.
  - Press "INSERT" to add a menu item to the drawmode config mode.
  - Press "F1" to exit drawmode config edit mode.

### BUG FIXES 1.48.3

- Fixed some problems during modeswitch, such as a segfault due to a palette function not being ready to use yet.
- Fixed config file loading to properly record when a file has been loaded. Fixed the menu instructions for drawmode and video mode, as they were giving false information.
- Implemented fixes proposed by Michael Bäuerle for endtext. Fixed endtext for big-endian (SDL port). Added UTF8 output for endtest.
  Added textout to select between vanilla output and UTF8 output, because user setups differ.
  Add "-noendtext" as command line parameter, to match the docs, as that is the spelling that the user is likely to use. The existing "-noendtxt" is left in place for compatibility.
- Fixed a network error indication that was not caught by tests. Fixes bug 0660, based on code by Adam Stylinski.
- Stray semicolon in sky code, removed. Fixes bug 0661, based on code by Adam Stylinski.
- Fixed type conversion after LE_SWAP, which looked suspicious. Fixes bug 0662, aided by Adam Stylinski, Michael Bäuerle.
- Fixed linux_x11 compilation issues. Linux_x11 is still using OSS sound, and has some compile warnings.
- Fixed the feet-in-ground problem for OpenGL, for drawmode switch. The original fix did not work when switching drawmode.

## 1.48.2 SVN1518 (2020-04-25)

### BUG FIXES 1.48.2

- The config file in a new install was not being written. Fixed.

## 1.48.1 SVN1517 (2020-04-14)

### FEATURES 1.48.1

- Change the submenus to use ">>" instead of "..", which is much easier to see.
- Add the video drawmode to the option menus. This allows the user to change between 8 bit paletted draw, 15 bit, 16 bit, 24 bit, 32 bit, native draw, and OpenGL draw, at any time. The drawmode is saved in the config file. It is no longer necessary to specify a drawmode on the commmand line.
- There can now be a separate config file for each video drawmode.

  Each drawmode config file can save separate settings for video mode, fullscreen, gamma, and can save any other cvar that is saved to a config file. Each drawmode has a different name for its config file, which allows changes to the settings for a particular drawmode to persist.

  The main config file will be loaded first, and that can load all the saved cvar. Based on the drawmode selected, a drawmode config file will also be loaded, if available. The drawmode config file is optional. The cvar values in the drawmode config file will push down and hide the main config file values.

  Changing a menu value will change the current cvar value. That value will be saved back to the config file that last loaded the cvar value. The menu interface can also edit which cvar are saved in each config file. The config files can always be edited using an ordinary editor to include anything.

  Entries can be inserted and deleted:
  - F1 = normal menu
  - F2 = Main config values only
  - F3 = Drawmode config values only
  - F4 = normal menu
  - INSERT = add the menu item to the config file
  - DEL = delete the menu item from the config file

  Menu entries that are not relevant to the drawmode config, like the control key assignments, do not have support for insert to the drawmode config file.

- Added software draw of coronas, which uses a new alpha draw.

- The corona menu controls are moved to a new submenu, under effects.

  Corona menu control:
  - Off: Corona off
  - Special: Draws special coronas. Intended for those who don't want the common coronas, but don't want to miss out on the wad special effects.
  - Most: Draws most coronas, selected by distance, specialness, and alpha. Intended for those with CPU limitations, who need to limit draws, or with wads with an extreme number of lamps.
  - Dim: Dims some of the coronas.
  - All: Draw all the coronas.
  - Bright: Brighten some of the coronas.
  - Old: Draw the coronas using the old alpha field, and no type field.

- Added a menu control that selects the method for software draw of corona.

  Corona Software Draw:
  - Alpha blend
  - Alpha blend with constant background alpha
  - Additive Alpha: Adds to the current pixel.
  - Additive Alpha with background alpha: Background is first faded using background alpha.
  - Additive Alpha, Limit math: Adds to the current pixel, limiting each color to 255.

- Upgraded the hardware and software corona generation to use the new capabilities. This provides a corona type field to all coronas, including fragglescript.

  The fire, firefly, random, and pulse types, support multiple independent lights, without them being synchronized.

  The built-in corona types have been upgraded to use the new SPLT_fire, and SPLT_lamp.

  Corona bit enables (0x03):
  - SPLGT_corona = 0x01 : (enable corona draw)
  - SPLGT_dynamic = 0x02 : (enable dynamic light)
  Corona type field (0xF0):
  - SPLT_unk = 0x00 : (plain corona, near and far fadeout)
  - SPLT_rocket = 0x10 : (rocket corona with random flicker, near and far fadeout)
  - SPLT_lamp = 0x20 : (lamp and corona, brighter than plain corona, different size, near and far fadeout)
  - SPLT_fire = 0x30 : (fire and torches, slow flicker, near and far fadeout, 64 generators)
  - SPLT_light = 0xC0 : (a light source without an object, far fadeout)
  - SPLT_firefly = 0xD0 : (blinking firefly, far fadeout, 64 generator phases)
  - SPLT_random = 0xE0 : (random LED, no fadeout, 32 generators)
  - SPLT_pulse = 0xF0 : (slow pulsation, no fadeout, 256 generator phase)
- Support for NETBSD: port fixes to the Makefile and network code. Optioned as NETBSD.
  Feature Request 0090: based on code submitted by Michael Bäuerle.

- Improved deathmatch and coop menu selections.

  The Deathmatch settings are now:
  - Coop_SP_Map: Play coop using the single player map, items, and monsters.
  - Coop_60: Play coop, but the strong monsters added for coop are reduced.
  - Coop_80: Play coop, but the strong monsters added for coop are reduced.
  - Coop: Play coop, using the respawn settings in the game options menu.
  - Coop_weapons: Play coop, using the deathmatch weapon respawn (orig coop).
  - DM: Play Deathmatch, using the respawn settings in the game options menu.
  - DM_weapons: Play Deathmatch, respawn weapons (orig Deathmatch 1).
  - DM_items: Play Deathmatch, respawn items (orig Deathmatch 2).
  - DM_both: Play Deathmatch, respawn items and weapons (orig Deathmatch 3).
- Respawn weapons now works for Heretic too.
- Feature Request 0092: Added a bot menu setting to the deathmatch menu. Concept by Leonardo Montenegro.
- Bot code has been overhauled, with significant changes. It is not demo compatible with previous bot code. If there are any important demos with Doom Legacy bots out there that need some compatibility switch, you must let us know.
  Added controls for bot skill, bot speed, bot respawn time, and bot random number.

  Some of the bot skill selections affect all bots, but the rand bot skills gives each individual bot an independent skill setting. The game selections make the skill dependent upon the game skill setting.

  Bot skill:
  - crippled
  - baby
  - easy
  - medium
  - hard
  - nightmare
  - randmed: (random 0 to gameskill-1)
  - randgame: (random 1 to gameskill)
  - gamemed: (use gameskill-1 setting)
  - gameskill: (use gameskill setting)

  Some of the bot speed selections affect all bots, but the botskill selection makes the bot speed dependent upon the individual bot skill. The game selections make the speed dependent upon the game skill setting.

  Bot speed:
  - walk
  - trainer
  - slow
  - medium
  - fast
  - run
  - gamemed: (dependent upon gameskill-1, speed=0..4)
  - gameskill: (dependent upon gameskill, speed=1..5)
  - botskill: (dependent upon bot skill, speed=0..5)

  The bots will obsess less over things they cannot reach. Bots attacking barrels has some regulation now so they can leave them. This is still a work-in-progress, and there will be furthur significant changes to bots.

- Bots can now use skins, or colors.

- Bot generation option controls how the bots are generated, and when the random source is reset. Bot random number seed sets the bot random number generator index. The Bot random number source is used to select the bot name, color, and skin.

  Bot Gen:
  - Plain: (Repeatable)
  - Seed: (Bot Random Seed, Each Game)
  - Seed Random: (Bot Random Seed, Program Start)
  - Cfg Random: (Config Random, Persistant)
  - Sys Random: (System Random, Program Start)

- There may be a local autoexec, and/or a system autoexec. This supports system install of Doom Legacy, where the executable directory is system protected. If there is an autoexec.cfg in doomlegacy home, it is executed, otherwise the autoexec.cfg with the executable is executed. The local file can exec the system autoexec file when preferable "exec autoexec.cfg".

  Feature Request 93 by Leonardo Montenegro.
- Can play with bots in netgame, sometimes. Sometimes they cause the clients to consistency fault, for reasons unknown yet.

- Alternatives to the sky stretch, for normal sized sky textures. This is a work-in-progress. Wanted to get it into the 1.48 release, even though it is not polished yet. It is still better than always stretch.

  This only affects Software Render yet. The Hardware Render (OpenGL) still stretches the sky.

  Sky gen control:
  - auto: Will look for a replacement sky first, then will make best choice, which is usually extend_bg.
  - subst: Will use a replacement sky. (not fully implemented yet)
  - bg_stars: Extend the sky, replace all of background with stars.
  - extend_stars: Extend the sky, replace missing background with stars.
  - extend_bg: Extend the sky, fill with background color.
  - extend_fill: Extend the sky, fill with random samples.
  - stretch: Stretch the sky to fit.
- Extend the joystick key definitions to handle gamepad, like the xbnx-style gamepad. This has two joysticks, 10 buttons, and 2 triggers. Added joystick/gamepad controls that can be defined (menuesc, pause, automap). Detect some of the gamepad keys for menus, game start, and other necessary operations. It is now possible to play Doom Legacy without a keyboard, if your controller has 6 or more buttons, and you stay with the basic Doom and Heretic wads.
  Feature Request 0093: Concept by Leonardo Montenegro, and contains submitted code.
- The console help command now has help categories. This shows commands that are specific to the category. This also avoids overflowing the screen, which was not helpful.
- Added autoaim, crosshair, and weaponpref for player2 (splitplayer). Added a player menu for changing these for player1 and player2.

- Network games can now be entered at the next level start (game start). This can be achieved by disabling the download savegame control, for the server, or for the client.

  This will also happen if the the server and client do not agree in Endian (such as a BIG_ENDIAN client trying to play on an x86 Server). The savegame is saved in the native endian, so cannot be read by another endian machine.

- If there are game-start waiting players, using an exit or the exitlevel command, will cause them to join the game during the intermission.
  The Map command does not support this yet, and will issue a warning message if there are game-start waiting players. The server player needs to issue "exitlevel" to let the players join, then issue "Map".

### BUG FIXES 1.48.1

- Make the SDL sound interface use the samplerate from the sound effect header. Adjust the audio device number of samples for our new sample rate, like Eternity does. The added sounds in biowar now sound more reasonable. Fixes bug 0645.
- Fix usage of lumpnum in the flat animations. This likely was not visible to users. Added many additional sanity checks. Made proper release of animation structures, which may fix a memory leak.
- Fix segfaults on a 64 bit machine when playing phobiata.wad. The fault was an internal fragglescript variable copy that was being sign-extended. Fixed to do a full 64 bit copy on 64 bit machines, without any sign extend. Fixes bug 0647.
- Turn off the DEBUG in linux_x11 sound server.
- Change the video driver interfaces to faciliate changing the drawmode and rendermode from the menus. The video driver no longer handles command line parameters, such as highcolor and truecolor, and no longer makes decisions on its own. This is now handled in user interface code, and is more uniform for all ports and modes. A new cv_drawmode variable will save the drawmode in the config file.
- Added a missing call to setup VideoDraw, to prevent segfaults on early console display. Fixed the video drivers, Get Mode Name, to prevent buffer overrun.
- Changed the SDL video code to create a copy of the SDL video mode information. Calls to SDL_VideoModeOK were causing the previously returned SDL modelist to be released, causing error messages on the Mac. This should fix problems on the MAC SDL port (work by Adam Stylinski), and latent bugs on others.
- Fixed the lindef tag storage, to use a better hash, using less memory.
- Corrected the fog draw for 8 bit drawing of dark fog.
- Reviewed and optimized much of the software draw colormap handling. Fixed some latent problems, which may have fixed some bugs.
- Adding MBF DEH capability, broke the Chex Newmaps DEH. Fixed to bypass frame number translation and allow new states when the frame number is not recognized.
- Fix compile errors in DEBUGFILE conditional code. Based on code by Adam Stylinski. Fixes bug 0650.
- Remove the backscale array from the drawsegs and give it a dynamic allocation. It is now allocated at the actual video width. This reduces the memory usage, and will allow the MAXVIDWIDTH to be increased, as requested.
- Deathmatch setup issued a text command that was missing a switch "-", making the skill setting ignored. Fixes Support Request 0026: based on code by Leonardo Montenegro.
- The draw8 implementation of the additive_alpha draw was missing the add to the current screen value. This created a dark circle for the corona. Fixes bug 0652.
- On big-endian machines (Mac) some of the unsigned blockmap values were getting sign-extended. This and similar uses were changed to prevent accidental sign-extension of unsigned numbers. Fixes bug 0653.
- Compressed blockmaps, such as zennode sometime creates for a large map, would cause loading errors. The blockmap compression reuses an empty blocklist, and puts blockmap lists out-of-order. Example, strg.wad Map20. Blockmap overflow correction detects this now and no longer is dependent upon order assumptions. Fixes bug 0654.
- Simplify the key name descriptions that appear in the menu. "2nd mouse b 2" ==> "mouse2 b2" The description format is Device, button, action. Actions like double_click are appended on the end. This affects saved config file controller assignments, for mouse2. Will have to re-enter them.
- Fixed the double click detection code. Provides a double click control, to adjust the detection.
- Update to Network version 25, has different state messages. B_Random and E_Random are now synced in netgame.
- Fixed starry sky generation to handle wads with clouds in the sky. Fix sky wrap to handle sky where a horz row is all the same color (eventual segfault). Fixes BUG 0656.
- Hunt down some LE_SWAP16 that need to be unsigned for BIG_ENDIAN machines. Attempting to fix BUG 0633.
- Fixed a segfault that occurs for some operating systems that fail to return the progdir. Fixes Bug 0640, again.
- Most of network code has been reviewed, redesigned, and rewritten. Code that used hacks, had race-conditions, and other undesirable tricks and happen-stance, were rewritten to avoid those things. This was done over several network patches. Several new network packet types have been added to better support bots, new join capabilities, and support future plans. Existing packets have been redesigned to have explicit padding and alignment, so all machines get the same packet layout. Some 16 and 32 bit values are byte packed (using read and write functions), or specially aligned, avoiding read issues on some machines (which could not correctly read an unaligned 16 or 32 bit value).
- Revision of the bot create functions to make it compatible with using bots in network play. The bots are created on the server, and the creation information is passed to the clients, using the same mechanisms as players. This fixes the problems where bots would try to take the same player slot as an existing player.
- Network repair code has been extensivly improved, with reporting of detected differences during the repair. It is not that network repair is necessary, most networks do not have many errors anymore. But it is the only diagnostic tool that can tell us WHY the client is having consistency errors. This diagnostic code will be left in permantly.
- The netcode had some flags in the lower bits of angleturn. These add noise to the angle input, as they were not masked out again. Code option TICCMD_148, which is now enabled, adds a separate flag byte to the ticcmd, and removes all flag bits from angleturn.
- Eliminated problems with too many ticcmds and textcmds for one network packet. The new format can now handle 32 players, without errors. The Version 1.48 server tic packet format allows it to use multiple network packets to send all ticcmds and all textcmd for the selected tic range.
- Fixed the display of coop netgame stats, and the overlap of face pictures. The coop listings now show the player name and player color, similar to the deathmatch listings.
- Fixed NETVAR control var that could become inconsistent in the client. The deathmatch setup was not updating the itemrespawn in the client. Thus after the one player got an armor and it had respawned, a second player could get the respawned armor, but the client had not respawned any armor. When shot, the player died sooner in the client, which had bad side-effects. Changed the deathmatch setup of itemrespawn to be directly done in each client.

## 1.47.2 SVN1400 (2018-07-12)

### FEATURES 1.47.2

- Added Marine's Best Friend (MBF) wad capability to DoomLegacy. This includes Friends and Dogs. Objects can have TOUCHY (explodes when touched) and BOUNCES attributes. There are several new menu controls for new MBF monster behaviors. MBF capabilities are enabled by default for DoomLegacy playing modes, and disabled for older demos.
- Added the MBF door gradual light effect. This operates better than the previous off/on effect.
- Added the MBF telefrag which expands the determination of who can telefrag to include Bosses on any map.
- Added the MBF icy slide logic to player movement.
- Added the MBF dogs, functions, and sounds. MBF and PrBoom only have dogs for a single player. In DoomLegacy they also can be used in coop games, and will respawn. The respawn delay for dogs is fixed at 5 seconds.
- A monstergravity menu control has been added, to control if gravity affects monsters. Combined the DoomLegacy monster gravity control with the Boom and MBF effect controls. Some older code would have monsters instantly fall to the floor, while newer code has them fall under the influence of gravity.
- Added the Boom skymap control, as cv_invul_skymap. The Boom fix makes the sky appearance change with invulnerability.
- Added the Boom zerotags control, as cv_zerotags. This prevents many linedef from using a sector TAG that is 0.
- Monster fighting now has a monster no-infight setting, and the Normal setting enables infighting (as in Vanilla Doom).
- Added Heretic and Normal settings to monster friction so they can be more easily set up for a particular usage.
  Monster Friction:
  - None
  - MBF
  - Momentum
  - Heretic
  - Normal
- Added the Boom weapon recoil, as console variable cv_weapon_recoil.
- Added a third page to the command key settings menu, and moved some of the keys to the third menu. Added a settable command key for screenshot.
- Added a screenshot type console control to select compact, full, or PCX.
  - Compact
  - Full
  - PCX
  This does not appear in the options menus.
  PCX file type is only available with PC_DOS.
  The Targa file type is used otherwise for screenshots.
  The "compact" setting will save the screen in the closest format of the drawing (8 bit with colormap, 16 bit, or 24 bit).
  The "full" setting will convert to RGB 24 bit Targa format.
  Hardware drawing mode will save the screen in the Targa file format.
- Revised some of the monster sight functions to get better compatibility with Boom and MBF, and to take advantage of improvements.
- Added the MBF unstuck code, which gets monsters unstuck.
- Added the MBF dropoff code, which controls when monsters can go off dropoffs.
- Added MBF support functions, BEX code pointers, and dehacked flags support.
- Added the MBF A_KeepChasing code pointer, as defined by EnternityEngine.
- Added parm1 and parm2 support in DEH, as used by MBF.
  Param syntax is

        Unknown 1 = value
        Unknown 2 = value

  Added the [HELPER] section in BEX, as used in PrBoom, to define an alternative to the DOGS to be the player friend.
  Syntax is

        [HELPER]
        TYPE = 43

- Included some function (BEX code pointers) for heretic DEH, from EternityEngine. This does not include the functions that are unique to EternityEngine.
- Sprites can now have 16 rotation positions. This uses a naming system in use by EDGE2 (3DGE). The normal 8 positions still apply (1,2,3,4,5,6,7,8). It adds 8 more positions between the existing 8 rotation positions. The 16 positions are (1,9,2,A,3,B,4,C,5,D,6,E,7,F,8,G).
- Updated the savegame code to also save the new MBF fields. The old savegames are still readable too.
- Detect Hexen wads, to issue an appropriate hud message that DoomLegacy cannot support them, yet.
- Multiple clients, or a server and client, can use the same computer and internet stack now. Can now give the client some alternate sock port addresses and let the client search for one that is not in use. The server will use whatever sock port the client uses to connect.
- Improvements to the skin selection menu, for player1 and player2. Change the menu to use the skin name and not the skin indexes as the skin selection choice. The skins storage is now dynamic, with a maximum of 128 skins.
- Revised the menu system due to more menus and complicated menu paths. Changed from a static menu ordering, to a system with dynamic order. This fixes the problems with escaping a menu back to the wrong menu. Added more Boom and MBF menu controls, creating a new options page.
- Provide the ability to compile for a particular architecture. The ARCH option is added to the make_option files. It appears that the default is to compile for -march=generic32, which appears to be close to i486. Compiling for i686 can reduce the code size by 30K.

### BUG FIXES 1.47.2

- The gravity functions affect all players and monsters, but some old enemy logic immediately moved monsters to the floor. Added an enable and menu controls to block the enemy monster code from overriding the gravity. Fixes bug 0632.
- Fixed the screenshot for OpenGL and hi-res modes. Fixes bug 0637.
- Fixed where Heretic E1M8 was displaying a default gray flat for the lava floor. The LAVA flats in Heretic E1M8 are not a standard size (6150), they likely have an extra row (64x65). The previous flat logic could not classify their size. Changed the flat size classification to display odd flat sizes as the next smaller recognized size. This will almost always be 64x64. Note: The Heretic F_SKY1 flat has a size of 4, but it is never displayed. Fixes bug 0638.
- Return the correct IPX address value on FreeBSD. Supplied by Alexy Dokuchaev. Fixes bug 0639.
- A Heretic inventory item could be used up by a menu keypress. If the inventory item had been selected, then the menu entered, the same inventory keypress when used in the menu would leak into the inventory response and use up the item. Fixed the inventory response code to ignore keypresses during menu and console. Fixes bug 0641.
- Heretic E4M1 has a platform, using linedef 22 (raiseToNearestAndChange), that would retrigger. Boom code for the same linedef was releasing the thinker, allowing the platform to operate again. For gamemode heretic, made DoomLegacy use the heretic test, which does not remove the thinker for this linedef action. Fixes bug 0642.
- Reset the freelook when exiting the level, or spawning. Fixes bug 0643.
- Fixed problems when surround sound is enabled. It was only handled by Win32 port. The SDL port now supports surround sound. All the ports will now intercept the special separation value used to signal surround sound.
- Fixed fs sound segfault caused by bad origin.
- Fix some type conversion problems that affect big-endian machines. Mostly byte comparisions to -1, and automatic type conversion from unsigned to int.
- Rewrote much of the qmus2midi conversion to bring it up to date. Fixed comparisons that affect compilation on big-endian machines. Removed tests for -1 that were from testing for EOF, as the buffers do not have a terminator for EOF. Removed extraneous parameters from the qmus2midi conversion.
- Fixed the menu so that it no long segfaults on overly large skins (such as "war" from Skins.wad, which has 125 skins). Changed the way that the skin choices are updated to the network. Improved the skin setting functions to support this. Made the skins storage dynamic, with a maximum of 128 skins.
- Floating point optimizations regarding declarations and proper constant typing. Reduces code size, avoiding extra operations.
- Added the code for the PrBoom skull bounce fix.
- From PrBoom, no oof when dead.
- DoomLegacy uses model sectors, due to having more complicated special sectors, and 3d-floors. Fixed MBF logic for checking model sectors for hidden players and monsters.
- Fixed a damage function to allow player gibs again. Reported by Eckert. Moved the voodoo intercept of damage to be earlier so that the tests on armor and attributes are done on the voodoo redirected target.
- Fixed a bug from a prevous patch. In OpenGL, the corpse color was black due to a missed change in color translation.
- Added a test to exclude texture names that start with '#' (which are used for parameters) from error messages about textures not found.
- Stop savegames and netgames from changing the saved user config.
- Check search directories for cases where the default dir is the home directory, or if it contains "Desktop", "Pictures", or "Music" directories. If one of these is detected, the default dir will not be searched. This is to avoid long searches due to the depth of wad search, and to avoid searching the users home directory, or exposing it to wad loading searches.
- Updated the DoomLegacy network version to 24. Some changes make the new network code incompatible with previous versions. Added the PT_ACKS message type, which moves the codes of some of the existing message types. Reworked the textcmd record formats and code to fix suspected faults. Protections against malicious packets have been added.
- Made the alternate client sock port work.
- Fix the network XCMD so that when the network is not connected it will flush the XCMD buffer instead of generating an error message. The name, skin, and color of the player will be updated when they do connect.
- Added a network PT_STATE message, which updates the tick, P_Random index, and the pause. Added a broadcast function that the server may use to send a message to all connected players. The server will use this state broadcast to pause all players while a savegame download is performed, and will update the pause state for the new player. This allows a player to connect while the server game is paused, which before would trigger a consistency failure.
- Fixed the DEH state pointers so that the standard state values are translated to the DoomLegacy internal state indexes. This will allow Heretic DEH patches to work, and is necessary for the MBF DOG states to be found by DEH.
- Added respawnmonstertime and itemrespawntime to be saved in a DoomLegacy demo.
- Show temporary values of variables on the console. Depends upon CV_STRING, CV_VALUE, and EV values. This makes it possible to see both user settings and param settings. Bug 0136 has been fixed, at some point.
- Fixes uses of the Heretic const, ANGLE_1, which has a significant round-off error. Heretic used it to get a 10 degree spread of missiles, like ANGLE_1*10. Other uses of it have caused demo sync problems. This fix restores the vanilla calculations, and fixes a fragglescript usage of it.
- Changes that affect Vanilla demo playback. These changes provide some calculations that match the Vanilla code. This fixes some bugs when playing the older demos (even though they still de-sync eventually).
- Added enable support for some missing Boom effect controls, mostly important for playing Boom demos. These are internal enables controled by the demo, not user controls. The DoomLegacy default is to set these to enable the latest bug fixes.
  EN_boom_physics : Boom comp to enable boom physics selectively.
  EN_boom_floor: enables some fixes to limit movement of lift ceilings and floors.
  EN_blazing_double_sound : Boom comp to disable a fix that prevents blazing doors from generating two sounds.
  EN_doorlight : A Boom comp that also affects an MBF light effect.
  EN_catch_respawn_0: enables the fix for the (0,0) respawn bug.
  EN_invul_god: enables the fix to make god mode impervious to damage.
  EN_skull_bounce_floor : Boom skull bounce comp.
  EN_skull_limit: enables removing the skull limit
  EN_old_pain_spawn: disables a fix that prevented spawning skulls inside walls.
  EN_demotic_109: enables old demo tic format reading.
  EN_boom_longtic flag: enables reading boom demos with long tic values.
  EN_sleeping_sarg_bug: disables the fix of the sleeping sarg bug.
  EN_doom_movestep_bug: enables bug in vanilla move step that skips negative limit tests.
  EN_vile_revive_bug: enables buggy vanilla code for reviving monsters.
- Fixed reading boom demo headers and assigning default values to comp flags read from boom headers.
- Changed the method of running demos back to the original method, using a state flag. Trying to do it using a console command took more gametics to start the demo. It would run the vanilla demos with a wrong gametic value, and the gametic is used to determine some monster behavior.
- Many of the EN enables were messed up by demos, and were not being restored. Added calls to the Stop and Kill Demo code, that restores the gamemode EN default values. This fixes 2 errors, one where the user could not start a game after stopping a demo, and where an unrecognized demo code was received after stopping a demo.
- Fixed a demoversion test that was blocking autoaim during demo playback.
- Fixed P_XYMovement function to account for odd momentum in movement stepping. Added a demo compatibility test, and add old movement stepping logic in the loop, for old demos.
- Fixed the LookForPlayers function to loop through the players only once. The vanilla code would look twice due to a failed test.
- Fixed some sight logic when the two are in the same sector. The previous assumption was skipping some other tests in the function. Doing more full sight testing fixes some demo sync problems too. Added a compatibility test for old DoomLegacy demos.
- Adopted a demo tic accounting adaptation similar the PrBoom basetic. This fixes a revenant missile bug in some demos, by using (gametic - basetic) in the missile effects randomizer. In DoomLegacy, have implemented demo_comp_tic, which does the same thing by keeping a valid corrected tic, which does not run during menus and pauses. The demo_comp_tic is saved in demos, but is not saved in savegames.
- Fixed compilation errors, discovered by Adam Stylinski. This includes compiling with gcc and the clang compiler.
- Fixed some Win32 compile problems. Win32 uses WSAEADDRINUSE, instead of the Unix EADDRINUSE. MINGW32 does not have the strndup function, so had to imitate one.

## 1.46.3 SVN1301 (2017-02-19)

### FEATURES 1.46.3

- Fuzzy shadow draw control has been added to the effects menu. The translucent draw control has been expanded.

### BUG FIXES 1.46.3

- Fix the setup of the message box position for non-menu message boxes. Fix message box text positioning so that it is in the message box for video modes other than 800x600.
- Video modes switches could cause segfault if a video print triggered console output. This was occuring in the linux_x xshm port when verbose was enabled. Changes to the video status indication were made to prevent print statements in the video mode switch from causing a console update. Some previous video print outputs are restored.
- CDROM music has not worked in Linux. It has problems in SDL, even in windows. The plan was to disable it, as SDL 2 does not support CDROM music. However, after some effort, it has been made to work again in Linux X11 and SDL.
  This is likely the last version that will have CDROM music support. Checking the CDROM status, in Linux, is a blocking IO call that stops all action in the game for 1/4 second, which is very noticable.
- The Doom shotgun and other player weapons were drawn with a visible scanline below them. Moved the weapon down to the lower edge for Doom (but not Heretic). Fixes bug 0455.
- Fixed controls for smoke, shadow, and translucent, which were interacting and confused. Improved the implementation. Fixes bug 0631.
- Fixed the -connect command line switch detection, which was triggering an error message due to a redundant setting of netgame. Fixes bug 0634.
- Eliminate an extraneous error message about autoexec.cfg. Check that it exists before trying to exec it.

## 1.46.2 SVN1287 (2016-12-18)

### FEATURES 1.46.2

- To improve the situation with players being kicked due to consistency errors, network repair messages have been added. This makes 1.46.2 network incompatible with previous versions of DoomLegacy. Because 1.46.1 had a serious bug and should not be used, this should not cause many compatibility problems. The server now keeps a consistency error count for each node. Upon detecting a consistency error with a node, the server will try a series of escalating repair attempts before it kicks the node out of the game.
  - Server sends the player current position, momentum, the random number index, and the current tick.
  - At 3 consistency errors, the server suggests a savegame. The client requests a savegame download from the server, and then a position update. The client screen will briefly go black duing the download.
  - When consistency errors exceed 7, the server kicks the player node.
  - When a node is consistent, the server counts down the consistency error count.
- A network download displays the file download activity in a box with speed and file size. This replaced some of the existing hud messages, and others were updated to be more helpful and informative.

### BUG FIXES 1.46.2

- Fix the savegame corruption introduced by an interface change in 1.46.1. During a savegame write, the netvars were overwritten in the buffer. A savegame read would notice the netvars were missing and issued a savegame corruption message.
- A network game would display different textures when it downloaded the wad file, than if it loaded the wad file from the command line. Any texture or patch change by the loaded file would affect textures, so it now clears the cache and rebuilds all textures.
- Fixed the download display screen to have a background draw so the background does not flicker due to hardware double buffer swaps.
- Fix a Heretic status bar draw that was drawing outside the screen buffer.
- Rewrite of the X11 version sound server code, and the internal sound driver. Added some functionality and cleaned up the unused code. Separated the code for the 3 sound driver alternatives.

## 1.46.1 SVN1276 (2016-10-08)

### FEATURES 1.46.1

- There is a new docs file, doc/INSTALL.html, that just deals with installing DoomLegacy.
- Network behavior has been updated and is greatly improved. The discovery of DoomLegacy server nodes has been improved. Network startup has been changed to handle early and late game joiners much better.
- The Network play interface has been improved. The number of players and timeout can be selected by the server DoomLegacy, from the menus. The waiting display gives the number of players, and a timeout counter.
- There are now three server addresses (server1, server2, server3) that will be checked. They can hold a server IP address such as "192.168.1.1", or a network broadcast address such as "192.168.1.255". For a home network, addresses should be 192.168.nn.xx, where all your computers have the same nn, but different xx (nn=1..254, xx=1..254). Do not use addresses such as 255.255.nn.xx as those do not work.
- Better network error reporting.
- Network file download is now protected at the server so that DoomLegacy cannot be used to snoop on your computer. It will transfer wad files found by the server DoomLegacy in the legacy wad directories, and only if they have .wad, .deh, or .bex filename extensions. Complex filenames (using ../ to back out of a directory, having ':', or '\' or '/') and absolute filenames are explicitly blocked by the server as a SECURITY issue. The previous search of 10 directories deep was a security risk, and has been replaced with a new search system.
- DoomLegacy will now search through upto 24 specific directories to find legacy.wad, the IWAD, PWAD, DEH, and BEX files. On failure, (or -v2 verbose), DoomLegacy will print out the directories searched, as an aid to the player to setup the game. For legacy.wad, the environment variable LEGACYWADDIR specifies the first directory in the search list. The environment variable DOOMWADDIR specifies the first directory in the search list for the other files. The search directories include absolute and HOME relative directories, (the HOME environment variable needs to be set). Most search directories, which are fixed at compile-time, are specified in doomdef.h, according to the operating system. There are some spare slots for users who wish to compile DoomLegacy with some additional search directories.
- DoomLegacy will also search sub-directories. The IWAD search will go 5 directories deep. The game file search will go 3 directories deep.
- The console map command now does a file search like the command line. The command line has more privileges, the map command is more restricted. The map command, as a network command, is restricted to ".DEH", ".BEX", and ".WAD" files, and within public doomwaddir directories. Now it searches the doomwaddir list, to 4 subdirectories deep.
- Many fatal error exits have been changed to soft error messages, leaving the player in the game with a chance to save the game. Many of the situations are transient problems that would resolve themselves when the player leaves the affected map area. This most strongly affects wad development, buggy wads, and wads not meant for DoomLegacy.
- Many debugging and information messages are suppressed during normal startup. Command line switches "-devgame", "-devparm", "-v", and "-v2" will enable many more informative and warning messages (to stderr). A readable listing of DEH text replacement is presented when selecting devparm or verbose, ( -devparm -v ).
- The ticrate display control is now in the video menu. The ticrate display now has a numeric FPS display, in addition to the graphical display.
- There is now a menu control with 3 darkness settings of the background and console. The dark setting darkens the background so the menu are easier to read against the background. It also darkens the console background to make console text easier to read.
- There are now menu entries to control the console font size and the message font size. The console and hud text now draw proportional fonts.
- OpenGL drawing got improved. There is an now a menu option that controls how odd shaped polygons that sometime occur are handled. The display anomolies will vary with the selection. If you do not understand this, just leave it at Trim.
  Polygon shape option selection. The default is Trim.
  - Subsector: Disables cutting with segs.
  - Fat : Ignores any seg that does not cross the subsector polygon entirely.
  - Trim: Chains together the segs, and applies those chains that cross the subsector polygon. It might create a non-convex polygon, so a check removes the center vertex where sides meet at an interior angle greater than 180 degrees.
  - NonConvex : Leaves the non-convex polygons. My nVidia supplied OpenGL library seems to tolerate the non-convex polygons. Others may fail.
- The show messages option has been expanded to (Off, minimal, play, verbose, diag, dev). This control now affects all messages displayed during play. If the player sets it to minimal, they will not get messages for minor object pickups like ammo, but will get messages for important things, like the BFG.
- Improved the handling when drawing an excessive numbers of sprites. The closest sprites are always drawn. The farther sprites depend upon the distance from the viewer and priority. The priority takes into consideration the object height, and if it is a corpse, missile, or monster.
- There are now alternatives to the palette flash when picking up ammo The pickup palette flash is similar to that used when the player is hit.
  Pickup Flash menu control.
  - off : no flash
  - status : parts of the status bar flash color
  - half : the palette flash is half intensity
  - vanilla : the Vanilla Doom palette flash
  The status bar pickup flash applies to the status bar and overlay status. The appropriate box is flashed with a color. Heretic is also affected, but uses different flash colors.
- Added autorepeat to the console scrolling page-up and page-down keys.

### BUG FIXES 1.46.1

- Fixed BossDeath detection failure so special linedefs now trigger. Solid Corpse health is now (0 .. -spawnhealth). Upon reaching -spawnhealth the corpse is Killed, becoming gibs. Fixed the solid corpse health when restoring old savegames.
- Fixed the Chex newmaps fireflies, as far as I know. Rewrote parts of fragglescript corona function to fix Chex newmaps bugs. Rewrote the String_to_RGBA func to handle any length hex value string.
  Chex newmaps does not turn on the corona type flags for the fireflies. To make the fireflies work, the code now turns on the corona automatically if it is 0 when a write to the corona color is made. The code for Doomu has the tall-torch corona turned on, but the Chex1 patch turns it off.
- Catch some BEX comments so they do not cause error messages. Fixes messages in toxdm1.wad.
- The wad 2002ado.wad has many sidedef with bad sector numbers, but they are also unused. They were left by the editor. Fixed the error reporting to ignore those with sector number = 65535 unless verbose is ON. Also to report if any line is using the sidedef.
- Network ack bug fix, and cleanup of the ack code.
- Network chat fixed so that player 0, team 0, and broadcast to all players are no longer confused. This changes the chat protocol (DoomLegacy 1.46) and is incompatible with any previous version of DoomLegacy. Display of the chat message now works for splitscreen.
- Network errors are now caught so they do not crash the program.
- Network packets now have standardized stdint field sizes, so that 64bit and 32bit machines have a chance of playing together.
- Master server pinging has been fixed to not use a player node. This now allows all 32 players when using the Master server. This new behavior is a compile conditional that is enabled by default in the source code.
- Block demos from starting up when the console is open.
- Fixed some problems with compiling in Windows systems using MinGW. Works around some nasty command problems that occur if MSYS is present. Needs to use mingw32-make as the MSYS make still fails to compile some files, due to the search paths of include files.
- Fixed errors due to not finding the legacy.wad file. AddFile will no longer segfault when a filename is NULL.
- Gave the CV_Possible_t system an INC option. This is used to increment the wait time in 5 second increments.
- Wadtool has been missing from the legacy 1.45 build. Copied and revised the wadtool from legacy2. Added a directory switch to wadtool, to make it much easier to use in a Makefile. Added reading a lump by file name or lump name, so that an extracted wad can be rebuilt without having to change file names of the lumps.
- Windows and DOS do not have sed, which is used to add the "obj/" directory to the dep file entries. The new tool, fixdep, will do the same operation, making the dep files work on Windows and DOS.
- Heavily rewrote all Makefiles to reduce user errors and miss-information. To compile, the user first selects one of the make_options sample files, copies it and modifies it to suit. The syntax of make_options has changed, so previous versions will not be fully compatible. Now uses OS= for operating systems. Now uses CC_SELECT= for compiler select. The src Makefile still has the capability of being run directly, but other sub-Makefiles must be run from the Main Makefile, as they use exported vars.
- There is now a port independent video status, which also serves during shutdown to prevent quit looping on errors. When legacy.wad was not found, a quit loop was triggered due to more errors on shutdown. Shutdown is now handled by D_Quit_Save, which has complete sequencing of the shutdown, even with multiple errors retriggering the Quit.
- The Heretic status bar has a darkening of the chain on the ends (shadow). This code was 8 bit palette draw only, which left draw artifacts for other draw modes. This draw has been updated to correctly draw shading for the other draw modes too.
- The inline keyword is causing some problems with some compilers. Remove it and let compiler do any inlines it can.
- DoomLegacy identifies the flat picture to enable splash sounds. Fixed sector changes to also change the splash sound when the sector flat picture changes.
- Make the deh_error function show DEH errors for any of devgame, devparm, or v (verbose) switches.
- Fixed DEH text replacement that failed when the name string was 6 chars long.
- Checking of the devgame switch was hiding the value of the devparm switch. Fixed so they use independent vars, but devgame will set devparm.
- Initialize team names to NULL upon creation. Fixes segfault in set_team_name, when setting teamplay from console.
- Give hexen unsupported error message on -game switch.
- Fix map command level setup to set the gameepisode and gamemap correctly. This also caused the wrong music to be played and the wrong level setups to be used.
  This would also lead to corrupted savegames, saving the wrong map number in some situations. Later, during savegame loading, it would use the wrong map to size the level structures, which would lead to the save game restoring some structure changes outside of the structure boundaries (overwriting something else). Have also added some checks to the savegame restore to detect sector or linedef numbers that exceed the established structures. This will detect some existing savegames as corrupted. They could be fixed by correcting the map number in the savegame.
- Make fogcolor default assign work for any endian.
- Made BOB_MOM code a standard feature, removed compile tests.
  Made VOODOO_DOLL code a standard feature, removed compile tests.
  Made GAMMA_FUNCS code a standard feature, removed compile tests.
- Rename gamma_bright_black choice to be gamma_full, so it fits in the menu. Make it the default choice, which will minimize problems with existing config files.
- Fixed where the topoffset and leftoffset were calculated wrong for patch draws when SCALEPATCH, but not SCALESTART. This did not happen in vanilla code, but occurs in new applications of scaling, such as font size.
- Fix bug #0620. In asm, Clang does not accept "%cc", as it is not a register. Gcc used to accept "%cc", and probably still does. In the asm clobbered section, cc and memory should not use %.
- Fixed some OpenGL polygon errors in wads such as BOOMEDIT.WAD, and phobiata.wad.
  Rewrote of hardware draw polygon creation. This uses a new structure with vertex pointers that makes it much easier to maintain common vertexes. The final polygons are converted to the current polygon structure so the drawing code is not affected.
  The BSP walk procedure gives a subsector convex polygon, and a list of segs. Cutting the subsector polygon with the segs introduces errors, and the result might not be convex.
- Applied some hardware draw crack remedies. Check the cross product, so an added vertex does not make the crack worse. Fixed a bug when a seg-chain cut only cuts one side of the polygon.
- Fixed one of the missing sector draws for a sign in BOOMEDIT.WAD.
  The bsp in the wad file has errors. One error is that sometimes it has the wrong sector number for a subsector. This results in drawing the wrong sector. Added code to try to dectect some of these. Created a routine to find the correct sector by finding the closest facing linedef to a point within the subsector.
- Fixed the hardware render sky drawing to block walls and flats drawn inside buildings. Sky sectors are supposed to draw sky over the walls, which blocks the view of any taller sectors behind the wall.
- The polytile remedy, to prevent polygon cracks.
  It enters the same vertex in adjacent poly when splitting a poly at an angle that may cause crack errors. This should prevent cracks before they start. In the existing routines, it is hard to find these poly points after other poly splitting has taken place. It was going to get very complex to fix it. This can eventually replace that search. There is some conflict with some existing crack repair routines, so it is made optional. It does not seem to do harm, but its effect is not yet obvious.
  A control, gr_polytile, can turn it off and on.
- Rewrote the spawning code so it can handle more multiple players than spawning spots, and provide better network join spawning.
  The Coop spawning now tries to spawn at 255 locations around the spawn spot, to handle collisions, and to allow more players than spawn spots. Deathmatch spawn will also try Coop spawning if it needs to. Coop spawn will try Deathmatch spawn locations (last) if it needs to.
- Removed old optional draw code, (DRAW_UNSORTED) and (DRAW_CHOICE) in the hardware renderer. The new code (DRAW_SORTED) of w89_draw_sorted is used, which sorts transparent walls and sprites.
- When a water surface is close to eye level, the water plane is not drawn completely. This was showing HOM or sky. Moved the clip plane closer to the player. Detects when the player has water surface near eye level and draws both above and below the water until eye level is cleanly above or below the water level. When the eye level is exactly level with the water surface the player can see both above and below the water. There are still some sky flashing for OpenGL, but it is due to something else.
- Changed the net wait to count players instead of nodes. This allows machines with split screen players to be handled cleanly. Playing with only split players will now start cleanly without having to fiddle the wait parameters.
- Fix the start server so it also works for Heretic and UltDoom. The start server menu now changes to give selection of the episode style of map naming when appropriate.
- Fixed the skins setting when a player becomes a chicken, so the other players can see a chicken. Otherwise the skins setting overrides the chicken sprite. Restore the skin upon un-chicken-ing. If the player dies while a chicken, they leave a chicken corpse.
- Rewrote all of the status bar, overlay status, and status palette flash routines, so they work cleanly with splitscreen. For all draw modes except 8bit palette draw, each split screen can now palette flash individually.
  Splitscreen only can use overlay status, as the status bar saves state to speed up drawing, and it only saves for the one player.
- Fixed a lumpnum field that was made too small. Error showed up with phobiata.wad, or probably any wad with animated flats.
- Fixed the font1 output so that spaces appear in the printed line.
- Moved the spawn fog to be over the spawned monster and spawned object.
- Restructured the sound priority system, and sound effect parameters.
  Fixed Heretic sounds. The channels were saturated with copies of the same sound, which was a faint low priority sound.
  Heretic uses ascending priority, while Doom and the code used descending priority. The Heretic priority system is more capable, and Heretic handles more types of sound, so switched everything to using signed ascending priorities.
  The priority is also altered for distance, so faint sounds can get replaced.
  Made the Doom sound priorities get used, instead of mostly ignored. Dehacked changes to info for Doom and Heretic should function as before.
  Added Heretic limit channels capability. This limits how many channels can have the same sfx. It checks this limit when trying to get a channel.
- Fixed problems caused by use of gcc 4.8. The SDL defined, as set by "-DSDL", is not recognized by the command line of gcc 4.8, for reasons unknown. This define has been changed to SMIF_SDL, which does work. The other SMIF determined defines were also changed from using VID_ to: SMIF_WIN_NATIVE, SMIF_OS2_NATIVE, SMIF_X11, SMIF_X11_GGI, SMIF_PC_DOS. This makes this more obvious that this is a user selected option (SMIF), and not a detection of the OS.
  Gcc 4.8 detects variables that are set but not used, and issues many warning messages. Many of these are left over from the original Doom source code. Have hunted each down and fixed each, by deleting the dangling variable, commenting it out, or in one case making use of it.
- Concerning compiling and running on a Win32 XP machine.
  On a computer with MSYS installed, it has caused some strange problems. MSYS provides a HOME environment variable for its own use. The code now detects when HOME is from MSYS and ignores it so it can get to the XP home directory.
  The MSYS shell intecepts commands from the Makefile. The MSYS shell will not execute DOS commands, nor pass them to the DOS command processor, so MSYS commands and MSYS legal directory specifications have to be substituted everywhere.
- Systems that do not have ftw.h have to use dirent.h, and that code was not finished. Have finished it, along with stat code to identify directories for systems that do not have dirent D_TYPE either.
- Fixed palette problems on Windows/Intel systems.
  A gamma function that was performing (0.0/0.0) was putting a 0 in the gammatable when run on Windows/Intel, but not on my Linux/Athlon. There was an informal report about such a gamma problem some time ago, but it did not occur on my Linux/Athlon development system. Extensive testing on a Windows/Intel system confirmed the cause.
- When a cv var set value exceeds the bounds, the code attempts to rewrite the value string. The string could be a const string such as during init, which segfaults on modern systems like Linux. Fixed the code to write a buffer instead.
- Fixed segfaults caused by flatfill draw writing out-of-buffer. Added a fill scale so that Doom background flats can be scaled down. This makes it easier to read menu and message text, such as the Quit box.
- Fix bug 0626, submitted by Ryan. Change memcpy to memmove in command.c because it overlaps dest. Reported that it was causing segfaults.
- Fixed some problems with clean and distclean in the Linux port Makefiles.
- Rewrote of most of the musserver for linux_x. Now it has music again. The IPC message formats in this musserver have been customized for DoomLegacy. The musserver no longer searches the doom wad. It is sent the exact wad file and lump to read using IPC messages. The sound device to use can be changed using a menu option. The preferred sound device is sent to the musserver using an IPC command. This allows the sound device setup to be performed while there is some music playing. Added FluidSynth to the device selection.
  Fixed many problems with the musserver code.
  Added code to throttle the Midi commands, so it does not get so far ahead in the song. There is no way to shut off the music that has already been sent to the Midi device, or TiMidity. Added code to kill drone notes (that did not get shut off). In spite of redundant attempts to shut them off, sometimes the current notes of a song will still drone on until the song loops.
- Changed the state setting of removed mobj, so that dereferencing the mobj state will not segfault. A segfault was occuring during testing, so in some special cases the removed mobj might still be referenced.
- Heretic wads can use the SWITCHES lump. They no longer need to have the episode=4.
- Add handling of TCP connection reset and connection aborted errors that were transient errors with WinXP.
- Add DEBUG_MESSAGE_ON to doomdef.h, which enables debug_Printf messages to be shown without needing verbose. Only used in development compiles.
- Converted some run-time I_Error, to I_SoftError with a recovery fix. This allows the player to save the game, or to see the effects of a wad development error. When a sprite does not have all the rotations present, it will no longer I_Error, but will substitute another sprite frame for the missing one, with an error message.
- Changed to use stdint types in the network tic packet, to standardize the tic packet for both 32 bit and 64 bit machines.
- Hardened the network XCmd code against malicious packets.
  Bumped the network version number to 22. The differences in the packet are slight, but this is done mostly to eliminate the older code from usage for security reasons.
- The DoomLegacy coding standard has space indenting only. The extraneous tab indenting is being systematically removed as files are edited.

## 1.45.2 SVN1139 (2014-09-14)

### FEATURES 1.45.2

- Pausing, or opening a menu, will now release the mouse containment so that other windows can be visited. This allows dealing with network, and firewall boxes that may appear.

### BUG FIXES 1.45.2

- The Makefile dependency was including files that were not part of the compile for the selected port and options. This would lead to errors. Making of dependency has been sub-divided into smaller sets, which only include files appropriate for the selected port.
- The Makefile has been improved to allow environment CC, explict CC, and use of the clang compiler. It also allows using it from outside the src directory, or for program development where is invoked on the current directory from scripts.
- Chexquest Newmaps specific fixes. Fix segfault when drawing black bars and crosshairs in software rendering. These graphics were meant for OpenGL where they would be stretched.
- When more than two commands were entered in one tic, such as in loadlevel setting of keys that execute fragglescript, often the third command would fail. A latent bug in the command append function was making multiple commands erratic. After two appends, garbage characters would be left between commands due to extra buffer length that affected the append positioning. All the special keys in Chexquest Newmaps now work reliably.

## 1.45.1 SVN1133 (2014-08-29)

### FEATURES 1.45.1

- When a file does not load, Doom Legacy will now default to fail with an error message, like many other ports. This will invoke the Launcher. The -noloadfail switch causes it to ignore load errors as in previous versions of Doom Legacy.

### BUG FIXES 1.45.1

- Allow Version 1.44 savegames to be read. The format of Version 1.44 savegames is the same as in 1.45 and will be compatible in many future versions.
- Allow DEH modified monsters to use Keen_death to trigger a boss death and trigger the tag=666 sectors.
- Allow DEH infight settings to override the Monster Behavior menu control. This makes the control similar to controls in other ports. Separate "Force Coop" and "Force Infight" settings are added to the control to allow the user to override DEH infight settings when they want.
- Restore the -nomonsters switch that got lost in the w95_startscreen patch. Had intended to move it and lost it entirely instead. There is no equivalent menu control.
- Prevent using a NULL ptr, when restoring a savegame that has a flying cube. The savegame does not handle saving a braintarget as a mobj. The SpawnFly will get the previous braintarget when the target is NULL.
- Fix things collision check to ignore things on other 3dfloors. The allows monsters placed on upper and lower floors to not get stuck to each other. Also make the things collision check not block for NOCLIP and not SOLID, same as in prboom and compatible with boom demo.
- Flush messages so they appear sooner with Linux.
- Straighten out some positioning in the opengl menu options, and gamma.
- Fix the OpenGL rendering of the transparent doors in TNT Map21. They need to be rendered full height when the middle texture is transparent and the door is closed.
- Check for 3dfloors in monster sight line checks. This will prevent monsters from trying to shoot the player through 3dfloors.
- They grey background text box has been positioned and sized wrong when using font1, as in the launcher menu, and the quit message from it. Have corrected it in the few places where the font1 and the grey box have unique code.
- For big endian machines, fix two missing include of m_swap.h in two source files.

## 1.45 SVN1107 (2014-5-2)

### FEATURES 1.45

- 1.45 is the Beta release version of the 1.44 alphas. The new features have already been mentioned in the 1.44 alpha FEATURES below.

### BUG FIXES 1.45

- Linux_X port will compile code that does not fail. Removed references to verbose variable that the dll version of some code could not access at run time.
- Savegame menus will now remember the page and position of the last usage. They no longer wrap to the top of menu.
- Large maps like Europe.wad would have rendering errors due to the poor resolution of one of the angle functions. The resolution has been much improved, with fewer rendering errors.
- Use of a PrBoom fix, using the atan2 function for really long distances, has fixed more of the large map rendering errors.
- Changed the heretic chicken code to use a common Morph function that does not create orphan objects. This also fixes the chicken attack from creating a bogus player sprite on top of its opponent.
- Using quicksave several times would freeze the menu system due to quicksave writting some status outside of an array. Fixed the quicksave status to be written in the correct location.
- The Legacy demo wad would segfault because a patch and colormap have the same name. Attempting to interpret a colormap as a patch lead to wild memory reads. Added checks for bad patches where post offsets exceed the patch size. This allows the Legacy demo wad to be played.
- Implemented lump namespace tracking. Patch name search is now within the patch namespace first. If the patch is not found in the patch namespace, then the first lump of that name in any namespace will be used, because of wads that do not use the namespaces. This fixes the Legacy demo wad problems with a colormap and patch of the same name.
- When level without any monsters finished, there was a chance of a divide by zero fault when calculating the stats. Tests that protect against divide by zero have been expanded to all the stat divides, now showing that there were no monsters.

## 1.44 SVN1088 (2014-02-03)

### FEATURES 1.44 alpha5

- Revised the corona drawing to use sorted draw, with some menu options.
  Corona options are:

        OFF
        SPRITE (drawn with the sprite)
        DYN (drawn from dynamic lights)
        AUTO (decided by draw modes)

  The SPRITE draw works the best with transparent walls, as it draws the corona at the time the sprite is drawn. This works well with sorted draw. The DYN corona draw (dynamic lights) does not draw corona behind translucent walls.
- Makefile compilation system with an external control file (make_options) to hold option selections, so do not need to edit Makefile for most port and option situations.
- Change preferred directory name for savegames to ".doomlegacy" ( "doomlegacy" for win/dos ). Will also check for existing ".legacy" (legacy) directory. When not found, will create ".doomlegacy".
- Remove limits on flats, with automatic increases to the array.
- The splash screen, finale, and menu screens are now centered in the monitor window.
- Add a -screendeg command line option, which is a generalization of -left and -right.
- The quoted button names (with spaces) in a quoted string are hard to read, and error prone. They can now be named using underlines in place of the spaces. Such names do not need to be quoted.
  Example: alias ps0 "playersprites 0; bind mouse_3 ps1"
- When there are no secrets, no possible kills, or no items on a level, then draw a dash (minus) instead of 0%.
- New menu sounds that are much less harsh than the pistol shot have been added to legacy.wad. A menu selection allows selects automatic or a specific sound set.
- An error message screen now appears sooner, with more of the important error messages.
- A Launcher is built into DoomLegacy. It is activated when the IWAD cannot be loaded, legacy.wad cannot be found, or if there are no switches on the command line.
- To handle when monsters get stuck on a door frame, there is a new doorstuck control to select either the MBF, or the Boom method of altering their movement to get them loose again.

### BUG FIXES 1.44 alpha5

- Fixed a bug in hardware rendering caused by a previous patch, triggered when an imp shoots a fireball.
- A single patch texture, with an offset, was generating the wrong texture. These are detected and directed to multiple patch texture combine instead, which can handle this. Also directs large patches to there to avoid multiple copies of the same large patch.
- Increased savegame buffer freespace to 64K to handle the large number of thinkers in hth2.wad (which needed 12K).
- Load the translucent tables for RGB modes too.
- Fix drawing of DeepWater, for several situations in ic2005.wad where textures are drawn pegged to mobile deepwater sectors.
  - A translucent over a deepwater door.
  - A transparent texture (electric arc) under a deepwater ceiling.
  - A thin texture used for grid flooring, with deepwater ceiling to move it.
  The two sided middle textures are now pegged to the original ceiling, not to the deepwater sector.
- Restore the palette after the Heretic E2M8 ending pic is shown.
- Fix sound effects to cut off sounds such as the chainsaw. Finer control of stopping sound effects is provided.
- Fix sound effect free memory that would cause Z_Free errors, such as with the ambiant sound in phobiata.wad.
- Fix Boom DeepWater colormap error for hardware renderer.
- Hardware drawn sprites would be occluded by transparent walls behind them. Fixed hardware draw function to draw sprites and walls together in depth order, with a menu option to examine the differences. Draw Menu options:

        EARLY  (draw before sprites, oldest code)
        LATE   (draw after sprites, previous code)
        SORTED (draw sorted with sprites)

  The EARLY draw works for transparent, but not translucent. The LATE draw has distant transparent walls drawn over nearby sprites. The SORTED draw has sprites drawn correctly for transparent and translucent walls. Later this menu item may be removed, with only draw sorted remaining.
- Makefile fixes for compilation of options, directory creation, dependency files, and linking. Fixes for compiling with MinGW and WIN32.
- Remove old references to malloc.h, except when using WATCOM.
- Fixed asm code to be compatible with current drawing code.
- Applied patches from Alexey Dokuchaev to fix FreeBSD issues.
- Fixed free memory printout which was always printing "Free 0".
- Fix bug in translucent draw of sprite for 8bit screens. This affects phobia.wad fires, where they would get random alpha.
- Remove uses of alloca, replacing them with calloc, and explicitly freeing the allocations. Alloca is a problem with compatibility.
- Restore previous t_runscript and t_running commands so older wads that used them can bind them to keys. Chex newmaps scope works again.
- Create and Free Extra_Mapthing, used for FraggleScript created mobj that can respawn or can Nightmare respawn. Savegame now saves Extra_Mapthing as an optional section. Fixed bad indexes in the savegames caused by FraggleScript spawned items. Will still load old save games.
- Nightmare respawn modified to fix several bugs. Added better fix for nightmare respawn at (0,0) as used in prboom and eternity.
- WIN32, MAC, OS2, and other port code updated to interfaces used by SDL port. Updated keycodes used by other ports to the interface used by the SDL port.
- Fixed WIN32 to use newer joystick interfaces.
- Fixed WIN32 WIN_NATIVE code to compile and run again with native and directdraw interfaces. Not well tested, and not tested with latest Windows versions.
- Opengl would display HOM in some particular instances. Changing the save vertex test to an inequality cured the HOM.
- Fragglescript movecamera has only 6 param, but phobiata.wad has a call with 7 param, and the game would freeze at that point. Fixed movecamera to more gracefully ignore the extra parameter, while printing a warning message.
- Ticrate graph made consistent over all ports.
- Hardware draw of Boom 160 tagged translucent fixed.
- Fixed handling of escaped quotes within quotes in bind button command in script.
- Fix updates of player viewheight to provide a slow rise and fall for changes to the cv_viewheight.
- Disable menu movement from the mouse for a short interval (about 4 seconds) after each key press. After the interval the mouse can be used to move in the menus again. Does not affect mouse clicks. This stops accidental mouse input from moving the menu ptr.
- Check for a sound lump using plain name too, to find the amb sounds in hth2.wad, which were defaulting to pistol. Playing hth2.wad has the ambiance sounds now.
- Fixed crash due to using a lump for more than one sfx, by using a copy.
- Fix AddSound to only remove a sound when sfx is full, and to use a usefulness test.
- Improved the software draw sprite ordering on 3d floors, where the sprite would be drawn under the floor. It does not cure a similar problem with railings, which are higher than dead sprites.
- Fix the demo playback so it will play our own 144 DL format correctly.
- Added A_Random number generator for ambience, and B_Random for Bots, to reduce chance of interference with P_Random and demo playback.
- Infight and monbehavior vars organized and included in demo playback consideration.
- Boom demo playback improved, removed a segfault condition and some incompatibilities. Added Boom stuckdoor code for demo playback. Still does not sync for very long.
- Boom Midi music lumps will now play when using older SDL library option.
- A central message function now consistently handles all messages, routing them to console, log file, and stderr text as directed by EMSG flags. Error, debug, verbose, and other special messges, use this facility.
- Search LEGACYWADDIR, default dir, and doomwaddir for legacy.wad.
- Linux-X11 Opengl library loading is fixed. It previously would fail loading and leave the user in software render mode.
- Opengl transparent walls and fences were being culled when a left side wall also projected behind the player. The test limit has been increased to -2000.0 to reduce this problem, which should be adequate for walls less than 1000 long.
- Hardware draw polygon vertexes are handled more cleanly. Some panels that were missed in polygon generation, are now drawn.
- Fix draw of hardware renderer Loading percentage box, by setting up draw options properly.
- Fix several fading and texture problems in Win SDL port.
- Fix SoftError duplicate printing to stderr.

### FEATURES 1.44 alpha4

- BEX files supported, with BEX flags, [STRINGS], [POINTER], [PARS], and include file.
- DEH and BEX names are now compared case insensitive.
- Support for multiple DEH and BEX files changing same items.
- Support for separate language BEX files as BEX_LANGUAGE compile option. An example french.bex is supplied, which can be modified for other languages. A command line switch will accept any language name and load that BEX file, or a default "lang.bex" file. Many error lines are not yet changable from english.
- DEH support now has a hashed lookup of the original strings, so it recognizes strings that were changed by DoomLegacy (DOS -> your os), or changed by a previous DEH file. This is also used by to recognize ult doom strings after the chex modifications have changed all the strings. Strings changed from two "%s" to one "%s", can now be handled, and DEH can change them again.
- PAR time not displayed when not valid. Limited SUCKS display, so can see 24 hour of elapsed time for most wads.
- Added verbose switchs as -v and -v2. Most of the print lines they control output to stderr. Verbose prints out the file strings for doomwaddir, home, config, and save files.
- The doomwaddir determination now looks for, DOOMWADDIR environment variable, a default wad directory and an alternate wad directory. When none exist it looks for the wads in the current directory.
  (Linux: /usr/local/share/games/doomwads or /usr/local/games/doomwads)
  (Windows: \doomwads or \games\doomwads).
- The home directory determination now looks for, HOME environment variable, or a default home directory. When none exist it uses the current directory for home.
  (Linux: /usr/local/home/legacyhome)
  (Windows: \legacyhome).
- Draw directly in 15, 16, 24, 32 bpp modes. Command line switches for bpp draw modes.
  - Switch "-highcolor" requests a 15 or 16 bpp draw mode.
  - Switch "-truecolor" requests a 24 or 32 bpp draw mode.
  - Switch "-native" requests the native drawing mode.
  - Switch "-bpp 15" requests a specific bpp mode (can be 8, 15, 16, 24, or 32).
- Extensive video reporting using verbose switches "-v" and "-v2".
- Improved fog sheets with color, shimmer and ripple. Mid texture determines the color of the fog, and the intensity of the shifting pattern. Fog is not finished.
- Effect menu has selections for Boom Deepwater colormap effect: Sector colormap (Boom colormap behaves same as Legacy colormaps), Boom visible colormap (where colormap is visible like in legacy), Boom colormap (where the colormap is not visible like in Boom), and Boom detect (which adjusts according to detected Boom and Legacy linedefs). The Boom colormap selections make the Boom deep water sectors appear normal until walked into, then the deepwater colormap will have global effect.
- CD-music is now makefile compile option. When disabled, all CD code is removed, including cd-volume controls. This allows compiling without some special libraries, that some interfaces require.
- Updated the fragglescript function docs to the actual code implementation.
- IPX network code is compile-time optional using the USE_IPX define in doomdef.h.
- Grabinput option provided. When enabled prevents mouse escape from the window and stops the most window manager intercept of key combinations.
- SDL Mouse motion option to select between absolute and relative mouse motion.
- Augmented translucent draw to handle alpha of 0..255 for all draw modes. Water can now be drawn with a nearly opaque translucent alpha.
- Change linedef decoding for new water and fog effects, affecting 301 (translucent water), 302 (fog), 304 (opaque water). Each of these can now select alpha and a fog mode selection (which ranges from clear to fog with distance effects). Water does not need to be crystal clear anymore.
- Add water and fog default controls that give new fog effects to older wads without the new fog selections.

### BUG FIXES 1.44, alpha4

- Stuck monsters, in wads like TNT, was fixed. In TNT, some monsters start positions are overlapped, and full speed impulse was needed to get them unstuck.
- Menus reorganized for multiplayer setup and compatibility with mods.
- Level names for TNT and Plutonia were not displayed due to old variable.
- TNT Map30 stair bug fixed. The stairs now rise same as in the original.
- TNT Map31 yellow key wad error detected and dynamically fixed. Now the player can finish the game, even on the original buggy TNT.
- Added Plutonia text that was missing.
- Fixed interference from French language mods upon DEH loads.
- DEH string replacement hardened against buffer overrun and attacks.
- Moved MF_FLOORHUGGER to MF2_FLOORHUGGER, and added code to distinguish between flag bits in old DEH files, that could be either MF_TRANSLUCENT or MF_FLOORHUGGER.
- Check if -devgame name if valid before use, to prevent segfaults.
- MAX_WADPATH size increased to 256. Use size limited copy and printf to most buffers to harden against long filenames and path strings in environment variables, command line switches, and files.
- Harden a net buffer string operation against buffer overflow.
- Fix net demo play function to write command as one string, so it would not execute partially written strings and fail. Command line specified -playdemo now works.
- Fixed compilation under windows, tested on Win98 using MinGW.
- Moved created dep files to directory outside of source.
- Under old Win32 version, a GlobalMemory call now uses an older version available on Win98.
- Fixed unsigned char usage that caused GCC 4 compiler complaints on lib calls.
- Fixed exec of config file on Win32 systems. It failed because the Execute string processing of backslash characters mangled windows directory strings that use backslash. Commands that have file names are prevented from processing backslash character codes.
- Prevent directory detection logic from returning "" as directory, that caused some savegames and config to be saved at the root directory.
- Fix nosound name conflict with Watcom nosound() function.
- A bad blockmap in the wad would cause zone memory corruption due to allocating and writing the blockmap based on inconsistent blockmap fields. Not running a node builder on a wad level would trigger this fault. Missing and bad blockmaps are now detected before allocating zone memory, and limits fixed to prevent exceeding the allocation.
- Added better ZONEID corruption detection and messages.
- Demo code made to stop interfering with savegame loading. The screen would wipe, and then wipe a second time and the controls would be useless.
- Demo code fixed to record and honor monster friction settings. Older demos need to use MBF monster friction or Doom no friction.
- Explicit check to prevent savegames over 99, and crash.
- Fixed segfault when executing command "teamplay 1" attempted to re-write const strings.
- Players locked together during spawn in deathmatch has been fixed. Player respawning now sets MF_SOLID flag to do CheckPosition test, so collision detection will work while they are still a corpse. Player corpse now honors cv_solidcorpse setting.
- Use of MAXINT on 32 bit fixed_t variables not safe on 64 bit machines. Created FIXED_MAX and FIXED_MIN that are safe.
- Search for lowest ceiling was flawed by an additional paranoid test that would also defeat a Boom search limit meant to prevent overflow. Removed the additional paranoid test.
- In Doom2 Map05, two doors to secret rooms would not work. If another door (1st of 4 doors on left) is opened first, then an extraneous tag 9 will move the floors of these two rooms like doors. Restored some tests that stopped the floors movement like the original, and the flawed Map05 is then playable.
- Revised vid structure to handle problems with Mac and direct video. The buffer width can be different than the screen width, to handle the Mac which pads the buffer lines to a power of 2. Fixes many common draw routines to increment by buffer width instead of screen width so they are correct for any driver buffer choice. Every draw routine fixed to draw correctly in all bpp modes.
- Fixed 16 bpp draw for 15 bpp and 16 bpp. Created new draw functions for those that were missing. Fixed translucent and fog draw using proportional addition of pixels. Fixed screen fade effects for 15/16 bpp drawing.
- Extensive rewrite of mode code in sdl port driver. It now handles all bpp mode requests. I_StartFrame no longer locks the video buffer.
- Fix green console to be more readable and not distort colors in 15..32 bpp. Dim background to 25% for higher contrast (gray green).
- Update linux xshm to latest interface and improve code. Can handle drawing in -native bpp mode, -highcolor, -truecolor modes, and using -bpp.
- Update linux ggi to latest interface and improve code. Can handle drawing in -highcolor, -truecolor modes, and using -bpp. Does not detect native bpp.
- Doom2 Map8 was dropping into secret level code, even though it is not a secret level.
- Skulls no longer spawn into void walls. Fixed skull spawning using a version of Boom code that checks on line crossings. Skull limit code made conditional on demoversion.
- Pain elementals fixed so if there is not room to spawn a skull, it silently removes the skull instead of sending it down to floor to explode. Conditional code is present for: (REMOVE) remove skull (like Edge), (KILL) explode in place (like prboom), (DAMAGE) explode on floor (previous Legacy).
- Increased the save game buffer reserved free space from 2K to 4K, and the header buffer size.
- Fixed Boom translucent linedef 260. Tagged lines now get the translucent effect too. Recognizes and uses named translucent lumps introduced by linedef 260. Analyzes Boom translucent lumps to get alpha for DRAW15, DRAW16, DRAW24, DRAW32, and opengl draw modes, which now work. Will draw using closest existing translucent implementation, or use analyzed alpha. Added TRANSLU_75 in RGB draw routines, to implement a 75/25% translucent draw. OpenGL does draw the translucent textures in BOOMEDIT.WAD.
- Boom deepwater colormap fixed. Effect menu has selections for Boom Deepwater colormap effect: Sector colormap, Boom visible colormap, or Boom colormap. The Boom colormap selection makes the Boom deep water sectors appear normal until walked into, and the deepwater colormap has global effect.
- Gave the Point pusher a square law effect (enabled by mbf_support), as in prboom (an MBF feature actually, Boom is not square law).
- Fix a Doom bug: cannot raise a door when ceiling action is in same sector. Add check to door logic that ceiling action being modified is a door action. This also prevents corruption of the ceiling action. Derived from prboom fixes doc (cph 2001/04/05).
- Fix signed mapthing_t angle that would create table lookup using negative index. It does not emulate the Doom buggy behavior. Note prboom fix doc (cph 2001/04/05), of Vanilla Doom bug found by Ville Vuorinen.
- Fix strcmp error in BEX parsing of FRAME and PARS. Fixes hg.wad, eye shooting missiles.
- Fix hardware render to draw translucent in distance order. This fixes BOOMEDIT.WAD.
- Boom deepwater colormap fixed in hardware renderer. Extend view_colormap to affect hardware render too.
- Fix buffer overrun of print strings by video card extensions. New functions will get the GL info strings, check renderer, and set gl_extensions string and oglflags, and also print extension strings on multiple lines, without buffer overrun.
- Fix buffer overruns caused by vsnprintf to buffer without string termination. New function will handle va_list printing to console.
- Fix hardware render so that colormaps affect objects too.
- Fix some floor and switch code to detect incomplete fragglescript created linedefs (no sidedefs, no frontsector), and skip secondary actions that would have segfault. Fix fragglescript to init more fields in temp linedef to some safe value, to prevent port dependent crashes.
- General cleanup on all fragglescript functions. Added many checks for valid mobj and fields that could segfault in fragglescript. Fixed much of fragglescript code fragility.
- Fix wipe for bpp draw.
- Make palette used by draw15, draw16, draw24, draw32, respond to gamma settings, and palette changes, such as palette flash, object pickup, damage red.
- Fix ouchface again, as previous fix was not complete. Ouchface is now visible for more than one tic, and works for self-damage too.
- Fix texture patch combiner to handle compressed patches. Compressed patches, which share some columns, caused the estimated size and memory allocation to be too small, and it would abort into using picture format instead. This fixes the elevator railings (SW1COMM) in Requiem.wad MAP08, which use compressed patches.
- Fix mouse event handling to add mouse motion, and rewrite of mouse handling. This fixes OpenBSD mouse problems.
- Fix opengl mode to switch video modes as other modes do.
- Status bar overlay in opengl mode was not positioned correctly. Fixed it so position is consistent for all video modes.
- A previous patch sped up P_CheckSector, but made it vulnerable to a second thing being removed by the player on a moving lift, resulting in a segfault. Instead, use the previous behavior of restarting from beginning of touching_thinglist.
- Fix bug introduced by BOOM_COLORMAP, which segfaults when restoring game saved during use of fixed_colormap.
- Allow Heretic and Blasphemer PWAD to fully use the SWITCHES lump without restricting it to only episode 4. Other ports do not have any restriction on Heretic use of the SWITCHES entries. Requested by a Heretic wad project. Checks for missing switch textures and defaults to use texture 1.
- Shortened some of the Boom Colormap Option text strings so they fit low-res screens. This affects saved configs.
- Add test for colormap fog using viewer_extracolormap. This is not very good fog but at least it works now as documented.
- Cleanup of hardware renderer code to make it easier to maintain. Cleanup of code in hw_cache, concerning bytepp, endian issues, and much better draw code for the various bytepp switches.
- Fix hardware draw of fx1 translucent. Fixes display of linedef 288 in opengl.
- Fix the hardware draw of Boom and view_colormap. Now see global colormap change with Boom deep water and colormap fog in opengl mode.
- Fix segfault in dsv4. When wrong buttons are pressed player is hurt. If they are pressed after getting the yellow key, then segfault. There is a mobj without a subsector, and script code must check first.
- Fixed the legacywad filename to use compatible allocation and usage so that a terminator of the string is not written into other data space. This caused segfault at program shutdown.
- Light calculations are now done internally in range 0..255.
- Chase camera is now fixed to be usable with splitscreen players, with the first player getting the chase camera. This could be expanded to allow two chase cameras now, but the chase camera gets hung up going through doorways, so I do not recommend it.
- Gun effect light is now 3/4 for colormap fog, and 1/2 for FF_FOG, instead of the previous none. Light precedence is now FF_FOG, colormap fog, translucent, normal.
- Rewrite all fog draw functions to new specifications and fog alpha. Create fog face sheets and fog join sheets.
- Fix split wall draws so that hardware renderer draws water sides with 3dfloor backsectors, and they are drawn translucent.
- Fix bug of -opengl in hw_cache introduced in svn973, triggered when imps shoot fireballs.

### FEATURES 1.44 alpha3

- Stop demos when menu opens.
- Voodoo doll damage effects upon players are restored.
- Voodoo doll mode control (Vanilla, Multispawn, Target, Auto).
- Voodoo doll telefrag instadeath control (Die, Damage, Zap).
- Remove hard limits for brain targets.
- Start game menu asks user "Abort this game. Y/N" when user is already in a game, and upon "YES" will abort the game and continue.
- Mouse will no longer change menu values without pushing a button.
- DoomLegacy demo format will have a header of version 144, and the characters "DL". DoomLegacy demos shall only use the one demo version number. Three later fields shall record the DoomLegacy VERSION, demoversion, and sub-demoversion numbers. Not yet enabled, alpha still writes demoversion 143.
- Changed to MBF style sector friction (from examination of Killough code in prboom), making DoomLegacy more consistent with DoomLegacy 2.0, prboom and other modern ports, with some fixes and differences. Water friction and Heretic friction are also converted to sector friction. Sectors get the friction and movefactor values at load time, and are updated whenever a flag or friction control changes. Finds stickiest friction on icy sector edge too. Independent friction for each 3dfloor slab. Old boom friction thinker code is compile-time conditional (FRICTIONTHINKER), and is only used for demos. Demos select appropriate friction code. Did not preserve perfect demo compatibility with Boom and prboom.
- Converted to independent player bob momentum of Killough, as in DoomLegacy 2.0, MBF and prboom, with fixes and adaptations. Compile-time conditional on BOB_MOM. Fixes many problems of previous bobbing, such as bobbing while riding conveyor, and interaction with friction.
- Monsters use same sector friction as players. Selection mechanism for monster friction (none, MBF, momentum). The MBF monster friction only gives the monster momentum on ice, and this creates surge when moving off ice, and stall when moving onto ice. Momentum monster friction selection accumulates momentum on every move, and fixes the surge and stall problems. Additional code to prevent hangups on dropoff ledges, get monster unstuck from edges, and to allow monsters to fall off conveyor belts.
- Create Adv Options menu, for monster friction, gravity, voodoo mode, voodoo insta-death, and door delay.

### BUG FIXES 1.44 alpha3

- More checks against buggy wads.
- Fixed colormap name in colormap missing message.
- Fixed recognition of Plutonia.
- Make savegame loading tolerate of added control vars.
- Fix savegame restore of voodoo dolls to not modify players, fixing savegame load crashes under Linux 2.6.
- Remove hard limits for braintargets, similar to prboom. Prevents overrun of braintargets array.
- Fix vile revive monsters stuck together bug.
- Fix vile fire location bug.
- Timelimit fixed. Will now count minutes instead of tics.
- Fix game menus, so that the check for "already playing" will give the user an immediate message asking "Abort this game Y/N". Upon a YES it will quit the game and let the user continue.
- Fix mouse bugs in menus and reduce sensitivity. Fix so mouse cannot change values until button pushed, because previously one mouse slide could accidently change a dozen values.
- Fix fragglescript parsing to use safer, faster string handling code, to protect against overrun of strings. Simplify fragglescript function args concatenation.
- Fix code so savegame description allows spaces again.
- Fix Makefile to link MATH1 functions pow and powf, for pld-linux.
- Patches submitted by pld-linux to fix linux_x video, handle more video modes, and TrueColor.
- Linux 2.6 compile warning messages squashed, and smaller code.
- Fix TNT recognition.
- General repairs to linux_x directory. Update system calls to same changes as made recently to SDL. Fix prototype changes. Fix keyboard translation and event posting. Add X error handler code. Fix X joystick code. Verified to run Linux X11 in software mode.
- Fix spritelump array to be dynamic expanded, thus removing spritelump limits.
- Fix CheckCheat to avoid special keys being mistakenly recognized. The cheat code was seeing the 0 key =0x48 and LSHIFT key =0x0148 as the same.
- Fix more dehacked special string copies to use Z_Strdup, like the other fixes, so do not write const string.
- Fix mancubus fireballs going through walls. Fix bug of missiles exploding within walls instead of upon them.
- Fix demo code to better handle boom, prboom, demos. Correct the turn code to use relative turns for boom demos.
- Moved a Heretic chicken friction calc, which may have fixed a latent bug.
- 3dfloor opening code rewritten, simplified logic, moved redundant tests making it faster, and fixed an error.
- As suggested by Fraggle, use (width-offset) instead of offset when displaying a sprite frame flipped.

### FEATURES 1.44 alpha2

- Boom demo headers are now recognized and the demos play better. They will not stay in sync, but will no longer crash the engine.
- Revised game description tables now have three wad names for each game type, to recognize more naming variations.
- Sprites Limit: Adjust the number of sprites displayed by software renderer from 128 to 16384, depending upon where your machine bogs down.
- Removed sprite display limits in software renderer. The number of displayed sprites is dynamically adjusted according to the sprite count, and the user setting in the Effects menu. The menu control gives a soft limit from 128, upto 16384 sprites. The sprite display is hard limited to twice the user setting. When there are too many sprites, the nearest sprites have preference, the farther sprites have semi-random visibility (they flicker), so the player can sporatically see the sprites in the distance.
- Savegame size is now unlimited, and uses much smaller savegame buffer.
- Replaced the odd command line switches for game development with one switch that specifies the gamename.

### BUG FIXES 1.44 alpha2

- Z_Malloc memory locking, to protect the status bar textures from other routines using and releasing them.
- Bug fix on endian conversion for switch textures.
- Fixed the automap for screen sizes and splitscreen mode.
- Fixed splitscreen mode and splitscreen mode sound.
- Protect splitscreen mode setup from demos.
- Updated code to reduce compilation complaints from GCC 4.4.4.
- Fixed texture generation failures in caesar.wad, detect and replace PNG patches with a dummy, handle empty patches, and split posts longer than 255 bytes.
- Fixed crusher logic so that they will crush floating monsters too.
- Fixed game modes so is easier to understand names, and fixed bad test for heretic shareware.
- Fixed game recognition by Ultimate doom wad name.
- Fixed a number of nusance bugs in the savegame menu system.
- Display ".." as the UP-DIRECTORY menu entry.
- New directory can be created from DIR line and from any blank directory entry.
- Fixed "EMPTY SLOT" message being presented as a savegame name.
- Fixed very old segfault in savegames of DoomII MAP27, which opened a door by level logic instead of a line trigger. These failed after restoring a savegame. Fixed savegame to save and restore NULL ptrs for line and mapthings.

### FEATURES 1.44 alpha1

- New Effects menu, makes room for the additional user controls.
- Gamma generation: Gamma table is generated from the selected gamma function
  (Gamma, Gamma_black, Gamma_bright_black, Linear).
  The Gamma function has 25 gamma setpoints.
  The Gamma_black function has gamma and black level controls.
  The Gamma_bright_black function has gamma, black level, and bright level controls.
  The Linear function has two setpoint controls, each of which has 25 positions.
- Door delay: Option control that slows doors by x1.5, x2, etc. so that player has more time to get through them.
- SoftError: Many hard errors (fatal) have been changed to soft errors, where the user will get one message, and the game will be allowed to continue.
- Voodoo dolls added. The voodoo doll was an accident of the original Doom, that many wads made use of to trigger linedef actions. Extra player1 starts now create voodoo dolls, with the last being the actual player1 start position.
- Demo fixes. Demos that Legacy cannot play back are now recognized and rejected, so they do not crash the engine.
- Z_Malloc allocation compile options, user selectable in z_zone.c.
  PLAIN_MALLOC: Large memory, no reclaimation.
  TAGGED_MALLOC: Will free allocations according to tags kept in the allocations.
  ZONE_ZALLOC: Improved version of original zone allocation. Allocates from large pre-allocation of memory, with tags, and frees allocations according to tags.
  GROW_ZONE: Option on ZONE_ZALLOC that grows the memory usage when free blocks cannot be found. This is the default now.
  AGGRESSIVE_PURGE: Option on ZONE_ZALLOC that aggressively purges downgraded allocations instead of leaving them as cache. Mostly for testing memory usage code, but also usable for small memory.
- Texture generation now handles multi-patch transparent textures. The code selects between three rendering methods, one of which creates a single patch transparent 2-sided texture from the source multi-patch texture.
  This now software renders the gates in Phobia.wad correctly.
- Game determination characteristics and parameters are now in one table. This allows special game wads to be added easily without errors. The table specifies a Legacy support wad for the specific game that will now be automatically loaded (none exist yet).
- Savegame format now has a header that specifies the name, map number, time, the wad, and the command line switches. The savegame display shows the name, map, and time. Upon loading the savegame must match the current wad.
- Savegame format now records the endian and word size. Loading now detects these and other critical parameters to intercept incompatible savegames.
- Savegame now allows up to 99 savegames in one directory. This is a compile option.
- Savegame now supports savegame directories. You can have a separate savegame directory for each wad. This is a compile option.
- Hardware renderer now can display Boom colormaps.
- Hardware renderer now has lighting level variation with colormaps.
- Chexquest support is enhanced. The Doom pictures that are in the Chexquest wad are now blocked when in Chexquest game mode, along with blood splats and Doom episode names. Chexquest splats are less violent.
- Full international keyboard support (SDL).
- New joystick/gamepad code, should support all modern controllers (SDL).
- New FS functions.
- Audio output samplerate raised to 22 kHz.

### BUG FIXES 1.44 alpha1

- ENDOOM lump updated with current information.
- Build process brought up to date: Automatic dependecy generation, serious Makefile cleanup, SDL as the default multimedia interface, LOTS of compile-time warnings fixed.
- 64-bit compatibility.
- Flat search logic once again honors the F_START, F_END, FF_START, FF_END markers. Only if it fails to find the flat within those bounds does it search the entire wad. At least one wad had an extraneous lump with the same name as a flat, and Legacy will now behave as well as other Doom ports.
- ZALLOC memory management fixed. It had a latent bug that would corrupt memory management for some aligned allocations. It also allocates more memory now, so larger levels can be handled.
- ZALLOC memory users fixed to protect their in-use allocations against accidental purging by other memory allocation calls. Added new classes of allocation tags and code to protect them. This fixed several bugs that would hit only certain wads.
- Z_Malloc tagging improvements to give cache preference to expensive combined multi-patch textures.
- Fixed memory leak when purging sectors at end of level.
- Time tick fixed so that it can handle time count overflow and wrapping.
- Replaced all uses of gets library function with fgets, which is much safer.
- New endian conversions, uses standardized, with most uses moved to wad reading functions, so should be endian-safe now (Mac users).
- Several vsprintf/vsnprintf-related potential crashing bugs fixed in the console code.
- Fixed bug where life and ammo status would have bad background after a save game.
- Fixed bug where things can overdraw the status bar. Added limit checks where things are split by a Legacy 3D floor.
- Fixed sound to work on both old SDL mixers (non-functional RWOPS) and new SDL with a working RWOPS. The SDL mixer version is detected at compile time.
- Heretic save game fixed so that it does not use up an inventory item.
- Heretic sound fixed. Heretic uses a different naming scheme for sound effects.
- Fixed the bug that was triggered by the big room in 3DHorror.wad. Limited the span code to valid span ranges, so such situations cannot accidently cause it to overwrite several arrays and other static memory.
- Prevent having a segfault for some wads with minor flaws, like using a Boom linedef 244 instead of 242. Tests the b-nodes index for being valid before using.
- Fixed Phobia segfaults due to a texture with one small patch.
- Fixed segfaults from low level draw clipping exceeding the bounds of an array. The callers are fixed to limit the width drawn.
- Wads with missing sprites will no longer cause segfaults.
- Fixed the fighting code to test some target ptrs before using them. This prevents segfaults during heavy monster in-fighting.
- Fix large vertical bars drawn in Phobia.wad map07. Software rendering calculations were overflowing due to the extreme height and depth of that room.
- Fixed clipping artifacts seen in Twilight.wad. Limit the x range earlier so do not exceed the screen width.
- Fixed Dehacked segfaults due to trying to overwrite const strings. Some compilers allow that, but not GCC on Linux.
- Hardware renderer fixed to use some of the same code fixes as the software render for things like 3Dfloor lighting. The hardware renderer now correctly lights things under 3D floors.
- Prevent segfault when 3Dfloor does not have a side texture.
- Display fog sheet in software renderer.
- Sprites behind a transparent wall are now displayed by hardware renderer.
- Fixed Medikit bug, from DoomWiki known Doom bugs list.
- Fixed ouch-face bug, from DoomWiki known Doom bugs list.
- Fixed blaze-door bug, from DoomWiki known Doom bugs list.
- Fixed monster-attacks-self bug, from DoomWiki known bugs list.
- Fixed boss-death bug, from DoomWiki known bugs list.
- Fixed sleeping-sargeant bug, from DoomWiki known bugs list.
- Finished buildstairs bug fix, from DoomWiki known bugs list.
- Display Chexquest goo splats, instead of the bloody splats from the legacy data wad. Chexquest table entry specifies that Chexquest wad has precedence.
- Fixed segfault due to lightlist bad value, seen in Chexquest-newmaps.
- Centered the scope crosshairs in Chexquest-newmaps. They were off to the left for some screen resolutions.
- Allow Chexquest-newmaps to access more than the 5 maps that Chexquest had. Use of the "-file" switch on command line allows all maps to be accessed.
- Fixed savegame code to handle more than 1023 thinkers. The hth2.wad saves 1899 thinkers.
- Number of colormaps increased to 64. The hth2.wad has 38 colormaps.
- Detect some buggy wad conditions and recover or gracefully exit. Detects bad linedef number, missing sidedefs, bad sector number, bad seg number.
- Fixed math overflow for large maps like Europe.wad MAP01 (which really is too large, but plays now). One corner of Europe.wad is beyond the blockmap and walls there are walk-thru.
- Fixed blockmap loading to deal with large maps like Europe.wad, which overflows the blockmap numbering x3. The code now detects the overflow and adds the missing upper bits of the blockmap numbering.
- Fixed the automap to handle large maps like Europe.wad. Math overflows are detected and the automap zoom is limited to avoid them.
- Fixed the automap to track the center of attention instead of the corner of the window. This keeps the map centered when zooming.

### KNOWN BUGS

- Sprites that fail to draw over the floor due to too many 3D floors close together. Seen in hth2.wad. Caused by the height of the nearby railing affecting the sorting of the sprite relative to the floor. Fixes to 3D depth sorting are already being investigated.
- When walking into water, when the eyes are right at the water level, it will display bad clipping above and below the water level. Occurs for both software renderer and the hardware renderer. A fixable cause has not been discovered yet.
- Under Linux the SDL port code works. The non-SDL port to X-Windows has problems with screen modes that cause it to fail.
- Corona on lights are misplaced when the wad replaces the sprite and the bright spot position is different. The Corona positions are from measuring the original doom sprite bright spot positions.
- Corona on far light is drawn over nearby solid object that partially blocks the view of the far light.
- The field-of-view clipping is clipping polygons at the edge of vision as if the player were looking straight ahead. This has not been fixed yet for player looking up and down.
- The hardware renderer BSP traversal is having rounding errors from sector splitting that show up as cracks in the floor.

## 1.43 Beta (2004-06-14)

### TODO

This release was primarily for Mac OS X, but had some small fixes that were carried into 1.44.

## 1.42 (2004-04-18)

### TODO

## 1.41 (2003-10-03)

### TODO

## 1.40 (2002-09-21)

### TODO

## 1.32 Beta 4 (2002-01-01)

### TODO

## 1.32 Beta 3 (2001-08)

       Lot of fixes as usual for a beta.

         - Translucent 3D water and 3D floors in hardware mode
         - Coloured sector lighting in hardware mode
         - New corona code
         - Improved load level time in hardware mode
         - Show a status of level load in hardware mode
         - now legacy can load skin using sprite keywork (original spec)
         - Use Transform and lighting in OpenGl
         - draw full screen when status bar is not scaled in hardware
         - fixed heretic weapon height in opengl/glide
         - fixed conflicting sector type 4 (heretic/doom)
         - fixed moving hanging mobj on platform (heretic e2m5)
         - fixed error message while saving
         - fixed crash of e3m8 in heretic caused by object 56 badly handled
         - fixed crosshair not showed when joining multiplayer game
         - fixed file search in windows version, was causing problem in
           multiplayer game with additional files
         - fixed option "se" not drawed is some video modes
         - fixed map30 savegame crash
         - fixed commander keen dead not open door
         - fixed player reset between secrets levels of doom2
         - fixed problem of map29 not loading
         - fixed timelimit cvar problem in menu
         - fixed quoted badly handled in responce file

      Shipped with Launcher 1.4
         - handle e?m? map name in heretic mode
         - added direct 3d sound switch in setup panel
         - now launcher encloses wad string between quotes to send
           parameter to legacy. This allows space and special
           characters in wad files
         - option are now saved when legacy is started

       Was in beta 2 but no doc updated
         - fixed joystickfreelook cvar not working
         - added little menu cosmetic that tell when the serverlist
           is empty and fixed little problem of refresh
         - fixed (one more time) angle prediction
         - added posibility to change death message by dehacked scipt
           and fixed some ones
         - added gr_coronasize in the menu
         - fixed final cast not showed corectely
         - fixed some problem with heretic final episode stuffs
         - fixed reset of weapons on doom2 map07, map12 and map21
         - fixed bug 427507 : doors no more turn corpse to giblet
         - fixed problem with load/save menu screen that screw up
           the texture cache in glide, and display badly in opengl
         - fixed 3D floors crash in software
         - improved heretic support :
           - fixed network not working
           - fixed height of weapons on heretic
           - fixed heretic invenory key handled in menu (bug 426338)
           - added native support of heretic1.wad

       Was in beta 1 but we forgot to mention it
         - removed main wad version checking
         - fixed cannot restart game after end of a episode

## 1.32 Beta 1 (2001-05-08)

       Added Heretic support it is already playable but still experimental
       see heretic note in legacy.txt for more

       - OPENGL/3DFX
         - added gr_coronasize cvar this allow to adjust coronas size
           to you screen size and your distance to the screen
         - fixed litle glide issues
         - fixed texturing problem in hardware mode with middle twosided texture
         - change the way legacy handle color in opengl/3dfx
           this allow better contrast
         - fixed little problem of backface culling of lights

       - SOUND
         - added support for 3D positional sound cards (now under Win32 only).
           See Legacy.txt for more details.

       - MULTIPLAYER
         - enable client angle prediction was removed from 1.31 by mistake
         - fixed some issues in network (game sometime lock)
         - implemented timeout detection and kick player if connection timeout

       - MISC
         - added cvar scalestatusbar so you can see it in original size
           or scaled to your resolution
         - Win32: added -nodinput command line parameter (use standard Windows
           mouse input instead of DirectInput) to resolve issues with some mouses
           under Win32 systems (like issues with mouse whell support under
           Win95/WinNT 4.0)

       - GAMEPLAY
         - joystick can be used for free look using joystickfreelook cvar
         - like in heretic now missile can now active weapons switches
         - suport heretic ambient sound

       - BUG FIXES
         - fixed little issue that allow to exitlevel even if allowexitlevel
           cvar was set to false

       - Known bug (don't mail us about it !)
         - in 3dfx/opengl :
           - splat/bullet hole have serious problems
           - water don't show properly
           - there is white dots around some wall/floors/ceiling
           - the lighting is slow (mainly on slow 3d cards or low end PC)
           - missing polygone/textures one some levels
             (need to be rebuild with new nodes builders like zennode or deepbsp)

## 1.31 (2000-12)

       - OPENGL/3DFX
         - no more coronas for mancubus balls
         - added light for revenent fireball, lost soul and candle
         - fixed full transparency of torch
         - make backface culling for lights

       - MULTIPLAYER
         - new menu option : create server and connect server
         - use masterserver to detect all server in the world !
         - added "internetserver" ,"masterserver" and "servername"
           to use in conjunction of new multplayer features
           see console.txt for more
         - no more palette change in splitscreen
         - fixed issues with netgame and dehacked (it is now copyed automaticaly
           like all wads)
         - deathmatch team-start-sectors can be created with normal deathmatch-
           starts in a sector. A sector/line-tag and a line with linedef-type
           1000-1031 prevents other teams from respawning there.

       - GAMEPLAY
         - when solidcorpse is true you can smash it and turn it to giblets !
         - adjust buchholz for suicide.
         - added FraggleScript scripting capability ! (as beta for now)
             Read the doc for more
         - added 3DFloors capability (as Beta for now)
             Read the doc for more

       - MISC
         - Legacy now detect free memory and allocate from 6 to 20 Mb
           The "-mb" option overwrite detection
         - remove limit of polygone pool
         - the STFB0 is now optinal in a skin replacement
         - allow use of joystick y axis for looking up/down just use mouselook cvar
         - added support of mouse wheel under WinNT
         - Support Dolby Surround sound (only for external decoder)
         - display #SECRETS and #MONSTERS on the overlay!  NOTE: add 'S' (secrets)
           and 'E' (monsters) to the "overlay" cvar for seing them.

       - BUG FIXES
         - fixed crash with splat on two sided wall
         - fixed little issue for look up/down of splitscreen player with keyboard
         - fixed splitscreen variable with demoplayback
         - fixed player viewpoint when using F12
         - removed monsters steping
         - fixed random crash in OpenGl/Glide when load level
         - fixed minor stuff to increase compatibility with old wad
         - fixed death meassages issues : telefraged and when weapon change before
           the player die

## 1.30 (2000-08)

       - VIDEO
         - Thierry Van Elsuwe (aka Hurdler) ported to OpenGL our glide code
           so Legacy have now OpenGL support with some new OpenGL specific
           features like FOV "what you want" (zooming),...
         - improve glide support, fixed all texture problem and so one
         - fixed many splats problem so now is enabled in the code
         - Opengl/3Dfx added new features like coronas and dynamic lighting
           (unfinished),... added new cvar for this at the same time.
         - fullscreen and windowed mode under Linux or Windows+OpenGL

       - MULTIPLAYER
         - Join in game : now you can join the game without a restart of the
           server.
         - added automatic file copy through network
         - added seconde mouse support for splitscreen
           read the legacy.txt for more about it
         - added support for ipx under win32
         - now the engine wrape around level in deathmatch no more final screen
           etc...
         - splitscreen variable can now be changed while in netgame

       - CONSOLE
         - added -noresetplayer to map command
           use this option to keep your weapon and keys through a map change
           it is used internaly by the engine for usual map change
         - added allowturbo and allowexitlevel cvar
         - added splats cvar to enable/disable splats
         - added translucency cvar so slow cumputer can disable translucentcy
         - added controlperkey cvar this allow you to enable/desable
           more than one control per keys
         - added screenlink cvar so you can enable the color melt screen link
         - added gimme map

       - MISC
         - Boom compatibility, except BEX and lindef 260, Thanks to SoM
         - impoved Linux support (similar to win32 one)
         - Dos version can now use winsock 2.0 (default in Win98)
           Thanks to the libsocket team
         - enable color blend for screen translation (was in the original sources)
         - added video menu and move some option there
         - support mouse wheel in win32 version thanks to Dominique Leger
         - added joystick hat support under win32
         - improved launcher for windows version

       - BUG FIXES
         - fixed some serious network issues
         - fixed multiple dehacked don't load
         - fixed can take the chainsaw in doom1 or udoom with next/prev weapon key
         - fixed can't save when use -warp or +map
         - fixed timedemo work now more than one time
         - fixed cdvolume bounds in win32 version
         - translucency now use colormaps
         - and fixed some more tiny bugs

       - Known bug (don't mail us about it !)
         - in 3dfx/opengl :
           - splat/bullet hole have serious problems
           - water don't show properly
           - monsters/sprite have feet(head) in ground
           - there is white dots around some wall/floors/ceiling
           - the lighting is slow (mainly on slow 3d cards or low end PC)
           - the light of sector is not correct !
           - missing polygone/textures one some levels
             (need to be rebuild with new nodes builders like zennode or deepbsp)

## 1.28 (1999-05-14)

       - FULL WIN32 PORT
         - no more compatibility problem with sound and graphics card
         - plays MIDI music through whatever MIDI output you have set
           (including software midi synthesizers like those of Yamaha)
         - uses TCP/IP network instead of IPX, allows internet play
         - includes a preview of the 3Dfx mode (that r_glide.dll file)

       - 3DFX BETA VERSION
         - you can choose between software or 3Dfx accelerated mode
           in the Doom Legacy Launcher 'Setup' panel, without the
           launcher, use "-3dfx" on the command-line
         - 3Dfx mode is available through the r_glide.dll, you need
           the latest Glide 3 drivers from www.3dfx.com
         - fixed shooting with mouselook, note you can fire at 90 degree
           up and down, but he sprites will look 'flat'
         - you can now change resolution at run time through the video
           modes menu (F5), just like in software mode
         - uses external r_glide.dll file : this WILL be a feature,
           because it allows for future extensions with OpenGL,
           Direct3D, or even hi-color software modes

       - COOL LAUNCHER
         - setup single and multiplayer games easily
         - add external wad files with file dialog
         - set your Preferred Weapons Order (tm) =)
         - easily switch between Doom1, Doom2 etc..
         - Demos section allows quick 'n easy playback of demos, the launcher
           saves the external files, and your comments into the demos!
         - forget about the command-line !

       - SPLITSCREEN !
         - two player game on one computer!
         - within a multiplayer game, any computer can 'host' 2 players
           thus with 2 computers, you can have a 4 player game !
         - when playing back a demo, type in 'splitscreen 1' at the
           console to show 2 views at the same time

       - TCP/IP MULTIPLAYER
         - Legacy now uses TCP/IP (DOS version also supports IPX)
         - '-connect' auto-detects the server on a LAN (when computers
           are directly connected together)
         - the server passes the list of files added with '-file' to the
           clients (but clients MUST have the file)
           Note: the files on each computer must have the same date or
           Legacy will stop with a warning message, you can disable date
           checking with '-notime' cmd-line option

       - DEMOS
         - demos can be recorded by only one player in a network game
           (use "stopdemo" to stop recording without quitting the game)
         - "playdemospeed" console variable allows faster playback of demos

       - CONSOLE
         - "addfile" and "map" commands can load skins while in game
         - "fastmonsters" : same as -fastparm parameter
         - "map" command enhanced :
            map <mapname[.wad]> [-skill <1..5>] [-monsters <0\1>]
            this allows to change skill and monsters at run time
            note : these two parameters are optional, if not specified the
                   current value is used
         - "timelimit" allows server to set a time limit on a level
         - "chasecam" activates or desactivate the chase-cam mode
         - "cam_height","cam_dist", "cam_speed"  to customize the chase-cam

       - GAME STUFF
         - display KEYS on the overlay!  NOTE: MAKE SURE TO ADD 'K' TO
           THE "overlay" CONSOLE VARIABLE IF YOU KEEP YOUR OLD CONFIGURATION
         - Next and Previous weapons controls added in 'Setup Controls' game menu
         - Legacy's 'true' water effect was enhanced with physics: press
           Jump button to swim up, or use mouselook, friction, gravity..

       - MISC
         - "-iwad xxx.wad" : you can keep all your original Doom versions
           in a single directory and choose which one to run with this switch
           (example: -iwad plutonia.wad)
         - "-file" searches for files recursively, starting at the directory
           where you run Doom Legacy, it will find files in any subdirectories
           THIS IS VERY USEFUL FOR MULTIPLAYER : for example, provided everyone
           has the 'hipafrag.wad' map, the server just types 'map hipafrag.wad'
           and all clients will load the map, even if they have placed the file
           in different directories
         - savegames enhanced (works better)

       - DOS VERSION ONLY
         - the DOS version supports both TCP/IP _AND_ IPX
           TCP/IP is used when you use the "-connect" or "-server" parameters
         - Joystick support enhanced, type "help use_joystick" at the console
           for more

       - FIXES
         - mouseaiming works better, and aim is now correct independently of the
           screen resolution
         - fixed crash when starting netgame in Cooperative and there are not
           enough player starts
         - fixed many problems.. (ok, bugs) with 1.27 and 1.28 betas
         - fixed 1.9 original bug : demos get out of synch if you go into the menu
           while recording

       - KNOWN BUGS
         - Alt-Tab/Alt-Escape in windows with 3Dfx preview may crash
         - Sometimes video modes are not detected when you start Legacy WIN32 from
           a fullscreen DOS box, just use Doom Legacy Launcher, damnit !

       - AND...
         - documented version 1.27 changes! see below

## 1.27 (1998-12)

       - GAME STUFF
         - new in-game menus allows setting console options easily

       - MULTIPLAYER
         - "deathmatch" console variable : change deathmatch mode
           at any time!
           deathmatch 0 = cooperative
           deathmatch 3 = deathmatch 2 + weapon stay (dm1+dm2)
         - fixed problem where 2 or more skins would have the same
           name, made it impossible to browse all skins in the
           multiplayer menu.
         - "fraglimit" : go to intermission after limit of frags is
           reached
         - the DOS version should work better with modem
           (using HX8 or SERSETUP)
         - the DOS version supports TCP/IP using __Winsock 1.0__ ONLY
           See section [5-5] of the main documentation

       - CONSOLE
         - pass console commands on the command-line using a "+"
           prefix, example:

               > legacy +color 7 +name "the killer"

         - human readable console variables, example:
              color red
              chasecam on

           instead of:
              color 4
              chasecam 1

           type "help <commandname>" to see possible values for each
           console variable, note the old system still works

         - "exitlevel" : ends level and goes to intermission, comes in
           handy when you get stuck in a level or you don't find the key
         - "bind" : attach console commands to a key, example:
              bind s "screenshot"
              bind h "sayteam help me guys!!"
         - "screenshot" command takes a screenshot, pssst: bind it
           or you will screenshot the console =)
         - "vid_ticrate" shows a graph of rendered frames timing
         - "save" command : saves game, works in multiplayer too
         - "load" command : load previously saved game, multiplayer too
         - "timedemo" : like -timedemo it will playback a demo as fast
           as possible to test the speed of the renderer
         - "map" and "addfile" commands now loads textures!
         - "sayteam" : sends a message only to your own team
         - added 3 new commands related to configuration :
           loadconfig   : load a previously saved config file
           saveconfig   : save the current config, you must give
                          an explicit file name
           changeconfig : switch to the config (saves current config, and
                          load another one)

       - EDITING
         - supports 'multipatch' textures on any 2-sided wall !
         - 5 new linedef types for translucent walls : 201 to 205

       - FIXES
         - fixed 32 skins limit, would not check for the limit,
           and crash if more than 32 skins used. No more crash but
           the limit is still 32 skins.
         - fixed bug in the display of frag in intermission in teamskin
         - fixed map7 bug when the 2 last babyspider die at same time
           (original 1.9 bug)
         - fixed gamma max value
         - fixed final pic shows in doom1 and bunny scroll
         - fixed "got unknow netcmd 109" when changing player config
         - many, many bugfixes and internal changes.

## 1.25 (1998-08-25)

        NOTE! The chasecam key is now '/' slash on the keypad, and it
              is available only in '-devparm' mode.

        - SKINS !!! : a skin is basically a full sprite replacement
          for the player, with optional specific sounds (hurt, death,
          jump etc..) and optional status bar face to go with it.

          Skins are simple wad files, that can be added with '-file'
          on the command line, and you can have as many skins as you
          want into a wadfile, so prepare for skinspacks galore!

          With Doomatic (our deathmatch launcher), the copying of
          files to other players is automatic, so the skins are
          automatically copied to other players. Using your pre-
          ferred deathmatch launcher, just make sure everybody
          have the skins wads.

          Skins work in single player too, you can admire your skin
          while in chasecam mode (use '/' slash key on keypad while
          in -devparm mode).

        - TEAMPLAY and TEAMSKIN deathmatch modes : you know about
          teamplay, teamskin is like teamplay, but using skins to
          identify teams instead of the color. Of course the frag
          rankings and intermission are updated to show team scores.
          Plus, there's a 'teamdamage' console variable that allows
          to choose whether your team partners get hurt when you
          shoot'em or not. Quake's teamplay is Legacy's teamplay
          with 'teamdamage' at 0.

          Cool! 'teamdamage' also works in cooperative, so in
          cooperative you can choose whether you can hurt your
          coop partners or not.

          Like in Quake, the armor is always damaged in teamplay
          if you hurt your partners.

          When you are hurt by a partner, and teamdamage is off,
          you won't see blood and the screen won't go red.

        - NETWORK IMPROVED : the 'slow turn' seems to be fixed now.
          Even better, we can call this the 'angle-turn client
          prediction' as your view now moves _before_ the server
          receives it. As you move around the view quicly in multiplayer,
          it is now smoother, especially in higher resolutions.
          Please tell us how you feel the improvement!

        Console:
        --------
        - viewheight : set the height of view, if you want to see what a Leprechaun
                       sees, just lower that! It's good to frag those giant marines
                       when you're a little teeny-weeny Leprechaun, heheheeee
        - skin,teamplay,teamdamage : for teamplay modes
        - frags,teamfrags : these shows the original Doom frag table, and also for
                            teams vs teams !
        - memfree,help : see what memory is used in Doom's heap, see how much physical
                         memory is left after you run Legacy.
        - addfile : completes 'map' command, loads external pwads at run time, currently
                    able to load the sprites, sounds, musics, flats, and maps,... but
                    not new textures (to do). Also to do is load the skins in pwads
                    at run time.

        Editing:
        --------
        - 'hall of mirrors' removed (thanks to Demiurg and his cool rivbrid.wad which
          looks really nice)

        - visplanes limit increased (should be plenty) (thanks to Russel and his huge
          pract.wad that broke Legacy's 256 drawsegs and 256 visplanes with... up to
          896 drawsegs at once (2sided lines), and 380+ visplanes when flying above the
          map with 'IDFLY' !!!)

        Misc:
        -----
        - dehacked patches files with .DEH extension can be added
          after '-file', which makes it very easy to use patches
          with your usual deathmatch launcher (it doesn't have
          to know about the dehacked, then, and Doomatic will
          copy the dehacked patches automatically since it is
          part of the wad files).

        - end sequence (finale) fixed for higher resolutions
          (thanks Kege)

        - 'splash' sounds when walking and jumping in water

        - can't cheat anymore by jumping in dangerous fluids to
          avoid the damage as it does more damage now.
          This makes a lot of deathtag levels playable again
          with Legacy (as lava was used to prevent scoring unless
          you have got the 'steel boots' armor)

        - testing deathmatch maps alone using '-deathmatch -warp'
          didn't work in last version, now fixed

        - that horrible 'SIGSEGV' bug due to a faulty CD-library,
          fixed.

        - other little goodies you'll find yourself...

## 1.24 (1998-07-19)

        - added CD Audio music, along with console commands 'play','stop',
          'info', etc. CD Music volume is in the sounds menu (F4).

          Note: cd audio and midi music are separate, and can be active
                at the same time. This is useful if, like me, you have
                some 'ambiance sound' cd's like sounds of storm, rain..
                you can use it to add ambiance, while still listening to
                the midi music.

                Usually, you will want to turn either the music or CD
                audio volume to zero.

        - some minor changes in the network, we noticed a serious problem
          with FAST machines & SLOW network cards, seems to work fine now.
        - fixed the backspace problem in the chat
        - fixed problem with some playback of lmp version 1.20
        - warp parameter work again with doom1 and ultimate
        - fixed switch textures that didn't 'switch' in ultimate doom.
        - fixed stupid bug with the statusbar numbers not refreshing.
        - the 'map' console command now works in multiplayer.
        - blood sprite changed so it looks better when staying longer
        - bloodtime is now a network variable, the server sets it for
          everybody
        - added gravity variable

## 1.23 (1998-07-17)

This version was a 'source release' for some projects, it was a work in progress, not released on the site.

## 1.22 (1998-06-05)

        - the slow turning left & right is fixed. Sorry we have forget to
          put the right code in the release.
        - added command "say" and "sayto". This fix chat problem.
        - word wraping in the console.
        - fixed problems with the new head up display.
        - fixed shift key problem.

## 1.21 (1998-05-25)

     Network:
        - the slow turning left & right is fixed
        - playing back demos of the latest version, along with the support
          for v1.12 demos didn't work : fixed. If you happened to record
          demos and thought they didn't work, they will now playback cor-
          rectly as they were recorded properly.
        - now SERSETUP works.. but more work need to be done, especially
          testing it , so please mail us how it worked for U !!
          Check LEGACY.TXT section 5/6 for more.

     Video:
        - fixed a nasty bug with getting the vesa extended modes. On some
          cards like Matrox Millenium it either showed less video modes,
          or didn't work at all.

     Misc:
        - fixed 'netgame' name used for savegames sometimes.
        - starting a game with more players than deathmatch starts will
          not crash anymore.. but some players will be spawned at the
          same point and will be stuck (yes it is a quickfix, this
          problem arises only at the very beginning of the game,
          usually there is always a dm start free)
        - the demons are opaque.. and the spectres translucent.
        - removed the "F***" word from fragging messages by request

## 1.20 Undocumented

        - Doom Legacy supports 64 deathmatch starts (the original game
          used up to 10 dmstarts)

        - height checks added for melee attacks: so monsters can't hit you
          if they are not on the same level, when using short range attacks.

        - when you are under Invisibility (blur sphere) and it is running out,
          you will switch between hi translucency and low translucency, and
          only when the invisibility is fully finished, you become opaque.

        - Supports FLATS and SPRITES in pwad, from the very old 'dmadds' pwads
          up to the latest dehacked patches using sprite renaming.

          See EDITING.TXT for more about using sprites/flats in pwad.

        - Can replace only some frames of a sprite in a pwad.

        - Sprites/Textures in a pwad are not supported at run-time using
          the map command, to do. Flats in pwad work at run-time.

        - the automap displays the right player colors

        - savegame buffer upped to 512kb

        - supports multiple dehacked eg: -dehacked one.deh two.deh three.deh

        - supports DIGMID (digital midi) using the sound.cfg

## 1.20 (1998-05-19)

     NOTE: THIS IS NOT COMPLETE AT ALL, WE WILL DOCUMENT THE CHANGES OF
           VERSION 1.2 AS SOON AS POSSIBLE, THERE ARE MANY ONES! BUT WE
           GOTTA RELEASE..

     Engine/Game:
        - Added the Doom Console! Enter commands and change game var-
          iables at any time! If you are not used to it, the console
          will allow you to be a 'Doom power user' ! We have worked
          a lot on the console itself, and have implemented a basic
          set of commands and variables. In the future we will be
          able to add any kind of commands easily. Any command or
          variable that you'd like? We are open to suggestions.

          Check the console section for more about all the commands
          available.

        - Finally improved and fixed the translucency on sprites:
          - the spectres (pink like demons) are really hard to see
          - translucency on torches is now correct, only the flame
            part is translucent
          - most projectiles are now brighter : the translucency
            used to diminish the colours intensity, now they look
            as bright as the original game
          - each sprite, and each frame can use a different trans-
            lucency eg: the bullet puffs are more translucent than
            the fireballs, the plasma bullets gets more translucent
            as they disappear
          - the blur sphere will make you as translucent as the
            pink demons, which means very hard to see! So the blur
            sphere item will probably become a strategic weapon!

     Multiplayer/Network:
        - Totally rewritten the network code of Doom : the method
          is now a very basic implementation of Client/Server. It uses
          less transfer, and allow up to 32 players simultaneously.
          Actually there is one drawback : you have to be sure that
          the server is fast enough, and doesn't slowdown, because
          if the server slows down, everybody in the game experience
          the 'lag'.

        - We have cleaned up the intermission screen with the death-
          match scores. It displays now several kinds of rankings,
          including the death rankings :) See Section [5-9] of the
          main documentation.

          We will document these scoring modes better in the future.
          Please note that this was quickly added: we can add any type
          of scoring system provided it's interesting enough, and
          funny :)

        - The deathmatch rankings are now automatically displayed when
          you are dead, until you respawn.

     Demos:
        - When playing back a demo, it tells the name of the player
          you are looking at when pressing F12. It is also displayed
          white in the deathmatch rankings. When you are actually
          playing, it is always YOUR name that is displayed white in
          the deathmatch rankings.

     Miscellaneous:
        - The old sky textures are stretched and displayed right. It
          doesn't look great, but that's better than nothing.
        - The jump key is no more repeatable. If you keep it pressed,
          the marine will jump only once.
        - Restored the sound caching system: if soundprecache is set
          to false, it will not load all the sounds at startup, but
          only when needed.
        - Restored the original game title screen, since there is now
          the Doom Legacy logo at the game startup screen. Phew! I'm
          happy to see that great titlepic of Doom1 back!

     Bugfixes:
        - Items under crushing sectors that could not be picked up is
          fixed. A ridiculous test == should have been <=, arh!
          Fixed the crushing ceilings that didn't crush too.
        - The game can now be started in standard VGA 320*200 on
          older non-vesa graphic cards.
        - Fixed an important bug with memory usage under Windows and
          OS2 systems, please tell is if it works under WinNT !
          We have tested it under OS2 and it works now perfectly!
        - Fixed Win95 asking for 'switch to DOS mode'.

     In development:
        - Started working on hicolor : the engine will use HICOLOR
          textures, instead of simply converting the 256color graphics
          to hicolor.

        - The console border graphics, and the loading screen picture
          were done in a hurry, I have to finish them.

        - Finish that damn water, arh! We have to make a simple editor
          for this. The tools will be developed under Windows.

## 1.12 (1998-03-06)

     As you can see, we've taken some time to write a better docu-
     mentation, we hope you'll appreciate, and read the full doc
     before sending us reports about bugs/trouble shooting.

     Engine/Game:
        - You can now shoot up and down, in the free look direction!
        - You can shoot the ceiling and the floor, and see the puffs
          of smoke.
        - Doom didnt draw the puffs of smoke when shooting on some
          walls in open areas, this is now fixed!
        - Autoaim on/off. When autoaim is off, you can still use the
          freelook to shoot up and down, but only when there's nothing
          to aim in front of you.
        - Crosshair preference : Off, Cross, Angle, or Point. It's drawn
          a little translucent too.
        - Added jump ability, key mappable in the menu of course.
        - Can walk under and over monsters/inanimate objects.
          All Doom things (sprites) are now collision-checked in real 3d,
          thus things can stay on top of other things, monsters and player
          avatar can walk/fly over stacked things and so on...
          Eg: we've tested a 'solid corpse' feature and all the corpses
          were stacking one on another in maps with lots of ennemies!
        - Added transparency on other sprites, as requested : arachno,
          barons, caco and mancubus projectiles, the lost soul, blood
          'puffs', eye in symbol, demon (big boss) spawn fire.

     Multiplayer/Network:
        - You can now frag with the barrels!!! For the frag artists out
          there, now you're rewarded by your talent! Let me explain:
          when you shoot a barrel, and then later one or more guys die
          by the explosion of the barrels, you get the frags!!! This
          works like dominoes too : whatever number of barrels they are,
          they all know who caused the first explosion! Now there should
          be a special deathmatch mode with respawning barrels :) !!!
        - Fixed a bug that MAY have caused some 'consistancy failures'
          with more than 4 players (the more players, the more this bug
          happened).

     Demos:
        - Demos now record the mouse look, change of color, change of
          name, and the messages (talk key) when multiplayer!!
        - Demos now record the timer, so you don't need to set -timer
          when you playback the demo.
        - Demos are somewhat 'compressed' and takes less space.
        - Fixed demos not being recorded when you exited using F10 key.
        - The 'q' key no longer ends a demo recording. Too many times
          someones presses this key by error. Now use 'F10' to end a
          demo (or quit from the menu).
        - Older demos may not run well. We don't like putting a lot of
          dirty code for the sake of backward compatibility. Especially
          now with the mouse aiming, old demos just look crap! They're
          always looking straight ahead! Anyway, before sending your
          bug reports : we're trying all we can to keep the compatibilty,
          we know a lot of old demos don't playback well now... we're
          trying to fix that. For now, just keep your old exes to play
          your old demos!
        - Fixed a bug with demos not recording the right name for the
          Deathmatch Rankings.
        - Demos doesn't record pause now.

     New mappable controls (Setup Controls menu):

        The Setup Controls menu has been reworked. It now accepts a lot
        more combinations. eg: you can now 'Backward' and 'Use' with one
        key.

        - Weapon Keys !!! Map your preferred weapons to easily accessible
          keys!
        - Deathmatch Rankings (it was stuck to 'f', now mappable)
        - Talk key (used to be 't') now mappable.
        - F11 : gamma key is back, I removed the key when I put the gamma
          in the menu, but then I could have let the key. I restored it.
        - Jump key, everybody on da plasma at map01!

     Menus keys remapped:
        - F5 (used to be lowdetail) : since lowdetail is no more useful,
          this key activates the Video Options menu.
        - F7 (used to be endgame) : now calls the main Options menu.

     Miscellaneous:
        - Added joystick support : useless but demanded... so there you
          have it, and since we don't do it half : you have support
          for the 'hat' plus 6 joystick buttons. Check the 'Joystick
          Support' section for more.
        - Removed the translucency from 2sided walls. There still need
          to do an 'editing' support for this, so that new-made levels
          can use it...work in progress.
        - As requested, a '-fuzzy' parameter disables the translucency
          and restores the old spectre 'fuzz' effect. Hey! We DO KNOW
          that translucency is too low on the spectres (ie: too much
          visible), but that's another problem! As we have tested, the
          spectres look MUCH better with a high translucency than with
          the old fuzz effect...
        - Can now use keypad arrows in the menu, as requested.
        - A new cheat to fly around levels, this is NOT FOR MUTLIPLAYER.
          Don't mail us to know about it, we won't tell you!!!
        - Added 'crunchy' sound when a sector crushes a dead corpse :)
        - Restored the ENDOOM screen ('beg' end screen).
        - Ctrl-C no longer interrupts the game, as requested, now use
          Ctrl-Break to cleanly exit at any time.

     Bugfixes:
        - Fixed autodetection of Ultimate Doom, however it stills shows
          'Doom Registered Startup' on the title bar.
        - Some new features like rocket trails were disabled when playing
          back an old demo, but wasn't restored when starting a new game.
          Fixed. (this was a problem with in-game demo sequences)
        - Fixed the problem with people having 'detaillevel 1' in their
          default.cfg. The game exited with an error message.
        - Fixed the messages was offset a little in some resolutions.
        - Fixed the config not saved when playing back or recording
          a demo.
        - Fixed the 'RROCK17' texture not found with Doom1/Doom Ultimate.
        - Fixed a bug with 'french' keymap used when it should not. Now
          use it only for the french version, so you have 'qwerty' keymap
          when entering messages, American people happy?
        - Some other boooring little bugs crushed with our mighty feet.

     In development:
        - Transparent water in development (test it at map30)
          this is unfinished and given as a 'preview shot', if you
          like/dislike please mail us!! We think that it looks
          much better than Quake2's transparent water. If you dont
          think so, mail us, but then please read first the
          following!

          SNEAK PREVIEW HINT:

          To see it, with Doom2, go at map30. Right now, its slower
          than it could be so don't look at the speed, it will be
          done a faster way later.. just wanted to do a fast preview
          so that you can tell us what you think about it!!

          Still to do : all kinds of sounds when walking/jumping into
          water, new colors when underwater, different sound when
          under water, new sprites when shooting into water and so on...

        - Chase cam! Use the 'c' key when in '-devparm' mode to test
          this. Remember: its just a quick addition, unfinished.
          Anyway real cool to look at demos with this.

        - Solid corpses : corpses stack one on another. This will be
          implemented as a multiplayer option for fun deathmatches.

          SNEAK PREVIEW HINT:

          For now, you can test it with the -solidcorpse option.

          Consider this as a quick way to see the new walk over/under
          possibilities.

          New problems arise in this mode, sometimes you're blocked
          by corpses, and there should be a way to clear out the path!

        - Better things-on-top-of-things handling : if you walk over
          a monster and the monster moves, you should move with it.
          That's not implemented right now: if the monster move,
          you fall.

        - Some kind of detection of the old skys, disabling the sky
          from moving when mouse looking or something like that...

## 1.11 (1998-02-14)

        - Full support SVGA : can switch to any VESA2 mode with the good
          aspect ratio, can switch video mode in the menu, save video mode
          in default config
        - We have added - Transparence - , better say 'translucency', which
          replace the old 'partial invisibility' effect. A selection of
          objects are now transparent : BFG and Plasma balls, monsters fireball,
          bullet puff, ...
        - Full setup controls from the game menu, much better than 'setup',
          now you can assign any 'control' to any key/mousebutton or joybutton.
          Assign mouse and keys to anything.
        - Free look : look up and down like Heretic (mouse supported).
        - Multiplayer menu: choose your preferred color and enter your name.
          The name of the players are displayed in the deathmatch rankings,
          and also when receiving messages. You can change your color at any
          time while playing a net game (your name too)!

     Mutliplayers News
        - We have added support for 8 player. We could not test it much, but
          it seems to work fine now.
          Test it, and send us a report if it run great. Thanks.
          However you'll need a deathmatch launcher which supports more
          than 4 players... why not try our great launcher called 'Doomatic'?
        - We have added 7 'deathmatch' colors (for a total 11 colors).
        - We have added 'preferred weapons order'. However we didn't finish
          it at the time you read this, so its not configurable in the menu
          right now , but you can edit the default.cfg (hint)

     Compatibility support
        - can load demos of doom v1.9, some new additions are automatically
          disabled when playing back older demos so that they run fine.
        - Support dehacked patches : use -dehacked <filename.deh>
          If you like superweapons patches, and the like, it should work
          no problem with our support. The difference is that now you don't
          need  to patch the exe.

     Minor news
        - play demos from any directory (eg: -playdemo demos\cooldemo)
        - show player's statusbar and hear player's sounds when changing the
          viewpoint while looking at a demo (F12)
        - autorun toggle (menu)
        - mouselook toggle (menu)
        - mouselook y sensitivity (menu)
        - invert mouse for mouselook (menu)
        - Load MIDI file in wad (autodetect if is MUS or MID)
          This one is for you wad creators : just insert a MID as a raw
          file in place of a 'D_XXXX' resource and it works.
        - Some network optimisations (but run only with doomatic).

     Know bugs:
        - Yes, there's transparency on 2sided walls, but be reassured, this
          is a simple 'quicktest' feature, to see what it looks like,
          we've left it until the next version so that you can see it.
        - When a 'marine' is translucent (pickup blur sphere), it looks
          like a green marine... instead of using the player color. todo..
        - You'll have only access to 320x200 video mode, if you don't run
          a VESA2 driver (we don't support mode-X VGA 'tweaked' modes...)
          UNIVBE is recommended, you can use S3VBE20 (freeware) if you have
          an S3 card..
        - automap is not aspect ratio correct in modes like 320x400
        - the intermission screen might display garbage or even crash the game,
          when playing more than 4 players
        - if you use Doomatic : we added the name and preferred colors in
          Doomatic, at that time doom sources were not released... but now
          that we have added name and color in Doom LEGACY, these settings in
          Doomatic don't have effect
        - no win95 specific code, we might do a simple support for win95,
          eg: a setup/launcher program. If you really need something for w95,
          try to convince us!!
        - no waitvbl (no pageflipping)