<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.multimedia.cx/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BJNFNE</id>
	<title>MultimediaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.multimedia.cx/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BJNFNE"/>
	<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php/Special:Contributions/BJNFNE"/>
	<updated>2026-07-10T01:36:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=VMD&amp;diff=16104</id>
		<title>VMD</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=VMD&amp;diff=16104"/>
		<updated>2025-12-28T12:54:23Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: add Indeo3 version number to newer VMD&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''This page is about the VMD format used in Sierra computer games. See the [[Internet Wave]] page for information about a web reference format with the extension VMD.''&lt;br /&gt;
&lt;br /&gt;
''This page is based on the document 'Description of the Sierra Video and Music Data (VMD) Format' by Mike Melanson and Vladimir &amp;quot;VAG&amp;quot; Gneushev at [http://multimedia.cx/vmd-format.txt http://multimedia.cx/vmd-format.txt].''&lt;br /&gt;
''Currently maintained by [https://github.com/BJNFNE BJNFNE]''&lt;br /&gt;
&lt;br /&gt;
* Extension: vmd&lt;br /&gt;
* Company: [[Sierra Entertainment]] (acquired from [[Coktel]])&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/game-formats/sierra-vmd/ http://samples.mplayerhq.hu/game-formats/sierra-vmd/]&lt;br /&gt;
* Samples: {{DexvertSamples|video/sierraVMD}}&lt;br /&gt;
&lt;br /&gt;
VMD is the file extension of a multimedia file format used in a number of [[Sierra Entertainment|Sierra]] CD-ROM computer games. The extension stands for Video and Music Data. The format is most notable for its use in Sierra's beloved 7-CD classic, Phantasmagoria, and is also used in other multimedia-heavy Sierra titles. Newer revisions were also used in Coktel Vision's ADI/Addy series of edutainment games.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
All multi-byte numbers are stored in little-endian format.&lt;br /&gt;
&lt;br /&gt;
A VMD file starts with the following 816- (0x330-)byte header:&lt;br /&gt;
&lt;br /&gt;
  bytes 0-1      length of header, not including this length field; this&lt;br /&gt;
                 length should be 0x32E (814)&lt;br /&gt;
  bytes 2-3      placeholder for VMD handle and some kind of VMD version&lt;br /&gt;
  bytes 4-5      VMD video codec version&lt;br /&gt;
  bytes 6-7      number of blocks in table of contents&lt;br /&gt;
  bytes 8-9      top corner coordinate of video frame&lt;br /&gt;
  bytes 10-11    left corner coordinate of video frame&lt;br /&gt;
  bytes 12-13    width of video frame&lt;br /&gt;
  bytes 14-15    height of video frame&lt;br /&gt;
  bytes 16-17    flags&lt;br /&gt;
  bytes 18-19    frames per block&lt;br /&gt;
  bytes 20-23    absolute file offset of multimedia data&lt;br /&gt;
  bytes 24-27    Indeo-3 compressed (Urban Runner &amp;quot;iv32&amp;quot;) (Ver 3.24.01.01)&lt;br /&gt;
  bytes 28-795   256 RGB palette entries, 3 bytes/entry in R-G-B order&lt;br /&gt;
  bytes 796-799  recommended size (bytes) of data frame load buffer&lt;br /&gt;
  bytes 800-803  recommended size (bytes) of unpack buffer for video decoding&lt;br /&gt;
  bytes 804-805  audio sample rate&lt;br /&gt;
  bytes 806-807  audio frame length/sample resolution&lt;br /&gt;
  bytes 808-809  number of sound buffers&lt;br /&gt;
  bytes 810-811  audio flags&lt;br /&gt;
  bytes 812-815  absolute file offset of table of contents&lt;br /&gt;
&lt;br /&gt;
Note that the RGB color components are 6-bit VGA palette components which means that they range from 0..63. The components need to be scaled if they are to be used in rendering typical RGB images where the components are 8 bits.&lt;br /&gt;
&lt;br /&gt;
The newer VMD version may have additional two fields in the header:&lt;br /&gt;
&lt;br /&gt;
  bytes 816-817  external audio codec ID&lt;br /&gt;
  bytes 818-819  audio codec frame size in samples&lt;br /&gt;
&lt;br /&gt;
Even newer VMD version removes palette from the header thus shrinking down header size to 52 (or 0x34) bytes. The order of the other fields remains the same.&lt;br /&gt;
&lt;br /&gt;
A VMD file has a table of contents describing all of the file's block and frame information. The absolute file offset of the table of contents is given in the file header and usually points to the end of the file. The table of contents contains 2 parts: The block offset table and the frame information table. Blocks and frames in VMD are different concepts. A frame contains audio or video. A block contains both a video frame and an audio frame. The block offset table consists of a series of 6-byte records. Each record has the following format:&lt;br /&gt;
&lt;br /&gt;
  bytes 0-1      unknown&lt;br /&gt;
  bytes 2-5      absolute file offset of block&lt;br /&gt;
  bytes 24-27    Indeo-3 compressed (Adibou presente series &amp;quot;IV32&amp;quot;) (Ver 3.24.15.03)&lt;br /&gt;
&lt;br /&gt;
The number of entries in this table is specified by bytes 6-7 in the file header. After the block offset table is the frame information table. The frame information table consists of a series of 16-byte records with the following format:&lt;br /&gt;
&lt;br /&gt;
  byte 0         frame data type&lt;br /&gt;
    1 = audio frame&lt;br /&gt;
    2 = video frame&lt;br /&gt;
  byte 1         unknown&lt;br /&gt;
  bytes 2-5      frame data length&lt;br /&gt;
&lt;br /&gt;
  The meaning of the frame's remaining data depends on the frame type.&lt;br /&gt;
  if this is an audio frame:&lt;br /&gt;
    byte 6       audio flags (100 or 0x64 in case of external audio codec)&lt;br /&gt;
    bytes 7-15   unknown (in case of external audio codec bytes 7-10 are frame data length repeated again)&lt;br /&gt;
&lt;br /&gt;
  if this is a video frame:&lt;br /&gt;
    bytes 6-7    left coordinate of video frame&lt;br /&gt;
    bytes 8-9    top coordinate of video frame&lt;br /&gt;
    bytes 10-11  right coordinate of video frame&lt;br /&gt;
    bytes 12-13  bottom coordinate of video frame&lt;br /&gt;
    byte 14      unknown&lt;br /&gt;
    byte 15      bit 1 (byte[15] &amp;amp; 0x02) indicates a new palette&lt;br /&gt;
&lt;br /&gt;
Generally, a frame information record needs to be made available to the audio or video decoder units of a VMD decoding application as the information is relevant to the decoding process.&lt;br /&gt;
&lt;br /&gt;
== Video Format ==&lt;br /&gt;
&lt;br /&gt;
The VMD video coding method uses the Lempel-Ziv (LZ77) algorithm, run length encoding (RLE), and interframe differencing to compress 8-bit data which can be either paletted, 16-bit RGB or 24-bit RGB. Known flavours (bytes 4-5 of the header) are:&lt;br /&gt;
* 1 - old paletted frame&lt;br /&gt;
* 5 - 24-bit video&lt;br /&gt;
* 7 - compressed with [[Indeo 3]]&lt;br /&gt;
* 13 - 16-bit video&lt;br /&gt;
&lt;br /&gt;
VMD video embodies both intraframes (a.k.a. keyframes) and interframes. Intraframes update the entire frame. Interframes only update portions of the frame that have changed from the previous frame. The first video frame of a VMD file is implicitly intracoded (the first frame has to paint the entire viewing area). The successive frames are all intercoded.&lt;br /&gt;
&lt;br /&gt;
The frame record for a video frame specifies the frame coordinates of the rectangular region that will be updated. For example, if the file header specifies that the video is 200 pixels wide and 100 pixels high,&lt;br /&gt;
the left, top, right, and bottom coordinates of the rectangular update region will be 0, 0, 199, and 99, respectively, if the entire frame is to be updated. A subsequent interframe may choose to leave much of the previous frame unchanged and only update the block from (100, 10) -&amp;gt; (150, 40). In this case, the coordinates 100, 10, 150, and 40 would be encoded in the frame record. Depending on VMD version (bytes 2-3 of the header) frame offsets and dimensions may be stored either as bytes (versions 0-1) or as pixels (version 2).&lt;br /&gt;
&lt;br /&gt;
The initial palette for decoding VMD video is transported in the main VMD file header. If bit 1 of frame record byte 15 (byte[15] &amp;amp; 0x02) is set to 1, the compressed video data chunk begins with a new palette. The palette data is transported as 770 bytes. The first byte contains the first palette index to modify. The second byte contains the number of palette entries to change. The remaining 768 bytes are 256 R-G-B palette triplets. Again, these are stored as 6-bit VGA DAC values and should be scaled accordingly.&lt;br /&gt;
&lt;br /&gt;
The compressed video data begins with a byte describing how the data is encoded. The byte specifies the following information:&lt;br /&gt;
&lt;br /&gt;
  bit 7      specifies that data chunk is LZ compressed&lt;br /&gt;
  bits 6-0   specifies 1 of 3 rendering methods&lt;br /&gt;
&lt;br /&gt;
If bit 7 is 1, the data chunk must be passed through the LZ decoder before progressing to the rendering phase. If bit 7 is 0, the data chunk is passed directly to the rendering phase.&lt;br /&gt;
&lt;br /&gt;
The VMD LZ decoding algorithm takes the compressed video buffer (after the coding method byte described above) as input and outputs a buffer of decoded bytes. The output buffer must be as large as indicated in bytes 800-803 of the main VMD header. The VMD LZ decoding algorithm operates as follows:&lt;br /&gt;
&lt;br /&gt;
  allocate a circular queue of 4096 (0x1000) bytes and initialize all&lt;br /&gt;
    elements to 0x20; note that the queue is addressed with a 12-bit&lt;br /&gt;
    number&lt;br /&gt;
  initialize variable dataleft as the first 4 numbers in the block&lt;br /&gt;
  if the next 4 bytes are (0x34 0x12 0x78 0x56)&lt;br /&gt;
    advance stream over the 4 marker bytes&lt;br /&gt;
    initialize queue position (qpos) to 0x111&lt;br /&gt;
    initialize special chain length (speclen) to 18&lt;br /&gt;
  else&lt;br /&gt;
    initialize qpos to 0xFEE&lt;br /&gt;
    initialize speclen to nothing (any value above 18 will suffice in&lt;br /&gt;
      this example)&lt;br /&gt;
  proceed to main decode loop...&lt;br /&gt;
  while there is more data left (dataleft &amp;gt; 0)&lt;br /&gt;
    tag = the next byte in the stream&lt;br /&gt;
    if (tag is 0xFF) and (dataleft &amp;gt; 8)&lt;br /&gt;
      take the next 8 bytes from the stream and place them in both the&lt;br /&gt;
        output buffer and the circular queue&lt;br /&gt;
      subtract 8 from dataleft&lt;br /&gt;
    else&lt;br /&gt;
      foreach bit in tag byte, reading from right -&amp;gt; left&lt;br /&gt;
        if (bit is 1)&lt;br /&gt;
          take the next byte from the stream and place it in both the&lt;br /&gt;
            output buffer and the circular queue&lt;br /&gt;
          decrement dataleft&lt;br /&gt;
        else&lt;br /&gt;
          move a chain of bytes from the circular queue to the output&lt;br /&gt;
          get the length and beginning offset of the chain from the next&lt;br /&gt;
            2 bytes in the stream:&lt;br /&gt;
            byte 0: bits 7-0: lower 8 bits of beginning offset&lt;br /&gt;
            byte 1: bits 7-4: upper 4 bits of beginning offset&lt;br /&gt;
                    bits 3-0: length of chain, minus 3&lt;br /&gt;
          thus, add 3 to the length to obtain the actual length&lt;br /&gt;
          if (length is equal to speclen)&lt;br /&gt;
            length is 18 (max ordinary speclen value) + next byte in&lt;br /&gt;
              stream&lt;br /&gt;
            copy the byte chain from the circular queue to the output;&lt;br /&gt;
              in the process, add the chain back into the queue&lt;br /&gt;
            subtract length from dataleft&lt;br /&gt;
&lt;br /&gt;
There are 3 rendering methods that a frame can use to paint the raw or LZ-decoded data (referred to as the video data buffer) onto the final output frame.&lt;br /&gt;
&lt;br /&gt;
Method 1 iterates through each line in the output frame, as indicated by the dimensions specified in the frame information record. For each line:&lt;br /&gt;
&lt;br /&gt;
  offset = 0&lt;br /&gt;
  repeat&lt;br /&gt;
    length = next byte in video data buffer&lt;br /&gt;
    if (bit 7 of length byte is 1)&lt;br /&gt;
      mask off bit 7 of length and add 1 (length = (length &amp;amp; 0x7F) + 1)&lt;br /&gt;
      copy length bytes from the video data buffer to the output frame&lt;br /&gt;
      advance offset by length&lt;br /&gt;
    else&lt;br /&gt;
      increment length&lt;br /&gt;
      copy length bytes from the same position in the previous frame to&lt;br /&gt;
        the current frame&lt;br /&gt;
  while (offset &amp;lt; frame width)&lt;br /&gt;
&lt;br /&gt;
Method 2 simply copies the entire video data buffer onto the output frame. This is the simplest rendering method, but be sure to take into account the frame's specific decoding dimensions as specified in the frame record.&lt;br /&gt;
&lt;br /&gt;
Method 3 operates just like method 1 except for one small change. When bit 7 of the length byte is 1 and the length byte has been masked and incremented, the next byte in the video data buffer is examined. If the byte is not 0xFF, perform the same copy as in method 1. If the byte is 0xFF, apply a RLE decoding algorithm to unpack the data from the video data buffer into the output frame. The RLE unpacking algorithm operates as follows:&lt;br /&gt;
&lt;br /&gt;
  if the length is odd, copy the next byte from the video data buffer to&lt;br /&gt;
    the output frame and decrement length&lt;br /&gt;
  divide length by 2&lt;br /&gt;
  while (length &amp;gt; 0)&lt;br /&gt;
    fetch the next byte from the video data buffer&lt;br /&gt;
    if the top bit of the byte is 1 (byte &amp;amp; 0x80)&lt;br /&gt;
      drop the top bit of the byte and shift left by 1:&lt;br /&gt;
        byte = (byte &amp;amp; 0x7F) &amp;lt;&amp;lt; 1&lt;br /&gt;
      copy (byte) bytes from video data buffer to output frame&lt;br /&gt;
    else&lt;br /&gt;
      foreach count in byte&lt;br /&gt;
        copy the next 2 bytes from video data buffer to output frame; in&lt;br /&gt;
          other words, bytes A and B from the video data buffer will be&lt;br /&gt;
          repeated n times: ABABABAB...&lt;br /&gt;
&lt;br /&gt;
== Audio Format ==&lt;br /&gt;
&lt;br /&gt;
8-bits audio stored as a raw PCM samples, all 16-bits sound are 2:1 DPCM-encoded. First, you need to ensure VMD contains any sound by checking bit 12 (&amp;amp; 0x1000) of the file header' flags. Non-zero bit indicates file has sound. Fields audio_sample_rate and audio_frame_length contains playback rate and size of single (compressed) sound block respectively. Negative audio frame length used to indicate 16-bits sound data, in this case you need to invert this field to get the actual block length. Audio flags field keeps other important flags: bit 15 (&amp;amp; 0x8000) indicates old-style stereo-sound, while bit 9 (&amp;amp; 0x200) - new stereo sound format (introduced in Shivers 2 game). These formats a little different in the meaning of several fields (one format stores just deltas and another one stores initial sample values in the beginning of every block), making original playback core is not backward compatible - Shivers 2 can not play old videos properly.  Optimal way is check bit 15 first and if it's zero, additionally check bit 9 to determinate number of channels. The main difference between old and new formats - old vmds treat audio frame length field as the number of samples for both channels, but new version - only as number of samples for single channel (i.e. you need to multiply it by 2 for stereo sound). There is also [[IMA ADPCM]] compression signalled by bit 4 (&amp;amp; 0x10) with block data in the following format: 16-bit initial samples for one or two channels, 8-bit step indices and the rest is ADPCM data decoded high nibble first. In case of new VMD format with an external audio codec payloads are decoded with some codec from Lernout&amp;amp;Hauspie StreamTalk family:&lt;br /&gt;
* type 3 --- 15 kbps @ 8kHz&lt;br /&gt;
* type 4 --- 50 kbps @ 22kHz&lt;br /&gt;
* type 5 --- 25 kbps @ 11kHz&lt;br /&gt;
* type 6 --- CELP codec 4.8 kbps @ 8kHz&lt;br /&gt;
Most of these codecs are variable bitrate audio codecs based on MPEG Audio Layer II but without a header and with fixed bit allocation class.&lt;br /&gt;
&lt;br /&gt;
When you encounter frame information record of type 1, proceed to audio decoding. First, analyse frame's audio_flags byte. It may be eiter:&lt;br /&gt;
* 1 - normal sound block&lt;br /&gt;
Decompress single audio block and continue to next frame&lt;br /&gt;
* 2 - multiple sound and silence blocks&lt;br /&gt;
Get next 4 bytes of the frame's data. This is a sound mask bits. Starting from bit 0, each non-zero bit indicates silence block. Zero means normal audio block. Thus, iterate number_of_sound_buffer times to fill chain of sound and/or silence blocks.&lt;br /&gt;
* 3 - single silence block&lt;br /&gt;
Fill whole block with silence.&lt;br /&gt;
&lt;br /&gt;
The decompression scheme is quite trivial. As stated above, it has been used only if file contains 16-bits audio. First, you need to get one or two (depends on number of the channels) initial samples. For mono and new-stereo sound each initial sample is the first word(s) of audio stream data. Old-style stereo sound has no static samples, instead, they are initialized to zero at the beginning of the playback and carried between successive frames. This may cause some difficulties with random seeking over such kind of files. Using these samples, perform decoding of the rest of chunk' bytes using this formula:&lt;br /&gt;
 if code &amp;amp; 0x80  sample = sample - Table[code &amp;amp; 0x7F]&lt;br /&gt;
 else            sample = sample + Table[code &amp;amp; 0x7F]&lt;br /&gt;
Where code is the bytes of packed data. Interleave left-right samples decoding for stereo sound. &lt;br /&gt;
&lt;br /&gt;
The delta table is:&lt;br /&gt;
    0,    8,   16,   32,   48,   64,   80,   96,  112,  128,  144,  160,  176,  192,  208,  224&lt;br /&gt;
  240,  256,  272,  288,  304,  320,  336,  352,  368,  384,  400,  416,  432,  448,  464,  480&lt;br /&gt;
  496,  512,  520,  528,  536,  544,  552,  560,  568,  576,  584,  592,  600,  608,  616,  624&lt;br /&gt;
  632,  640,  648,  656,  664,  672,  680,  688,  696,  704,  712,  720,  728,  736,  744,  752&lt;br /&gt;
  760,  768,  776,  784,  792,  800,  808,  816,  824,  832,  840,  848,  856,  864,  872,  880&lt;br /&gt;
  888,  896,  904,  912,  920,  928,  936,  944,  952,  960,  968,  976,  984,  992, 1000, 1008&lt;br /&gt;
 1016, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728, 1792, 1856, 1920&lt;br /&gt;
 1984, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, 5120, 6144, 7168, 8192,12288,16384&lt;br /&gt;
&lt;br /&gt;
== Games Using VMD ==&lt;br /&gt;
&lt;br /&gt;
These are some of the Sierra/Coktel Vision computer games that are known to use the VMD file format:&lt;br /&gt;
* Coktel Vision:&lt;br /&gt;
** ADI 2&lt;br /&gt;
** ADI 4&lt;br /&gt;
** ADI 5&lt;br /&gt;
** Adibou 1&lt;br /&gt;
** Adibou 2&lt;br /&gt;
** Adibou 3&lt;br /&gt;
** [https://www.mobygames.com/game/71003/adibou-presente-la-magie/ ADIBOU présente la Magie]&lt;br /&gt;
** Adibou présente la Cuisine&lt;br /&gt;
** ADIBOU présente le Dessin&lt;br /&gt;
** Adiboud'chou à la mer&lt;br /&gt;
** Adiboud'chou à la campagne&lt;br /&gt;
** Adiboud'chou dans la jungle et la savane&lt;br /&gt;
** Adiboud'chou sur la banquise&lt;br /&gt;
** [http://www.mobygames.com/game/win3x/bizarre-adventures-of-woodruff-and-the-schnibble The Bizarre Adventures of Woodruff and the Schnibble]&lt;br /&gt;
** [http://www.mobygames.com/game/last-dynasty The Last Dynasty]&lt;br /&gt;
** [https://www.mobygames.com/game/45579/land-of-the-magic-stones/ Land of the Magic Stones]&lt;br /&gt;
** [https://www.mobygames.com/game/184579/playtoons-1-featuring-uncle-archibald/ Playtoons 1]&lt;br /&gt;
** [https://www.mobygames.com/game/185154/playtoons-2-the-case-of-the-counterfeit-collaborator/ Playtoons 2]&lt;br /&gt;
** [https://www.mobygames.com/game/185155/playtoons-3-the-secret-of-the-castle/ Playtoons 3]&lt;br /&gt;
** [https://www.mobygames.com/game/185156/playtoons-4-the-mandarine-prince/ Playtoons 4]&lt;br /&gt;
** [https://www.mobygames.com/game/185157/playtoons-no-5-la-pierre-de-wakan/ Playtoons 5]&lt;br /&gt;
** [https://www.mobygames.com/game/3809/urban-runner/ Urban Runner]&lt;br /&gt;
** Nathan Vacances&lt;br /&gt;
** English Fever&lt;br /&gt;
* Sierra:&lt;br /&gt;
** [http://www.mobygames.com/game/betrayal-in-antara Betrayal In Antara]&lt;br /&gt;
** [http://www.mobygames.com/game/beast-within-a-gabriel-knight-mystery Gabriel Knight 2: The Beast Within]&lt;br /&gt;
** [http://www.mobygames.com/game/leisure-suit-larry-love-for-sail Leisure Suit Larry 7]&lt;br /&gt;
** [http://www.mobygames.com/game/lighthouse-the-dark-being Lighthouse]&lt;br /&gt;
** [http://www.mobygames.com/game/dos/roberta-williams-phantasmagoria Phantasmagoria]&lt;br /&gt;
** [http://www.mobygames.com/game/rama RAMA]&lt;br /&gt;
** [http://www.mobygames.com/game/shivers Shivers]&lt;br /&gt;
** [https://www.mobygames.com/game/665/shivers-two-harvest-of-souls Shivers 2: Harvest of Souls]&lt;br /&gt;
** [http://www.mobygames.com/game/dos/daryl-f-gates-police-quest-swat SWAT]&lt;br /&gt;
** [http://www.mobygames.com/game/torins-passage Torin's Passage]&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=VMD&amp;diff=16103</id>
		<title>VMD</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=VMD&amp;diff=16103"/>
		<updated>2025-12-28T09:54:59Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: add Indeo version number used for Urban Runner&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''This page is about the VMD format used in Sierra computer games. See the [[Internet Wave]] page for information about a web reference format with the extension VMD.''&lt;br /&gt;
&lt;br /&gt;
''This page is based on the document 'Description of the Sierra Video and Music Data (VMD) Format' by Mike Melanson and Vladimir &amp;quot;VAG&amp;quot; Gneushev at [http://multimedia.cx/vmd-format.txt http://multimedia.cx/vmd-format.txt].''&lt;br /&gt;
''Currently maintained by [https://github.com/BJNFNE BJNFNE]''&lt;br /&gt;
&lt;br /&gt;
* Extension: vmd&lt;br /&gt;
* Company: [[Sierra Entertainment]] (acquired from [[Coktel]])&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/game-formats/sierra-vmd/ http://samples.mplayerhq.hu/game-formats/sierra-vmd/]&lt;br /&gt;
* Samples: {{DexvertSamples|video/sierraVMD}}&lt;br /&gt;
&lt;br /&gt;
VMD is the file extension of a multimedia file format used in a number of [[Sierra Entertainment|Sierra]] CD-ROM computer games. The extension stands for Video and Music Data. The format is most notable for its use in Sierra's beloved 7-CD classic, Phantasmagoria, and is also used in other multimedia-heavy Sierra titles. Newer revisions were also used in Coktel Vision's ADI/Addy series of edutainment games.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
All multi-byte numbers are stored in little-endian format.&lt;br /&gt;
&lt;br /&gt;
A VMD file starts with the following 816- (0x330-)byte header:&lt;br /&gt;
&lt;br /&gt;
  bytes 0-1      length of header, not including this length field; this&lt;br /&gt;
                 length should be 0x32E (814)&lt;br /&gt;
  bytes 2-3      placeholder for VMD handle and some kind of VMD version&lt;br /&gt;
  bytes 4-5      VMD video codec version&lt;br /&gt;
  bytes 6-7      number of blocks in table of contents&lt;br /&gt;
  bytes 8-9      top corner coordinate of video frame&lt;br /&gt;
  bytes 10-11    left corner coordinate of video frame&lt;br /&gt;
  bytes 12-13    width of video frame&lt;br /&gt;
  bytes 14-15    height of video frame&lt;br /&gt;
  bytes 16-17    flags&lt;br /&gt;
  bytes 18-19    frames per block&lt;br /&gt;
  bytes 20-23    absolute file offset of multimedia data&lt;br /&gt;
  bytes 24-27    Indeo-3 compressed (Urban Runner &amp;quot;iv32&amp;quot;) (Ver 3.24.01.01)&lt;br /&gt;
  bytes 28-795   256 RGB palette entries, 3 bytes/entry in R-G-B order&lt;br /&gt;
  bytes 796-799  recommended size (bytes) of data frame load buffer&lt;br /&gt;
  bytes 800-803  recommended size (bytes) of unpack buffer for video decoding&lt;br /&gt;
  bytes 804-805  audio sample rate&lt;br /&gt;
  bytes 806-807  audio frame length/sample resolution&lt;br /&gt;
  bytes 808-809  number of sound buffers&lt;br /&gt;
  bytes 810-811  audio flags&lt;br /&gt;
  bytes 812-815  absolute file offset of table of contents&lt;br /&gt;
&lt;br /&gt;
Note that the RGB color components are 6-bit VGA palette components which means that they range from 0..63. The components need to be scaled if they are to be used in rendering typical RGB images where the components are 8 bits.&lt;br /&gt;
&lt;br /&gt;
The newer VMD version may have additional two fields in the header:&lt;br /&gt;
&lt;br /&gt;
  bytes 816-817  external audio codec ID&lt;br /&gt;
  bytes 818-819  audio codec frame size in samples&lt;br /&gt;
&lt;br /&gt;
Even newer VMD version removes palette from the header thus shrinking down header size to 52 (or 0x34) bytes. The order of the other fields remains the same.&lt;br /&gt;
&lt;br /&gt;
A VMD file has a table of contents describing all of the file's block and frame information. The absolute file offset of the table of contents is given in the file header and usually points to the end of the file. The table of contents contains 2 parts: The block offset table and the frame information table. Blocks and frames in VMD are different concepts. A frame contains audio or video. A block contains both a video frame and an audio frame. The block offset table consists of a series of 6-byte records. Each record has the following format:&lt;br /&gt;
&lt;br /&gt;
  bytes 0-1      unknown&lt;br /&gt;
  bytes 2-5      absolute file offset of block&lt;br /&gt;
  bytes 24-27    Indeo-3 compressed (Adibou presente series &amp;quot;IV32&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
The number of entries in this table is specified by bytes 6-7 in the file header. After the block offset table is the frame information table. The frame information table consists of a series of 16-byte records with the following format:&lt;br /&gt;
&lt;br /&gt;
  byte 0         frame data type&lt;br /&gt;
    1 = audio frame&lt;br /&gt;
    2 = video frame&lt;br /&gt;
  byte 1         unknown&lt;br /&gt;
  bytes 2-5      frame data length&lt;br /&gt;
&lt;br /&gt;
  The meaning of the frame's remaining data depends on the frame type.&lt;br /&gt;
  if this is an audio frame:&lt;br /&gt;
    byte 6       audio flags (100 or 0x64 in case of external audio codec)&lt;br /&gt;
    bytes 7-15   unknown (in case of external audio codec bytes 7-10 are frame data length repeated again)&lt;br /&gt;
&lt;br /&gt;
  if this is a video frame:&lt;br /&gt;
    bytes 6-7    left coordinate of video frame&lt;br /&gt;
    bytes 8-9    top coordinate of video frame&lt;br /&gt;
    bytes 10-11  right coordinate of video frame&lt;br /&gt;
    bytes 12-13  bottom coordinate of video frame&lt;br /&gt;
    byte 14      unknown&lt;br /&gt;
    byte 15      bit 1 (byte[15] &amp;amp; 0x02) indicates a new palette&lt;br /&gt;
&lt;br /&gt;
Generally, a frame information record needs to be made available to the audio or video decoder units of a VMD decoding application as the information is relevant to the decoding process.&lt;br /&gt;
&lt;br /&gt;
== Video Format ==&lt;br /&gt;
&lt;br /&gt;
The VMD video coding method uses the Lempel-Ziv (LZ77) algorithm, run length encoding (RLE), and interframe differencing to compress 8-bit data which can be either paletted, 16-bit RGB or 24-bit RGB. Known flavours (bytes 4-5 of the header) are:&lt;br /&gt;
* 1 - old paletted frame&lt;br /&gt;
* 5 - 24-bit video&lt;br /&gt;
* 7 - compressed with [[Indeo 3]]&lt;br /&gt;
* 13 - 16-bit video&lt;br /&gt;
&lt;br /&gt;
VMD video embodies both intraframes (a.k.a. keyframes) and interframes. Intraframes update the entire frame. Interframes only update portions of the frame that have changed from the previous frame. The first video frame of a VMD file is implicitly intracoded (the first frame has to paint the entire viewing area). The successive frames are all intercoded.&lt;br /&gt;
&lt;br /&gt;
The frame record for a video frame specifies the frame coordinates of the rectangular region that will be updated. For example, if the file header specifies that the video is 200 pixels wide and 100 pixels high,&lt;br /&gt;
the left, top, right, and bottom coordinates of the rectangular update region will be 0, 0, 199, and 99, respectively, if the entire frame is to be updated. A subsequent interframe may choose to leave much of the previous frame unchanged and only update the block from (100, 10) -&amp;gt; (150, 40). In this case, the coordinates 100, 10, 150, and 40 would be encoded in the frame record. Depending on VMD version (bytes 2-3 of the header) frame offsets and dimensions may be stored either as bytes (versions 0-1) or as pixels (version 2).&lt;br /&gt;
&lt;br /&gt;
The initial palette for decoding VMD video is transported in the main VMD file header. If bit 1 of frame record byte 15 (byte[15] &amp;amp; 0x02) is set to 1, the compressed video data chunk begins with a new palette. The palette data is transported as 770 bytes. The first byte contains the first palette index to modify. The second byte contains the number of palette entries to change. The remaining 768 bytes are 256 R-G-B palette triplets. Again, these are stored as 6-bit VGA DAC values and should be scaled accordingly.&lt;br /&gt;
&lt;br /&gt;
The compressed video data begins with a byte describing how the data is encoded. The byte specifies the following information:&lt;br /&gt;
&lt;br /&gt;
  bit 7      specifies that data chunk is LZ compressed&lt;br /&gt;
  bits 6-0   specifies 1 of 3 rendering methods&lt;br /&gt;
&lt;br /&gt;
If bit 7 is 1, the data chunk must be passed through the LZ decoder before progressing to the rendering phase. If bit 7 is 0, the data chunk is passed directly to the rendering phase.&lt;br /&gt;
&lt;br /&gt;
The VMD LZ decoding algorithm takes the compressed video buffer (after the coding method byte described above) as input and outputs a buffer of decoded bytes. The output buffer must be as large as indicated in bytes 800-803 of the main VMD header. The VMD LZ decoding algorithm operates as follows:&lt;br /&gt;
&lt;br /&gt;
  allocate a circular queue of 4096 (0x1000) bytes and initialize all&lt;br /&gt;
    elements to 0x20; note that the queue is addressed with a 12-bit&lt;br /&gt;
    number&lt;br /&gt;
  initialize variable dataleft as the first 4 numbers in the block&lt;br /&gt;
  if the next 4 bytes are (0x34 0x12 0x78 0x56)&lt;br /&gt;
    advance stream over the 4 marker bytes&lt;br /&gt;
    initialize queue position (qpos) to 0x111&lt;br /&gt;
    initialize special chain length (speclen) to 18&lt;br /&gt;
  else&lt;br /&gt;
    initialize qpos to 0xFEE&lt;br /&gt;
    initialize speclen to nothing (any value above 18 will suffice in&lt;br /&gt;
      this example)&lt;br /&gt;
  proceed to main decode loop...&lt;br /&gt;
  while there is more data left (dataleft &amp;gt; 0)&lt;br /&gt;
    tag = the next byte in the stream&lt;br /&gt;
    if (tag is 0xFF) and (dataleft &amp;gt; 8)&lt;br /&gt;
      take the next 8 bytes from the stream and place them in both the&lt;br /&gt;
        output buffer and the circular queue&lt;br /&gt;
      subtract 8 from dataleft&lt;br /&gt;
    else&lt;br /&gt;
      foreach bit in tag byte, reading from right -&amp;gt; left&lt;br /&gt;
        if (bit is 1)&lt;br /&gt;
          take the next byte from the stream and place it in both the&lt;br /&gt;
            output buffer and the circular queue&lt;br /&gt;
          decrement dataleft&lt;br /&gt;
        else&lt;br /&gt;
          move a chain of bytes from the circular queue to the output&lt;br /&gt;
          get the length and beginning offset of the chain from the next&lt;br /&gt;
            2 bytes in the stream:&lt;br /&gt;
            byte 0: bits 7-0: lower 8 bits of beginning offset&lt;br /&gt;
            byte 1: bits 7-4: upper 4 bits of beginning offset&lt;br /&gt;
                    bits 3-0: length of chain, minus 3&lt;br /&gt;
          thus, add 3 to the length to obtain the actual length&lt;br /&gt;
          if (length is equal to speclen)&lt;br /&gt;
            length is 18 (max ordinary speclen value) + next byte in&lt;br /&gt;
              stream&lt;br /&gt;
            copy the byte chain from the circular queue to the output;&lt;br /&gt;
              in the process, add the chain back into the queue&lt;br /&gt;
            subtract length from dataleft&lt;br /&gt;
&lt;br /&gt;
There are 3 rendering methods that a frame can use to paint the raw or LZ-decoded data (referred to as the video data buffer) onto the final output frame.&lt;br /&gt;
&lt;br /&gt;
Method 1 iterates through each line in the output frame, as indicated by the dimensions specified in the frame information record. For each line:&lt;br /&gt;
&lt;br /&gt;
  offset = 0&lt;br /&gt;
  repeat&lt;br /&gt;
    length = next byte in video data buffer&lt;br /&gt;
    if (bit 7 of length byte is 1)&lt;br /&gt;
      mask off bit 7 of length and add 1 (length = (length &amp;amp; 0x7F) + 1)&lt;br /&gt;
      copy length bytes from the video data buffer to the output frame&lt;br /&gt;
      advance offset by length&lt;br /&gt;
    else&lt;br /&gt;
      increment length&lt;br /&gt;
      copy length bytes from the same position in the previous frame to&lt;br /&gt;
        the current frame&lt;br /&gt;
  while (offset &amp;lt; frame width)&lt;br /&gt;
&lt;br /&gt;
Method 2 simply copies the entire video data buffer onto the output frame. This is the simplest rendering method, but be sure to take into account the frame's specific decoding dimensions as specified in the frame record.&lt;br /&gt;
&lt;br /&gt;
Method 3 operates just like method 1 except for one small change. When bit 7 of the length byte is 1 and the length byte has been masked and incremented, the next byte in the video data buffer is examined. If the byte is not 0xFF, perform the same copy as in method 1. If the byte is 0xFF, apply a RLE decoding algorithm to unpack the data from the video data buffer into the output frame. The RLE unpacking algorithm operates as follows:&lt;br /&gt;
&lt;br /&gt;
  if the length is odd, copy the next byte from the video data buffer to&lt;br /&gt;
    the output frame and decrement length&lt;br /&gt;
  divide length by 2&lt;br /&gt;
  while (length &amp;gt; 0)&lt;br /&gt;
    fetch the next byte from the video data buffer&lt;br /&gt;
    if the top bit of the byte is 1 (byte &amp;amp; 0x80)&lt;br /&gt;
      drop the top bit of the byte and shift left by 1:&lt;br /&gt;
        byte = (byte &amp;amp; 0x7F) &amp;lt;&amp;lt; 1&lt;br /&gt;
      copy (byte) bytes from video data buffer to output frame&lt;br /&gt;
    else&lt;br /&gt;
      foreach count in byte&lt;br /&gt;
        copy the next 2 bytes from video data buffer to output frame; in&lt;br /&gt;
          other words, bytes A and B from the video data buffer will be&lt;br /&gt;
          repeated n times: ABABABAB...&lt;br /&gt;
&lt;br /&gt;
== Audio Format ==&lt;br /&gt;
&lt;br /&gt;
8-bits audio stored as a raw PCM samples, all 16-bits sound are 2:1 DPCM-encoded. First, you need to ensure VMD contains any sound by checking bit 12 (&amp;amp; 0x1000) of the file header' flags. Non-zero bit indicates file has sound. Fields audio_sample_rate and audio_frame_length contains playback rate and size of single (compressed) sound block respectively. Negative audio frame length used to indicate 16-bits sound data, in this case you need to invert this field to get the actual block length. Audio flags field keeps other important flags: bit 15 (&amp;amp; 0x8000) indicates old-style stereo-sound, while bit 9 (&amp;amp; 0x200) - new stereo sound format (introduced in Shivers 2 game). These formats a little different in the meaning of several fields (one format stores just deltas and another one stores initial sample values in the beginning of every block), making original playback core is not backward compatible - Shivers 2 can not play old videos properly.  Optimal way is check bit 15 first and if it's zero, additionally check bit 9 to determinate number of channels. The main difference between old and new formats - old vmds treat audio frame length field as the number of samples for both channels, but new version - only as number of samples for single channel (i.e. you need to multiply it by 2 for stereo sound). There is also [[IMA ADPCM]] compression signalled by bit 4 (&amp;amp; 0x10) with block data in the following format: 16-bit initial samples for one or two channels, 8-bit step indices and the rest is ADPCM data decoded high nibble first. In case of new VMD format with an external audio codec payloads are decoded with some codec from Lernout&amp;amp;Hauspie StreamTalk family:&lt;br /&gt;
* type 3 --- 15 kbps @ 8kHz&lt;br /&gt;
* type 4 --- 50 kbps @ 22kHz&lt;br /&gt;
* type 5 --- 25 kbps @ 11kHz&lt;br /&gt;
* type 6 --- CELP codec 4.8 kbps @ 8kHz&lt;br /&gt;
Most of these codecs are variable bitrate audio codecs based on MPEG Audio Layer II but without a header and with fixed bit allocation class.&lt;br /&gt;
&lt;br /&gt;
When you encounter frame information record of type 1, proceed to audio decoding. First, analyse frame's audio_flags byte. It may be eiter:&lt;br /&gt;
* 1 - normal sound block&lt;br /&gt;
Decompress single audio block and continue to next frame&lt;br /&gt;
* 2 - multiple sound and silence blocks&lt;br /&gt;
Get next 4 bytes of the frame's data. This is a sound mask bits. Starting from bit 0, each non-zero bit indicates silence block. Zero means normal audio block. Thus, iterate number_of_sound_buffer times to fill chain of sound and/or silence blocks.&lt;br /&gt;
* 3 - single silence block&lt;br /&gt;
Fill whole block with silence.&lt;br /&gt;
&lt;br /&gt;
The decompression scheme is quite trivial. As stated above, it has been used only if file contains 16-bits audio. First, you need to get one or two (depends on number of the channels) initial samples. For mono and new-stereo sound each initial sample is the first word(s) of audio stream data. Old-style stereo sound has no static samples, instead, they are initialized to zero at the beginning of the playback and carried between successive frames. This may cause some difficulties with random seeking over such kind of files. Using these samples, perform decoding of the rest of chunk' bytes using this formula:&lt;br /&gt;
 if code &amp;amp; 0x80  sample = sample - Table[code &amp;amp; 0x7F]&lt;br /&gt;
 else            sample = sample + Table[code &amp;amp; 0x7F]&lt;br /&gt;
Where code is the bytes of packed data. Interleave left-right samples decoding for stereo sound. &lt;br /&gt;
&lt;br /&gt;
The delta table is:&lt;br /&gt;
    0,    8,   16,   32,   48,   64,   80,   96,  112,  128,  144,  160,  176,  192,  208,  224&lt;br /&gt;
  240,  256,  272,  288,  304,  320,  336,  352,  368,  384,  400,  416,  432,  448,  464,  480&lt;br /&gt;
  496,  512,  520,  528,  536,  544,  552,  560,  568,  576,  584,  592,  600,  608,  616,  624&lt;br /&gt;
  632,  640,  648,  656,  664,  672,  680,  688,  696,  704,  712,  720,  728,  736,  744,  752&lt;br /&gt;
  760,  768,  776,  784,  792,  800,  808,  816,  824,  832,  840,  848,  856,  864,  872,  880&lt;br /&gt;
  888,  896,  904,  912,  920,  928,  936,  944,  952,  960,  968,  976,  984,  992, 1000, 1008&lt;br /&gt;
 1016, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728, 1792, 1856, 1920&lt;br /&gt;
 1984, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, 5120, 6144, 7168, 8192,12288,16384&lt;br /&gt;
&lt;br /&gt;
== Games Using VMD ==&lt;br /&gt;
&lt;br /&gt;
These are some of the Sierra/Coktel Vision computer games that are known to use the VMD file format:&lt;br /&gt;
* Coktel Vision:&lt;br /&gt;
** ADI 2&lt;br /&gt;
** ADI 4&lt;br /&gt;
** ADI 5&lt;br /&gt;
** Adibou 1&lt;br /&gt;
** Adibou 2&lt;br /&gt;
** Adibou 3&lt;br /&gt;
** [https://www.mobygames.com/game/71003/adibou-presente-la-magie/ ADIBOU présente la Magie]&lt;br /&gt;
** Adibou présente la Cuisine&lt;br /&gt;
** ADIBOU présente le Dessin&lt;br /&gt;
** Adiboud'chou à la mer&lt;br /&gt;
** Adiboud'chou à la campagne&lt;br /&gt;
** Adiboud'chou dans la jungle et la savane&lt;br /&gt;
** Adiboud'chou sur la banquise&lt;br /&gt;
** [http://www.mobygames.com/game/win3x/bizarre-adventures-of-woodruff-and-the-schnibble The Bizarre Adventures of Woodruff and the Schnibble]&lt;br /&gt;
** [http://www.mobygames.com/game/last-dynasty The Last Dynasty]&lt;br /&gt;
** [https://www.mobygames.com/game/45579/land-of-the-magic-stones/ Land of the Magic Stones]&lt;br /&gt;
** [https://www.mobygames.com/game/184579/playtoons-1-featuring-uncle-archibald/ Playtoons 1]&lt;br /&gt;
** [https://www.mobygames.com/game/185154/playtoons-2-the-case-of-the-counterfeit-collaborator/ Playtoons 2]&lt;br /&gt;
** [https://www.mobygames.com/game/185155/playtoons-3-the-secret-of-the-castle/ Playtoons 3]&lt;br /&gt;
** [https://www.mobygames.com/game/185156/playtoons-4-the-mandarine-prince/ Playtoons 4]&lt;br /&gt;
** [https://www.mobygames.com/game/185157/playtoons-no-5-la-pierre-de-wakan/ Playtoons 5]&lt;br /&gt;
** [https://www.mobygames.com/game/3809/urban-runner/ Urban Runner]&lt;br /&gt;
** Nathan Vacances&lt;br /&gt;
** English Fever&lt;br /&gt;
* Sierra:&lt;br /&gt;
** [http://www.mobygames.com/game/betrayal-in-antara Betrayal In Antara]&lt;br /&gt;
** [http://www.mobygames.com/game/beast-within-a-gabriel-knight-mystery Gabriel Knight 2: The Beast Within]&lt;br /&gt;
** [http://www.mobygames.com/game/leisure-suit-larry-love-for-sail Leisure Suit Larry 7]&lt;br /&gt;
** [http://www.mobygames.com/game/lighthouse-the-dark-being Lighthouse]&lt;br /&gt;
** [http://www.mobygames.com/game/dos/roberta-williams-phantasmagoria Phantasmagoria]&lt;br /&gt;
** [http://www.mobygames.com/game/rama RAMA]&lt;br /&gt;
** [http://www.mobygames.com/game/shivers Shivers]&lt;br /&gt;
** [https://www.mobygames.com/game/665/shivers-two-harvest-of-souls Shivers 2: Harvest of Souls]&lt;br /&gt;
** [http://www.mobygames.com/game/dos/daryl-f-gates-police-quest-swat SWAT]&lt;br /&gt;
** [http://www.mobygames.com/game/torins-passage Torin's Passage]&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=VMD&amp;diff=16102</id>
		<title>VMD</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=VMD&amp;diff=16102"/>
		<updated>2025-12-28T09:41:29Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: add Indeo3-compressed to newer VMD&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''This page is about the VMD format used in Sierra computer games. See the [[Internet Wave]] page for information about a web reference format with the extension VMD.''&lt;br /&gt;
&lt;br /&gt;
''This page is based on the document 'Description of the Sierra Video and Music Data (VMD) Format' by Mike Melanson and Vladimir &amp;quot;VAG&amp;quot; Gneushev at [http://multimedia.cx/vmd-format.txt http://multimedia.cx/vmd-format.txt].''&lt;br /&gt;
''Currently maintained by [https://github.com/BJNFNE BJNFNE]''&lt;br /&gt;
&lt;br /&gt;
* Extension: vmd&lt;br /&gt;
* Company: [[Sierra Entertainment]] (acquired from [[Coktel]])&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/game-formats/sierra-vmd/ http://samples.mplayerhq.hu/game-formats/sierra-vmd/]&lt;br /&gt;
* Samples: {{DexvertSamples|video/sierraVMD}}&lt;br /&gt;
&lt;br /&gt;
VMD is the file extension of a multimedia file format used in a number of [[Sierra Entertainment|Sierra]] CD-ROM computer games. The extension stands for Video and Music Data. The format is most notable for its use in Sierra's beloved 7-CD classic, Phantasmagoria, and is also used in other multimedia-heavy Sierra titles. Newer revisions were also used in Coktel Vision's ADI/Addy series of edutainment games.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
All multi-byte numbers are stored in little-endian format.&lt;br /&gt;
&lt;br /&gt;
A VMD file starts with the following 816- (0x330-)byte header:&lt;br /&gt;
&lt;br /&gt;
  bytes 0-1      length of header, not including this length field; this&lt;br /&gt;
                 length should be 0x32E (814)&lt;br /&gt;
  bytes 2-3      placeholder for VMD handle and some kind of VMD version&lt;br /&gt;
  bytes 4-5      VMD video codec version&lt;br /&gt;
  bytes 6-7      number of blocks in table of contents&lt;br /&gt;
  bytes 8-9      top corner coordinate of video frame&lt;br /&gt;
  bytes 10-11    left corner coordinate of video frame&lt;br /&gt;
  bytes 12-13    width of video frame&lt;br /&gt;
  bytes 14-15    height of video frame&lt;br /&gt;
  bytes 16-17    flags&lt;br /&gt;
  bytes 18-19    frames per block&lt;br /&gt;
  bytes 20-23    absolute file offset of multimedia data&lt;br /&gt;
  bytes 24-27    Indeo-3 compressed (Urban Runner &amp;quot;iv32&amp;quot;)&lt;br /&gt;
  bytes 28-795   256 RGB palette entries, 3 bytes/entry in R-G-B order&lt;br /&gt;
  bytes 796-799  recommended size (bytes) of data frame load buffer&lt;br /&gt;
  bytes 800-803  recommended size (bytes) of unpack buffer for video decoding&lt;br /&gt;
  bytes 804-805  audio sample rate&lt;br /&gt;
  bytes 806-807  audio frame length/sample resolution&lt;br /&gt;
  bytes 808-809  number of sound buffers&lt;br /&gt;
  bytes 810-811  audio flags&lt;br /&gt;
  bytes 812-815  absolute file offset of table of contents&lt;br /&gt;
&lt;br /&gt;
Note that the RGB color components are 6-bit VGA palette components which means that they range from 0..63. The components need to be scaled if they are to be used in rendering typical RGB images where the components are 8 bits.&lt;br /&gt;
&lt;br /&gt;
The newer VMD version may have additional two fields in the header:&lt;br /&gt;
&lt;br /&gt;
  bytes 816-817  external audio codec ID&lt;br /&gt;
  bytes 818-819  audio codec frame size in samples&lt;br /&gt;
&lt;br /&gt;
Even newer VMD version removes palette from the header thus shrinking down header size to 52 (or 0x34) bytes. The order of the other fields remains the same.&lt;br /&gt;
&lt;br /&gt;
A VMD file has a table of contents describing all of the file's block and frame information. The absolute file offset of the table of contents is given in the file header and usually points to the end of the file. The table of contents contains 2 parts: The block offset table and the frame information table. Blocks and frames in VMD are different concepts. A frame contains audio or video. A block contains both a video frame and an audio frame. The block offset table consists of a series of 6-byte records. Each record has the following format:&lt;br /&gt;
&lt;br /&gt;
  bytes 0-1      unknown&lt;br /&gt;
  bytes 2-5      absolute file offset of block&lt;br /&gt;
  bytes 24-27    Indeo-3 compressed (Adibou presente series &amp;quot;IV32&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
The number of entries in this table is specified by bytes 6-7 in the file header. After the block offset table is the frame information table. The frame information table consists of a series of 16-byte records with the following format:&lt;br /&gt;
&lt;br /&gt;
  byte 0         frame data type&lt;br /&gt;
    1 = audio frame&lt;br /&gt;
    2 = video frame&lt;br /&gt;
  byte 1         unknown&lt;br /&gt;
  bytes 2-5      frame data length&lt;br /&gt;
&lt;br /&gt;
  The meaning of the frame's remaining data depends on the frame type.&lt;br /&gt;
  if this is an audio frame:&lt;br /&gt;
    byte 6       audio flags (100 or 0x64 in case of external audio codec)&lt;br /&gt;
    bytes 7-15   unknown (in case of external audio codec bytes 7-10 are frame data length repeated again)&lt;br /&gt;
&lt;br /&gt;
  if this is a video frame:&lt;br /&gt;
    bytes 6-7    left coordinate of video frame&lt;br /&gt;
    bytes 8-9    top coordinate of video frame&lt;br /&gt;
    bytes 10-11  right coordinate of video frame&lt;br /&gt;
    bytes 12-13  bottom coordinate of video frame&lt;br /&gt;
    byte 14      unknown&lt;br /&gt;
    byte 15      bit 1 (byte[15] &amp;amp; 0x02) indicates a new palette&lt;br /&gt;
&lt;br /&gt;
Generally, a frame information record needs to be made available to the audio or video decoder units of a VMD decoding application as the information is relevant to the decoding process.&lt;br /&gt;
&lt;br /&gt;
== Video Format ==&lt;br /&gt;
&lt;br /&gt;
The VMD video coding method uses the Lempel-Ziv (LZ77) algorithm, run length encoding (RLE), and interframe differencing to compress 8-bit data which can be either paletted, 16-bit RGB or 24-bit RGB. Known flavours (bytes 4-5 of the header) are:&lt;br /&gt;
* 1 - old paletted frame&lt;br /&gt;
* 5 - 24-bit video&lt;br /&gt;
* 7 - compressed with [[Indeo 3]]&lt;br /&gt;
* 13 - 16-bit video&lt;br /&gt;
&lt;br /&gt;
VMD video embodies both intraframes (a.k.a. keyframes) and interframes. Intraframes update the entire frame. Interframes only update portions of the frame that have changed from the previous frame. The first video frame of a VMD file is implicitly intracoded (the first frame has to paint the entire viewing area). The successive frames are all intercoded.&lt;br /&gt;
&lt;br /&gt;
The frame record for a video frame specifies the frame coordinates of the rectangular region that will be updated. For example, if the file header specifies that the video is 200 pixels wide and 100 pixels high,&lt;br /&gt;
the left, top, right, and bottom coordinates of the rectangular update region will be 0, 0, 199, and 99, respectively, if the entire frame is to be updated. A subsequent interframe may choose to leave much of the previous frame unchanged and only update the block from (100, 10) -&amp;gt; (150, 40). In this case, the coordinates 100, 10, 150, and 40 would be encoded in the frame record. Depending on VMD version (bytes 2-3 of the header) frame offsets and dimensions may be stored either as bytes (versions 0-1) or as pixels (version 2).&lt;br /&gt;
&lt;br /&gt;
The initial palette for decoding VMD video is transported in the main VMD file header. If bit 1 of frame record byte 15 (byte[15] &amp;amp; 0x02) is set to 1, the compressed video data chunk begins with a new palette. The palette data is transported as 770 bytes. The first byte contains the first palette index to modify. The second byte contains the number of palette entries to change. The remaining 768 bytes are 256 R-G-B palette triplets. Again, these are stored as 6-bit VGA DAC values and should be scaled accordingly.&lt;br /&gt;
&lt;br /&gt;
The compressed video data begins with a byte describing how the data is encoded. The byte specifies the following information:&lt;br /&gt;
&lt;br /&gt;
  bit 7      specifies that data chunk is LZ compressed&lt;br /&gt;
  bits 6-0   specifies 1 of 3 rendering methods&lt;br /&gt;
&lt;br /&gt;
If bit 7 is 1, the data chunk must be passed through the LZ decoder before progressing to the rendering phase. If bit 7 is 0, the data chunk is passed directly to the rendering phase.&lt;br /&gt;
&lt;br /&gt;
The VMD LZ decoding algorithm takes the compressed video buffer (after the coding method byte described above) as input and outputs a buffer of decoded bytes. The output buffer must be as large as indicated in bytes 800-803 of the main VMD header. The VMD LZ decoding algorithm operates as follows:&lt;br /&gt;
&lt;br /&gt;
  allocate a circular queue of 4096 (0x1000) bytes and initialize all&lt;br /&gt;
    elements to 0x20; note that the queue is addressed with a 12-bit&lt;br /&gt;
    number&lt;br /&gt;
  initialize variable dataleft as the first 4 numbers in the block&lt;br /&gt;
  if the next 4 bytes are (0x34 0x12 0x78 0x56)&lt;br /&gt;
    advance stream over the 4 marker bytes&lt;br /&gt;
    initialize queue position (qpos) to 0x111&lt;br /&gt;
    initialize special chain length (speclen) to 18&lt;br /&gt;
  else&lt;br /&gt;
    initialize qpos to 0xFEE&lt;br /&gt;
    initialize speclen to nothing (any value above 18 will suffice in&lt;br /&gt;
      this example)&lt;br /&gt;
  proceed to main decode loop...&lt;br /&gt;
  while there is more data left (dataleft &amp;gt; 0)&lt;br /&gt;
    tag = the next byte in the stream&lt;br /&gt;
    if (tag is 0xFF) and (dataleft &amp;gt; 8)&lt;br /&gt;
      take the next 8 bytes from the stream and place them in both the&lt;br /&gt;
        output buffer and the circular queue&lt;br /&gt;
      subtract 8 from dataleft&lt;br /&gt;
    else&lt;br /&gt;
      foreach bit in tag byte, reading from right -&amp;gt; left&lt;br /&gt;
        if (bit is 1)&lt;br /&gt;
          take the next byte from the stream and place it in both the&lt;br /&gt;
            output buffer and the circular queue&lt;br /&gt;
          decrement dataleft&lt;br /&gt;
        else&lt;br /&gt;
          move a chain of bytes from the circular queue to the output&lt;br /&gt;
          get the length and beginning offset of the chain from the next&lt;br /&gt;
            2 bytes in the stream:&lt;br /&gt;
            byte 0: bits 7-0: lower 8 bits of beginning offset&lt;br /&gt;
            byte 1: bits 7-4: upper 4 bits of beginning offset&lt;br /&gt;
                    bits 3-0: length of chain, minus 3&lt;br /&gt;
          thus, add 3 to the length to obtain the actual length&lt;br /&gt;
          if (length is equal to speclen)&lt;br /&gt;
            length is 18 (max ordinary speclen value) + next byte in&lt;br /&gt;
              stream&lt;br /&gt;
            copy the byte chain from the circular queue to the output;&lt;br /&gt;
              in the process, add the chain back into the queue&lt;br /&gt;
            subtract length from dataleft&lt;br /&gt;
&lt;br /&gt;
There are 3 rendering methods that a frame can use to paint the raw or LZ-decoded data (referred to as the video data buffer) onto the final output frame.&lt;br /&gt;
&lt;br /&gt;
Method 1 iterates through each line in the output frame, as indicated by the dimensions specified in the frame information record. For each line:&lt;br /&gt;
&lt;br /&gt;
  offset = 0&lt;br /&gt;
  repeat&lt;br /&gt;
    length = next byte in video data buffer&lt;br /&gt;
    if (bit 7 of length byte is 1)&lt;br /&gt;
      mask off bit 7 of length and add 1 (length = (length &amp;amp; 0x7F) + 1)&lt;br /&gt;
      copy length bytes from the video data buffer to the output frame&lt;br /&gt;
      advance offset by length&lt;br /&gt;
    else&lt;br /&gt;
      increment length&lt;br /&gt;
      copy length bytes from the same position in the previous frame to&lt;br /&gt;
        the current frame&lt;br /&gt;
  while (offset &amp;lt; frame width)&lt;br /&gt;
&lt;br /&gt;
Method 2 simply copies the entire video data buffer onto the output frame. This is the simplest rendering method, but be sure to take into account the frame's specific decoding dimensions as specified in the frame record.&lt;br /&gt;
&lt;br /&gt;
Method 3 operates just like method 1 except for one small change. When bit 7 of the length byte is 1 and the length byte has been masked and incremented, the next byte in the video data buffer is examined. If the byte is not 0xFF, perform the same copy as in method 1. If the byte is 0xFF, apply a RLE decoding algorithm to unpack the data from the video data buffer into the output frame. The RLE unpacking algorithm operates as follows:&lt;br /&gt;
&lt;br /&gt;
  if the length is odd, copy the next byte from the video data buffer to&lt;br /&gt;
    the output frame and decrement length&lt;br /&gt;
  divide length by 2&lt;br /&gt;
  while (length &amp;gt; 0)&lt;br /&gt;
    fetch the next byte from the video data buffer&lt;br /&gt;
    if the top bit of the byte is 1 (byte &amp;amp; 0x80)&lt;br /&gt;
      drop the top bit of the byte and shift left by 1:&lt;br /&gt;
        byte = (byte &amp;amp; 0x7F) &amp;lt;&amp;lt; 1&lt;br /&gt;
      copy (byte) bytes from video data buffer to output frame&lt;br /&gt;
    else&lt;br /&gt;
      foreach count in byte&lt;br /&gt;
        copy the next 2 bytes from video data buffer to output frame; in&lt;br /&gt;
          other words, bytes A and B from the video data buffer will be&lt;br /&gt;
          repeated n times: ABABABAB...&lt;br /&gt;
&lt;br /&gt;
== Audio Format ==&lt;br /&gt;
&lt;br /&gt;
8-bits audio stored as a raw PCM samples, all 16-bits sound are 2:1 DPCM-encoded. First, you need to ensure VMD contains any sound by checking bit 12 (&amp;amp; 0x1000) of the file header' flags. Non-zero bit indicates file has sound. Fields audio_sample_rate and audio_frame_length contains playback rate and size of single (compressed) sound block respectively. Negative audio frame length used to indicate 16-bits sound data, in this case you need to invert this field to get the actual block length. Audio flags field keeps other important flags: bit 15 (&amp;amp; 0x8000) indicates old-style stereo-sound, while bit 9 (&amp;amp; 0x200) - new stereo sound format (introduced in Shivers 2 game). These formats a little different in the meaning of several fields (one format stores just deltas and another one stores initial sample values in the beginning of every block), making original playback core is not backward compatible - Shivers 2 can not play old videos properly.  Optimal way is check bit 15 first and if it's zero, additionally check bit 9 to determinate number of channels. The main difference between old and new formats - old vmds treat audio frame length field as the number of samples for both channels, but new version - only as number of samples for single channel (i.e. you need to multiply it by 2 for stereo sound). There is also [[IMA ADPCM]] compression signalled by bit 4 (&amp;amp; 0x10) with block data in the following format: 16-bit initial samples for one or two channels, 8-bit step indices and the rest is ADPCM data decoded high nibble first. In case of new VMD format with an external audio codec payloads are decoded with some codec from Lernout&amp;amp;Hauspie StreamTalk family:&lt;br /&gt;
* type 3 --- 15 kbps @ 8kHz&lt;br /&gt;
* type 4 --- 50 kbps @ 22kHz&lt;br /&gt;
* type 5 --- 25 kbps @ 11kHz&lt;br /&gt;
* type 6 --- CELP codec 4.8 kbps @ 8kHz&lt;br /&gt;
Most of these codecs are variable bitrate audio codecs based on MPEG Audio Layer II but without a header and with fixed bit allocation class.&lt;br /&gt;
&lt;br /&gt;
When you encounter frame information record of type 1, proceed to audio decoding. First, analyse frame's audio_flags byte. It may be eiter:&lt;br /&gt;
* 1 - normal sound block&lt;br /&gt;
Decompress single audio block and continue to next frame&lt;br /&gt;
* 2 - multiple sound and silence blocks&lt;br /&gt;
Get next 4 bytes of the frame's data. This is a sound mask bits. Starting from bit 0, each non-zero bit indicates silence block. Zero means normal audio block. Thus, iterate number_of_sound_buffer times to fill chain of sound and/or silence blocks.&lt;br /&gt;
* 3 - single silence block&lt;br /&gt;
Fill whole block with silence.&lt;br /&gt;
&lt;br /&gt;
The decompression scheme is quite trivial. As stated above, it has been used only if file contains 16-bits audio. First, you need to get one or two (depends on number of the channels) initial samples. For mono and new-stereo sound each initial sample is the first word(s) of audio stream data. Old-style stereo sound has no static samples, instead, they are initialized to zero at the beginning of the playback and carried between successive frames. This may cause some difficulties with random seeking over such kind of files. Using these samples, perform decoding of the rest of chunk' bytes using this formula:&lt;br /&gt;
 if code &amp;amp; 0x80  sample = sample - Table[code &amp;amp; 0x7F]&lt;br /&gt;
 else            sample = sample + Table[code &amp;amp; 0x7F]&lt;br /&gt;
Where code is the bytes of packed data. Interleave left-right samples decoding for stereo sound. &lt;br /&gt;
&lt;br /&gt;
The delta table is:&lt;br /&gt;
    0,    8,   16,   32,   48,   64,   80,   96,  112,  128,  144,  160,  176,  192,  208,  224&lt;br /&gt;
  240,  256,  272,  288,  304,  320,  336,  352,  368,  384,  400,  416,  432,  448,  464,  480&lt;br /&gt;
  496,  512,  520,  528,  536,  544,  552,  560,  568,  576,  584,  592,  600,  608,  616,  624&lt;br /&gt;
  632,  640,  648,  656,  664,  672,  680,  688,  696,  704,  712,  720,  728,  736,  744,  752&lt;br /&gt;
  760,  768,  776,  784,  792,  800,  808,  816,  824,  832,  840,  848,  856,  864,  872,  880&lt;br /&gt;
  888,  896,  904,  912,  920,  928,  936,  944,  952,  960,  968,  976,  984,  992, 1000, 1008&lt;br /&gt;
 1016, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728, 1792, 1856, 1920&lt;br /&gt;
 1984, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, 5120, 6144, 7168, 8192,12288,16384&lt;br /&gt;
&lt;br /&gt;
== Games Using VMD ==&lt;br /&gt;
&lt;br /&gt;
These are some of the Sierra/Coktel Vision computer games that are known to use the VMD file format:&lt;br /&gt;
* Coktel Vision:&lt;br /&gt;
** ADI 2&lt;br /&gt;
** ADI 4&lt;br /&gt;
** ADI 5&lt;br /&gt;
** Adibou 1&lt;br /&gt;
** Adibou 2&lt;br /&gt;
** Adibou 3&lt;br /&gt;
** [https://www.mobygames.com/game/71003/adibou-presente-la-magie/ ADIBOU présente la Magie]&lt;br /&gt;
** Adibou présente la Cuisine&lt;br /&gt;
** ADIBOU présente le Dessin&lt;br /&gt;
** Adiboud'chou à la mer&lt;br /&gt;
** Adiboud'chou à la campagne&lt;br /&gt;
** Adiboud'chou dans la jungle et la savane&lt;br /&gt;
** Adiboud'chou sur la banquise&lt;br /&gt;
** [http://www.mobygames.com/game/win3x/bizarre-adventures-of-woodruff-and-the-schnibble The Bizarre Adventures of Woodruff and the Schnibble]&lt;br /&gt;
** [http://www.mobygames.com/game/last-dynasty The Last Dynasty]&lt;br /&gt;
** [https://www.mobygames.com/game/45579/land-of-the-magic-stones/ Land of the Magic Stones]&lt;br /&gt;
** [https://www.mobygames.com/game/184579/playtoons-1-featuring-uncle-archibald/ Playtoons 1]&lt;br /&gt;
** [https://www.mobygames.com/game/185154/playtoons-2-the-case-of-the-counterfeit-collaborator/ Playtoons 2]&lt;br /&gt;
** [https://www.mobygames.com/game/185155/playtoons-3-the-secret-of-the-castle/ Playtoons 3]&lt;br /&gt;
** [https://www.mobygames.com/game/185156/playtoons-4-the-mandarine-prince/ Playtoons 4]&lt;br /&gt;
** [https://www.mobygames.com/game/185157/playtoons-no-5-la-pierre-de-wakan/ Playtoons 5]&lt;br /&gt;
** [https://www.mobygames.com/game/3809/urban-runner/ Urban Runner]&lt;br /&gt;
** Nathan Vacances&lt;br /&gt;
** English Fever&lt;br /&gt;
* Sierra:&lt;br /&gt;
** [http://www.mobygames.com/game/betrayal-in-antara Betrayal In Antara]&lt;br /&gt;
** [http://www.mobygames.com/game/beast-within-a-gabriel-knight-mystery Gabriel Knight 2: The Beast Within]&lt;br /&gt;
** [http://www.mobygames.com/game/leisure-suit-larry-love-for-sail Leisure Suit Larry 7]&lt;br /&gt;
** [http://www.mobygames.com/game/lighthouse-the-dark-being Lighthouse]&lt;br /&gt;
** [http://www.mobygames.com/game/dos/roberta-williams-phantasmagoria Phantasmagoria]&lt;br /&gt;
** [http://www.mobygames.com/game/rama RAMA]&lt;br /&gt;
** [http://www.mobygames.com/game/shivers Shivers]&lt;br /&gt;
** [https://www.mobygames.com/game/665/shivers-two-harvest-of-souls Shivers 2: Harvest of Souls]&lt;br /&gt;
** [http://www.mobygames.com/game/dos/daryl-f-gates-police-quest-swat SWAT]&lt;br /&gt;
** [http://www.mobygames.com/game/torins-passage Torin's Passage]&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=VMD&amp;diff=16101</id>
		<title>VMD</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=VMD&amp;diff=16101"/>
		<updated>2025-12-27T17:09:30Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: add Playtoons 5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''This page is about the VMD format used in Sierra computer games. See the [[Internet Wave]] page for information about a web reference format with the extension VMD.''&lt;br /&gt;
&lt;br /&gt;
''This page is based on the document 'Description of the Sierra Video and Music Data (VMD) Format' by Mike Melanson and Vladimir &amp;quot;VAG&amp;quot; Gneushev at [http://multimedia.cx/vmd-format.txt http://multimedia.cx/vmd-format.txt].''&lt;br /&gt;
''Currently maintained by [https://github.com/BJNFNE BJNFNE]''&lt;br /&gt;
&lt;br /&gt;
* Extension: vmd&lt;br /&gt;
* Company: [[Sierra Entertainment]] (acquired from [[Coktel]])&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/game-formats/sierra-vmd/ http://samples.mplayerhq.hu/game-formats/sierra-vmd/]&lt;br /&gt;
* Samples: {{DexvertSamples|video/sierraVMD}}&lt;br /&gt;
&lt;br /&gt;
VMD is the file extension of a multimedia file format used in a number of [[Sierra Entertainment|Sierra]] CD-ROM computer games. The extension stands for Video and Music Data. The format is most notable for its use in Sierra's beloved 7-CD classic, Phantasmagoria, and is also used in other multimedia-heavy Sierra titles. Newer revisions were also used in Coktel Vision's ADI/Addy series of edutainment games.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
All multi-byte numbers are stored in little-endian format.&lt;br /&gt;
&lt;br /&gt;
A VMD file starts with the following 816- (0x330-)byte header:&lt;br /&gt;
&lt;br /&gt;
  bytes 0-1      length of header, not including this length field; this&lt;br /&gt;
                 length should be 0x32E (814)&lt;br /&gt;
  bytes 2-3      placeholder for VMD handle and some kind of VMD version&lt;br /&gt;
  bytes 4-5      VMD video codec version&lt;br /&gt;
  bytes 6-7      number of blocks in table of contents&lt;br /&gt;
  bytes 8-9      top corner coordinate of video frame&lt;br /&gt;
  bytes 10-11    left corner coordinate of video frame&lt;br /&gt;
  bytes 12-13    width of video frame&lt;br /&gt;
  bytes 14-15    height of video frame&lt;br /&gt;
  bytes 16-17    flags&lt;br /&gt;
  bytes 18-19    frames per block&lt;br /&gt;
  bytes 20-23    absolute file offset of multimedia data&lt;br /&gt;
  bytes 24-27    Indeo-3 compressed (Urban Runner &amp;quot;iv32&amp;quot;)&lt;br /&gt;
  bytes 28-795   256 RGB palette entries, 3 bytes/entry in R-G-B order&lt;br /&gt;
  bytes 796-799  recommended size (bytes) of data frame load buffer&lt;br /&gt;
  bytes 800-803  recommended size (bytes) of unpack buffer for video decoding&lt;br /&gt;
  bytes 804-805  audio sample rate&lt;br /&gt;
  bytes 806-807  audio frame length/sample resolution&lt;br /&gt;
  bytes 808-809  number of sound buffers&lt;br /&gt;
  bytes 810-811  audio flags&lt;br /&gt;
  bytes 812-815  absolute file offset of table of contents&lt;br /&gt;
&lt;br /&gt;
Note that the RGB color components are 6-bit VGA palette components which means that they range from 0..63. The components need to be scaled if they are to be used in rendering typical RGB images where the components are 8 bits.&lt;br /&gt;
&lt;br /&gt;
The newer VMD version may have additional two fields in the header:&lt;br /&gt;
&lt;br /&gt;
  bytes 816-817  external audio codec ID&lt;br /&gt;
  bytes 818-819  audio codec frame size in samples&lt;br /&gt;
&lt;br /&gt;
Even newer VMD version removes palette from the header thus shrinking down header size to 52 (or 0x34) bytes. The order of the other fields remains the same.&lt;br /&gt;
&lt;br /&gt;
A VMD file has a table of contents describing all of the file's block and frame information. The absolute file offset of the table of contents is given in the file header and usually points to the end of the file. The table of contents contains 2 parts: The block offset table and the frame information table. Blocks and frames in VMD are different concepts. A frame contains audio or video. A block contains both a video frame and an audio frame. The block offset table consists of a series of 6-byte records. Each record has the following format:&lt;br /&gt;
&lt;br /&gt;
  bytes 0-1      unknown&lt;br /&gt;
  bytes 2-5      absolute file offset of block&lt;br /&gt;
&lt;br /&gt;
The number of entries in this table is specified by bytes 6-7 in the file header. After the block offset table is the frame information table. The frame information table consists of a series of 16-byte records with the following format:&lt;br /&gt;
&lt;br /&gt;
  byte 0         frame data type&lt;br /&gt;
    1 = audio frame&lt;br /&gt;
    2 = video frame&lt;br /&gt;
  byte 1         unknown&lt;br /&gt;
  bytes 2-5      frame data length&lt;br /&gt;
&lt;br /&gt;
  The meaning of the frame's remaining data depends on the frame type.&lt;br /&gt;
  if this is an audio frame:&lt;br /&gt;
    byte 6       audio flags (100 or 0x64 in case of external audio codec)&lt;br /&gt;
    bytes 7-15   unknown (in case of external audio codec bytes 7-10 are frame data length repeated again)&lt;br /&gt;
&lt;br /&gt;
  if this is a video frame:&lt;br /&gt;
    bytes 6-7    left coordinate of video frame&lt;br /&gt;
    bytes 8-9    top coordinate of video frame&lt;br /&gt;
    bytes 10-11  right coordinate of video frame&lt;br /&gt;
    bytes 12-13  bottom coordinate of video frame&lt;br /&gt;
    byte 14      unknown&lt;br /&gt;
    byte 15      bit 1 (byte[15] &amp;amp; 0x02) indicates a new palette&lt;br /&gt;
&lt;br /&gt;
Generally, a frame information record needs to be made available to the audio or video decoder units of a VMD decoding application as the information is relevant to the decoding process.&lt;br /&gt;
&lt;br /&gt;
== Video Format ==&lt;br /&gt;
&lt;br /&gt;
The VMD video coding method uses the Lempel-Ziv (LZ77) algorithm, run length encoding (RLE), and interframe differencing to compress 8-bit data which can be either paletted, 16-bit RGB or 24-bit RGB. Known flavours (bytes 4-5 of the header) are:&lt;br /&gt;
* 1 - old paletted frame&lt;br /&gt;
* 5 - 24-bit video&lt;br /&gt;
* 7 - compressed with [[Indeo 3]]&lt;br /&gt;
* 13 - 16-bit video&lt;br /&gt;
&lt;br /&gt;
VMD video embodies both intraframes (a.k.a. keyframes) and interframes. Intraframes update the entire frame. Interframes only update portions of the frame that have changed from the previous frame. The first video frame of a VMD file is implicitly intracoded (the first frame has to paint the entire viewing area). The successive frames are all intercoded.&lt;br /&gt;
&lt;br /&gt;
The frame record for a video frame specifies the frame coordinates of the rectangular region that will be updated. For example, if the file header specifies that the video is 200 pixels wide and 100 pixels high,&lt;br /&gt;
the left, top, right, and bottom coordinates of the rectangular update region will be 0, 0, 199, and 99, respectively, if the entire frame is to be updated. A subsequent interframe may choose to leave much of the previous frame unchanged and only update the block from (100, 10) -&amp;gt; (150, 40). In this case, the coordinates 100, 10, 150, and 40 would be encoded in the frame record. Depending on VMD version (bytes 2-3 of the header) frame offsets and dimensions may be stored either as bytes (versions 0-1) or as pixels (version 2).&lt;br /&gt;
&lt;br /&gt;
The initial palette for decoding VMD video is transported in the main VMD file header. If bit 1 of frame record byte 15 (byte[15] &amp;amp; 0x02) is set to 1, the compressed video data chunk begins with a new palette. The palette data is transported as 770 bytes. The first byte contains the first palette index to modify. The second byte contains the number of palette entries to change. The remaining 768 bytes are 256 R-G-B palette triplets. Again, these are stored as 6-bit VGA DAC values and should be scaled accordingly.&lt;br /&gt;
&lt;br /&gt;
The compressed video data begins with a byte describing how the data is encoded. The byte specifies the following information:&lt;br /&gt;
&lt;br /&gt;
  bit 7      specifies that data chunk is LZ compressed&lt;br /&gt;
  bits 6-0   specifies 1 of 3 rendering methods&lt;br /&gt;
&lt;br /&gt;
If bit 7 is 1, the data chunk must be passed through the LZ decoder before progressing to the rendering phase. If bit 7 is 0, the data chunk is passed directly to the rendering phase.&lt;br /&gt;
&lt;br /&gt;
The VMD LZ decoding algorithm takes the compressed video buffer (after the coding method byte described above) as input and outputs a buffer of decoded bytes. The output buffer must be as large as indicated in bytes 800-803 of the main VMD header. The VMD LZ decoding algorithm operates as follows:&lt;br /&gt;
&lt;br /&gt;
  allocate a circular queue of 4096 (0x1000) bytes and initialize all&lt;br /&gt;
    elements to 0x20; note that the queue is addressed with a 12-bit&lt;br /&gt;
    number&lt;br /&gt;
  initialize variable dataleft as the first 4 numbers in the block&lt;br /&gt;
  if the next 4 bytes are (0x34 0x12 0x78 0x56)&lt;br /&gt;
    advance stream over the 4 marker bytes&lt;br /&gt;
    initialize queue position (qpos) to 0x111&lt;br /&gt;
    initialize special chain length (speclen) to 18&lt;br /&gt;
  else&lt;br /&gt;
    initialize qpos to 0xFEE&lt;br /&gt;
    initialize speclen to nothing (any value above 18 will suffice in&lt;br /&gt;
      this example)&lt;br /&gt;
  proceed to main decode loop...&lt;br /&gt;
  while there is more data left (dataleft &amp;gt; 0)&lt;br /&gt;
    tag = the next byte in the stream&lt;br /&gt;
    if (tag is 0xFF) and (dataleft &amp;gt; 8)&lt;br /&gt;
      take the next 8 bytes from the stream and place them in both the&lt;br /&gt;
        output buffer and the circular queue&lt;br /&gt;
      subtract 8 from dataleft&lt;br /&gt;
    else&lt;br /&gt;
      foreach bit in tag byte, reading from right -&amp;gt; left&lt;br /&gt;
        if (bit is 1)&lt;br /&gt;
          take the next byte from the stream and place it in both the&lt;br /&gt;
            output buffer and the circular queue&lt;br /&gt;
          decrement dataleft&lt;br /&gt;
        else&lt;br /&gt;
          move a chain of bytes from the circular queue to the output&lt;br /&gt;
          get the length and beginning offset of the chain from the next&lt;br /&gt;
            2 bytes in the stream:&lt;br /&gt;
            byte 0: bits 7-0: lower 8 bits of beginning offset&lt;br /&gt;
            byte 1: bits 7-4: upper 4 bits of beginning offset&lt;br /&gt;
                    bits 3-0: length of chain, minus 3&lt;br /&gt;
          thus, add 3 to the length to obtain the actual length&lt;br /&gt;
          if (length is equal to speclen)&lt;br /&gt;
            length is 18 (max ordinary speclen value) + next byte in&lt;br /&gt;
              stream&lt;br /&gt;
            copy the byte chain from the circular queue to the output;&lt;br /&gt;
              in the process, add the chain back into the queue&lt;br /&gt;
            subtract length from dataleft&lt;br /&gt;
&lt;br /&gt;
There are 3 rendering methods that a frame can use to paint the raw or LZ-decoded data (referred to as the video data buffer) onto the final output frame.&lt;br /&gt;
&lt;br /&gt;
Method 1 iterates through each line in the output frame, as indicated by the dimensions specified in the frame information record. For each line:&lt;br /&gt;
&lt;br /&gt;
  offset = 0&lt;br /&gt;
  repeat&lt;br /&gt;
    length = next byte in video data buffer&lt;br /&gt;
    if (bit 7 of length byte is 1)&lt;br /&gt;
      mask off bit 7 of length and add 1 (length = (length &amp;amp; 0x7F) + 1)&lt;br /&gt;
      copy length bytes from the video data buffer to the output frame&lt;br /&gt;
      advance offset by length&lt;br /&gt;
    else&lt;br /&gt;
      increment length&lt;br /&gt;
      copy length bytes from the same position in the previous frame to&lt;br /&gt;
        the current frame&lt;br /&gt;
  while (offset &amp;lt; frame width)&lt;br /&gt;
&lt;br /&gt;
Method 2 simply copies the entire video data buffer onto the output frame. This is the simplest rendering method, but be sure to take into account the frame's specific decoding dimensions as specified in the frame record.&lt;br /&gt;
&lt;br /&gt;
Method 3 operates just like method 1 except for one small change. When bit 7 of the length byte is 1 and the length byte has been masked and incremented, the next byte in the video data buffer is examined. If the byte is not 0xFF, perform the same copy as in method 1. If the byte is 0xFF, apply a RLE decoding algorithm to unpack the data from the video data buffer into the output frame. The RLE unpacking algorithm operates as follows:&lt;br /&gt;
&lt;br /&gt;
  if the length is odd, copy the next byte from the video data buffer to&lt;br /&gt;
    the output frame and decrement length&lt;br /&gt;
  divide length by 2&lt;br /&gt;
  while (length &amp;gt; 0)&lt;br /&gt;
    fetch the next byte from the video data buffer&lt;br /&gt;
    if the top bit of the byte is 1 (byte &amp;amp; 0x80)&lt;br /&gt;
      drop the top bit of the byte and shift left by 1:&lt;br /&gt;
        byte = (byte &amp;amp; 0x7F) &amp;lt;&amp;lt; 1&lt;br /&gt;
      copy (byte) bytes from video data buffer to output frame&lt;br /&gt;
    else&lt;br /&gt;
      foreach count in byte&lt;br /&gt;
        copy the next 2 bytes from video data buffer to output frame; in&lt;br /&gt;
          other words, bytes A and B from the video data buffer will be&lt;br /&gt;
          repeated n times: ABABABAB...&lt;br /&gt;
&lt;br /&gt;
== Audio Format ==&lt;br /&gt;
&lt;br /&gt;
8-bits audio stored as a raw PCM samples, all 16-bits sound are 2:1 DPCM-encoded. First, you need to ensure VMD contains any sound by checking bit 12 (&amp;amp; 0x1000) of the file header' flags. Non-zero bit indicates file has sound. Fields audio_sample_rate and audio_frame_length contains playback rate and size of single (compressed) sound block respectively. Negative audio frame length used to indicate 16-bits sound data, in this case you need to invert this field to get the actual block length. Audio flags field keeps other important flags: bit 15 (&amp;amp; 0x8000) indicates old-style stereo-sound, while bit 9 (&amp;amp; 0x200) - new stereo sound format (introduced in Shivers 2 game). These formats a little different in the meaning of several fields (one format stores just deltas and another one stores initial sample values in the beginning of every block), making original playback core is not backward compatible - Shivers 2 can not play old videos properly.  Optimal way is check bit 15 first and if it's zero, additionally check bit 9 to determinate number of channels. The main difference between old and new formats - old vmds treat audio frame length field as the number of samples for both channels, but new version - only as number of samples for single channel (i.e. you need to multiply it by 2 for stereo sound). There is also [[IMA ADPCM]] compression signalled by bit 4 (&amp;amp; 0x10) with block data in the following format: 16-bit initial samples for one or two channels, 8-bit step indices and the rest is ADPCM data decoded high nibble first. In case of new VMD format with an external audio codec payloads are decoded with some codec from Lernout&amp;amp;Hauspie StreamTalk family:&lt;br /&gt;
* type 3 --- 15 kbps @ 8kHz&lt;br /&gt;
* type 4 --- 50 kbps @ 22kHz&lt;br /&gt;
* type 5 --- 25 kbps @ 11kHz&lt;br /&gt;
* type 6 --- CELP codec 4.8 kbps @ 8kHz&lt;br /&gt;
Most of these codecs are variable bitrate audio codecs based on MPEG Audio Layer II but without a header and with fixed bit allocation class.&lt;br /&gt;
&lt;br /&gt;
When you encounter frame information record of type 1, proceed to audio decoding. First, analyse frame's audio_flags byte. It may be eiter:&lt;br /&gt;
* 1 - normal sound block&lt;br /&gt;
Decompress single audio block and continue to next frame&lt;br /&gt;
* 2 - multiple sound and silence blocks&lt;br /&gt;
Get next 4 bytes of the frame's data. This is a sound mask bits. Starting from bit 0, each non-zero bit indicates silence block. Zero means normal audio block. Thus, iterate number_of_sound_buffer times to fill chain of sound and/or silence blocks.&lt;br /&gt;
* 3 - single silence block&lt;br /&gt;
Fill whole block with silence.&lt;br /&gt;
&lt;br /&gt;
The decompression scheme is quite trivial. As stated above, it has been used only if file contains 16-bits audio. First, you need to get one or two (depends on number of the channels) initial samples. For mono and new-stereo sound each initial sample is the first word(s) of audio stream data. Old-style stereo sound has no static samples, instead, they are initialized to zero at the beginning of the playback and carried between successive frames. This may cause some difficulties with random seeking over such kind of files. Using these samples, perform decoding of the rest of chunk' bytes using this formula:&lt;br /&gt;
 if code &amp;amp; 0x80  sample = sample - Table[code &amp;amp; 0x7F]&lt;br /&gt;
 else            sample = sample + Table[code &amp;amp; 0x7F]&lt;br /&gt;
Where code is the bytes of packed data. Interleave left-right samples decoding for stereo sound. &lt;br /&gt;
&lt;br /&gt;
The delta table is:&lt;br /&gt;
    0,    8,   16,   32,   48,   64,   80,   96,  112,  128,  144,  160,  176,  192,  208,  224&lt;br /&gt;
  240,  256,  272,  288,  304,  320,  336,  352,  368,  384,  400,  416,  432,  448,  464,  480&lt;br /&gt;
  496,  512,  520,  528,  536,  544,  552,  560,  568,  576,  584,  592,  600,  608,  616,  624&lt;br /&gt;
  632,  640,  648,  656,  664,  672,  680,  688,  696,  704,  712,  720,  728,  736,  744,  752&lt;br /&gt;
  760,  768,  776,  784,  792,  800,  808,  816,  824,  832,  840,  848,  856,  864,  872,  880&lt;br /&gt;
  888,  896,  904,  912,  920,  928,  936,  944,  952,  960,  968,  976,  984,  992, 1000, 1008&lt;br /&gt;
 1016, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728, 1792, 1856, 1920&lt;br /&gt;
 1984, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, 5120, 6144, 7168, 8192,12288,16384&lt;br /&gt;
&lt;br /&gt;
== Games Using VMD ==&lt;br /&gt;
&lt;br /&gt;
These are some of the Sierra/Coktel Vision computer games that are known to use the VMD file format:&lt;br /&gt;
* Coktel Vision:&lt;br /&gt;
** ADI 2&lt;br /&gt;
** ADI 4&lt;br /&gt;
** ADI 5&lt;br /&gt;
** Adibou 1&lt;br /&gt;
** Adibou 2&lt;br /&gt;
** Adibou 3&lt;br /&gt;
** [https://www.mobygames.com/game/71003/adibou-presente-la-magie/ ADIBOU présente la Magie]&lt;br /&gt;
** Adibou présente la Cuisine&lt;br /&gt;
** ADIBOU présente le Dessin&lt;br /&gt;
** Adiboud'chou à la mer&lt;br /&gt;
** Adiboud'chou à la campagne&lt;br /&gt;
** Adiboud'chou dans la jungle et la savane&lt;br /&gt;
** Adiboud'chou sur la banquise&lt;br /&gt;
** [http://www.mobygames.com/game/win3x/bizarre-adventures-of-woodruff-and-the-schnibble The Bizarre Adventures of Woodruff and the Schnibble]&lt;br /&gt;
** [http://www.mobygames.com/game/last-dynasty The Last Dynasty]&lt;br /&gt;
** [https://www.mobygames.com/game/45579/land-of-the-magic-stones/ Land of the Magic Stones]&lt;br /&gt;
** [https://www.mobygames.com/game/184579/playtoons-1-featuring-uncle-archibald/ Playtoons 1]&lt;br /&gt;
** [https://www.mobygames.com/game/185154/playtoons-2-the-case-of-the-counterfeit-collaborator/ Playtoons 2]&lt;br /&gt;
** [https://www.mobygames.com/game/185155/playtoons-3-the-secret-of-the-castle/ Playtoons 3]&lt;br /&gt;
** [https://www.mobygames.com/game/185156/playtoons-4-the-mandarine-prince/ Playtoons 4]&lt;br /&gt;
** [https://www.mobygames.com/game/185157/playtoons-no-5-la-pierre-de-wakan/ Playtoons 5]&lt;br /&gt;
** [https://www.mobygames.com/game/3809/urban-runner/ Urban Runner]&lt;br /&gt;
** Nathan Vacances&lt;br /&gt;
** English Fever&lt;br /&gt;
* Sierra:&lt;br /&gt;
** [http://www.mobygames.com/game/betrayal-in-antara Betrayal In Antara]&lt;br /&gt;
** [http://www.mobygames.com/game/beast-within-a-gabriel-knight-mystery Gabriel Knight 2: The Beast Within]&lt;br /&gt;
** [http://www.mobygames.com/game/leisure-suit-larry-love-for-sail Leisure Suit Larry 7]&lt;br /&gt;
** [http://www.mobygames.com/game/lighthouse-the-dark-being Lighthouse]&lt;br /&gt;
** [http://www.mobygames.com/game/dos/roberta-williams-phantasmagoria Phantasmagoria]&lt;br /&gt;
** [http://www.mobygames.com/game/rama RAMA]&lt;br /&gt;
** [http://www.mobygames.com/game/shivers Shivers]&lt;br /&gt;
** [https://www.mobygames.com/game/665/shivers-two-harvest-of-souls Shivers 2: Harvest of Souls]&lt;br /&gt;
** [http://www.mobygames.com/game/dos/daryl-f-gates-police-quest-swat SWAT]&lt;br /&gt;
** [http://www.mobygames.com/game/torins-passage Torin's Passage]&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=VMD&amp;diff=16100</id>
		<title>VMD</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=VMD&amp;diff=16100"/>
		<updated>2025-12-26T15:30:40Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: change unknown to Indeo-3 compressed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:''This page is about the VMD format used in Sierra computer games. See the [[Internet Wave]] page for information about a web reference format with the extension VMD.''&lt;br /&gt;
&lt;br /&gt;
''This page is based on the document 'Description of the Sierra Video and Music Data (VMD) Format' by Mike Melanson and Vladimir &amp;quot;VAG&amp;quot; Gneushev at [http://multimedia.cx/vmd-format.txt http://multimedia.cx/vmd-format.txt].''&lt;br /&gt;
''Currently maintained by [https://github.com/BJNFNE BJNFNE]''&lt;br /&gt;
&lt;br /&gt;
* Extension: vmd&lt;br /&gt;
* Company: [[Sierra Entertainment]] (acquired from [[Coktel]])&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/game-formats/sierra-vmd/ http://samples.mplayerhq.hu/game-formats/sierra-vmd/]&lt;br /&gt;
* Samples: {{DexvertSamples|video/sierraVMD}}&lt;br /&gt;
&lt;br /&gt;
VMD is the file extension of a multimedia file format used in a number of [[Sierra Entertainment|Sierra]] CD-ROM computer games. The extension stands for Video and Music Data. The format is most notable for its use in Sierra's beloved 7-CD classic, Phantasmagoria, and is also used in other multimedia-heavy Sierra titles. Newer revisions were also used in Coktel Vision's ADI/Addy series of edutainment games.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
&lt;br /&gt;
All multi-byte numbers are stored in little-endian format.&lt;br /&gt;
&lt;br /&gt;
A VMD file starts with the following 816- (0x330-)byte header:&lt;br /&gt;
&lt;br /&gt;
  bytes 0-1      length of header, not including this length field; this&lt;br /&gt;
                 length should be 0x32E (814)&lt;br /&gt;
  bytes 2-3      placeholder for VMD handle and some kind of VMD version&lt;br /&gt;
  bytes 4-5      VMD video codec version&lt;br /&gt;
  bytes 6-7      number of blocks in table of contents&lt;br /&gt;
  bytes 8-9      top corner coordinate of video frame&lt;br /&gt;
  bytes 10-11    left corner coordinate of video frame&lt;br /&gt;
  bytes 12-13    width of video frame&lt;br /&gt;
  bytes 14-15    height of video frame&lt;br /&gt;
  bytes 16-17    flags&lt;br /&gt;
  bytes 18-19    frames per block&lt;br /&gt;
  bytes 20-23    absolute file offset of multimedia data&lt;br /&gt;
  bytes 24-27    Indeo-3 compressed (Urban Runner &amp;quot;iv32&amp;quot;)&lt;br /&gt;
  bytes 28-795   256 RGB palette entries, 3 bytes/entry in R-G-B order&lt;br /&gt;
  bytes 796-799  recommended size (bytes) of data frame load buffer&lt;br /&gt;
  bytes 800-803  recommended size (bytes) of unpack buffer for video decoding&lt;br /&gt;
  bytes 804-805  audio sample rate&lt;br /&gt;
  bytes 806-807  audio frame length/sample resolution&lt;br /&gt;
  bytes 808-809  number of sound buffers&lt;br /&gt;
  bytes 810-811  audio flags&lt;br /&gt;
  bytes 812-815  absolute file offset of table of contents&lt;br /&gt;
&lt;br /&gt;
Note that the RGB color components are 6-bit VGA palette components which means that they range from 0..63. The components need to be scaled if they are to be used in rendering typical RGB images where the components are 8 bits.&lt;br /&gt;
&lt;br /&gt;
The newer VMD version may have additional two fields in the header:&lt;br /&gt;
&lt;br /&gt;
  bytes 816-817  external audio codec ID&lt;br /&gt;
  bytes 818-819  audio codec frame size in samples&lt;br /&gt;
&lt;br /&gt;
Even newer VMD version removes palette from the header thus shrinking down header size to 52 (or 0x34) bytes. The order of the other fields remains the same.&lt;br /&gt;
&lt;br /&gt;
A VMD file has a table of contents describing all of the file's block and frame information. The absolute file offset of the table of contents is given in the file header and usually points to the end of the file. The table of contents contains 2 parts: The block offset table and the frame information table. Blocks and frames in VMD are different concepts. A frame contains audio or video. A block contains both a video frame and an audio frame. The block offset table consists of a series of 6-byte records. Each record has the following format:&lt;br /&gt;
&lt;br /&gt;
  bytes 0-1      unknown&lt;br /&gt;
  bytes 2-5      absolute file offset of block&lt;br /&gt;
&lt;br /&gt;
The number of entries in this table is specified by bytes 6-7 in the file header. After the block offset table is the frame information table. The frame information table consists of a series of 16-byte records with the following format:&lt;br /&gt;
&lt;br /&gt;
  byte 0         frame data type&lt;br /&gt;
    1 = audio frame&lt;br /&gt;
    2 = video frame&lt;br /&gt;
  byte 1         unknown&lt;br /&gt;
  bytes 2-5      frame data length&lt;br /&gt;
&lt;br /&gt;
  The meaning of the frame's remaining data depends on the frame type.&lt;br /&gt;
  if this is an audio frame:&lt;br /&gt;
    byte 6       audio flags (100 or 0x64 in case of external audio codec)&lt;br /&gt;
    bytes 7-15   unknown (in case of external audio codec bytes 7-10 are frame data length repeated again)&lt;br /&gt;
&lt;br /&gt;
  if this is a video frame:&lt;br /&gt;
    bytes 6-7    left coordinate of video frame&lt;br /&gt;
    bytes 8-9    top coordinate of video frame&lt;br /&gt;
    bytes 10-11  right coordinate of video frame&lt;br /&gt;
    bytes 12-13  bottom coordinate of video frame&lt;br /&gt;
    byte 14      unknown&lt;br /&gt;
    byte 15      bit 1 (byte[15] &amp;amp; 0x02) indicates a new palette&lt;br /&gt;
&lt;br /&gt;
Generally, a frame information record needs to be made available to the audio or video decoder units of a VMD decoding application as the information is relevant to the decoding process.&lt;br /&gt;
&lt;br /&gt;
== Video Format ==&lt;br /&gt;
&lt;br /&gt;
The VMD video coding method uses the Lempel-Ziv (LZ77) algorithm, run length encoding (RLE), and interframe differencing to compress 8-bit data which can be either paletted, 16-bit RGB or 24-bit RGB. Known flavours (bytes 4-5 of the header) are:&lt;br /&gt;
* 1 - old paletted frame&lt;br /&gt;
* 5 - 24-bit video&lt;br /&gt;
* 7 - compressed with [[Indeo 3]]&lt;br /&gt;
* 13 - 16-bit video&lt;br /&gt;
&lt;br /&gt;
VMD video embodies both intraframes (a.k.a. keyframes) and interframes. Intraframes update the entire frame. Interframes only update portions of the frame that have changed from the previous frame. The first video frame of a VMD file is implicitly intracoded (the first frame has to paint the entire viewing area). The successive frames are all intercoded.&lt;br /&gt;
&lt;br /&gt;
The frame record for a video frame specifies the frame coordinates of the rectangular region that will be updated. For example, if the file header specifies that the video is 200 pixels wide and 100 pixels high,&lt;br /&gt;
the left, top, right, and bottom coordinates of the rectangular update region will be 0, 0, 199, and 99, respectively, if the entire frame is to be updated. A subsequent interframe may choose to leave much of the previous frame unchanged and only update the block from (100, 10) -&amp;gt; (150, 40). In this case, the coordinates 100, 10, 150, and 40 would be encoded in the frame record. Depending on VMD version (bytes 2-3 of the header) frame offsets and dimensions may be stored either as bytes (versions 0-1) or as pixels (version 2).&lt;br /&gt;
&lt;br /&gt;
The initial palette for decoding VMD video is transported in the main VMD file header. If bit 1 of frame record byte 15 (byte[15] &amp;amp; 0x02) is set to 1, the compressed video data chunk begins with a new palette. The palette data is transported as 770 bytes. The first byte contains the first palette index to modify. The second byte contains the number of palette entries to change. The remaining 768 bytes are 256 R-G-B palette triplets. Again, these are stored as 6-bit VGA DAC values and should be scaled accordingly.&lt;br /&gt;
&lt;br /&gt;
The compressed video data begins with a byte describing how the data is encoded. The byte specifies the following information:&lt;br /&gt;
&lt;br /&gt;
  bit 7      specifies that data chunk is LZ compressed&lt;br /&gt;
  bits 6-0   specifies 1 of 3 rendering methods&lt;br /&gt;
&lt;br /&gt;
If bit 7 is 1, the data chunk must be passed through the LZ decoder before progressing to the rendering phase. If bit 7 is 0, the data chunk is passed directly to the rendering phase.&lt;br /&gt;
&lt;br /&gt;
The VMD LZ decoding algorithm takes the compressed video buffer (after the coding method byte described above) as input and outputs a buffer of decoded bytes. The output buffer must be as large as indicated in bytes 800-803 of the main VMD header. The VMD LZ decoding algorithm operates as follows:&lt;br /&gt;
&lt;br /&gt;
  allocate a circular queue of 4096 (0x1000) bytes and initialize all&lt;br /&gt;
    elements to 0x20; note that the queue is addressed with a 12-bit&lt;br /&gt;
    number&lt;br /&gt;
  initialize variable dataleft as the first 4 numbers in the block&lt;br /&gt;
  if the next 4 bytes are (0x34 0x12 0x78 0x56)&lt;br /&gt;
    advance stream over the 4 marker bytes&lt;br /&gt;
    initialize queue position (qpos) to 0x111&lt;br /&gt;
    initialize special chain length (speclen) to 18&lt;br /&gt;
  else&lt;br /&gt;
    initialize qpos to 0xFEE&lt;br /&gt;
    initialize speclen to nothing (any value above 18 will suffice in&lt;br /&gt;
      this example)&lt;br /&gt;
  proceed to main decode loop...&lt;br /&gt;
  while there is more data left (dataleft &amp;gt; 0)&lt;br /&gt;
    tag = the next byte in the stream&lt;br /&gt;
    if (tag is 0xFF) and (dataleft &amp;gt; 8)&lt;br /&gt;
      take the next 8 bytes from the stream and place them in both the&lt;br /&gt;
        output buffer and the circular queue&lt;br /&gt;
      subtract 8 from dataleft&lt;br /&gt;
    else&lt;br /&gt;
      foreach bit in tag byte, reading from right -&amp;gt; left&lt;br /&gt;
        if (bit is 1)&lt;br /&gt;
          take the next byte from the stream and place it in both the&lt;br /&gt;
            output buffer and the circular queue&lt;br /&gt;
          decrement dataleft&lt;br /&gt;
        else&lt;br /&gt;
          move a chain of bytes from the circular queue to the output&lt;br /&gt;
          get the length and beginning offset of the chain from the next&lt;br /&gt;
            2 bytes in the stream:&lt;br /&gt;
            byte 0: bits 7-0: lower 8 bits of beginning offset&lt;br /&gt;
            byte 1: bits 7-4: upper 4 bits of beginning offset&lt;br /&gt;
                    bits 3-0: length of chain, minus 3&lt;br /&gt;
          thus, add 3 to the length to obtain the actual length&lt;br /&gt;
          if (length is equal to speclen)&lt;br /&gt;
            length is 18 (max ordinary speclen value) + next byte in&lt;br /&gt;
              stream&lt;br /&gt;
            copy the byte chain from the circular queue to the output;&lt;br /&gt;
              in the process, add the chain back into the queue&lt;br /&gt;
            subtract length from dataleft&lt;br /&gt;
&lt;br /&gt;
There are 3 rendering methods that a frame can use to paint the raw or LZ-decoded data (referred to as the video data buffer) onto the final output frame.&lt;br /&gt;
&lt;br /&gt;
Method 1 iterates through each line in the output frame, as indicated by the dimensions specified in the frame information record. For each line:&lt;br /&gt;
&lt;br /&gt;
  offset = 0&lt;br /&gt;
  repeat&lt;br /&gt;
    length = next byte in video data buffer&lt;br /&gt;
    if (bit 7 of length byte is 1)&lt;br /&gt;
      mask off bit 7 of length and add 1 (length = (length &amp;amp; 0x7F) + 1)&lt;br /&gt;
      copy length bytes from the video data buffer to the output frame&lt;br /&gt;
      advance offset by length&lt;br /&gt;
    else&lt;br /&gt;
      increment length&lt;br /&gt;
      copy length bytes from the same position in the previous frame to&lt;br /&gt;
        the current frame&lt;br /&gt;
  while (offset &amp;lt; frame width)&lt;br /&gt;
&lt;br /&gt;
Method 2 simply copies the entire video data buffer onto the output frame. This is the simplest rendering method, but be sure to take into account the frame's specific decoding dimensions as specified in the frame record.&lt;br /&gt;
&lt;br /&gt;
Method 3 operates just like method 1 except for one small change. When bit 7 of the length byte is 1 and the length byte has been masked and incremented, the next byte in the video data buffer is examined. If the byte is not 0xFF, perform the same copy as in method 1. If the byte is 0xFF, apply a RLE decoding algorithm to unpack the data from the video data buffer into the output frame. The RLE unpacking algorithm operates as follows:&lt;br /&gt;
&lt;br /&gt;
  if the length is odd, copy the next byte from the video data buffer to&lt;br /&gt;
    the output frame and decrement length&lt;br /&gt;
  divide length by 2&lt;br /&gt;
  while (length &amp;gt; 0)&lt;br /&gt;
    fetch the next byte from the video data buffer&lt;br /&gt;
    if the top bit of the byte is 1 (byte &amp;amp; 0x80)&lt;br /&gt;
      drop the top bit of the byte and shift left by 1:&lt;br /&gt;
        byte = (byte &amp;amp; 0x7F) &amp;lt;&amp;lt; 1&lt;br /&gt;
      copy (byte) bytes from video data buffer to output frame&lt;br /&gt;
    else&lt;br /&gt;
      foreach count in byte&lt;br /&gt;
        copy the next 2 bytes from video data buffer to output frame; in&lt;br /&gt;
          other words, bytes A and B from the video data buffer will be&lt;br /&gt;
          repeated n times: ABABABAB...&lt;br /&gt;
&lt;br /&gt;
== Audio Format ==&lt;br /&gt;
&lt;br /&gt;
8-bits audio stored as a raw PCM samples, all 16-bits sound are 2:1 DPCM-encoded. First, you need to ensure VMD contains any sound by checking bit 12 (&amp;amp; 0x1000) of the file header' flags. Non-zero bit indicates file has sound. Fields audio_sample_rate and audio_frame_length contains playback rate and size of single (compressed) sound block respectively. Negative audio frame length used to indicate 16-bits sound data, in this case you need to invert this field to get the actual block length. Audio flags field keeps other important flags: bit 15 (&amp;amp; 0x8000) indicates old-style stereo-sound, while bit 9 (&amp;amp; 0x200) - new stereo sound format (introduced in Shivers 2 game). These formats a little different in the meaning of several fields (one format stores just deltas and another one stores initial sample values in the beginning of every block), making original playback core is not backward compatible - Shivers 2 can not play old videos properly.  Optimal way is check bit 15 first and if it's zero, additionally check bit 9 to determinate number of channels. The main difference between old and new formats - old vmds treat audio frame length field as the number of samples for both channels, but new version - only as number of samples for single channel (i.e. you need to multiply it by 2 for stereo sound). There is also [[IMA ADPCM]] compression signalled by bit 4 (&amp;amp; 0x10) with block data in the following format: 16-bit initial samples for one or two channels, 8-bit step indices and the rest is ADPCM data decoded high nibble first. In case of new VMD format with an external audio codec payloads are decoded with some codec from Lernout&amp;amp;Hauspie StreamTalk family:&lt;br /&gt;
* type 3 --- 15 kbps @ 8kHz&lt;br /&gt;
* type 4 --- 50 kbps @ 22kHz&lt;br /&gt;
* type 5 --- 25 kbps @ 11kHz&lt;br /&gt;
* type 6 --- CELP codec 4.8 kbps @ 8kHz&lt;br /&gt;
Most of these codecs are variable bitrate audio codecs based on MPEG Audio Layer II but without a header and with fixed bit allocation class.&lt;br /&gt;
&lt;br /&gt;
When you encounter frame information record of type 1, proceed to audio decoding. First, analyse frame's audio_flags byte. It may be eiter:&lt;br /&gt;
* 1 - normal sound block&lt;br /&gt;
Decompress single audio block and continue to next frame&lt;br /&gt;
* 2 - multiple sound and silence blocks&lt;br /&gt;
Get next 4 bytes of the frame's data. This is a sound mask bits. Starting from bit 0, each non-zero bit indicates silence block. Zero means normal audio block. Thus, iterate number_of_sound_buffer times to fill chain of sound and/or silence blocks.&lt;br /&gt;
* 3 - single silence block&lt;br /&gt;
Fill whole block with silence.&lt;br /&gt;
&lt;br /&gt;
The decompression scheme is quite trivial. As stated above, it has been used only if file contains 16-bits audio. First, you need to get one or two (depends on number of the channels) initial samples. For mono and new-stereo sound each initial sample is the first word(s) of audio stream data. Old-style stereo sound has no static samples, instead, they are initialized to zero at the beginning of the playback and carried between successive frames. This may cause some difficulties with random seeking over such kind of files. Using these samples, perform decoding of the rest of chunk' bytes using this formula:&lt;br /&gt;
 if code &amp;amp; 0x80  sample = sample - Table[code &amp;amp; 0x7F]&lt;br /&gt;
 else            sample = sample + Table[code &amp;amp; 0x7F]&lt;br /&gt;
Where code is the bytes of packed data. Interleave left-right samples decoding for stereo sound. &lt;br /&gt;
&lt;br /&gt;
The delta table is:&lt;br /&gt;
    0,    8,   16,   32,   48,   64,   80,   96,  112,  128,  144,  160,  176,  192,  208,  224&lt;br /&gt;
  240,  256,  272,  288,  304,  320,  336,  352,  368,  384,  400,  416,  432,  448,  464,  480&lt;br /&gt;
  496,  512,  520,  528,  536,  544,  552,  560,  568,  576,  584,  592,  600,  608,  616,  624&lt;br /&gt;
  632,  640,  648,  656,  664,  672,  680,  688,  696,  704,  712,  720,  728,  736,  744,  752&lt;br /&gt;
  760,  768,  776,  784,  792,  800,  808,  816,  824,  832,  840,  848,  856,  864,  872,  880&lt;br /&gt;
  888,  896,  904,  912,  920,  928,  936,  944,  952,  960,  968,  976,  984,  992, 1000, 1008&lt;br /&gt;
 1016, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728, 1792, 1856, 1920&lt;br /&gt;
 1984, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, 5120, 6144, 7168, 8192,12288,16384&lt;br /&gt;
&lt;br /&gt;
== Games Using VMD ==&lt;br /&gt;
&lt;br /&gt;
These are some of the Sierra/Coktel Vision computer games that are known to use the VMD file format:&lt;br /&gt;
* Coktel Vision:&lt;br /&gt;
** ADI 2&lt;br /&gt;
** ADI 4&lt;br /&gt;
** ADI 5&lt;br /&gt;
** Adibou 1&lt;br /&gt;
** Adibou 2&lt;br /&gt;
** Adibou 3&lt;br /&gt;
** [https://www.mobygames.com/game/71003/adibou-presente-la-magie/ ADIBOU présente la Magie]&lt;br /&gt;
** Adibou présente la Cuisine&lt;br /&gt;
** ADIBOU présente le Dessin&lt;br /&gt;
** Adiboud'chou à la mer&lt;br /&gt;
** Adiboud'chou à la campagne&lt;br /&gt;
** Adiboud'chou dans la jungle et la savane&lt;br /&gt;
** Adiboud'chou sur la banquise&lt;br /&gt;
** [http://www.mobygames.com/game/win3x/bizarre-adventures-of-woodruff-and-the-schnibble The Bizarre Adventures of Woodruff and the Schnibble]&lt;br /&gt;
** [http://www.mobygames.com/game/last-dynasty The Last Dynasty]&lt;br /&gt;
** [https://www.mobygames.com/game/45579/land-of-the-magic-stones/ Land of the Magic Stones]&lt;br /&gt;
** [https://www.mobygames.com/game/184579/playtoons-1-featuring-uncle-archibald/ Playtoons 1]&lt;br /&gt;
** [https://www.mobygames.com/game/185154/playtoons-2-the-case-of-the-counterfeit-collaborator/ Playtoons 2]&lt;br /&gt;
** [https://www.mobygames.com/game/185155/playtoons-3-the-secret-of-the-castle/ Playtoons 3]&lt;br /&gt;
** [https://www.mobygames.com/game/185156/playtoons-4-the-mandarine-prince/ Playtoons 4]&lt;br /&gt;
** [https://www.mobygames.com/game/3809/urban-runner/ Urban Runner]&lt;br /&gt;
** Nathan Vacances&lt;br /&gt;
** English Fever&lt;br /&gt;
* Sierra:&lt;br /&gt;
** [http://www.mobygames.com/game/betrayal-in-antara Betrayal In Antara]&lt;br /&gt;
** [http://www.mobygames.com/game/beast-within-a-gabriel-knight-mystery Gabriel Knight 2: The Beast Within]&lt;br /&gt;
** [http://www.mobygames.com/game/leisure-suit-larry-love-for-sail Leisure Suit Larry 7]&lt;br /&gt;
** [http://www.mobygames.com/game/lighthouse-the-dark-being Lighthouse]&lt;br /&gt;
** [http://www.mobygames.com/game/dos/roberta-williams-phantasmagoria Phantasmagoria]&lt;br /&gt;
** [http://www.mobygames.com/game/rama RAMA]&lt;br /&gt;
** [http://www.mobygames.com/game/shivers Shivers]&lt;br /&gt;
** [https://www.mobygames.com/game/665/shivers-two-harvest-of-souls Shivers 2: Harvest of Souls]&lt;br /&gt;
** [http://www.mobygames.com/game/dos/daryl-f-gates-police-quest-swat SWAT]&lt;br /&gt;
** [http://www.mobygames.com/game/torins-passage Torin's Passage]&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/CNCSA&amp;diff=16077</id>
		<title>Engines/CNCSA</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/CNCSA&amp;diff=16077"/>
		<updated>2025-08-09T20:01:49Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* CNCSA32.DLL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CNCSA is an Game engine made in the year 1996.&lt;br /&gt;
&lt;br /&gt;
* CNCSA stands for Click &amp;amp; Create - Stand alone application.&lt;br /&gt;
* CNCSA was made by Europress Software.&lt;br /&gt;
* The engine was used so far known for the ADI 4 / 5 mini games which could get unlocked while solving excercises.&lt;br /&gt;
&lt;br /&gt;
== Games using this engine==&lt;br /&gt;
* BreakTime (2.97)&lt;br /&gt;
* Jet Fighter&lt;br /&gt;
* Jupiter&lt;br /&gt;
* Memory&lt;br /&gt;
* Medor&lt;br /&gt;
* Little Billard&lt;br /&gt;
* STOCKAR'96 (v2.01b)&lt;br /&gt;
* Rallygo?&lt;br /&gt;
* Electron&lt;br /&gt;
* Des Dalles&lt;br /&gt;
* Athletics (v1.00)&lt;br /&gt;
* Row (v1.00)&lt;br /&gt;
* Push &amp;amp; Pusher (v1.00)&lt;br /&gt;
* Gems (v1.00)&lt;br /&gt;
* Fuzzy (v1.00)&lt;br /&gt;
* Escape (v1.00)&lt;br /&gt;
* The Diamond (v1.00)&lt;br /&gt;
* CAR 97 (v1.00)&lt;br /&gt;
* Sticky Ballz (v1.00)&lt;br /&gt;
* Jumping Toon (v1.00)&lt;br /&gt;
&lt;br /&gt;
== Game executable versions ==&lt;br /&gt;
* 1.4.1.34&lt;br /&gt;
* 1.03&lt;br /&gt;
&lt;br /&gt;
== CNCSA32.DLL ==&lt;br /&gt;
* CNCSA32.DLL is used for the graphics libary&lt;br /&gt;
* Versions: 1.1.1.24&lt;br /&gt;
* Used formats: bmp, dib, rle, pcx, .gif, lbm, ,iff, .fli, .flc&lt;br /&gt;
&lt;br /&gt;
== CCA File Structure ==&lt;br /&gt;
* CCA stands for Click &amp;amp; Create Archive&lt;br /&gt;
* first 4 byte are for compression which was used? 'PAME'&lt;br /&gt;
* next 15 bytes there is present the Game name.&lt;br /&gt;
* After that the next 4 bytes is the Game version&lt;br /&gt;
&lt;br /&gt;
== DAT File Format==&lt;br /&gt;
* DAT contains the text for the various languages in [Sections]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/CNCSA&amp;diff=16076</id>
		<title>Engines/CNCSA</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/CNCSA&amp;diff=16076"/>
		<updated>2025-08-09T20:01:26Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CNCSA is an Game engine made in the year 1996.&lt;br /&gt;
&lt;br /&gt;
* CNCSA stands for Click &amp;amp; Create - Stand alone application.&lt;br /&gt;
* CNCSA was made by Europress Software.&lt;br /&gt;
* The engine was used so far known for the ADI 4 / 5 mini games which could get unlocked while solving excercises.&lt;br /&gt;
&lt;br /&gt;
== Games using this engine==&lt;br /&gt;
* BreakTime (2.97)&lt;br /&gt;
* Jet Fighter&lt;br /&gt;
* Jupiter&lt;br /&gt;
* Memory&lt;br /&gt;
* Medor&lt;br /&gt;
* Little Billard&lt;br /&gt;
* STOCKAR'96 (v2.01b)&lt;br /&gt;
* Rallygo?&lt;br /&gt;
* Electron&lt;br /&gt;
* Des Dalles&lt;br /&gt;
* Athletics (v1.00)&lt;br /&gt;
* Row (v1.00)&lt;br /&gt;
* Push &amp;amp; Pusher (v1.00)&lt;br /&gt;
* Gems (v1.00)&lt;br /&gt;
* Fuzzy (v1.00)&lt;br /&gt;
* Escape (v1.00)&lt;br /&gt;
* The Diamond (v1.00)&lt;br /&gt;
* CAR 97 (v1.00)&lt;br /&gt;
* Sticky Ballz (v1.00)&lt;br /&gt;
* Jumping Toon (v1.00)&lt;br /&gt;
&lt;br /&gt;
== Game executable versions ==&lt;br /&gt;
* 1.4.1.34&lt;br /&gt;
* 1.03&lt;br /&gt;
&lt;br /&gt;
== CNCSA32.DLL ==&lt;br /&gt;
* CNCSA32.DLL is used for the graphics libary&lt;br /&gt;
* Versions: 1.1.1.24&lt;br /&gt;
* Used formats: bmp, dib, rle, pcx,.gif, lbm, ,iff, .fli, .flc&lt;br /&gt;
&lt;br /&gt;
== CCA File Structure ==&lt;br /&gt;
* CCA stands for Click &amp;amp; Create Archive&lt;br /&gt;
* first 4 byte are for compression which was used? 'PAME'&lt;br /&gt;
* next 15 bytes there is present the Game name.&lt;br /&gt;
* After that the next 4 bytes is the Game version&lt;br /&gt;
&lt;br /&gt;
== DAT File Format==&lt;br /&gt;
* DAT contains the text for the various languages in [Sections]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/CNCSA&amp;diff=16075</id>
		<title>Engines/CNCSA</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/CNCSA&amp;diff=16075"/>
		<updated>2025-08-09T19:59:58Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* CCA File Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CNCSA is an Game engine made in the year 1996.&lt;br /&gt;
&lt;br /&gt;
* CNCSA stands for Click &amp;amp; Create - Stand alone application.&lt;br /&gt;
* CNCSA was made by Europress Software.&lt;br /&gt;
* The engine was used so far known for the ADI 4 / 5 mini games which could get unlocked while solving excercises.&lt;br /&gt;
&lt;br /&gt;
== Games using this engine==&lt;br /&gt;
* BreakTime (2.97)&lt;br /&gt;
* Jet Fighter&lt;br /&gt;
* Jupiter&lt;br /&gt;
* Memory&lt;br /&gt;
* Medor&lt;br /&gt;
* Little Billard&lt;br /&gt;
* STOCKAR'96 (v2.01b)&lt;br /&gt;
* Rallygo?&lt;br /&gt;
* Electron&lt;br /&gt;
* Des Dalles&lt;br /&gt;
* Athletics (v1.00)&lt;br /&gt;
* Row (v1.00)&lt;br /&gt;
* Push &amp;amp; Pusher (v1.00)&lt;br /&gt;
* Gems (v1.00)&lt;br /&gt;
* Fuzzy (v1.00)&lt;br /&gt;
* Escape (v1.00)&lt;br /&gt;
* The Diamond (v1.00)&lt;br /&gt;
* CAR 97 (v1.00)&lt;br /&gt;
* Sticky Ballz (v1.00)&lt;br /&gt;
* Jumping Toon (v1.00)&lt;br /&gt;
&lt;br /&gt;
== Game executable versions ==&lt;br /&gt;
* 1.4.1.34&lt;br /&gt;
* 1.03&lt;br /&gt;
&lt;br /&gt;
== CNCSA32.DLL ==&lt;br /&gt;
* CNCSA32.DLL is used for the graphics libary&lt;br /&gt;
* Versions: 1.1.1.24&lt;br /&gt;
&lt;br /&gt;
== CCA File Structure ==&lt;br /&gt;
* CCA stands for Click &amp;amp; Create Archive&lt;br /&gt;
* first 4 byte are for compression which was used? 'PAME'&lt;br /&gt;
* next 15 bytes there is present the Game name.&lt;br /&gt;
* After that the next 4 bytes is the Game version&lt;br /&gt;
&lt;br /&gt;
== DAT File Format==&lt;br /&gt;
* DAT contains the text for the various languages in [Sections]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/CNCSA&amp;diff=16074</id>
		<title>Engines/CNCSA</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/CNCSA&amp;diff=16074"/>
		<updated>2025-08-09T19:50:40Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: add DAT&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CNCSA is an Game engine made in the year 1996.&lt;br /&gt;
&lt;br /&gt;
* CNCSA stands for Click &amp;amp; Create - Stand alone application.&lt;br /&gt;
* CNCSA was made by Europress Software.&lt;br /&gt;
* The engine was used so far known for the ADI 4 / 5 mini games which could get unlocked while solving excercises.&lt;br /&gt;
&lt;br /&gt;
== Games using this engine==&lt;br /&gt;
* BreakTime (2.97)&lt;br /&gt;
* Jet Fighter&lt;br /&gt;
* Jupiter&lt;br /&gt;
* Memory&lt;br /&gt;
* Medor&lt;br /&gt;
* Little Billard&lt;br /&gt;
* STOCKAR'96 (v2.01b)&lt;br /&gt;
* Rallygo?&lt;br /&gt;
* Electron&lt;br /&gt;
* Des Dalles&lt;br /&gt;
* Athletics (v1.00)&lt;br /&gt;
* Row (v1.00)&lt;br /&gt;
* Push &amp;amp; Pusher (v1.00)&lt;br /&gt;
* Gems (v1.00)&lt;br /&gt;
* Fuzzy (v1.00)&lt;br /&gt;
* Escape (v1.00)&lt;br /&gt;
* The Diamond (v1.00)&lt;br /&gt;
* CAR 97 (v1.00)&lt;br /&gt;
* Sticky Ballz (v1.00)&lt;br /&gt;
* Jumping Toon (v1.00)&lt;br /&gt;
&lt;br /&gt;
== Game executable versions ==&lt;br /&gt;
* 1.4.1.34&lt;br /&gt;
* 1.03&lt;br /&gt;
&lt;br /&gt;
== CNCSA32.DLL ==&lt;br /&gt;
* CNCSA32.DLL is used for the graphics libary&lt;br /&gt;
* Versions: 1.1.1.24&lt;br /&gt;
&lt;br /&gt;
== CCA File Structure ==&lt;br /&gt;
* first 4 byte are for compression which was used? 'PAME'&lt;br /&gt;
* next 15 bytes there is present the Game name.&lt;br /&gt;
* After that the next 4 bytes is the Game version&lt;br /&gt;
&lt;br /&gt;
== DAT File Format==&lt;br /&gt;
* DAT contains the text for the various languages in [Sections]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Games/Connect_4&amp;diff=16073</id>
		<title>Games/Connect 4</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Games/Connect_4&amp;diff=16073"/>
		<updated>2025-08-09T15:02:25Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: Created page with &amp;quot;Connect 4 was written in Visual Basic 4.0   == DLL's == Connect 4 had multiple DLL's, Those were added to the Game's directory to be playable out of the box. * KERNEL32.DLL * MSVCRT40.DLL (4.0) * USER32.DLL * VB40032.DLL (4.0 x86)  == HLP == * These are the manuals in various Languages to understand how the Game works.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Connect 4 was written in Visual Basic 4.0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== DLL's ==&lt;br /&gt;
Connect 4 had multiple DLL's, Those were added to the Game's directory to be playable out of the box.&lt;br /&gt;
* KERNEL32.DLL&lt;br /&gt;
* MSVCRT40.DLL (4.0)&lt;br /&gt;
* USER32.DLL&lt;br /&gt;
* VB40032.DLL (4.0 x86)&lt;br /&gt;
&lt;br /&gt;
== HLP ==&lt;br /&gt;
* These are the manuals in various Languages to understand how the Game works.&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16047</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16047"/>
		<updated>2025-05-25T15:30:56Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: add more infos about DOK File Format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;br /&gt;
* Captain Gysi und das Raumschiff Bonn&lt;br /&gt;
* Skyworker&lt;br /&gt;
* Mr. Clean&lt;br /&gt;
* Bi-Fi Roll Action in Hollywood&lt;br /&gt;
&lt;br /&gt;
== PSM4CFG ==&lt;br /&gt;
* Is the Configuration program for the PSM Soundsystem.&lt;br /&gt;
* Version 4.00&lt;br /&gt;
&lt;br /&gt;
== XP00 ==&lt;br /&gt;
* Starts the Game normal.&lt;br /&gt;
&lt;br /&gt;
== XP01 ==&lt;br /&gt;
* Starts directly into the Game and skips Intro. And goes straight into the Game menu.&lt;br /&gt;
&lt;br /&gt;
== XP02 ==&lt;br /&gt;
* Is an Textviewer to view Text of an File.&lt;br /&gt;
* Usage: XP02.EXE EXAMPLE.TXT&lt;br /&gt;
&lt;br /&gt;
== DOK File Format ==&lt;br /&gt;
* DOK files are Documents&lt;br /&gt;
* Used by multiple Art Department games&lt;br /&gt;
* INFO.BAT relies on INFO.DOK&lt;br /&gt;
&lt;br /&gt;
== SAV File Format ==&lt;br /&gt;
* There are stored the Savegame.&lt;br /&gt;
* Player name is there stored in plain text.&lt;br /&gt;
&lt;br /&gt;
== P2L File Format ==&lt;br /&gt;
* P2L is an compressed Archive for the PSM Soundsystem&lt;br /&gt;
* Signature: PSMLST PSM 2.00&lt;br /&gt;
&lt;br /&gt;
== GF File Format ==&lt;br /&gt;
* GF Files have GF0 or GF1 extension.&lt;br /&gt;
* Signature for all GF Files: GGFX&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=Palladix Palladix]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=PMA Palladix Music AdLib]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_input_zxtune Foo Input Zxtune]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_openmpt54 Foo OpenMPT54]&lt;br /&gt;
* [https://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Components/DEAF_Module_Decoder_(foo_deaf) DEAF Module Decoder]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=P2L P2L]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16046</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16046"/>
		<updated>2025-05-25T15:29:22Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* File Formats ( */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;br /&gt;
* Captain Gysi und das Raumschiff Bonn&lt;br /&gt;
* Skyworker&lt;br /&gt;
* Mr. Clean&lt;br /&gt;
* Bi-Fi Roll Action in Hollywood&lt;br /&gt;
&lt;br /&gt;
== PSM4CFG ==&lt;br /&gt;
* Is the Configuration program for the PSM Soundsystem.&lt;br /&gt;
* Version 4.00&lt;br /&gt;
&lt;br /&gt;
== XP00 ==&lt;br /&gt;
* Starts the Game normal.&lt;br /&gt;
&lt;br /&gt;
== XP01 ==&lt;br /&gt;
* Starts directly into the Game and skips Intro. And goes straight into the Game menu.&lt;br /&gt;
&lt;br /&gt;
== XP02 ==&lt;br /&gt;
* Is an Textviewer to view Text of an File.&lt;br /&gt;
* Usage: XP02.EXE EXAMPLE.TXT&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
* DOK (Documents)&lt;br /&gt;
&lt;br /&gt;
== SAV File Format ==&lt;br /&gt;
* There are stored the Savegame.&lt;br /&gt;
* Player name is there stored in plain text.&lt;br /&gt;
&lt;br /&gt;
== P2L File Format ==&lt;br /&gt;
* P2L is an compressed Archive for the PSM Soundsystem&lt;br /&gt;
* Signature: PSMLST PSM 2.00&lt;br /&gt;
&lt;br /&gt;
== GF File Format ==&lt;br /&gt;
* GF Files have GF0 or GF1 extension.&lt;br /&gt;
* Signature for all GF Files: GGFX&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=Palladix Palladix]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=PMA Palladix Music AdLib]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_input_zxtune Foo Input Zxtune]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_openmpt54 Foo OpenMPT54]&lt;br /&gt;
* [https://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Components/DEAF_Module_Decoder_(foo_deaf) DEAF Module Decoder]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=P2L P2L]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16045</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16045"/>
		<updated>2025-05-25T15:29:11Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;br /&gt;
* Captain Gysi und das Raumschiff Bonn&lt;br /&gt;
* Skyworker&lt;br /&gt;
* Mr. Clean&lt;br /&gt;
* Bi-Fi Roll Action in Hollywood&lt;br /&gt;
&lt;br /&gt;
== PSM4CFG ==&lt;br /&gt;
* Is the Configuration program for the PSM Soundsystem.&lt;br /&gt;
* Version 4.00&lt;br /&gt;
&lt;br /&gt;
== XP00 ==&lt;br /&gt;
* Starts the Game normal.&lt;br /&gt;
&lt;br /&gt;
== XP01 ==&lt;br /&gt;
* Starts directly into the Game and skips Intro. And goes straight into the Game menu.&lt;br /&gt;
&lt;br /&gt;
== XP02 ==&lt;br /&gt;
* Is an Textviewer to view Text of an File.&lt;br /&gt;
* Usage: XP02.EXE EXAMPLE.TXT&lt;br /&gt;
&lt;br /&gt;
== File Formats ( ==&lt;br /&gt;
* DOK (Documents)&lt;br /&gt;
&lt;br /&gt;
== SAV File Format ==&lt;br /&gt;
* There are stored the Savegame.&lt;br /&gt;
* Player name is there stored in plain text.&lt;br /&gt;
&lt;br /&gt;
== P2L File Format ==&lt;br /&gt;
* P2L is an compressed Archive for the PSM Soundsystem&lt;br /&gt;
* Signature: PSMLST PSM 2.00&lt;br /&gt;
&lt;br /&gt;
== GF File Format ==&lt;br /&gt;
* GF Files have GF0 or GF1 extension.&lt;br /&gt;
* Signature for all GF Files: GGFX&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=Palladix Palladix]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=PMA Palladix Music AdLib]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_input_zxtune Foo Input Zxtune]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_openmpt54 Foo OpenMPT54]&lt;br /&gt;
* [https://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Components/DEAF_Module_Decoder_(foo_deaf) DEAF Module Decoder]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=P2L P2L]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16044</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16044"/>
		<updated>2025-05-24T18:37:01Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* Games using this Engine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;br /&gt;
* Captain Gysi und das Raumschiff Bonn&lt;br /&gt;
* Skyworker&lt;br /&gt;
* Mr. Clean&lt;br /&gt;
* Bi-Fi Roll Action in Hollywood&lt;br /&gt;
&lt;br /&gt;
== PSM4CFG ==&lt;br /&gt;
* Is the Configuration program for the PSM Soundsystem.&lt;br /&gt;
* Version 4.00&lt;br /&gt;
&lt;br /&gt;
== XP00 ==&lt;br /&gt;
* Starts the Game normal.&lt;br /&gt;
&lt;br /&gt;
== XP01 ==&lt;br /&gt;
* Starts directly into the Game and skips Intro. And goes straight into the Game menu.&lt;br /&gt;
&lt;br /&gt;
== XP02 ==&lt;br /&gt;
* Is an Textviewer to view Text of an File.&lt;br /&gt;
* Usage: XP02.EXE EXAMPLE.TXT&lt;br /&gt;
&lt;br /&gt;
== SAV File Format ==&lt;br /&gt;
* There are stored the Savegame.&lt;br /&gt;
* Player name is there stored in plain text.&lt;br /&gt;
&lt;br /&gt;
== P2L File Format ==&lt;br /&gt;
* P2L is an compressed Archive for the PSM Soundsystem&lt;br /&gt;
* Signature: PSMLST PSM 2.00&lt;br /&gt;
&lt;br /&gt;
== GF File Format ==&lt;br /&gt;
* GF Files have GF0 or GF1 extension.&lt;br /&gt;
* Signature for all GF Files: GGFX&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=Palladix Palladix]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=PMA Palladix Music AdLib]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_input_zxtune Foo Input Zxtune]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_openmpt54 Foo OpenMPT54]&lt;br /&gt;
* [https://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Components/DEAF_Module_Decoder_(foo_deaf) DEAF Module Decoder]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=P2L P2L]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16043</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16043"/>
		<updated>2025-05-24T18:30:28Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;br /&gt;
* Captain Gysi und das Raumschiff Bonn&lt;br /&gt;
* Skyworker&lt;br /&gt;
* Mr. Clean&lt;br /&gt;
&lt;br /&gt;
== PSM4CFG ==&lt;br /&gt;
* Is the Configuration program for the PSM Soundsystem.&lt;br /&gt;
* Version 4.00&lt;br /&gt;
&lt;br /&gt;
== XP00 ==&lt;br /&gt;
* Starts the Game normal.&lt;br /&gt;
&lt;br /&gt;
== XP01 ==&lt;br /&gt;
* Starts directly into the Game and skips Intro. And goes straight into the Game menu.&lt;br /&gt;
&lt;br /&gt;
== XP02 ==&lt;br /&gt;
* Is an Textviewer to view Text of an File.&lt;br /&gt;
* Usage: XP02.EXE EXAMPLE.TXT&lt;br /&gt;
&lt;br /&gt;
== SAV File Format ==&lt;br /&gt;
* There are stored the Savegame.&lt;br /&gt;
* Player name is there stored in plain text.&lt;br /&gt;
&lt;br /&gt;
== P2L File Format ==&lt;br /&gt;
* P2L is an compressed Archive for the PSM Soundsystem&lt;br /&gt;
* Signature: PSMLST PSM 2.00&lt;br /&gt;
&lt;br /&gt;
== GF File Format ==&lt;br /&gt;
* GF Files have GF0 or GF1 extension.&lt;br /&gt;
* Signature for all GF Files: GGFX&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=Palladix Palladix]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=PMA Palladix Music AdLib]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_input_zxtune Foo Input Zxtune]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_openmpt54 Foo OpenMPT54]&lt;br /&gt;
* [https://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Components/DEAF_Module_Decoder_(foo_deaf) DEAF Module Decoder]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=P2L P2L]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16042</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16042"/>
		<updated>2025-05-24T18:09:54Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* External References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;br /&gt;
* Captain Gysi und das Raumschiff Bonn&lt;br /&gt;
* Skyworker&lt;br /&gt;
&lt;br /&gt;
== PSM4CFG ==&lt;br /&gt;
* Is the Configuration program for the PSM Soundsystem.&lt;br /&gt;
* Version 4.00&lt;br /&gt;
&lt;br /&gt;
== XP00 ==&lt;br /&gt;
* Starts the Game normal.&lt;br /&gt;
&lt;br /&gt;
== XP01 ==&lt;br /&gt;
* Starts directly into the Game and skips Intro. And goes straight into the Game menu.&lt;br /&gt;
&lt;br /&gt;
== XP02 ==&lt;br /&gt;
* Is an Textviewer to view Text of an File.&lt;br /&gt;
* Usage: XP02.EXE EXAMPLE.TXT&lt;br /&gt;
&lt;br /&gt;
== SAV File Format ==&lt;br /&gt;
* There are stored the Savegame.&lt;br /&gt;
* Player name is there stored in plain text.&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=Palladix Palladix]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=PMA Palladix Music AdLib]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_input_zxtune Foo Input Zxtune]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_openmpt54 Foo OpenMPT54]&lt;br /&gt;
* [https://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Components/DEAF_Module_Decoder_(foo_deaf) DEAF Module Decoder]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=P2L P2L]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16041</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16041"/>
		<updated>2025-05-24T18:07:48Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* Games using this Engine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;br /&gt;
* Captain Gysi und das Raumschiff Bonn&lt;br /&gt;
* Skyworker&lt;br /&gt;
&lt;br /&gt;
== PSM4CFG ==&lt;br /&gt;
* Is the Configuration program for the PSM Soundsystem.&lt;br /&gt;
* Version 4.00&lt;br /&gt;
&lt;br /&gt;
== XP00 ==&lt;br /&gt;
* Starts the Game normal.&lt;br /&gt;
&lt;br /&gt;
== XP01 ==&lt;br /&gt;
* Starts directly into the Game and skips Intro. And goes straight into the Game menu.&lt;br /&gt;
&lt;br /&gt;
== XP02 ==&lt;br /&gt;
* Is an Textviewer to view Text of an File.&lt;br /&gt;
* Usage: XP02.EXE EXAMPLE.TXT&lt;br /&gt;
&lt;br /&gt;
== SAV File Format ==&lt;br /&gt;
* There are stored the Savegame.&lt;br /&gt;
* Player name is there stored in plain text.&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=Palladix Palladix]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=PMA Palladix Music AdLib]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_input_zxtune Foo Input Zxtune]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_openmpt54 Foo OpenMPT54]&lt;br /&gt;
* [https://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Components/DEAF_Module_Decoder_(foo_deaf) DEAF Module Decoder]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16040</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16040"/>
		<updated>2025-05-24T18:05:29Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: add more external links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;br /&gt;
* Captain Gysi und das Raumschiff Bonn&lt;br /&gt;
&lt;br /&gt;
== PSM4CFG ==&lt;br /&gt;
* Is the Configuration program for the PSM Soundsystem.&lt;br /&gt;
* Version 4.00&lt;br /&gt;
&lt;br /&gt;
== XP00 ==&lt;br /&gt;
* Starts the Game normal.&lt;br /&gt;
&lt;br /&gt;
== XP01 ==&lt;br /&gt;
* Starts directly into the Game and skips Intro. And goes straight into the Game menu.&lt;br /&gt;
&lt;br /&gt;
== XP02 ==&lt;br /&gt;
* Is an Textviewer to view Text of an File.&lt;br /&gt;
* Usage: XP02.EXE EXAMPLE.TXT&lt;br /&gt;
&lt;br /&gt;
== SAV File Format ==&lt;br /&gt;
* There are stored the Savegame.&lt;br /&gt;
* Player name is there stored in plain text.&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=Palladix Palladix]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=PMA Palladix Music AdLib]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_input_zxtune Foo Input Zxtune]&lt;br /&gt;
* [https://www.foobar2000.org/components/view/foo_openmpt54 Foo OpenMPT54]&lt;br /&gt;
* [https://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Components/DEAF_Module_Decoder_(foo_deaf) DEAF Module Decoder]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16039</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16039"/>
		<updated>2025-05-24T17:55:33Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;br /&gt;
* Captain Gysi und das Raumschiff Bonn&lt;br /&gt;
&lt;br /&gt;
== PSM4CFG ==&lt;br /&gt;
* Is the Configuration program for the PSM Soundsystem.&lt;br /&gt;
* Version 4.00&lt;br /&gt;
&lt;br /&gt;
== XP00 ==&lt;br /&gt;
* Starts the Game normal.&lt;br /&gt;
&lt;br /&gt;
== XP01 ==&lt;br /&gt;
* Starts directly into the Game and skips Intro. And goes straight into the Game menu.&lt;br /&gt;
&lt;br /&gt;
== XP02 ==&lt;br /&gt;
* Is an Textviewer to view Text of an File.&lt;br /&gt;
* Usage: XP02.EXE EXAMPLE.TXT&lt;br /&gt;
&lt;br /&gt;
== SAV File Format ==&lt;br /&gt;
* There are stored the Savegame.&lt;br /&gt;
* Player name is there stored in plain text.&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=Palladix Palladix]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=PMA Palladix Music AdLib]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16038</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16038"/>
		<updated>2025-05-24T17:54:20Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;br /&gt;
* Captain Gysi und das Raumschiff Bonn&lt;br /&gt;
&lt;br /&gt;
== PSM4CFG ==&lt;br /&gt;
* Is the Configuration program for the PSM Soundsystem.&lt;br /&gt;
* Version 4.00&lt;br /&gt;
&lt;br /&gt;
== XP00 ==&lt;br /&gt;
* Starts the Game normal.&lt;br /&gt;
&lt;br /&gt;
== XP01 ==&lt;br /&gt;
* Starts directly into the Game and skips Intro. And goes straight into the Game menu.&lt;br /&gt;
&lt;br /&gt;
== XP02 ==&lt;br /&gt;
* Is an Textviewer to view Text of an File.&lt;br /&gt;
* Usage: XP02.EXE EXAMPLE.TXT&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=Palladix Palladix]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=PMA Palladix Music AdLib]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16037</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16037"/>
		<updated>2025-05-24T17:51:34Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: add XP02&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;br /&gt;
* Captain Gysi und das Raumschiff Bonn&lt;br /&gt;
&lt;br /&gt;
== PSM4CFG ==&lt;br /&gt;
* Is the Configuration program for the PSM Soundsystem.&lt;br /&gt;
* Version 4.00&lt;br /&gt;
&lt;br /&gt;
== XP02 ==&lt;br /&gt;
* Is an Textviewer to view Text of an File.&lt;br /&gt;
* Usage: XP02.EXE EXAMPLE.TXT&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=Palladix Palladix]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=PMA Palladix Music AdLib]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16036</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16036"/>
		<updated>2025-05-24T17:48:04Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* PSM4CFG */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;br /&gt;
* Captain Gysi und das Raumschiff Bonn&lt;br /&gt;
&lt;br /&gt;
== PSM4CFG ==&lt;br /&gt;
* Is the Configuration program for the PSM Soundsystem.&lt;br /&gt;
* Version 4.00&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=Palladix Palladix]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=PMA Palladix Music AdLib]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16035</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16035"/>
		<updated>2025-05-24T17:47:30Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;br /&gt;
* Captain Gysi und das Raumschiff Bonn&lt;br /&gt;
&lt;br /&gt;
== PSM4CFG ==&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=Palladix Palladix]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=PMA Palladix Music AdLib]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16034</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16034"/>
		<updated>2025-05-24T17:44:29Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: add Palladix links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=Palladix Palladix]&lt;br /&gt;
* [https://www.vgmpf.com/Wiki/index.php?title=PMA Palladix Music AdLib]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16033</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16033"/>
		<updated>2025-05-24T17:41:28Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* Games using this Engine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;br /&gt;
* Captain Zins&lt;br /&gt;
* Die Enviro-Kids greifen ein&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16032</id>
		<title>Engines/PSM</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/PSM&amp;diff=16032"/>
		<updated>2025-05-24T17:39:32Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: Created page with &amp;quot;== Games using this Engine == * Dunkle Schatten&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Dunkle Schatten&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/XPAT&amp;diff=15946</id>
		<title>Engines/XPAT</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/XPAT&amp;diff=15946"/>
		<updated>2025-05-10T14:20:17Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: mention name of XCS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XPAT is an Game engine made by Digital Media International in 1995.&lt;br /&gt;
&lt;br /&gt;
== Games using this Engine ==&lt;br /&gt;
* The Land Before Time Kindergarten Adventure (1998)&lt;br /&gt;
* The Land Before Time Math Adventure (1997)&lt;br /&gt;
* The Land Before Time Activity Center (1997)&lt;br /&gt;
&lt;br /&gt;
== XCOMPILE ==&lt;br /&gt;
* XCOMPILE.EXE is the Compiler which is used to compile the SPT files (script source code) into XCS (XPAT Compiled Script)&lt;br /&gt;
* They left the Compiler on accident on the retail CD's.&lt;br /&gt;
* Version 1.0&lt;br /&gt;
* Howto use XCOMPILE:&lt;br /&gt;
** 0. Copy the SETUP Folder which stores XCOMPILE.EXE to your Hard drive.&lt;br /&gt;
** 1. Type under Project name, the name for your project.&lt;br /&gt;
** 2. Define X and Y Resolution&lt;br /&gt;
** 3. Keep &amp;quot;Allow Modifcations and Recompiles&amp;quot; enabled.&lt;br /&gt;
** 4. Define under Path where the SPT file is stored. Example: \setup\&lt;br /&gt;
** 5. Keep Update Path for Scripts and DLLs empty.&lt;br /&gt;
** 6. Define under &amp;quot;Name of Starting Script&amp;quot; the name of the script: Example: example.spt&lt;br /&gt;
** 7. If everything is ready press on the floppy disk. There define the Scriptpath and press OK. If its not working may try the Force Recompile option&lt;br /&gt;
&lt;br /&gt;
== XCS ==&lt;br /&gt;
* XCS files are compiled with XCOMPILE&lt;br /&gt;
* Name: XPAT Compiled Script&lt;br /&gt;
&lt;br /&gt;
== Used formats ==&lt;br /&gt;
* [https://wiki.multimedia.cx/index.php/BMP BMP]&lt;br /&gt;
* [https://wiki.multimedia.cx/index.php/WAV WAV]&lt;br /&gt;
* [https://wiki.multimedia.cx/index.php/FLX FLX]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15944</id>
		<title>Engines/Eko</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15944"/>
		<updated>2025-05-10T11:48:50Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* Boolean */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Adibou et les saisons magiques (2009)&lt;br /&gt;
* Garfield Lasagna World Tour (2008)&lt;br /&gt;
* Th3 Plan (2006)&lt;br /&gt;
* Gifty (2000)&lt;br /&gt;
* Strawberry Shortcake The Sweet Dreams Game (2006)&lt;br /&gt;
&lt;br /&gt;
== CPP Files ==&lt;br /&gt;
* ..\..\CactusMessageHub\Source\CactusMessageHub.cpp&lt;br /&gt;
* CCactusPCShaders.cpp&lt;br /&gt;
* PCCartoonPacket2.cpp&lt;br /&gt;
* ..\..\Main\MainInit.cpp&lt;br /&gt;
* ..\..\Main\MainLoad.cpp&lt;br /&gt;
* C:\Eko\cactus\Main\MainMenu.cpp&lt;br /&gt;
* C:\Eko\cactus\Main\mainwin.cpp&lt;br /&gt;
* C:\Eko\cactus\Main\PathFinder.cpp&lt;br /&gt;
* C:\Eko\cactus\Main\Replay.cpp&lt;br /&gt;
* C:\Eko\cactus\Camera\CameraManager.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\castle_w.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\raster.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Poudre.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_l.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\texture.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_p2.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\visipak.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\PolyLine.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\mesh.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_e.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_pl.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_z.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\instance_f.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\circulaire.cpp&lt;br /&gt;
* C:\Eko\cactus\General\Cycle.cpp&lt;br /&gt;
* C:\Eko\cactus\General\Text.cpp&lt;br /&gt;
* C:\Eko\cactus\General\Font.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\GameRules\GameRules.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\GameRules\GameCinematic.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\GameRules\Menu.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\Perso\Perso.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\GameRules\GameCamera.cpp&lt;br /&gt;
* C:\Eko\cactus\Langage\Emulator.cpp&lt;br /&gt;
* C:\Eko\cactus\Specialfx\SpecialFx.cpp&lt;br /&gt;
* C:\Eko\cactus\Specialfx\magicparticle.cpp&lt;br /&gt;
* C:\Eko\cactus\Specialfx\GeneralFx.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\MetteurFeu.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Garde.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\GardesSombreClair.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Informateur.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Turc.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\DonneurBonus.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\GenPoudre.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Petit.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Patrouilleur.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\PnjBase.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\TrajetPreDef.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\Sound.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\CSoundHardwareManager.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\CPCSoundHardwareManager.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\PCBFSoundManager.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\CPCSoundSoftwareManager.cpp&lt;br /&gt;
* C:\Eko\cactus\LoadRes\CResManager.cpp&lt;br /&gt;
* C:\Eko\cactus\LoadRes\LoadRes.cpp&lt;br /&gt;
* C:\Eko\cactus\Cinematic\CinematicPC.cpp&lt;br /&gt;
* C:\Eko\cactus\Cinematic\Cinematic.cpp&lt;br /&gt;
* C:\Eko\cactus\Camera\Instance_c.cpp&lt;br /&gt;
* C:\Eko\cactus\General\Tga.cpp&lt;br /&gt;
&lt;br /&gt;
== Header Files ==&lt;br /&gt;
* ..//..//Main//TimeTrack.h&lt;br /&gt;
&lt;br /&gt;
== Defines ==&lt;br /&gt;
* #ifndef __TRACK_TIME__H&lt;br /&gt;
* #define __TRACK_TIME__H&lt;br /&gt;
&lt;br /&gt;
== Discovered Assembly from executable ==&lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				m4x4	oPos, v0, c0			sub		r0, v0, c12				dp3		r0.w, r0, r0			rsq		r0.w, r0.w				mul		r0, r0, r0.w			dp3		r0, r0, v1				mov		oD0, v2					mov		r1, c9					mov		oT0, v3					mad		r2, -r0, r1, c9			mul		r2, r2, c13.x			add		oT1.xy, r2, c13.y &lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				mov		r0, v0					sub		r1, r0, c8				dp3		r1, r1, r1				rsq		r1.w, r1.w				nop		mul		r1.x, r1.x, r1.w		mul		r1.x, r1.x,	c11.x			mov		r1, r1.x				min		r1, r1.x, c11.y			mul		r1, r1, v1			add		r0.xyz, r0, r1		m4x4	oPos, r0, c0			mul		oD0, v2, c10			mov		oT0.xyz, v3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Boolean ==&lt;br /&gt;
* m_bHaveToClose has to be true&lt;br /&gt;
* m_nGroundType&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
* CCactusPCShaders::InitVertexShaders()&lt;br /&gt;
* CCactusPCShaders::InitPixelShaders()&lt;br /&gt;
* CCactusPCShaders::SetShader()&lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
* SET_CAMERA_MOTION_HANDCAMERA&lt;br /&gt;
* LOAD_HANDCAMERA_PARAMS&lt;br /&gt;
* SAVE_HANDCAMERA_PARAMS&lt;br /&gt;
* SET_CAMERA_MOTION_RACE&lt;br /&gt;
* TYPE_TARGET&lt;br /&gt;
* SET_CAMERA_AUTOFOCUS&lt;br /&gt;
&lt;br /&gt;
== Foster  ==&lt;br /&gt;
* Foster is storing Copy Protection (StarForce)&lt;br /&gt;
* Foster.exe version: 3.07&lt;br /&gt;
* Used by Th3 Plan&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15943</id>
		<title>Engines/Eko</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15943"/>
		<updated>2025-05-10T11:37:39Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: add strawberry game&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Adibou et les saisons magiques (2009)&lt;br /&gt;
* Garfield Lasagna World Tour (2008)&lt;br /&gt;
* Th3 Plan (2006)&lt;br /&gt;
* Gifty (2000)&lt;br /&gt;
* Strawberry Shortcake The Sweet Dreams Game (2006)&lt;br /&gt;
&lt;br /&gt;
== CPP Files ==&lt;br /&gt;
* ..\..\CactusMessageHub\Source\CactusMessageHub.cpp&lt;br /&gt;
* CCactusPCShaders.cpp&lt;br /&gt;
* PCCartoonPacket2.cpp&lt;br /&gt;
* ..\..\Main\MainInit.cpp&lt;br /&gt;
* ..\..\Main\MainLoad.cpp&lt;br /&gt;
* C:\Eko\cactus\Main\MainMenu.cpp&lt;br /&gt;
* C:\Eko\cactus\Main\mainwin.cpp&lt;br /&gt;
* C:\Eko\cactus\Main\PathFinder.cpp&lt;br /&gt;
* C:\Eko\cactus\Main\Replay.cpp&lt;br /&gt;
* C:\Eko\cactus\Camera\CameraManager.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\castle_w.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\raster.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Poudre.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_l.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\texture.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_p2.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\visipak.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\PolyLine.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\mesh.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_e.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_pl.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_z.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\instance_f.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\circulaire.cpp&lt;br /&gt;
* C:\Eko\cactus\General\Cycle.cpp&lt;br /&gt;
* C:\Eko\cactus\General\Text.cpp&lt;br /&gt;
* C:\Eko\cactus\General\Font.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\GameRules\GameRules.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\GameRules\GameCinematic.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\GameRules\Menu.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\Perso\Perso.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\GameRules\GameCamera.cpp&lt;br /&gt;
* C:\Eko\cactus\Langage\Emulator.cpp&lt;br /&gt;
* C:\Eko\cactus\Specialfx\SpecialFx.cpp&lt;br /&gt;
* C:\Eko\cactus\Specialfx\magicparticle.cpp&lt;br /&gt;
* C:\Eko\cactus\Specialfx\GeneralFx.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\MetteurFeu.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Garde.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\GardesSombreClair.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Informateur.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Turc.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\DonneurBonus.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\GenPoudre.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Petit.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Patrouilleur.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\PnjBase.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\TrajetPreDef.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\Sound.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\CSoundHardwareManager.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\CPCSoundHardwareManager.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\PCBFSoundManager.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\CPCSoundSoftwareManager.cpp&lt;br /&gt;
* C:\Eko\cactus\LoadRes\CResManager.cpp&lt;br /&gt;
* C:\Eko\cactus\LoadRes\LoadRes.cpp&lt;br /&gt;
* C:\Eko\cactus\Cinematic\CinematicPC.cpp&lt;br /&gt;
* C:\Eko\cactus\Cinematic\Cinematic.cpp&lt;br /&gt;
* C:\Eko\cactus\Camera\Instance_c.cpp&lt;br /&gt;
* C:\Eko\cactus\General\Tga.cpp&lt;br /&gt;
&lt;br /&gt;
== Header Files ==&lt;br /&gt;
* ..//..//Main//TimeTrack.h&lt;br /&gt;
&lt;br /&gt;
== Defines ==&lt;br /&gt;
* #ifndef __TRACK_TIME__H&lt;br /&gt;
* #define __TRACK_TIME__H&lt;br /&gt;
&lt;br /&gt;
== Discovered Assembly from executable ==&lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				m4x4	oPos, v0, c0			sub		r0, v0, c12				dp3		r0.w, r0, r0			rsq		r0.w, r0.w				mul		r0, r0, r0.w			dp3		r0, r0, v1				mov		oD0, v2					mov		r1, c9					mov		oT0, v3					mad		r2, -r0, r1, c9			mul		r2, r2, c13.x			add		oT1.xy, r2, c13.y &lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				mov		r0, v0					sub		r1, r0, c8				dp3		r1, r1, r1				rsq		r1.w, r1.w				nop		mul		r1.x, r1.x, r1.w		mul		r1.x, r1.x,	c11.x			mov		r1, r1.x				min		r1, r1.x, c11.y			mul		r1, r1, v1			add		r0.xyz, r0, r1		m4x4	oPos, r0, c0			mul		oD0, v2, c10			mov		oT0.xyz, v3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Boolean ==&lt;br /&gt;
* m_bHaveToClose has to be true&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
* CCactusPCShaders::InitVertexShaders()&lt;br /&gt;
* CCactusPCShaders::InitPixelShaders()&lt;br /&gt;
* CCactusPCShaders::SetShader()&lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
* SET_CAMERA_MOTION_HANDCAMERA&lt;br /&gt;
* LOAD_HANDCAMERA_PARAMS&lt;br /&gt;
* SAVE_HANDCAMERA_PARAMS&lt;br /&gt;
* SET_CAMERA_MOTION_RACE&lt;br /&gt;
* TYPE_TARGET&lt;br /&gt;
* SET_CAMERA_AUTOFOCUS&lt;br /&gt;
&lt;br /&gt;
== Foster  ==&lt;br /&gt;
* Foster is storing Copy Protection (StarForce)&lt;br /&gt;
* Foster.exe version: 3.07&lt;br /&gt;
* Used by Th3 Plan&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15942</id>
		<title>Engines/Eko</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15942"/>
		<updated>2025-05-10T11:30:15Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: add more cpp files from the first game&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Adibou et les saisons magiques (2009)&lt;br /&gt;
* Garfield Lasagna World Tour (2008)&lt;br /&gt;
* Th3 Plan (2006)&lt;br /&gt;
* Gifty (2000)&lt;br /&gt;
&lt;br /&gt;
== CPP Files ==&lt;br /&gt;
* ..\..\CactusMessageHub\Source\CactusMessageHub.cpp&lt;br /&gt;
* CCactusPCShaders.cpp&lt;br /&gt;
* PCCartoonPacket2.cpp&lt;br /&gt;
* ..\..\Main\MainInit.cpp&lt;br /&gt;
* ..\..\Main\MainLoad.cpp&lt;br /&gt;
* C:\Eko\cactus\Main\MainMenu.cpp&lt;br /&gt;
* C:\Eko\cactus\Main\mainwin.cpp&lt;br /&gt;
* C:\Eko\cactus\Main\PathFinder.cpp&lt;br /&gt;
* C:\Eko\cactus\Main\Replay.cpp&lt;br /&gt;
* C:\Eko\cactus\Camera\CameraManager.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\castle_w.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\raster.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Poudre.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_l.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\texture.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_p2.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\visipak.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\PolyLine.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\mesh.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_e.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_pl.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\Instance_z.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\instance_f.cpp&lt;br /&gt;
* C:\Eko\cactus\Engine\circulaire.cpp&lt;br /&gt;
* C:\Eko\cactus\General\Cycle.cpp&lt;br /&gt;
* C:\Eko\cactus\General\Text.cpp&lt;br /&gt;
* C:\Eko\cactus\General\Font.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\GameRules\GameRules.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\GameRules\GameCinematic.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\GameRules\Menu.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\Perso\Perso.cpp&lt;br /&gt;
* C:\Eko\cactus\Gestion\GameRules\GameCamera.cpp&lt;br /&gt;
* C:\Eko\cactus\Langage\Emulator.cpp&lt;br /&gt;
* C:\Eko\cactus\Specialfx\SpecialFx.cpp&lt;br /&gt;
* C:\Eko\cactus\Specialfx\magicparticle.cpp&lt;br /&gt;
* C:\Eko\cactus\Specialfx\GeneralFx.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\MetteurFeu.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Garde.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\GardesSombreClair.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Informateur.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Turc.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\DonneurBonus.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\GenPoudre.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Petit.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\Patrouilleur.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\PnjBase.cpp&lt;br /&gt;
* C:\Eko\cactus\arti\TrajetPreDef.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\Sound.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\CSoundHardwareManager.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\CPCSoundHardwareManager.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\PCBFSoundManager.cpp&lt;br /&gt;
* C:\Eko\cactus\Sound\CPCSoundSoftwareManager.cpp&lt;br /&gt;
* C:\Eko\cactus\LoadRes\CResManager.cpp&lt;br /&gt;
* C:\Eko\cactus\LoadRes\LoadRes.cpp&lt;br /&gt;
* C:\Eko\cactus\Cinematic\CinematicPC.cpp&lt;br /&gt;
* C:\Eko\cactus\Cinematic\Cinematic.cpp&lt;br /&gt;
* C:\Eko\cactus\Camera\Instance_c.cpp&lt;br /&gt;
* C:\Eko\cactus\General\Tga.cpp&lt;br /&gt;
&lt;br /&gt;
== Header Files ==&lt;br /&gt;
* ..//..//Main//TimeTrack.h&lt;br /&gt;
&lt;br /&gt;
== Defines ==&lt;br /&gt;
* #ifndef __TRACK_TIME__H&lt;br /&gt;
* #define __TRACK_TIME__H&lt;br /&gt;
&lt;br /&gt;
== Discovered Assembly from executable ==&lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				m4x4	oPos, v0, c0			sub		r0, v0, c12				dp3		r0.w, r0, r0			rsq		r0.w, r0.w				mul		r0, r0, r0.w			dp3		r0, r0, v1				mov		oD0, v2					mov		r1, c9					mov		oT0, v3					mad		r2, -r0, r1, c9			mul		r2, r2, c13.x			add		oT1.xy, r2, c13.y &lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				mov		r0, v0					sub		r1, r0, c8				dp3		r1, r1, r1				rsq		r1.w, r1.w				nop		mul		r1.x, r1.x, r1.w		mul		r1.x, r1.x,	c11.x			mov		r1, r1.x				min		r1, r1.x, c11.y			mul		r1, r1, v1			add		r0.xyz, r0, r1		m4x4	oPos, r0, c0			mul		oD0, v2, c10			mov		oT0.xyz, v3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Boolean ==&lt;br /&gt;
* m_bHaveToClose has to be true&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
* CCactusPCShaders::InitVertexShaders()&lt;br /&gt;
* CCactusPCShaders::InitPixelShaders()&lt;br /&gt;
* CCactusPCShaders::SetShader()&lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
* SET_CAMERA_MOTION_HANDCAMERA&lt;br /&gt;
* LOAD_HANDCAMERA_PARAMS&lt;br /&gt;
* SAVE_HANDCAMERA_PARAMS&lt;br /&gt;
* SET_CAMERA_MOTION_RACE&lt;br /&gt;
* TYPE_TARGET&lt;br /&gt;
* SET_CAMERA_AUTOFOCUS&lt;br /&gt;
&lt;br /&gt;
== Foster  ==&lt;br /&gt;
* Foster is storing Copy Protection (StarForce)&lt;br /&gt;
* Foster.exe version: 3.07&lt;br /&gt;
* Used by Th3 Plan&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15941</id>
		<title>Engines/Eko</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15941"/>
		<updated>2025-05-10T11:26:29Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: add release year to games&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Adibou et les saisons magiques (2009)&lt;br /&gt;
* Garfield Lasagna World Tour (2008)&lt;br /&gt;
* Th3 Plan (2006)&lt;br /&gt;
* Gifty (2000)&lt;br /&gt;
&lt;br /&gt;
== CPP Files ==&lt;br /&gt;
* ..\..\CactusMessageHub\Source\CactusMessageHub.cpp&lt;br /&gt;
* CCactusPCShaders.cpp&lt;br /&gt;
* PCCartoonPacket2.cpp&lt;br /&gt;
* ..\..\Main\MainInit.cpp&lt;br /&gt;
* ..\..\Main\MainLoad.cpp&lt;br /&gt;
&lt;br /&gt;
== Header Files ==&lt;br /&gt;
* ..//..//Main//TimeTrack.h&lt;br /&gt;
&lt;br /&gt;
== Defines ==&lt;br /&gt;
* #ifndef __TRACK_TIME__H&lt;br /&gt;
* #define __TRACK_TIME__H&lt;br /&gt;
&lt;br /&gt;
== Discovered Assembly from executable ==&lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				m4x4	oPos, v0, c0			sub		r0, v0, c12				dp3		r0.w, r0, r0			rsq		r0.w, r0.w				mul		r0, r0, r0.w			dp3		r0, r0, v1				mov		oD0, v2					mov		r1, c9					mov		oT0, v3					mad		r2, -r0, r1, c9			mul		r2, r2, c13.x			add		oT1.xy, r2, c13.y &lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				mov		r0, v0					sub		r1, r0, c8				dp3		r1, r1, r1				rsq		r1.w, r1.w				nop		mul		r1.x, r1.x, r1.w		mul		r1.x, r1.x,	c11.x			mov		r1, r1.x				min		r1, r1.x, c11.y			mul		r1, r1, v1			add		r0.xyz, r0, r1		m4x4	oPos, r0, c0			mul		oD0, v2, c10			mov		oT0.xyz, v3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Boolean ==&lt;br /&gt;
* m_bHaveToClose has to be true&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
* CCactusPCShaders::InitVertexShaders()&lt;br /&gt;
* CCactusPCShaders::InitPixelShaders()&lt;br /&gt;
* CCactusPCShaders::SetShader()&lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
* SET_CAMERA_MOTION_HANDCAMERA&lt;br /&gt;
* LOAD_HANDCAMERA_PARAMS&lt;br /&gt;
* SAVE_HANDCAMERA_PARAMS&lt;br /&gt;
* SET_CAMERA_MOTION_RACE&lt;br /&gt;
* TYPE_TARGET&lt;br /&gt;
* SET_CAMERA_AUTOFOCUS&lt;br /&gt;
&lt;br /&gt;
== Foster  ==&lt;br /&gt;
* Foster is storing Copy Protection (StarForce)&lt;br /&gt;
* Foster.exe version: 3.07&lt;br /&gt;
* Used by Th3 Plan&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15940</id>
		<title>Engines/Eko</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15940"/>
		<updated>2025-05-10T11:23:33Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* Games using this Engine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Adibou et les saisons magiques&lt;br /&gt;
* Garfield Lasagna World Tour&lt;br /&gt;
* Th3 Plan&lt;br /&gt;
* Gifty&lt;br /&gt;
&lt;br /&gt;
== CPP Files ==&lt;br /&gt;
* ..\..\CactusMessageHub\Source\CactusMessageHub.cpp&lt;br /&gt;
* CCactusPCShaders.cpp&lt;br /&gt;
* PCCartoonPacket2.cpp&lt;br /&gt;
* ..\..\Main\MainInit.cpp&lt;br /&gt;
* ..\..\Main\MainLoad.cpp&lt;br /&gt;
&lt;br /&gt;
== Header Files ==&lt;br /&gt;
* ..//..//Main//TimeTrack.h&lt;br /&gt;
&lt;br /&gt;
== Defines ==&lt;br /&gt;
* #ifndef __TRACK_TIME__H&lt;br /&gt;
* #define __TRACK_TIME__H&lt;br /&gt;
&lt;br /&gt;
== Discovered Assembly from executable ==&lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				m4x4	oPos, v0, c0			sub		r0, v0, c12				dp3		r0.w, r0, r0			rsq		r0.w, r0.w				mul		r0, r0, r0.w			dp3		r0, r0, v1				mov		oD0, v2					mov		r1, c9					mov		oT0, v3					mad		r2, -r0, r1, c9			mul		r2, r2, c13.x			add		oT1.xy, r2, c13.y &lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				mov		r0, v0					sub		r1, r0, c8				dp3		r1, r1, r1				rsq		r1.w, r1.w				nop		mul		r1.x, r1.x, r1.w		mul		r1.x, r1.x,	c11.x			mov		r1, r1.x				min		r1, r1.x, c11.y			mul		r1, r1, v1			add		r0.xyz, r0, r1		m4x4	oPos, r0, c0			mul		oD0, v2, c10			mov		oT0.xyz, v3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Boolean ==&lt;br /&gt;
* m_bHaveToClose has to be true&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
* CCactusPCShaders::InitVertexShaders()&lt;br /&gt;
* CCactusPCShaders::InitPixelShaders()&lt;br /&gt;
* CCactusPCShaders::SetShader()&lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
* SET_CAMERA_MOTION_HANDCAMERA&lt;br /&gt;
* LOAD_HANDCAMERA_PARAMS&lt;br /&gt;
* SAVE_HANDCAMERA_PARAMS&lt;br /&gt;
* SET_CAMERA_MOTION_RACE&lt;br /&gt;
* TYPE_TARGET&lt;br /&gt;
* SET_CAMERA_AUTOFOCUS&lt;br /&gt;
&lt;br /&gt;
== Foster  ==&lt;br /&gt;
* Foster is storing Copy Protection (StarForce)&lt;br /&gt;
* Foster.exe version: 3.07&lt;br /&gt;
* Used by Th3 Plan&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15939</id>
		<title>Engines/Eko</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15939"/>
		<updated>2025-05-10T10:39:51Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Adibou et les saisons magiques&lt;br /&gt;
* Garfield Lasagna World Tour&lt;br /&gt;
* Th3 Plan&lt;br /&gt;
&lt;br /&gt;
== CPP Files ==&lt;br /&gt;
* ..\..\CactusMessageHub\Source\CactusMessageHub.cpp&lt;br /&gt;
* CCactusPCShaders.cpp&lt;br /&gt;
* PCCartoonPacket2.cpp&lt;br /&gt;
* ..\..\Main\MainInit.cpp&lt;br /&gt;
* ..\..\Main\MainLoad.cpp&lt;br /&gt;
&lt;br /&gt;
== Header Files ==&lt;br /&gt;
* ..//..//Main//TimeTrack.h&lt;br /&gt;
&lt;br /&gt;
== Defines ==&lt;br /&gt;
* #ifndef __TRACK_TIME__H&lt;br /&gt;
* #define __TRACK_TIME__H&lt;br /&gt;
&lt;br /&gt;
== Discovered Assembly from executable ==&lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				m4x4	oPos, v0, c0			sub		r0, v0, c12				dp3		r0.w, r0, r0			rsq		r0.w, r0.w				mul		r0, r0, r0.w			dp3		r0, r0, v1				mov		oD0, v2					mov		r1, c9					mov		oT0, v3					mad		r2, -r0, r1, c9			mul		r2, r2, c13.x			add		oT1.xy, r2, c13.y &lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				mov		r0, v0					sub		r1, r0, c8				dp3		r1, r1, r1				rsq		r1.w, r1.w				nop		mul		r1.x, r1.x, r1.w		mul		r1.x, r1.x,	c11.x			mov		r1, r1.x				min		r1, r1.x, c11.y			mul		r1, r1, v1			add		r0.xyz, r0, r1		m4x4	oPos, r0, c0			mul		oD0, v2, c10			mov		oT0.xyz, v3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Boolean ==&lt;br /&gt;
* m_bHaveToClose has to be true&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
* CCactusPCShaders::InitVertexShaders()&lt;br /&gt;
* CCactusPCShaders::InitPixelShaders()&lt;br /&gt;
* CCactusPCShaders::SetShader()&lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
* SET_CAMERA_MOTION_HANDCAMERA&lt;br /&gt;
* LOAD_HANDCAMERA_PARAMS&lt;br /&gt;
* SAVE_HANDCAMERA_PARAMS&lt;br /&gt;
* SET_CAMERA_MOTION_RACE&lt;br /&gt;
* TYPE_TARGET&lt;br /&gt;
* SET_CAMERA_AUTOFOCUS&lt;br /&gt;
&lt;br /&gt;
== Foster  ==&lt;br /&gt;
* Foster is storing Copy Protection (StarForce)&lt;br /&gt;
* Foster.exe version: 3.07&lt;br /&gt;
* Used by Th3 Plan&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15938</id>
		<title>Engines/Eko</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15938"/>
		<updated>2025-05-10T10:20:38Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: add Garfield Lasagna World Tour&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Adibou et les saisons magiques&lt;br /&gt;
* Garfield Lasagna World Tour&lt;br /&gt;
&lt;br /&gt;
== CPP Files ==&lt;br /&gt;
* ..\..\CactusMessageHub\Source\CactusMessageHub.cpp&lt;br /&gt;
* CCactusPCShaders.cpp&lt;br /&gt;
* PCCartoonPacket2.cpp&lt;br /&gt;
* ..\..\Main\MainInit.cpp&lt;br /&gt;
* ..\..\Main\MainLoad.cpp&lt;br /&gt;
&lt;br /&gt;
== Header Files ==&lt;br /&gt;
* ..//..//Main//TimeTrack.h&lt;br /&gt;
&lt;br /&gt;
== Defines ==&lt;br /&gt;
* #ifndef __TRACK_TIME__H&lt;br /&gt;
* #define __TRACK_TIME__H&lt;br /&gt;
&lt;br /&gt;
== Discovered Assembly from executable ==&lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				m4x4	oPos, v0, c0			sub		r0, v0, c12				dp3		r0.w, r0, r0			rsq		r0.w, r0.w				mul		r0, r0, r0.w			dp3		r0, r0, v1				mov		oD0, v2					mov		r1, c9					mov		oT0, v3					mad		r2, -r0, r1, c9			mul		r2, r2, c13.x			add		oT1.xy, r2, c13.y &lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				mov		r0, v0					sub		r1, r0, c8				dp3		r1, r1, r1				rsq		r1.w, r1.w				nop		mul		r1.x, r1.x, r1.w		mul		r1.x, r1.x,	c11.x			mov		r1, r1.x				min		r1, r1.x, c11.y			mul		r1, r1, v1			add		r0.xyz, r0, r1		m4x4	oPos, r0, c0			mul		oD0, v2, c10			mov		oT0.xyz, v3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Boolean ==&lt;br /&gt;
* m_bHaveToClose has to be true&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
* CCactusPCShaders::InitVertexShaders()&lt;br /&gt;
* CCactusPCShaders::InitPixelShaders()&lt;br /&gt;
* CCactusPCShaders::SetShader()&lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
* SET_CAMERA_MOTION_HANDCAMERA&lt;br /&gt;
* LOAD_HANDCAMERA_PARAMS&lt;br /&gt;
* SAVE_HANDCAMERA_PARAMS&lt;br /&gt;
* SET_CAMERA_MOTION_RACE&lt;br /&gt;
* TYPE_TARGET&lt;br /&gt;
* SET_CAMERA_AUTOFOCUS&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15937</id>
		<title>Engines/Atlas</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15937"/>
		<updated>2025-05-10T10:07:56Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* Components */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Mega Math Blaster&lt;br /&gt;
* Math Blaster Ages 9-12&lt;br /&gt;
* Matteraketten Junior&lt;br /&gt;
* Math Blaster Ages 6-7&lt;br /&gt;
* Math Blaster: Cross Terrain Challenge&lt;br /&gt;
* Math Blaster Ages 7-8 - Mission 2: Race for the Omega Trophy&lt;br /&gt;
* Frankie Das große Rennen&lt;br /&gt;
&lt;br /&gt;
== Engine versions ==&lt;br /&gt;
* 3.0&lt;br /&gt;
** 3.37 (1995)&lt;br /&gt;
* 5.0&lt;br /&gt;
** 5.14 (1995)&lt;br /&gt;
** 5.15&lt;br /&gt;
** 5.51t (1997)&lt;br /&gt;
** 5.55w (2000)&lt;br /&gt;
** 5.55n (2000)&lt;br /&gt;
** 5.60o (2001)&lt;br /&gt;
** 5.62.t (2002)&lt;br /&gt;
&lt;br /&gt;
== PDB Path ==&lt;br /&gt;
* N:\Atlas\TestVer32\Atlas\Atlas32.pdb&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
* Smacker (2000s games)&lt;br /&gt;
* SmartHeap 5.0&lt;br /&gt;
* Miles Sound System 6.1c&lt;br /&gt;
&lt;br /&gt;
== Booster Code ==&lt;br /&gt;
* Booster Code was back then bundled to unlock in certain games extra level or other stuff.&lt;br /&gt;
&lt;br /&gt;
== ATRES32.DLL ==&lt;br /&gt;
* Atlas Common Resources&lt;br /&gt;
* Manages the Resources (BAP Files and RES files?)&lt;br /&gt;
&lt;br /&gt;
== AtMSS32.dll ==&lt;br /&gt;
* Atlas Sound Extension&lt;br /&gt;
* Handles the Sound related stuff&lt;br /&gt;
&lt;br /&gt;
== AtMsg32.dll ==&lt;br /&gt;
* Atlas Messaging and Name Subsystem&lt;br /&gt;
&lt;br /&gt;
== ATFIO.dll ==&lt;br /&gt;
* Atlas File I/O Extension&lt;br /&gt;
* Handles the File I/O stuff.&lt;br /&gt;
&lt;br /&gt;
== RES Archive Structure ==&lt;br /&gt;
* Contains strings which files were used for the archive.&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15936</id>
		<title>Engines/Atlas</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15936"/>
		<updated>2025-05-10T10:07:09Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: add SmartHeap as Component&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Mega Math Blaster&lt;br /&gt;
* Math Blaster Ages 9-12&lt;br /&gt;
* Matteraketten Junior&lt;br /&gt;
* Math Blaster Ages 6-7&lt;br /&gt;
* Math Blaster: Cross Terrain Challenge&lt;br /&gt;
* Math Blaster Ages 7-8 - Mission 2: Race for the Omega Trophy&lt;br /&gt;
* Frankie Das große Rennen&lt;br /&gt;
&lt;br /&gt;
== Engine versions ==&lt;br /&gt;
* 3.0&lt;br /&gt;
** 3.37 (1995)&lt;br /&gt;
* 5.0&lt;br /&gt;
** 5.14 (1995)&lt;br /&gt;
** 5.15&lt;br /&gt;
** 5.51t (1997)&lt;br /&gt;
** 5.55w (2000)&lt;br /&gt;
** 5.55n (2000)&lt;br /&gt;
** 5.60o (2001)&lt;br /&gt;
** 5.62.t (2002)&lt;br /&gt;
&lt;br /&gt;
== PDB Path ==&lt;br /&gt;
* N:\Atlas\TestVer32\Atlas\Atlas32.pdb&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
* Smacker (2000s games)&lt;br /&gt;
* SmartHeap 5.0&lt;br /&gt;
&lt;br /&gt;
== Booster Code ==&lt;br /&gt;
* Booster Code was back then bundled to unlock in certain games extra level or other stuff.&lt;br /&gt;
&lt;br /&gt;
== ATRES32.DLL ==&lt;br /&gt;
* Atlas Common Resources&lt;br /&gt;
* Manages the Resources (BAP Files and RES files?)&lt;br /&gt;
&lt;br /&gt;
== AtMSS32.dll ==&lt;br /&gt;
* Atlas Sound Extension&lt;br /&gt;
* Handles the Sound related stuff&lt;br /&gt;
&lt;br /&gt;
== AtMsg32.dll ==&lt;br /&gt;
* Atlas Messaging and Name Subsystem&lt;br /&gt;
&lt;br /&gt;
== ATFIO.dll ==&lt;br /&gt;
* Atlas File I/O Extension&lt;br /&gt;
* Handles the File I/O stuff.&lt;br /&gt;
&lt;br /&gt;
== RES Archive Structure ==&lt;br /&gt;
* Contains strings which files were used for the archive.&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15935</id>
		<title>Engines/Atlas</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15935"/>
		<updated>2025-05-10T10:06:25Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* Games using this Engine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Mega Math Blaster&lt;br /&gt;
* Math Blaster Ages 9-12&lt;br /&gt;
* Matteraketten Junior&lt;br /&gt;
* Math Blaster Ages 6-7&lt;br /&gt;
* Math Blaster: Cross Terrain Challenge&lt;br /&gt;
* Math Blaster Ages 7-8 - Mission 2: Race for the Omega Trophy&lt;br /&gt;
* Frankie Das große Rennen&lt;br /&gt;
&lt;br /&gt;
== Engine versions ==&lt;br /&gt;
* 3.0&lt;br /&gt;
** 3.37 (1995)&lt;br /&gt;
* 5.0&lt;br /&gt;
** 5.14 (1995)&lt;br /&gt;
** 5.15&lt;br /&gt;
** 5.51t (1997)&lt;br /&gt;
** 5.55w (2000)&lt;br /&gt;
** 5.55n (2000)&lt;br /&gt;
** 5.60o (2001)&lt;br /&gt;
** 5.62.t (2002)&lt;br /&gt;
&lt;br /&gt;
== PDB Path ==&lt;br /&gt;
* N:\Atlas\TestVer32\Atlas\Atlas32.pdb&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
* Smacker (2000s games)&lt;br /&gt;
&lt;br /&gt;
== Booster Code ==&lt;br /&gt;
* Booster Code was back then bundled to unlock in certain games extra level or other stuff.&lt;br /&gt;
&lt;br /&gt;
== ATRES32.DLL ==&lt;br /&gt;
* Atlas Common Resources&lt;br /&gt;
* Manages the Resources (BAP Files and RES files?)&lt;br /&gt;
&lt;br /&gt;
== AtMSS32.dll ==&lt;br /&gt;
* Atlas Sound Extension&lt;br /&gt;
* Handles the Sound related stuff&lt;br /&gt;
&lt;br /&gt;
== AtMsg32.dll ==&lt;br /&gt;
* Atlas Messaging and Name Subsystem&lt;br /&gt;
&lt;br /&gt;
== ATFIO.dll ==&lt;br /&gt;
* Atlas File I/O Extension&lt;br /&gt;
* Handles the File I/O stuff.&lt;br /&gt;
&lt;br /&gt;
== RES Archive Structure ==&lt;br /&gt;
* Contains strings which files were used for the archive.&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15934</id>
		<title>Engines/Atlas</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15934"/>
		<updated>2025-05-10T10:05:39Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* Engine versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Mega Math Blaster&lt;br /&gt;
* Math Blaster Ages 9-12&lt;br /&gt;
* Matteraketten Junior&lt;br /&gt;
* Math Blaster Ages 6-7&lt;br /&gt;
* Math Blaster: Cross Terrain Challenge&lt;br /&gt;
* Math Blaster Ages 7-8 - Mission 2: Race for the Omega Trophy&lt;br /&gt;
&lt;br /&gt;
== Engine versions ==&lt;br /&gt;
* 3.0&lt;br /&gt;
** 3.37 (1995)&lt;br /&gt;
* 5.0&lt;br /&gt;
** 5.14 (1995)&lt;br /&gt;
** 5.15&lt;br /&gt;
** 5.51t (1997)&lt;br /&gt;
** 5.55w (2000)&lt;br /&gt;
** 5.55n (2000)&lt;br /&gt;
** 5.60o (2001)&lt;br /&gt;
** 5.62.t (2002)&lt;br /&gt;
&lt;br /&gt;
== PDB Path ==&lt;br /&gt;
* N:\Atlas\TestVer32\Atlas\Atlas32.pdb&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
* Smacker (2000s games)&lt;br /&gt;
&lt;br /&gt;
== Booster Code ==&lt;br /&gt;
* Booster Code was back then bundled to unlock in certain games extra level or other stuff.&lt;br /&gt;
&lt;br /&gt;
== ATRES32.DLL ==&lt;br /&gt;
* Atlas Common Resources&lt;br /&gt;
* Manages the Resources (BAP Files and RES files?)&lt;br /&gt;
&lt;br /&gt;
== AtMSS32.dll ==&lt;br /&gt;
* Atlas Sound Extension&lt;br /&gt;
* Handles the Sound related stuff&lt;br /&gt;
&lt;br /&gt;
== AtMsg32.dll ==&lt;br /&gt;
* Atlas Messaging and Name Subsystem&lt;br /&gt;
&lt;br /&gt;
== ATFIO.dll ==&lt;br /&gt;
* Atlas File I/O Extension&lt;br /&gt;
* Handles the File I/O stuff.&lt;br /&gt;
&lt;br /&gt;
== RES Archive Structure ==&lt;br /&gt;
* Contains strings which files were used for the archive.&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15933</id>
		<title>Engines/Atlas</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15933"/>
		<updated>2025-05-10T10:03:03Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Mega Math Blaster&lt;br /&gt;
* Math Blaster Ages 9-12&lt;br /&gt;
* Matteraketten Junior&lt;br /&gt;
* Math Blaster Ages 6-7&lt;br /&gt;
* Math Blaster: Cross Terrain Challenge&lt;br /&gt;
* Math Blaster Ages 7-8 - Mission 2: Race for the Omega Trophy&lt;br /&gt;
&lt;br /&gt;
== Engine versions ==&lt;br /&gt;
* 3.0&lt;br /&gt;
** 3.37 (1995)&lt;br /&gt;
* 5.0&lt;br /&gt;
** 5.14 (1995)&lt;br /&gt;
** 5.15&lt;br /&gt;
** 5.51t (1997)&lt;br /&gt;
** 5.55w (2000)&lt;br /&gt;
** 5.55n (2000)&lt;br /&gt;
** 5.60o (2001)&lt;br /&gt;
&lt;br /&gt;
== PDB Path ==&lt;br /&gt;
* N:\Atlas\TestVer32\Atlas\Atlas32.pdb&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
* Smacker (2000s games)&lt;br /&gt;
&lt;br /&gt;
== Booster Code ==&lt;br /&gt;
* Booster Code was back then bundled to unlock in certain games extra level or other stuff.&lt;br /&gt;
&lt;br /&gt;
== ATRES32.DLL ==&lt;br /&gt;
* Atlas Common Resources&lt;br /&gt;
* Manages the Resources (BAP Files and RES files?)&lt;br /&gt;
&lt;br /&gt;
== AtMSS32.dll ==&lt;br /&gt;
* Atlas Sound Extension&lt;br /&gt;
* Handles the Sound related stuff&lt;br /&gt;
&lt;br /&gt;
== AtMsg32.dll ==&lt;br /&gt;
* Atlas Messaging and Name Subsystem&lt;br /&gt;
&lt;br /&gt;
== ATFIO.dll ==&lt;br /&gt;
* Atlas File I/O Extension&lt;br /&gt;
* Handles the File I/O stuff.&lt;br /&gt;
&lt;br /&gt;
== RES Archive Structure ==&lt;br /&gt;
* Contains strings which files were used for the archive.&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15932</id>
		<title>Engines/Atlas</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15932"/>
		<updated>2025-05-09T19:52:59Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* Engine versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Mega Math Blaster&lt;br /&gt;
* Math Blaster Ages 9-12&lt;br /&gt;
* Matteraketten Junior&lt;br /&gt;
* Math Blaster Ages 6-7&lt;br /&gt;
* Math Blaster: Cross Terrain Challenge&lt;br /&gt;
* Math Blaster Ages 7-8 - Mission 2: Race for the Omega Trophy&lt;br /&gt;
&lt;br /&gt;
== Engine versions ==&lt;br /&gt;
* 3.0&lt;br /&gt;
** 3.37 (1995)&lt;br /&gt;
* 5.0&lt;br /&gt;
** 5.14 (1995)&lt;br /&gt;
** 5.15&lt;br /&gt;
** 5.51t (1997)&lt;br /&gt;
** 5.55w (2000)&lt;br /&gt;
** 5.55n (2000)&lt;br /&gt;
** 5.60o (2001)&lt;br /&gt;
&lt;br /&gt;
== PDB Path ==&lt;br /&gt;
* N:\Atlas\TestVer32\Atlas\Atlas32.pdb&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
* Smacker (2000s games)&lt;br /&gt;
&lt;br /&gt;
== Booster Code ==&lt;br /&gt;
* Booster Code was back then bundled to unlock in certain games extra level or other stuff.&lt;br /&gt;
&lt;br /&gt;
== ATRES32.DLL ==&lt;br /&gt;
* Atlas Common Resources&lt;br /&gt;
* Manages the Resources (BAP Files and RES files?)&lt;br /&gt;
&lt;br /&gt;
== AtMSS32.dll ==&lt;br /&gt;
* Atlas Sound Extension&lt;br /&gt;
* Handles the Sound related stuff&lt;br /&gt;
&lt;br /&gt;
== AtMsg32.dll ==&lt;br /&gt;
* Atlas Messaging and Name Subsystem&lt;br /&gt;
&lt;br /&gt;
== ATFIO.dll ==&lt;br /&gt;
* Atlas File I/O Extension&lt;br /&gt;
* Handles the File I/O stuff.&lt;br /&gt;
&lt;br /&gt;
== RES Archive Structure&lt;br /&gt;
* Contains strings which files were used for the archive.&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15931</id>
		<title>Engines/Atlas</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15931"/>
		<updated>2025-05-09T19:49:57Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Mega Math Blaster&lt;br /&gt;
* Math Blaster Ages 9-12&lt;br /&gt;
* Matteraketten Junior&lt;br /&gt;
* Math Blaster Ages 6-7&lt;br /&gt;
* Math Blaster: Cross Terrain Challenge&lt;br /&gt;
* Math Blaster Ages 7-8 - Mission 2: Race for the Omega Trophy&lt;br /&gt;
&lt;br /&gt;
== Engine versions ==&lt;br /&gt;
* 3.0&lt;br /&gt;
** 3.37 (1995)&lt;br /&gt;
* 5.0&lt;br /&gt;
** 5.15&lt;br /&gt;
** 5.51t (1997)&lt;br /&gt;
** 5.55w (2000)&lt;br /&gt;
** 5.55n (2000)&lt;br /&gt;
** 5.60o (2001)&lt;br /&gt;
&lt;br /&gt;
== PDB Path ==&lt;br /&gt;
* N:\Atlas\TestVer32\Atlas\Atlas32.pdb&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
* Smacker (2000s games)&lt;br /&gt;
&lt;br /&gt;
== Booster Code ==&lt;br /&gt;
* Booster Code was back then bundled to unlock in certain games extra level or other stuff.&lt;br /&gt;
&lt;br /&gt;
== ATRES32.DLL ==&lt;br /&gt;
* Atlas Common Resources&lt;br /&gt;
* Manages the Resources (BAP Files and RES files?)&lt;br /&gt;
&lt;br /&gt;
== AtMSS32.dll ==&lt;br /&gt;
* Atlas Sound Extension&lt;br /&gt;
* Handles the Sound related stuff&lt;br /&gt;
&lt;br /&gt;
== AtMsg32.dll ==&lt;br /&gt;
* Atlas Messaging and Name Subsystem&lt;br /&gt;
&lt;br /&gt;
== ATFIO.dll ==&lt;br /&gt;
* Atlas File I/O Extension&lt;br /&gt;
* Handles the File I/O stuff.&lt;br /&gt;
&lt;br /&gt;
== RES Archive Structure&lt;br /&gt;
* Contains strings which files were used for the archive.&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15930</id>
		<title>Engines/Atlas</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15930"/>
		<updated>2025-05-09T19:46:39Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Mega Math Blaster&lt;br /&gt;
* Math Blaster Ages 9-12&lt;br /&gt;
* Matteraketten Junior&lt;br /&gt;
* Math Blaster Ages 6-7&lt;br /&gt;
* Math Blaster: Cross Terrain Challenge&lt;br /&gt;
* Math Blaster Ages 7-8 - Mission 2: Race for the Omega Trophy&lt;br /&gt;
&lt;br /&gt;
== Engine versions ==&lt;br /&gt;
* 3.0&lt;br /&gt;
** 3.37 (1995)&lt;br /&gt;
* 5.0&lt;br /&gt;
** 5.15&lt;br /&gt;
** 5.51t (1997)&lt;br /&gt;
** 5.55w (2000)&lt;br /&gt;
** 5.55n (2000)&lt;br /&gt;
** 5.60o (2001)&lt;br /&gt;
&lt;br /&gt;
== PDB Path ==&lt;br /&gt;
* N:\Atlas\TestVer32\Atlas\Atlas32.pdb&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
* Smacker (2000s games)&lt;br /&gt;
&lt;br /&gt;
== Booster Code ==&lt;br /&gt;
* Booster Code was back then bundled to unlock in certain games extra level or other stuff.&lt;br /&gt;
&lt;br /&gt;
== ATRES32.DLL ==&lt;br /&gt;
* Atlas Common Resources&lt;br /&gt;
* Manages the Resources (BAP Files and RES files?)&lt;br /&gt;
&lt;br /&gt;
== AtMSS32.dll ==&lt;br /&gt;
* Atlas Sound Extension&lt;br /&gt;
* Handles the Sound related stuff&lt;br /&gt;
&lt;br /&gt;
== AtMsg32.dll ==&lt;br /&gt;
* Atlas Messaging and Name Subsystem&lt;br /&gt;
&lt;br /&gt;
== ATFIO.dll ==&lt;br /&gt;
* Atlas File I/O Extension&lt;br /&gt;
* Handles the File I/O stuff.&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15929</id>
		<title>Engines/Atlas</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15929"/>
		<updated>2025-05-09T19:35:36Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Mega Math Blaster&lt;br /&gt;
* Math Blaster Ages 9-12&lt;br /&gt;
* Matteraketten Junior&lt;br /&gt;
* Math Blaster Ages 6-7&lt;br /&gt;
* Math Blaster: Cross Terrain Challenge&lt;br /&gt;
* Math Blaster Ages 7-8 - Mission 2: Race for the Omega Trophy&lt;br /&gt;
&lt;br /&gt;
== Engine versions ==&lt;br /&gt;
* 3.0&lt;br /&gt;
** 3.37 (1995)&lt;br /&gt;
* 5.0&lt;br /&gt;
** 5.15&lt;br /&gt;
** 5.51t (1997)&lt;br /&gt;
** 5.55w (2000)&lt;br /&gt;
** 5.55n (2000)&lt;br /&gt;
** 5.60o (2001)&lt;br /&gt;
&lt;br /&gt;
== PDB Path ==&lt;br /&gt;
* N:\Atlas\TestVer32\Atlas\Atlas32.pdb&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
* Smacker (2000s games)&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15928</id>
		<title>Engines/Atlas</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15928"/>
		<updated>2025-05-09T19:23:51Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Mega Math Blaster&lt;br /&gt;
* Math Blaster Ages 9-12&lt;br /&gt;
* Matteraketten Junior&lt;br /&gt;
&lt;br /&gt;
== Engine versions ==&lt;br /&gt;
* 3.0&lt;br /&gt;
** 3.37 (1995)&lt;br /&gt;
* 5.0&lt;br /&gt;
** 5.15&lt;br /&gt;
** 5.51t (1997)&lt;br /&gt;
&lt;br /&gt;
== PDB Path ==&lt;br /&gt;
* N:\Atlas\TestVer32\Atlas\Atlas32.pdb&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15927</id>
		<title>Engines/Atlas</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15927"/>
		<updated>2025-05-09T18:43:40Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* Games using this Engine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Mega Math Blaster&lt;br /&gt;
* Math Blaster Ages 9-12&lt;br /&gt;
&lt;br /&gt;
== Engine versions ==&lt;br /&gt;
* 3.0&lt;br /&gt;
** 3.37 (1995)&lt;br /&gt;
* 5.0&lt;br /&gt;
** 5.51t (1997)&lt;br /&gt;
&lt;br /&gt;
== PDB Path ==&lt;br /&gt;
* N:\Atlas\TestVer32\Atlas\Atlas32.pdb&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15926</id>
		<title>Engines/Atlas</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15926"/>
		<updated>2025-05-09T18:43:26Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: /* Engine versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Mega Math Blaster&lt;br /&gt;
&lt;br /&gt;
== Engine versions ==&lt;br /&gt;
* 3.0&lt;br /&gt;
** 3.37 (1995)&lt;br /&gt;
* 5.0&lt;br /&gt;
** 5.51t (1997)&lt;br /&gt;
&lt;br /&gt;
== PDB Path ==&lt;br /&gt;
* N:\Atlas\TestVer32\Atlas\Atlas32.pdb&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15925</id>
		<title>Engines/Atlas</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Atlas&amp;diff=15925"/>
		<updated>2025-05-09T18:31:34Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: Created page with &amp;quot;== Games using this Engine == * Mega Math Blaster  == Engine versions == * 3.0 ** 3.37 (1995)  == PDB Path == * N:\Atlas\TestVer32\Atlas\Atlas32.pdb&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Mega Math Blaster&lt;br /&gt;
&lt;br /&gt;
== Engine versions ==&lt;br /&gt;
* 3.0&lt;br /&gt;
** 3.37 (1995)&lt;br /&gt;
&lt;br /&gt;
== PDB Path ==&lt;br /&gt;
* N:\Atlas\TestVer32\Atlas\Atlas32.pdb&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/XPAT&amp;diff=15924</id>
		<title>Engines/XPAT</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/XPAT&amp;diff=15924"/>
		<updated>2025-05-09T18:23:14Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: fix company name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XPAT is an Game engine made by Digital Media International in 1995.&lt;br /&gt;
&lt;br /&gt;
== Games using this Engine ==&lt;br /&gt;
* The Land Before Time Kindergarten Adventure (1998)&lt;br /&gt;
* The Land Before Time Math Adventure (1997)&lt;br /&gt;
* The Land Before Time Activity Center (1997)&lt;br /&gt;
&lt;br /&gt;
== XCOMPILE ==&lt;br /&gt;
* XCOMPILE.EXE is the Compiler which is used to compile the SPT files (script source code) into XCS (XPAT Compiled Script)&lt;br /&gt;
* They left the Compiler on accident on the retail CD's.&lt;br /&gt;
* Version 1.0&lt;br /&gt;
* Howto use XCOMPILE:&lt;br /&gt;
** 0. Copy the SETUP Folder which stores XCOMPILE.EXE to your Hard drive.&lt;br /&gt;
** 1. Type under Project name, the name for your project.&lt;br /&gt;
** 2. Define X and Y Resolution&lt;br /&gt;
** 3. Keep &amp;quot;Allow Modifcations and Recompiles&amp;quot; enabled.&lt;br /&gt;
** 4. Define under Path where the SPT file is stored. Example: \setup\&lt;br /&gt;
** 5. Keep Update Path for Scripts and DLLs empty.&lt;br /&gt;
** 6. Define under &amp;quot;Name of Starting Script&amp;quot; the name of the script: Example: example.spt&lt;br /&gt;
** 7. If everything is ready press on the floppy disk. There define the Scriptpath and press OK. If its not working may try the Force Recompile option&lt;br /&gt;
&lt;br /&gt;
== XCS ==&lt;br /&gt;
* XCS files are compiled with XCOMPILE&lt;br /&gt;
&lt;br /&gt;
== Used formats ==&lt;br /&gt;
* [https://wiki.multimedia.cx/index.php/BMP BMP]&lt;br /&gt;
* [https://wiki.multimedia.cx/index.php/WAV WAV]&lt;br /&gt;
* [https://wiki.multimedia.cx/index.php/FLX FLX]&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15923</id>
		<title>Engines/Eko</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15923"/>
		<updated>2025-05-09T18:16:53Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Adibou et les saisons magiques&lt;br /&gt;
&lt;br /&gt;
== CPP Files ==&lt;br /&gt;
* ..\..\CactusMessageHub\Source\CactusMessageHub.cpp&lt;br /&gt;
* CCactusPCShaders.cpp&lt;br /&gt;
* PCCartoonPacket2.cpp&lt;br /&gt;
* ..\..\Main\MainInit.cpp&lt;br /&gt;
* ..\..\Main\MainLoad.cpp&lt;br /&gt;
&lt;br /&gt;
== Header Files ==&lt;br /&gt;
* ..//..//Main//TimeTrack.h&lt;br /&gt;
&lt;br /&gt;
== Defines ==&lt;br /&gt;
* #ifndef __TRACK_TIME__H&lt;br /&gt;
* #define __TRACK_TIME__H&lt;br /&gt;
&lt;br /&gt;
== Discovered Assembly from executable ==&lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				m4x4	oPos, v0, c0			sub		r0, v0, c12				dp3		r0.w, r0, r0			rsq		r0.w, r0.w				mul		r0, r0, r0.w			dp3		r0, r0, v1				mov		oD0, v2					mov		r1, c9					mov		oT0, v3					mad		r2, -r0, r1, c9			mul		r2, r2, c13.x			add		oT1.xy, r2, c13.y &lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				mov		r0, v0					sub		r1, r0, c8				dp3		r1, r1, r1				rsq		r1.w, r1.w				nop		mul		r1.x, r1.x, r1.w		mul		r1.x, r1.x,	c11.x			mov		r1, r1.x				min		r1, r1.x, c11.y			mul		r1, r1, v1			add		r0.xyz, r0, r1		m4x4	oPos, r0, c0			mul		oD0, v2, c10			mov		oT0.xyz, v3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Boolean ==&lt;br /&gt;
* m_bHaveToClose has to be true&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
* CCactusPCShaders::InitVertexShaders()&lt;br /&gt;
* CCactusPCShaders::InitPixelShaders()&lt;br /&gt;
* CCactusPCShaders::SetShader()&lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
* SET_CAMERA_MOTION_HANDCAMERA&lt;br /&gt;
* LOAD_HANDCAMERA_PARAMS&lt;br /&gt;
* SAVE_HANDCAMERA_PARAMS&lt;br /&gt;
* SET_CAMERA_MOTION_RACE&lt;br /&gt;
* TYPE_TARGET&lt;br /&gt;
* SET_CAMERA_AUTOFOCUS&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15922</id>
		<title>Engines/Eko</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Engines/Eko&amp;diff=15922"/>
		<updated>2025-05-09T18:12:42Z</updated>

		<summary type="html">&lt;p&gt;BJNFNE: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Games using this Engine ==&lt;br /&gt;
* Adibou et les saisons magiques&lt;br /&gt;
&lt;br /&gt;
== CPP Files ==&lt;br /&gt;
* ..\..\CactusMessageHub\Source\CactusMessageHub.cpp&lt;br /&gt;
* CCactusPCShaders.cpp&lt;br /&gt;
* PCCartoonPacket2.cpp&lt;br /&gt;
* ..\..\Main\MainInit.cpp&lt;br /&gt;
* ..\..\Main\MainLoad.cpp&lt;br /&gt;
&lt;br /&gt;
== Header Files ==&lt;br /&gt;
* ..//..//Main//TimeTrack.h&lt;br /&gt;
&lt;br /&gt;
== Defines ==&lt;br /&gt;
* #ifndef __TRACK_TIME__H&lt;br /&gt;
* #define __TRACK_TIME__H&lt;br /&gt;
&lt;br /&gt;
== Discovered Assembly from executable ==&lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				m4x4	oPos, v0, c0			sub		r0, v0, c12				dp3		r0.w, r0, r0			rsq		r0.w, r0.w				mul		r0, r0, r0.w			dp3		r0, r0, v1				mov		oD0, v2					mov		r1, c9					mov		oT0, v3					mad		r2, -r0, r1, c9			mul		r2, r2, c13.x			add		oT1.xy, r2, c13.y &lt;br /&gt;
		vs.1.1							dcl_position	v0				dcl_normal		v1				dcl_color		v2      		dcl_texcoord	v3				mov		r0, v0					sub		r1, r0, c8				dp3		r1, r1, r1				rsq		r1.w, r1.w				nop		mul		r1.x, r1.x, r1.w		mul		r1.x, r1.x,	c11.x			mov		r1, r1.x				min		r1, r1.x, c11.y			mul		r1, r1, v1			add		r0.xyz, r0, r1		m4x4	oPos, r0, c0			mul		oD0, v2, c10			mov		oT0.xyz, v3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Boolean ==&lt;br /&gt;
* m_bHaveToClose has to be true&lt;/div&gt;</summary>
		<author><name>BJNFNE</name></author>
	</entry>
</feed>