=====================================================================
Changes since Eternity Engine v3.29 beta 2
=====================================================================
=====================================================================
01/11/01

Enabled 640x400 non-pageflipped video mode. fraggle had accidentally 
left set_gfx_mode() unable to assert that it had set the mode in order 
to test the failure recovery mechanism. This caused the program to act 
as if though 640x400 non-pageflipped was unavailable due to hardware 
issues when in reality it was just acting like it failed even when it 
didn't.

=====================================================================
01/13/01

Added a check for null strings in C_Printf() to stop possible stdlib
seg faults.

Added a function to insert hard linebreaks into formatted console
strings at the last whitespace character to prevent text being lost off 
the right-hand side of the screen. Why it was happening I'm not sure, 
although a miscalculation in C_AddChar() or HU_StringWidth() could be 
the culprit. A possible TODO for later debugging, if I decide its 
worth it. Character-by-character wrapping would be a little less 
elegant in some cases, but more fail-proof.

=====================================================================
01/24/01

Changed the conversion in t_parse.c::stringvalue() from fixed_t to
float into a conversion from fixed_t to double, with SoM's advice.
fixed_t is a 32-bit precision number, so the 23-bit mantissa of the
float is insufficient for large or small values. The 52 bits in a
double are more than enough for even the worst case scenario.

=====================================================================
01/26/01

Michael Exline (Giomancer) pointed out that the 272 linedef type was 
still being overloaded for MBF reversed sky transfer and for a WR 
script activation type. This has been repaired both in Eternity and 
SMMU by moving the offending script type to 280 and leaving the others 
alone. This will break the start map and whatever few SMMU maps have 
been made, but we believe the impact is minimal if not zero since 
little mapping has gone on with the engines thus far.

=====================================================================
02/15/01

Added final demo compatibility fix from prboom to T_MovePlane. Floors
will no longer move if monsters on them have their heads stuck in the
ceiling during old demos, which was the case in the original DOOM. 
Normal play is unaffected, and this change is not currently included 
under the comp_floors variable. Special thanks to cph.

=====================================================================
03/16/01

Added "float" keyword as an alias to "fixed" for FraggleScript at the
urging of SoM. The math is still always fixed-point as opposed to 
floating-point, which is why I originally changed the keyword, but it 
should be supported for Legacy source-compatibility at least.

Removed an unused string buffer from D_DoomMain() left from when I had 
two separate resource wads.

Resolved some implicitly declared functions to ensure appropriate type-
checking.

Patched V_DrawPatchTranslated(), V_DrawPatch(), and V_DrawPatchTL() 
with MBF code. fraggle did some questionable optimizations that 
could have possibly been causing segv's under certain circumstances.
With my machine doing what it does, its difficult to tell, but I was
getting consistent crashes at line 642 in V_DPT. If the MBF code
still crashes, then its still no loss. Add instructions are not a major
impact on speed anyways :P

Fixed a boo boo in C_AdjustLineBreaks() that failed to add characters
encountered after lastspace to the length of the new line after adding 
a line break -- characters could still be lost on latter lines due to
count reflecting a lower number of characters than what was actually
on the line.

Repaired a MAJOR bug in HU_StringWidth() that I can't believe I didn't
catch earlier when trying to fix the console -- fraggle accidentally
inverted the test condition so that when the index into the font 
character array was out of range or the character graphic didn't exist, 
it would try to dereference the character and get its size information. 
What it should have done in that case was return 4, the default gap. 
Instead, it returned 4 for every normal character, making DOOM think 
that strings were much shorter than they should be. This could have 
also been responsible for some segv's or page faults, but if so, they 
must have surfaced inside other methods that rely on HU_StringWidth()'s
return value. Also fixed my earlier hack to V_StringWidth to add 4
for null characters, since I now understand what's going on in the
code ;)

=====================================================================
03/20/01

Tobester helped find an allocation bug -- M_ReadFile() didn't pass in
owners for the buffers it allocated, so it was impossible to implicitly
free them by using Z_ChangeTag(buffer, PU_CACHE) -- this caused the
game to bomb out with a Z_ChangeTag error if you played a demo from
an external lmp file after it was done playing.

Added miscellaneous FS functions from Legacy, thanks to SoM.

Started FraggleScript HU graphics support.

=====================================================================
03/21/01

Continued addition of FS HU gfx functions. 

Added SoM's fixes to floorheight() and ceilingheight() to allow 
crushing of objects.

Investigated reports by Afterglow of FS malfunctioning on his new
start map, but nothing conclusive turned up. It worked for me.

Tobester helped find out that Eternity cannot currently record demos.
Will research this issue, but I'm not optimistic about it ever being
able to write DOOM-format demos. In fact, I may remove writing support
and confer with fraggle on a new format to support SMMU/Eternity
features such as mlook/keylook, jumping, etc. It'll still play old
demos, yes, but only write new ones. What the use of writing DOOM-
compatible demos from Eternity would be, I do not know anyways :P

=====================================================================
03/24/01

FS HU pics initial implementation completed -- added HU_FSPicErase().

Added numhelpers console command to set number of helper creatures.

Strengthened test on missile explosions on the sky to demo_version
329, since this would break BOOM and MBF demos.

Implemented the DORMANT mapthing flag and internal handling, including 
an objawaken() function for FraggleScript. The new flag is value 512
(128 is FRIEND, and 256 is reserved for checking for bad editors).
Dormant things are invincible and will remain in their spawnstate
perpetually until a script wakes them up, similar to Hexen.

=====================================================================
03/31/01

Repaired a major bug in HU_CoordHandler that copied a pointer to a
local string buffer into a global struct pointer, causing access of
freed heap-dynamic memory. This was definitely the cause of the random 
screen corruption occuring on the automap coord widgets, and may 
possibly have been causing some of the V_DPT crashes, if not all of 
them, seeing that the random letters often appeared with seemingly
random color range translations as well, and the V_DPT segvs occured
on lines that access the outr[] array, an index into a color range
translation table O_O

Added I_Error() calls to the V_DrawPatch* functions when RANGECHECK is
defined for debugging purposes. Ignoring the problem is not very
helpful to the programmer at all.

Strengthened some more demo version checks to 329.

Fixed FraggleScript playertip function to actually use HU_CentreMsg
like its supposed to, and added HU_CentreMsgTimed to allow for timedtip
and timedplayertip functions similar to those in Legacy.

Added Halif Spots and Cleric spots for Eternity TC, and added camera
nodes for general use. These work similarly to boss brain spots.

Completely rewrote Eternity's global colormap substitution so that it no
longer reallocates the colormap array, does not copy colormaps into
colormaps[0], and does not cause a memory leak by failing to free the
light tables before rebuilding them. Rather now the rendering code
itself, particularly in R_SectorColormap, decides on the colormap to
use by examining the mapinfo value loaded from P_SetupLevel. This
now also requires all global colormaps to be between C_START and C_END,
since it uses the mapinfo value to get an index into the preloaded
colormap array -- its a good idea for consistency as well as efficiency.

Fixed some out-of-range array index problems in the t_dump and t_run
console commands, and also made their usage messages consistent with
the command names.

=====================================================================
04/01/01

Repaired various small bugs in FraggleScript function handlers
including bounds checking for all internal array access such as
the use of player numbers.

Implemented the binary invert operator ~ for FraggleScript.

Added SoM's else/elseif keywords to FraggleScript.

Beautified TerrainTypes code.

=====================================================================
04/02/01

Implemented lava TerrainType.

Found yet another MAJOR bug by enabling I_Error() in the V_DrawPatch*
functions -- V_WriteText() was only checking the screen for overflow
in the x direction and only at the right side of the screen. When the
console was in full-screen mode, this allowed it to draw characters
part-way off the bottom of the screen when it was scrolled. Without
bounds-checking, this was impossible to catch. Repaired by fully
qualifying the draw against all four screen boundaries.

=====================================================================
04/04/01

Added user-specifiable console scripts, set via config file. They'll
be automatically executed at the end of game setup.

=====================================================================
04/10/01

Did major work on Eternity's dialog system, adding module p_dialog.c

Attempted to repair numhelpers console command, not tested yet.

=====================================================================
4/11/01 - 05/02/01

Repaired FraggleScript void functions so that they now return the int
value 0 rather than propagating the value of the last function return.

Repaired a lack of range-checking in the FS startscript function.

Repaired the ++ and -- operators to work properly on the fixed type.

Dialog development has been delayed for now.

=====================================================================
5/09/01

Attempted to repair inline assembly code in m_fixed.h for GCC 2.95
and later, but the code from lxdoom that is in SMMU v3.30 causes
strange behavior when the player slides against walls when compiled
under GCC 2.81.  I am currently researching ways to better select
whether to use the assembly or C code, and if the assembly from
lxdoom really works properly under 2.95.  With optimizations enabled,
the assembly version of FixedMul only saved one instruction, and an
arithmetic shift at that, which doesn't eat a lot of processor time,
so people having trouble with it should be able to use the C versions
in the meantime without worrying about performance hits.