DMXGUS

DMXGUS (or DMXGUSC) Is a WAD lump that contains instrument data for the DMX sound library to use for soundcards. It contains a listing of all GUS patches, identified by a number at the beginning of the line and the name of the patch at the end, with in between the value of the patches to which they should be remapped on 256K, 512K, 768K and 1024K hardware. This allowed to make sure that all loaded patches would fit in the soundcard's memory.

Index 0 to 127 correspond to the instrument lists. Index 128 to 255 correspond to drum banks; in practice 128 is explicitly blank and the rest starts at 155 to end at 215 (the General MIDI standard defines percussive instruments from 35 to 81 and therefore by adding 128 have them start at 163 and end at 209).

The DMXGUS lumps used in Doom engine games were contributed by the community and later adopted, rather than created by Bobby Prince or Paul Radek. Doom and Doom II use different patch mappings both created by Tom Klok, Hexen uses patch mappings created by Colin Caird. In both cases, only the 1024K mappings have been tweaked, the lower values still use the mappings provided by the default ultramid.ini. Heretic appears to use the default mappings entirely, and Strife reuses the mappings created for Doom, while Final Doom keeps the mappings created for Doom II.

A bug exists in how vanilla Doom applies the instrument mappings, which causes the wrong instruments to be played.

ZDoom and GZDoom offer a GUS emulator based on a custom TiMidity and the UltraMID driver's source code, which reads DMXGUS lumps. Chocolate Doom features a "pseudo-emulator" which reads these lumps and use them to configure a normal TiMidity++ driver.

Tools for helping in the creation of a good DMXGUS lump were written for the Freedoom project. Instruments are grouped by similarity, and statistics are gathered from MIDI file to find out which instruments are more important than others. With these data and a list of each patch's size in the original GUS driver distribution, it is possible to automatically generate optimized configurations.