D2X-XL Worklog

Notes on features and problems from the development of D2X-XL, newest first.

Speedup #1: Path Finding

Recent investigation of slowdowns in D2X-XL have led to the insight that path finding contributes quite a bit to the issue, with massive levels massively increasing that contribution. D2X-XL does path finding for each sound playing, trying to determine the distance to the listener, i.e. the player, and for each robot that is looking for a target (usually the player as well ). Robots do not contribute too much, since there are only so many robots aware of the player in almost all instances. If a level contains a lot of ambient sound, this can really impact performance though, particularly if the level is huge. It didn't help much that I had turned off the cache ages ago that was keeping the most recently computed routes through the level because it had more misses than hits.

Dijkstra is too slow

The first thing I tried was to replace Parallax Software's brute force breadth-first search with a Dijkstra Address Calculation Sort based algorithm. That worked very well and elegantly, but data buffer management overhead was so massive compared to the path finding that it slowed down the search inacceptably. DACS is good for huge networks where so many network nodes have to be expanded that management overhead doesn't play a role.

Bi-directional search does the trick

So I got back to the breadth-first search. First thing was to streamline it quite a bit, since Parallax' implementation somewhat lacked elegance and simplicity (isn't simplicity always elegant?). The essential step however was to make the search bi-directional, i.e. start from both the start and the destination segment and find the segment where both searches would meet. The performance increase achieved by this was to be expected, but most pleasurable none the less: Bi-directional search only touched roughly 1/3 of the data the uni-directional search did, about doubling the performance of the search (the additional data management consumed some time, too). This will work with all but the weirdest of level topologies (i.e. very linear, stretched out levels), and won't hurt much with those either.

Multi-Threading doesn't help

The final thing I tried was to make both searches concurrent by putting them in threads. It turned out that the search was so fast that the additional thread management degraded its performance by quite a margin below the sequential bi-directional search.

Caching does though

Turning the caching on again (and using different caches for sound and robot path finding) increased performance by another 65%.


Having explored every option here and found the best one leaves me pretty satisfied about this corner of D2X-XL.


News

A new D2X-XL update fixing broken screen resolution persistence is available

There is yet another D2X-XL update is available (the new Pumo Mines broke a few things ...)

Believe it or not: There's a new D2X-XL version online!

Uploaded updated D2X-XL and library source code that compiles with Visual Studio 19

After a really long time, another new DLE version is available

A new DLE version is available (hear, hear!) :D

A new Max OS X version of D2X-XL is available!

D2X-XL now offers a cartoon style render mode!

New D2X-XL and DLE versions are available

Blarget has got his own area in the level spotlight

New D2X-XL and DLE versions are available

A couple of levels have been added to the level spotlight

Hooray! We're finally having a new Mac OS X version of D2X-XL!

D2X-XL now features an observer mode for multiplayer games

A new D2X-XL version with improved multiplayer synchronization is available

A new D2X-XL version fixing out of sync problems in multiplayer games is available

A new D2X-XL version with many multiplayer bug fixes is available

Added high quality (ogg) Descent 1 and 2 music to the downloads area

A new D2X-XL version with important bug fixes is available

D2X-XL compiles and runs on Linux again!

Descent 1 and 2 high res textures are now available as complete downloads

A new DLE version with a ton of bug fixes and improvements is online

A new D2X-XL version is online

A new D2X-XL version with a much needed bug fix is online

A new DLE version is online

Published another DLE version with more bug fixes and improvements by Sirius

Published a new D2X-XL version

Published a new DLE version with tons of bug fixes and improvements by Sirius

D2X-XL now supports Oculus Rift 3D headsets!

Updated DLE and D2X-XL to support new level features requested by Pumo

Added an article about DLE's new tunnel generator to the worklog

DLE's new tunnel generator is finished

Added a new article to the worklog

Published a new DLE version

Added a new article to the worklog

Added two new articles to the worklog

D2X-XL and DLE-XP now support triangular segment sides!

DLE-XP has an OpenGL render and 1st person view!

New DLE-XP version available

Wrote a new worklog article

Check out DarkFlameWolf's level spotlight section!

New DLE-XP and D2X-XL versions are available

A new DLE-XP version is available

Added a worklog article about the way point feature

Added way point support to DLE-XP and D2X-XL

Posted a bunch of new screenshots

Posted a bunch of new screenshots

A New version of DLE-XP is available

New OS X version of D2X-XL is available!

Added article about lightmaps to worklog.

New article and video added to worklog.