From MultimediaWiki
Revision as of 05:01, 8 September 2012 by VAG (talk | contribs) (→‎File Format: revisit file header)
Jump to navigation Jump to search
  • Extension: hnm
  • Company: CRYO Interactive Entertainment
  • Samples:

HNM6 is the latest variant of HNM video format by Cryo. Unlike its previous versions, it has Hi-color video support.

File Format

File consist of a main header, followed by frame chunks. Each frame chunk consist of individual audio and video chunks. All numbers are little-endian.

u8   sig[4]           -- file signature, "HNM6"
u8   reserved[2]      -- usually 0
u8   audioflags       -- nonzero value indicates file has APC sound (not authoritative)
u8   bpp
u16  width
u16  height
u32  filesize
u16  frames           -- number of frames
u16  reserved2
u32  reserved3        -- usually 0, but sometimes "V107", "V108" - version?
u16  speed            -- playback speed in fps, may be zero (?assume 15 fps then?)
u16  maxbuffer        -- number of frame buffers used
u32  maxchunk         -- max frame chunk size
u8   note[16]
u8   copyright[16]    -- "-Copyright CRYO-"

Each frame chunk begins with u32 chunk size (including this size field), then followed by frame's individual chunks:

 u32  chunksize       -- chunk size including this field, excluding padding
 u16  chunkid         -- TWOCC chunk id
 u16  reserved
 u8   data[]
 u8   padding[]       -- pads chunk to 4-byte boundary

AA Chunk


BB Chunk

Audio continuation.

IX Chunk

Video frame.

Format modifications

At least one known game (Riverworld) uses slightly different HNM6 container format, most likely due to different sound encoding. This format is just a small enhancement of the original, but it's not backward compatible.

Standard HNM6 header continues with additional audio description header:

u32  freq
u32  bits
u32  channels
u32  ?
u32  ?
u8   copyright[28]  -- "HNMS 1.1 by SARRET Hubert\0\0\0"
u32  ?              -- some initial audio samples?
u32  ?
u32  ?
u32  ?

Each frame chunk followed by an audio chunk, however, this audio chunk size is not counted by frame's chunk size field. Frame chunk format:

u32  sig[4]          -- "SOUN"
u32  chunksize       -- including this preamble
u8   data[]

Video Format