Doomsday version 1.9.0-beta6

From Doomsday Wiki
(Redirected from Version 1.9.0-beta6)
Jump to: navigation, search
Doomsday 1.9.0-beta6
Release date: February 25, 2009
Focus: new, refactor, API, fix
Git tag: 1.9.0-beta6
Download:

deng Files

Release index


These are the release notes for version 1.9.0-beta6 of the Doomsday Engine. Beta 6 represents almost two years' worth of work toward the 1.9 series. A lot has changed under the hood, and there are quite a few visible changes as well. However, our work is still ongoing, so this release unfortunately has some known issues. The biggest is perhaps multiplayer games, which are not working in this release. The next beta is planned to address network game issues only.

Some highlights:

  • Redesigned, more powerful control bindings subsystem. Axis controls can be bound to player controls in the same way as keys. There is a stack of binding contexts that allows using the same key/control for multiple things depending on the game and UI state (see listbcontexts:ccmd).
  • UI graphics tune-up. A new "busy" mode was added, replacing the old startup screen and progress bars. In the games, fonts are sharpened with HQ2x scaling.
  • OpenGL rendering plugin integrated into the engine, and support for Direct3D dropped. This eases future development of the renderer significantly.
  • BSP and gl node builder plugin integrated into the engine. Existing BSP and gl node data present in maps is now ignored, we opt to always build our own.
  • New Materials system.

Upgrading

If you are upgrading an existing installation of Doomsday, note the following:

  • There has been numerous changes to the control bindings system. We recommend resetting your old bindings with the following console command:
clearbindings; defaultbindings

Windows Vista

Any existing Doomsday installation must be fully uninstalled prior to installing this release. The default runtime folder and location where Snowberry saves user profiles has been changed in this release. Doomsday now stores data separately for each user account.

Known problems

Multiplayer games

Networked games are NOT working in this release. You are able to connect to a server but the client is unable to move.

Audio

The audio plugin system is not fully working in this release. Therefore we recommend that you allow Doomsday to use the default audio driver (SDL_mixer), and NOT an alternative plugin such as dsOpenAL and dsDirectSound.

Reported bugs

You can see a list of the bugs already reported in the Beta 6 bug tracker.

Fixes

Map format

  • Support for packed sidedefs. This method of storing sidedefs is used to extend the WAD format sidedef limit and at the same time, reduce the size of maps. Both DOOM2:Plutonia and DOOM2:TNT are once again fully playable.
  • Fatal error when attempting to build sector line and subsector tables for maps with damaged/invalid data structures (e.g. STARGATE.wad [1]). Relationships between subsectors/segs/sidedefs/linedefs read from the map data lumps are not assumed to be valid. Instead, determine the relationships at load time and repair where possible else output a warning and abort the map load attempt gracefully.
  • Infinite loop when attempting to load 2002ado.zip::E3M5 caused by an oversight in the node builder.

Renderer

  • Numerous lighting inconsistencies between different world surfaces and objects.
  • Player's in-void status was not reset on map load. This led to HOM in the sky until the player moved, if said player was in the void at the end of the last map.
  • Algorithm used for determining the position of automatically calculated lights and halos on sprites was broken. This resulted in halos which suggested the light origin was always in the top left quarter of the sprite.
  • Filters and special filter drawing, affecting the view border in all games.
  • Emulate AASTINKY/AASHITTY (etc) texture handling used for DOOM.exe renderer effects.
  • Texturing problems with maps built by Oblige ([2]).
  • Until a mobj moved, the angle of all models used by it was incorrect ([3]).
  • Game objects not drawn if the sector they are in is not visible ([4]).
  • HQ2X "Smart Filtering" broken on Big Endian systems ([5]).
  • Halo offset calculated incorrectly in LO_AddLuminous.
  • Sky top colour was always determined from the original sky texture regardless whether a texture replacement was in use.
  • Dynamic lights for palette-translated sprites were coloured according to the original (un-translated) sprites.
  • High resolution textures/flats/patches/model skins not affected by rend-tex-gamma.
  • Drawing Models whose skin is determined by cycling through a range over time, would continue animating with the client paused.
  • When drawing the console, if a background material is set, it would also be used on both the border and the shadow.
  • Memory leak in BlackOutlines().

Audio

  • MIDI music broken when playback is attempted using the sdl_mixer driver.
  • Subsector reverb values were calculated incorrectly (always indexed using a base of zero instead of the subsector->firstseg offset).
  • Environmental audio effects were not affected by changes to the world when in-game.

Definitions

  • Memory allocated for line type definitions was not being released on exit, causing a leak.
  • Default shiny color for models left uninitialized for submodels four and above.
  • line type iparam flag fields read incorrectly.

Console

  • "Strange" keys in the console ([6]).
  • Buffer overflow vulnerabilities relating to the console command line.
  • Cursor height was not scaled correctly according to font size.

Dedicated console

  • Fatal error when trying to move the Doomsday Console whilst in dedicated console mode.

Misc

  • Segmentation violation when attempting to use the add/sub ccmds without all needed paramaters.

Windows

  • Input events were being processed when the main window did not have focus ([7])

Unix

  • Endian issues in the TGA file reader/writer ([8]).

Common code library

Automap

  • Issues with marked points. Now rotated with the map window and not the view frame, are always drawn at a readable scale.
  • Free panning did not respect the rotation angle and instead used the untransformed X and Y world axes.
  • Default colours not taken from the palette ([9]).

UI

  • Expensive to calculate values, required for rendering the menu fog were unnecessarily calculated when the menu was not visible. ([10])
  • "DG_PushMatrix:Stack overflow" thrown as the result of a logic error in the menu draw procedure ([11]).
  • Position and size of the animated player preview visible in the player setup menu were not constant, when using custom sprites with very different dimensions and/or offsets.

XG

  • Use sound played when the player crosses a linedef whose type activation method is "player_cross" and one or more key requirements are set which the player does not have ([12]). The Use sound is no longer played in this instance.
  • Segmentation violation when using the ccmds: move, movefloor, moveceil or movesec. If a mode was not specified it would result in a segfault when trying to dereference a NULL sector ptr to determine its type in DMU.
  • Potential buffer overflow vulnerabilities in XS_GetPlane and XS_GetType.
  • If a map number is not set in an XG end_level line type the exit would take the player to the first map (instead of the next as defined by the map progression) ([13]).
  • Giving armour using the XG power line type would only work as expected if the player had already picked up an armor item ([14]).

InFine

  • If a "Before" script is present for a given map, the music played during the map would be started twice, once before and then again after the script finishes ([15]).

jDoom

  • Crushing floors/ceilings would sometimes get stuck (e.g. in Ultimate DOOM::E2M2) ([16]).
  • Health amount given upon pickup of a Supercharge incorrect ([17]).
  • Relative spawn height for the Revenant's missle attacks incorrect ([18]).
  • Various game objects not moving with the floor ([19]).
  • Any mobj flagged with MF_SKULLFLY would stop moving if their trajectory would intercept another mobj flagged with MF_SPECIAL.
  • Fatal error when attempting to use the console command give when not in-game.
  • Fatal error if all of the player's weapons are changed so that they require ammo and the player completely runs out ([20]).
  • Infinite loop when the player has no ammo of any kind and all player weapons require ammo.
  • Blood spawned by P_DamageMobj even if no damage actually inflicted.
  • Voodoo dolls effecting the "real" player's view bobbing.
  • Able to shoot sky floors with lineattacks.
  • Gap in the statusbar when icarus.wad is played and statusbar is not opaque (due to the ST_ARMS patch being smaller than the used in the IWADs).
  • ST_ARMS positioning issues with the statusbar when playing the HACX mod.
  • Missing skull cursor in the "ReadThis" screens.
  • Attempts to save the game when a map is not loaded would result in the user being told they can't save because they are dead. Instead, display a more accurate/appropriate message.
  • Method of circumventing cheat protection to allow the client the use of various automap cheats in multiplayer games ([21]).
  • Attempting to commit suicide while already dead would ask the player to confirm, even though as they were already dead, suicide is not an option.
  • Segmentation violation when a mobj attempts to change to a undefined pain state ([22]).

Unix

  • Incorrect random number look up table used within the game logic caused by a linking/scope issue which resulted in the engine-side table being used instead.

jHeretic

  • If conditions were right, D'Sparil teleporting would result in an infinite loop ([23]).
  • Infinite loop when the player has no ammo of any kind and all player weapons require ammo.
  • Fatal error when attempting to use the console command give when not in-game.
  • Blood spawned by P_DamageMobj even if no damage actually inflicted.
  • Firemace globes destroyed instantly on contact with the floor ([24]).
  • The Blaster missile was not stored to saved games.
  • Able to shoot sky floors with lineattacks.
  • Attempts to save the game when a map is not loaded would result in the user being told they can't save because they are dead. Instead, display a more accurate/appropriate message.
  • Method of circumventing cheat protection to allow the client the use of various automap cheats in multiplayer games ([25]).
  • Attempting to commit suicide while already dead would ask the player to confirm, even though as they were already dead, suicide is not an option.
  • Segmentation violation when a mobj attempts to change to a undefined pain state ([26]).

Unix

  • Incorrect random number look up table used within the game logic caused by a linking/scope issue which resulted in the engine-side table being used instead.

jHexen

  • Mobj vs polyobject collision detection. In beta5(.1) it is possible to walk right through them once they have moved from their starting position.
  • Raising stairs in Hexen::MAP03 not working correctly ([27]).
  • Clerics could not be damaged by their own throwing bombs.
  • Infinite loop when the player has no ammo of any kind and all player weapons require ammo.
  • Fatal error when attempting to use the console command give when not in-game.
  • Blood spawned by P_DamageMobj even if no damage actually inflicted.
  • After map load, the player's ready weapon would lower and then raise again.
  • The Mage's Wand Missile and the Cleric's Flame Missile not stored to saved games.
  • Able to shoot sky floors with lineattacks.
  • Attempts to save the game when a map is not loaded would result in the user being told they can't save because they are dead. Instead, display a more accurate/appropriate message.
  • Method of circumventing cheat protection to allow the client the use of various automap cheats in multiplayer games ([28]).
  • Attempting to commit suicide while already dead would ask the player to confirm, even though as they were already dead, suicide is not an option.
  • Segmentation violation when a mobj attempts to change to a undefined pain state ([29]).

dsDirectSound

  • Linear to logarithmic sound effect volume translation resulted in no audible sound if 3D sound positioning was enabled and the sound effects volume control was lower than maximum.

Changes

  • All game object origins, momentums and dimensions are now stored and manipulated with host system, floating point precision.
  • Aureal 3D audio no longer supported, (via the old a3d plugin).
  • Revised method for handling animated textures and flats to support the original DOOM engine behaviour.
  • The lumps PNAMES and TEXTURE1/2 are no longer required.

DMU

  • Runtime aliases for DMU properties have been removed as they were an unnecessary complication.
  • It is now possible to target a property of another DMU object that by inference, can be reached from the DMU object passed without explicitly specifying so. For example, if the referenced object is of type DMU_SUBSECTOR the properties of DMU_SECTOR are available without having to first retrieve either a ptr or index to the sector followed by a second DMU call to set/get the required property.
  • Polyobjects are no longer accessed through DMU. Polyobjects are now public objects similar to mobjs.
  • Revised DMU property names.

Map format

  • BSP data is no longer required/used by the map loader. New BSP data will be generated automatically by the engine.
  • GL node data is now required in order to load a map and will be generated automatically by the engine. The cvar, bsp-build has been removed also.
  • It is now possible to load a map with zero things. In this instance, a new player thing will be added to the map, located at [0, 0] on the world grid. In addition, the player will be changed to a camera automatically.

Renderer

  • OpenGL renderer moved into the engine.
  • Direct3D renderer is no longer available.
  • Abstract flat management. Lump indices are no longer used as identifiers anywhere.
  • Redesigned fakeradio back end.
    • Now fully dynamic and updates in response to map geometry changes whilst in-game.
    • Improved shadow edge generation. Now handles complex geometry much better, greatly reducing the frequency of glitches and other visual artifacts.
  • Redesigned decorations subsystem.
    • Decoration origins are now plotted using a new three dimensional approach regardless of the surface they are attached to.
    • Greatly improved performance in large maps by caching plotted decorations and maintaining lists of surfaces with decorations.
    • Potentially allows for any object to be used as a decoration.
    • Added lightlevel range limits to decoration definitions.
    • Decoration origins for the current renderframe now generated once and used for the viewports of all local players.
  • Redesigned lumobj management (dynamic lights).
    • lumobjs are now projected using a new three dimensional approach regardless of the surface they are attached to.
    • Revised memory management. Release all memory tied up in unused lumobjs when the current map is left.
    • Removed fixed limit on the maximum number of visible lumobjs to be depth sorted.
    • lumobjs for the current renderframe now generated once and used for the viewports of all local players.
  • Lighting of all world surfaces and objects is now deferred until just before they are sent to the render lists.
  • Changed rend-tex-gamma: cvar Now accepts a floating point value in the range [0...1].
  • Changed maximum decoration distance from viewer to 2048 world units (was 1500).
  • Combined cvar rend-light-decor-plane-far and rend-light-decor-wall-far, renamed to rend-light-decor-far.
  • Combined cvar rend-light-decor-plane-bright and rend-light-decor-wall-bright, renamed to rend-light-decor-bright.
  • Renamed cvar "rend-glow-fog-bright" to "rend-light-fog-bright".
  • Removed setgamma: ccmd Is now obsolete, instead use cvar rend-tex-gamma for changing texture gamma.
  • Revised "torch light" works with any RGB colour rather than just white light.
  • Remove black outlines from masked textures similarly to sprites.
  • Changed, thing shadows are no longer drawn if the world is being drawn fully bright.
  • Changed, thing shadows are no longer drawn if the surface they would appear on is glowing.
  • Changed, it is now possible to enable/disable plane glows and dynamic lights independently.
  • Changed, the lightgrid debug display is no longer flipped on the X and Y axes.
  • Changed, always announce missing models in the console (was verbose >= 1).

Misc

  • Improved: Start up time.
    • Redesigned algorithm for loading PNAMES and texture registration.
  • Improved: Map load time improved further with large maps.
    • Revised memory usage during BSP generation to reuse already allocated memory where possible.
    • Redesigned subsector, clockwise seg winding algorithm during BSP generation to traverse the newly created BSP.
    • Collinear segs are only checked once per round of potential node partition evaluation in the BSP builder.
    • Revised algorithm for building the subsector blockmap.
    • Make use of the blockmap to accelerate checking for overlapping linedefs.
    • No pre-initialization is needed for fakeradio line neighbors.
    • Enhanced algorithm for calculating vertex line owners, line angles are only calculated once for each line in an owner's list and the result cached for later use in the sorting stage.
    • Re-designed algorithm for calculating sector reverb properties for environmental audio effects.
    • Vertex sector owners are no longer needed and have been removed.
    • Only look up surface material names once and use their symbolic names thereafter.

User interface

  • UI cursor is now scaled relatively to the window dimensions.
  • ui-cursor-width, ui-cursor-height: cvar Now specify relative scale multipliers.
  • Display the ddkey name instead of the ASCII key code in CP_KeyGrabDrawer() (used to draw the console activation key).

Windows

  • The separate startup window containing messages printed during engine launch was removed.
  • Numerous improvements to dedicated console, now behaves similarly to the "normal" Doomsday console (but in a text-mode console).

Mac OS X

  • The separate startup window containing messages printed during engine launch was removed.

Common code library

Automap

  • Lists introduced for faster rendering.
  • All automap values are now extrapolated where suitable (view position, view rotation, view scale, window dimensions plus more).
  • Automap now fades in/out smoothly when activated/deactivated.
  • Map name was not displayed in all supported games. Map name is now scaled relative to display resolution and using the HUD scale multiplier ([30]).
  • Removed the blockmap grid display. The engine now has a built-in blockmap viewer for debugging purposes making the old display redundant.

Chat

  • Chat between local players (including chat macros) is now supported (client-side).

UI

  • Changed menu-effects: cvar No longer controls whether the menu fog effect is enabled. Use menu-fog instead.
  • Changed menu-fog: cvar Mode zero (o) now disables the menu fog. Indices for the other modes incremented by one.

XG

jDoom

  • Greatly improved precaching.
  • Various problems with voodoo dolls not working as expected.
  • Logic for mobjs to avoid dropoffs incorrect.
  • If a mobj was damaged by a camera player, every time it entered it's pain state it would rotate towards the player.
  • Added all values currently available to values.ded
  • Armour collectables (not the armour bonus) no longer receive lights and halos by default.
  • Removed fixed limit on track numbers playable via the IDMUS cheat. Now all music tracks are playable, even ones added by addons.
  • A dead player can now instigate the "reborn" process by using the "attack" control(s) in addition to "use".
  • Players attempting to pickup items flagged as "special" lead to a "P_SpecialThing:Unknown gettable thing" critical error. Unknown items are now removed from the world but otherwise ignored) ([31]).
  • conbg:ccmd now supports the paramaters "off" and (alias) "none" - remove the current background.

jHeretic

  • Re-licensed under the GNU GPL v2 license.
  • Logic for mobjs to avoid dropoffs incorrect.
  • If a mobj was damaged by a camera player, every time it entered it's pain state it would rotate towards the player.
  • A dead player can now instigate the "reborn" process by using the "attack" control(s) in addition to "use".
  • Players attempting to pickup items flagged as "special" lead to a "P_SpecialThing:Unknown gettable thing" critical error. Unknown items are now removed from the world but otherwise ignored) ([32]).
  • conbg:ccmd now supports the paramaters "off" and (alias) "none" - remove the current background.
  • The lump AUTOPAGE is no longer required.

jHexen

  • Re-licensed under the GNU GPL v2 license.
  • Logic for mobjs to avoid dropoffs incorrect.
  • If a mobj was damaged by a camera player, every time it entered it's pain state it would rotate towards the player.
  • A dead player can now instigate the "reborn" process by using the "attack" control(s) in addition to "use".
  • Players attempting to pickup items flagged as "special" lead to a "P_SpecialThing:Unknown gettable thing" critical error. Unknown items are now removed from the world but otherwise ignored) ([33]).
  • conbg:ccmd now supports the paramaters "off" and (alias) "none" - remove the current background.
  • The lumps ANIMDEFS, SNDINFO and AUTOPAGE are no longer required.

New features

  • Moved bsp and glnode generation entirely into the engine. A bsp and glnode dataset will be generated automatically for all maps.
  • Moved blockmap management entirely into the engine. A blockmap will be generated automatically for all maps. Redesigned interfaces for the various look up routines (such as "line of sight" and "within range of") to completely isolate from the games.
  • Multiple local players.

API

  • Implemented support for engine-side console command (ccmd) parameter validation and overloading. This improves robustness, security and simplifies implementation when multiple versions of a command are needed for similar functionality. Currently, the old style of (local) per-ccmd parameter management can be requested by specifying a NULL parameter list when registering (note: use by remote client is disabled with this method). The non-engine-validated method should be considered depreciated.
  • Abstract materials system wraps texture, flat and sprite management. All texture types can now be used interchangeably (flats on walls, textures on floors etc). In addition, texture and flat animation sequences (defined via group definitions) can now be mixed freely, allowing a single sequence to blend between any texture types freely (e.g. flat to texture to sprite to flat).
  • Map building API allows plugins to construct new maps dynamically at runtime.

Audio

DMU

  • Added new DMU sub-object iterators which are the preferred method of traversing e.g. the segs of a subsector. Use of these iterators will reduce overhead considerably compared to a "manual" traversal, referencing DMU objects incrementally by index/ptr.

Video

  • Fullscreen mode, color depth (bits per pixel) and anisotropic texture filtering are now changeable at run time via the Doomsday Control Panel and console.
  • Added togglefullscreen:ccmd Toggle between fullscreen and windowed mode.
  • Added setbpp:ccmd Change color depth (bits per pixel), 32 or 16.
  • Added vid-fullscreen:cvar Default value for fullscreen mode, 1= On.
  • Added vid-bpp:cvar Default value for color depth (bits per pixel), 32 or 16.
  • Take advantage of the relaxed non-power-of-two rule in later OpenGL implementations if available, to avoid resorting to resizing odd sized textures if not absolutely necessary (if enabled).
  • Added -texnonpow2 Enable use of non-power-of-two textures. Note some textures may still be resized if required.

Renderer

Definitions

  • Added Material definitions.
  • Added Sky definitions. Rather than define the sky properties for every map, each time directly in a Map Info (DED) definition, instead; use a Sky definition, giving it a unique ID which is then used in the Map Info definition to link the two. This allows mod authors to patch just the Sky definitions without needing to touch/create Map Infos.
  • Detail and Reflection definitions can now specify flags governing when the definition should be used.
  • Texture Environment:Flat: Surfaces in a sector using the specified Flat will affect the environmental audio effects heard within that sector.

File system

Misc

Windows

  • Make use of multisampling to achieve fullscreen anti aliasing, if available.

Common code library

Save system

  • A new common save system based on that used previously by jDoom.
    • Intermittent Thing archive exhausted errors resolved ([34])
    • Too many objects errors resolved ([35]).
    • Fixed: Rarely, a thinker could be added twice to the thinker list, leading to problems later on.

Automap

  • Added rend-dev-freeze-map: cvar 1= Stop updating the map-specific rendering lists.
  • Added a parallax scrolling background like in original Heretic/Hexen.
  • Added map-pan-speed: cvar Speed of panning.
  • Added map-pan-resetonopen: cvar 1= Automatically reset the pan location when opening the automap (on by default).
  • Added map-zoom-speed: cvar Speed of zooming.
  • Added map-open-timer: cvar Number of seconds taken to open/close the automap (default is 0.3 seconds).
  • Added map-customcolors: cvar Set behaviour of when to use the custom automap colors; 0=Never, 1=Automatically disable the user's defaults if the mod being played includes a custom palette, 2=Always.
  • Added map-mobj-r/g/b: cvar Set a custom color for things displayed in automap when the reveal all cheat is used.

Misc

  • Support for the particular way in which DOOM.exe animated flats (based on lump number) and textures (based on TEXTURE# definition id).

UI

  • Added new netgame scoreboard, available in all game types. The scoreboard can be made visible by pressing and holding the backslash key '\' (default).
  • Added menu-hotkeys: cvar Enable hotkey navigation in the menu (default is on).

XG

jDoom

  • Crosshair vitality. Colour the crosshair according to how near the player is to death. Available via the in-game HUD options menu and the view-cross-vitality:cvar.
  • Added hud-keys-combine:cvar 1= When drawing the fullscreen HUD, only draw one icon per key colour regardless whether the player has multiple keys/cards of the given colour (e.g. if the player has both a red key card and a red skull key, only one icon will be drawn). 0= Draw all owned keys.
  • Enhanced give:ccmd Can now be used to give individual ammos, keys and weapons (e.g., "give w1k2" will give to the console player weapon 1 and key 2). Health can also be given (e.g., "give h").

jHeretic

  • Crosshair vitality. Colour the crosshair according to how near the player is to death. Available via the in-game HUD options menu and the view-cross-vitality:cvar.
  • Enhanced give:ccmd Can now be used to give individual ammos, keys and weapons (e.g. "give w1k2" will give to the console player weapon 1 and key 2).
  • Added server-game-coop-nodamage:cvar Disable friendly fire in co-op games, default to off.
  • Added server-game-noteamdamage:cvar Disable friendly fire among players of the same color (team) during deathmatch, default to off.

jHexen

  • Crosshair vitality. Colour the crosshair according to how near the player is to death. Available via the in-game HUD options menu and the view-cross-vitality:cvar.
  • Random class selection via the menu when starting a new game.
  • Enhanced give:ccmd Can now be used to give individual ammos, keys and weapons (e.g. "give w1k2" will give to the console player weapon 1 and key 2).