KMD Format (Fury of the Furries)

From ModdingWiki
Jump to navigation Jump to search
Edge of map!
KMD Format (Fury of the Furries)
Format typeMusic
Notation typeTracked
InstrumentsFM
Max channel count6 + 5
Max track count1
Max pattern count128
Max order count1
Tags?Instrument names
Games

This format is used in Fury of the Furries for music. It is a modified version of the MOD music format using FM instruments rather than samples. The instruments are simple described in terms of the register settings for an OPL chip synthesizer on an Adlib or Soundblaster card.

It's name *might* be based on Kalisto MOD Format, but this is speculation.

The file has 6 MOD channels, and a further 5 channels devoted to just percussion, these oddities mean that it is unlikely that there are any MOD file players or tools which can handle this format.

Most MOD players expect PCM samples for the instrument sounds, but the S3M Format used by Scream Tracker 3 has the option to handle this kind of OPL-FM instrument.

2 music files are provided for each stage of the game, The game menu allows you to choose between 'fun' or 'classical' and this determines which of the music files is used for each stage.

Header

Data type Name Description
UINT8 Instrument count Number of instruments in the file.
UINT8 Pattern count Number of patterns in the file.
UINT8 End of song End of song instruction. Usually 127. In PYRAMIDE.KMD it is 120.
UINT8(128) Pattern table Order in which to play the patterns.
UINT8(7) Unknown meaning currently unknown.

Instrument

The KMD format uses FM instruments, directly specifying register values for a Yamaha OPL-2 compatible synthesizer, such as that found on an Adlib or SoundBlaster. As such, the file contains NO sample data, and where you might expect details of the samples, instead we have these instrument definitions.

Data type Name Description
CHAR(16) Instrument name The name of the instrument, if less than 16 characters it is NULL-terminated
UINT8 Op1 Trem/Vib/Sus/KSR/F Operator 1 Tremolo / Vibrato / Sustain / Key Scale Rate / Frequency Multiplication Factor
UINT8 Op2 Trem/Vib/Sus/KSR/F Operator 2 Tremolo / Vibrato / Sustain / Key Scale Rate / Frequency Multiplication Factor
UINT8 Op1 KSL/Level Operator 1 Key Scale Level / Output Level
UINT8 Op2 KSL/Level Operator 2 Key Scale Level / Output Level
UINT8 Op1 A/D Operator 1 Attack Rate / Decay Rate
UINT8 Op2 A/D Operator 2 Attack Rate / Decay Rate
UINT8 Op1 S/R Operator 1 Sustain Level / Release Rate
UINT8 Op2 S/R Operator 2 Sustain Level / Release Rate
UINT8 Op1 Wave Operator 1 Waveform
UINT8 Op2 Wave Operator 2 Waveform
UINT8 FB/Add Feedback / Additive or FM select
UINT8 Percussion Indicates type of instrument
Percussion value Description
0 This is a melodic instrument and will be played using 2 FM operators
1 Bass drum. Will be played using the bass drum channel on the OPL synthesizer
2 Snare drum. Will be played using the snare drum channel
3 Tom. Will be played using the tom drum channel
4 Cymbal. This value is not seen in any files, but is assumed to be the top cymbal according to the synthesizer's feature set
5 Hi-hat. Will be played using the hi-hat channel
FF Instrument deleted. This instrument is not used in the song

Pattern

Each pattern consists of 64 steps. Normally the steps are played one after the other until the end of the pattern, and then the next pattern from the Pattern Table is started. The speed of the song dictates how much time elapses between each step being played. Normally trackers run at 50 ticks per second, so a speed of 5 would play 10 steps per second. However, since Fury of the Furries runs at 60fps, it is possible that there are 60 ticks per second in this format.

Each step is 30 bytes long. It contains 6 4-byte values, one for each melodic channel, and a further 6 bytes to control the percussion. A dedicated percussion system is unusual in mod format, and this ties this format quite tightly to the capabilities of the Yamaha OPL2 synthesizer chip. A full pattern will be 64 * 30 = 1920 bytes in length.

Data type Name Description
UINT8 Channel 1 Pitch Note pitch in semitones.
UINT8 Channel 1 Instrument Instrument number (i.e. a value of 2 means the 2nd instrument defined in the file)
UINT8 Channel 1 Effect Type Type of player effect.
UINT8 Channel 1 Effect Parameter Parameter for effect
UINT8[4] Channel 2 Pitch, Instrument, Effect as for Channel 1
UINT8[4] Channel 3 ...
UINT8[4] Channel 4 ...
UINT8[4] Channel 5 ...
UINT8[4] Channel 6 ...
UINT8 Percussion Note On Bit flags to trigger the 5 percussion instruments
High bit -- -- -- BD SN TM CY HH Low bit
UINT8[5] Unknown Probably volume control for each of the 5 percussion instruments.

Credits

This file format was reverse engineered by carbon14. If you find this information helpful in a project you're working on, please give credit where credit is due. (A link back to this wiki would be nice too!)