Right now this is a placeholder I will be filling out in the coming weeks as time allows, leading up the the first Alpha release for testing.
PLEASE NOTE: As of current, this is only planned for 1.10. This driver replaces D2GFX.dll, but also applies a lot of custom patches to D2Client, D2Common, D2CMP and D2Win.
As of current, D2GFEx will provide the following features:
- A new graphics driver, based on OpenGL 2.1, which will work from Win95 to Win10, providing much better performance and memory usage.
- 100% recreation of D2's graphics output, bar any bugs that existed in original D2 (like the ModRandPalette bug for instance). Perspective will not be supported on initial release.
- Vastly improved limits for mods, mainly to do with the number of concurrent sprites and shadows on screen (this includes both the assertion, memory cache and render slot limits), and removal of the maximum image frame size on DC6 files. DCC files technically have the limit removed as well, but using DC6 for all future graphics bar tiles is preferred.
- Extended resolution support, you can run D2 in 4k, but I wouldn't recommend that unless you want to not be able to see anything. Unlike many of the extended resolution patches, this is done correctly, including expanding of the unit light mapping code, tile rendering, draw culling, render tiling/binning.
- Proper VSync and adaptive VSync support (there is actually no point to render faster than your monitors refresh rate, so just save some power/heat/GPU life). Originally D2 had support for this but no actual setting to turn it on/off; it will now be a setting in the graphics menu, which will be expanded to accommodate the new features, and have useless settings removed (such as lighting quality & blended shadows which are now always at their best setting).
- Windowed mode will now have Gamma & Contrast support, as well as colored light support. Windowed mode also supports borderless mode and borderless full screen mode.
- All units seamlessly support DC6 or DCC animations, this follows on the recommendation to use DC6 files for future graphics, as it allows new features with backwards compatibility. The removal of the limits also mean large monsters need no longer be sliced up, and for modders/coders, new UI drawing can be done with a singular draw call.
- Finishing of poorly coded D2GFX functions: there are a few functions that didn't fully work, one such function is the clipped text drawing, which can't apply palettes to cropped text, it now does (fixing a but with colored NPC scrolling text). With this also comes extensions to standard D2GFX API, most drawing functions take in an image blend color that is never used, it is now used.
- Many new configurable options, such as cut scenes in windowed mode, disabling screen shake, auto-minimizing, frame-limiting. These will be both put into a config file, and the games UI. the config file will shift all the graphics settings from the registry to the file, meaning multiple mods can each have their own settings.
- Faster file decode for faster act loads and less hitching on slow machines.
- The way tiles are handled are also improved, meaning less memory is consumed; in future tile lookups will be changed and various misc data D2 used will removed to improve tiles even more. This misc data is actually a lot of duplicated data or data that serves are nothing more than an additional layer of indirection.
- Improved /fps display, and in-game graphics debugging tools (profiling, tileset viewer, palette viewer, display modes, DCC & DC6 viewers).
- Better system-cursor toggling support in windowed mode, along with mouse capture support and various fixes to D2Win's buggy mouse bounding.
- Fixes the -ns crash bug (can be disabled for compatibility).
- Improves compatibility with newer Windows versions.
- 32bit color support for non-palshift images; DC6 will become a container format supporting more encoding types. DT1 is also expanded support the same formats for tiles. NOTE: these will need a new encoding tool, but the changes are backwards compatible. Supported formats are:
- RGBA32, both uncompressed and PNG(zlib) compressed.
- 8bit, RLE and non-RLE (non-RLE is good for UI, where the RLE encoding adds size when no pixels are skipped).
- Block-based HW compressed textures, used in modern day games. Support will be for DXT1, DXT1A, DXT3 & DXT5.
- Image local palettes. NOTE: these will need a new encoding tool.
- Mod API: this will provide an SDK and a lot of additional low level gfx functions for shader support, render-to-texture, sprite and primitive batching, font loading, post processing.
- Debug API: this will extend the game with an easy to use debug API, based of off ImGUI.
- Fixing of various graphics related D2 bugs, such as the improper palette index caching, which breaks when act palettes are changed.
- Game-interactive debug mode, for inspecting sprites and units.
- Blit stretch support, along with quality enhancing shaders like HQx.
- Better CPU usage in the main message loop - this is primarily a power fix, to prevent D2 using 100% of the CPU time. The process is also pinned to the CPU core its launched on, to prevent the system scheduler from shuffling it around which can cause hitches and thread-related instability.
- Actual async file loading (yep, D2's async file loading system is broken...).
- Custom post processing shader support, split into UI and world layers.
- Improved animated tile effects, fading and animation.
- Improved shadows and blending.
- Vastly improved text rendering, supporting 32bit color (based on the Mod API) and new font files. This API will both replace D2's font API, and have an extended API for truetype fonts for better quality, bolding and underlining.
- Vastly improved particle system (rain & snow) that causes far less lag (based on the Mod API) and are correctly batched into a single draw call.
- Vastly improved automap system, that doesn't require hundreds of draw calls per frame to render maps (based on the Mod API).
This is where the bulk of the work on Oculus is done, allowing testing of many of the new features so performance regressions and issues can be addressed. I will update this section with information over the course of the next few days.
Oculus will be a new graphics tool for D2, designed primarily for use with D2GFEx, but also usable for vanilla D2. It will provide support for all things graphics related: DCC files, DC6 files, COF files, PL2 files, PalShift files, AnimData editing, merging, recoloring, cropping, verification. By unifying the files into one tool, many mismatch bugs can be eliminated, as well as the reduction of work (COF files can be partially built from the DCC info and AnimData info).
The purpose of this post currently is to gather a list of features that people are interested in that are not mentioned; but please note: just because you ask doesn't mean it'll be done, it needs to be feasible. To this end, I am currently not planning to support 3D units/tiles, because there are just too many custom formats, and using a standard format like FBX is possible, but then you need to encode a ton of extra info for poses and UV data etc, all for no gain (the model will still need to be lit in 2D, and matched to one the of 64 directions), it ends up being better to just pre-render it.
When the alpha launches, it will be added to this thread.
[07/05/2018] Initial Announcement.
[17/10/2018] Tooling Announcement.