PrBoom+

PrBoom+ (also PrBoom-plus) is a source port based on PrBoom. GLBoom+ is a common name for a build of PrBoom+ compiled with OpenGL support. It is developed by Andrey Budko (entryway).

PrBoom+ is based on the PrBoom 2.5.x line of development. It can currently be compiled in POSIX, Windows and Mac OS X environments. The current version is, released on.

PrBoom+ features
In addition to all PrBoom features, PrBoom+ offers
 * Chasecam for demo playbacks
 * Changing the speed of the game in-game (for demo playback, recoding TAS demos, and for just playing at different speed)
 * Automatic loading of WADs necessary for playback, chosen by demo name or by information present in demo file (if recorded with PrBoom+)
 * Accurate Doom v1.2 emulation if needed during demo playback or requested by user
 * Support for DeePBSP and ZDBSP extended nodes
 * Support for the MUSINFO lump shared with Risen3D, ZDoom and GZDoom
 * OPL emulation
 * Speed optimisations for very large levels, compared to PrBoom
 * Customizable HUD with the -PRBHUD- lump

OpenGL mode features
In addition to all aforementioned PrBoom+ features, in OpenGL mode PrBoom+ can also use:
 * ZDoom-style high-resolution textures/flats/sprites (replacements located between HI_START and HI_END markers).
 * GZDoom-style skyboxes through the GLDEFS lump (or its alias GLBDEFS)
 * Optional animation blending for animated flats and textures, similar to ZDoomGL
 * Details textures (also defined in GLDEFS lump)

Detail texture definition
A detail texture is defined in a GLDEFS text lump. The syntax is as follows: detail {  (walls | flats) [default_detail_name [width [height [offset_x [offset_y]]]]] {    texture_name [detail_name [width [height [offset_x [offset_y]]]]] } }

Where detail_name is a bmp/png/tga/jpg/pcx/gif lump between the HI_START/HI_END markers. You don't need to add the texture to TEXTURES1. Default values are (width:16 height:16 offset_x:0 offset_y:0)

Example:

detail {  walls smooth01 32.0 //default detail for walls (width = 32, height = 16, offset_x/y = 0) {    brick7  detstone 64.0 64 10.532 brick8 detail02 // detail02 16 16 0 0 water1 // do not apply default detail to water water2 water3 water4 }  flats // no default detail for flats {    grass1 Grass01 32 32 NUKAGE1 detslime 16 16 0 0 // different offsets for animated flats make sense NUKAGE2 detslime 16 16 4 4 NUKAGE3 detslime 16 16 8 8 } }