<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://moddingwiki.shikadi.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jopadan</id>
	<title>ModdingWiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://moddingwiki.shikadi.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jopadan"/>
	<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/wiki/Special:Contributions/Jopadan"/>
	<updated>2026-05-15T04:31:15Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Hi_Octane&amp;diff=12797</id>
		<title>Hi Octane</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Hi_Octane&amp;diff=12797"/>
		<updated>2026-02-09T08:24:38Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: update Tools and rename to Ports&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hi Octane&#039;&#039;&#039; is hover-car racing game. According to Sean Cooper it was made in 6.5 weeks using engine code from Syndicate and Magic Carpet. There are at least two releases of the game, the initial release (executable contains string &#039;&#039;Jun 10 1995 17:45:48&#039;&#039;) with 6 levels, and a later extended version (&#039;&#039;Oct 23 1995 15:57:32&#039;&#039;) with 9 levels, additional game modes, and slightly reworked levels. In certain file format details the used version makes a difference.&lt;br /&gt;
&lt;br /&gt;
== Ports ==&lt;br /&gt;
* [https://github.com/movAX13h/HiOctaneTools HiOctaneTools]&lt;br /&gt;
* [https://github.com/woalexan/hi-octane202x hi-octane202x]&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = sounds/music.dat&lt;br /&gt;
 | Format = see below&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Archive containing music files in different formats: [[XMI Format]], [[GEN Format]], [[ROL Format]], [[WTB Format]].&amp;lt;br/&amp;gt;There are five files per format : TGAME1, TGAME2, TGAME3, TGAME4, TINTRO2.&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== MUSIC.DAT ==&lt;br /&gt;
&lt;br /&gt;
* read the [[INT32LE]] at EOF and seek to returned position&lt;br /&gt;
* count the N number of [[INT16LE]] that equals &amp;lt;code&amp;gt;0x0001&amp;lt;/code&amp;gt;, then read N of the following struct:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTunes || Offset to the list of tunes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTune1 || Offset to the first tune&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || unknown || Unknown (always &amp;lt;code&amp;gt;0xC0000000&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;192&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || lenTunes || Length of all tunes together, bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* for each of the former struct&lt;br /&gt;
** seek to &amp;lt;code&amp;gt;offTunes&amp;lt;/code&amp;gt;&lt;br /&gt;
** read one of the following struct, its &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; indicates the byte sum of tunes following&lt;br /&gt;
** read as many of the following struct until their &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; sum equals the one in previous step&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || name[12] || File name of the tune, &amp;lt;code&amp;gt;\0&amp;lt;/code&amp;gt; padded&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || padding[6] || Padding bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTune || Tune relative offset&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || padding[4] || Padding bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || lenTune || Tune length, bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || unknown || Unknown (always &amp;lt;code&amp;gt;0x5A00&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;90&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* you now have a catalog of a collection of tunes, e.g. five ROL songs, five WTB songs etc&lt;br /&gt;
* to extract a song, copy &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; bytes starting at &amp;lt;code&amp;gt;offTune1 + offTune&amp;lt;/code&amp;gt;, file name is &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RNC-compressed files ==&lt;br /&gt;
&lt;br /&gt;
Many of the game&#039;s files are compressed using the [[Rob Northern Compression]] format; some of them such as &#039;&#039;SOUND\SOUND.DAT&#039;&#039; are a concatenation of many RNC archives simply &#039;&#039;glued&#039;&#039; together.&lt;br /&gt;
&lt;br /&gt;
A command-line unpacker can be found here : [http://syndicate.lubiki.pl/downloads/bullfrog_utils_rnc.zip Bullfrog games RNC Utilities] (from [http://syndicate.lubiki.pl/synd/rework/synd_rework_rnc.php Unpacking RNC files])&lt;br /&gt;
&lt;br /&gt;
== DAT/TAB pairs ==&lt;br /&gt;
&lt;br /&gt;
Can be decompressed using [http://syndicate.lubiki.pl/downloads/bullfrog_utils_tabdat.zip Bullfrog games DAT/TAB Graphics extractor] (they first must be decompressed if they are RNC-compressed).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DAT format:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Without a TAB file, it&#039;s raw pixels; with a TAB file it&#039;s a form of line by line RLE compression where only transparent pixels are compressed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TAB format:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || position || Image position in .DAT&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || width || Image width&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || height || Image height&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TMAPS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Contains powerups and some HUD elements but TAB format is different:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || flat || Size of RNC stream unpacked, useless as it&#039;s contained in stream header already&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || pos || Position in DAT&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || index || Some index but can be duplicate, so likely a type or category instead&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are N+1 entries to be able to compute last item size in DAT.&lt;br /&gt;
&lt;br /&gt;
Each image has the following format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT16 || unknown || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || width || Image width&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || height || Image height&lt;br /&gt;
|-&lt;br /&gt;
| INT8[] || pixels || Image pixels, 8-bit paletted &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game&#039;s files ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Format&lt;br /&gt;
! RNC compressed&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|data\hfont0-0.dat&amp;lt;br/&amp;gt;data\hfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Thin white font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\hspr0-0.dat&amp;lt;br/&amp;gt;data\hspr0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor icons (large)&lt;br /&gt;
|-&lt;br /&gt;
|data\intro.dat&lt;br /&gt;
|[[Autodesk FLI animation]]&lt;br /&gt;
|No&lt;br /&gt;
|Game introduction&lt;br /&gt;
|-&lt;br /&gt;
|data\logo0-0.dat&amp;lt;br/&amp;gt;data\logo0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Game logo (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\logo0-1.dat&amp;lt;br/&amp;gt;data\logo0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Game logo (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\mfont0-0.dat&amp;lt;br/&amp;gt;data\mfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Thin white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\mspr0-0.dat&amp;lt;br/&amp;gt;data\mspr0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor icons (small)&lt;br /&gt;
|-&lt;br /&gt;
|data\olfnt0-0.dat&amp;lt;br/&amp;gt;data\olfnt0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Large white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\olfnt0-1.dat&amp;lt;br/&amp;gt;data\olfnt0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Large white font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\onet0-*.dat&amp;lt;br/&amp;gt;data\oscr0-*.dat&lt;br /&gt;
|[[Raw VGA image]], 320&amp;amp;times;200 and 640&amp;amp;times;480&lt;br /&gt;
|Yes&lt;br /&gt;
|Loading and selection screens&lt;br /&gt;
|-&lt;br /&gt;
|data\osfnt0-0.dat&amp;lt;br/&amp;gt;data\osfnt0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Small white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\osfnt0-1.dat&amp;lt;br/&amp;gt;data\osfnt0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Small white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\palet0-0.dat&lt;br /&gt;
|[[VGA Palette]]&lt;br /&gt;
|No&lt;br /&gt;
|The palette of every asset of the game, unless specified&lt;br /&gt;
|-&lt;br /&gt;
|data\panel0-0.dat&amp;lt;br/&amp;gt;data\panel0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 2-players (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel0-1.dat&amp;lt;br/&amp;gt;data\panel0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 1-player (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel9-0.dat&amp;lt;br/&amp;gt;data\panel9-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 2-players (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel9-1.dat&amp;lt;br/&amp;gt;data\panel9-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 1-player (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\pfont0-0.dat&amp;lt;br/&amp;gt;data\pfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|Large green font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\pfont0-1.dat&amp;lt;br/&amp;gt;data\pfont0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|Large green font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\point0-0.dat&amp;lt;br/&amp;gt;data\point0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor cursors&lt;br /&gt;
|-&lt;br /&gt;
|data\puzzle.dat&lt;br /&gt;
|[[Raw VGA image]], 112&amp;amp;times;96&lt;br /&gt;
|No&lt;br /&gt;
|The cheat puzzle activated with CTRL-Tab in-game&lt;br /&gt;
|-&lt;br /&gt;
|data\sky0-*.dat&lt;br /&gt;
|[[Raw VGA Image]], 256&amp;amp;times;256&lt;br /&gt;
|Yes&lt;br /&gt;
|Horizon of each track&lt;br /&gt;
|-&lt;br /&gt;
|data\srch0-0.dat&lt;br /&gt;
|[[Raw VGA Image]], 32&amp;amp;times;32&lt;br /&gt;
|Yes&lt;br /&gt;
|Looks like a radar but seems to be unused&lt;br /&gt;
|-&lt;br /&gt;
|data\table0-*.dat&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
These files differ by at most a few bytes, their name suggests a sine table but this is pure speculation.&lt;br /&gt;
&lt;br /&gt;
The following pattern appears when they are interpreted as a 256 pixels wide image:&lt;br /&gt;
&lt;br /&gt;
[[File:HiOctaneTable.png]]&lt;br /&gt;
|-&lt;br /&gt;
|data\textu0-*.dat&lt;br /&gt;
|[[Raw VGA image]], 64&amp;amp;times;16384&lt;br /&gt;
|Yes&lt;br /&gt;
|64&amp;amp;times;64 terrain textures&lt;br /&gt;
|-&lt;br /&gt;
|data\title.dat&lt;br /&gt;
|[[Raw VGA image]], 320&amp;amp;times;200&lt;br /&gt;
|Yes&lt;br /&gt;
|The introductory screen&lt;br /&gt;
|-&lt;br /&gt;
|data\tmaps.dat&lt;br /&gt;
|&lt;br /&gt;
|Yes&lt;br /&gt;
|see above&lt;br /&gt;
|-&lt;br /&gt;
|data\tmaps.tab&lt;br /&gt;
|&lt;br /&gt;
|No&lt;br /&gt;
|see above&lt;br /&gt;
|-&lt;br /&gt;
|data\track0-0.dat&amp;lt;br/&amp;gt;data\track0-0.tab&amp;lt;br/&amp;gt;data\track0-1.dat&amp;lt;br/&amp;gt;data\track0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No/Yes&lt;br /&gt;
|Contain the images of the level minimaps that are shown in the HUD. The game does work without them,&lt;br /&gt;
but then the minimap is not shown. Initial game version does not use RNC compression, extended version does.&lt;br /&gt;
|-&lt;br /&gt;
|objects/data/tex0-0.dat&amp;lt;br/&amp;gt;objects/data/tex0-0.tab&lt;br /&gt;
|[[Hi-Octane Texture Atlas]], 256&amp;amp;times;768&lt;br /&gt;
|No&lt;br /&gt;
|In-game textures&lt;br /&gt;
|-&lt;br /&gt;
|objects/data/tex0-1.dat&amp;lt;br/&amp;gt;objects/data/tex0-1.tab&lt;br /&gt;
|[[Hi-Octane Texture Atlas]], 256&amp;amp;times;88&lt;br /&gt;
|No&lt;br /&gt;
|In-game textures&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; none of the TAB files are RNC-compressed.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;General&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The image formats above are partially decoded, they are still missing palette information.&lt;br /&gt;
&lt;br /&gt;
All the images are paletted, 8 bits per pixels.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;INTRO.DAT&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Header can be fixed using [http://syndicate.lubiki.pl/downloads/bullfrog_utils_flifix.zip Autodesk Animator FLI files fixer] but since format is pretty old and that [http://syndicate.lubiki.pl/downloads/utils_waaplay110.zip Autodesk Animation Player 1.10] is a legacy Win16 executable, it is not very convenient to use as of today.&lt;br /&gt;
&lt;br /&gt;
Instead, the file can be converted by FFMPEG to either BMP or AVI,&lt;br /&gt;
&lt;br /&gt;
Convert the animation to individual images, handle last invalid frame:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -i INTRO.DAT -vframes 548 -pix_fmt bgr24 intro%03d.bmp&lt;br /&gt;
&amp;lt;/syntaxhightlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert the sequence of images to a raw AVI and respect the original frame rate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -r 14 -i intro%03d.bmp -vcodec rawvideo intro.avi&lt;br /&gt;
&amp;lt;/syntaxhightlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that since the underlying format does not handle audio, there won&#039;t be any.&lt;br /&gt;
&lt;br /&gt;
== CONFIG.DAT ==&lt;br /&gt;
&lt;br /&gt;
Contains the configuration of the game, current state of game logic relevant variables (for example next selected race track),&lt;br /&gt;
and the Highscore table. Obvious settings like graphics mode (VGA vs. SVGA) or if computer players are enabled are not stored in the configuration file, and are&lt;br /&gt;
reset to the default value during each start of the game. The save game files reuse the same file format, but I believe for save game files some data fields will most likely be ignored or not used.&lt;br /&gt;
&lt;br /&gt;
The advantage is that the users game settings are restored for each save game independently. The initial game release config file always has a size of 11449 bytes, the extended game release config file 137833 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Data type !! only ext Version !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Null terminated string || No || Current championship name (max 12 characters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034D || UINT8 || Yes || Current value for Death match lives (0 min up to 4 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034E || UINT8 || Yes || Current value for Hot seat players (2 min up to 8 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034F || UINT8 || Yes || Current value for Hot seat racing time (1 min up to 5 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0350 || Null terminated string || Yes || Player 2 name (max 8 characters), If empty string Player 2 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0370 || Null terminated string || Yes || Player 3 name (max 8 characters), If empty string Player 3 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0390 || Null terminated string || Yes || Player 4 name (max 8 characters), If empty string Player 4 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03B0 || Null terminated string || Yes || Player 5 name (max 8 characters), If empty string Player 5 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03D0 || Null terminated string || Yes || Player 6 name (max 8 characters), If empty string Player 6 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03F0 || Null terminated string || Yes || Player 7 name (max 8 characters), If empty string Player 7 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0410 || Null terminated string || Yes || Player 8 name (max 8 characters), If empty string Player 8 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x094B || UINT8 || No || Current selected player craft color scheme (0 = Madmedicine, 1 = Assassins, 2 = Gorehounds, 3 = Foofighters, 4 = Dethfest, 5 = Firephreaks, 6 = Stormriders, 7 = Bullfrog)&lt;br /&gt;
|-&lt;br /&gt;
| 0x094C || UINT8 || No || Current selected player craft (0 = KD1 Speeder, 1 = Berserker, 2 = Jugga, 3 = Vampyr, 4 = Outrider, 5 = Flexiwing)&lt;br /&gt;
|-&lt;br /&gt;
| 0x094F || Null terminated string || No || Player 1 name (max 8 characters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0977 || UINT8 || No || Current game difficulty setting (0 = easy up to 3 = highest difficulty)&lt;br /&gt;
|-&lt;br /&gt;
| 0x097D || UINT8 || No || Music volume (0 = Off up to 200 = max volume)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0981 || UINT8 || No || Sound volume (0 = Off up to 200 = max volume)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0994 || STRUCT || No || Pos1 Highscore Entry (each entry 39 bytes, detail please see below)&lt;br /&gt;
|-&lt;br /&gt;
| 0x09BB || STRUCT || No || Pos2 Highscore Entry&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C79 || STRUCT || No || Pos20 Highscore Entry (last one shown in game table, but there are many more in file afterwards)&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|- &lt;br /&gt;
| 0x2996 || UINT8 || No || Shading Off = 0, Shading On = 1 (Default On)&lt;br /&gt;
|-&lt;br /&gt;
| 0x299A || UINT8 || No || Sky Off = 0, Sky On = 1 (Default On)&lt;br /&gt;
|-&lt;br /&gt;
| 0x299E || UINT8 || No || Renderer Setting 1 (TextureMapping lowest setting: 0x299E = 0,  0x29A2 = 0, 0x29A6 = 0; TextureMapping 2nd lowest setting: 0x299E = 0,  0x29A2 = 0, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x29A2 || UINT8 || No || Renderer Setting 2 (TextureMapping 3nd lowest setting: 0x299E = 1,  0x29A2 = 1, 0x29A6 = 1; TextureMapping 4th lowest setting: 0x299E = 2,  0x29A2 = 2, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x29A6 || UINT8 || No || Renderer Setting 3 (TextureMapping 5th lowest setting: 0x299E = 3,  0x29A2 = 3, 0x29A6 = 1 (default value); TextureMapping highest setting: 0x299E = 3,  0x29A2 = 4, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C76 || UINT8 || No || Current selected race track (0 = level 1, 1 = level 2, and so on)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C7A || UINT8 || No || Current selected game language (0 = English, 1 = German, 2 = French, 3 = Spanish, 4 = Italian)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Highscore Table Entry Struct Detail ===&lt;br /&gt;
* 1 byte for highscore value&lt;br /&gt;
* 3 bytes of unknown data&lt;br /&gt;
* 1 bytes for player assessement string table index&lt;br /&gt;
* 9 bytes for player name best lap, 9th byte = string termination char&lt;br /&gt;
* 25 bytes of unknown data&lt;br /&gt;
&lt;br /&gt;
The player assessement string table (inside the executable) has the following order:&lt;br /&gt;
* Immortal&lt;br /&gt;
* Hardwired&lt;br /&gt;
* Outta Control&lt;br /&gt;
* Demon&lt;br /&gt;
* Deadly&lt;br /&gt;
* Wrecker&lt;br /&gt;
* Dangerous&lt;br /&gt;
* Tailgater&lt;br /&gt;
* Antisocial&lt;br /&gt;
* Dust Devil&lt;br /&gt;
* Upwardly Mobile&lt;br /&gt;
* Mediocre&lt;br /&gt;
* Too Slow&lt;br /&gt;
* Endangered Species&lt;br /&gt;
* Target Practice&lt;br /&gt;
* Back Marker&lt;br /&gt;
* Canyon Kisser&lt;br /&gt;
* Victim&lt;br /&gt;
* Scrap&lt;br /&gt;
* Smear&lt;br /&gt;
* Cheating Sucks (this is actually an additional entry, which is not possible according to the 20 different assessement point range)&lt;br /&gt;
&lt;br /&gt;
== Level file format ==&lt;br /&gt;
&lt;br /&gt;
Many details about the Hi Octane level file format were found out in the past already, and are for example documented under the HiOctaneTools link mentioned above. One specific information that was missing until now is where to find the starting location for the race and type/location of chargers in the level file. The source code of the HiOctaneTools already contained the readout of a POI (point of interest) value from the map data which already pointed to the area of important locations, but was still lacking the information what type of location this exactly is, and what size it has in terrain cells. I found that the POI value points to certain file offsets in the level file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! POI value !! Level file offset&lt;br /&gt;
|-&lt;br /&gt;
| 992 || 246924&lt;br /&gt;
|-&lt;br /&gt;
| 993 || 247009&lt;br /&gt;
|-&lt;br /&gt;
| 994 || 247094&lt;br /&gt;
|-&lt;br /&gt;
| 995 || 247179  &lt;br /&gt;
|-&lt;br /&gt;
| 996 || 247264  &lt;br /&gt;
|-&lt;br /&gt;
| 997 || 247349  &lt;br /&gt;
|-&lt;br /&gt;
| 998 || 247434  &lt;br /&gt;
|-&lt;br /&gt;
| 999 || 247519  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each entry at this specific file locations is 85 bytes long. This bytes have the following format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte Nr !! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || UINT8 || Region type || 1 = Shield charger, 2 = Fuel charger, 3 = Ammo charger, 4 = Race start location&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UINT8 || Fixed value || Contains always value 1 for each used entry&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UINT8 || Contains value that depends on the RegionId || Value = 224 + RegionId (number of region entry), possible range from 224 up to 231 &lt;br /&gt;
|-&lt;br /&gt;
| 4 || UINT8 || Same value as Byte 3 || Please see description above &lt;br /&gt;
|-&lt;br /&gt;
| 5 || UINT8 || Fixed value || Contains always value 3 for each used entry &lt;br /&gt;
|-&lt;br /&gt;
| 12 || UINT8 || Contains value that depends on the RegionId || Value = 200 + RegionId (number of region entry), possible range from 200 up to 207 &lt;br /&gt;
|-&lt;br /&gt;
| 13 || UINT8 || Fixed value || Contains always value 7 for each used entry &lt;br /&gt;
|-&lt;br /&gt;
| 16 || UINT8 || Seems to have always the same value as byte 4 || &lt;br /&gt;
|-&lt;br /&gt;
| 17 || UINT8 || Seems to have always the same value as byte 5 || &lt;br /&gt;
|-&lt;br /&gt;
| 18 || UINT8 || Fixed value || Contains always value 1 for each used entry&lt;br /&gt;
|-&lt;br /&gt;
| 24 &amp;amp; 25 || FLOAT || X coordinate || X coordinate of cell right in the middle of the defined location, Byte 25 = Integer, Byte 24 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 26 &amp;amp; 27 || FLOAT || Y coordinate || Y coordinate of cell right in the middle of the defined location, Byte 27 = Integer, Byte 26 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 39 || UINT8 || In most levels value is fixed with 232 || Some levels use different values, Right now purpose is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 40 || UINT8 || In most levels value is fixed with 54 || Some levels use different values, Right now purpose is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 45 &amp;amp; 46 || FLOAT || Region size in Cells in X direction || Counted from the middle cell to the outer edge of the region, Byte 46 = Integer, Byte 45 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 47 &amp;amp; 48 || FLOAT || Region size in Cells in Y direction || Counted from the middle cell to the outer edge of the region, Byte 48 = Integer, Byte 47 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 49 || UINT8 || Fixed value || Seems to be always value 128 for each existing region entry, For empty entry value 0&lt;br /&gt;
|-&lt;br /&gt;
| 69 || UINT8 || Value depending on region type || Always contains value 244 + Value of byte at offset 0 (Region type)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits == &lt;br /&gt;
&lt;br /&gt;
* [https://github.com/movAX13h/ movAX13h]&lt;br /&gt;
* [https://github.com/woalexan/ woalexan]&lt;br /&gt;
* [https://github.com/Aybe/ Aybe]&lt;br /&gt;
* [https://github.com/Malvineous/ Malvineous]&lt;br /&gt;
* [https://github.com/srtuss/ srtuss]&lt;br /&gt;
* [http://syndicate.lubiki.pl/ Syndicate series unofficial fan site] for the various utilities.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://1drv.ms/f/s!AqAtR29m3cqGxz75Vv-3cap8guE3 Game demo, Network and MPU-401 patches]&lt;br /&gt;
* [https://www.vogons.org/viewtopic.php?f=7&amp;amp;t=33173&amp;amp;hilit=hi+octane Hi-Octane + General MIDI = crash?]&lt;br /&gt;
* [https://github.com/RetroReversing/retroReversing/blob/779ab5297c1e5501a4e563e801dfd0724acc1536/pages/ps1/PS1Symbols.md?plain=1#L59 Debug symbols from the PSX release]&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Hi_Octane&amp;diff=12796</id>
		<title>Hi Octane</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Hi_Octane&amp;diff=12796"/>
		<updated>2026-02-09T08:19:36Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Links */ add debug symbols&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hi Octane&#039;&#039;&#039; is hover-car racing game. According to Sean Cooper it was made in 6.5 weeks using engine code from Syndicate and Magic Carpet. There are at least two releases of the game, the initial release (executable contains string &#039;&#039;Jun 10 1995 17:45:48&#039;&#039;) with 6 levels, and a later extended version (&#039;&#039;Oct 23 1995 15:57:32&#039;&#039;) with 9 levels, additional game modes, and slightly reworked levels. In certain file format details the used version makes a difference.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
Level inspector and incomplete editor by movAX13h (contains all assets of the original game extracted/converted by srtuss): https://github.com/movAX13h/HiOctaneTools&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = sounds/music.dat&lt;br /&gt;
 | Format = see below&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Archive containing music files in different formats: [[XMI Format]], [[GEN Format]], [[ROL Format]], [[WTB Format]].&amp;lt;br/&amp;gt;There are five files per format : TGAME1, TGAME2, TGAME3, TGAME4, TINTRO2.&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== MUSIC.DAT ==&lt;br /&gt;
&lt;br /&gt;
* read the [[INT32LE]] at EOF and seek to returned position&lt;br /&gt;
* count the N number of [[INT16LE]] that equals &amp;lt;code&amp;gt;0x0001&amp;lt;/code&amp;gt;, then read N of the following struct:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTunes || Offset to the list of tunes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTune1 || Offset to the first tune&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || unknown || Unknown (always &amp;lt;code&amp;gt;0xC0000000&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;192&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || lenTunes || Length of all tunes together, bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* for each of the former struct&lt;br /&gt;
** seek to &amp;lt;code&amp;gt;offTunes&amp;lt;/code&amp;gt;&lt;br /&gt;
** read one of the following struct, its &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; indicates the byte sum of tunes following&lt;br /&gt;
** read as many of the following struct until their &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; sum equals the one in previous step&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || name[12] || File name of the tune, &amp;lt;code&amp;gt;\0&amp;lt;/code&amp;gt; padded&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || padding[6] || Padding bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTune || Tune relative offset&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || padding[4] || Padding bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || lenTune || Tune length, bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || unknown || Unknown (always &amp;lt;code&amp;gt;0x5A00&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;90&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* you now have a catalog of a collection of tunes, e.g. five ROL songs, five WTB songs etc&lt;br /&gt;
* to extract a song, copy &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; bytes starting at &amp;lt;code&amp;gt;offTune1 + offTune&amp;lt;/code&amp;gt;, file name is &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RNC-compressed files ==&lt;br /&gt;
&lt;br /&gt;
Many of the game&#039;s files are compressed using the [[Rob Northern Compression]] format; some of them such as &#039;&#039;SOUND\SOUND.DAT&#039;&#039; are a concatenation of many RNC archives simply &#039;&#039;glued&#039;&#039; together.&lt;br /&gt;
&lt;br /&gt;
A command-line unpacker can be found here : [http://syndicate.lubiki.pl/downloads/bullfrog_utils_rnc.zip Bullfrog games RNC Utilities] (from [http://syndicate.lubiki.pl/synd/rework/synd_rework_rnc.php Unpacking RNC files])&lt;br /&gt;
&lt;br /&gt;
== DAT/TAB pairs ==&lt;br /&gt;
&lt;br /&gt;
Can be decompressed using [http://syndicate.lubiki.pl/downloads/bullfrog_utils_tabdat.zip Bullfrog games DAT/TAB Graphics extractor] (they first must be decompressed if they are RNC-compressed).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DAT format:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Without a TAB file, it&#039;s raw pixels; with a TAB file it&#039;s a form of line by line RLE compression where only transparent pixels are compressed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TAB format:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || position || Image position in .DAT&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || width || Image width&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || height || Image height&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TMAPS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Contains powerups and some HUD elements but TAB format is different:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || flat || Size of RNC stream unpacked, useless as it&#039;s contained in stream header already&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || pos || Position in DAT&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || index || Some index but can be duplicate, so likely a type or category instead&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are N+1 entries to be able to compute last item size in DAT.&lt;br /&gt;
&lt;br /&gt;
Each image has the following format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT16 || unknown || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || width || Image width&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || height || Image height&lt;br /&gt;
|-&lt;br /&gt;
| INT8[] || pixels || Image pixels, 8-bit paletted &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game&#039;s files ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Format&lt;br /&gt;
! RNC compressed&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|data\hfont0-0.dat&amp;lt;br/&amp;gt;data\hfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Thin white font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\hspr0-0.dat&amp;lt;br/&amp;gt;data\hspr0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor icons (large)&lt;br /&gt;
|-&lt;br /&gt;
|data\intro.dat&lt;br /&gt;
|[[Autodesk FLI animation]]&lt;br /&gt;
|No&lt;br /&gt;
|Game introduction&lt;br /&gt;
|-&lt;br /&gt;
|data\logo0-0.dat&amp;lt;br/&amp;gt;data\logo0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Game logo (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\logo0-1.dat&amp;lt;br/&amp;gt;data\logo0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Game logo (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\mfont0-0.dat&amp;lt;br/&amp;gt;data\mfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Thin white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\mspr0-0.dat&amp;lt;br/&amp;gt;data\mspr0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor icons (small)&lt;br /&gt;
|-&lt;br /&gt;
|data\olfnt0-0.dat&amp;lt;br/&amp;gt;data\olfnt0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Large white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\olfnt0-1.dat&amp;lt;br/&amp;gt;data\olfnt0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Large white font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\onet0-*.dat&amp;lt;br/&amp;gt;data\oscr0-*.dat&lt;br /&gt;
|[[Raw VGA image]], 320&amp;amp;times;200 and 640&amp;amp;times;480&lt;br /&gt;
|Yes&lt;br /&gt;
|Loading and selection screens&lt;br /&gt;
|-&lt;br /&gt;
|data\osfnt0-0.dat&amp;lt;br/&amp;gt;data\osfnt0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Small white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\osfnt0-1.dat&amp;lt;br/&amp;gt;data\osfnt0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Small white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\palet0-0.dat&lt;br /&gt;
|[[VGA Palette]]&lt;br /&gt;
|No&lt;br /&gt;
|The palette of every asset of the game, unless specified&lt;br /&gt;
|-&lt;br /&gt;
|data\panel0-0.dat&amp;lt;br/&amp;gt;data\panel0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 2-players (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel0-1.dat&amp;lt;br/&amp;gt;data\panel0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 1-player (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel9-0.dat&amp;lt;br/&amp;gt;data\panel9-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 2-players (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel9-1.dat&amp;lt;br/&amp;gt;data\panel9-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 1-player (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\pfont0-0.dat&amp;lt;br/&amp;gt;data\pfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|Large green font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\pfont0-1.dat&amp;lt;br/&amp;gt;data\pfont0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|Large green font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\point0-0.dat&amp;lt;br/&amp;gt;data\point0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor cursors&lt;br /&gt;
|-&lt;br /&gt;
|data\puzzle.dat&lt;br /&gt;
|[[Raw VGA image]], 112&amp;amp;times;96&lt;br /&gt;
|No&lt;br /&gt;
|The cheat puzzle activated with CTRL-Tab in-game&lt;br /&gt;
|-&lt;br /&gt;
|data\sky0-*.dat&lt;br /&gt;
|[[Raw VGA Image]], 256&amp;amp;times;256&lt;br /&gt;
|Yes&lt;br /&gt;
|Horizon of each track&lt;br /&gt;
|-&lt;br /&gt;
|data\srch0-0.dat&lt;br /&gt;
|[[Raw VGA Image]], 32&amp;amp;times;32&lt;br /&gt;
|Yes&lt;br /&gt;
|Looks like a radar but seems to be unused&lt;br /&gt;
|-&lt;br /&gt;
|data\table0-*.dat&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
These files differ by at most a few bytes, their name suggests a sine table but this is pure speculation.&lt;br /&gt;
&lt;br /&gt;
The following pattern appears when they are interpreted as a 256 pixels wide image:&lt;br /&gt;
&lt;br /&gt;
[[File:HiOctaneTable.png]]&lt;br /&gt;
|-&lt;br /&gt;
|data\textu0-*.dat&lt;br /&gt;
|[[Raw VGA image]], 64&amp;amp;times;16384&lt;br /&gt;
|Yes&lt;br /&gt;
|64&amp;amp;times;64 terrain textures&lt;br /&gt;
|-&lt;br /&gt;
|data\title.dat&lt;br /&gt;
|[[Raw VGA image]], 320&amp;amp;times;200&lt;br /&gt;
|Yes&lt;br /&gt;
|The introductory screen&lt;br /&gt;
|-&lt;br /&gt;
|data\tmaps.dat&lt;br /&gt;
|&lt;br /&gt;
|Yes&lt;br /&gt;
|see above&lt;br /&gt;
|-&lt;br /&gt;
|data\tmaps.tab&lt;br /&gt;
|&lt;br /&gt;
|No&lt;br /&gt;
|see above&lt;br /&gt;
|-&lt;br /&gt;
|data\track0-0.dat&amp;lt;br/&amp;gt;data\track0-0.tab&amp;lt;br/&amp;gt;data\track0-1.dat&amp;lt;br/&amp;gt;data\track0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No/Yes&lt;br /&gt;
|Contain the images of the level minimaps that are shown in the HUD. The game does work without them,&lt;br /&gt;
but then the minimap is not shown. Initial game version does not use RNC compression, extended version does.&lt;br /&gt;
|-&lt;br /&gt;
|objects/data/tex0-0.dat&amp;lt;br/&amp;gt;objects/data/tex0-0.tab&lt;br /&gt;
|[[Hi-Octane Texture Atlas]], 256&amp;amp;times;768&lt;br /&gt;
|No&lt;br /&gt;
|In-game textures&lt;br /&gt;
|-&lt;br /&gt;
|objects/data/tex0-1.dat&amp;lt;br/&amp;gt;objects/data/tex0-1.tab&lt;br /&gt;
|[[Hi-Octane Texture Atlas]], 256&amp;amp;times;88&lt;br /&gt;
|No&lt;br /&gt;
|In-game textures&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; none of the TAB files are RNC-compressed.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;General&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The image formats above are partially decoded, they are still missing palette information.&lt;br /&gt;
&lt;br /&gt;
All the images are paletted, 8 bits per pixels.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;INTRO.DAT&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Header can be fixed using [http://syndicate.lubiki.pl/downloads/bullfrog_utils_flifix.zip Autodesk Animator FLI files fixer] but since format is pretty old and that [http://syndicate.lubiki.pl/downloads/utils_waaplay110.zip Autodesk Animation Player 1.10] is a legacy Win16 executable, it is not very convenient to use as of today.&lt;br /&gt;
&lt;br /&gt;
Instead, the file can be converted by FFMPEG to either BMP or AVI,&lt;br /&gt;
&lt;br /&gt;
Convert the animation to individual images, handle last invalid frame:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -i INTRO.DAT -vframes 548 -pix_fmt bgr24 intro%03d.bmp&lt;br /&gt;
&amp;lt;/syntaxhightlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert the sequence of images to a raw AVI and respect the original frame rate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -r 14 -i intro%03d.bmp -vcodec rawvideo intro.avi&lt;br /&gt;
&amp;lt;/syntaxhightlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that since the underlying format does not handle audio, there won&#039;t be any.&lt;br /&gt;
&lt;br /&gt;
== CONFIG.DAT ==&lt;br /&gt;
&lt;br /&gt;
Contains the configuration of the game, current state of game logic relevant variables (for example next selected race track),&lt;br /&gt;
and the Highscore table. Obvious settings like graphics mode (VGA vs. SVGA) or if computer players are enabled are not stored in the configuration file, and are&lt;br /&gt;
reset to the default value during each start of the game. The save game files reuse the same file format, but I believe for save game files some data fields will most likely be ignored or not used.&lt;br /&gt;
&lt;br /&gt;
The advantage is that the users game settings are restored for each save game independently. The initial game release config file always has a size of 11449 bytes, the extended game release config file 137833 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Data type !! only ext Version !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Null terminated string || No || Current championship name (max 12 characters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034D || UINT8 || Yes || Current value for Death match lives (0 min up to 4 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034E || UINT8 || Yes || Current value for Hot seat players (2 min up to 8 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034F || UINT8 || Yes || Current value for Hot seat racing time (1 min up to 5 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0350 || Null terminated string || Yes || Player 2 name (max 8 characters), If empty string Player 2 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0370 || Null terminated string || Yes || Player 3 name (max 8 characters), If empty string Player 3 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0390 || Null terminated string || Yes || Player 4 name (max 8 characters), If empty string Player 4 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03B0 || Null terminated string || Yes || Player 5 name (max 8 characters), If empty string Player 5 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03D0 || Null terminated string || Yes || Player 6 name (max 8 characters), If empty string Player 6 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03F0 || Null terminated string || Yes || Player 7 name (max 8 characters), If empty string Player 7 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0410 || Null terminated string || Yes || Player 8 name (max 8 characters), If empty string Player 8 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x094B || UINT8 || No || Current selected player craft color scheme (0 = Madmedicine, 1 = Assassins, 2 = Gorehounds, 3 = Foofighters, 4 = Dethfest, 5 = Firephreaks, 6 = Stormriders, 7 = Bullfrog)&lt;br /&gt;
|-&lt;br /&gt;
| 0x094C || UINT8 || No || Current selected player craft (0 = KD1 Speeder, 1 = Berserker, 2 = Jugga, 3 = Vampyr, 4 = Outrider, 5 = Flexiwing)&lt;br /&gt;
|-&lt;br /&gt;
| 0x094F || Null terminated string || No || Player 1 name (max 8 characters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0977 || UINT8 || No || Current game difficulty setting (0 = easy up to 3 = highest difficulty)&lt;br /&gt;
|-&lt;br /&gt;
| 0x097D || UINT8 || No || Music volume (0 = Off up to 200 = max volume)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0981 || UINT8 || No || Sound volume (0 = Off up to 200 = max volume)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0994 || STRUCT || No || Pos1 Highscore Entry (each entry 39 bytes, detail please see below)&lt;br /&gt;
|-&lt;br /&gt;
| 0x09BB || STRUCT || No || Pos2 Highscore Entry&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C79 || STRUCT || No || Pos20 Highscore Entry (last one shown in game table, but there are many more in file afterwards)&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|- &lt;br /&gt;
| 0x2996 || UINT8 || No || Shading Off = 0, Shading On = 1 (Default On)&lt;br /&gt;
|-&lt;br /&gt;
| 0x299A || UINT8 || No || Sky Off = 0, Sky On = 1 (Default On)&lt;br /&gt;
|-&lt;br /&gt;
| 0x299E || UINT8 || No || Renderer Setting 1 (TextureMapping lowest setting: 0x299E = 0,  0x29A2 = 0, 0x29A6 = 0; TextureMapping 2nd lowest setting: 0x299E = 0,  0x29A2 = 0, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x29A2 || UINT8 || No || Renderer Setting 2 (TextureMapping 3nd lowest setting: 0x299E = 1,  0x29A2 = 1, 0x29A6 = 1; TextureMapping 4th lowest setting: 0x299E = 2,  0x29A2 = 2, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x29A6 || UINT8 || No || Renderer Setting 3 (TextureMapping 5th lowest setting: 0x299E = 3,  0x29A2 = 3, 0x29A6 = 1 (default value); TextureMapping highest setting: 0x299E = 3,  0x29A2 = 4, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C76 || UINT8 || No || Current selected race track (0 = level 1, 1 = level 2, and so on)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C7A || UINT8 || No || Current selected game language (0 = English, 1 = German, 2 = French, 3 = Spanish, 4 = Italian)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Highscore Table Entry Struct Detail ===&lt;br /&gt;
* 1 byte for highscore value&lt;br /&gt;
* 3 bytes of unknown data&lt;br /&gt;
* 1 bytes for player assessement string table index&lt;br /&gt;
* 9 bytes for player name best lap, 9th byte = string termination char&lt;br /&gt;
* 25 bytes of unknown data&lt;br /&gt;
&lt;br /&gt;
The player assessement string table (inside the executable) has the following order:&lt;br /&gt;
* Immortal&lt;br /&gt;
* Hardwired&lt;br /&gt;
* Outta Control&lt;br /&gt;
* Demon&lt;br /&gt;
* Deadly&lt;br /&gt;
* Wrecker&lt;br /&gt;
* Dangerous&lt;br /&gt;
* Tailgater&lt;br /&gt;
* Antisocial&lt;br /&gt;
* Dust Devil&lt;br /&gt;
* Upwardly Mobile&lt;br /&gt;
* Mediocre&lt;br /&gt;
* Too Slow&lt;br /&gt;
* Endangered Species&lt;br /&gt;
* Target Practice&lt;br /&gt;
* Back Marker&lt;br /&gt;
* Canyon Kisser&lt;br /&gt;
* Victim&lt;br /&gt;
* Scrap&lt;br /&gt;
* Smear&lt;br /&gt;
* Cheating Sucks (this is actually an additional entry, which is not possible according to the 20 different assessement point range)&lt;br /&gt;
&lt;br /&gt;
== Level file format ==&lt;br /&gt;
&lt;br /&gt;
Many details about the Hi Octane level file format were found out in the past already, and are for example documented under the HiOctaneTools link mentioned above. One specific information that was missing until now is where to find the starting location for the race and type/location of chargers in the level file. The source code of the HiOctaneTools already contained the readout of a POI (point of interest) value from the map data which already pointed to the area of important locations, but was still lacking the information what type of location this exactly is, and what size it has in terrain cells. I found that the POI value points to certain file offsets in the level file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! POI value !! Level file offset&lt;br /&gt;
|-&lt;br /&gt;
| 992 || 246924&lt;br /&gt;
|-&lt;br /&gt;
| 993 || 247009&lt;br /&gt;
|-&lt;br /&gt;
| 994 || 247094&lt;br /&gt;
|-&lt;br /&gt;
| 995 || 247179  &lt;br /&gt;
|-&lt;br /&gt;
| 996 || 247264  &lt;br /&gt;
|-&lt;br /&gt;
| 997 || 247349  &lt;br /&gt;
|-&lt;br /&gt;
| 998 || 247434  &lt;br /&gt;
|-&lt;br /&gt;
| 999 || 247519  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each entry at this specific file locations is 85 bytes long. This bytes have the following format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte Nr !! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || UINT8 || Region type || 1 = Shield charger, 2 = Fuel charger, 3 = Ammo charger, 4 = Race start location&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UINT8 || Fixed value || Contains always value 1 for each used entry&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UINT8 || Contains value that depends on the RegionId || Value = 224 + RegionId (number of region entry), possible range from 224 up to 231 &lt;br /&gt;
|-&lt;br /&gt;
| 4 || UINT8 || Same value as Byte 3 || Please see description above &lt;br /&gt;
|-&lt;br /&gt;
| 5 || UINT8 || Fixed value || Contains always value 3 for each used entry &lt;br /&gt;
|-&lt;br /&gt;
| 12 || UINT8 || Contains value that depends on the RegionId || Value = 200 + RegionId (number of region entry), possible range from 200 up to 207 &lt;br /&gt;
|-&lt;br /&gt;
| 13 || UINT8 || Fixed value || Contains always value 7 for each used entry &lt;br /&gt;
|-&lt;br /&gt;
| 16 || UINT8 || Seems to have always the same value as byte 4 || &lt;br /&gt;
|-&lt;br /&gt;
| 17 || UINT8 || Seems to have always the same value as byte 5 || &lt;br /&gt;
|-&lt;br /&gt;
| 18 || UINT8 || Fixed value || Contains always value 1 for each used entry&lt;br /&gt;
|-&lt;br /&gt;
| 24 &amp;amp; 25 || FLOAT || X coordinate || X coordinate of cell right in the middle of the defined location, Byte 25 = Integer, Byte 24 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 26 &amp;amp; 27 || FLOAT || Y coordinate || Y coordinate of cell right in the middle of the defined location, Byte 27 = Integer, Byte 26 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 39 || UINT8 || In most levels value is fixed with 232 || Some levels use different values, Right now purpose is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 40 || UINT8 || In most levels value is fixed with 54 || Some levels use different values, Right now purpose is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 45 &amp;amp; 46 || FLOAT || Region size in Cells in X direction || Counted from the middle cell to the outer edge of the region, Byte 46 = Integer, Byte 45 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 47 &amp;amp; 48 || FLOAT || Region size in Cells in Y direction || Counted from the middle cell to the outer edge of the region, Byte 48 = Integer, Byte 47 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 49 || UINT8 || Fixed value || Seems to be always value 128 for each existing region entry, For empty entry value 0&lt;br /&gt;
|-&lt;br /&gt;
| 69 || UINT8 || Value depending on region type || Always contains value 244 + Value of byte at offset 0 (Region type)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits == &lt;br /&gt;
&lt;br /&gt;
* [https://github.com/movAX13h/ movAX13h]&lt;br /&gt;
* [https://github.com/woalexan/ woalexan]&lt;br /&gt;
* [https://github.com/Aybe/ Aybe]&lt;br /&gt;
* [https://github.com/Malvineous/ Malvineous]&lt;br /&gt;
* [https://github.com/srtuss/ srtuss]&lt;br /&gt;
* [http://syndicate.lubiki.pl/ Syndicate series unofficial fan site] for the various utilities.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://1drv.ms/f/s!AqAtR29m3cqGxz75Vv-3cap8guE3 Game demo, Network and MPU-401 patches]&lt;br /&gt;
* [https://www.vogons.org/viewtopic.php?f=7&amp;amp;t=33173&amp;amp;hilit=hi+octane Hi-Octane + General MIDI = crash?]&lt;br /&gt;
* [https://github.com/RetroReversing/retroReversing/blob/779ab5297c1e5501a4e563e801dfd0724acc1536/pages/ps1/PS1Symbols.md?plain=1#L59 Debug symbols from the PSX release]&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Hi_Octane&amp;diff=12795</id>
		<title>Hi Octane</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Hi_Octane&amp;diff=12795"/>
		<updated>2026-02-09T08:18:04Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Credits (in alphabetical order) */ rearrange&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hi Octane&#039;&#039;&#039; is hover-car racing game. According to Sean Cooper it was made in 6.5 weeks using engine code from Syndicate and Magic Carpet. There are at least two releases of the game, the initial release (executable contains string &#039;&#039;Jun 10 1995 17:45:48&#039;&#039;) with 6 levels, and a later extended version (&#039;&#039;Oct 23 1995 15:57:32&#039;&#039;) with 9 levels, additional game modes, and slightly reworked levels. In certain file format details the used version makes a difference.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
Level inspector and incomplete editor by movAX13h (contains all assets of the original game extracted/converted by srtuss): https://github.com/movAX13h/HiOctaneTools&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = sounds/music.dat&lt;br /&gt;
 | Format = see below&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Archive containing music files in different formats: [[XMI Format]], [[GEN Format]], [[ROL Format]], [[WTB Format]].&amp;lt;br/&amp;gt;There are five files per format : TGAME1, TGAME2, TGAME3, TGAME4, TINTRO2.&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== MUSIC.DAT ==&lt;br /&gt;
&lt;br /&gt;
* read the [[INT32LE]] at EOF and seek to returned position&lt;br /&gt;
* count the N number of [[INT16LE]] that equals &amp;lt;code&amp;gt;0x0001&amp;lt;/code&amp;gt;, then read N of the following struct:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTunes || Offset to the list of tunes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTune1 || Offset to the first tune&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || unknown || Unknown (always &amp;lt;code&amp;gt;0xC0000000&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;192&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || lenTunes || Length of all tunes together, bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* for each of the former struct&lt;br /&gt;
** seek to &amp;lt;code&amp;gt;offTunes&amp;lt;/code&amp;gt;&lt;br /&gt;
** read one of the following struct, its &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; indicates the byte sum of tunes following&lt;br /&gt;
** read as many of the following struct until their &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; sum equals the one in previous step&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || name[12] || File name of the tune, &amp;lt;code&amp;gt;\0&amp;lt;/code&amp;gt; padded&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || padding[6] || Padding bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTune || Tune relative offset&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || padding[4] || Padding bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || lenTune || Tune length, bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || unknown || Unknown (always &amp;lt;code&amp;gt;0x5A00&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;90&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* you now have a catalog of a collection of tunes, e.g. five ROL songs, five WTB songs etc&lt;br /&gt;
* to extract a song, copy &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; bytes starting at &amp;lt;code&amp;gt;offTune1 + offTune&amp;lt;/code&amp;gt;, file name is &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RNC-compressed files ==&lt;br /&gt;
&lt;br /&gt;
Many of the game&#039;s files are compressed using the [[Rob Northern Compression]] format; some of them such as &#039;&#039;SOUND\SOUND.DAT&#039;&#039; are a concatenation of many RNC archives simply &#039;&#039;glued&#039;&#039; together.&lt;br /&gt;
&lt;br /&gt;
A command-line unpacker can be found here : [http://syndicate.lubiki.pl/downloads/bullfrog_utils_rnc.zip Bullfrog games RNC Utilities] (from [http://syndicate.lubiki.pl/synd/rework/synd_rework_rnc.php Unpacking RNC files])&lt;br /&gt;
&lt;br /&gt;
== DAT/TAB pairs ==&lt;br /&gt;
&lt;br /&gt;
Can be decompressed using [http://syndicate.lubiki.pl/downloads/bullfrog_utils_tabdat.zip Bullfrog games DAT/TAB Graphics extractor] (they first must be decompressed if they are RNC-compressed).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DAT format:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Without a TAB file, it&#039;s raw pixels; with a TAB file it&#039;s a form of line by line RLE compression where only transparent pixels are compressed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TAB format:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || position || Image position in .DAT&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || width || Image width&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || height || Image height&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TMAPS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Contains powerups and some HUD elements but TAB format is different:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || flat || Size of RNC stream unpacked, useless as it&#039;s contained in stream header already&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || pos || Position in DAT&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || index || Some index but can be duplicate, so likely a type or category instead&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are N+1 entries to be able to compute last item size in DAT.&lt;br /&gt;
&lt;br /&gt;
Each image has the following format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT16 || unknown || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || width || Image width&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || height || Image height&lt;br /&gt;
|-&lt;br /&gt;
| INT8[] || pixels || Image pixels, 8-bit paletted &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game&#039;s files ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Format&lt;br /&gt;
! RNC compressed&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|data\hfont0-0.dat&amp;lt;br/&amp;gt;data\hfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Thin white font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\hspr0-0.dat&amp;lt;br/&amp;gt;data\hspr0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor icons (large)&lt;br /&gt;
|-&lt;br /&gt;
|data\intro.dat&lt;br /&gt;
|[[Autodesk FLI animation]]&lt;br /&gt;
|No&lt;br /&gt;
|Game introduction&lt;br /&gt;
|-&lt;br /&gt;
|data\logo0-0.dat&amp;lt;br/&amp;gt;data\logo0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Game logo (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\logo0-1.dat&amp;lt;br/&amp;gt;data\logo0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Game logo (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\mfont0-0.dat&amp;lt;br/&amp;gt;data\mfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Thin white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\mspr0-0.dat&amp;lt;br/&amp;gt;data\mspr0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor icons (small)&lt;br /&gt;
|-&lt;br /&gt;
|data\olfnt0-0.dat&amp;lt;br/&amp;gt;data\olfnt0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Large white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\olfnt0-1.dat&amp;lt;br/&amp;gt;data\olfnt0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Large white font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\onet0-*.dat&amp;lt;br/&amp;gt;data\oscr0-*.dat&lt;br /&gt;
|[[Raw VGA image]], 320&amp;amp;times;200 and 640&amp;amp;times;480&lt;br /&gt;
|Yes&lt;br /&gt;
|Loading and selection screens&lt;br /&gt;
|-&lt;br /&gt;
|data\osfnt0-0.dat&amp;lt;br/&amp;gt;data\osfnt0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Small white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\osfnt0-1.dat&amp;lt;br/&amp;gt;data\osfnt0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Small white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\palet0-0.dat&lt;br /&gt;
|[[VGA Palette]]&lt;br /&gt;
|No&lt;br /&gt;
|The palette of every asset of the game, unless specified&lt;br /&gt;
|-&lt;br /&gt;
|data\panel0-0.dat&amp;lt;br/&amp;gt;data\panel0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 2-players (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel0-1.dat&amp;lt;br/&amp;gt;data\panel0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 1-player (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel9-0.dat&amp;lt;br/&amp;gt;data\panel9-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 2-players (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel9-1.dat&amp;lt;br/&amp;gt;data\panel9-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 1-player (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\pfont0-0.dat&amp;lt;br/&amp;gt;data\pfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|Large green font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\pfont0-1.dat&amp;lt;br/&amp;gt;data\pfont0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|Large green font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\point0-0.dat&amp;lt;br/&amp;gt;data\point0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor cursors&lt;br /&gt;
|-&lt;br /&gt;
|data\puzzle.dat&lt;br /&gt;
|[[Raw VGA image]], 112&amp;amp;times;96&lt;br /&gt;
|No&lt;br /&gt;
|The cheat puzzle activated with CTRL-Tab in-game&lt;br /&gt;
|-&lt;br /&gt;
|data\sky0-*.dat&lt;br /&gt;
|[[Raw VGA Image]], 256&amp;amp;times;256&lt;br /&gt;
|Yes&lt;br /&gt;
|Horizon of each track&lt;br /&gt;
|-&lt;br /&gt;
|data\srch0-0.dat&lt;br /&gt;
|[[Raw VGA Image]], 32&amp;amp;times;32&lt;br /&gt;
|Yes&lt;br /&gt;
|Looks like a radar but seems to be unused&lt;br /&gt;
|-&lt;br /&gt;
|data\table0-*.dat&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
These files differ by at most a few bytes, their name suggests a sine table but this is pure speculation.&lt;br /&gt;
&lt;br /&gt;
The following pattern appears when they are interpreted as a 256 pixels wide image:&lt;br /&gt;
&lt;br /&gt;
[[File:HiOctaneTable.png]]&lt;br /&gt;
|-&lt;br /&gt;
|data\textu0-*.dat&lt;br /&gt;
|[[Raw VGA image]], 64&amp;amp;times;16384&lt;br /&gt;
|Yes&lt;br /&gt;
|64&amp;amp;times;64 terrain textures&lt;br /&gt;
|-&lt;br /&gt;
|data\title.dat&lt;br /&gt;
|[[Raw VGA image]], 320&amp;amp;times;200&lt;br /&gt;
|Yes&lt;br /&gt;
|The introductory screen&lt;br /&gt;
|-&lt;br /&gt;
|data\tmaps.dat&lt;br /&gt;
|&lt;br /&gt;
|Yes&lt;br /&gt;
|see above&lt;br /&gt;
|-&lt;br /&gt;
|data\tmaps.tab&lt;br /&gt;
|&lt;br /&gt;
|No&lt;br /&gt;
|see above&lt;br /&gt;
|-&lt;br /&gt;
|data\track0-0.dat&amp;lt;br/&amp;gt;data\track0-0.tab&amp;lt;br/&amp;gt;data\track0-1.dat&amp;lt;br/&amp;gt;data\track0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No/Yes&lt;br /&gt;
|Contain the images of the level minimaps that are shown in the HUD. The game does work without them,&lt;br /&gt;
but then the minimap is not shown. Initial game version does not use RNC compression, extended version does.&lt;br /&gt;
|-&lt;br /&gt;
|objects/data/tex0-0.dat&amp;lt;br/&amp;gt;objects/data/tex0-0.tab&lt;br /&gt;
|[[Hi-Octane Texture Atlas]], 256&amp;amp;times;768&lt;br /&gt;
|No&lt;br /&gt;
|In-game textures&lt;br /&gt;
|-&lt;br /&gt;
|objects/data/tex0-1.dat&amp;lt;br/&amp;gt;objects/data/tex0-1.tab&lt;br /&gt;
|[[Hi-Octane Texture Atlas]], 256&amp;amp;times;88&lt;br /&gt;
|No&lt;br /&gt;
|In-game textures&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; none of the TAB files are RNC-compressed.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;General&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The image formats above are partially decoded, they are still missing palette information.&lt;br /&gt;
&lt;br /&gt;
All the images are paletted, 8 bits per pixels.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;INTRO.DAT&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Header can be fixed using [http://syndicate.lubiki.pl/downloads/bullfrog_utils_flifix.zip Autodesk Animator FLI files fixer] but since format is pretty old and that [http://syndicate.lubiki.pl/downloads/utils_waaplay110.zip Autodesk Animation Player 1.10] is a legacy Win16 executable, it is not very convenient to use as of today.&lt;br /&gt;
&lt;br /&gt;
Instead, the file can be converted by FFMPEG to either BMP or AVI,&lt;br /&gt;
&lt;br /&gt;
Convert the animation to individual images, handle last invalid frame:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -i INTRO.DAT -vframes 548 -pix_fmt bgr24 intro%03d.bmp&lt;br /&gt;
&amp;lt;/syntaxhightlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert the sequence of images to a raw AVI and respect the original frame rate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -r 14 -i intro%03d.bmp -vcodec rawvideo intro.avi&lt;br /&gt;
&amp;lt;/syntaxhightlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that since the underlying format does not handle audio, there won&#039;t be any.&lt;br /&gt;
&lt;br /&gt;
== CONFIG.DAT ==&lt;br /&gt;
&lt;br /&gt;
Contains the configuration of the game, current state of game logic relevant variables (for example next selected race track),&lt;br /&gt;
and the Highscore table. Obvious settings like graphics mode (VGA vs. SVGA) or if computer players are enabled are not stored in the configuration file, and are&lt;br /&gt;
reset to the default value during each start of the game. The save game files reuse the same file format, but I believe for save game files some data fields will most likely be ignored or not used.&lt;br /&gt;
&lt;br /&gt;
The advantage is that the users game settings are restored for each save game independently. The initial game release config file always has a size of 11449 bytes, the extended game release config file 137833 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Data type !! only ext Version !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Null terminated string || No || Current championship name (max 12 characters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034D || UINT8 || Yes || Current value for Death match lives (0 min up to 4 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034E || UINT8 || Yes || Current value for Hot seat players (2 min up to 8 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034F || UINT8 || Yes || Current value for Hot seat racing time (1 min up to 5 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0350 || Null terminated string || Yes || Player 2 name (max 8 characters), If empty string Player 2 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0370 || Null terminated string || Yes || Player 3 name (max 8 characters), If empty string Player 3 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0390 || Null terminated string || Yes || Player 4 name (max 8 characters), If empty string Player 4 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03B0 || Null terminated string || Yes || Player 5 name (max 8 characters), If empty string Player 5 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03D0 || Null terminated string || Yes || Player 6 name (max 8 characters), If empty string Player 6 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03F0 || Null terminated string || Yes || Player 7 name (max 8 characters), If empty string Player 7 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0410 || Null terminated string || Yes || Player 8 name (max 8 characters), If empty string Player 8 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x094B || UINT8 || No || Current selected player craft color scheme (0 = Madmedicine, 1 = Assassins, 2 = Gorehounds, 3 = Foofighters, 4 = Dethfest, 5 = Firephreaks, 6 = Stormriders, 7 = Bullfrog)&lt;br /&gt;
|-&lt;br /&gt;
| 0x094C || UINT8 || No || Current selected player craft (0 = KD1 Speeder, 1 = Berserker, 2 = Jugga, 3 = Vampyr, 4 = Outrider, 5 = Flexiwing)&lt;br /&gt;
|-&lt;br /&gt;
| 0x094F || Null terminated string || No || Player 1 name (max 8 characters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0977 || UINT8 || No || Current game difficulty setting (0 = easy up to 3 = highest difficulty)&lt;br /&gt;
|-&lt;br /&gt;
| 0x097D || UINT8 || No || Music volume (0 = Off up to 200 = max volume)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0981 || UINT8 || No || Sound volume (0 = Off up to 200 = max volume)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0994 || STRUCT || No || Pos1 Highscore Entry (each entry 39 bytes, detail please see below)&lt;br /&gt;
|-&lt;br /&gt;
| 0x09BB || STRUCT || No || Pos2 Highscore Entry&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C79 || STRUCT || No || Pos20 Highscore Entry (last one shown in game table, but there are many more in file afterwards)&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|- &lt;br /&gt;
| 0x2996 || UINT8 || No || Shading Off = 0, Shading On = 1 (Default On)&lt;br /&gt;
|-&lt;br /&gt;
| 0x299A || UINT8 || No || Sky Off = 0, Sky On = 1 (Default On)&lt;br /&gt;
|-&lt;br /&gt;
| 0x299E || UINT8 || No || Renderer Setting 1 (TextureMapping lowest setting: 0x299E = 0,  0x29A2 = 0, 0x29A6 = 0; TextureMapping 2nd lowest setting: 0x299E = 0,  0x29A2 = 0, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x29A2 || UINT8 || No || Renderer Setting 2 (TextureMapping 3nd lowest setting: 0x299E = 1,  0x29A2 = 1, 0x29A6 = 1; TextureMapping 4th lowest setting: 0x299E = 2,  0x29A2 = 2, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x29A6 || UINT8 || No || Renderer Setting 3 (TextureMapping 5th lowest setting: 0x299E = 3,  0x29A2 = 3, 0x29A6 = 1 (default value); TextureMapping highest setting: 0x299E = 3,  0x29A2 = 4, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C76 || UINT8 || No || Current selected race track (0 = level 1, 1 = level 2, and so on)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C7A || UINT8 || No || Current selected game language (0 = English, 1 = German, 2 = French, 3 = Spanish, 4 = Italian)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Highscore Table Entry Struct Detail ===&lt;br /&gt;
* 1 byte for highscore value&lt;br /&gt;
* 3 bytes of unknown data&lt;br /&gt;
* 1 bytes for player assessement string table index&lt;br /&gt;
* 9 bytes for player name best lap, 9th byte = string termination char&lt;br /&gt;
* 25 bytes of unknown data&lt;br /&gt;
&lt;br /&gt;
The player assessement string table (inside the executable) has the following order:&lt;br /&gt;
* Immortal&lt;br /&gt;
* Hardwired&lt;br /&gt;
* Outta Control&lt;br /&gt;
* Demon&lt;br /&gt;
* Deadly&lt;br /&gt;
* Wrecker&lt;br /&gt;
* Dangerous&lt;br /&gt;
* Tailgater&lt;br /&gt;
* Antisocial&lt;br /&gt;
* Dust Devil&lt;br /&gt;
* Upwardly Mobile&lt;br /&gt;
* Mediocre&lt;br /&gt;
* Too Slow&lt;br /&gt;
* Endangered Species&lt;br /&gt;
* Target Practice&lt;br /&gt;
* Back Marker&lt;br /&gt;
* Canyon Kisser&lt;br /&gt;
* Victim&lt;br /&gt;
* Scrap&lt;br /&gt;
* Smear&lt;br /&gt;
* Cheating Sucks (this is actually an additional entry, which is not possible according to the 20 different assessement point range)&lt;br /&gt;
&lt;br /&gt;
== Level file format ==&lt;br /&gt;
&lt;br /&gt;
Many details about the Hi Octane level file format were found out in the past already, and are for example documented under the HiOctaneTools link mentioned above. One specific information that was missing until now is where to find the starting location for the race and type/location of chargers in the level file. The source code of the HiOctaneTools already contained the readout of a POI (point of interest) value from the map data which already pointed to the area of important locations, but was still lacking the information what type of location this exactly is, and what size it has in terrain cells. I found that the POI value points to certain file offsets in the level file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! POI value !! Level file offset&lt;br /&gt;
|-&lt;br /&gt;
| 992 || 246924&lt;br /&gt;
|-&lt;br /&gt;
| 993 || 247009&lt;br /&gt;
|-&lt;br /&gt;
| 994 || 247094&lt;br /&gt;
|-&lt;br /&gt;
| 995 || 247179  &lt;br /&gt;
|-&lt;br /&gt;
| 996 || 247264  &lt;br /&gt;
|-&lt;br /&gt;
| 997 || 247349  &lt;br /&gt;
|-&lt;br /&gt;
| 998 || 247434  &lt;br /&gt;
|-&lt;br /&gt;
| 999 || 247519  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each entry at this specific file locations is 85 bytes long. This bytes have the following format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte Nr !! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || UINT8 || Region type || 1 = Shield charger, 2 = Fuel charger, 3 = Ammo charger, 4 = Race start location&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UINT8 || Fixed value || Contains always value 1 for each used entry&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UINT8 || Contains value that depends on the RegionId || Value = 224 + RegionId (number of region entry), possible range from 224 up to 231 &lt;br /&gt;
|-&lt;br /&gt;
| 4 || UINT8 || Same value as Byte 3 || Please see description above &lt;br /&gt;
|-&lt;br /&gt;
| 5 || UINT8 || Fixed value || Contains always value 3 for each used entry &lt;br /&gt;
|-&lt;br /&gt;
| 12 || UINT8 || Contains value that depends on the RegionId || Value = 200 + RegionId (number of region entry), possible range from 200 up to 207 &lt;br /&gt;
|-&lt;br /&gt;
| 13 || UINT8 || Fixed value || Contains always value 7 for each used entry &lt;br /&gt;
|-&lt;br /&gt;
| 16 || UINT8 || Seems to have always the same value as byte 4 || &lt;br /&gt;
|-&lt;br /&gt;
| 17 || UINT8 || Seems to have always the same value as byte 5 || &lt;br /&gt;
|-&lt;br /&gt;
| 18 || UINT8 || Fixed value || Contains always value 1 for each used entry&lt;br /&gt;
|-&lt;br /&gt;
| 24 &amp;amp; 25 || FLOAT || X coordinate || X coordinate of cell right in the middle of the defined location, Byte 25 = Integer, Byte 24 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 26 &amp;amp; 27 || FLOAT || Y coordinate || Y coordinate of cell right in the middle of the defined location, Byte 27 = Integer, Byte 26 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 39 || UINT8 || In most levels value is fixed with 232 || Some levels use different values, Right now purpose is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 40 || UINT8 || In most levels value is fixed with 54 || Some levels use different values, Right now purpose is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 45 &amp;amp; 46 || FLOAT || Region size in Cells in X direction || Counted from the middle cell to the outer edge of the region, Byte 46 = Integer, Byte 45 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 47 &amp;amp; 48 || FLOAT || Region size in Cells in Y direction || Counted from the middle cell to the outer edge of the region, Byte 48 = Integer, Byte 47 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 49 || UINT8 || Fixed value || Seems to be always value 128 for each existing region entry, For empty entry value 0&lt;br /&gt;
|-&lt;br /&gt;
| 69 || UINT8 || Value depending on region type || Always contains value 244 + Value of byte at offset 0 (Region type)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits == &lt;br /&gt;
&lt;br /&gt;
* [https://github.com/movAX13h/ movAX13h]&lt;br /&gt;
* [https://github.com/woalexan/ woalexan]&lt;br /&gt;
* [https://github.com/Aybe/ Aybe]&lt;br /&gt;
* [https://github.com/Malvineous/ Malvineous]&lt;br /&gt;
* [https://github.com/srtuss/ srtuss]&lt;br /&gt;
* [http://syndicate.lubiki.pl/ Syndicate series unofficial fan site] for the various utilities.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[https://1drv.ms/f/s!AqAtR29m3cqGxz75Vv-3cap8guE3 Game demo, Network and MPU-401 patches]&lt;br /&gt;
&lt;br /&gt;
[https://www.vogons.org/viewtopic.php?f=7&amp;amp;t=33173&amp;amp;hilit=hi+octane Hi-Octane + General MIDI = crash?]&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Hi_Octane&amp;diff=12794</id>
		<title>Hi Octane</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Hi_Octane&amp;diff=12794"/>
		<updated>2026-02-09T08:17:28Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: restore&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hi Octane&#039;&#039;&#039; is hover-car racing game. According to Sean Cooper it was made in 6.5 weeks using engine code from Syndicate and Magic Carpet. There are at least two releases of the game, the initial release (executable contains string &#039;&#039;Jun 10 1995 17:45:48&#039;&#039;) with 6 levels, and a later extended version (&#039;&#039;Oct 23 1995 15:57:32&#039;&#039;) with 9 levels, additional game modes, and slightly reworked levels. In certain file format details the used version makes a difference.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
Level inspector and incomplete editor by movAX13h (contains all assets of the original game extracted/converted by srtuss): https://github.com/movAX13h/HiOctaneTools&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = sounds/music.dat&lt;br /&gt;
 | Format = see below&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Archive containing music files in different formats: [[XMI Format]], [[GEN Format]], [[ROL Format]], [[WTB Format]].&amp;lt;br/&amp;gt;There are five files per format : TGAME1, TGAME2, TGAME3, TGAME4, TINTRO2.&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== MUSIC.DAT ==&lt;br /&gt;
&lt;br /&gt;
* read the [[INT32LE]] at EOF and seek to returned position&lt;br /&gt;
* count the N number of [[INT16LE]] that equals &amp;lt;code&amp;gt;0x0001&amp;lt;/code&amp;gt;, then read N of the following struct:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTunes || Offset to the list of tunes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTune1 || Offset to the first tune&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || unknown || Unknown (always &amp;lt;code&amp;gt;0xC0000000&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;192&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || lenTunes || Length of all tunes together, bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* for each of the former struct&lt;br /&gt;
** seek to &amp;lt;code&amp;gt;offTunes&amp;lt;/code&amp;gt;&lt;br /&gt;
** read one of the following struct, its &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; indicates the byte sum of tunes following&lt;br /&gt;
** read as many of the following struct until their &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; sum equals the one in previous step&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || name[12] || File name of the tune, &amp;lt;code&amp;gt;\0&amp;lt;/code&amp;gt; padded&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || padding[6] || Padding bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTune || Tune relative offset&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || padding[4] || Padding bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || lenTune || Tune length, bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || unknown || Unknown (always &amp;lt;code&amp;gt;0x5A00&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;90&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* you now have a catalog of a collection of tunes, e.g. five ROL songs, five WTB songs etc&lt;br /&gt;
* to extract a song, copy &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; bytes starting at &amp;lt;code&amp;gt;offTune1 + offTune&amp;lt;/code&amp;gt;, file name is &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RNC-compressed files ==&lt;br /&gt;
&lt;br /&gt;
Many of the game&#039;s files are compressed using the [[Rob Northern Compression]] format; some of them such as &#039;&#039;SOUND\SOUND.DAT&#039;&#039; are a concatenation of many RNC archives simply &#039;&#039;glued&#039;&#039; together.&lt;br /&gt;
&lt;br /&gt;
A command-line unpacker can be found here : [http://syndicate.lubiki.pl/downloads/bullfrog_utils_rnc.zip Bullfrog games RNC Utilities] (from [http://syndicate.lubiki.pl/synd/rework/synd_rework_rnc.php Unpacking RNC files])&lt;br /&gt;
&lt;br /&gt;
== DAT/TAB pairs ==&lt;br /&gt;
&lt;br /&gt;
Can be decompressed using [http://syndicate.lubiki.pl/downloads/bullfrog_utils_tabdat.zip Bullfrog games DAT/TAB Graphics extractor] (they first must be decompressed if they are RNC-compressed).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DAT format:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Without a TAB file, it&#039;s raw pixels; with a TAB file it&#039;s a form of line by line RLE compression where only transparent pixels are compressed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TAB format:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || position || Image position in .DAT&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || width || Image width&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || height || Image height&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TMAPS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Contains powerups and some HUD elements but TAB format is different:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || flat || Size of RNC stream unpacked, useless as it&#039;s contained in stream header already&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || pos || Position in DAT&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || index || Some index but can be duplicate, so likely a type or category instead&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are N+1 entries to be able to compute last item size in DAT.&lt;br /&gt;
&lt;br /&gt;
Each image has the following format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT16 || unknown || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || width || Image width&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || height || Image height&lt;br /&gt;
|-&lt;br /&gt;
| INT8[] || pixels || Image pixels, 8-bit paletted &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game&#039;s files ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Format&lt;br /&gt;
! RNC compressed&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|data\hfont0-0.dat&amp;lt;br/&amp;gt;data\hfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Thin white font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\hspr0-0.dat&amp;lt;br/&amp;gt;data\hspr0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor icons (large)&lt;br /&gt;
|-&lt;br /&gt;
|data\intro.dat&lt;br /&gt;
|[[Autodesk FLI animation]]&lt;br /&gt;
|No&lt;br /&gt;
|Game introduction&lt;br /&gt;
|-&lt;br /&gt;
|data\logo0-0.dat&amp;lt;br/&amp;gt;data\logo0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Game logo (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\logo0-1.dat&amp;lt;br/&amp;gt;data\logo0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Game logo (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\mfont0-0.dat&amp;lt;br/&amp;gt;data\mfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Thin white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\mspr0-0.dat&amp;lt;br/&amp;gt;data\mspr0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor icons (small)&lt;br /&gt;
|-&lt;br /&gt;
|data\olfnt0-0.dat&amp;lt;br/&amp;gt;data\olfnt0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Large white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\olfnt0-1.dat&amp;lt;br/&amp;gt;data\olfnt0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Large white font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\onet0-*.dat&amp;lt;br/&amp;gt;data\oscr0-*.dat&lt;br /&gt;
|[[Raw VGA image]], 320&amp;amp;times;200 and 640&amp;amp;times;480&lt;br /&gt;
|Yes&lt;br /&gt;
|Loading and selection screens&lt;br /&gt;
|-&lt;br /&gt;
|data\osfnt0-0.dat&amp;lt;br/&amp;gt;data\osfnt0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Small white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\osfnt0-1.dat&amp;lt;br/&amp;gt;data\osfnt0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Small white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\palet0-0.dat&lt;br /&gt;
|[[VGA Palette]]&lt;br /&gt;
|No&lt;br /&gt;
|The palette of every asset of the game, unless specified&lt;br /&gt;
|-&lt;br /&gt;
|data\panel0-0.dat&amp;lt;br/&amp;gt;data\panel0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 2-players (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel0-1.dat&amp;lt;br/&amp;gt;data\panel0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 1-player (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel9-0.dat&amp;lt;br/&amp;gt;data\panel9-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 2-players (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel9-1.dat&amp;lt;br/&amp;gt;data\panel9-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 1-player (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\pfont0-0.dat&amp;lt;br/&amp;gt;data\pfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|Large green font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\pfont0-1.dat&amp;lt;br/&amp;gt;data\pfont0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|Large green font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\point0-0.dat&amp;lt;br/&amp;gt;data\point0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor cursors&lt;br /&gt;
|-&lt;br /&gt;
|data\puzzle.dat&lt;br /&gt;
|[[Raw VGA image]], 112&amp;amp;times;96&lt;br /&gt;
|No&lt;br /&gt;
|The cheat puzzle activated with CTRL-Tab in-game&lt;br /&gt;
|-&lt;br /&gt;
|data\sky0-*.dat&lt;br /&gt;
|[[Raw VGA Image]], 256&amp;amp;times;256&lt;br /&gt;
|Yes&lt;br /&gt;
|Horizon of each track&lt;br /&gt;
|-&lt;br /&gt;
|data\srch0-0.dat&lt;br /&gt;
|[[Raw VGA Image]], 32&amp;amp;times;32&lt;br /&gt;
|Yes&lt;br /&gt;
|Looks like a radar but seems to be unused&lt;br /&gt;
|-&lt;br /&gt;
|data\table0-*.dat&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
These files differ by at most a few bytes, their name suggests a sine table but this is pure speculation.&lt;br /&gt;
&lt;br /&gt;
The following pattern appears when they are interpreted as a 256 pixels wide image:&lt;br /&gt;
&lt;br /&gt;
[[File:HiOctaneTable.png]]&lt;br /&gt;
|-&lt;br /&gt;
|data\textu0-*.dat&lt;br /&gt;
|[[Raw VGA image]], 64&amp;amp;times;16384&lt;br /&gt;
|Yes&lt;br /&gt;
|64&amp;amp;times;64 terrain textures&lt;br /&gt;
|-&lt;br /&gt;
|data\title.dat&lt;br /&gt;
|[[Raw VGA image]], 320&amp;amp;times;200&lt;br /&gt;
|Yes&lt;br /&gt;
|The introductory screen&lt;br /&gt;
|-&lt;br /&gt;
|data\tmaps.dat&lt;br /&gt;
|&lt;br /&gt;
|Yes&lt;br /&gt;
|see above&lt;br /&gt;
|-&lt;br /&gt;
|data\tmaps.tab&lt;br /&gt;
|&lt;br /&gt;
|No&lt;br /&gt;
|see above&lt;br /&gt;
|-&lt;br /&gt;
|data\track0-0.dat&amp;lt;br/&amp;gt;data\track0-0.tab&amp;lt;br/&amp;gt;data\track0-1.dat&amp;lt;br/&amp;gt;data\track0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No/Yes&lt;br /&gt;
|Contain the images of the level minimaps that are shown in the HUD. The game does work without them,&lt;br /&gt;
but then the minimap is not shown. Initial game version does not use RNC compression, extended version does.&lt;br /&gt;
|-&lt;br /&gt;
|objects/data/tex0-0.dat&amp;lt;br/&amp;gt;objects/data/tex0-0.tab&lt;br /&gt;
|[[Hi-Octane Texture Atlas]], 256&amp;amp;times;768&lt;br /&gt;
|No&lt;br /&gt;
|In-game textures&lt;br /&gt;
|-&lt;br /&gt;
|objects/data/tex0-1.dat&amp;lt;br/&amp;gt;objects/data/tex0-1.tab&lt;br /&gt;
|[[Hi-Octane Texture Atlas]], 256&amp;amp;times;88&lt;br /&gt;
|No&lt;br /&gt;
|In-game textures&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; none of the TAB files are RNC-compressed.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;General&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The image formats above are partially decoded, they are still missing palette information.&lt;br /&gt;
&lt;br /&gt;
All the images are paletted, 8 bits per pixels.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;INTRO.DAT&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Header can be fixed using [http://syndicate.lubiki.pl/downloads/bullfrog_utils_flifix.zip Autodesk Animator FLI files fixer] but since format is pretty old and that [http://syndicate.lubiki.pl/downloads/utils_waaplay110.zip Autodesk Animation Player 1.10] is a legacy Win16 executable, it is not very convenient to use as of today.&lt;br /&gt;
&lt;br /&gt;
Instead, the file can be converted by FFMPEG to either BMP or AVI,&lt;br /&gt;
&lt;br /&gt;
Convert the animation to individual images, handle last invalid frame:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -i INTRO.DAT -vframes 548 -pix_fmt bgr24 intro%03d.bmp&lt;br /&gt;
&amp;lt;/syntaxhightlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert the sequence of images to a raw AVI and respect the original frame rate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -r 14 -i intro%03d.bmp -vcodec rawvideo intro.avi&lt;br /&gt;
&amp;lt;/syntaxhightlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that since the underlying format does not handle audio, there won&#039;t be any.&lt;br /&gt;
&lt;br /&gt;
== CONFIG.DAT ==&lt;br /&gt;
&lt;br /&gt;
Contains the configuration of the game, current state of game logic relevant variables (for example next selected race track),&lt;br /&gt;
and the Highscore table. Obvious settings like graphics mode (VGA vs. SVGA) or if computer players are enabled are not stored in the configuration file, and are&lt;br /&gt;
reset to the default value during each start of the game. The save game files reuse the same file format, but I believe for save game files some data fields will most likely be ignored or not used.&lt;br /&gt;
&lt;br /&gt;
The advantage is that the users game settings are restored for each save game independently. The initial game release config file always has a size of 11449 bytes, the extended game release config file 137833 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Data type !! only ext Version !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Null terminated string || No || Current championship name (max 12 characters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034D || UINT8 || Yes || Current value for Death match lives (0 min up to 4 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034E || UINT8 || Yes || Current value for Hot seat players (2 min up to 8 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034F || UINT8 || Yes || Current value for Hot seat racing time (1 min up to 5 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0350 || Null terminated string || Yes || Player 2 name (max 8 characters), If empty string Player 2 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0370 || Null terminated string || Yes || Player 3 name (max 8 characters), If empty string Player 3 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0390 || Null terminated string || Yes || Player 4 name (max 8 characters), If empty string Player 4 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03B0 || Null terminated string || Yes || Player 5 name (max 8 characters), If empty string Player 5 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03D0 || Null terminated string || Yes || Player 6 name (max 8 characters), If empty string Player 6 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03F0 || Null terminated string || Yes || Player 7 name (max 8 characters), If empty string Player 7 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0410 || Null terminated string || Yes || Player 8 name (max 8 characters), If empty string Player 8 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x094B || UINT8 || No || Current selected player craft color scheme (0 = Madmedicine, 1 = Assassins, 2 = Gorehounds, 3 = Foofighters, 4 = Dethfest, 5 = Firephreaks, 6 = Stormriders, 7 = Bullfrog)&lt;br /&gt;
|-&lt;br /&gt;
| 0x094C || UINT8 || No || Current selected player craft (0 = KD1 Speeder, 1 = Berserker, 2 = Jugga, 3 = Vampyr, 4 = Outrider, 5 = Flexiwing)&lt;br /&gt;
|-&lt;br /&gt;
| 0x094F || Null terminated string || No || Player 1 name (max 8 characters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0977 || UINT8 || No || Current game difficulty setting (0 = easy up to 3 = highest difficulty)&lt;br /&gt;
|-&lt;br /&gt;
| 0x097D || UINT8 || No || Music volume (0 = Off up to 200 = max volume)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0981 || UINT8 || No || Sound volume (0 = Off up to 200 = max volume)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0994 || STRUCT || No || Pos1 Highscore Entry (each entry 39 bytes, detail please see below)&lt;br /&gt;
|-&lt;br /&gt;
| 0x09BB || STRUCT || No || Pos2 Highscore Entry&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C79 || STRUCT || No || Pos20 Highscore Entry (last one shown in game table, but there are many more in file afterwards)&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|- &lt;br /&gt;
| 0x2996 || UINT8 || No || Shading Off = 0, Shading On = 1 (Default On)&lt;br /&gt;
|-&lt;br /&gt;
| 0x299A || UINT8 || No || Sky Off = 0, Sky On = 1 (Default On)&lt;br /&gt;
|-&lt;br /&gt;
| 0x299E || UINT8 || No || Renderer Setting 1 (TextureMapping lowest setting: 0x299E = 0,  0x29A2 = 0, 0x29A6 = 0; TextureMapping 2nd lowest setting: 0x299E = 0,  0x29A2 = 0, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x29A2 || UINT8 || No || Renderer Setting 2 (TextureMapping 3nd lowest setting: 0x299E = 1,  0x29A2 = 1, 0x29A6 = 1; TextureMapping 4th lowest setting: 0x299E = 2,  0x29A2 = 2, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x29A6 || UINT8 || No || Renderer Setting 3 (TextureMapping 5th lowest setting: 0x299E = 3,  0x29A2 = 3, 0x29A6 = 1 (default value); TextureMapping highest setting: 0x299E = 3,  0x29A2 = 4, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C76 || UINT8 || No || Current selected race track (0 = level 1, 1 = level 2, and so on)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C7A || UINT8 || No || Current selected game language (0 = English, 1 = German, 2 = French, 3 = Spanish, 4 = Italian)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Highscore Table Entry Struct Detail ===&lt;br /&gt;
* 1 byte for highscore value&lt;br /&gt;
* 3 bytes of unknown data&lt;br /&gt;
* 1 bytes for player assessement string table index&lt;br /&gt;
* 9 bytes for player name best lap, 9th byte = string termination char&lt;br /&gt;
* 25 bytes of unknown data&lt;br /&gt;
&lt;br /&gt;
The player assessement string table (inside the executable) has the following order:&lt;br /&gt;
* Immortal&lt;br /&gt;
* Hardwired&lt;br /&gt;
* Outta Control&lt;br /&gt;
* Demon&lt;br /&gt;
* Deadly&lt;br /&gt;
* Wrecker&lt;br /&gt;
* Dangerous&lt;br /&gt;
* Tailgater&lt;br /&gt;
* Antisocial&lt;br /&gt;
* Dust Devil&lt;br /&gt;
* Upwardly Mobile&lt;br /&gt;
* Mediocre&lt;br /&gt;
* Too Slow&lt;br /&gt;
* Endangered Species&lt;br /&gt;
* Target Practice&lt;br /&gt;
* Back Marker&lt;br /&gt;
* Canyon Kisser&lt;br /&gt;
* Victim&lt;br /&gt;
* Scrap&lt;br /&gt;
* Smear&lt;br /&gt;
* Cheating Sucks (this is actually an additional entry, which is not possible according to the 20 different assessement point range)&lt;br /&gt;
&lt;br /&gt;
== Level file format ==&lt;br /&gt;
&lt;br /&gt;
Many details about the Hi Octane level file format were found out in the past already, and are for example documented under the HiOctaneTools link mentioned above. One specific information that was missing until now is where to find the starting location for the race and type/location of chargers in the level file. The source code of the HiOctaneTools already contained the readout of a POI (point of interest) value from the map data which already pointed to the area of important locations, but was still lacking the information what type of location this exactly is, and what size it has in terrain cells. I found that the POI value points to certain file offsets in the level file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! POI value !! Level file offset&lt;br /&gt;
|-&lt;br /&gt;
| 992 || 246924&lt;br /&gt;
|-&lt;br /&gt;
| 993 || 247009&lt;br /&gt;
|-&lt;br /&gt;
| 994 || 247094&lt;br /&gt;
|-&lt;br /&gt;
| 995 || 247179  &lt;br /&gt;
|-&lt;br /&gt;
| 996 || 247264  &lt;br /&gt;
|-&lt;br /&gt;
| 997 || 247349  &lt;br /&gt;
|-&lt;br /&gt;
| 998 || 247434  &lt;br /&gt;
|-&lt;br /&gt;
| 999 || 247519  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each entry at this specific file locations is 85 bytes long. This bytes have the following format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte Nr !! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || UINT8 || Region type || 1 = Shield charger, 2 = Fuel charger, 3 = Ammo charger, 4 = Race start location&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UINT8 || Fixed value || Contains always value 1 for each used entry&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UINT8 || Contains value that depends on the RegionId || Value = 224 + RegionId (number of region entry), possible range from 224 up to 231 &lt;br /&gt;
|-&lt;br /&gt;
| 4 || UINT8 || Same value as Byte 3 || Please see description above &lt;br /&gt;
|-&lt;br /&gt;
| 5 || UINT8 || Fixed value || Contains always value 3 for each used entry &lt;br /&gt;
|-&lt;br /&gt;
| 12 || UINT8 || Contains value that depends on the RegionId || Value = 200 + RegionId (number of region entry), possible range from 200 up to 207 &lt;br /&gt;
|-&lt;br /&gt;
| 13 || UINT8 || Fixed value || Contains always value 7 for each used entry &lt;br /&gt;
|-&lt;br /&gt;
| 16 || UINT8 || Seems to have always the same value as byte 4 || &lt;br /&gt;
|-&lt;br /&gt;
| 17 || UINT8 || Seems to have always the same value as byte 5 || &lt;br /&gt;
|-&lt;br /&gt;
| 18 || UINT8 || Fixed value || Contains always value 1 for each used entry&lt;br /&gt;
|-&lt;br /&gt;
| 24 &amp;amp; 25 || FLOAT || X coordinate || X coordinate of cell right in the middle of the defined location, Byte 25 = Integer, Byte 24 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 26 &amp;amp; 27 || FLOAT || Y coordinate || Y coordinate of cell right in the middle of the defined location, Byte 27 = Integer, Byte 26 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 39 || UINT8 || In most levels value is fixed with 232 || Some levels use different values, Right now purpose is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 40 || UINT8 || In most levels value is fixed with 54 || Some levels use different values, Right now purpose is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 45 &amp;amp; 46 || FLOAT || Region size in Cells in X direction || Counted from the middle cell to the outer edge of the region, Byte 46 = Integer, Byte 45 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 47 &amp;amp; 48 || FLOAT || Region size in Cells in Y direction || Counted from the middle cell to the outer edge of the region, Byte 48 = Integer, Byte 47 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 49 || UINT8 || Fixed value || Seems to be always value 128 for each existing region entry, For empty entry value 0&lt;br /&gt;
|-&lt;br /&gt;
| 69 || UINT8 || Value depending on region type || Always contains value 244 + Value of byte at offset 0 (Region type)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits (in alphabetical order) == &lt;br /&gt;
&lt;br /&gt;
[https://github.com/movAX13h/ movAX13h]&lt;br /&gt;
[https://github.com/woalexan/ woalexan]&lt;br /&gt;
[https://github.com/Aybe/ Aybe]&lt;br /&gt;
[https://github.com/Malvineous/ Malvineous]&lt;br /&gt;
[https://github.com/srtuss/ srtuss]&lt;br /&gt;
[http://syndicate.lubiki.pl/ Syndicate series unofficial fan site] for the various utilities.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[https://1drv.ms/f/s!AqAtR29m3cqGxz75Vv-3cap8guE3 Game demo, Network and MPU-401 patches]&lt;br /&gt;
&lt;br /&gt;
[https://www.vogons.org/viewtopic.php?f=7&amp;amp;t=33173&amp;amp;hilit=hi+octane Hi-Octane + General MIDI = crash?]&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Hi_Octane&amp;diff=12793</id>
		<title>Hi Octane</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Hi_Octane&amp;diff=12793"/>
		<updated>2026-02-09T08:12:36Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: rearrange&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Credits == &lt;br /&gt;
&lt;br /&gt;
* [https://github.com/movAX13h/ movAX13h]&lt;br /&gt;
* [https://github.com/woalexan/ woalexan]&lt;br /&gt;
* [https://github.com/Aybe/ Aybe]&lt;br /&gt;
* [https://github.com/Malvineous/ Malvineous]&lt;br /&gt;
* [https://github.com/srtuss/ srtuss]&lt;br /&gt;
* [http://syndicate.lubiki.pl/ Syndicate series unofficial fan site] for the various utilities.&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Hi_Octane&amp;diff=12792</id>
		<title>Hi Octane</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Hi_Octane&amp;diff=12792"/>
		<updated>2026-02-09T08:01:29Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Credits (in alphabetical order) */ add github links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hi Octane&#039;&#039;&#039; is hover-car racing game. According to Sean Cooper it was made in 6.5 weeks using engine code from Syndicate and Magic Carpet. There are at least two releases of the game, the initial release (executable contains string &#039;&#039;Jun 10 1995 17:45:48&#039;&#039;) with 6 levels, and a later extended version (&#039;&#039;Oct 23 1995 15:57:32&#039;&#039;) with 9 levels, additional game modes, and slightly reworked levels. In certain file format details the used version makes a difference.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
Level inspector and incomplete editor by movAX13h (contains all assets of the original game extracted/converted by srtuss): https://github.com/movAX13h/HiOctaneTools&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = sounds/music.dat&lt;br /&gt;
 | Format = see below&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Archive containing music files in different formats: [[XMI Format]], [[GEN Format]], [[ROL Format]], [[WTB Format]].&amp;lt;br/&amp;gt;There are five files per format : TGAME1, TGAME2, TGAME3, TGAME4, TINTRO2.&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== MUSIC.DAT ==&lt;br /&gt;
&lt;br /&gt;
* read the [[INT32LE]] at EOF and seek to returned position&lt;br /&gt;
* count the N number of [[INT16LE]] that equals &amp;lt;code&amp;gt;0x0001&amp;lt;/code&amp;gt;, then read N of the following struct:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTunes || Offset to the list of tunes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTune1 || Offset to the first tune&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || unknown || Unknown (always &amp;lt;code&amp;gt;0xC0000000&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;192&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || lenTunes || Length of all tunes together, bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* for each of the former struct&lt;br /&gt;
** seek to &amp;lt;code&amp;gt;offTunes&amp;lt;/code&amp;gt;&lt;br /&gt;
** read one of the following struct, its &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; indicates the byte sum of tunes following&lt;br /&gt;
** read as many of the following struct until their &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; sum equals the one in previous step&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || name[12] || File name of the tune, &amp;lt;code&amp;gt;\0&amp;lt;/code&amp;gt; padded&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || padding[6] || Padding bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || offTune || Tune relative offset&lt;br /&gt;
|-&lt;br /&gt;
| CHAR || padding[4] || Padding bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || lenTune || Tune length, bytes&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || unknown || Unknown (always &amp;lt;code&amp;gt;0x5A00&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;90&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* you now have a catalog of a collection of tunes, e.g. five ROL songs, five WTB songs etc&lt;br /&gt;
* to extract a song, copy &amp;lt;code&amp;gt;lenTune&amp;lt;/code&amp;gt; bytes starting at &amp;lt;code&amp;gt;offTune1 + offTune&amp;lt;/code&amp;gt;, file name is &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RNC-compressed files ==&lt;br /&gt;
&lt;br /&gt;
Many of the game&#039;s files are compressed using the [[Rob Northern Compression]] format; some of them such as &#039;&#039;SOUND\SOUND.DAT&#039;&#039; are a concatenation of many RNC archives simply &#039;&#039;glued&#039;&#039; together.&lt;br /&gt;
&lt;br /&gt;
A command-line unpacker can be found here : [http://syndicate.lubiki.pl/downloads/bullfrog_utils_rnc.zip Bullfrog games RNC Utilities] (from [http://syndicate.lubiki.pl/synd/rework/synd_rework_rnc.php Unpacking RNC files])&lt;br /&gt;
&lt;br /&gt;
== DAT/TAB pairs ==&lt;br /&gt;
&lt;br /&gt;
Can be decompressed using [http://syndicate.lubiki.pl/downloads/bullfrog_utils_tabdat.zip Bullfrog games DAT/TAB Graphics extractor] (they first must be decompressed if they are RNC-compressed).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DAT format:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Without a TAB file, it&#039;s raw pixels; with a TAB file it&#039;s a form of line by line RLE compression where only transparent pixels are compressed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TAB format:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || position || Image position in .DAT&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || width || Image width&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || height || Image height&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TMAPS:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Contains powerups and some HUD elements but TAB format is different:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || flat || Size of RNC stream unpacked, useless as it&#039;s contained in stream header already&lt;br /&gt;
|-&lt;br /&gt;
| INT32LE || pos || Position in DAT&lt;br /&gt;
|-&lt;br /&gt;
| INT16LE || index || Some index but can be duplicate, so likely a type or category instead&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are N+1 entries to be able to compute last item size in DAT.&lt;br /&gt;
&lt;br /&gt;
Each image has the following format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| INT16 || unknown || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || width || Image width&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || height || Image height&lt;br /&gt;
|-&lt;br /&gt;
| INT8[] || pixels || Image pixels, 8-bit paletted &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Game&#039;s files ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Format&lt;br /&gt;
! RNC compressed&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|data\hfont0-0.dat&amp;lt;br/&amp;gt;data\hfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Thin white font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\hspr0-0.dat&amp;lt;br/&amp;gt;data\hspr0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor icons (large)&lt;br /&gt;
|-&lt;br /&gt;
|data\intro.dat&lt;br /&gt;
|[[Autodesk FLI animation]]&lt;br /&gt;
|No&lt;br /&gt;
|Game introduction&lt;br /&gt;
|-&lt;br /&gt;
|data\logo0-0.dat&amp;lt;br/&amp;gt;data\logo0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Game logo (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\logo0-1.dat&amp;lt;br/&amp;gt;data\logo0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Game logo (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\mfont0-0.dat&amp;lt;br/&amp;gt;data\mfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Thin white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\mspr0-0.dat&amp;lt;br/&amp;gt;data\mspr0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor icons (small)&lt;br /&gt;
|-&lt;br /&gt;
|data\olfnt0-0.dat&amp;lt;br/&amp;gt;data\olfnt0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Large white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\olfnt0-1.dat&amp;lt;br/&amp;gt;data\olfnt0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Large white font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\onet0-*.dat&amp;lt;br/&amp;gt;data\oscr0-*.dat&lt;br /&gt;
|[[Raw VGA image]], 320&amp;amp;times;200 and 640&amp;amp;times;480&lt;br /&gt;
|Yes&lt;br /&gt;
|Loading and selection screens&lt;br /&gt;
|-&lt;br /&gt;
|data\osfnt0-0.dat&amp;lt;br/&amp;gt;data\osfnt0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Small white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\osfnt0-1.dat&amp;lt;br/&amp;gt;data\osfnt0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Small white font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\palet0-0.dat&lt;br /&gt;
|[[VGA Palette]]&lt;br /&gt;
|No&lt;br /&gt;
|The palette of every asset of the game, unless specified&lt;br /&gt;
|-&lt;br /&gt;
|data\panel0-0.dat&amp;lt;br/&amp;gt;data\panel0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 2-players (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel0-1.dat&amp;lt;br/&amp;gt;data\panel0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 1-player (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel9-0.dat&amp;lt;br/&amp;gt;data\panel9-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 2-players (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\panel9-1.dat&amp;lt;br/&amp;gt;data\panel9-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|HUD 1-player (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\pfont0-0.dat&amp;lt;br/&amp;gt;data\pfont0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|Large green font (VGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\pfont0-1.dat&amp;lt;br/&amp;gt;data\pfont0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No&lt;br /&gt;
|Large green font (SVGA)&lt;br /&gt;
|-&lt;br /&gt;
|data\point0-0.dat&amp;lt;br/&amp;gt;data\point0-0.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|Editor cursors&lt;br /&gt;
|-&lt;br /&gt;
|data\puzzle.dat&lt;br /&gt;
|[[Raw VGA image]], 112&amp;amp;times;96&lt;br /&gt;
|No&lt;br /&gt;
|The cheat puzzle activated with CTRL-Tab in-game&lt;br /&gt;
|-&lt;br /&gt;
|data\sky0-*.dat&lt;br /&gt;
|[[Raw VGA Image]], 256&amp;amp;times;256&lt;br /&gt;
|Yes&lt;br /&gt;
|Horizon of each track&lt;br /&gt;
|-&lt;br /&gt;
|data\srch0-0.dat&lt;br /&gt;
|[[Raw VGA Image]], 32&amp;amp;times;32&lt;br /&gt;
|Yes&lt;br /&gt;
|Looks like a radar but seems to be unused&lt;br /&gt;
|-&lt;br /&gt;
|data\table0-*.dat&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|Yes&lt;br /&gt;
|&lt;br /&gt;
These files differ by at most a few bytes, their name suggests a sine table but this is pure speculation.&lt;br /&gt;
&lt;br /&gt;
The following pattern appears when they are interpreted as a 256 pixels wide image:&lt;br /&gt;
&lt;br /&gt;
[[File:HiOctaneTable.png]]&lt;br /&gt;
|-&lt;br /&gt;
|data\textu0-*.dat&lt;br /&gt;
|[[Raw VGA image]], 64&amp;amp;times;16384&lt;br /&gt;
|Yes&lt;br /&gt;
|64&amp;amp;times;64 terrain textures&lt;br /&gt;
|-&lt;br /&gt;
|data\title.dat&lt;br /&gt;
|[[Raw VGA image]], 320&amp;amp;times;200&lt;br /&gt;
|Yes&lt;br /&gt;
|The introductory screen&lt;br /&gt;
|-&lt;br /&gt;
|data\tmaps.dat&lt;br /&gt;
|&lt;br /&gt;
|Yes&lt;br /&gt;
|see above&lt;br /&gt;
|-&lt;br /&gt;
|data\tmaps.tab&lt;br /&gt;
|&lt;br /&gt;
|No&lt;br /&gt;
|see above&lt;br /&gt;
|-&lt;br /&gt;
|data\track0-0.dat&amp;lt;br/&amp;gt;data\track0-0.tab&amp;lt;br/&amp;gt;data\track0-1.dat&amp;lt;br/&amp;gt;data\track0-1.tab&lt;br /&gt;
|[[Unknown format]]&lt;br /&gt;
|No/Yes&lt;br /&gt;
|Contain the images of the level minimaps that are shown in the HUD. The game does work without them,&lt;br /&gt;
but then the minimap is not shown. Initial game version does not use RNC compression, extended version does.&lt;br /&gt;
|-&lt;br /&gt;
|objects/data/tex0-0.dat&amp;lt;br/&amp;gt;objects/data/tex0-0.tab&lt;br /&gt;
|[[Hi-Octane Texture Atlas]], 256&amp;amp;times;768&lt;br /&gt;
|No&lt;br /&gt;
|In-game textures&lt;br /&gt;
|-&lt;br /&gt;
|objects/data/tex0-1.dat&amp;lt;br/&amp;gt;objects/data/tex0-1.tab&lt;br /&gt;
|[[Hi-Octane Texture Atlas]], 256&amp;amp;times;88&lt;br /&gt;
|No&lt;br /&gt;
|In-game textures&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; none of the TAB files are RNC-compressed.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;General&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The image formats above are partially decoded, they are still missing palette information.&lt;br /&gt;
&lt;br /&gt;
All the images are paletted, 8 bits per pixels.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;INTRO.DAT&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Header can be fixed using [http://syndicate.lubiki.pl/downloads/bullfrog_utils_flifix.zip Autodesk Animator FLI files fixer] but since format is pretty old and that [http://syndicate.lubiki.pl/downloads/utils_waaplay110.zip Autodesk Animation Player 1.10] is a legacy Win16 executable, it is not very convenient to use as of today.&lt;br /&gt;
&lt;br /&gt;
Instead, the file can be converted by FFMPEG to either BMP or AVI,&lt;br /&gt;
&lt;br /&gt;
Convert the animation to individual images, handle last invalid frame:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -i INTRO.DAT -vframes 548 -pix_fmt bgr24 intro%03d.bmp&lt;br /&gt;
&amp;lt;/syntaxhightlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert the sequence of images to a raw AVI and respect the original frame rate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ffmpeg -r 14 -i intro%03d.bmp -vcodec rawvideo intro.avi&lt;br /&gt;
&amp;lt;/syntaxhightlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that since the underlying format does not handle audio, there won&#039;t be any.&lt;br /&gt;
&lt;br /&gt;
== CONFIG.DAT ==&lt;br /&gt;
&lt;br /&gt;
Contains the configuration of the game, current state of game logic relevant variables (for example next selected race track),&lt;br /&gt;
and the Highscore table. Obvious settings like graphics mode (VGA vs. SVGA) or if computer players are enabled are not stored in the configuration file, and are&lt;br /&gt;
reset to the default value during each start of the game. The save game files reuse the same file format, but I believe for save game files some data fields will most likely be ignored or not used.&lt;br /&gt;
&lt;br /&gt;
The advantage is that the users game settings are restored for each save game independently. The initial game release config file always has a size of 11449 bytes, the extended game release config file 137833 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Data type !! only ext Version !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Null terminated string || No || Current championship name (max 12 characters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034D || UINT8 || Yes || Current value for Death match lives (0 min up to 4 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034E || UINT8 || Yes || Current value for Hot seat players (2 min up to 8 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x034F || UINT8 || Yes || Current value for Hot seat racing time (1 min up to 5 max)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0350 || Null terminated string || Yes || Player 2 name (max 8 characters), If empty string Player 2 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0370 || Null terminated string || Yes || Player 3 name (max 8 characters), If empty string Player 3 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0390 || Null terminated string || Yes || Player 4 name (max 8 characters), If empty string Player 4 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03B0 || Null terminated string || Yes || Player 5 name (max 8 characters), If empty string Player 5 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03D0 || Null terminated string || Yes || Player 6 name (max 8 characters), If empty string Player 6 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x03F0 || Null terminated string || Yes || Player 7 name (max 8 characters), If empty string Player 7 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x0410 || Null terminated string || Yes || Player 8 name (max 8 characters), If empty string Player 8 name not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x094B || UINT8 || No || Current selected player craft color scheme (0 = Madmedicine, 1 = Assassins, 2 = Gorehounds, 3 = Foofighters, 4 = Dethfest, 5 = Firephreaks, 6 = Stormriders, 7 = Bullfrog)&lt;br /&gt;
|-&lt;br /&gt;
| 0x094C || UINT8 || No || Current selected player craft (0 = KD1 Speeder, 1 = Berserker, 2 = Jugga, 3 = Vampyr, 4 = Outrider, 5 = Flexiwing)&lt;br /&gt;
|-&lt;br /&gt;
| 0x094F || Null terminated string || No || Player 1 name (max 8 characters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0977 || UINT8 || No || Current game difficulty setting (0 = easy up to 3 = highest difficulty)&lt;br /&gt;
|-&lt;br /&gt;
| 0x097D || UINT8 || No || Music volume (0 = Off up to 200 = max volume)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0981 || UINT8 || No || Sound volume (0 = Off up to 200 = max volume)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0994 || STRUCT || No || Pos1 Highscore Entry (each entry 39 bytes, detail please see below)&lt;br /&gt;
|-&lt;br /&gt;
| 0x09BB || STRUCT || No || Pos2 Highscore Entry&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C79 || STRUCT || No || Pos20 Highscore Entry (last one shown in game table, but there are many more in file afterwards)&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|- &lt;br /&gt;
| 0x2996 || UINT8 || No || Shading Off = 0, Shading On = 1 (Default On)&lt;br /&gt;
|-&lt;br /&gt;
| 0x299A || UINT8 || No || Sky Off = 0, Sky On = 1 (Default On)&lt;br /&gt;
|-&lt;br /&gt;
| 0x299E || UINT8 || No || Renderer Setting 1 (TextureMapping lowest setting: 0x299E = 0,  0x29A2 = 0, 0x29A6 = 0; TextureMapping 2nd lowest setting: 0x299E = 0,  0x29A2 = 0, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x29A2 || UINT8 || No || Renderer Setting 2 (TextureMapping 3nd lowest setting: 0x299E = 1,  0x29A2 = 1, 0x29A6 = 1; TextureMapping 4th lowest setting: 0x299E = 2,  0x29A2 = 2, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x29A6 || UINT8 || No || Renderer Setting 3 (TextureMapping 5th lowest setting: 0x299E = 3,  0x29A2 = 3, 0x29A6 = 1 (default value); TextureMapping highest setting: 0x299E = 3,  0x29A2 = 4, 0x29A6 = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C76 || UINT8 || No || Current selected race track (0 = level 1, 1 = level 2, and so on)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C7A || UINT8 || No || Current selected game language (0 = English, 1 = German, 2 = French, 3 = Spanish, 4 = Italian)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Highscore Table Entry Struct Detail ===&lt;br /&gt;
* 1 byte for highscore value&lt;br /&gt;
* 3 bytes of unknown data&lt;br /&gt;
* 1 bytes for player assessement string table index&lt;br /&gt;
* 9 bytes for player name best lap, 9th byte = string termination char&lt;br /&gt;
* 25 bytes of unknown data&lt;br /&gt;
&lt;br /&gt;
The player assessement string table (inside the executable) has the following order:&lt;br /&gt;
* Immortal&lt;br /&gt;
* Hardwired&lt;br /&gt;
* Outta Control&lt;br /&gt;
* Demon&lt;br /&gt;
* Deadly&lt;br /&gt;
* Wrecker&lt;br /&gt;
* Dangerous&lt;br /&gt;
* Tailgater&lt;br /&gt;
* Antisocial&lt;br /&gt;
* Dust Devil&lt;br /&gt;
* Upwardly Mobile&lt;br /&gt;
* Mediocre&lt;br /&gt;
* Too Slow&lt;br /&gt;
* Endangered Species&lt;br /&gt;
* Target Practice&lt;br /&gt;
* Back Marker&lt;br /&gt;
* Canyon Kisser&lt;br /&gt;
* Victim&lt;br /&gt;
* Scrap&lt;br /&gt;
* Smear&lt;br /&gt;
* Cheating Sucks (this is actually an additional entry, which is not possible according to the 20 different assessement point range)&lt;br /&gt;
&lt;br /&gt;
== Level file format ==&lt;br /&gt;
&lt;br /&gt;
Many details about the Hi Octane level file format were found out in the past already, and are for example documented under the HiOctaneTools link mentioned above. One specific information that was missing until now is where to find the starting location for the race and type/location of chargers in the level file. The source code of the HiOctaneTools already contained the readout of a POI (point of interest) value from the map data which already pointed to the area of important locations, but was still lacking the information what type of location this exactly is, and what size it has in terrain cells. I found that the POI value points to certain file offsets in the level file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! POI value !! Level file offset&lt;br /&gt;
|-&lt;br /&gt;
| 992 || 246924&lt;br /&gt;
|-&lt;br /&gt;
| 993 || 247009&lt;br /&gt;
|-&lt;br /&gt;
| 994 || 247094&lt;br /&gt;
|-&lt;br /&gt;
| 995 || 247179  &lt;br /&gt;
|-&lt;br /&gt;
| 996 || 247264  &lt;br /&gt;
|-&lt;br /&gt;
| 997 || 247349  &lt;br /&gt;
|-&lt;br /&gt;
| 998 || 247434  &lt;br /&gt;
|-&lt;br /&gt;
| 999 || 247519  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each entry at this specific file locations is 85 bytes long. This bytes have the following format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte Nr !! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || UINT8 || Region type || 1 = Shield charger, 2 = Fuel charger, 3 = Ammo charger, 4 = Race start location&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UINT8 || Fixed value || Contains always value 1 for each used entry&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UINT8 || Contains value that depends on the RegionId || Value = 224 + RegionId (number of region entry), possible range from 224 up to 231 &lt;br /&gt;
|-&lt;br /&gt;
| 4 || UINT8 || Same value as Byte 3 || Please see description above &lt;br /&gt;
|-&lt;br /&gt;
| 5 || UINT8 || Fixed value || Contains always value 3 for each used entry &lt;br /&gt;
|-&lt;br /&gt;
| 12 || UINT8 || Contains value that depends on the RegionId || Value = 200 + RegionId (number of region entry), possible range from 200 up to 207 &lt;br /&gt;
|-&lt;br /&gt;
| 13 || UINT8 || Fixed value || Contains always value 7 for each used entry &lt;br /&gt;
|-&lt;br /&gt;
| 16 || UINT8 || Seems to have always the same value as byte 4 || &lt;br /&gt;
|-&lt;br /&gt;
| 17 || UINT8 || Seems to have always the same value as byte 5 || &lt;br /&gt;
|-&lt;br /&gt;
| 18 || UINT8 || Fixed value || Contains always value 1 for each used entry&lt;br /&gt;
|-&lt;br /&gt;
| 24 &amp;amp; 25 || FLOAT || X coordinate || X coordinate of cell right in the middle of the defined location, Byte 25 = Integer, Byte 24 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 26 &amp;amp; 27 || FLOAT || Y coordinate || Y coordinate of cell right in the middle of the defined location, Byte 27 = Integer, Byte 26 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 39 || UINT8 || In most levels value is fixed with 232 || Some levels use different values, Right now purpose is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 40 || UINT8 || In most levels value is fixed with 54 || Some levels use different values, Right now purpose is unknown&lt;br /&gt;
|-&lt;br /&gt;
| 45 &amp;amp; 46 || FLOAT || Region size in Cells in X direction || Counted from the middle cell to the outer edge of the region, Byte 46 = Integer, Byte 45 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 47 &amp;amp; 48 || FLOAT || Region size in Cells in Y direction || Counted from the middle cell to the outer edge of the region, Byte 48 = Integer, Byte 47 only uses two values: 0 or 128, I believe it allows to add 0.5f&lt;br /&gt;
|-&lt;br /&gt;
| 49 || UINT8 || Fixed value || Seems to be always value 128 for each existing region entry, For empty entry value 0&lt;br /&gt;
|-&lt;br /&gt;
| 69 || UINT8 || Value depending on region type || Always contains value 244 + Value of byte at offset 0 (Region type)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits (in alphabetical order) == &lt;br /&gt;
&lt;br /&gt;
[https://github.com/movAX13h/ movAX13h]&lt;br /&gt;
[https://github.com/woalexan/ woalexan]&lt;br /&gt;
[https://github.com/Aybe/ Aybe]&lt;br /&gt;
[https://github.com/Malvineous/ Malvineous]&lt;br /&gt;
[https://github.com/srtuss/ srtuss]&lt;br /&gt;
[http://syndicate.lubiki.pl/ Syndicate series unofficial fan site] for the various utilities.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[https://1drv.ms/f/s!AqAtR29m3cqGxz75Vv-3cap8guE3 Game demo, Network and MPU-401 patches]&lt;br /&gt;
&lt;br /&gt;
[https://www.vogons.org/viewtopic.php?f=7&amp;amp;t=33173&amp;amp;hilit=hi+octane Hi-Octane + General MIDI = crash?]&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=3O_Format_(Chasm:_The_Rift)&amp;diff=12408</id>
		<title>3O Format (Chasm: The Rift)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=3O_Format_(Chasm:_The_Rift)&amp;diff=12408"/>
		<updated>2025-07-21T21:04:36Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Chasm: The Rift}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;3O Format&#039;&#039;&#039; is used by [[Chasm: The Rift]] to store most of the game&#039;s 3D objects, such as scenery and collectible items.  Monsters and the player use the more complicated [[CAR Format]] instead.&lt;br /&gt;
&lt;br /&gt;
{{TODO|Figure out flags and animation.  Animations seem to require a separate [[ANI Format (Chasm: The Rift)]] file to be associated with the object.}}&lt;br /&gt;
&lt;br /&gt;
There aren&#039;t any headers, footers or &amp;quot;magic number&amp;quot; in this format.  There are, however, some values sandwiched between the vertex and skin data that one might expect to appear in a header instead.&lt;br /&gt;
&lt;br /&gt;
The data in the 3O is divided into three distinct sections, which appear at fixed positions in the file, and only the skin data is allowed to vary in length.    Unused entries in the polygon and vertex arrays are generally filled with junk data.&lt;br /&gt;
&lt;br /&gt;
Based on the amount of space alloted to the arrays, the upper limit of the format ought to be 938 vertices and 400 polygons.&lt;br /&gt;
&lt;br /&gt;
Skins are always 64 pixels wide.&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT16LE]] || X coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[INT16LE]] || Y coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT16LE]] || Z coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses quads, rather than triangles.  Each polygon uses 32 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[UINT16LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[UINT16LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[UINT16LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || [[UINT16LE]] || Index of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[UINT16LE]] || U coordinate of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || [[UINT16LE]] || V coordinate of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[UINT16LE]] || U coordinate of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || [[UINT16LE]] || V coordinate of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[UINT16LE]] || U coordinate of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || [[UINT16LE]] || V coordinate of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[UINT16LE]] || U coordinate of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || [[UINT16LE]] || V coordinate of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[UINT16LE]] || Next&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || [[UINT16LE]] || Distant&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[UINT8]]    || Group ID (monster/body parts) initialized with &amp;lt;code&amp;gt;(((Flags &amp;gt;&amp;gt; 4) == 0) ? 0 : uint8_t(1 &amp;lt;&amp;lt; ((Flags &amp;gt;&amp;gt; 4)-1)))&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || [[UINT8]]    || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || [[INT16LE]] || SpriteOffset (Initialize with SpriteOffset*=(SkinWidth=64)) Appears to be a UV mapping offset, value added to the V coordinates.&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[3O Format]] 3D Model prepended by optional [[CAR Format]] adding 0x66 to all the offsets&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Array || Polygon array.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3200 || Array || Vertex array.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4800 || [[UINT16LE]] || Number of valid vertex entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4802 || [[UINT16LE]] || Number of valid polygon entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4804 || [[UINT16LE]] || Skin height&lt;br /&gt;
|-&lt;br /&gt;
| 0x4806 || 64 &amp;amp;times; skin height array of [[UINT8]] || Skin image, each byte defines a pixel by palette index&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
enum BodyPartsMask : uint8_t&lt;br /&gt;
{&lt;br /&gt;
        LeftHand           = 1 &amp;lt;&amp;lt; 0,&lt;br /&gt;
        LeftHandSeparated  = 1 &amp;lt;&amp;lt; 1,&lt;br /&gt;
        RightHand          = 1 &amp;lt;&amp;lt; 2,&lt;br /&gt;
        RightHandSeparated = 1 &amp;lt;&amp;lt; 3,&lt;br /&gt;
        Head               = 1 &amp;lt;&amp;lt; 4,&lt;br /&gt;
        HeadSeparated      = 1 &amp;lt;&amp;lt; 5,&lt;br /&gt;
        Body               = 1 &amp;lt;&amp;lt; 6,&lt;br /&gt;
        WeaponFire         = 1 &amp;lt;&amp;lt; 7,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
enum BodyPartSubModelId : uint8_t&lt;br /&gt;
{&lt;br /&gt;
        RightHand = 0,&lt;br /&gt;
        LeftHand  = 1,&lt;br /&gt;
        Head      = 2,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
uint8_t FlagsToGroupId(const uint8_t flags) &lt;br /&gt;
{&lt;br /&gt;
        const uint8_t b = flags &amp;gt;&amp;gt; 4;&lt;br /&gt;
        return (0 == b) ? 0 : uint8_t(1 &amp;lt;&amp;lt; (b - 1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8_t GroupIdToGroupsMask(const uint8_t group_id)&lt;br /&gt;
{&lt;br /&gt;
        return (group_id == 0) ? 64 : group_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned char MonsterBase::GetBodyPartsMask() const&lt;br /&gt;
{&lt;br /&gt;
        if( fragmented_ ) // Hide all body, if fragmented.&lt;br /&gt;
                return 0u;&lt;br /&gt;
 &lt;br /&gt;
        unsigned char mask= BodyPartsMask::Body;&lt;br /&gt;
        mask|= have_left_hand_  ? BodyPartsMask::LeftHand  : BodyPartsMask::LeftHandSeparated ;&lt;br /&gt;
        mask|= have_right_hand_ ? BodyPartsMask::RightHand : BodyPartsMask::RightHandSeparated;&lt;br /&gt;
        mask|= have_head_ ? BodyPartsMask::Head : BodyPartsMask::HeadSeparated;&lt;br /&gt;
 &lt;br /&gt;
        if( int(current_animation_) == GetAnimation( AnimationId::RemoteAttack ) )&lt;br /&gt;
        {&lt;br /&gt;
                PC_ASSERT( monster_id_ &amp;lt; game_resources_-&amp;gt;monsters_models.size() );&lt;br /&gt;
                PC_ASSERT( current_animation_ &amp;lt; game_resources_-&amp;gt;monsters_models[ monster_id_ ].animations.size() );&lt;br /&gt;
 &lt;br /&gt;
                const unsigned int frame_count= game_resources_-&amp;gt;monsters_models[ monster_id_ ].animations[ current_animation_ ].frame_count;&lt;br /&gt;
                const unsigned int middle_frame= frame_count / 2u;&lt;br /&gt;
 &lt;br /&gt;
                // Draw weapon fire at middle of attack animation.&lt;br /&gt;
                if( std::abs( int(current_animation_frame_) - int(middle_frame) ) &amp;lt;= 2 )&lt;br /&gt;
                        mask|= BodyPartsMask::WeaponFire;&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        return mask;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Early version ==&lt;br /&gt;
&lt;br /&gt;
The Chasm Demo Test v1.02 (Entering Shadow Zone) uses an earlier version of the format.  It is almost identical, but there are two important differences:&lt;br /&gt;
&lt;br /&gt;
* The polygon array reserves space for 300 polys (100 fewer than the full version).  Vertex array therefore begins at 0x2580.&lt;br /&gt;
* While not related to the 3O format per se, this version has a slightly different palette.&lt;br /&gt;
&lt;br /&gt;
Therefore, it is possible to get a bare-bones readable conversion between the two formats by adding/truncating entries in the file&#039;s polygon array, but a GOOD conversion will also require fixing the skin graphic to account for the palette differences.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
[https://www.moddb.com/games/chasm-the-rift/downloads/chasm-modding-toolkit-package Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and REMAKE version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jopadan/glcar3o glcar3o] is a [[Chasm: The Rift]] .[[CAR Format]]/.[[3O Format]] 3D animation model [[OpenGL]] viewer written in [[C23]].&lt;br /&gt;
&lt;br /&gt;
[https://github.com/AnimatorPro Animator Pro] (A.K.A. Autodesk Animator Pro, Ani Pro, V Paint, PJ Paint, or simply PJ) is a 256 color paint and animation package for MSDOS. It was popular in the early to mid 1990&#039;s for game art, online animation, business presentations and occasional TV productions.&lt;br /&gt;
&lt;br /&gt;
[https://richwhitehouse.com/index.php?content=inc_projects.php&amp;amp;showproject=91 Noesis] is a free tool created by &#039;Rich Whitehouse&#039;. Noesis provides the ability to view 3O files and even export them as different file types. Unfortunately, however, it does not yet allow the option of converting other formats to the 3O type.  &lt;br /&gt;
It is a useful tool for quickly checking model files and deciding which ones you wish to include in your project&#039;s [[RESOURCE (Chasm)|RESOURCE.xx]] file.&lt;br /&gt;
&lt;br /&gt;
full-featured 3D computer graphics application now owned and developed by [https://www.daz3d.com/carrara-8-5-pro Daz 3D].&lt;br /&gt;
&lt;br /&gt;
[https://www.senosoft.com/softp3doDownload.php P3DO Organizer] is a software for viewing and managing 3D Objects, &amp;amp; Digital Pictures with a simple Explorer-ish look and feel.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/alexey-lysiuk/OpenChasm OpenChasm] Pascal reverse engineered source code.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Panzerschrek/Chasm-Reverse Chasm-Reverse] C++ open source port&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jopadan/AwesomeChasm AwesomeChasm] list of useful Chasm resources.&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=3O_Format_(Chasm:_The_Rift)&amp;diff=12407</id>
		<title>3O Format (Chasm: The Rift)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=3O_Format_(Chasm:_The_Rift)&amp;diff=12407"/>
		<updated>2025-07-21T21:00:15Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Chasm: The Rift}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;3O Format&#039;&#039;&#039; is used by [[Chasm: The Rift]] to store most of the game&#039;s 3D objects, such as scenery and collectible items.  Monsters and the player use the more complicated [[CAR Format]] instead.&lt;br /&gt;
&lt;br /&gt;
{{TODO|Figure out flags and animation.  Animations seem to require a separate [[ANI Format]] file to be associated with the object.}}&lt;br /&gt;
&lt;br /&gt;
There aren&#039;t any headers, footers or &amp;quot;magic number&amp;quot; in this format.  There are, however, some values sandwiched between the vertex and skin data that one might expect to appear in a header instead.&lt;br /&gt;
&lt;br /&gt;
The data in the 3O is divided into three distinct sections, which appear at fixed positions in the file, and only the skin data is allowed to vary in length.    Unused entries in the polygon and vertex arrays are generally filled with junk data.&lt;br /&gt;
&lt;br /&gt;
Based on the amount of space alloted to the arrays, the upper limit of the format ought to be 938 vertices and 400 polygons.&lt;br /&gt;
&lt;br /&gt;
Skins are always 64 pixels wide.&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT16LE]] || X coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[INT16LE]] || Y coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT16LE]] || Z coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses quads, rather than triangles.  Each polygon uses 32 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[UINT16LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[UINT16LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[UINT16LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || [[UINT16LE]] || Index of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[UINT16LE]] || U coordinate of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || [[UINT16LE]] || V coordinate of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[UINT16LE]] || U coordinate of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || [[UINT16LE]] || V coordinate of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[UINT16LE]] || U coordinate of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || [[UINT16LE]] || V coordinate of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[UINT16LE]] || U coordinate of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || [[UINT16LE]] || V coordinate of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[UINT16LE]] || Next&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || [[UINT16LE]] || Distant&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[UINT8]]    || Group ID (monster/body parts) initialized with &amp;lt;code&amp;gt;(((Flags &amp;gt;&amp;gt; 4) == 0) ? 0 : uint8_t(1 &amp;lt;&amp;lt; ((Flags &amp;gt;&amp;gt; 4)-1)))&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || [[UINT8]]    || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || [[INT16LE]] || SpriteOffset (Initialize with SpriteOffset*=(SkinWidth=64)) Appears to be a UV mapping offset, value added to the V coordinates.&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[3O Format]] 3D Model prepended by optional [[CAR Format]] adding 0x66 to all the offsets&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Array || Polygon array.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3200 || Array || Vertex array.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4800 || [[UINT16LE]] || Number of valid vertex entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4802 || [[UINT16LE]] || Number of valid polygon entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4804 || [[UINT16LE]] || Skin height&lt;br /&gt;
|-&lt;br /&gt;
| 0x4806 || 64 &amp;amp;times; skin height array of [[UINT8]] || Skin image, each byte defines a pixel by palette index&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
enum BodyPartsMask : uint8_t&lt;br /&gt;
{&lt;br /&gt;
        LeftHand           = 1 &amp;lt;&amp;lt; 0,&lt;br /&gt;
        LeftHandSeparated  = 1 &amp;lt;&amp;lt; 1,&lt;br /&gt;
        RightHand          = 1 &amp;lt;&amp;lt; 2,&lt;br /&gt;
        RightHandSeparated = 1 &amp;lt;&amp;lt; 3,&lt;br /&gt;
        Head               = 1 &amp;lt;&amp;lt; 4,&lt;br /&gt;
        HeadSeparated      = 1 &amp;lt;&amp;lt; 5,&lt;br /&gt;
        Body               = 1 &amp;lt;&amp;lt; 6,&lt;br /&gt;
        WeaponFire         = 1 &amp;lt;&amp;lt; 7,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
enum BodyPartSubModelId : uint8_t&lt;br /&gt;
{&lt;br /&gt;
        RightHand = 0,&lt;br /&gt;
        LeftHand  = 1,&lt;br /&gt;
        Head      = 2,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
uint8_t FlagsToGroupId(const uint8_t flags) &lt;br /&gt;
{&lt;br /&gt;
        const uint8_t b = flags &amp;gt;&amp;gt; 4;&lt;br /&gt;
        return (0 == b) ? 0 : uint8_t(1 &amp;lt;&amp;lt; (b - 1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8_t GroupIdToGroupsMask(const uint8_t group_id)&lt;br /&gt;
{&lt;br /&gt;
        return (group_id == 0) ? 64 : group_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned char MonsterBase::GetBodyPartsMask() const&lt;br /&gt;
{&lt;br /&gt;
        if( fragmented_ ) // Hide all body, if fragmented.&lt;br /&gt;
                return 0u;&lt;br /&gt;
 &lt;br /&gt;
        unsigned char mask= BodyPartsMask::Body;&lt;br /&gt;
        mask|= have_left_hand_  ? BodyPartsMask::LeftHand  : BodyPartsMask::LeftHandSeparated ;&lt;br /&gt;
        mask|= have_right_hand_ ? BodyPartsMask::RightHand : BodyPartsMask::RightHandSeparated;&lt;br /&gt;
        mask|= have_head_ ? BodyPartsMask::Head : BodyPartsMask::HeadSeparated;&lt;br /&gt;
 &lt;br /&gt;
        if( int(current_animation_) == GetAnimation( AnimationId::RemoteAttack ) )&lt;br /&gt;
        {&lt;br /&gt;
                PC_ASSERT( monster_id_ &amp;lt; game_resources_-&amp;gt;monsters_models.size() );&lt;br /&gt;
                PC_ASSERT( current_animation_ &amp;lt; game_resources_-&amp;gt;monsters_models[ monster_id_ ].animations.size() );&lt;br /&gt;
 &lt;br /&gt;
                const unsigned int frame_count= game_resources_-&amp;gt;monsters_models[ monster_id_ ].animations[ current_animation_ ].frame_count;&lt;br /&gt;
                const unsigned int middle_frame= frame_count / 2u;&lt;br /&gt;
 &lt;br /&gt;
                // Draw weapon fire at middle of attack animation.&lt;br /&gt;
                if( std::abs( int(current_animation_frame_) - int(middle_frame) ) &amp;lt;= 2 )&lt;br /&gt;
                        mask|= BodyPartsMask::WeaponFire;&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        return mask;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Early version ==&lt;br /&gt;
&lt;br /&gt;
The Chasm Demo Test v1.02 (Entering Shadow Zone) uses an earlier version of the format.  It is almost identical, but there are two important differences:&lt;br /&gt;
&lt;br /&gt;
* The polygon array reserves space for 300 polys (100 fewer than the full version).  Vertex array therefore begins at 0x2580.&lt;br /&gt;
* While not related to the 3O format per se, this version has a slightly different palette.&lt;br /&gt;
&lt;br /&gt;
Therefore, it is possible to get a bare-bones readable conversion between the two formats by adding/truncating entries in the file&#039;s polygon array, but a GOOD conversion will also require fixing the skin graphic to account for the palette differences.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
[https://www.moddb.com/games/chasm-the-rift/downloads/chasm-modding-toolkit-package Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and REMAKE version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jopadan/glcar3o glcar3o] is a [[Chasm: The Rift]] .[[CAR Format]]/.[[3O Format]] 3D animation model [[OpenGL]] viewer written in [[C23]].&lt;br /&gt;
&lt;br /&gt;
[https://github.com/AnimatorPro Animator Pro] (A.K.A. Autodesk Animator Pro, Ani Pro, V Paint, PJ Paint, or simply PJ) is a 256 color paint and animation package for MSDOS. It was popular in the early to mid 1990&#039;s for game art, online animation, business presentations and occasional TV productions.&lt;br /&gt;
&lt;br /&gt;
[https://richwhitehouse.com/index.php?content=inc_projects.php&amp;amp;showproject=91 Noesis] is a free tool created by &#039;Rich Whitehouse&#039;. Noesis provides the ability to view 3O files and even export them as different file types. Unfortunately, however, it does not yet allow the option of converting other formats to the 3O type.  &lt;br /&gt;
It is a useful tool for quickly checking model files and deciding which ones you wish to include in your project&#039;s [[RESOURCE (Chasm)|RESOURCE.xx]] file.&lt;br /&gt;
&lt;br /&gt;
full-featured 3D computer graphics application now owned and developed by [https://www.daz3d.com/carrara-8-5-pro Daz 3D].&lt;br /&gt;
&lt;br /&gt;
[https://www.senosoft.com/softp3doDownload.php P3DO Organizer] is a software for viewing and managing 3D Objects, &amp;amp; Digital Pictures with a simple Explorer-ish look and feel.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/alexey-lysiuk/OpenChasm OpenChasm] Pascal reverse engineered source code.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Panzerschrek/Chasm-Reverse Chasm-Reverse] C++ open source port&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jopadan/AwesomeChasm AwesomeChasm] list of useful Chasm resources.&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=ANI_Format_(Chasm:_The_Rift)&amp;diff=12406</id>
		<title>ANI Format (Chasm: The Rift)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=ANI_Format_(Chasm:_The_Rift)&amp;diff=12406"/>
		<updated>2025-07-21T20:56:30Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: Created page with &amp;quot;{{3D Model Infobox  | Type = Animation  | MaxPolygons = 400   | MaxVertices = 938  | Games =    {{Game|Chasm: The Rift}} }} The &amp;#039;&amp;#039;&amp;#039;ANI Format&amp;#039;&amp;#039;&amp;#039; is used by Chasm: The Rift to store animations to be used with 3O Format using the animation vertices instead of the polygon vertices  === Vertex definition === Each vertex in the array uses 6 bytes. The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position. {|class=&amp;quot;w...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Animation&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Chasm: The Rift}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;ANI Format&#039;&#039;&#039; is used by [[Chasm: The Rift]] to store animations to be used with [[3O Format]] using the animation vertices instead of the polygon vertices&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT16LE]] || X coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[INT16LE]] || Y coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT16LE]] || Z coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Animation definition ===&lt;br /&gt;
==== [[UINT16LE]] at 0x00 == 3O Vertex count ====&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[UINT16LE]] || Vertex count&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Array || Vertex array.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
==== [[UINT16LE]] at 0x00 != 3O Vertex count ====&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Array || Vertex array.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=3O_Format_(Chasm:_The_Rift)&amp;diff=12405</id>
		<title>3O Format (Chasm: The Rift)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=3O_Format_(Chasm:_The_Rift)&amp;diff=12405"/>
		<updated>2025-07-17T17:52:38Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Chasm: The Rift}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;3O Format&#039;&#039;&#039; is used by [[Chasm: The Rift]] to store most of the game&#039;s 3D objects, such as scenery and collectible items.  Monsters and the player use the more complicated [[CAR Format]] instead.&lt;br /&gt;
&lt;br /&gt;
{{TODO|Figure out flags and animation.  Animations seem to require a separate .ANI file to be associated with the object.}}&lt;br /&gt;
&lt;br /&gt;
There aren&#039;t any headers, footers or &amp;quot;magic number&amp;quot; in this format.  There are, however, some values sandwiched between the vertex and skin data that one might expect to appear in a header instead.&lt;br /&gt;
&lt;br /&gt;
The data in the 3O is divided into three distinct sections, which appear at fixed positions in the file, and only the skin data is allowed to vary in length.    Unused entries in the polygon and vertex arrays are generally filled with junk data.&lt;br /&gt;
&lt;br /&gt;
Based on the amount of space alloted to the arrays, the upper limit of the format ought to be 938 vertices and 400 polygons.&lt;br /&gt;
&lt;br /&gt;
Skins are always 64 pixels wide.&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT16LE]] || X coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[INT16LE]] || Y coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT16LE]] || Z coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses quads, rather than triangles.  Each polygon uses 32 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[UINT16LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[UINT16LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[UINT16LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || [[UINT16LE]] || Index of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[UINT16LE]] || U coordinate of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || [[UINT16LE]] || V coordinate of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[UINT16LE]] || U coordinate of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || [[UINT16LE]] || V coordinate of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[UINT16LE]] || U coordinate of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || [[UINT16LE]] || V coordinate of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[UINT16LE]] || U coordinate of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || [[UINT16LE]] || V coordinate of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[UINT16LE]] || Next&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || [[UINT16LE]] || Distant&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[UINT8]]    || Group ID (monster/body parts) initialized with &amp;lt;code&amp;gt;(((Flags &amp;gt;&amp;gt; 4) == 0) ? 0 : uint8_t(1 &amp;lt;&amp;lt; ((Flags &amp;gt;&amp;gt; 4)-1)))&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || [[UINT8]]    || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || [[INT16LE]] || SpriteOffset (Initialize with SpriteOffset*=(SkinWidth=64)) Appears to be a UV mapping offset, value added to the V coordinates.&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[3O Format]] 3D Model prepended by optional [[CAR Format]] adding 0x66 to all the offsets&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Array || Polygon array.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3200 || Array || Vertex array.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4800 || [[UINT16LE]] || Number of valid vertex entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4802 || [[UINT16LE]] || Number of valid polygon entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4804 || [[UINT16LE]] || Skin height&lt;br /&gt;
|-&lt;br /&gt;
| 0x4806 || 64 &amp;amp;times; skin height array of [[UINT8]] || Skin image, each byte defines a pixel by palette index&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
enum BodyPartsMask : uint8_t&lt;br /&gt;
{&lt;br /&gt;
        LeftHand           = 1 &amp;lt;&amp;lt; 0,&lt;br /&gt;
        LeftHandSeparated  = 1 &amp;lt;&amp;lt; 1,&lt;br /&gt;
        RightHand          = 1 &amp;lt;&amp;lt; 2,&lt;br /&gt;
        RightHandSeparated = 1 &amp;lt;&amp;lt; 3,&lt;br /&gt;
        Head               = 1 &amp;lt;&amp;lt; 4,&lt;br /&gt;
        HeadSeparated      = 1 &amp;lt;&amp;lt; 5,&lt;br /&gt;
        Body               = 1 &amp;lt;&amp;lt; 6,&lt;br /&gt;
        WeaponFire         = 1 &amp;lt;&amp;lt; 7,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
enum BodyPartSubModelId : uint8_t&lt;br /&gt;
{&lt;br /&gt;
        RightHand = 0,&lt;br /&gt;
        LeftHand  = 1,&lt;br /&gt;
        Head      = 2,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
uint8_t FlagsToGroupId(const uint8_t flags) &lt;br /&gt;
{&lt;br /&gt;
        const uint8_t b = flags &amp;gt;&amp;gt; 4;&lt;br /&gt;
        return (0 == b) ? 0 : uint8_t(1 &amp;lt;&amp;lt; (b - 1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8_t GroupIdToGroupsMask(const uint8_t group_id)&lt;br /&gt;
{&lt;br /&gt;
        return (group_id == 0) ? 64 : group_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned char MonsterBase::GetBodyPartsMask() const&lt;br /&gt;
{&lt;br /&gt;
        if( fragmented_ ) // Hide all body, if fragmented.&lt;br /&gt;
                return 0u;&lt;br /&gt;
 &lt;br /&gt;
        unsigned char mask= BodyPartsMask::Body;&lt;br /&gt;
        mask|= have_left_hand_  ? BodyPartsMask::LeftHand  : BodyPartsMask::LeftHandSeparated ;&lt;br /&gt;
        mask|= have_right_hand_ ? BodyPartsMask::RightHand : BodyPartsMask::RightHandSeparated;&lt;br /&gt;
        mask|= have_head_ ? BodyPartsMask::Head : BodyPartsMask::HeadSeparated;&lt;br /&gt;
 &lt;br /&gt;
        if( int(current_animation_) == GetAnimation( AnimationId::RemoteAttack ) )&lt;br /&gt;
        {&lt;br /&gt;
                PC_ASSERT( monster_id_ &amp;lt; game_resources_-&amp;gt;monsters_models.size() );&lt;br /&gt;
                PC_ASSERT( current_animation_ &amp;lt; game_resources_-&amp;gt;monsters_models[ monster_id_ ].animations.size() );&lt;br /&gt;
 &lt;br /&gt;
                const unsigned int frame_count= game_resources_-&amp;gt;monsters_models[ monster_id_ ].animations[ current_animation_ ].frame_count;&lt;br /&gt;
                const unsigned int middle_frame= frame_count / 2u;&lt;br /&gt;
 &lt;br /&gt;
                // Draw weapon fire at middle of attack animation.&lt;br /&gt;
                if( std::abs( int(current_animation_frame_) - int(middle_frame) ) &amp;lt;= 2 )&lt;br /&gt;
                        mask|= BodyPartsMask::WeaponFire;&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        return mask;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Early version ==&lt;br /&gt;
&lt;br /&gt;
The Chasm Demo Test v1.02 (Entering Shadow Zone) uses an earlier version of the format.  It is almost identical, but there are two important differences:&lt;br /&gt;
&lt;br /&gt;
* The polygon array reserves space for 300 polys (100 fewer than the full version).  Vertex array therefore begins at 0x2580.&lt;br /&gt;
* While not related to the 3O format per se, this version has a slightly different palette.&lt;br /&gt;
&lt;br /&gt;
Therefore, it is possible to get a bare-bones readable conversion between the two formats by adding/truncating entries in the file&#039;s polygon array, but a GOOD conversion will also require fixing the skin graphic to account for the palette differences.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
[https://www.moddb.com/games/chasm-the-rift/downloads/chasm-modding-toolkit-package Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and REMAKE version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jopadan/glcar3o glcar3o] is a [[Chasm: The Rift]] .[[CAR Format]]/.[[3O Format]] 3D animation model [[OpenGL]] viewer written in [[C23]].&lt;br /&gt;
&lt;br /&gt;
[https://github.com/AnimatorPro Animator Pro] (A.K.A. Autodesk Animator Pro, Ani Pro, V Paint, PJ Paint, or simply PJ) is a 256 color paint and animation package for MSDOS. It was popular in the early to mid 1990&#039;s for game art, online animation, business presentations and occasional TV productions.&lt;br /&gt;
&lt;br /&gt;
[https://richwhitehouse.com/index.php?content=inc_projects.php&amp;amp;showproject=91 Noesis] is a free tool created by &#039;Rich Whitehouse&#039;. Noesis provides the ability to view 3O files and even export them as different file types. Unfortunately, however, it does not yet allow the option of converting other formats to the 3O type.  &lt;br /&gt;
It is a useful tool for quickly checking model files and deciding which ones you wish to include in your project&#039;s [[RESOURCE (Chasm)|RESOURCE.xx]] file.&lt;br /&gt;
&lt;br /&gt;
full-featured 3D computer graphics application now owned and developed by [https://www.daz3d.com/carrara-8-5-pro Daz 3D].&lt;br /&gt;
&lt;br /&gt;
[https://www.senosoft.com/softp3doDownload.php P3DO Organizer] is a software for viewing and managing 3D Objects, &amp;amp; Digital Pictures with a simple Explorer-ish look and feel.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/alexey-lysiuk/OpenChasm OpenChasm] Pascal reverse engineered source code.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Panzerschrek/Chasm-Reverse Chasm-Reverse] C++ open source port&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jopadan/AwesomeChasm AwesomeChasm] list of useful Chasm resources.&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Chasm:_The_Rift)&amp;diff=12404</id>
		<title>CAR Format (Chasm: The Rift)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Chasm:_The_Rift)&amp;diff=12404"/>
		<updated>2025-07-17T17:50:24Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Chasm: The Rift}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;CAR Format&#039;&#039;&#039; is used by [[Chasm: The Rift]] to store most of the game&#039;s monsters and the player.&lt;br /&gt;
&lt;br /&gt;
The data in the &#039;&#039;&#039;CAR&#039;&#039;&#039; is a 0x66 bytes header followed by [[3O Format]] file content&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || [[UINT16LE]][20] || Animations array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT16LE]][6][2] || Submodel animations array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040 || [[UINT16LE]][3] || Fall Sound id array defaults to 73&lt;br /&gt;
|-&lt;br /&gt;
| 0x0046 || [[UINT16LE]][8] || Sound length array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0056 || [[UINT16LE]][8] || Sound volume array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{TODO|GSND Sound id Monster/id Fall sounds relations}}&lt;br /&gt;
&lt;br /&gt;
[https://discord.com/channels/768103789411434586/1374842906002718803 Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and REMAKE version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jopadan/glcar3o glcar3o] is a [[Chasm: The Rift]] .[[CAR Format]]/.[[3O Format]] 3D animation model [[OpenGL]] viewer written in [[C23]].&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jopadan/AwesomeChasm?tab=readme-ov-file#models AwesomeChasm#models] Example C++ code including sound offset calculation&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/* QUAD/TRIANGLE polygon face */&lt;br /&gt;
struct face&lt;br /&gt;
{&lt;br /&gt;
        vec::u16 &amp;lt;               4&amp;gt;              indices;&lt;br /&gt;
        arr::type&amp;lt;vec::u16&amp;lt;2&amp;gt;,   4&amp;gt;                   uv;&lt;br /&gt;
        sca::i16                                    next;&lt;br /&gt;
        sca::i16                                 distant;&lt;br /&gt;
        sca::u8                                      num;&lt;br /&gt;
        sca::u8                                    flags;&lt;br /&gt;
        sca::u16                              sprite_off;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* .CAR Chasm: The Rift Caracter 3D model file format header */ &lt;br /&gt;
struct CARHeader&lt;br /&gt;
{&lt;br /&gt;
    struct AniMap {&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,  20&amp;gt;                model; /* anim data sizes */&lt;br /&gt;
        arr::type&amp;lt;vec::u16&amp;lt;2&amp;gt;,   6&amp;gt;            sub_model; /* sub model anim data sizes */&lt;br /&gt;
    } anims;&lt;br /&gt;
    struct GSND {&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,   3&amp;gt;                   id; /* FallSound id */&lt;br /&gt;
    } gsnd;&lt;br /&gt;
    struct SFX {&lt;br /&gt;
        vec::u16&amp;lt;                8&amp;gt;                  len;&lt;br /&gt;
        vec::u16&amp;lt;                8&amp;gt;                  vol;&lt;br /&gt;
    } sfx;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .3O Chasm: The Rift 3D model file format */&lt;br /&gt;
struct c3o&lt;br /&gt;
{&lt;br /&gt;
        arr::type&amp;lt;face       , 400&amp;gt;                faces; // 0x0000&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;                overt; // 0x3200&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;                rvert;&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;               shvert;&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;2&amp;gt;, 256&amp;gt;               scvert;&lt;br /&gt;
&lt;br /&gt;
        sca::u16                            vertex_count; // 0x4800&lt;br /&gt;
        sca::u16                              face_count; // 0x4802&lt;br /&gt;
        sca::u16                                      th; // 0x4804&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .CAR Chasm: The Rift Carrara Caracter 3D model file format */ &lt;br /&gt;
struct car : CARHeader, c3o&lt;br /&gt;
{&lt;br /&gt;
        size_t sounds_offset()&lt;br /&gt;
        {&lt;br /&gt;
                size_t dst = th + sizeof(struct car_header) + 0x4806u;&lt;br /&gt;
                for(size_t i = 0; i &amp;lt; 20; i++) dst += anims[i];&lt;br /&gt;
                for(size_t i = 0; i &amp;lt; 3u; i++)&lt;br /&gt;
                {&lt;br /&gt;
                        const size_t sum = sub_anims[i].sum();&lt;br /&gt;
                        dst += sum == 0 ? 0 : sum + 0x4806u;&lt;br /&gt;
                }&lt;br /&gt;
                return dst;&lt;br /&gt;
        }&lt;br /&gt;
        bool verify_length(size_t len)&lt;br /&gt;
        {&lt;br /&gt;
            size_t acc = sounds_offset();&lt;br /&gt;
            for(size_t i = 0; i &amp;lt; sfx_len.size(); i++)&lt;br /&gt;
                acc += sfx_len[i];&lt;br /&gt;
            return acc == len;&lt;br /&gt;
        }&lt;br /&gt;
        bool set_sound(const size_t monster_number)&lt;br /&gt;
        {&lt;br /&gt;
            const size_t monster_index = monster_number - 100;&lt;br /&gt;
            if(monster_index &amp;gt;= 23)&lt;br /&gt;
                return false;&lt;br /&gt;
&lt;br /&gt;
            for (size_t i = 0; i &amp;lt; gsnd.size(); ++i)&lt;br /&gt;
                SepPartInfo[monster_index + i].FallSound = gsnd[i];&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=3O_Format_(Chasm:_The_Rift)&amp;diff=12403</id>
		<title>3O Format (Chasm: The Rift)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=3O_Format_(Chasm:_The_Rift)&amp;diff=12403"/>
		<updated>2025-07-17T17:47:00Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Chasm: The Rift}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;3O Format&#039;&#039;&#039; is used by [[Chasm: The Rift]] to store most of the game&#039;s 3D objects, such as scenery and collectible items.  Monsters and the player use the more complicated [[CAR Format]] instead.&lt;br /&gt;
&lt;br /&gt;
{{TODO|Figure out flags and animation.  Animations seem to require a separate .ANI file to be associated with the object.}}&lt;br /&gt;
&lt;br /&gt;
There aren&#039;t any headers, footers or &amp;quot;magic number&amp;quot; in this format.  There are, however, some values sandwiched between the vertex and skin data that one might expect to appear in a header instead.&lt;br /&gt;
&lt;br /&gt;
The data in the 3O is divided into three distinct sections, which appear at fixed positions in the file, and only the skin data is allowed to vary in length.    Unused entries in the polygon and vertex arrays are generally filled with junk data.&lt;br /&gt;
&lt;br /&gt;
Based on the amount of space alloted to the arrays, the upper limit of the format ought to be 938 vertices and 400 polygons.&lt;br /&gt;
&lt;br /&gt;
Skins are always 64 pixels wide.&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT16LE]] || X coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[INT16LE]] || Y coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT16LE]] || Z coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses quads, rather than triangles.  Each polygon uses 32 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[UINT16LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[UINT16LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[UINT16LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || [[UINT16LE]] || Index of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[UINT16LE]] || U coordinate of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || [[UINT16LE]] || V coordinate of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[UINT16LE]] || U coordinate of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || [[UINT16LE]] || V coordinate of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[UINT16LE]] || U coordinate of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || [[UINT16LE]] || V coordinate of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[UINT16LE]] || U coordinate of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || [[UINT16LE]] || V coordinate of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[UINT16LE]] || Next&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || [[UINT16LE]] || Distant&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[UINT8]]    || Group ID (monster/body parts) initialized with &amp;lt;code&amp;gt;(((Flags &amp;gt;&amp;gt; 4) == 0) ? 0 : uint8_t(1 &amp;lt;&amp;lt; ((Flags &amp;gt;&amp;gt; 4)-1)))&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || [[UINT8]]    || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || [[INT16LE]] || SpriteOffset (Initialize with SpriteOffset*=(SkinWidth=64)) Appears to be a UV mapping offset, value added to the V coordinates.&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[3O Format]] 3D Model prepended by optional [[CAR Format]] adding 0x66 to all the offsets&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || Array || Polygon array.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3200 || Array || Vertex array.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4800 || [[UINT16LE]] || Number of valid vertex entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4802 || [[UINT16LE]] || Number of valid polygon entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4804 || [[UINT16LE]] || Skin height&lt;br /&gt;
|-&lt;br /&gt;
| 0x4806 || 64 &amp;amp;times; skin height array of [[UINT8]] || Skin image, each byte defines a pixel by palette index&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
enum BodyPartsMask : uint8_t&lt;br /&gt;
{&lt;br /&gt;
        LeftHand           = 1 &amp;lt;&amp;lt; 0,&lt;br /&gt;
        LeftHandSeparated  = 1 &amp;lt;&amp;lt; 1,&lt;br /&gt;
        RightHand          = 1 &amp;lt;&amp;lt; 2,&lt;br /&gt;
        RightHandSeparated = 1 &amp;lt;&amp;lt; 3,&lt;br /&gt;
        Head               = 1 &amp;lt;&amp;lt; 4,&lt;br /&gt;
        HeadSeparated      = 1 &amp;lt;&amp;lt; 5,&lt;br /&gt;
        Body               = 1 &amp;lt;&amp;lt; 6,&lt;br /&gt;
        WeaponFire         = 1 &amp;lt;&amp;lt; 7,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
enum BodyPartSubModelId : uint8_t&lt;br /&gt;
{&lt;br /&gt;
        RightHand = 0,&lt;br /&gt;
        LeftHand  = 1,&lt;br /&gt;
        Head      = 2,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
uint8_t FlagsToGroupId(const uint8_t flags) &lt;br /&gt;
{&lt;br /&gt;
        const uint8_t b = flags &amp;gt;&amp;gt; 4;&lt;br /&gt;
        return (0 == b) ? 0 : uint8_t(1 &amp;lt;&amp;lt; (b - 1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8_t GroupIdToGroupsMask(const uint8_t group_id)&lt;br /&gt;
{&lt;br /&gt;
        return (group_id == 0) ? 64 : group_id;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned char MonsterBase::GetBodyPartsMask() const&lt;br /&gt;
{&lt;br /&gt;
        if( fragmented_ ) // Hide all body, if fragmented.&lt;br /&gt;
                return 0u;&lt;br /&gt;
 &lt;br /&gt;
        unsigned char mask= BodyPartsMask::Body;&lt;br /&gt;
        mask|= have_left_hand_  ? BodyPartsMask::LeftHand  : BodyPartsMask::LeftHandSeparated ;&lt;br /&gt;
        mask|= have_right_hand_ ? BodyPartsMask::RightHand : BodyPartsMask::RightHandSeparated;&lt;br /&gt;
        mask|= have_head_ ? BodyPartsMask::Head : BodyPartsMask::HeadSeparated;&lt;br /&gt;
 &lt;br /&gt;
        if( int(current_animation_) == GetAnimation( AnimationId::RemoteAttack ) )&lt;br /&gt;
        {&lt;br /&gt;
                PC_ASSERT( monster_id_ &amp;lt; game_resources_-&amp;gt;monsters_models.size() );&lt;br /&gt;
                PC_ASSERT( current_animation_ &amp;lt; game_resources_-&amp;gt;monsters_models[ monster_id_ ].animations.size() );&lt;br /&gt;
 &lt;br /&gt;
                const unsigned int frame_count= game_resources_-&amp;gt;monsters_models[ monster_id_ ].animations[ current_animation_ ].frame_count;&lt;br /&gt;
                const unsigned int middle_frame= frame_count / 2u;&lt;br /&gt;
 &lt;br /&gt;
                // Draw weapon fire at middle of attack animation.&lt;br /&gt;
                if( std::abs( int(current_animation_frame_) - int(middle_frame) ) &amp;lt;= 2 )&lt;br /&gt;
                        mask|= BodyPartsMask::WeaponFire;&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        return mask;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Early version ==&lt;br /&gt;
&lt;br /&gt;
The Chasm Demo Test v1.02 (Entering Shadow Zone) uses an earlier version of the format.  It is almost identical, but there are two important differences:&lt;br /&gt;
&lt;br /&gt;
* The polygon array reserves space for 300 polys (100 fewer than the full version).  Vertex array therefore begins at 0x2580.&lt;br /&gt;
* While not related to the 3O format per se, this version has a slightly different palette.&lt;br /&gt;
&lt;br /&gt;
Therefore, it is possible to get a bare-bones readable conversion between the two formats by adding/truncating entries in the file&#039;s polygon array, but a GOOD conversion will also require fixing the skin graphic to account for the palette differences.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
[https://www.moddb.com/games/chasm-the-rift/downloads/chasm-modding-toolkit-package Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and REMAKE version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jopadan/glcar3o glcar3o] is a [[Chasm: The Rift]] 3D .[[CAR Format]]/.[[3O Format]] animation model [[OpenGL]] viewer written in [[C23]]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/AnimatorPro Animator Pro] (A.K.A. Autodesk Animator Pro, Ani Pro, V Paint, PJ Paint, or simply PJ) is a 256 color paint and animation package for MSDOS. It was popular in the early to mid 1990&#039;s for game art, online animation, business presentations and occasional TV productions.&lt;br /&gt;
&lt;br /&gt;
[https://richwhitehouse.com/index.php?content=inc_projects.php&amp;amp;showproject=91 Noesis] is a free tool created by &#039;Rich Whitehouse&#039;. Noesis provides the ability to view 3O files and even export them as different file types. Unfortunately, however, it does not yet allow the option of converting other formats to the 3O type.  &lt;br /&gt;
It is a useful tool for quickly checking model files and deciding which ones you wish to include in your project&#039;s [[RESOURCE (Chasm)|RESOURCE.xx]] file.&lt;br /&gt;
&lt;br /&gt;
full-featured 3D computer graphics application now owned and developed by [https://www.daz3d.com/carrara-8-5-pro Daz 3D].&lt;br /&gt;
&lt;br /&gt;
[https://www.senosoft.com/softp3doDownload.php P3DO Organizer] is a software for viewing and managing 3D Objects, &amp;amp; Digital Pictures with a simple Explorer-ish look and feel.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/alexey-lysiuk/OpenChasm OpenChasm] Pascal reverse engineered source code.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Panzerschrek/Chasm-Reverse Chasm-Reverse] C++ open source port&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jopadan/AwesomeChasm AwesomeChasm] list of useful Chasm resources.&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Chasm:_The_Rift&amp;diff=12402</id>
		<title>Chasm: The Rift</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Chasm:_The_Rift&amp;diff=12402"/>
		<updated>2025-07-17T17:45:19Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Modding Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Title = Chasm- The Rift.png &amp;lt;!-- Only because of the colon --&amp;gt;&lt;br /&gt;
 | Modded = Mod-Chasm- The Rift.png&lt;br /&gt;
 | Levels = Edit&lt;br /&gt;
 | Tiles = Edit&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = Edit&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Chasm: The Rift&#039;&#039;&#039; is an FPS game from the twilight of the DOS era, developed by Action Forms Ltd. and released in 1997.  The engine, contrary to popularly spread misinformation, is not based on [[Quake]] but appears to be an original, and has some interesting features but is also, for its time, somewhat limited regarding the level geometry that can be created.&lt;br /&gt;
&lt;br /&gt;
A level editor is included on the game CD, and some enemy and weapon stats can be modified using a plain text configuration, but certain other aspects of modifying the game (such as the 3D models) remain poorly understood.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = csm.bin&lt;br /&gt;
 | Format = [[BIN Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Main data archive. Structure and archive formats differ between DOS (CSM.BIN) and the 2022 Remaster (csm.bin)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm2.pal&lt;br /&gt;
 | Format = [[VGA Palette]] (6-bit version)&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Game palette&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.inf&lt;br /&gt;
 | Format = [[CHASM.INF]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Configures enemy and weapon stats&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.rgb&lt;br /&gt;
 | Format = 256x255 color index array&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Translucency tables&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.3o&lt;br /&gt;
 | Format = [[3O Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = 3D models (weapons, scenery)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ani&lt;br /&gt;
 | Format = [[ANI Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;DOS:&#039;&#039;&#039;&#039;&#039; Data to animate models.  &#039;&#039;&#039;&#039;&#039;2022 Remaster:&#039;&#039;&#039;&#039;&#039; ASCII text to determine keyframes for animation.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.car&lt;br /&gt;
 | Format = [[CAR Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Contain data for &amp;quot;living&amp;quot; entities (player, monsters)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.obj&lt;br /&gt;
 | Format = [[OBJ Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Sprites {{TODO|Possibly multiple frames per file}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.cel&lt;br /&gt;
 | Format = [http://justsolve.archiveteam.org/wiki/Animator_PIC/CEL Autodesk Animator PIC/CEL]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Textures and raster graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.wav&lt;br /&gt;
 | Format = [[WAV Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sounds&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = resource.**&lt;br /&gt;
 | Format = [[RESOURCE (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data (definitions)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = process.**&lt;br /&gt;
 | Format = [[PROCESS (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Level data (action scripts)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = floors.**&lt;br /&gt;
 | Format = [[FLOORS (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Floor graphics associated with level&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = map.**&lt;br /&gt;
 | Format = [[MAP (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = script.**&lt;br /&gt;
 | Format = [[SCRIPT (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data (cutscene scripts, not present in every level)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.raw&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pcm&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.sfx&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.r??&lt;br /&gt;
 | Format = &lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = {{TODO|Likely recorded gameplay with ?? corresponding to level number}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.key&lt;br /&gt;
 | Format = &lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = {{TODO|Appears to be related to keyboard layout}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = menu.txt&lt;br /&gt;
 | Format = Plain Text&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = {{TODO|Appears to configure aspects of the game menu (possibly useful for translation only?)}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.flac&lt;br /&gt;
 | Format = [[wikipedia:FLAC|FLAC (Free Lossless Audio Codec)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; music&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.gltf&lt;br /&gt;
 | Format = [[wikipedia:GlTF|glTF (Graphics Library Transmission Format)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; geometry, monster, character and item models&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.png&lt;br /&gt;
 | Format = [[wikipedia:PNG|PNG (Portable Network Graphics)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; Textures used for walls, geometry models, item models and character models&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ttf and *.otf&lt;br /&gt;
 | Format = [[wikipedia:TrueType|TrueType Font]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; In-game fonts (accessibility mode only)&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
==Source Ports and Reimplementations==&lt;br /&gt;
===DOS===&lt;br /&gt;
The original 1997 version of the game.&lt;br /&gt;
&lt;br /&gt;
===2022 Remaster===&lt;br /&gt;
An official remaster of the game was released in 2022 by General Arcade and SNEG for Windows (decent compatibility for Linux via Proton has been reported). This version of the game includes a new fully featured release of the game, the DOS version with DOSBox, a three level addon pack (including two additional monsters and a boss), and level editing software. &#039;Modding Manual.pdf&#039; is also included, which contains notes on how to modify parts of the game for this new version.&lt;br /&gt;
&lt;br /&gt;
The 2022 Remaster uses .gltf and .png files for easier modding, rather than the legacy file types from the DOS version. Having said this, the 2022 Remaster also has the ability to convert these legacy file types, making mods for the DOS version compatible with the rerelease.&lt;br /&gt;
&lt;br /&gt;
===PanzerChasm===&lt;br /&gt;
PanzerChasm was a project to reverse-engineer and re-implement the game&#039;s engine, being worked on by Artöm &amp;quot;Panzerschrek&amp;quot; Kunz. It can be found at:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Panzerschrek/Chasm-Reverse&lt;br /&gt;
&lt;br /&gt;
Due to some changes in the way PanzerChasm works, some map-packs and mods might have compatibility issues unless they were specifically designed for this source port.&lt;br /&gt;
&lt;br /&gt;
Panzerschrek has confirmed that PanzerChasm is no longer in active development and that elements of it were used, with permission, for the Remastered version of the game released in 2022. Panzerschrek is noted in the credits of the 2022 Remaster.&lt;br /&gt;
==Modding Tools==&lt;br /&gt;
===Chasm Modding Toolkit Package===&lt;br /&gt;
[https://www.moddb.com/games/chasm-the-rift/downloads/chasm-modding-toolkit-package Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and 2022 Remaster version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
&lt;br /&gt;
===glcar3o===&lt;br /&gt;
[https://github.com/jopadan/glcar3o glcar3o] is a [[Chasm: The Rift]] 3D .[[CAR Format]]/.[[3O Format]] animation model [[OpenGL]] viewer written in [[C23]]&lt;br /&gt;
&lt;br /&gt;
===AwesomeChasm===&lt;br /&gt;
[https://www.github.com/jopadan/AwesomeChasm AwesomeChasm] is a Chasm: The Rift URL collection with 3D Format documentation.&lt;br /&gt;
&lt;br /&gt;
==DOS Specifics==&lt;br /&gt;
===Archive and addons===&lt;br /&gt;
Most of the files listed above are normally stored inside CSM.BIN.  However, an addon loaded with the &amp;quot;-addon:&amp;lt;addon_dir&amp;gt;&amp;quot; game parameter can read replacement files from an open directory structure, provided that they are placed in the correctly named subdirectory.&lt;br /&gt;
&lt;br /&gt;
===Levels, cutscenes===&lt;br /&gt;
Levels are not stored in a single file, but several files with an extension .01, .02 etc. corresponding to the level number.  The process.**, script.** and resource.** files are in plain text; process defines action scripts using a scripting language explained in the level editor documentation, script defines a cutscene for the level and resource defines level settings such as title, CD track to play for background music, 3O, CEL and WAV files used, etc.  The map.** and floors.** files contain binary data; floors contains graphics for the floors (and probably ceilings) and appears to use a mipmap system.&lt;br /&gt;
&lt;br /&gt;
Level 99 exists in CSM.BIN, but is not a playable level and cannot be warped to.  Instead, it is a special case use of the map format whose purpose is to provide the background scenes for the mission briefing cutscenes.  The &amp;quot;room&amp;quot; numbers in the script.** files correspond to the numbered player starts in level 99.&lt;br /&gt;
&lt;br /&gt;
===Translucency===&lt;br /&gt;
CHASM.RGB and CHASM60.RGB are almost identical in construction to the TINTTAB format used in [[Heretic]] and [[Hexen]] except that there is no 256th row for the final color (which in Chasm is a dummy/transparent color).  CHASM.RGB appears to be a 50-50 blend while CHASM60.RGB appears to have a stronger influence from one of the colors (perhaps 60-40, judging by the file name?)&lt;br /&gt;
&lt;br /&gt;
===Textures===&lt;br /&gt;
Wall textures are of a .CEL format which is an &#039;&#039;Autodesk Animator&#039;&#039; file type. They conform to the Chasm color palette (which can be obtained [https://web.archive.org/web/20150120005440/http://www.angelfire.com/games6/chasm/transformers_files.htm here]).&lt;br /&gt;
&lt;br /&gt;
Textures are 64px or 128px in length and are always 128px in height. A pink color is used for transparency.&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/AnimatorPro Autodesk Animator Pro] source code was released by the author and can be downloaded and compiled if desired.&lt;br /&gt;
&lt;br /&gt;
[https://www.nyam.pe.kr/dev/imagine/ Imagine], by Sejin Chun, is free software which allows application of color palettes, as well as conversion to and from the .CEL format. This makes it an ideal tool for modding for Chasm: The Rift.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
The .CAR format is believed to be an early iteration of the format used by the Carnivores games for Windows (however, Chasm&#039;s .CAR data might be more closely related to the Chasm .3O files).  There is speculation where some believe .CAR refers to &#039;Caracter&#039; (per folder name) or &#039;Chasm Archive&#039;.  Part of the data contained within are sounds for the entity that the .CAR defines. These sounds can be heard at the end of the file if imported as raw data into audio software such as Audacity.&lt;br /&gt;
&lt;br /&gt;
==2022 Remaster Specifics==&lt;br /&gt;
&lt;br /&gt;
===Archive and Addons===&lt;br /&gt;
Files are kept within [[BIN Format (Chasm)|csm.bin]] in the root directory of the game and within a specific file structure. The 2022 Remaster uses a .tar file renamed as .bin and can therefore be accessed easily via archiving software (such as 7Zip) or even [http://slade.mancubus.net SLADE]. Mods made for the 2022 Remaster should copy this file structure and file extension. Much like a [[WAD Format]] file (for Doom), not all folders and files are required to be present with a mod because anything not present is instead taken from csm.bin. A mod can be created by archiving the files into an uncompressed .tar archive and then manually renamed to .bin.&lt;br /&gt;
&lt;br /&gt;
Addons can be played using the launch parameter of &#039;&#039;&#039;--addon xxxx&#039;&#039;&#039; (where xxxx is the name of the addon&#039;s .bin file, without the bin extension. e.g: &#039;&#039;&#039;--addon mymod&#039;&#039;&#039; would launch mymod.bin). It is possible to append this further with &#039;&#039;&#039;--modding&#039;&#039;&#039; (e.g: --addon xxxx --modding).&lt;br /&gt;
&lt;br /&gt;
The --modding parameter unlocks additional functionality which is useful for testing:&lt;br /&gt;
* &amp;quot;noclip&amp;quot; command available&lt;br /&gt;
* &amp;quot;go&amp;quot; command allows access to map 99&lt;br /&gt;
* &amp;quot;chojin&amp;quot; command not only provides invulnerability, but also restores ammo&lt;br /&gt;
* Pressing &amp;quot;M&amp;quot; toggles Monster animation on/off&lt;br /&gt;
* Pressing &amp;quot;N&amp;quot; toggles on-screen debug information&lt;br /&gt;
* Additional options in the menu are accessible, including movement speed, draw distance etc&lt;br /&gt;
&lt;br /&gt;
===Music===&lt;br /&gt;
The 2022 Remaster uses .FLAC (Free Lossless Audio Codec) files for music audio. However, it is not limited to this format specifically. The game can also use:&lt;br /&gt;
* [[wikipedia:FLAC|.flac]]&lt;br /&gt;
* [[wikipedia:Vorbis|.ogg]]&lt;br /&gt;
* [[WAV Format|.wav]]&lt;br /&gt;
&lt;br /&gt;
Although the game can use .ogg and .wav audio files, they must be manually renamed with a .flac extension (even if the data within the file is not .flac formatted). These files must be placed inside your mod&#039;s .bin file within the &#039;Music&#039; folder. Additionally, they must be named as trackxx.flac (where xx represents a number, e.g track01.flac).&lt;br /&gt;
&lt;br /&gt;
A map&#039;s [[RESOURCE (Chasm)|RESOURCE.XX]] file tells the game which music track to play.&lt;br /&gt;
&lt;br /&gt;
===Textures===&lt;br /&gt;
Wall .CEL textures are converted and appended to .PNG at runtime. The texture keeps it&#039;s previous full file name plus the appended .PNG extension. For example, TEXTURE.CEL becomes TEXTURE.CEL.PNG.&lt;br /&gt;
It&#039;s therefore possible to make texture swaps or up-scales in the Remastered version of the game by renaming the texture file as such and including it in the &#039;texture&#039; folder in your mod&#039;s .bin file. The game will use the .PNG file included in your .bin file if found, otherwise will fall-back to the texture file in the base game archive.&lt;br /&gt;
&lt;br /&gt;
The same approach is used for Chasm&#039;s .3O files. In the DOS version, the texture is baked into the .3O file. However, this can be replaced in the 2022 Remaster by adding a PNG file renamed as MODEL.3O.PNG. into the &#039;model&#039; folder in your mod&#039;s .bin file.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
Like textures, models are converted at runtime. Models (including .3O and .CAR) are converted to .GLTF. Custom .GLTF files should be placed into the appropriate folder for use in mods (&#039;model&#039; folder for static models, &#039;monster&#039; folder for enemy actors).&lt;br /&gt;
.3O files are appended to MODEL.3O.GLTF and .CAR files are appended to MONSTER.CAR.GLTF.&lt;br /&gt;
&lt;br /&gt;
Whereas the DOS version uses .ANI files which appear to include some kind of animation, the 2022 Remaster includes .ANI files as plain text which work in tandem with the related .GLTF file. Static .GLTF files do not require a .ANI counterpart, but one can be used if desired.&lt;br /&gt;
&lt;br /&gt;
The .ANI file should have the same filename as the .GLTF it is referencing. (eg, SCARYMONSTER.GLTF and SCARYMONSTER.ANI).&lt;br /&gt;
&lt;br /&gt;
This plain text file determines the frames of animation used.&lt;br /&gt;
&lt;br /&gt;
The .ANI file uses three integers in the following order: Anim-Number, Start-Frame, No-Of-Frames&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
0 0 2&lt;br /&gt;
&lt;br /&gt;
1 2 11&lt;br /&gt;
&lt;br /&gt;
2 13 15&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above example, 3 animations are defined. Animation 0, Animation 1 and Animation 2.&lt;br /&gt;
&lt;br /&gt;
Animation 0 starts at Frame 0 and plays for 2 frames.&lt;br /&gt;
&lt;br /&gt;
Animation 2 starts at Frame 2 and plays for 11 frames.&lt;br /&gt;
&lt;br /&gt;
Animation 3 starts at Frame 13 and plays for 15 frames.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is important to note that certain models can utilise only certain animation numbers:&lt;br /&gt;
* Static 3D Objects: No .ANI file required (or Animation 0 with start and end frames of 0 only).&lt;br /&gt;
* Weapons: Animation 1 is Idle, Animation 2 is Firing, Animation 3 is Reloading.&lt;br /&gt;
* Dismembered Limbs/Sepparts: Animation 1 is rotation, Animation 2 is landing.&lt;br /&gt;
* Monsters: Animation 0 is moving, Animation 2 is Idle, Animation 3 is second Idle, Animation 4 is third Idle, Animation 5 is Firing, Animation 6 is Left-Hand Punch, Animation 7 is Right-Hand Punch, Animation 8 is Headbutt, Animation 9 is Pain, Animation 10 is second Pain, Animation 11 is Right-Hand Dismember, Animation 12 is Left-Hand Dismember, Animation 13 is Head Dismember, Animation 14 is Respawn, Animation 15 is Celebrate (after killing aggressor), Animation 16 is Death, Animation 17 is second Death.&lt;br /&gt;
&lt;br /&gt;
Additional notes on Monster animations:&lt;br /&gt;
* If animations 0, 2, 16 are missing then the monster will not work.&lt;br /&gt;
* If animation 5 is missing, then the monster cannot Fire projectiles.&lt;br /&gt;
* If animation 6, 7, 8 are missing then the monster cannot Melee attack.&lt;br /&gt;
* If animation 11, 12, 13 are missing then the monster cannot be dismembered.&lt;br /&gt;
&lt;br /&gt;
Collision low and high points are determined from the lowest and highest geometry points in the first keyframe. For example, if you had a tall monster that shrinks down in animation, the collision heights will remain as those from the first frame, so although the monster has shrunk, it&#039;s hitbox will remain the same size as its first frame. Likewise, if you had a monster that grows in size, its hitbox will remain small rather than growing larger.&lt;br /&gt;
&lt;br /&gt;
[[Category:3D]]&lt;br /&gt;
[[Category:First-Person Shooter]]&lt;br /&gt;
[[Category:Action Forms]]&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Chasm:_The_Rift&amp;diff=12401</id>
		<title>Chasm: The Rift</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Chasm:_The_Rift&amp;diff=12401"/>
		<updated>2025-07-17T17:42:44Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* glcar3o */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Title = Chasm- The Rift.png &amp;lt;!-- Only because of the colon --&amp;gt;&lt;br /&gt;
 | Modded = Mod-Chasm- The Rift.png&lt;br /&gt;
 | Levels = Edit&lt;br /&gt;
 | Tiles = Edit&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = Edit&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Chasm: The Rift&#039;&#039;&#039; is an FPS game from the twilight of the DOS era, developed by Action Forms Ltd. and released in 1997.  The engine, contrary to popularly spread misinformation, is not based on [[Quake]] but appears to be an original, and has some interesting features but is also, for its time, somewhat limited regarding the level geometry that can be created.&lt;br /&gt;
&lt;br /&gt;
A level editor is included on the game CD, and some enemy and weapon stats can be modified using a plain text configuration, but certain other aspects of modifying the game (such as the 3D models) remain poorly understood.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = csm.bin&lt;br /&gt;
 | Format = [[BIN Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Main data archive. Structure and archive formats differ between DOS (CSM.BIN) and the 2022 Remaster (csm.bin)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm2.pal&lt;br /&gt;
 | Format = [[VGA Palette]] (6-bit version)&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Game palette&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.inf&lt;br /&gt;
 | Format = [[CHASM.INF]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Configures enemy and weapon stats&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.rgb&lt;br /&gt;
 | Format = 256x255 color index array&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Translucency tables&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.3o&lt;br /&gt;
 | Format = [[3O Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = 3D models (weapons, scenery)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ani&lt;br /&gt;
 | Format = [[ANI Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;DOS:&#039;&#039;&#039;&#039;&#039; Data to animate models.  &#039;&#039;&#039;&#039;&#039;2022 Remaster:&#039;&#039;&#039;&#039;&#039; ASCII text to determine keyframes for animation.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.car&lt;br /&gt;
 | Format = [[CAR Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Contain data for &amp;quot;living&amp;quot; entities (player, monsters)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.obj&lt;br /&gt;
 | Format = [[OBJ Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Sprites {{TODO|Possibly multiple frames per file}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.cel&lt;br /&gt;
 | Format = [http://justsolve.archiveteam.org/wiki/Animator_PIC/CEL Autodesk Animator PIC/CEL]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Textures and raster graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.wav&lt;br /&gt;
 | Format = [[WAV Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sounds&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = resource.**&lt;br /&gt;
 | Format = [[RESOURCE (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data (definitions)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = process.**&lt;br /&gt;
 | Format = [[PROCESS (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Level data (action scripts)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = floors.**&lt;br /&gt;
 | Format = [[FLOORS (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Floor graphics associated with level&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = map.**&lt;br /&gt;
 | Format = [[MAP (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = script.**&lt;br /&gt;
 | Format = [[SCRIPT (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data (cutscene scripts, not present in every level)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.raw&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pcm&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.sfx&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.r??&lt;br /&gt;
 | Format = &lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = {{TODO|Likely recorded gameplay with ?? corresponding to level number}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.key&lt;br /&gt;
 | Format = &lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = {{TODO|Appears to be related to keyboard layout}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = menu.txt&lt;br /&gt;
 | Format = Plain Text&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = {{TODO|Appears to configure aspects of the game menu (possibly useful for translation only?)}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.flac&lt;br /&gt;
 | Format = [[wikipedia:FLAC|FLAC (Free Lossless Audio Codec)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; music&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.gltf&lt;br /&gt;
 | Format = [[wikipedia:GlTF|glTF (Graphics Library Transmission Format)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; geometry, monster, character and item models&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.png&lt;br /&gt;
 | Format = [[wikipedia:PNG|PNG (Portable Network Graphics)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; Textures used for walls, geometry models, item models and character models&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ttf and *.otf&lt;br /&gt;
 | Format = [[wikipedia:TrueType|TrueType Font]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; In-game fonts (accessibility mode only)&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
==Source Ports and Reimplementations==&lt;br /&gt;
===DOS===&lt;br /&gt;
The original 1997 version of the game.&lt;br /&gt;
&lt;br /&gt;
===2022 Remaster===&lt;br /&gt;
An official remaster of the game was released in 2022 by General Arcade and SNEG for Windows (decent compatibility for Linux via Proton has been reported). This version of the game includes a new fully featured release of the game, the DOS version with DOSBox, a three level addon pack (including two additional monsters and a boss), and level editing software. &#039;Modding Manual.pdf&#039; is also included, which contains notes on how to modify parts of the game for this new version.&lt;br /&gt;
&lt;br /&gt;
The 2022 Remaster uses .gltf and .png files for easier modding, rather than the legacy file types from the DOS version. Having said this, the 2022 Remaster also has the ability to convert these legacy file types, making mods for the DOS version compatible with the rerelease.&lt;br /&gt;
&lt;br /&gt;
===PanzerChasm===&lt;br /&gt;
PanzerChasm was a project to reverse-engineer and re-implement the game&#039;s engine, being worked on by Artöm &amp;quot;Panzerschrek&amp;quot; Kunz. It can be found at:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Panzerschrek/Chasm-Reverse&lt;br /&gt;
&lt;br /&gt;
Due to some changes in the way PanzerChasm works, some map-packs and mods might have compatibility issues unless they were specifically designed for this source port.&lt;br /&gt;
&lt;br /&gt;
Panzerschrek has confirmed that PanzerChasm is no longer in active development and that elements of it were used, with permission, for the Remastered version of the game released in 2022. Panzerschrek is noted in the credits of the 2022 Remaster.&lt;br /&gt;
==Modding Tools==&lt;br /&gt;
===Chasm Modding Toolkit Package===&lt;br /&gt;
[https://www.moddb.com/games/chasm-the-rift/downloads/chasm-modding-toolkit-package Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and 2022 Remaster version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
===glcar3o===&lt;br /&gt;
[https://github.com/jopadan/glcar3o glcar3o] is a [[Chasm: The Rift]] 3D .[[CAR Format]]/.[[3O Format]] animation model [[OpenGL]] viewer written in [[C23]]&lt;br /&gt;
&lt;br /&gt;
===AwesomeChasm===&lt;br /&gt;
[https://www.github.com/jopadan/AwesomeChasm AwesomeChasm] is a Chasm: The Rift URL collection with 3D Format documentation.&lt;br /&gt;
&lt;br /&gt;
==DOS Specifics==&lt;br /&gt;
===Archive and addons===&lt;br /&gt;
Most of the files listed above are normally stored inside CSM.BIN.  However, an addon loaded with the &amp;quot;-addon:&amp;lt;addon_dir&amp;gt;&amp;quot; game parameter can read replacement files from an open directory structure, provided that they are placed in the correctly named subdirectory.&lt;br /&gt;
&lt;br /&gt;
===Levels, cutscenes===&lt;br /&gt;
Levels are not stored in a single file, but several files with an extension .01, .02 etc. corresponding to the level number.  The process.**, script.** and resource.** files are in plain text; process defines action scripts using a scripting language explained in the level editor documentation, script defines a cutscene for the level and resource defines level settings such as title, CD track to play for background music, 3O, CEL and WAV files used, etc.  The map.** and floors.** files contain binary data; floors contains graphics for the floors (and probably ceilings) and appears to use a mipmap system.&lt;br /&gt;
&lt;br /&gt;
Level 99 exists in CSM.BIN, but is not a playable level and cannot be warped to.  Instead, it is a special case use of the map format whose purpose is to provide the background scenes for the mission briefing cutscenes.  The &amp;quot;room&amp;quot; numbers in the script.** files correspond to the numbered player starts in level 99.&lt;br /&gt;
&lt;br /&gt;
===Translucency===&lt;br /&gt;
CHASM.RGB and CHASM60.RGB are almost identical in construction to the TINTTAB format used in [[Heretic]] and [[Hexen]] except that there is no 256th row for the final color (which in Chasm is a dummy/transparent color).  CHASM.RGB appears to be a 50-50 blend while CHASM60.RGB appears to have a stronger influence from one of the colors (perhaps 60-40, judging by the file name?)&lt;br /&gt;
&lt;br /&gt;
===Textures===&lt;br /&gt;
Wall textures are of a .CEL format which is an &#039;&#039;Autodesk Animator&#039;&#039; file type. They conform to the Chasm color palette (which can be obtained [https://web.archive.org/web/20150120005440/http://www.angelfire.com/games6/chasm/transformers_files.htm here]).&lt;br /&gt;
&lt;br /&gt;
Textures are 64px or 128px in length and are always 128px in height. A pink color is used for transparency.&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/AnimatorPro Autodesk Animator Pro] source code was released by the author and can be downloaded and compiled if desired.&lt;br /&gt;
&lt;br /&gt;
[https://www.nyam.pe.kr/dev/imagine/ Imagine], by Sejin Chun, is free software which allows application of color palettes, as well as conversion to and from the .CEL format. This makes it an ideal tool for modding for Chasm: The Rift.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
The .CAR format is believed to be an early iteration of the format used by the Carnivores games for Windows (however, Chasm&#039;s .CAR data might be more closely related to the Chasm .3O files).  There is speculation where some believe .CAR refers to &#039;Caracter&#039; (per folder name) or &#039;Chasm Archive&#039;.  Part of the data contained within are sounds for the entity that the .CAR defines. These sounds can be heard at the end of the file if imported as raw data into audio software such as Audacity.&lt;br /&gt;
&lt;br /&gt;
==2022 Remaster Specifics==&lt;br /&gt;
&lt;br /&gt;
===Archive and Addons===&lt;br /&gt;
Files are kept within [[BIN Format (Chasm)|csm.bin]] in the root directory of the game and within a specific file structure. The 2022 Remaster uses a .tar file renamed as .bin and can therefore be accessed easily via archiving software (such as 7Zip) or even [http://slade.mancubus.net SLADE]. Mods made for the 2022 Remaster should copy this file structure and file extension. Much like a [[WAD Format]] file (for Doom), not all folders and files are required to be present with a mod because anything not present is instead taken from csm.bin. A mod can be created by archiving the files into an uncompressed .tar archive and then manually renamed to .bin.&lt;br /&gt;
&lt;br /&gt;
Addons can be played using the launch parameter of &#039;&#039;&#039;--addon xxxx&#039;&#039;&#039; (where xxxx is the name of the addon&#039;s .bin file, without the bin extension. e.g: &#039;&#039;&#039;--addon mymod&#039;&#039;&#039; would launch mymod.bin). It is possible to append this further with &#039;&#039;&#039;--modding&#039;&#039;&#039; (e.g: --addon xxxx --modding).&lt;br /&gt;
&lt;br /&gt;
The --modding parameter unlocks additional functionality which is useful for testing:&lt;br /&gt;
* &amp;quot;noclip&amp;quot; command available&lt;br /&gt;
* &amp;quot;go&amp;quot; command allows access to map 99&lt;br /&gt;
* &amp;quot;chojin&amp;quot; command not only provides invulnerability, but also restores ammo&lt;br /&gt;
* Pressing &amp;quot;M&amp;quot; toggles Monster animation on/off&lt;br /&gt;
* Pressing &amp;quot;N&amp;quot; toggles on-screen debug information&lt;br /&gt;
* Additional options in the menu are accessible, including movement speed, draw distance etc&lt;br /&gt;
&lt;br /&gt;
===Music===&lt;br /&gt;
The 2022 Remaster uses .FLAC (Free Lossless Audio Codec) files for music audio. However, it is not limited to this format specifically. The game can also use:&lt;br /&gt;
* [[wikipedia:FLAC|.flac]]&lt;br /&gt;
* [[wikipedia:Vorbis|.ogg]]&lt;br /&gt;
* [[WAV Format|.wav]]&lt;br /&gt;
&lt;br /&gt;
Although the game can use .ogg and .wav audio files, they must be manually renamed with a .flac extension (even if the data within the file is not .flac formatted). These files must be placed inside your mod&#039;s .bin file within the &#039;Music&#039; folder. Additionally, they must be named as trackxx.flac (where xx represents a number, e.g track01.flac).&lt;br /&gt;
&lt;br /&gt;
A map&#039;s [[RESOURCE (Chasm)|RESOURCE.XX]] file tells the game which music track to play.&lt;br /&gt;
&lt;br /&gt;
===Textures===&lt;br /&gt;
Wall .CEL textures are converted and appended to .PNG at runtime. The texture keeps it&#039;s previous full file name plus the appended .PNG extension. For example, TEXTURE.CEL becomes TEXTURE.CEL.PNG.&lt;br /&gt;
It&#039;s therefore possible to make texture swaps or up-scales in the Remastered version of the game by renaming the texture file as such and including it in the &#039;texture&#039; folder in your mod&#039;s .bin file. The game will use the .PNG file included in your .bin file if found, otherwise will fall-back to the texture file in the base game archive.&lt;br /&gt;
&lt;br /&gt;
The same approach is used for Chasm&#039;s .3O files. In the DOS version, the texture is baked into the .3O file. However, this can be replaced in the 2022 Remaster by adding a PNG file renamed as MODEL.3O.PNG. into the &#039;model&#039; folder in your mod&#039;s .bin file.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
Like textures, models are converted at runtime. Models (including .3O and .CAR) are converted to .GLTF. Custom .GLTF files should be placed into the appropriate folder for use in mods (&#039;model&#039; folder for static models, &#039;monster&#039; folder for enemy actors).&lt;br /&gt;
.3O files are appended to MODEL.3O.GLTF and .CAR files are appended to MONSTER.CAR.GLTF.&lt;br /&gt;
&lt;br /&gt;
Whereas the DOS version uses .ANI files which appear to include some kind of animation, the 2022 Remaster includes .ANI files as plain text which work in tandem with the related .GLTF file. Static .GLTF files do not require a .ANI counterpart, but one can be used if desired.&lt;br /&gt;
&lt;br /&gt;
The .ANI file should have the same filename as the .GLTF it is referencing. (eg, SCARYMONSTER.GLTF and SCARYMONSTER.ANI).&lt;br /&gt;
&lt;br /&gt;
This plain text file determines the frames of animation used.&lt;br /&gt;
&lt;br /&gt;
The .ANI file uses three integers in the following order: Anim-Number, Start-Frame, No-Of-Frames&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
0 0 2&lt;br /&gt;
&lt;br /&gt;
1 2 11&lt;br /&gt;
&lt;br /&gt;
2 13 15&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above example, 3 animations are defined. Animation 0, Animation 1 and Animation 2.&lt;br /&gt;
&lt;br /&gt;
Animation 0 starts at Frame 0 and plays for 2 frames.&lt;br /&gt;
&lt;br /&gt;
Animation 2 starts at Frame 2 and plays for 11 frames.&lt;br /&gt;
&lt;br /&gt;
Animation 3 starts at Frame 13 and plays for 15 frames.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is important to note that certain models can utilise only certain animation numbers:&lt;br /&gt;
* Static 3D Objects: No .ANI file required (or Animation 0 with start and end frames of 0 only).&lt;br /&gt;
* Weapons: Animation 1 is Idle, Animation 2 is Firing, Animation 3 is Reloading.&lt;br /&gt;
* Dismembered Limbs/Sepparts: Animation 1 is rotation, Animation 2 is landing.&lt;br /&gt;
* Monsters: Animation 0 is moving, Animation 2 is Idle, Animation 3 is second Idle, Animation 4 is third Idle, Animation 5 is Firing, Animation 6 is Left-Hand Punch, Animation 7 is Right-Hand Punch, Animation 8 is Headbutt, Animation 9 is Pain, Animation 10 is second Pain, Animation 11 is Right-Hand Dismember, Animation 12 is Left-Hand Dismember, Animation 13 is Head Dismember, Animation 14 is Respawn, Animation 15 is Celebrate (after killing aggressor), Animation 16 is Death, Animation 17 is second Death.&lt;br /&gt;
&lt;br /&gt;
Additional notes on Monster animations:&lt;br /&gt;
* If animations 0, 2, 16 are missing then the monster will not work.&lt;br /&gt;
* If animation 5 is missing, then the monster cannot Fire projectiles.&lt;br /&gt;
* If animation 6, 7, 8 are missing then the monster cannot Melee attack.&lt;br /&gt;
* If animation 11, 12, 13 are missing then the monster cannot be dismembered.&lt;br /&gt;
&lt;br /&gt;
Collision low and high points are determined from the lowest and highest geometry points in the first keyframe. For example, if you had a tall monster that shrinks down in animation, the collision heights will remain as those from the first frame, so although the monster has shrunk, it&#039;s hitbox will remain the same size as its first frame. Likewise, if you had a monster that grows in size, its hitbox will remain small rather than growing larger.&lt;br /&gt;
&lt;br /&gt;
[[Category:3D]]&lt;br /&gt;
[[Category:First-Person Shooter]]&lt;br /&gt;
[[Category:Action Forms]]&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Chasm:_The_Rift&amp;diff=12400</id>
		<title>Chasm: The Rift</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Chasm:_The_Rift&amp;diff=12400"/>
		<updated>2025-07-17T17:41:39Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* glcar3o */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Title = Chasm- The Rift.png &amp;lt;!-- Only because of the colon --&amp;gt;&lt;br /&gt;
 | Modded = Mod-Chasm- The Rift.png&lt;br /&gt;
 | Levels = Edit&lt;br /&gt;
 | Tiles = Edit&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = Edit&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Chasm: The Rift&#039;&#039;&#039; is an FPS game from the twilight of the DOS era, developed by Action Forms Ltd. and released in 1997.  The engine, contrary to popularly spread misinformation, is not based on [[Quake]] but appears to be an original, and has some interesting features but is also, for its time, somewhat limited regarding the level geometry that can be created.&lt;br /&gt;
&lt;br /&gt;
A level editor is included on the game CD, and some enemy and weapon stats can be modified using a plain text configuration, but certain other aspects of modifying the game (such as the 3D models) remain poorly understood.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = csm.bin&lt;br /&gt;
 | Format = [[BIN Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Main data archive. Structure and archive formats differ between DOS (CSM.BIN) and the 2022 Remaster (csm.bin)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm2.pal&lt;br /&gt;
 | Format = [[VGA Palette]] (6-bit version)&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Game palette&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.inf&lt;br /&gt;
 | Format = [[CHASM.INF]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Configures enemy and weapon stats&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.rgb&lt;br /&gt;
 | Format = 256x255 color index array&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Translucency tables&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.3o&lt;br /&gt;
 | Format = [[3O Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = 3D models (weapons, scenery)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ani&lt;br /&gt;
 | Format = [[ANI Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;DOS:&#039;&#039;&#039;&#039;&#039; Data to animate models.  &#039;&#039;&#039;&#039;&#039;2022 Remaster:&#039;&#039;&#039;&#039;&#039; ASCII text to determine keyframes for animation.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.car&lt;br /&gt;
 | Format = [[CAR Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Contain data for &amp;quot;living&amp;quot; entities (player, monsters)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.obj&lt;br /&gt;
 | Format = [[OBJ Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Sprites {{TODO|Possibly multiple frames per file}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.cel&lt;br /&gt;
 | Format = [http://justsolve.archiveteam.org/wiki/Animator_PIC/CEL Autodesk Animator PIC/CEL]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Textures and raster graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.wav&lt;br /&gt;
 | Format = [[WAV Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sounds&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = resource.**&lt;br /&gt;
 | Format = [[RESOURCE (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data (definitions)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = process.**&lt;br /&gt;
 | Format = [[PROCESS (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Level data (action scripts)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = floors.**&lt;br /&gt;
 | Format = [[FLOORS (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Floor graphics associated with level&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = map.**&lt;br /&gt;
 | Format = [[MAP (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = script.**&lt;br /&gt;
 | Format = [[SCRIPT (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data (cutscene scripts, not present in every level)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.raw&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pcm&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.sfx&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.r??&lt;br /&gt;
 | Format = &lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = {{TODO|Likely recorded gameplay with ?? corresponding to level number}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.key&lt;br /&gt;
 | Format = &lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = {{TODO|Appears to be related to keyboard layout}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = menu.txt&lt;br /&gt;
 | Format = Plain Text&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = {{TODO|Appears to configure aspects of the game menu (possibly useful for translation only?)}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.flac&lt;br /&gt;
 | Format = [[wikipedia:FLAC|FLAC (Free Lossless Audio Codec)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; music&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.gltf&lt;br /&gt;
 | Format = [[wikipedia:GlTF|glTF (Graphics Library Transmission Format)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; geometry, monster, character and item models&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.png&lt;br /&gt;
 | Format = [[wikipedia:PNG|PNG (Portable Network Graphics)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; Textures used for walls, geometry models, item models and character models&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ttf and *.otf&lt;br /&gt;
 | Format = [[wikipedia:TrueType|TrueType Font]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; In-game fonts (accessibility mode only)&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
==Source Ports and Reimplementations==&lt;br /&gt;
===DOS===&lt;br /&gt;
The original 1997 version of the game.&lt;br /&gt;
&lt;br /&gt;
===2022 Remaster===&lt;br /&gt;
An official remaster of the game was released in 2022 by General Arcade and SNEG for Windows (decent compatibility for Linux via Proton has been reported). This version of the game includes a new fully featured release of the game, the DOS version with DOSBox, a three level addon pack (including two additional monsters and a boss), and level editing software. &#039;Modding Manual.pdf&#039; is also included, which contains notes on how to modify parts of the game for this new version.&lt;br /&gt;
&lt;br /&gt;
The 2022 Remaster uses .gltf and .png files for easier modding, rather than the legacy file types from the DOS version. Having said this, the 2022 Remaster also has the ability to convert these legacy file types, making mods for the DOS version compatible with the rerelease.&lt;br /&gt;
&lt;br /&gt;
===PanzerChasm===&lt;br /&gt;
PanzerChasm was a project to reverse-engineer and re-implement the game&#039;s engine, being worked on by Artöm &amp;quot;Panzerschrek&amp;quot; Kunz. It can be found at:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Panzerschrek/Chasm-Reverse&lt;br /&gt;
&lt;br /&gt;
Due to some changes in the way PanzerChasm works, some map-packs and mods might have compatibility issues unless they were specifically designed for this source port.&lt;br /&gt;
&lt;br /&gt;
Panzerschrek has confirmed that PanzerChasm is no longer in active development and that elements of it were used, with permission, for the Remastered version of the game released in 2022. Panzerschrek is noted in the credits of the 2022 Remaster.&lt;br /&gt;
==Modding Tools==&lt;br /&gt;
===Chasm Modding Toolkit Package===&lt;br /&gt;
[https://www.moddb.com/games/chasm-the-rift/downloads/chasm-modding-toolkit-package Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and 2022 Remaster version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
===glcar3o===&lt;br /&gt;
[https://github.com/jopadan/glcar3o glcar3o] [[Chasm: is a The Rift]] 3D .[[CAR Format]]/.[[3O Format]] animation model OpenGL viewer written in C23&lt;br /&gt;
&lt;br /&gt;
===AwesomeChasm===&lt;br /&gt;
[https://www.github.com/jopadan/AwesomeChasm AwesomeChasm] is a Chasm: The Rift URL collection with 3D Format documentation.&lt;br /&gt;
&lt;br /&gt;
==DOS Specifics==&lt;br /&gt;
===Archive and addons===&lt;br /&gt;
Most of the files listed above are normally stored inside CSM.BIN.  However, an addon loaded with the &amp;quot;-addon:&amp;lt;addon_dir&amp;gt;&amp;quot; game parameter can read replacement files from an open directory structure, provided that they are placed in the correctly named subdirectory.&lt;br /&gt;
&lt;br /&gt;
===Levels, cutscenes===&lt;br /&gt;
Levels are not stored in a single file, but several files with an extension .01, .02 etc. corresponding to the level number.  The process.**, script.** and resource.** files are in plain text; process defines action scripts using a scripting language explained in the level editor documentation, script defines a cutscene for the level and resource defines level settings such as title, CD track to play for background music, 3O, CEL and WAV files used, etc.  The map.** and floors.** files contain binary data; floors contains graphics for the floors (and probably ceilings) and appears to use a mipmap system.&lt;br /&gt;
&lt;br /&gt;
Level 99 exists in CSM.BIN, but is not a playable level and cannot be warped to.  Instead, it is a special case use of the map format whose purpose is to provide the background scenes for the mission briefing cutscenes.  The &amp;quot;room&amp;quot; numbers in the script.** files correspond to the numbered player starts in level 99.&lt;br /&gt;
&lt;br /&gt;
===Translucency===&lt;br /&gt;
CHASM.RGB and CHASM60.RGB are almost identical in construction to the TINTTAB format used in [[Heretic]] and [[Hexen]] except that there is no 256th row for the final color (which in Chasm is a dummy/transparent color).  CHASM.RGB appears to be a 50-50 blend while CHASM60.RGB appears to have a stronger influence from one of the colors (perhaps 60-40, judging by the file name?)&lt;br /&gt;
&lt;br /&gt;
===Textures===&lt;br /&gt;
Wall textures are of a .CEL format which is an &#039;&#039;Autodesk Animator&#039;&#039; file type. They conform to the Chasm color palette (which can be obtained [https://web.archive.org/web/20150120005440/http://www.angelfire.com/games6/chasm/transformers_files.htm here]).&lt;br /&gt;
&lt;br /&gt;
Textures are 64px or 128px in length and are always 128px in height. A pink color is used for transparency.&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/AnimatorPro Autodesk Animator Pro] source code was released by the author and can be downloaded and compiled if desired.&lt;br /&gt;
&lt;br /&gt;
[https://www.nyam.pe.kr/dev/imagine/ Imagine], by Sejin Chun, is free software which allows application of color palettes, as well as conversion to and from the .CEL format. This makes it an ideal tool for modding for Chasm: The Rift.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
The .CAR format is believed to be an early iteration of the format used by the Carnivores games for Windows (however, Chasm&#039;s .CAR data might be more closely related to the Chasm .3O files).  There is speculation where some believe .CAR refers to &#039;Caracter&#039; (per folder name) or &#039;Chasm Archive&#039;.  Part of the data contained within are sounds for the entity that the .CAR defines. These sounds can be heard at the end of the file if imported as raw data into audio software such as Audacity.&lt;br /&gt;
&lt;br /&gt;
==2022 Remaster Specifics==&lt;br /&gt;
&lt;br /&gt;
===Archive and Addons===&lt;br /&gt;
Files are kept within [[BIN Format (Chasm)|csm.bin]] in the root directory of the game and within a specific file structure. The 2022 Remaster uses a .tar file renamed as .bin and can therefore be accessed easily via archiving software (such as 7Zip) or even [http://slade.mancubus.net SLADE]. Mods made for the 2022 Remaster should copy this file structure and file extension. Much like a [[WAD Format]] file (for Doom), not all folders and files are required to be present with a mod because anything not present is instead taken from csm.bin. A mod can be created by archiving the files into an uncompressed .tar archive and then manually renamed to .bin.&lt;br /&gt;
&lt;br /&gt;
Addons can be played using the launch parameter of &#039;&#039;&#039;--addon xxxx&#039;&#039;&#039; (where xxxx is the name of the addon&#039;s .bin file, without the bin extension. e.g: &#039;&#039;&#039;--addon mymod&#039;&#039;&#039; would launch mymod.bin). It is possible to append this further with &#039;&#039;&#039;--modding&#039;&#039;&#039; (e.g: --addon xxxx --modding).&lt;br /&gt;
&lt;br /&gt;
The --modding parameter unlocks additional functionality which is useful for testing:&lt;br /&gt;
* &amp;quot;noclip&amp;quot; command available&lt;br /&gt;
* &amp;quot;go&amp;quot; command allows access to map 99&lt;br /&gt;
* &amp;quot;chojin&amp;quot; command not only provides invulnerability, but also restores ammo&lt;br /&gt;
* Pressing &amp;quot;M&amp;quot; toggles Monster animation on/off&lt;br /&gt;
* Pressing &amp;quot;N&amp;quot; toggles on-screen debug information&lt;br /&gt;
* Additional options in the menu are accessible, including movement speed, draw distance etc&lt;br /&gt;
&lt;br /&gt;
===Music===&lt;br /&gt;
The 2022 Remaster uses .FLAC (Free Lossless Audio Codec) files for music audio. However, it is not limited to this format specifically. The game can also use:&lt;br /&gt;
* [[wikipedia:FLAC|.flac]]&lt;br /&gt;
* [[wikipedia:Vorbis|.ogg]]&lt;br /&gt;
* [[WAV Format|.wav]]&lt;br /&gt;
&lt;br /&gt;
Although the game can use .ogg and .wav audio files, they must be manually renamed with a .flac extension (even if the data within the file is not .flac formatted). These files must be placed inside your mod&#039;s .bin file within the &#039;Music&#039; folder. Additionally, they must be named as trackxx.flac (where xx represents a number, e.g track01.flac).&lt;br /&gt;
&lt;br /&gt;
A map&#039;s [[RESOURCE (Chasm)|RESOURCE.XX]] file tells the game which music track to play.&lt;br /&gt;
&lt;br /&gt;
===Textures===&lt;br /&gt;
Wall .CEL textures are converted and appended to .PNG at runtime. The texture keeps it&#039;s previous full file name plus the appended .PNG extension. For example, TEXTURE.CEL becomes TEXTURE.CEL.PNG.&lt;br /&gt;
It&#039;s therefore possible to make texture swaps or up-scales in the Remastered version of the game by renaming the texture file as such and including it in the &#039;texture&#039; folder in your mod&#039;s .bin file. The game will use the .PNG file included in your .bin file if found, otherwise will fall-back to the texture file in the base game archive.&lt;br /&gt;
&lt;br /&gt;
The same approach is used for Chasm&#039;s .3O files. In the DOS version, the texture is baked into the .3O file. However, this can be replaced in the 2022 Remaster by adding a PNG file renamed as MODEL.3O.PNG. into the &#039;model&#039; folder in your mod&#039;s .bin file.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
Like textures, models are converted at runtime. Models (including .3O and .CAR) are converted to .GLTF. Custom .GLTF files should be placed into the appropriate folder for use in mods (&#039;model&#039; folder for static models, &#039;monster&#039; folder for enemy actors).&lt;br /&gt;
.3O files are appended to MODEL.3O.GLTF and .CAR files are appended to MONSTER.CAR.GLTF.&lt;br /&gt;
&lt;br /&gt;
Whereas the DOS version uses .ANI files which appear to include some kind of animation, the 2022 Remaster includes .ANI files as plain text which work in tandem with the related .GLTF file. Static .GLTF files do not require a .ANI counterpart, but one can be used if desired.&lt;br /&gt;
&lt;br /&gt;
The .ANI file should have the same filename as the .GLTF it is referencing. (eg, SCARYMONSTER.GLTF and SCARYMONSTER.ANI).&lt;br /&gt;
&lt;br /&gt;
This plain text file determines the frames of animation used.&lt;br /&gt;
&lt;br /&gt;
The .ANI file uses three integers in the following order: Anim-Number, Start-Frame, No-Of-Frames&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
0 0 2&lt;br /&gt;
&lt;br /&gt;
1 2 11&lt;br /&gt;
&lt;br /&gt;
2 13 15&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above example, 3 animations are defined. Animation 0, Animation 1 and Animation 2.&lt;br /&gt;
&lt;br /&gt;
Animation 0 starts at Frame 0 and plays for 2 frames.&lt;br /&gt;
&lt;br /&gt;
Animation 2 starts at Frame 2 and plays for 11 frames.&lt;br /&gt;
&lt;br /&gt;
Animation 3 starts at Frame 13 and plays for 15 frames.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is important to note that certain models can utilise only certain animation numbers:&lt;br /&gt;
* Static 3D Objects: No .ANI file required (or Animation 0 with start and end frames of 0 only).&lt;br /&gt;
* Weapons: Animation 1 is Idle, Animation 2 is Firing, Animation 3 is Reloading.&lt;br /&gt;
* Dismembered Limbs/Sepparts: Animation 1 is rotation, Animation 2 is landing.&lt;br /&gt;
* Monsters: Animation 0 is moving, Animation 2 is Idle, Animation 3 is second Idle, Animation 4 is third Idle, Animation 5 is Firing, Animation 6 is Left-Hand Punch, Animation 7 is Right-Hand Punch, Animation 8 is Headbutt, Animation 9 is Pain, Animation 10 is second Pain, Animation 11 is Right-Hand Dismember, Animation 12 is Left-Hand Dismember, Animation 13 is Head Dismember, Animation 14 is Respawn, Animation 15 is Celebrate (after killing aggressor), Animation 16 is Death, Animation 17 is second Death.&lt;br /&gt;
&lt;br /&gt;
Additional notes on Monster animations:&lt;br /&gt;
* If animations 0, 2, 16 are missing then the monster will not work.&lt;br /&gt;
* If animation 5 is missing, then the monster cannot Fire projectiles.&lt;br /&gt;
* If animation 6, 7, 8 are missing then the monster cannot Melee attack.&lt;br /&gt;
* If animation 11, 12, 13 are missing then the monster cannot be dismembered.&lt;br /&gt;
&lt;br /&gt;
Collision low and high points are determined from the lowest and highest geometry points in the first keyframe. For example, if you had a tall monster that shrinks down in animation, the collision heights will remain as those from the first frame, so although the monster has shrunk, it&#039;s hitbox will remain the same size as its first frame. Likewise, if you had a monster that grows in size, its hitbox will remain small rather than growing larger.&lt;br /&gt;
&lt;br /&gt;
[[Category:3D]]&lt;br /&gt;
[[Category:First-Person Shooter]]&lt;br /&gt;
[[Category:Action Forms]]&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Chasm:_The_Rift&amp;diff=12399</id>
		<title>Chasm: The Rift</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Chasm:_The_Rift&amp;diff=12399"/>
		<updated>2025-07-17T17:38:28Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* glcar3o */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Title = Chasm- The Rift.png &amp;lt;!-- Only because of the colon --&amp;gt;&lt;br /&gt;
 | Modded = Mod-Chasm- The Rift.png&lt;br /&gt;
 | Levels = Edit&lt;br /&gt;
 | Tiles = Edit&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = Edit&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Chasm: The Rift&#039;&#039;&#039; is an FPS game from the twilight of the DOS era, developed by Action Forms Ltd. and released in 1997.  The engine, contrary to popularly spread misinformation, is not based on [[Quake]] but appears to be an original, and has some interesting features but is also, for its time, somewhat limited regarding the level geometry that can be created.&lt;br /&gt;
&lt;br /&gt;
A level editor is included on the game CD, and some enemy and weapon stats can be modified using a plain text configuration, but certain other aspects of modifying the game (such as the 3D models) remain poorly understood.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = csm.bin&lt;br /&gt;
 | Format = [[BIN Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Main data archive. Structure and archive formats differ between DOS (CSM.BIN) and the 2022 Remaster (csm.bin)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm2.pal&lt;br /&gt;
 | Format = [[VGA Palette]] (6-bit version)&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Game palette&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.inf&lt;br /&gt;
 | Format = [[CHASM.INF]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Configures enemy and weapon stats&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.rgb&lt;br /&gt;
 | Format = 256x255 color index array&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Translucency tables&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.3o&lt;br /&gt;
 | Format = [[3O Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = 3D models (weapons, scenery)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ani&lt;br /&gt;
 | Format = [[ANI Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;DOS:&#039;&#039;&#039;&#039;&#039; Data to animate models.  &#039;&#039;&#039;&#039;&#039;2022 Remaster:&#039;&#039;&#039;&#039;&#039; ASCII text to determine keyframes for animation.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.car&lt;br /&gt;
 | Format = [[CAR Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Contain data for &amp;quot;living&amp;quot; entities (player, monsters)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.obj&lt;br /&gt;
 | Format = [[OBJ Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Sprites {{TODO|Possibly multiple frames per file}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.cel&lt;br /&gt;
 | Format = [http://justsolve.archiveteam.org/wiki/Animator_PIC/CEL Autodesk Animator PIC/CEL]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Textures and raster graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.wav&lt;br /&gt;
 | Format = [[WAV Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sounds&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = resource.**&lt;br /&gt;
 | Format = [[RESOURCE (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data (definitions)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = process.**&lt;br /&gt;
 | Format = [[PROCESS (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Level data (action scripts)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = floors.**&lt;br /&gt;
 | Format = [[FLOORS (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Floor graphics associated with level&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = map.**&lt;br /&gt;
 | Format = [[MAP (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = script.**&lt;br /&gt;
 | Format = [[SCRIPT (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data (cutscene scripts, not present in every level)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.raw&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pcm&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.sfx&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.r??&lt;br /&gt;
 | Format = &lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = {{TODO|Likely recorded gameplay with ?? corresponding to level number}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.key&lt;br /&gt;
 | Format = &lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = {{TODO|Appears to be related to keyboard layout}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = menu.txt&lt;br /&gt;
 | Format = Plain Text&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = {{TODO|Appears to configure aspects of the game menu (possibly useful for translation only?)}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.flac&lt;br /&gt;
 | Format = [[wikipedia:FLAC|FLAC (Free Lossless Audio Codec)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; music&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.gltf&lt;br /&gt;
 | Format = [[wikipedia:GlTF|glTF (Graphics Library Transmission Format)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; geometry, monster, character and item models&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.png&lt;br /&gt;
 | Format = [[wikipedia:PNG|PNG (Portable Network Graphics)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; Textures used for walls, geometry models, item models and character models&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ttf and *.otf&lt;br /&gt;
 | Format = [[wikipedia:TrueType|TrueType Font]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; In-game fonts (accessibility mode only)&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
==Source Ports and Reimplementations==&lt;br /&gt;
===DOS===&lt;br /&gt;
The original 1997 version of the game.&lt;br /&gt;
&lt;br /&gt;
===2022 Remaster===&lt;br /&gt;
An official remaster of the game was released in 2022 by General Arcade and SNEG for Windows (decent compatibility for Linux via Proton has been reported). This version of the game includes a new fully featured release of the game, the DOS version with DOSBox, a three level addon pack (including two additional monsters and a boss), and level editing software. &#039;Modding Manual.pdf&#039; is also included, which contains notes on how to modify parts of the game for this new version.&lt;br /&gt;
&lt;br /&gt;
The 2022 Remaster uses .gltf and .png files for easier modding, rather than the legacy file types from the DOS version. Having said this, the 2022 Remaster also has the ability to convert these legacy file types, making mods for the DOS version compatible with the rerelease.&lt;br /&gt;
&lt;br /&gt;
===PanzerChasm===&lt;br /&gt;
PanzerChasm was a project to reverse-engineer and re-implement the game&#039;s engine, being worked on by Artöm &amp;quot;Panzerschrek&amp;quot; Kunz. It can be found at:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Panzerschrek/Chasm-Reverse&lt;br /&gt;
&lt;br /&gt;
Due to some changes in the way PanzerChasm works, some map-packs and mods might have compatibility issues unless they were specifically designed for this source port.&lt;br /&gt;
&lt;br /&gt;
Panzerschrek has confirmed that PanzerChasm is no longer in active development and that elements of it were used, with permission, for the Remastered version of the game released in 2022. Panzerschrek is noted in the credits of the 2022 Remaster.&lt;br /&gt;
==Modding Tools==&lt;br /&gt;
===Chasm Modding Toolkit Package===&lt;br /&gt;
[https://www.moddb.com/games/chasm-the-rift/downloads/chasm-modding-toolkit-package Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and 2022 Remaster version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
===glcar3o===&lt;br /&gt;
[https://github.com/jopadan/glcar3o glcar3o] Chasm: is a The Rift 3D .[[CAR Format]]/.[[3O Format]] animation model OpenGL viewer written in C23&lt;br /&gt;
&lt;br /&gt;
===AwesomeChasm===&lt;br /&gt;
[https://www.github.com/jopadan/AwesomeChasm AwesomeChasm] is a Chasm: The Rift URL collection with 3D Format documentation.&lt;br /&gt;
&lt;br /&gt;
==DOS Specifics==&lt;br /&gt;
===Archive and addons===&lt;br /&gt;
Most of the files listed above are normally stored inside CSM.BIN.  However, an addon loaded with the &amp;quot;-addon:&amp;lt;addon_dir&amp;gt;&amp;quot; game parameter can read replacement files from an open directory structure, provided that they are placed in the correctly named subdirectory.&lt;br /&gt;
&lt;br /&gt;
===Levels, cutscenes===&lt;br /&gt;
Levels are not stored in a single file, but several files with an extension .01, .02 etc. corresponding to the level number.  The process.**, script.** and resource.** files are in plain text; process defines action scripts using a scripting language explained in the level editor documentation, script defines a cutscene for the level and resource defines level settings such as title, CD track to play for background music, 3O, CEL and WAV files used, etc.  The map.** and floors.** files contain binary data; floors contains graphics for the floors (and probably ceilings) and appears to use a mipmap system.&lt;br /&gt;
&lt;br /&gt;
Level 99 exists in CSM.BIN, but is not a playable level and cannot be warped to.  Instead, it is a special case use of the map format whose purpose is to provide the background scenes for the mission briefing cutscenes.  The &amp;quot;room&amp;quot; numbers in the script.** files correspond to the numbered player starts in level 99.&lt;br /&gt;
&lt;br /&gt;
===Translucency===&lt;br /&gt;
CHASM.RGB and CHASM60.RGB are almost identical in construction to the TINTTAB format used in [[Heretic]] and [[Hexen]] except that there is no 256th row for the final color (which in Chasm is a dummy/transparent color).  CHASM.RGB appears to be a 50-50 blend while CHASM60.RGB appears to have a stronger influence from one of the colors (perhaps 60-40, judging by the file name?)&lt;br /&gt;
&lt;br /&gt;
===Textures===&lt;br /&gt;
Wall textures are of a .CEL format which is an &#039;&#039;Autodesk Animator&#039;&#039; file type. They conform to the Chasm color palette (which can be obtained [https://web.archive.org/web/20150120005440/http://www.angelfire.com/games6/chasm/transformers_files.htm here]).&lt;br /&gt;
&lt;br /&gt;
Textures are 64px or 128px in length and are always 128px in height. A pink color is used for transparency.&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/AnimatorPro Autodesk Animator Pro] source code was released by the author and can be downloaded and compiled if desired.&lt;br /&gt;
&lt;br /&gt;
[https://www.nyam.pe.kr/dev/imagine/ Imagine], by Sejin Chun, is free software which allows application of color palettes, as well as conversion to and from the .CEL format. This makes it an ideal tool for modding for Chasm: The Rift.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
The .CAR format is believed to be an early iteration of the format used by the Carnivores games for Windows (however, Chasm&#039;s .CAR data might be more closely related to the Chasm .3O files).  There is speculation where some believe .CAR refers to &#039;Caracter&#039; (per folder name) or &#039;Chasm Archive&#039;.  Part of the data contained within are sounds for the entity that the .CAR defines. These sounds can be heard at the end of the file if imported as raw data into audio software such as Audacity.&lt;br /&gt;
&lt;br /&gt;
==2022 Remaster Specifics==&lt;br /&gt;
&lt;br /&gt;
===Archive and Addons===&lt;br /&gt;
Files are kept within [[BIN Format (Chasm)|csm.bin]] in the root directory of the game and within a specific file structure. The 2022 Remaster uses a .tar file renamed as .bin and can therefore be accessed easily via archiving software (such as 7Zip) or even [http://slade.mancubus.net SLADE]. Mods made for the 2022 Remaster should copy this file structure and file extension. Much like a [[WAD Format]] file (for Doom), not all folders and files are required to be present with a mod because anything not present is instead taken from csm.bin. A mod can be created by archiving the files into an uncompressed .tar archive and then manually renamed to .bin.&lt;br /&gt;
&lt;br /&gt;
Addons can be played using the launch parameter of &#039;&#039;&#039;--addon xxxx&#039;&#039;&#039; (where xxxx is the name of the addon&#039;s .bin file, without the bin extension. e.g: &#039;&#039;&#039;--addon mymod&#039;&#039;&#039; would launch mymod.bin). It is possible to append this further with &#039;&#039;&#039;--modding&#039;&#039;&#039; (e.g: --addon xxxx --modding).&lt;br /&gt;
&lt;br /&gt;
The --modding parameter unlocks additional functionality which is useful for testing:&lt;br /&gt;
* &amp;quot;noclip&amp;quot; command available&lt;br /&gt;
* &amp;quot;go&amp;quot; command allows access to map 99&lt;br /&gt;
* &amp;quot;chojin&amp;quot; command not only provides invulnerability, but also restores ammo&lt;br /&gt;
* Pressing &amp;quot;M&amp;quot; toggles Monster animation on/off&lt;br /&gt;
* Pressing &amp;quot;N&amp;quot; toggles on-screen debug information&lt;br /&gt;
* Additional options in the menu are accessible, including movement speed, draw distance etc&lt;br /&gt;
&lt;br /&gt;
===Music===&lt;br /&gt;
The 2022 Remaster uses .FLAC (Free Lossless Audio Codec) files for music audio. However, it is not limited to this format specifically. The game can also use:&lt;br /&gt;
* [[wikipedia:FLAC|.flac]]&lt;br /&gt;
* [[wikipedia:Vorbis|.ogg]]&lt;br /&gt;
* [[WAV Format|.wav]]&lt;br /&gt;
&lt;br /&gt;
Although the game can use .ogg and .wav audio files, they must be manually renamed with a .flac extension (even if the data within the file is not .flac formatted). These files must be placed inside your mod&#039;s .bin file within the &#039;Music&#039; folder. Additionally, they must be named as trackxx.flac (where xx represents a number, e.g track01.flac).&lt;br /&gt;
&lt;br /&gt;
A map&#039;s [[RESOURCE (Chasm)|RESOURCE.XX]] file tells the game which music track to play.&lt;br /&gt;
&lt;br /&gt;
===Textures===&lt;br /&gt;
Wall .CEL textures are converted and appended to .PNG at runtime. The texture keeps it&#039;s previous full file name plus the appended .PNG extension. For example, TEXTURE.CEL becomes TEXTURE.CEL.PNG.&lt;br /&gt;
It&#039;s therefore possible to make texture swaps or up-scales in the Remastered version of the game by renaming the texture file as such and including it in the &#039;texture&#039; folder in your mod&#039;s .bin file. The game will use the .PNG file included in your .bin file if found, otherwise will fall-back to the texture file in the base game archive.&lt;br /&gt;
&lt;br /&gt;
The same approach is used for Chasm&#039;s .3O files. In the DOS version, the texture is baked into the .3O file. However, this can be replaced in the 2022 Remaster by adding a PNG file renamed as MODEL.3O.PNG. into the &#039;model&#039; folder in your mod&#039;s .bin file.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
Like textures, models are converted at runtime. Models (including .3O and .CAR) are converted to .GLTF. Custom .GLTF files should be placed into the appropriate folder for use in mods (&#039;model&#039; folder for static models, &#039;monster&#039; folder for enemy actors).&lt;br /&gt;
.3O files are appended to MODEL.3O.GLTF and .CAR files are appended to MONSTER.CAR.GLTF.&lt;br /&gt;
&lt;br /&gt;
Whereas the DOS version uses .ANI files which appear to include some kind of animation, the 2022 Remaster includes .ANI files as plain text which work in tandem with the related .GLTF file. Static .GLTF files do not require a .ANI counterpart, but one can be used if desired.&lt;br /&gt;
&lt;br /&gt;
The .ANI file should have the same filename as the .GLTF it is referencing. (eg, SCARYMONSTER.GLTF and SCARYMONSTER.ANI).&lt;br /&gt;
&lt;br /&gt;
This plain text file determines the frames of animation used.&lt;br /&gt;
&lt;br /&gt;
The .ANI file uses three integers in the following order: Anim-Number, Start-Frame, No-Of-Frames&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
0 0 2&lt;br /&gt;
&lt;br /&gt;
1 2 11&lt;br /&gt;
&lt;br /&gt;
2 13 15&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above example, 3 animations are defined. Animation 0, Animation 1 and Animation 2.&lt;br /&gt;
&lt;br /&gt;
Animation 0 starts at Frame 0 and plays for 2 frames.&lt;br /&gt;
&lt;br /&gt;
Animation 2 starts at Frame 2 and plays for 11 frames.&lt;br /&gt;
&lt;br /&gt;
Animation 3 starts at Frame 13 and plays for 15 frames.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is important to note that certain models can utilise only certain animation numbers:&lt;br /&gt;
* Static 3D Objects: No .ANI file required (or Animation 0 with start and end frames of 0 only).&lt;br /&gt;
* Weapons: Animation 1 is Idle, Animation 2 is Firing, Animation 3 is Reloading.&lt;br /&gt;
* Dismembered Limbs/Sepparts: Animation 1 is rotation, Animation 2 is landing.&lt;br /&gt;
* Monsters: Animation 0 is moving, Animation 2 is Idle, Animation 3 is second Idle, Animation 4 is third Idle, Animation 5 is Firing, Animation 6 is Left-Hand Punch, Animation 7 is Right-Hand Punch, Animation 8 is Headbutt, Animation 9 is Pain, Animation 10 is second Pain, Animation 11 is Right-Hand Dismember, Animation 12 is Left-Hand Dismember, Animation 13 is Head Dismember, Animation 14 is Respawn, Animation 15 is Celebrate (after killing aggressor), Animation 16 is Death, Animation 17 is second Death.&lt;br /&gt;
&lt;br /&gt;
Additional notes on Monster animations:&lt;br /&gt;
* If animations 0, 2, 16 are missing then the monster will not work.&lt;br /&gt;
* If animation 5 is missing, then the monster cannot Fire projectiles.&lt;br /&gt;
* If animation 6, 7, 8 are missing then the monster cannot Melee attack.&lt;br /&gt;
* If animation 11, 12, 13 are missing then the monster cannot be dismembered.&lt;br /&gt;
&lt;br /&gt;
Collision low and high points are determined from the lowest and highest geometry points in the first keyframe. For example, if you had a tall monster that shrinks down in animation, the collision heights will remain as those from the first frame, so although the monster has shrunk, it&#039;s hitbox will remain the same size as its first frame. Likewise, if you had a monster that grows in size, its hitbox will remain small rather than growing larger.&lt;br /&gt;
&lt;br /&gt;
[[Category:3D]]&lt;br /&gt;
[[Category:First-Person Shooter]]&lt;br /&gt;
[[Category:Action Forms]]&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Chasm:_The_Rift&amp;diff=12398</id>
		<title>Chasm: The Rift</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Chasm:_The_Rift&amp;diff=12398"/>
		<updated>2025-07-17T17:38:09Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Modding Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Title = Chasm- The Rift.png &amp;lt;!-- Only because of the colon --&amp;gt;&lt;br /&gt;
 | Modded = Mod-Chasm- The Rift.png&lt;br /&gt;
 | Levels = Edit&lt;br /&gt;
 | Tiles = Edit&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = Edit&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Chasm: The Rift&#039;&#039;&#039; is an FPS game from the twilight of the DOS era, developed by Action Forms Ltd. and released in 1997.  The engine, contrary to popularly spread misinformation, is not based on [[Quake]] but appears to be an original, and has some interesting features but is also, for its time, somewhat limited regarding the level geometry that can be created.&lt;br /&gt;
&lt;br /&gt;
A level editor is included on the game CD, and some enemy and weapon stats can be modified using a plain text configuration, but certain other aspects of modifying the game (such as the 3D models) remain poorly understood.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = csm.bin&lt;br /&gt;
 | Format = [[BIN Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Main data archive. Structure and archive formats differ between DOS (CSM.BIN) and the 2022 Remaster (csm.bin)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm2.pal&lt;br /&gt;
 | Format = [[VGA Palette]] (6-bit version)&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Game palette&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.inf&lt;br /&gt;
 | Format = [[CHASM.INF]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Configures enemy and weapon stats&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.rgb&lt;br /&gt;
 | Format = 256x255 color index array&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Translucency tables&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.3o&lt;br /&gt;
 | Format = [[3O Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = 3D models (weapons, scenery)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ani&lt;br /&gt;
 | Format = [[ANI Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;DOS:&#039;&#039;&#039;&#039;&#039; Data to animate models.  &#039;&#039;&#039;&#039;&#039;2022 Remaster:&#039;&#039;&#039;&#039;&#039; ASCII text to determine keyframes for animation.&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.car&lt;br /&gt;
 | Format = [[CAR Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Contain data for &amp;quot;living&amp;quot; entities (player, monsters)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.obj&lt;br /&gt;
 | Format = [[OBJ Format (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Sprites {{TODO|Possibly multiple frames per file}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.cel&lt;br /&gt;
 | Format = [http://justsolve.archiveteam.org/wiki/Animator_PIC/CEL Autodesk Animator PIC/CEL]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Textures and raster graphics&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.wav&lt;br /&gt;
 | Format = [[WAV Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sounds&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = resource.**&lt;br /&gt;
 | Format = [[RESOURCE (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data (definitions)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = process.**&lt;br /&gt;
 | Format = [[PROCESS (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Level data (action scripts)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = floors.**&lt;br /&gt;
 | Format = [[FLOORS (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Floor graphics associated with level&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = map.**&lt;br /&gt;
 | Format = [[MAP (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = script.**&lt;br /&gt;
 | Format = [[SCRIPT (Chasm: The Rift)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data (cutscene scripts, not present in every level)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.raw&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pcm&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.sfx&lt;br /&gt;
 | Format = Raw PCM audio, unsigned 8-bit PCM, mono, little-endian, 11025 Hz&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.r??&lt;br /&gt;
 | Format = &lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = {{TODO|Likely recorded gameplay with ?? corresponding to level number}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = chasm.key&lt;br /&gt;
 | Format = &lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = {{TODO|Appears to be related to keyboard layout}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = menu.txt&lt;br /&gt;
 | Format = Plain Text&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = {{TODO|Appears to configure aspects of the game menu (possibly useful for translation only?)}}&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.flac&lt;br /&gt;
 | Format = [[wikipedia:FLAC|FLAC (Free Lossless Audio Codec)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; music&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.gltf&lt;br /&gt;
 | Format = [[wikipedia:GlTF|glTF (Graphics Library Transmission Format)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; geometry, monster, character and item models&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.png&lt;br /&gt;
 | Format = [[wikipedia:PNG|PNG (Portable Network Graphics)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; Textures used for walls, geometry models, item models and character models&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ttf and *.otf&lt;br /&gt;
 | Format = [[wikipedia:TrueType|TrueType Font]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;&#039;&#039;&#039;(2022 Remaster Only)&#039;&#039;&#039;&#039;&#039; In-game fonts (accessibility mode only)&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
==Source Ports and Reimplementations==&lt;br /&gt;
===DOS===&lt;br /&gt;
The original 1997 version of the game.&lt;br /&gt;
&lt;br /&gt;
===2022 Remaster===&lt;br /&gt;
An official remaster of the game was released in 2022 by General Arcade and SNEG for Windows (decent compatibility for Linux via Proton has been reported). This version of the game includes a new fully featured release of the game, the DOS version with DOSBox, a three level addon pack (including two additional monsters and a boss), and level editing software. &#039;Modding Manual.pdf&#039; is also included, which contains notes on how to modify parts of the game for this new version.&lt;br /&gt;
&lt;br /&gt;
The 2022 Remaster uses .gltf and .png files for easier modding, rather than the legacy file types from the DOS version. Having said this, the 2022 Remaster also has the ability to convert these legacy file types, making mods for the DOS version compatible with the rerelease.&lt;br /&gt;
&lt;br /&gt;
===PanzerChasm===&lt;br /&gt;
PanzerChasm was a project to reverse-engineer and re-implement the game&#039;s engine, being worked on by Artöm &amp;quot;Panzerschrek&amp;quot; Kunz. It can be found at:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Panzerschrek/Chasm-Reverse&lt;br /&gt;
&lt;br /&gt;
Due to some changes in the way PanzerChasm works, some map-packs and mods might have compatibility issues unless they were specifically designed for this source port.&lt;br /&gt;
&lt;br /&gt;
Panzerschrek has confirmed that PanzerChasm is no longer in active development and that elements of it were used, with permission, for the Remastered version of the game released in 2022. Panzerschrek is noted in the credits of the 2022 Remaster.&lt;br /&gt;
==Modding Tools==&lt;br /&gt;
===Chasm Modding Toolkit Package===&lt;br /&gt;
[https://www.moddb.com/games/chasm-the-rift/downloads/chasm-modding-toolkit-package Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and 2022 Remaster version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
===glcar3o===&lt;br /&gt;
[https://github.com/jopadan/glcar3o] Chasm: is a The Rift 3D .[[CAR Format]]/.[[3O Format]] animation model OpenGL viewer written in C23&lt;br /&gt;
===AwesomeChasm===&lt;br /&gt;
[https://www.github.com/jopadan/AwesomeChasm AwesomeChasm] is a Chasm: The Rift URL collection with 3D Format documentation.&lt;br /&gt;
&lt;br /&gt;
==DOS Specifics==&lt;br /&gt;
===Archive and addons===&lt;br /&gt;
Most of the files listed above are normally stored inside CSM.BIN.  However, an addon loaded with the &amp;quot;-addon:&amp;lt;addon_dir&amp;gt;&amp;quot; game parameter can read replacement files from an open directory structure, provided that they are placed in the correctly named subdirectory.&lt;br /&gt;
&lt;br /&gt;
===Levels, cutscenes===&lt;br /&gt;
Levels are not stored in a single file, but several files with an extension .01, .02 etc. corresponding to the level number.  The process.**, script.** and resource.** files are in plain text; process defines action scripts using a scripting language explained in the level editor documentation, script defines a cutscene for the level and resource defines level settings such as title, CD track to play for background music, 3O, CEL and WAV files used, etc.  The map.** and floors.** files contain binary data; floors contains graphics for the floors (and probably ceilings) and appears to use a mipmap system.&lt;br /&gt;
&lt;br /&gt;
Level 99 exists in CSM.BIN, but is not a playable level and cannot be warped to.  Instead, it is a special case use of the map format whose purpose is to provide the background scenes for the mission briefing cutscenes.  The &amp;quot;room&amp;quot; numbers in the script.** files correspond to the numbered player starts in level 99.&lt;br /&gt;
&lt;br /&gt;
===Translucency===&lt;br /&gt;
CHASM.RGB and CHASM60.RGB are almost identical in construction to the TINTTAB format used in [[Heretic]] and [[Hexen]] except that there is no 256th row for the final color (which in Chasm is a dummy/transparent color).  CHASM.RGB appears to be a 50-50 blend while CHASM60.RGB appears to have a stronger influence from one of the colors (perhaps 60-40, judging by the file name?)&lt;br /&gt;
&lt;br /&gt;
===Textures===&lt;br /&gt;
Wall textures are of a .CEL format which is an &#039;&#039;Autodesk Animator&#039;&#039; file type. They conform to the Chasm color palette (which can be obtained [https://web.archive.org/web/20150120005440/http://www.angelfire.com/games6/chasm/transformers_files.htm here]).&lt;br /&gt;
&lt;br /&gt;
Textures are 64px or 128px in length and are always 128px in height. A pink color is used for transparency.&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/AnimatorPro Autodesk Animator Pro] source code was released by the author and can be downloaded and compiled if desired.&lt;br /&gt;
&lt;br /&gt;
[https://www.nyam.pe.kr/dev/imagine/ Imagine], by Sejin Chun, is free software which allows application of color palettes, as well as conversion to and from the .CEL format. This makes it an ideal tool for modding for Chasm: The Rift.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
The .CAR format is believed to be an early iteration of the format used by the Carnivores games for Windows (however, Chasm&#039;s .CAR data might be more closely related to the Chasm .3O files).  There is speculation where some believe .CAR refers to &#039;Caracter&#039; (per folder name) or &#039;Chasm Archive&#039;.  Part of the data contained within are sounds for the entity that the .CAR defines. These sounds can be heard at the end of the file if imported as raw data into audio software such as Audacity.&lt;br /&gt;
&lt;br /&gt;
==2022 Remaster Specifics==&lt;br /&gt;
&lt;br /&gt;
===Archive and Addons===&lt;br /&gt;
Files are kept within [[BIN Format (Chasm)|csm.bin]] in the root directory of the game and within a specific file structure. The 2022 Remaster uses a .tar file renamed as .bin and can therefore be accessed easily via archiving software (such as 7Zip) or even [http://slade.mancubus.net SLADE]. Mods made for the 2022 Remaster should copy this file structure and file extension. Much like a [[WAD Format]] file (for Doom), not all folders and files are required to be present with a mod because anything not present is instead taken from csm.bin. A mod can be created by archiving the files into an uncompressed .tar archive and then manually renamed to .bin.&lt;br /&gt;
&lt;br /&gt;
Addons can be played using the launch parameter of &#039;&#039;&#039;--addon xxxx&#039;&#039;&#039; (where xxxx is the name of the addon&#039;s .bin file, without the bin extension. e.g: &#039;&#039;&#039;--addon mymod&#039;&#039;&#039; would launch mymod.bin). It is possible to append this further with &#039;&#039;&#039;--modding&#039;&#039;&#039; (e.g: --addon xxxx --modding).&lt;br /&gt;
&lt;br /&gt;
The --modding parameter unlocks additional functionality which is useful for testing:&lt;br /&gt;
* &amp;quot;noclip&amp;quot; command available&lt;br /&gt;
* &amp;quot;go&amp;quot; command allows access to map 99&lt;br /&gt;
* &amp;quot;chojin&amp;quot; command not only provides invulnerability, but also restores ammo&lt;br /&gt;
* Pressing &amp;quot;M&amp;quot; toggles Monster animation on/off&lt;br /&gt;
* Pressing &amp;quot;N&amp;quot; toggles on-screen debug information&lt;br /&gt;
* Additional options in the menu are accessible, including movement speed, draw distance etc&lt;br /&gt;
&lt;br /&gt;
===Music===&lt;br /&gt;
The 2022 Remaster uses .FLAC (Free Lossless Audio Codec) files for music audio. However, it is not limited to this format specifically. The game can also use:&lt;br /&gt;
* [[wikipedia:FLAC|.flac]]&lt;br /&gt;
* [[wikipedia:Vorbis|.ogg]]&lt;br /&gt;
* [[WAV Format|.wav]]&lt;br /&gt;
&lt;br /&gt;
Although the game can use .ogg and .wav audio files, they must be manually renamed with a .flac extension (even if the data within the file is not .flac formatted). These files must be placed inside your mod&#039;s .bin file within the &#039;Music&#039; folder. Additionally, they must be named as trackxx.flac (where xx represents a number, e.g track01.flac).&lt;br /&gt;
&lt;br /&gt;
A map&#039;s [[RESOURCE (Chasm)|RESOURCE.XX]] file tells the game which music track to play.&lt;br /&gt;
&lt;br /&gt;
===Textures===&lt;br /&gt;
Wall .CEL textures are converted and appended to .PNG at runtime. The texture keeps it&#039;s previous full file name plus the appended .PNG extension. For example, TEXTURE.CEL becomes TEXTURE.CEL.PNG.&lt;br /&gt;
It&#039;s therefore possible to make texture swaps or up-scales in the Remastered version of the game by renaming the texture file as such and including it in the &#039;texture&#039; folder in your mod&#039;s .bin file. The game will use the .PNG file included in your .bin file if found, otherwise will fall-back to the texture file in the base game archive.&lt;br /&gt;
&lt;br /&gt;
The same approach is used for Chasm&#039;s .3O files. In the DOS version, the texture is baked into the .3O file. However, this can be replaced in the 2022 Remaster by adding a PNG file renamed as MODEL.3O.PNG. into the &#039;model&#039; folder in your mod&#039;s .bin file.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
Like textures, models are converted at runtime. Models (including .3O and .CAR) are converted to .GLTF. Custom .GLTF files should be placed into the appropriate folder for use in mods (&#039;model&#039; folder for static models, &#039;monster&#039; folder for enemy actors).&lt;br /&gt;
.3O files are appended to MODEL.3O.GLTF and .CAR files are appended to MONSTER.CAR.GLTF.&lt;br /&gt;
&lt;br /&gt;
Whereas the DOS version uses .ANI files which appear to include some kind of animation, the 2022 Remaster includes .ANI files as plain text which work in tandem with the related .GLTF file. Static .GLTF files do not require a .ANI counterpart, but one can be used if desired.&lt;br /&gt;
&lt;br /&gt;
The .ANI file should have the same filename as the .GLTF it is referencing. (eg, SCARYMONSTER.GLTF and SCARYMONSTER.ANI).&lt;br /&gt;
&lt;br /&gt;
This plain text file determines the frames of animation used.&lt;br /&gt;
&lt;br /&gt;
The .ANI file uses three integers in the following order: Anim-Number, Start-Frame, No-Of-Frames&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
0 0 2&lt;br /&gt;
&lt;br /&gt;
1 2 11&lt;br /&gt;
&lt;br /&gt;
2 13 15&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above example, 3 animations are defined. Animation 0, Animation 1 and Animation 2.&lt;br /&gt;
&lt;br /&gt;
Animation 0 starts at Frame 0 and plays for 2 frames.&lt;br /&gt;
&lt;br /&gt;
Animation 2 starts at Frame 2 and plays for 11 frames.&lt;br /&gt;
&lt;br /&gt;
Animation 3 starts at Frame 13 and plays for 15 frames.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is important to note that certain models can utilise only certain animation numbers:&lt;br /&gt;
* Static 3D Objects: No .ANI file required (or Animation 0 with start and end frames of 0 only).&lt;br /&gt;
* Weapons: Animation 1 is Idle, Animation 2 is Firing, Animation 3 is Reloading.&lt;br /&gt;
* Dismembered Limbs/Sepparts: Animation 1 is rotation, Animation 2 is landing.&lt;br /&gt;
* Monsters: Animation 0 is moving, Animation 2 is Idle, Animation 3 is second Idle, Animation 4 is third Idle, Animation 5 is Firing, Animation 6 is Left-Hand Punch, Animation 7 is Right-Hand Punch, Animation 8 is Headbutt, Animation 9 is Pain, Animation 10 is second Pain, Animation 11 is Right-Hand Dismember, Animation 12 is Left-Hand Dismember, Animation 13 is Head Dismember, Animation 14 is Respawn, Animation 15 is Celebrate (after killing aggressor), Animation 16 is Death, Animation 17 is second Death.&lt;br /&gt;
&lt;br /&gt;
Additional notes on Monster animations:&lt;br /&gt;
* If animations 0, 2, 16 are missing then the monster will not work.&lt;br /&gt;
* If animation 5 is missing, then the monster cannot Fire projectiles.&lt;br /&gt;
* If animation 6, 7, 8 are missing then the monster cannot Melee attack.&lt;br /&gt;
* If animation 11, 12, 13 are missing then the monster cannot be dismembered.&lt;br /&gt;
&lt;br /&gt;
Collision low and high points are determined from the lowest and highest geometry points in the first keyframe. For example, if you had a tall monster that shrinks down in animation, the collision heights will remain as those from the first frame, so although the monster has shrunk, it&#039;s hitbox will remain the same size as its first frame. Likewise, if you had a monster that grows in size, its hitbox will remain small rather than growing larger.&lt;br /&gt;
&lt;br /&gt;
[[Category:3D]]&lt;br /&gt;
[[Category:First-Person Shooter]]&lt;br /&gt;
[[Category:Action Forms]]&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Chasm:_The_Rift)&amp;diff=12397</id>
		<title>CAR Format (Chasm: The Rift)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Chasm:_The_Rift)&amp;diff=12397"/>
		<updated>2025-07-17T17:34:29Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Chasm: The Rift}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;CAR Format&#039;&#039;&#039; is used by [[Chasm: The Rift]] to store most of the game&#039;s monsters and the player.&lt;br /&gt;
&lt;br /&gt;
The data in the &#039;&#039;&#039;CAR&#039;&#039;&#039; is a 0x66 bytes header followed by [[3O Format]] file content&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || [[UINT16LE]][20] || Animations array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT16LE]][6][2] || Submodel animations array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040 || [[UINT16LE]][3] || Fall Sound id array defaults to 73&lt;br /&gt;
|-&lt;br /&gt;
| 0x0046 || [[UINT16LE]][8] || Sound length array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0056 || [[UINT16LE]][8] || Sound volume array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{TODO|GSND Sound id Monster/id Fall sounds relations}}&lt;br /&gt;
&lt;br /&gt;
[https://discord.com/channels/768103789411434586/1374842906002718803 Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and REMAKE version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
[https://github.com/jopadan/glcar3o glcar3o] is a Chasm: The Rift 3D .CAR/.3O animation model OpenGL viewer written in C23.&lt;br /&gt;
[https://github.com/jopadan/AwesomeChasm?tab=readme-ov-file#models AwesomeChasm#models] Example C++ code including sound offset calculation&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/* QUAD/TRIANGLE polygon face */&lt;br /&gt;
struct face&lt;br /&gt;
{&lt;br /&gt;
        vec::u16 &amp;lt;               4&amp;gt;              indices;&lt;br /&gt;
        arr::type&amp;lt;vec::u16&amp;lt;2&amp;gt;,   4&amp;gt;                   uv;&lt;br /&gt;
        sca::i16                                    next;&lt;br /&gt;
        sca::i16                                 distant;&lt;br /&gt;
        sca::u8                                      num;&lt;br /&gt;
        sca::u8                                    flags;&lt;br /&gt;
        sca::u16                              sprite_off;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* .CAR Chasm: The Rift Caracter 3D model file format header */ &lt;br /&gt;
struct CARHeader&lt;br /&gt;
{&lt;br /&gt;
    struct AniMap {&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,  20&amp;gt;                model; /* anim data sizes */&lt;br /&gt;
        arr::type&amp;lt;vec::u16&amp;lt;2&amp;gt;,   6&amp;gt;            sub_model; /* sub model anim data sizes */&lt;br /&gt;
    } anims;&lt;br /&gt;
    struct GSND {&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,   3&amp;gt;                   id; /* FallSound id */&lt;br /&gt;
    } gsnd;&lt;br /&gt;
    struct SFX {&lt;br /&gt;
        vec::u16&amp;lt;                8&amp;gt;                  len;&lt;br /&gt;
        vec::u16&amp;lt;                8&amp;gt;                  vol;&lt;br /&gt;
    } sfx;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .3O Chasm: The Rift 3D model file format */&lt;br /&gt;
struct c3o&lt;br /&gt;
{&lt;br /&gt;
        arr::type&amp;lt;face       , 400&amp;gt;                faces; // 0x0000&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;                overt; // 0x3200&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;                rvert;&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;               shvert;&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;2&amp;gt;, 256&amp;gt;               scvert;&lt;br /&gt;
&lt;br /&gt;
        sca::u16                            vertex_count; // 0x4800&lt;br /&gt;
        sca::u16                              face_count; // 0x4802&lt;br /&gt;
        sca::u16                                      th; // 0x4804&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .CAR Chasm: The Rift Carrara Caracter 3D model file format */ &lt;br /&gt;
struct car : CARHeader, c3o&lt;br /&gt;
{&lt;br /&gt;
        size_t sounds_offset()&lt;br /&gt;
        {&lt;br /&gt;
                size_t dst = th + sizeof(struct car_header) + 0x4806u;&lt;br /&gt;
                for(size_t i = 0; i &amp;lt; 20; i++) dst += anims[i];&lt;br /&gt;
                for(size_t i = 0; i &amp;lt; 3u; i++)&lt;br /&gt;
                {&lt;br /&gt;
                        const size_t sum = sub_anims[i].sum();&lt;br /&gt;
                        dst += sum == 0 ? 0 : sum + 0x4806u;&lt;br /&gt;
                }&lt;br /&gt;
                return dst;&lt;br /&gt;
        }&lt;br /&gt;
        bool verify_length(size_t len)&lt;br /&gt;
        {&lt;br /&gt;
            size_t acc = sounds_offset();&lt;br /&gt;
            for(size_t i = 0; i &amp;lt; sfx_len.size(); i++)&lt;br /&gt;
                acc += sfx_len[i];&lt;br /&gt;
            return acc == len;&lt;br /&gt;
        }&lt;br /&gt;
        bool set_sound(const size_t monster_number)&lt;br /&gt;
        {&lt;br /&gt;
            const size_t monster_index = monster_number - 100;&lt;br /&gt;
            if(monster_index &amp;gt;= 23)&lt;br /&gt;
                return false;&lt;br /&gt;
&lt;br /&gt;
            for (size_t i = 0; i &amp;lt; gsnd.size(); ++i)&lt;br /&gt;
                SepPartInfo[monster_index + i].FallSound = gsnd[i];&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Death_Rally&amp;diff=12385</id>
		<title>Death Rally</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Death_Rally&amp;diff=12385"/>
		<updated>2025-06-27T18:58:59Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NoModdingInfo}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://www.chip.de/downloads/Death-Rally-Vollversion_38550689.html Death Rally] is a top-down car racing game with weapons.  While it apparently has no connection with [[wp:Renaissance (demogroup)|Renaissance]], it nonetheless uses the PMODE/W DOS extender written by Daredevil and Tran - possibly a later version of the protected mode extender used for [[Zone 66]].&lt;br /&gt;
== Ports ==&lt;br /&gt;
&lt;br /&gt;
- [https://github.com/urxp/dRally dRally]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Camoto]]&lt;br /&gt;
| Platform = Linux/Windows&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dr.bin&lt;br /&gt;
 | Format = [[B800 Text]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Text-mode exit screen&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = tr*-*.*&lt;br /&gt;
 | Format = [[Death Rally Level Format]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Level data&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.bpa&lt;br /&gt;
 | Format = [[Death Rally BPA Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Archive file storing most of the game data&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.bpk&lt;br /&gt;
 | Format = [[Death Rally BPK Format]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Compressed data, usually graphics, usually headerless&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.cmf&lt;br /&gt;
 | Format = [[Death Rally CMF Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Music and sound effect format, not [[CMF Format]]&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.haf&lt;br /&gt;
 | Format = [[Death Rally HAF Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Video used for intro and ending cutscenes&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pal&lt;br /&gt;
 | Format = [[VGA Palette]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 768-byte standard VGA palette (0..63)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.tab&lt;br /&gt;
 | Format = ?&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = 256-byte lookup tables likely for colour effects&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Apogee]]&lt;br /&gt;
[[Category:Driving]]&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Chasm:_The_Rift)&amp;diff=12383</id>
		<title>CAR Format (Chasm: The Rift)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Chasm:_The_Rift)&amp;diff=12383"/>
		<updated>2025-06-22T21:39:11Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Chasm: The Rift}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;CAR Format&#039;&#039;&#039; is used by [[Chasm: The Rift]] to store most of the game&#039;s monsters and the player.&lt;br /&gt;
&lt;br /&gt;
The data in the &#039;&#039;&#039;CAR&#039;&#039;&#039; is a 0x66 bytes header followed by [[3O Format]] file content&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || [[UINT16LE]][20] || Animations array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT16LE]][6][2] || Submodel animations array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040 || [[UINT16LE]][3] || Fall Sound id array defaults to 73&lt;br /&gt;
|-&lt;br /&gt;
| 0x0046 || [[UINT16LE]][8] || Sound length array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0056 || [[UINT16LE]][8] || Sound volume array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{TODO|GSND Sound id Monster/id Fall sounds relations}}&lt;br /&gt;
&lt;br /&gt;
[https://discord.com/channels/768103789411434586/1374842906002718803 Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and REMAKE version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jopadan/AwesomeChasm?tab=readme-ov-file#models AwesomeChasm#models] Example C++ code including sound offset calculation&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/* QUAD/TRIANGLE polygon face */&lt;br /&gt;
struct face&lt;br /&gt;
{&lt;br /&gt;
        vec::u16 &amp;lt;               4&amp;gt;              indices;&lt;br /&gt;
        arr::type&amp;lt;vec::u16&amp;lt;2&amp;gt;,   4&amp;gt;                   uv;&lt;br /&gt;
        sca::i16                                    next;&lt;br /&gt;
        sca::i16                                 distant;&lt;br /&gt;
        sca::u8                                      num;&lt;br /&gt;
        sca::u8                                    flags;&lt;br /&gt;
        sca::u16                              sprite_off;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .CAR Chasm: The Rift Caracter 3D model file format header */ &lt;br /&gt;
struct CARHeader&lt;br /&gt;
{&lt;br /&gt;
    struct AniMap {&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,  20&amp;gt;                model; /* anim data sizes */&lt;br /&gt;
        arr::type&amp;lt;vec::u16&amp;lt;2&amp;gt;,   6&amp;gt;            sub_model; /* sub model anim data sizes */&lt;br /&gt;
    } anims;&lt;br /&gt;
    struct GSND {&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,   3&amp;gt;                   id; /* FallSound id */&lt;br /&gt;
    } gsnd;&lt;br /&gt;
    struct SFX {&lt;br /&gt;
        vec::u16&amp;lt;                8&amp;gt;                  len;&lt;br /&gt;
        vec::u16&amp;lt;                8&amp;gt;                  vol;&lt;br /&gt;
    } sfx;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .3O Chasm: The Rift 3D model file format */&lt;br /&gt;
struct c3o&lt;br /&gt;
{&lt;br /&gt;
        arr::type&amp;lt;face       , 400&amp;gt;                faces; // 0x0000&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;                overt; // 0x3200&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;                rvert;&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;               shvert;&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;2&amp;gt;, 256&amp;gt;               scvert;&lt;br /&gt;
&lt;br /&gt;
        sca::u16                            vertex_count; // 0x4800&lt;br /&gt;
        sca::u16                              face_count; // 0x4802&lt;br /&gt;
        sca::u16                                      th; // 0x4804&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .CAR Chasm: The Rift Carrara Caracter 3D model file format */ &lt;br /&gt;
struct car : CARHeader, c3o&lt;br /&gt;
{&lt;br /&gt;
        size_t sounds_offset()&lt;br /&gt;
        {&lt;br /&gt;
                size_t dst = th + sizeof(struct car_header) + 0x4806u;&lt;br /&gt;
                for(size_t i = 0; i &amp;lt; 20; i++) dst += anims[i];&lt;br /&gt;
                for(size_t i = 0; i &amp;lt; 3u; i++)&lt;br /&gt;
                {&lt;br /&gt;
                        const size_t sum = sub_anims[i].sum();&lt;br /&gt;
                        dst += sum == 0 ? 0 : sum + 0x4806u;&lt;br /&gt;
                }&lt;br /&gt;
                return dst;&lt;br /&gt;
        }&lt;br /&gt;
        bool verify_length(size_t len)&lt;br /&gt;
        {&lt;br /&gt;
            size_t acc = sounds_offset();&lt;br /&gt;
            for(size_t i = 0; i &amp;lt; sfx_len.size(); i++)&lt;br /&gt;
                acc += sfx_len[i];&lt;br /&gt;
            return acc == len;&lt;br /&gt;
        }&lt;br /&gt;
        bool set_sound(const size_t monster_number)&lt;br /&gt;
        {&lt;br /&gt;
            const size_t monster_index = monster_number - 100;&lt;br /&gt;
            if(monster_index &amp;gt;= 23)&lt;br /&gt;
                return false;&lt;br /&gt;
&lt;br /&gt;
            for (size_t i = 0; i &amp;lt; gsnd.size(); ++i)&lt;br /&gt;
                SepPartInfo[monster_index + i].FallSound = gsnd[i];&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Chasm:_The_Rift)&amp;diff=12382</id>
		<title>CAR Format (Chasm: The Rift)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Chasm:_The_Rift)&amp;diff=12382"/>
		<updated>2025-06-22T21:38:04Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Chasm: The Rift}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;CAR Format&#039;&#039;&#039; is used by [[Chasm: The Rift]] to store most of the game&#039;s monsters and the player.&lt;br /&gt;
&lt;br /&gt;
The data in the &#039;&#039;&#039;CAR&#039;&#039;&#039; is a 0x66 bytes header followed by [[3O Format]] file content&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || [[UINT16LE]][20] || Animations array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT16LE]][6][2] || Submodel animations array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040 || [[UINT16LE]][3] || Fall Sound id array defaults to 73&lt;br /&gt;
|-&lt;br /&gt;
| 0x0046 || [[UINT16LE]][8] || Sound length array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0056 || [[UINT16LE]][8] || Sound volume array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{TODO|GSND Sound id Monster/id Fall sounds relations}}&lt;br /&gt;
&lt;br /&gt;
[https://discord.com/channels/768103789411434586/1374842906002718803 Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and REMAKE version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jopadan/AwesomeChasm?tab=readme-ov-file#models AwesomeChasm#models] Example C++ code including sound offset calculation&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/* QUAD/TRIANGLE polygon face */&lt;br /&gt;
struct face&lt;br /&gt;
{&lt;br /&gt;
        vec::u16 &amp;lt;               4&amp;gt;              indices;&lt;br /&gt;
        arr::type&amp;lt;vec::u16&amp;lt;2&amp;gt;,   4&amp;gt;                   uv;&lt;br /&gt;
        sca::i16                                    next;&lt;br /&gt;
        sca::i16                                 distant;&lt;br /&gt;
        sca::u8                                      num;&lt;br /&gt;
        sca::u8                                    flags;&lt;br /&gt;
        sca::u16                              sprite_off;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .CAR Chasm: The Rift Caracter 3D model file format header */ &lt;br /&gt;
struct CARHeader&lt;br /&gt;
{&lt;br /&gt;
    struct AniMap {&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,  20&amp;gt;                model; /* anim data sizes */&lt;br /&gt;
        arr::type&amp;lt;vec::u16&amp;lt;2&amp;gt;,   6&amp;gt;            sub_model; /* sub model anim data sizes */&lt;br /&gt;
    } anims;&lt;br /&gt;
    struct GSND {&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,   3&amp;gt;                   id; /* FallSound id */&lt;br /&gt;
    } gsnd;&lt;br /&gt;
    struct SFX {&lt;br /&gt;
        vec::u16&amp;lt;                8&amp;gt;                  len;&lt;br /&gt;
        vec::u16&amp;lt;                8&amp;gt;                  vol;&lt;br /&gt;
    } sfx;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .3O Chasm: The Rift 3D model file format */&lt;br /&gt;
struct c3o&lt;br /&gt;
{&lt;br /&gt;
        arr::type&amp;lt;face       , 400&amp;gt;                faces; // 0x0000&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;                overt; // 0x3200&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;                rvert;&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;               shvert;&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;2&amp;gt;, 256&amp;gt;               scvert;&lt;br /&gt;
&lt;br /&gt;
        sca::u16                            vertex_count; // 0x4800&lt;br /&gt;
        sca::u16                              face_count; // 0x4802&lt;br /&gt;
        sca::u16                                      th; // 0x4804&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .CAR Chasm: The Rift Carrara Caracter 3D model file format */ &lt;br /&gt;
struct car : car_header, c3o&lt;br /&gt;
{&lt;br /&gt;
        size_t sounds_offset()&lt;br /&gt;
        {&lt;br /&gt;
                size_t dst = th + sizeof(struct car_header) + 0x4806u;&lt;br /&gt;
                for(size_t i = 0; i &amp;lt; 20; i++) dst += anims[i];&lt;br /&gt;
                for(size_t i = 0; i &amp;lt; 3u; i++)&lt;br /&gt;
                {&lt;br /&gt;
                        const size_t sum = sub_anims[i].sum();&lt;br /&gt;
                        dst += sum == 0 ? 0 : sum + 0x4806u;&lt;br /&gt;
                }&lt;br /&gt;
                return dst;&lt;br /&gt;
        }&lt;br /&gt;
        bool verify_length(size_t len)&lt;br /&gt;
        {&lt;br /&gt;
            size_t acc = sounds_offset();&lt;br /&gt;
            for(size_t i = 0; i &amp;lt; sfx_len.size(); i++)&lt;br /&gt;
                acc += sfx_len[i];&lt;br /&gt;
            return acc == len;&lt;br /&gt;
        }&lt;br /&gt;
        bool set_sound(const size_t monster_number)&lt;br /&gt;
        {&lt;br /&gt;
            const size_t monster_index = monster_number - 100;&lt;br /&gt;
            if(monster_index &amp;gt;= 23)&lt;br /&gt;
                return false;&lt;br /&gt;
&lt;br /&gt;
            for (size_t i = 0; i &amp;lt; gsnd.size(); ++i)&lt;br /&gt;
                SepPartInfo[monster_index + i].FallSound = gsnd[i];&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Chasm:_The_Rift)&amp;diff=12381</id>
		<title>CAR Format (Chasm: The Rift)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Chasm:_The_Rift)&amp;diff=12381"/>
		<updated>2025-06-22T09:40:35Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Chasm: The Rift}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;CAR Format&#039;&#039;&#039; is used by [[Chasm: The Rift]] to store most of the game&#039;s monsters and the player.&lt;br /&gt;
&lt;br /&gt;
The data in the &#039;&#039;&#039;CAR&#039;&#039;&#039; is a 0x66 bytes header followed by [[3O Format]] file content&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || [[UINT16LE]][20] || Animations array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT16LE]][6][2] || Submodel animations array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040 || [[UINT16LE]][3] || Fall Sound id array defaults to 73&lt;br /&gt;
|-&lt;br /&gt;
| 0x0046 || [[UINT16LE]][8] || Sound length array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0056 || [[UINT16LE]][8] || Sound volume array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{TODO|GSND Sound id Monster/id Fall sounds relations}}&lt;br /&gt;
&lt;br /&gt;
[https://discord.com/channels/768103789411434586/1374842906002718803 Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and REMAKE version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jopadan/AwesomeChasm?tab=readme-ov-file#models AwesomeChasm#models] Example C++ code including sound offset calculation&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/* QUAD/TRIANGLE polygon face */&lt;br /&gt;
struct face&lt;br /&gt;
{&lt;br /&gt;
        vec::u16 &amp;lt;               4&amp;gt;              indices;&lt;br /&gt;
        arr::type&amp;lt;vec::u16&amp;lt;2&amp;gt;,   4&amp;gt;                   uv;&lt;br /&gt;
        sca::i16                                    next;&lt;br /&gt;
        sca::i16                                 distant;&lt;br /&gt;
        sca::u8                                      num;&lt;br /&gt;
        sca::u8                                    flags;&lt;br /&gt;
        sca::u16                              sprite_off;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .CAR format header */ &lt;br /&gt;
struct car_header&lt;br /&gt;
{&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,  20&amp;gt;                anims;&lt;br /&gt;
        arr::type&amp;lt;vec::u16&amp;lt;2&amp;gt;,   6&amp;gt;            sub_anims;&lt;br /&gt;
        /* SepPartInfo[monster_index + i].FallSound gsnd id defaults to 73 for gibs */&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,   3&amp;gt;                 gsnd;&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,   8&amp;gt;              sfx_len;&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,   8&amp;gt;              sfx_vol;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .3O Chasm: The Rift 3D model file format */&lt;br /&gt;
struct c3o&lt;br /&gt;
{&lt;br /&gt;
        arr::type&amp;lt;face       , 400&amp;gt;                faces; // 0x0000&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;                overt; // 0x3200&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;                rvert;&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;               shvert;&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;2&amp;gt;, 256&amp;gt;               scvert;&lt;br /&gt;
&lt;br /&gt;
        sca::u16                            vertex_count; // 0x4800&lt;br /&gt;
        sca::u16                              face_count; // 0x4802&lt;br /&gt;
        sca::u16                                      th; // 0x4804&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .CAR Chasm: The Rift Carrara Caracter 3D model file format */ &lt;br /&gt;
struct car : car_header, c3o&lt;br /&gt;
{&lt;br /&gt;
        size_t sounds_offset()&lt;br /&gt;
        {&lt;br /&gt;
                size_t dst = th + sizeof(struct car_header) + 0x4806u;&lt;br /&gt;
                for(size_t i = 0; i &amp;lt; 20; i++) dst += anims[i];&lt;br /&gt;
                for(size_t i = 0; i &amp;lt; 3u; i++)&lt;br /&gt;
                {&lt;br /&gt;
                        const size_t sum = sub_anims[i].sum();&lt;br /&gt;
                        dst += sum == 0 ? 0 : sum + 0x4806u;&lt;br /&gt;
                }&lt;br /&gt;
                return dst;&lt;br /&gt;
        }&lt;br /&gt;
        bool verify_length(size_t len)&lt;br /&gt;
        {&lt;br /&gt;
            size_t acc = sounds_offset();&lt;br /&gt;
            for(size_t i = 0; i &amp;lt; sfx_len.size(); i++)&lt;br /&gt;
                acc += sfx_len[i];&lt;br /&gt;
            return acc == len;&lt;br /&gt;
        }&lt;br /&gt;
        bool set_sound(const size_t monster_number)&lt;br /&gt;
        {&lt;br /&gt;
            const size_t monster_index = monster_number - 100;&lt;br /&gt;
            if(monster_index &amp;gt;= 23)&lt;br /&gt;
                return false;&lt;br /&gt;
&lt;br /&gt;
            for (size_t i = 0; i &amp;lt; gsnd.size(); ++i)&lt;br /&gt;
                SepPartInfo[monster_index + i].FallSound = gsnd[i];&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Chasm:_The_Rift)&amp;diff=12380</id>
		<title>CAR Format (Chasm: The Rift)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Chasm:_The_Rift)&amp;diff=12380"/>
		<updated>2025-06-22T09:09:31Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Chasm: The Rift}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;CAR Format&#039;&#039;&#039; is used by [[Chasm: The Rift]] to store most of the game&#039;s monsters and the player.&lt;br /&gt;
&lt;br /&gt;
The data in the &#039;&#039;&#039;CAR&#039;&#039;&#039; is a 0x66 bytes header followed by [[3O Format]] file content&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || [[UINT16LE]][20] || Animations array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT16LE]][6][2] || Submodel animations array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040 || [[UINT16LE]][3] || Fall Sound id array defaults to 73&lt;br /&gt;
|-&lt;br /&gt;
| 0x0046 || [[UINT16LE]][8] || Sound length array&lt;br /&gt;
|-&lt;br /&gt;
| 0x0056 || [[UINT16LE]][8] || Sound volume array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{TODO|GSND Sound id Monster/id Fall sounds relations}}&lt;br /&gt;
&lt;br /&gt;
[https://www.moddb.com/games/chasm-the-rift/downloads/chasm-modding-toolkit-package Chasm Modding Toolkit Package] is a comprehensive Windows package for customizing and modding game assets for both DOS and REMAKE version of Chasm the Rift. It supports CAR, OBJ, CEL and SPR formats for models, sprites, textures, animations and many more. You can extract, replace and preview textures, edit palettes, import/export audio, generate skyboxes and cube maps, and view assets with dedicated GUI or CLI tools.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/jopadan/AwesomeChasm?tab=readme-ov-file#models AwesomeChasm#models] Example C++ code including sound offset calculation&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/* QUAD/TRIANGLE polygon face */&lt;br /&gt;
struct face&lt;br /&gt;
{&lt;br /&gt;
        vec::u16 &amp;lt;               4&amp;gt;              indices;&lt;br /&gt;
        arr::type&amp;lt;vec::u16&amp;lt;2&amp;gt;,   4&amp;gt;                   uv;&lt;br /&gt;
        sca::i16                                    next;&lt;br /&gt;
        sca::i16                                 distant;&lt;br /&gt;
        sca::u8                                      num;&lt;br /&gt;
        sca::u8                                    flags;&lt;br /&gt;
        sca::u16                              sprite_off;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .CAR format header */ &lt;br /&gt;
struct car_header&lt;br /&gt;
{&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,  20&amp;gt;                anims;&lt;br /&gt;
        arr::type&amp;lt;vec::u16&amp;lt;2&amp;gt;,   6&amp;gt;            sub_anims;&lt;br /&gt;
        /* SepPartInfo[monster_index + i].FallSound gsnd id defaults to 73 for gibs */&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,   3&amp;gt;                 gsnd;&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,   8&amp;gt;              sfx_len;&lt;br /&gt;
        arr::type&amp;lt;sca::u16   ,   8&amp;gt;              sfx_vol;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .3O Chasm: The Rift 3D model file format */&lt;br /&gt;
struct c3o&lt;br /&gt;
{&lt;br /&gt;
        arr::type&amp;lt;face       , 400&amp;gt;                faces; // 0x0000&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;                overt; // 0x3200&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;                rvert;&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;3&amp;gt;, 256&amp;gt;               shvert;&lt;br /&gt;
        arr::type&amp;lt;vec::i16&amp;lt;2&amp;gt;, 256&amp;gt;               scvert;&lt;br /&gt;
&lt;br /&gt;
        sca::u16                            vertex_count; // 0x4800&lt;br /&gt;
        sca::u16                              face_count; // 0x4802&lt;br /&gt;
        sca::u16                                      th; // 0x4804&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* .CAR Chasm: The Rift Carrara Caracter 3D model file format */ &lt;br /&gt;
struct car : car_header, c3o&lt;br /&gt;
{&lt;br /&gt;
        size_t sounds_offset()&lt;br /&gt;
        {&lt;br /&gt;
                size_t dst = th + sizeof(struct car_header) + 0x4806u;&lt;br /&gt;
                for(size_t i = 0; i &amp;lt; 20; i++) dst += anims[i];&lt;br /&gt;
                for(size_t i = 0; i &amp;lt; 3u; i++)&lt;br /&gt;
                {&lt;br /&gt;
                        const size_t sum = sub_anims[i].sum();&lt;br /&gt;
                        dst += sum == 0 ? 0 : sum + 0x4806u;&lt;br /&gt;
                }&lt;br /&gt;
                return dst;&lt;br /&gt;
        }&lt;br /&gt;
        bool verify_length(size_t len)&lt;br /&gt;
        {&lt;br /&gt;
            size_t acc = sounds_offset();&lt;br /&gt;
            for(size_t i = 0; i &amp;lt; sfx_len.size(); i++)&lt;br /&gt;
                acc += sfx_len[i];&lt;br /&gt;
            return acc == len;&lt;br /&gt;
        }&lt;br /&gt;
        bool set_sound(const size_t monster_number)&lt;br /&gt;
        {&lt;br /&gt;
            const size_t monster_index = monster_number - 100;&lt;br /&gt;
            if(monster_index &amp;gt;= 23)&lt;br /&gt;
                return false;&lt;br /&gt;
&lt;br /&gt;
            for (size_t i = 0; i &amp;lt; gsnd.size(); ++i)&lt;br /&gt;
                SepPartInfo[monster_index + i].FallSound = gsnd[i];&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Terminal_Velocity&amp;diff=12376</id>
		<title>Terminal Velocity</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Terminal_Velocity&amp;diff=12376"/>
		<updated>2025-06-16T18:51:05Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = Edit&lt;br /&gt;
 | Tiles = Edit&lt;br /&gt;
 | Sprites = Edit&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = Edit&lt;br /&gt;
 | Music = Edit&lt;br /&gt;
 | Text = Edit&lt;br /&gt;
 | Story = Edit&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Terminal Velocity&#039;&#039;&#039; is a first-person aerial shooter.  The later Fury&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; engine is backwards compatible enough that it can run Terminal Velocity without modification.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [https://github.com/dummiesman/Poddy Poddy]&lt;br /&gt;
| Platform = Any&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = Export&lt;br /&gt;
| gfx = Export&lt;br /&gt;
| mus = Export&lt;br /&gt;
| sfx = Export&lt;br /&gt;
| txt = Export&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [https://github.com/jopadan/termpod termpod/podorgana]&lt;br /&gt;
| Platform = Any&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = Export&lt;br /&gt;
| gfx = Export&lt;br /&gt;
| mus = Export&lt;br /&gt;
| sfx = Export&lt;br /&gt;
| txt = Export&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Camoto]]&lt;br /&gt;
| Platform = Linux/Windows&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Camoto Online#gamearchive.js|Camoto/gamearchive.js]]&lt;br /&gt;
| Platform = Any&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [http://mtm2.com/~mtmg/cpod/about.shtml C-POD]&lt;br /&gt;
| Platform = Windows GUI&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = Edit&lt;br /&gt;
| mus = Edit&lt;br /&gt;
| sfx = Edit&lt;br /&gt;
| txt = Edit&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [http://www.wolfensteingoodies.com/archives/geocities/TimesSquare/8271/index.html GFE (Game File Explorer)]&lt;br /&gt;
| Platform = Windows GUI&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = Export&lt;br /&gt;
| gfx = Export&lt;br /&gt;
| mus = Export&lt;br /&gt;
| sfx = Export&lt;br /&gt;
| txt = Export&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pod&lt;br /&gt;
 | Format = [[POD Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Main archive file holding most of the game data&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.epd&lt;br /&gt;
 | Format = [[EPD Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Main archive file holding most of the game data&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.wav&lt;br /&gt;
 | Format = [[WAV Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = The RemoteRidicule and other game sounds are stored in Wave files&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.vox&lt;br /&gt;
 | Format = [[VOX Format (Terminal Velocity)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = The level order seems to be stored in these files, as well as the audio config file &amp;lt;tt&amp;gt;VOX.INI&amp;lt;/tt&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.ini&lt;br /&gt;
 | Format = [[INI Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Used for POD mounting and configuration. The file &amp;lt;tt&amp;gt;POD.INI&amp;lt;/tt&amp;gt; starts with a number specifying the number of PODs to mount, subsequent lines are the file names of the PODs to load. The configuration file &amp;lt;tt&amp;gt;SETUP.CFG&amp;lt;/tt&amp;gt; seems to be in standard .INI format.&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
All text files are in DOS format (CRLF line endings).&lt;br /&gt;
&lt;br /&gt;
=== POD files ===&lt;br /&gt;
&lt;br /&gt;
The POD files contain a number of other data files:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Filename !! Purpose !! Format&lt;br /&gt;
|-&lt;br /&gt;
| art\*.raw || Textures || 64x64 8bpp images (no header)&lt;br /&gt;
|-&lt;br /&gt;
| art\*.act || Palettes || 6-bit [[VGA Palette]]&lt;br /&gt;
|-&lt;br /&gt;
| data\*.clr || unknown || 256x256 8bpp image (no header)&lt;br /&gt;
|-&lt;br /&gt;
| data\*.def || unknown || ASCII text&lt;br /&gt;
|-&lt;br /&gt;
| data\*.nav || Waypoints || ASCII text, first line is number of waypoints&lt;br /&gt;
|-&lt;br /&gt;
| data\*.raw || Level heightmap || 256x256 8bpp image (no header)&lt;br /&gt;
|-&lt;br /&gt;
| data\*.tdf || unknown || ASCII text&lt;br /&gt;
|-&lt;br /&gt;
| data\*.tex || List of textures || ASCII text, one filename per line, first line is decimal texture count&lt;br /&gt;
|-&lt;br /&gt;
| data\*.txt || Level introduction/story || ASCII text, first line is model to show, second line is texture to render it with, rest of file is shown in story window&lt;br /&gt;
|-&lt;br /&gt;
| levels\*.lvl || Level info || ASCII text (which files to use for this level)&lt;br /&gt;
|-&lt;br /&gt;
| music\*.mod || Music || Six-channel [[MOD Format]]&lt;br /&gt;
|-&lt;br /&gt;
| sound\*.wav || Sound effects || [[WAV Format]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* Lots of information on the [https://web.archive.org/web/20160729125600/http://rewiki.regengedanken.de:80/wiki/Terminal_Velocity REwiki Terminal Velocity] page&lt;br /&gt;
* [https://github.com/jopadan/termpod/wiki termpod POD format wiki]&lt;br /&gt;
[[Category:3DRealms]]&lt;br /&gt;
[[Category:Terminal Reality]]&lt;br /&gt;
[[Category:3D]]&lt;br /&gt;
[[Category:Flight Sim]]&lt;br /&gt;
[[Category:First-Person Shooter]]&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12375</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12375"/>
		<updated>2025-06-16T00:26:18Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model uses 52 bytes&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[INT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[INT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[INT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[INT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[INT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 16 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[UINT16LE]] || bone vertex owner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E || [[UINT16LE]] || hide the vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sound definition ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || char[32] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[UINT32LE]] || Sound length in bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || BYTE[len] || PCM sound data in 16-bit mono 22khz&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[BYTE]] || Flags0&lt;br /&gt;
* bit 0: double sided&lt;br /&gt;
* bit 1: dark back side&lt;br /&gt;
* bit 2: Transparent poly&lt;br /&gt;
* bit 3: Non-solid poly&lt;br /&gt;
* bit 4: mortal weak target zone&lt;br /&gt;
* bit 5: phong mapped&lt;br /&gt;
* bit 6: environment mapped&lt;br /&gt;
* bit 7: need VC&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || [[BYTE]] || Flags1&lt;br /&gt;
* bit 0-6: unused &lt;br /&gt;
* bit 7: marks face as having a dark front side&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[UINT16LE]] || DMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Distant&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Next&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Group&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || POLYGON[face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || VERTEX[vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|      || BYTE[texture_size] || Texture in 16-bit TGA-Style encoding BGR5551 always 256 pixels&lt;br /&gt;
|-&lt;br /&gt;
|      || ANIM[anim_count] || Array of animations&lt;br /&gt;
|-&lt;br /&gt;
|      || SOUND[sound_count] || Array of sounds&lt;br /&gt;
|-&lt;br /&gt;
|      || [[INT32LE]] || Array of sound index (-1 for none)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12374</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12374"/>
		<updated>2025-06-16T00:24:51Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model uses 52 bytes&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[INT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[INT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[INT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[INT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[INT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 16 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[UINT16LE]] || bone vertex owner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E || [[UINT16LE]] || hide the vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sound definition ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || char[32] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[UINT32LE]] || Sound length in bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || BYTE[len] || PCM sound data in 16-bit mono 22khz&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[BYTE]] || Flags0&lt;br /&gt;
* bit 0: double sided&lt;br /&gt;
* bit 1: dark back side&lt;br /&gt;
* bit 2: Transparent poly&lt;br /&gt;
* bit 3: Non-solid poly&lt;br /&gt;
* bit 4: mortal weak target zone&lt;br /&gt;
* bit 5: phong mapped&lt;br /&gt;
* bit 6: environment mapped&lt;br /&gt;
* bit 7: need VC&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || [[BYTE]] || Flags1&lt;br /&gt;
* bit 0-6: unused &lt;br /&gt;
* bit 7: marks face as having a dark front side&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[UINT16LE]] || DMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Distant&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Next&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Group&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || POLYGON[face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || VERTEX[vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|      || BYTE[texture_size] || Texture TGA 16-bit BGR5551 always 256 pixels&lt;br /&gt;
|-&lt;br /&gt;
|      || ANIM[anim_count] || Array of animations&lt;br /&gt;
|-&lt;br /&gt;
|      || SOUND[sound_count] || Array of sounds&lt;br /&gt;
|-&lt;br /&gt;
|      || [[INT32LE]] || Array of sound index (-1 for none)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12373</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12373"/>
		<updated>2025-06-16T00:04:59Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model uses 52 bytes&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[INT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[INT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[INT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[INT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[INT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 16 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[UINT16LE]] || bone vertex owner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E || [[UINT16LE]] || hide the vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sound definition ===&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || char[32] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[UINT32LE]] || Sound length in bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || BYTE[len] || PCM sound data in 16-bit mono 22khz&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[BYTE]] || Flags0&lt;br /&gt;
* bit 0: double sided&lt;br /&gt;
* bit 1: dark back side&lt;br /&gt;
* bit 2: Transparent poly&lt;br /&gt;
* bit 3: Non-solid poly&lt;br /&gt;
* bit 4: mortal weak target zone&lt;br /&gt;
* bit 5: phong mapped&lt;br /&gt;
* bit 6: environment mapped&lt;br /&gt;
* bit 7: need VC&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || [[BYTE]] || Flags1&lt;br /&gt;
* bit 0-6: unused &lt;br /&gt;
* bit 7: marks face as having a dark front side&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[UINT16LE]] || DMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Distant&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Next&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Group&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || POLYGON[face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || VERTEX[vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|      || [[BYTE]] || Texture size&lt;br /&gt;
|-&lt;br /&gt;
|      || ANIM[anim_count] || Array of animations&lt;br /&gt;
|-&lt;br /&gt;
|      || SOUND[sound_count] || Array of sounds&lt;br /&gt;
|-&lt;br /&gt;
|      || [[INT32LE]] || Array of sound index (-1 for none)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12372</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12372"/>
		<updated>2025-06-15T23:59:12Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model uses 52 bytes&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[INT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[INT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[INT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[INT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[INT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 16 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[UINT16LE]] || bone vertex owner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E || [[UINT16LE]] || hide the vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[BYTE]] || Flags0&lt;br /&gt;
* bit 0: double sided&lt;br /&gt;
* bit 1: dark back side&lt;br /&gt;
* bit 2: Transparent poly&lt;br /&gt;
* bit 3: Non-solid poly&lt;br /&gt;
* bit 4: mortal weak target zone&lt;br /&gt;
* bit 5: phong mapped&lt;br /&gt;
* bit 6: environment mapped&lt;br /&gt;
* bit 7: need VC&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || [[BYTE]] || Flags1&lt;br /&gt;
* bit 0-6: unused &lt;br /&gt;
* bit 7: marks face as having a dark front side&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[UINT16LE]] || DMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Distant&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Next&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Group&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || POLYGON[face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || VERTEX[vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|      || [[BYTE]] || Texture size&lt;br /&gt;
|-&lt;br /&gt;
|      || ANIM[anim_count] || Array of animations&lt;br /&gt;
|-&lt;br /&gt;
|      || SOUND[sound_count] || Array of sounds&lt;br /&gt;
|-&lt;br /&gt;
|      || [[INT32LE]] || Array of sound index (-1 for none)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12371</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12371"/>
		<updated>2025-06-15T23:54:57Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model uses 52 bytes&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[INT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[INT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[INT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[INT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[INT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 16 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[UINT16LE]] || bone vertex owner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E || [[UINT16LE]] || hide the vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[BYTE]] || Flags0&lt;br /&gt;
* bit 0: double sided&lt;br /&gt;
* bit 1: dark back side&lt;br /&gt;
* bit 2: Transparent poly&lt;br /&gt;
* bit 3: Non-solid poly&lt;br /&gt;
* bit 4: mortal weak target zone&lt;br /&gt;
* bit 5: phong mapped&lt;br /&gt;
* bit 6: environment mapped&lt;br /&gt;
* bit 7: need VC&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || [[BYTE]] || Flags1&lt;br /&gt;
* bit 0-6: unused &lt;br /&gt;
* bit 7: marks face as having a dark front side&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[UINT16LE]] || DMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Distant&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Next&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Group&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || POLYGON[face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || VERTEX[vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|      || [[BYTE]] || Texture size&lt;br /&gt;
|-&lt;br /&gt;
|      || ANIM[anim_count] || Array of animations&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12370</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12370"/>
		<updated>2025-06-15T23:53:53Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model uses 52 bytes&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[INT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[INT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[INT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[INT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[INT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 16 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[UINT16LE]] || bone vertex owner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E || [[UINT16LE]] || hide the vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[BYTE]] || Flags0&lt;br /&gt;
* bit 0: double sided&lt;br /&gt;
* bit 1: dark back side&lt;br /&gt;
* bit 2: Transparent poly&lt;br /&gt;
* bit 3: Non-solid poly&lt;br /&gt;
* bit 4: mortal weak target zone&lt;br /&gt;
* bit 5: phong mapped&lt;br /&gt;
* bit 6: environment mapped&lt;br /&gt;
* bit 7: need VC&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || [[BYTE]] || Flags1&lt;br /&gt;
* bit 0-6: unused &lt;br /&gt;
* bit 7: marks face as having a dark front side&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[UINT16LE]] || DMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Distant&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Next&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Group&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || POLYGON[face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || VERTEX[vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|      || [[BYTE]] || Texture size&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12369</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12369"/>
		<updated>2025-06-15T23:51:30Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Polygon definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model uses 52 bytes&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[INT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[INT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[INT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[INT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[INT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 16 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[UINT16LE]] || bone vertex owner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E || [[UINT16LE]] || hide the vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[BYTE]] || Flags0&lt;br /&gt;
* bit 0: double sided&lt;br /&gt;
* bit 1: dark back side&lt;br /&gt;
* bit 2: Transparent poly&lt;br /&gt;
* bit 3: Non-solid poly&lt;br /&gt;
* bit 4: mortal weak target zone&lt;br /&gt;
* bit 5: phong mapped&lt;br /&gt;
* bit 6: environment mapped&lt;br /&gt;
* bit 7: need VC&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || [[BYTE]] || Flags1&lt;br /&gt;
* bit 0-6: unused &lt;br /&gt;
* bit 7: marks face as having a dark front side&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[UINT16LE]] || DMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Distant&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Next&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Group&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || POLYGON[face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || VERTEX[vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12368</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12368"/>
		<updated>2025-06-15T23:35:29Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Vertex definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model uses 52 bytes&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[INT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[INT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[INT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[INT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[INT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 16 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[UINT16LE]] || bone vertex owner&lt;br /&gt;
|- &lt;br /&gt;
| 0x0E || [[UINT16LE]] || hide the vertex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Unknown0&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || POLYGON[face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || VERTEX[vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12367</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12367"/>
		<updated>2025-06-15T23:32:50Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Header definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model uses 52 bytes&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[INT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[INT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[INT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[INT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[INT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 16 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || Bone&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Unknown0&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || POLYGON[face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || VERTEX[vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12366</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12366"/>
		<updated>2025-06-15T23:30:42Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[INT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[INT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[INT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[INT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[INT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 16 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || Bone&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Unknown0&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || POLYGON[face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || VERTEX[vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12365</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12365"/>
		<updated>2025-06-15T23:27:33Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[INT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[INT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[INT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[INT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[INT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 16 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || Bone&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Unknown0&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[BYTE[sizeof(Header.face_count)]]] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || [[BYTE[sizeof(Header.vertex_count)]]] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12364</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12364"/>
		<updated>2025-06-15T23:24:00Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Vertex definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[INT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[INT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[INT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[INT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[INT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 16 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || Bone&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Unknown0&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || Face[Header.face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || Vertex[Header.vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12363</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12363"/>
		<updated>2025-06-15T23:23:19Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Vertex definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[INT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[INT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[INT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[INT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[INT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 32 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || Bone&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Unknown0&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || Face[Header.face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || Vertex[Header.vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12362</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12362"/>
		<updated>2025-06-15T23:18:55Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Header definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[INT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[INT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[INT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[INT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[INT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || Bone&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Unknown0&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || Face[Header.face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || Vertex[Header.vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12361</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12361"/>
		<updated>2025-06-15T23:16:45Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[UINT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[UINT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[UINT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[UINT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || Bone&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Unknown0&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || Face[Header.face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || Vertex[Header.vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12360</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12360"/>
		<updated>2025-06-15T23:15:46Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[UINT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[UINT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[UINT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[UINT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || Bone&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Unknown0&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || Face[Header.face_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || Vertex[Header.vertex_count] || Array of vertices&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12359</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12359"/>
		<updated>2025-06-15T23:14:50Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[UINT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[UINT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[UINT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[UINT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || Bone&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Unknown0&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==File==&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Header]] || Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || Polygon[Header.polygon_count] || Array of polygons&lt;br /&gt;
|-&lt;br /&gt;
|      || Vertex[Header.vertex_count] || Array vertices&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12358</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12358"/>
		<updated>2025-06-15T23:05:57Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Vertex definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[UINT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[UINT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[UINT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[UINT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[Single]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[Single]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[Single]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || Bone&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Unknown0&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12357</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12357"/>
		<updated>2025-06-15T23:05:24Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Vertex definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[UINT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[UINT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[UINT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[UINT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[FLOAT32LE]] || X coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[FLOAT32LE]] || Y coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[FLOAT32LE]] || Z coordinate&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || Bone&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Unknown0&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12356</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12356"/>
		<updated>2025-06-15T23:01:52Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Polygon definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[UINT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[UINT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[UINT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[UINT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT16LE]] || X coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[INT16LE]] || Y coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT16LE]] || Z coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[INT32LE]] || Unknown0&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [[INT32LE]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[INT32LE]] || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || [[INT32LE]] || Unknown4&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12355</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12355"/>
		<updated>2025-06-15T22:52:14Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Polygon definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[UINT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[UINT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[UINT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[UINT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT16LE]] || X coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[INT16LE]] || Y coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT16LE]] || Z coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || [[INT32LE]] || U coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || [[INT32LE]] || U coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || [[INT32LE]] || V coordinate of second vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || [[INT32LE]] || V coordinate of first vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || [[INT32LE]] || V coordinate of third vertex * 256.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || [[INT32LE]] || Unknown0&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || [[INT32LE]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || [[INT32LE]] || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || [[INT32LE]] || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || [[INT32LE]] || Unknown3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || [[INT32LE]] || Unknown4&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12354</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12354"/>
		<updated>2025-06-15T22:44:20Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: /* Polygon definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[UINT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[UINT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[UINT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[UINT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT16LE]] || X coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[INT16LE]] || Y coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT16LE]] || Z coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses triangles.  Each polygon uses 64 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT32LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[INT32LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT32LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[INT32LE]] || U coordinate of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[INT32LE]] || U coordinate of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[INT32LE]] || U coordinate of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || [[INT32LE]] || V coordinate of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || [[INT32LE]] || V coordinate of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || [[INT32LE]] || V coordinate of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || [[INT32LE]] || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12353</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12353"/>
		<updated>2025-06-15T22:35:17Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The [[CAR Format (Carnivores)]] is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[UINT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[UINT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[UINT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[UINT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT16LE]] || X coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[INT16LE]] || Y coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT16LE]] || Z coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses quads, rather than triangles.  Each polygon uses 32 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[UINT16LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[UINT16LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[UINT16LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || [[UINT16LE]] || Index of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[UINT16LE]] || U coordinate of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || [[UINT16LE]] || V coordinate of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[UINT16LE]] || U coordinate of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || [[UINT16LE]] || V coordinate of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[UINT16LE]] || U coordinate of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || [[UINT16LE]] || V coordinate of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[UINT16LE]] || U coordinate of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || [[UINT16LE]] || V coordinate of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[UINT16LE]] || Next&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || [[UINT16LE]] || Distant&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[UINT8]]    || Group ID (monster/body parts) initialized with &amp;lt;code&amp;gt;(((Flags &amp;gt;&amp;gt; 4) == 0) ? 0 : uint8_t(1 &amp;lt;&amp;lt; ((Flags &amp;gt;&amp;gt; 4)-1)))&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || [[UINT8]]    || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || [[INT16LE]] || SpriteOffset (Initialize with SpriteOffset*=(SkinWidth=64)) Appears to be a UV mapping offset, value added to the V coordinates.&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12352</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12352"/>
		<updated>2025-06-15T22:34:22Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;CAR Format&#039;&#039;&#039; is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
=== Header definition ===&lt;br /&gt;
Header for [[CAR Format (Carnivores)]] 3D Model&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[UINT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[UINT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[UINT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[UINT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vertex definition ===&lt;br /&gt;
Each vertex in the array uses 6 bytes.&lt;br /&gt;
The first two coordinates position the vertex on the horizontal axes, while the third is the vertical position.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[INT16LE]] || X coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[INT16LE]] || Y coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[INT16LE]] || Z coordinate (signed)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Polygon definition ===&lt;br /&gt;
This format uses quads, rather than triangles.  Each polygon uses 32 bytes.&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Relative position !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || [[UINT16LE]] || Index of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || [[UINT16LE]] || Index of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || [[UINT16LE]] || Index of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || [[UINT16LE]] || Index of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || [[UINT16LE]] || U coordinate of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || [[UINT16LE]] || V coordinate of first vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || [[UINT16LE]] || U coordinate of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || [[UINT16LE]] || V coordinate of second vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[UINT16LE]] || U coordinate of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || [[UINT16LE]] || V coordinate of third vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || [[UINT16LE]] || U coordinate of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || [[UINT16LE]] || V coordinate of fourth vertex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[UINT16LE]] || Next&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || [[UINT16LE]] || Distant&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || [[UINT8]]    || Group ID (monster/body parts) initialized with &amp;lt;code&amp;gt;(((Flags &amp;gt;&amp;gt; 4) == 0) ? 0 : uint8_t(1 &amp;lt;&amp;lt; ((Flags &amp;gt;&amp;gt; 4)-1)))&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || [[UINT8]]    || Flags&lt;br /&gt;
* bit 0: TwoSided (normally the back of the poly is invisible)&lt;br /&gt;
* bit 1: AlphaTested&lt;br /&gt;
* bit 2: Translucent poly&lt;br /&gt;
* bit 3: Translucent poly (More visible than bit 2 version. Setting both seems to result in neither.)&lt;br /&gt;
* bit 4: ?  {{TODO|Seems like it might be set on objects that can block/be stood on, but toggling the bit doesn&#039;t affect them functioning as such.}}&lt;br /&gt;
* bit 5: Invisible poly?&lt;br /&gt;
* bit 6: Invisible poly?&lt;br /&gt;
* bit 7: Invisible poly?&lt;br /&gt;
{{TODO|What do the other bits do?  What&#039;s the deal with the high bits making the poly invisible?}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || [[INT16LE]] || SpriteOffset (Initialize with SpriteOffset*=(SkinWidth=64)) Appears to be a UV mapping offset, value added to the V coordinates.&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12351</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12351"/>
		<updated>2025-06-15T22:30:38Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;CAR Format&#039;&#039;&#039; is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) [[CAR Format (Chasm: The Rift)]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[UINT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[UINT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[UINT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[UINT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12350</id>
		<title>CAR Format (Carnivores)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=CAR_Format_(Carnivores)&amp;diff=12350"/>
		<updated>2025-06-15T22:28:32Z</updated>

		<summary type="html">&lt;p&gt;Jopadan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{3D Model Infobox&lt;br /&gt;
 | Type = Polygon&lt;br /&gt;
 | MaxPolygons = 400 &lt;br /&gt;
 | MaxVertices = 938&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Carnivores}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;CAR Format&#039;&#039;&#039; is used by [[Carnivores]], [[Carnivores 2]], and [[Carnivores Ice Age]] as 3D model files for the animals and hunter, weapons, dropship, and wind indicator, and are located in the \HUNTDAT folder (in Carnivores 2 and Ice Age, the weapon CAR files are instead located in \HUNTDAT\WEAPONS). The [[3DF Format]] is a simplified version of this format.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CAR&amp;quot; may be short for &amp;quot;character&amp;quot;; note that it is not short for [[Carnivores]], since the extension was used for a similar (though presumably slightly simpler) format in [[Chasm: The Rift]], several years before development on [[Carnivores]] would have begun. &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000 || char[24] || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018 || char[8] || msc &amp;quot;msc: 0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020 || [[UINT32LE]] || Number of animations&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024 || [[UINT32LE]] || Number of sounds&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028 || [[UINT32LE]] || Number of vertices&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B || [[UINT32LE]] || Number of faces&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030 || [[UINT32LE]] || Size of Texture in bytes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
https://carnivores.fandom.com/wiki/CAR&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/Carnivores-CPE/&lt;br /&gt;
&lt;br /&gt;
https://github.com/carnivores-cpe/c3dit&lt;br /&gt;
&lt;br /&gt;
https://www.tapatalk.com/groups/the_carnivores_saga/carnivores-1-2-and-ice-age-car-files-t2309.html&lt;/div&gt;</summary>
		<author><name>Jopadan</name></author>
	</entry>
</feed>