=====================================================================
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 V_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.

=====================================================================
Changes since Eternity Engine v3.29 beta 3
=====================================================================
=====================================================================
05/18/01

Added new flags2 bit MF2_NOCROSS to handle making projectiles not
activate lines. This was previously handled through a switch
statement in P_CrossSpecialLine, but this approach required constant
updating for new thing types, and also didn't allow for this
attribute to be given to things converted into projectiles via
DeHackEd. All this is now taken care of. Note that Arachnotron
plasma was never handled in the switch though, which means its
always been able to activate lines (odd I've never noticed it
happening anywhere all this time). This "feature" is retained, of
course.

=====================================================================
05/23/01

Added scriptwaitpre function for FraggleScript -- waits until a
script is started rather than until all instances have finished.

Changed the == operator to use mobj comparison when both operands
are of mobj type. This makes it more useful, as well as compatible
with Legacy's behavior.

Made changes to create_variable() to disallow creation of mobj
reference variables inside the hub script. These references could
persist between levels with values pointing to freed heap-dynamic
memory. Access or manipulation could cause corruption of the zone
allocator's heap. This problem has been known since I was still 
calling this port a mod of SMMU, but I didn't know how to fix it 
until recently. Disallowing reference creation is more elegant and 
fail-safe than trying to fool with reference registries or trying to 
make the mobj_t's persist themselves (and its easier too :P).

=====================================================================
05/25/01 - 05/26/01

Made major changes to g_game.c and d_main.c in order to restore MBF
demo-recording and playback functionality. Demos must now be loaded
into the wad directory, and can no longer be loaded directly from
file. Regular recording and playback of demo files now works properly,
but time demos and fast demos have not been tested. Also repaired
various other small, questionable changes in g_game.c back to their
MBF forms, including a loop merger in G_Ticker. Its possible some
features have been broken by these changes; they'll need to be
gradually isolated and repaired one by one if so, but thus far, I've
not noticed any problems.

Demo version recording is currently broken because Killough's format
assumes the version number will fit into a byte. 329 is obviously
bigger than 255, so that's a problem. For now its recording 255 and
then on read, if it sees 255, it assumes 329. This won't work in the
long run obviously, so the need for a new, secondary demo format is
now clear. Also, there's no real way to record demos on a map that's
not named MAPxy or ExMy.  That's a problem too, but not an easy one
to fix.

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

I have retrofitted Eternity to support linedef type 272 as WR Start
Script for compatibility purposes, at the urging of SoM_ and a few
other people. This compatibility flag is off by default, of course.

Work on FS array support and dialogue continues, slowly. Fixed
camera HOM bug related to deep water sectors -- the rendering code in
R_FakeFlat() was always using the player's sector's heightsec, even
for cameras. I've fixed this by giving cameras their own heightsec
field, and having it updated any time a camera is spawned or
moved (this is necessary to spare multiple calls to 
R_PointInSubsector() during the rendering of every frame). 

Special thanks to Julian of rorDoom fame for helping to nail down 
the exact line of code responsible for the above odd behavior :)

Fixed a well-hidden bug while messing with the intermission cameras
in wi_stuff.c -- turns out fraggle coded a hard limit to the number
of them allowed -- 128 -- but then didn't put any range-checking
into WI_AddCamera() to make it stop trying to add cameras to the
array after there were too many. Fixed with range-checking, but it'd
be more ideal to remove this limit eventually.

=====================================================================
06/11/01

Removed an I_Error call in S_StartSound that checked the sfx_id
number to see if it was in range when RANGECHECK is defined -- this
is unnecessary now, and doesn't work any more since fraggle rewrote
the code to use hashing. This broke playing of new sound lumps in
EE 3.29b3.

=====================================================================
06/12/01

Integrated Julian's fixes to files in the DJGPP folder including a
new local allegro.h file that adjusts defines for the library's
version number, and fixes to the inline assembly in m_fixed.h and
r_things.c that remove actual bugs in Killough's code, and also
enable compilation on GCC 2.95.* and later.  Unlike the lxdoom code,
Julian's code does not seem to break wall sliding or any other
game engine behaviors.

=====================================================================
06/17/01

New demo format changes: (comments from source)

  1. The old version field is now always written as 255
  2. The signature has been changed to the null-term'd string ETERN
  3. The version and new subversion are written immediately following
     the signature
  4. cmd->updownangle is now recorded and read back appropriately
     (this supports mlook/keylook!)

  Note that the demo-reading code still handles the "sacred" formats
  for DOOM, BOOM and MBF, so purists don't need to have heart attacks.
  However, only new Eternity-format demos can be written, and these
  will not be compatible with other engines.

=====================================================================
06/25/01

Beautified ser_main.c, added GPL headers to files in the DJGPP
directory, and increased a buffer's size in Ser_Error() from 100 to 
1024 to prevent overflow on relatively short messages.

=====================================================================
06/27/01

Did more bug-fixing for FS functions and made them more orthogonal
with respect to optional parameters. Identified some possible issues
with string buffers that are strdup'd but are less than 256 chars
long -- will do further research to determine if its a problem.

=====================================================================
06/30/01

1. Added an MBF demo compatibility fix to the P_CanUnlockGenDoor
   prboom bug fix.

2. Added demo compatibility to some long reflection code (shouldn't
   happen in old demos anyways, but its still a good idea).

3. Enhanced lost soul bouncing demo fix with new prboom code.

4. Added EV_VerticalDoor prboom fixes, but customized code to work
   without rewriting the whole function (not enough time or good
   enough reason).

5. Added cph's bobbing fix to use the old method when playing old
   demos

I'm now up to date with prboom's bug and demo comp. fixes, with the
exception of the G_ReloadDefaults savegame issue, which I need to
verify myself. Phew!

Implemented BEX [SOUNDS], [MUSIC], and [SPRITES] blocks to fully
deprecate the old DeHackEd-style Text substitution. Keys consist
of the default sound, music, or sprite names, and key values do
not change even if multiple patches are applied (see Ty Halderman's
BOOM change log for details, I've implemented it to his original
vision).
