I like big arguments!
After a long time leaving it on the side, after having worked on the HiColor branch with good results (but without officially releasing anything), I realized that splitting the codebases was a Bad Thing, because major changes became harder and harder to keep in sync.
So, harvesting the power of Java's generics I managed to bring everything together in a unified codebase with a relatively elegant solution, so that the traditional Indexed (8-bit), HiColor (15-bit RGB), and TrueColor (32-bit ARGB) versions can use the same game logic and enchancements, reusing as much code as possible, and only specializing when it's really needed.
Some comparative screenshots of E1M1:
Indexed (8-bit) mode: 163 distinct colors.
HiColor (15-bit RGB with 32 colormaps): 270 distinct colors
TrueColor (32-bit ARGB, using 32 colormaps): 726 distinct colors
TrueColor (32-bit ARGB, using 256 colormaps): 1288 distinct colors
Increasing the bit depth is not enough: the number of colormaps AND light levels (as well as the rules for how they apply at different depths) must also be changed in order to be able to see a difference.
With the HiColor mode, it's pointless to go beyond 32 colormaps, as there are only 32 possible shades of any color, and they would be indistinguishable. With 24-bit RGB, it makes sense to have more colormaps. Currently I applied my understanding of how the various lighting constants (e.g. MAXLIGHTSCALE, MAXLIGHTZ, LIGHTSCALESHIFT etc.) work, and it seems mostly OK, giving smooth and continuous gradients, though they are among the most poorly documented and obscure features.
After I replace everything in the HEAD branch (it's currently in HiColor) with the current version, I will finally release it for everybody to tinker with, as Mocha Doom v1.6 Extended Color Alpha ;-)
Sure, there are a few other enhancements...but I think I'll post some more teaser screenies for now.
E2M2: 1648 colors
E2M1: 548 colors (meh...poor decor ;-)
Unholy Cathedral: 1115 colors
MAP01 from DOOM II: 1854 colors
For anyone wondering, my method for achieving extended color depth differs from _bruce_'s chocolate doom branch: I still use colormaps for applying color and distance effects, with a few tweaks such as real-time palette manipulation (palette and colormaps effects are preserved, though there are a few glitchs), and the drawing functions are very close to the original 8-bit ones. The colormaps however now carry RGB values instead of 8-bit indices, and are appropriately sized (e.g. ints for TrueColor, shorts for HiColor).
This allows very good performance, with almost no speed penalty. E.g. nuts.wad timedemo @ 900 x 600 fullscreen (full resolution, not screen tripling!)
Indexed: timed 4048 gametics in 3068 realtics = 46,179922 frames per second
HiColor: timed 4048 gametics in 3256 realtics = 43,513514 frames per second
TrueColor: timed 4048 gametics in 3280 realtics = 43,195122 frames per second
Per-pixel processing and HSV-RGB conversions are avoided, though still possible. It's also possible to apply individual colormap effects, modifying colormaps on-the-fly, caching frequently used ones etc.
Last edited by Maes on 09-24-12 at 17:51