Developer Network
  File Specs
  Source codes
  Mailing lists
  Knowledge Base

Other Games



Descent Developer Network
Descent 1/2

*.HMP, *.HMQ specs


Well, we still don't have any HM? file specs, however when you make HMP files using DTX/DTX2's MIDI->HMP conversion you will soon notice, that most of your HMP files will either crash Descent immediatly or make it very unstable, crashing Descent when the music loops, when switching to the automap or sometimes when you want to exit the mine...

So Dan Wentz has took the time to write down some tips to avoid this and make HMP files with the command-line driven tool MIDI2HMP, that do not crash Descent.

MIDI2HMP - MID->HMP converter


Safe MIDI composition

Ok here's Dan's 7 steps to safe MIDI composition for Descent 1 and 2.

1) OK first of all it's good practice to place all non-note midi events (chorus/reverb/pan/volume/patch/expression etc) before any note events start. So for example...

hmp1.gif (876 bytes)

You'd want to first shift the whole song to begin at measure 2. And  place all non-note events (initializing channels) somewhere between  the second beat of the first measure (*) and the first beat of the  second measure ($) where the note data would begin to play.


2) I'm not sure about other conversion utilities, but this is required for HMI. Track one should be labeled "Loop" and contain only the events mentioned in the next step.

  • All instrument tracks for General midi songs need to be named with  "[G]" preceding whatever instrument name is used (instrument name is optional but good to do for reference) For example "[G] grand piano."
  • FM song's instrument tracks need to start with [F].
  • Furthermore, GUS cards can't read instruments unless you include a "U" So for a safe guard, D2's midi tracks all started with "[GUF]" to cover all bases.
  • Track names may NOT contain a hyphen!


3) Here's the fun part; Loop points. Say your song is 48 measures long, 4:4 time signature and you're using 120 ticks per quarter note. You would need to insert event messages as followings.

Forgive the crude use of symbology :)

hmp2.gif (1512 bytes)

    "*" is at 1:4:119, Event message 110 with a value of 0
    "@" 47:4:119, 111 set to 0.
    "#" 48:1:000, 1 set to 0

    "^" 1:4:119, Event message 1 with a value of 0
    "&" 48:1:000, 1 set to 0

All midi events on Tracks 2.3 etc that occur between Track 1's  event (*)110/0 and (#)1/0 will loop. Note that the alignment of messages need to be precise for each respective track.


4) Drums always are assigned to Midi channel 10 (duh) :)


5) Voices are always prioritized to the lower midi channels. So long sustained notes, or melodies that need to be assured to play with full duration, need to be placed on the lower channels. Bass, etc (anything that doesn't need to sustain as long) should be placed


6) Always beware of cluttering midi events. Depending on your sequencer, you may be able to automate volume/pan etc. Try not to place too many successive midi events within the song. This will put a higher tax on your cpu and isn't necessary.


7) It's always a good idea to manually set each patch with a proper event message.  See (1) for best placement.



All pages (C) 1996-2000 Descent Network Team
Everything taken from the Descent, FreeSpace, Red Faction and Summoner series games are
Copyright Interplay Productions , THQ Inc. , Parallax Software , Volition Inc. and/or Outrage Entertainment