Hi Octane
Hi Octane is hover-car racing game. According to Sean Cooper it was made in 6.5 weeks using engine code from Syndicate and Magic Carpet.
Tools
Level inspector and incomplete editor by movAX13h (contains all assets of the original game extracted/converted by srtuss): https://github.com/movAX13h/HiOctaneTools
File formats
The following file formats are used by this game.
Filename | Format | Details |
---|---|---|
sounds/music.dat | see below | Archive containing music files in different formats: XMI Format, GEN Format, ROL Format, WTB Format. There are five files per format : TGAME1, TGAME2, TGAME3, TGAME4, TINTRO2. |
MUSIC.DAT
- read the INT32LE at EOF and seek to returned position
- count the N number of INT16LE that equals
0x0001
, then read N of the following struct:
Data type | Name | Description |
---|---|---|
INT32LE | offTunes | Offset to the list of tunes |
INT32LE | offTune1 | Offset to the first tune |
INT32LE | unknown | Unknown (always 0xC0000000 , or 192 )
|
INT32LE | lenTunes | Length of all tunes together, bytes |
- for each of the former struct
- seek to
offTunes
- read one of the following struct, its
lenTune
indicates the byte sum of tunes following - read as many of the following struct until their
lenTune
sum equals the one in previous step
- seek to
Data type | Name | Description |
---|---|---|
CHAR | name[12] | File name of the tune, \0 padded
|
CHAR | padding[6] | Padding bytes |
INT32LE | offTune | Tune relative offset |
CHAR | padding[4] | Padding bytes |
INT32LE | lenTune | Tune length, bytes |
INT16LE | unknown | Unknown (always 0x5A00 , or 90 )
|
- you now have a catalog of a collection of tunes, e.g. five ROL songs, five WTB songs etc
- to extract a song, copy
lenTune
bytes starting atoffTune1 + offTune
, file name isname
RNC-compressed files
Many of the game's files are compressed using the Rob Northern Compression format; some of them such as SOUND\SOUND.DAT are a concatenation of many RNC archives simply glued together.
A command-line unpacker can be found here : Bullfrog games RNC Utilities (from Unpacking RNC files)
DAT/TAB pairs
Can be decompressed using Bullfrog games DAT/TAB Graphics extractor (they first must be decompressed if they are RNC-compressed).
DAT format:
Without a TAB file, it's raw pixels; with a TAB file it's a form of line by line RLE compression where only transparent pixels are compressed.
TAB format:
Data type | Name | Description |
---|---|---|
INT32LE | position | Image position in .DAT |
INT16LE | width | Image width |
INT16LE | height | Image height |
TMAPS:
Contains powerups and some HUD elements but TAB format is different:
Data type | Name | Description |
---|---|---|
INT32LE | flat | Size of RNC stream unpacked, useless as it's contained in stream header already |
INT32LE | pos | Position in DAT |
INT16LE | index | Some index but can be duplicate, so likely a type or category instead |
There are N+1 entries to be able to compute last item size in DAT.
Each image has the following format:
Data type | Name | Description |
---|---|---|
INT16 | unknown | Unknown |
INT8 | width | Image width |
INT8 | height | Image height |
INT8[] | pixels | Image pixels, 8-bit paletted |
Game's files
Name | Format | RNC compressed | Notes |
---|---|---|---|
data\hfont0-0.dat data\hfont0-0.tab |
Unknown format | Yes | Thin white font (SVGA) |
data\hspr0-0.dat data\hspr0-0.tab |
Unknown format | Yes | Editor icons (large) |
data\intro.dat | Autodesk FLI animation | No | Game introduction |
data\logo0-0.dat data\logo0-0.tab |
Unknown format | Yes | Game logo (VGA) |
data\logo0-1.dat data\logo0-1.tab |
Unknown format | Yes | Game logo (SVGA) |
data\mfont0-0.dat data\mfont0-0.tab |
Unknown format | Yes | Thin white font (VGA) |
data\mspr0-0.dat data\mspr0-0.tab |
Unknown format | Yes | Editor icons (small) |
data\olfnt0-0.dat data\olfnt0-0.tab |
Unknown format | Yes | Large white font (VGA) |
data\olfnt0-1.dat data\olfnt0-1.tab |
Unknown format | Yes | Large white font (SVGA) |
data\onet0-*.dat data\oscr0-*.dat |
Raw VGA image, 320×200 and 640×480 | Yes | Loading and selection screens |
data\osfnt0-0.dat data\osfnt0-0.tab |
Unknown format | Yes | Small white font (VGA) |
data\osfnt0-1.dat data\osfnt0-1.tab |
Unknown format | Yes | Small white font (VGA) |
data\palet0-0.dat | VGA Palette | No | The palette of every asset of the game, unless specified |
data\panel0-0.dat data\panel0-0.tab |
Unknown format | No | HUD 2-players (SVGA) |
data\panel0-1.dat data\panel0-1.tab |
Unknown format | No | HUD 1-player (SVGA) |
data\panel9-0.dat data\panel9-0.tab |
Unknown format | No | HUD 2-players (VGA) |
data\panel9-1.dat data\panel9-1.tab |
Unknown format | No | HUD 1-player (VGA) |
data\pfont0-0.dat data\pfont0-0.tab |
Unknown format | No | Large green font (VGA) |
data\pfont0-1.dat data\pfont0-1.tab |
Unknown format | No | Large green font (SVGA) |
data\point0-0.dat data\point0-0.tab |
Unknown format | Yes | Editor cursors |
data\puzzle.dat | Raw VGA image, 112×96 | No | The cheat puzzle activated with CTRL-Tab in-game |
data\sky0-*.dat | Raw VGA Image, 256×256 | Yes | Horizon of each track |
data\srch0-0.dat | Raw VGA Image, 32×32 | Yes | Looks like a radar but seems to be unused |
data\table0-*.dat | Unknown format | Yes |
These files differ by at most a few bytes, their name suggests a sine table but this is pure speculation. The following pattern appears when they are interpreted as a 256 pixels wide image: |
data\textu0-*.dat | Raw VGA image, 64×16384 | Yes | 64×64 terrain textures |
data\title.dat | Raw VGA image, 320×200 | Yes | The introductory screen |
data\tmaps.dat | Yes | see above | |
data\tmaps.tab | No | see above | |
data\track0-0.dat data\track0-0.tab data\track0-1.dat data\track0-1.tab |
Unknown format | Yes | Looks unused, game still plays without them |
objects/data/tex0-0.dat objects/data/tex0-0.tab |
Hi-Octane Texture Atlas, 256×768 | No | In-game textures |
objects/data/tex0-1.dat objects/data/tex0-1.tab |
Hi-Octane Texture Atlas, 256×88 | No | In-game textures |
Note: none of the TAB files are RNC-compressed.
Notes
General
The image formats above are partially decoded, they are still missing palette information.
All the images are paletted, 8 bits per pixels.
INTRO.DAT
Header can be fixed using Autodesk Animator FLI files fixer but since format is pretty old and that Autodesk Animation Player 1.10 is a legacy Win16 executable, it is not very convenient to use as of today.
Instead, the file can be converted by FFMPEG to either BMP or AVI,
Convert the animation to individual images, handle last invalid frame:
<syntaxhighlight lang="text"> ffmpeg -i INTRO.DAT -vframes 548 -pix_fmt bgr24 intro%03d.bmp </syntaxhightlight>
Convert the sequence of images to a raw AVI and respect the original frame rate:
<syntaxhighlight lang="text"> ffmpeg -r 14 -i intro%03d.bmp -vcodec rawvideo intro.avi </syntaxhightlight>
Note that since the underlying format does not handle audio, there won't be any.
Credits (in alphabetical order)
Aybe
Malvineous
movAX13h
srtuss
Syndicate series unofficial fan site for the various utilities.