Doomsday Engine Version History
===============================
Legend: + added, - fixed, * improved/changed

Version 1.02
------------
+ 'settics': set the number of game tics per second
+ 'repeat': repeats a command at given intervals
+ 'r_NoSpriteZ': disable Z writes for sprites
+ 'net_DontSleep': don't sleep while waiting for tics (redraw screen
  instead)
+ 'net_FrameInterval': minimum number of tics between sent frames
+ external music files (played with FMod: http://fmod.org/, which supports
  MOD, S3M, XM, IT, MID, RMI, SGT (DirectMusic segment), RAW, WAV, MP2,
  MP3, OGG, WMA and ASF)
+ 'playext': play a music file
+ DED Manager 1.1: (slightly limited) DeHackEd support
+ Line Type and Sector Type definitions in DED files (v3)
+ Music definitions can have a "File name" property
+ 'ConsoleKey': keycode of the console activation key (default is 96)
+ 'ConsoleShowKeys': show keycodes of all pressed keys in the console
+ -renorm option: recalculate all MD2 vertex normals when loading, takes
  some time but fixes models with incorrect normals
+ colored sector lighting
+ new model flags: df_movyaw (0x100) aligns model yaw angle with movement,
  df_nointerpol (0x200) disables interpolation for the frame,
  df_brightshadow2 (0x400) renders with additive blending and alpha=1,
  df_alignyaw (0x800) aligns model yaw angle with camera, df_alignpitch
  (0x1000) aligns model pitch angle with camera
* server version incremented to 4 (old demos incompatible)
* client interpolates demo view angles
* flats (floor/ceiling textures) handling revised, now it's possible to use
  any loaded lump as a flat
* size, color and Y offset of dynamic lights and flares are determined by
  analyzing the source sprite (adjust with r_dlMaxRad and r_dlRadFactor)
* psprite models drawn differently, now won't go inside walls
* sprites won't be stretched to fit whole texture, makes them sharper
* model spin gets an offset based on thing type
- client moves mobjs within sector when sector height changes
- midtexture placement for segs with a missing toptexture
- joystick init stopped at failed axis range setup
- OpenGL: didn't make sure projected points were on the screen
- sky mask wasn't applied to walls with zero-height backsector
- there was a floorclip related bug in client's mobj unpacker


Version 1.01a
-------------
* large textures are allowed to have one alpha pixel (ZZZFACE3!)
- midtexture placement in sectors that have an invisible floor
- multi-pass skyfix


Version 1.01
------------
+ when a 2-sided line's upper texture is missing, the middle texture (if
  present) is extended to full height
+ plane linking: for sectors whose all lines' both sidedefs point to self,
  planes are linked to surrounding sector
+ 'FlareZOffset': lens flare Z offset multiplier, greater values move
  flares nearer the camera (in Z buffer), also affects flare size
+ DED v2: a Values block for free-form string definitions
+ player sprites (HUD weapons) can be replaced with models
+ 'r_WeaponOffsetScale': multiplier for psprite (x,y) offsets with models
* when a sector is missing lower textures for all its lines, the floor of
  the sector is drawn at the height of the surrounding sector's floor
* masked polygons (sprites, masked walls, models) always drawn with Z
  writes enabled
* Z bias of drOpenGL and drD3D slightly increased
* WAD loading messages are a bit clearer
- -paltex uploaded MD2 skins in the wrong format
- newline no longer required after last line in .cfg files
- if .GWA doesn't exist W_AddFile() isn't called for it
- Y offset of middle textures of 2-sided lines was incorrect in some cases


Version 1.0
-----------
+ all new network code (complete client/server)
+ dedicated server (runs in a text mode console)
+ MD2 support (replace specific frames of sprites)
+ MD2s lit with dynamic lights
+ frame interpolation for MD2s
+ dynamic light blending mode zero (multiply)
+ configuration dialog for D3D renderer (driver, color/texture/Z depth)
+ new vertices are inserted in wall segments if needed, reduces stray
  pixels
+ subsector planes rendered as a triangle fan around midpoint, if necessary
+ Doomsday Engine Definition (DED) files
+ DED files can Include with wildcards (checks for recursion)
+ definitions in DEDs are mostly patchable (same ID overwrites old def)
+ Map Info definitions (map name, author, fog, gravity, sky, etc.)
+ Map Info with ID '*' will be used for maps that do not have Map Info
+ command-line option -out redirects output to a given file (Doomsday.out
  by default)
+ command-line option -defs specifies the main definition file
+ mouse-driven user interface routines
+ network service provider/protocol and server setup using graphical UI
+ client setup and connecting to servers using graphical UI
+ background for startup messages
+ startup messages rendered with shadows
+ console text rendered with shadows
+ 'ModelMaxZ': farther than this things are always rendered as sprites
+ copies of P_XYMovement and P_ZMovement used for client-side mov
  prediction
+ Pause key can be used in bindings (as 'pause')
+ network settings stored in console variables (npt_Active, npt_IPAddress,
  npt_IPPort, npt_Modem, npt_PhoneNum, npt_SerialPort, npt_SerialBaud,
  npt_SerialStopBits, npt_SerialParity, npt_SerialFlowCtrl)
+ 'r_FullSky': if nonzero, whole sky sphere is rendered if sky is visible
+ MFF_SKINTRANS uses sprite color translation as a skin index for MD2s
+ demo recording and playback done in the engine (demos are recorded
  server->client traffic)
+ demo recording can be started and stopped at any time
+ commands 'playdemo', 'recorddemo', 'stopdemo' and 'demolump'
+ subdirectories for DEDs and demos (defs\ and demo\)
+ each Doomsday client has a unique (random) ID number (in Client.ID)
+ LZSS compression used for demos (LZSS.DLL), demo file extension is .CDM
+ invisible floor/ceiling hack: if a sector has a missing lower/upper
  texture in all its lines, the floor/ceiling of the sector will be drawn
  at the same height with the surrounding sector's corresponding plane
+ planes with glowing textures cast dynamic lights on walls and things
+ 'WallGlow' and 'GlowHeight' control wall glow rendering
+ 'i_JoyDevice' chooses the joystick to use if there are many
+ 'ModelAspectMod' scales models vertically; the default value of .833334
  negates the VGA aspect ratio used for the world
+ 'net_MSQ': keep monitoring the network send queue, print in console
+ 'net_Latencies': (for server) show client information (timing and ticcmd
  buffering)
+ 'net_Dev': (for server) show the net_Latencies info on-screen
+ 'net_StressMargin': (for server) max value for client lag stress, if
  stress becomes greater, move client's ticcmd run time forward or backward
+ 'net_StressDampen': (for server) tic interval at which client lag stress
  reduces by one unit
+ 'net_SkewDampen': (for client) max number of frames to allow time
  interpolation of frames, after this the frame continuum is reset
+ 'net_ShowSkew': (for client) print time skew details in console (delta of
  last frame and the current skew, in tics to interpolate the frame forward
  or backward in time)
+ 'kick' forces the given client to disconnect (for server)
+ 'ping': clients can ping the server, the server can ping any client
+ 'sv_MasterAware': (for server) if nonzero, TCP/IP servers inform DMaster
  that they're running
+ 'MasterAddress': TCP/IP address of the master server
+ 'MasterPort': TCP/IP port of the master server
+ DED Manager 1.0, a Windows app for doing DED related stuff, and most
  importantly, exporting Info.h, Sounds.h and action function link files
+ DMaster 0.1, a really simple master server (in fact a DirectPlay Lobby)
* default memory zone increased to 24 megs (shown as Mb in startup)
* command-line option -window is the same as -nofullscreen
* Game DLL API changed
* MIDI player uses MIDI streams, not single commands
* wall orientation affects lighting (lighter walls facing east)
* -maxzone accepts K and M as suffixes (kilobytes and megabytes)
* fog on sky sphere ('r_SkyDist' sets sky sphere radius)
* source code rearranged into a more logical directory structure
* subsector visibility tests are more accurate, reduces stray pixels
* masked walls sorted together with sprites and models
* modeldef.txt no longer used, models defined with DEDs
* textypes.txt no longer used, texture environments defined with DEDs
* sprite lump handling much more relaxed, sprites can be patched
* DDMF_SHADOW(2) flags result in more translucent sprites/models
* only visible models rendered
* dlBlend 1 is always used with fog (dlFactor multiplied by 0.6)
* bamsAtan2 uses 64-bit integers to allow larger numbers as arguments
* jtNet2 compiles the list of available modems during startup
* buffering of local ticcmds no longer uses maketic (maketic has been
  removed)
* all new input code (keyboard, mouse, joystick)
* flares and dynamic lights are much brighter
* renderers modify viewport Z range instead of scaling projection matrix to
  do Z bias, reduces stray pixels
* some default values changed: dlFactor=0.6, dlBlend=0, FlareIntensity=50,
  r_FlareMinSize=300, r_dlMaxRad=256, r_dlRadFactor=3
* dynamic light texture made a bit more realistic
* 'net connect' uses an index number to identify servers
* 'net mconnect' connects to a server received from the master
* .CFG file includes the Game DLL version string on the first line
* 'load', 'unload' and 'reset' go to startup screen mode to show progress
  information
* secondary lens flares diminish as they approach view borders
- pitch bend in MIDI songs
- skywalls (invisible Z buffer masks) no longer have dynamic lights on them
- no more "long debug message has overwritten memory" errors
- subsector plane vertices are verified for correct rendering (zero area)
- lens flares won't be occluded by their source
- font renderer character coordinates (rendered wrong at least with my TNT)
- renderers no longer use whichever Doomsday window they happen to find
- texcoords of masked textures clamped vertically, reduces gfx errors
- texcoords of masked textures clamped horizontally when necessary
- D3D renderer sometimes set the wrong texture parameters
- sounds have proper handles, prevents mixups with is-playing tests
- a division by zero was made if a texture was fully transparent
- minor jtNet2 bugs


Version 0.99.6
--------------
* game DLL API changed: old DLLs are incompatible
* DLaunch: disabled parent -> children skipped (example: JHeretic's -warp
  option)
+ DLaunch: modifying an option's value checks the option
+ per mobj dl scaling: 1, .75, .5 or .25 to dl radius (won't affect flares)
+ spralign 3: align sprites to view plane, but not fully
- console border
+ cvar consoleDump: all console text is dumped to Doomsday.out
* numpad keys have their own key codes (apart from /,*,-,+ and enter)
+ scroll lock and num lock can be used in bindings (scrlock and numlock)
- cvar i_mouseInvY: for some reason this wasn't a cvar earlier
+ mouse wheel support (cvar i_mWheelSensi controls sensitivity)
* CalcSectorReverbs() and texture type handling moved into the engine


Version 0.99.5
--------------
+ console commands can set a return value (DD_CCMD_RETURN)
* rendquad_t is 4 bytes smaller and doesn't use a nameless union/struct
- jtNet displayed serial link config dialog (sheesh...)
- netgame events that arrive during rendering are now handled correctly
  (could cause a crash when starting a netgame)
+ option -nowsk: disable Alt-Tab, Alt-Esc and Ctrl-Alt-Del
+ cvar r_dlMaxRad: maximum radius of a dynamic light
+ cvar r_dlRadFactor: a multiplier for dynamic light radii
- clipping bug that sometimes caused subsectors to disappear when the
  camera was exactly atop one of their edges
* view borders drawn using the actual width of the patches (Hexen and
  Heretic have view borders that are 4 pixels thick, Doom uses 3 pixels)


Version 0.99.4
--------------
- "bind (event)" clears all +(event), -(event) and *(event)
- 2-sided middle textures are rendered correctly
- flares from sprites aligned to the viewplane won't flicker at certain
  angles
+ D3D: gamma correction using DirectDraw's gamma control (fast!)
+ option -nogamma: disable DirectDraw gamma, modify texture colors manually
+ cvar r_flareminsize: the minimum size for flares that can have secondary
  flares (200 is pretty good)
+ light source vertical offsets
* ccmd listbindings can take a search parameter: "listbindings a" will list
  all bindings to events that begin with A
* faster dynamic lights (better algorithm + clipping)
+ cvar dlclip: dynlights are clipped (subsector polygons *not* used when
  rendering floors/ceilings)
* spralign 2: attempts to hide sprite flatness (like spralign 0, but stops
  slanting sprites if angle > r_maxSpriteAngle)
+ cvar r_maxSpriteAngle



