<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://moddingwiki.shikadi.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Napalm</id>
	<title>ModdingWiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://moddingwiki.shikadi.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Napalm"/>
	<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/wiki/Special:Contributions/Napalm"/>
	<updated>2026-05-25T02:10:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Dave_2_Huffman_compression&amp;diff=6133</id>
		<title>Dave 2 Huffman compression</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Dave_2_Huffman_compression&amp;diff=6133"/>
		<updated>2015-04-21T16:04:56Z</updated>

		<summary type="html">&lt;p&gt;Napalm: /* Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Dangerous Dave 2]] Huffman compression is the means by which most of the non-tileset graphics are compressed. (Screens and sprites.)&lt;br /&gt;
&lt;br /&gt;
The file is composed of three parts, a brief header, the Huffman binary tree, and the compressed data. The &#039;header&#039; consists of the string &#039;HUFF&#039; followed by a dword giving the decompressed file size. The Huffman table is of the usual format, giving a fixed size of 404 bytes before the compressed data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
This format reverse engineered by [[User:Napalm]]&lt;br /&gt;
&lt;br /&gt;
The [[Huffman Compression]] page has source code for producing a Huffman table in this format that doesn&#039;t decompress data, so the raw data can be copied right after it.&lt;br /&gt;
&lt;br /&gt;
[[Category:Dangerous Dave 2]]&lt;br /&gt;
[[Category:File Formats]]&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Dave_2_Intro_format&amp;diff=6132</id>
		<title>Dave 2 Intro format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Dave_2_Intro_format&amp;diff=6132"/>
		<updated>2015-04-21T16:03:49Z</updated>

		<summary type="html">&lt;p&gt;Napalm: Added user profile links.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &amp;lt;tt&amp;gt;INTRO.DD2&amp;lt;/tt&amp;gt; file stores a masked image used at the start of [[Dangerous Dave 2]]. It differs in format and compression from all other files used in the game.&lt;br /&gt;
&lt;br /&gt;
The file is a 256x64 [[Raw EGA data]] image compressed using [[RLEW compression]]] The color dark blue is transparent here, acting as a mask while only needing 4 EGA planes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
Dave 2 uses a trigonometric function to work out the image&#039;s size and co-ordinates when displaying it.&lt;br /&gt;
Format reverse engineered by [[User:Napalm]] and [[User:Levellass]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Dangerous Dave 2]]&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Graphics Files]]&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=User:Napalm&amp;diff=6131</id>
		<title>User:Napalm</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=User:Napalm&amp;diff=6131"/>
		<updated>2015-04-21T16:03:15Z</updated>

		<summary type="html">&lt;p&gt;Napalm: Adding profile.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I&#039;ve been around in the keen-modding community since 2007. I grew up with DOS games and I&#039;ve always had a desire to make one. Never actually getting around to coming up with an entire game plot. I satisfied myself with working out how the games work &#039;under-the-hood&#039;. I have contributed a little here and there over the years. Every-time I get a urge to go old skool I revisit and dig out my old code.&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Viacom_New_Media_Graphics_File_Format&amp;diff=2694</id>
		<title>Viacom New Media Graphics File Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Viacom_New_Media_Graphics_File_Format&amp;diff=2694"/>
		<updated>2010-02-09T23:06:36Z</updated>

		<summary type="html">&lt;p&gt;Napalm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Beavis and Butthead In Virtual Stupidity]] stores its graphics externally in .VNM/.000 files. This information here is preliminary and needs verification and is subject to change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VNM_HEADER: VNM File Header &lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Signature||File Signature (should match 0x564E4D1A aka &amp;quot;VNM\x1A&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Flags||Possibly file information flags.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Size||Size Of Data&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetPal|| Offset to Pal Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetUnknown1||Offset to currently Unknown Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetUnknown2||Offset to currently Unknown Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetImages||Offset to VNM_IMAGE array.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE PalIndexFirst||First Valid Index in Colour Palette.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE PalIndexSize||Count of Palette Indexes stored in file at OffsetPal.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE ImageCount||Count of Images stored in file at OffsetImages.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Spr196.png|100px|right|Sprite 196 from BBLOOGIE Mini-game]]&lt;br /&gt;
VNM_IMAGE: VNM Image Header &lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Offset||Offset in file to where raw image data starts.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Type||0 = Bitmap, 1 = Sprite&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Width||Width of this Image&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Height||Height of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE XPos||XPos of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE YPos||YPos of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is test code that decompresses/decodes/extracts Sprite 196 from VNM raw data in the BBLOOGIE Mini-game. Image can be seen to right.&lt;br /&gt;
&lt;br /&gt;
[http://www.netcore2k.net/downloads/spr196.zip spr196.zip]&lt;br /&gt;
&lt;br /&gt;
An somewhat explained version of the raw data is below.&lt;br /&gt;
&amp;lt;pre&amp;gt;F800                          19 FD00  18F700                              0F                 FB &lt;br /&gt;
F901                       18 19 FF00  18FF0117 19             F801        0E 10 FD00  0F &lt;br /&gt;
FA07                       19 18 18 17 18 19 17 19             F801        0E 10 FD00  0F &lt;br /&gt;
FA08                    19 17 19 19 17 19 18 18 19 FF00  19    FB05     0F 11 0F 11 0F 10 &lt;br /&gt;
FB0B                    19 18 17 19 18 17 18 18 17 19 17 18    FB05     10 11 10 11 0E 11 &lt;br /&gt;
FB0C                    18 18 19 19 18 17 18 19 17 19 17 19 18 FC04     11 0E 0F 10 0E        FF &lt;br /&gt;
FC0D                 19 17 19 18 19 19 17 18 19 17 18 17 19 18 FD05     10 0E 11 10 11 0F     FF &lt;br /&gt;
FC0D                 19 17 19 18 19 17 18 19 17 18 19 17 19 17 FD05     10 0F 11 11 10 11     FF &lt;br /&gt;
FC0D                 18 17 19 17 18 17 19 18 17 18 19 18 19 19 FC04     11 10 10 0F 10        FF &lt;br /&gt;
FC0E                 18 18 19 17 17 19 19 18 17 18 19 19 18 19 18 FD03  11 0F 0F 10           FE &lt;br /&gt;
FC0E                 19 18 19 18 19 18 19 18 17 18 19 18 17 18 19 FD02  11 11 10              FD &lt;br /&gt;
FC0E                 19 18 19 18 19 17 19 19 17 18 19 17 17 19 19 FD02  11 10 0F              FD &lt;br /&gt;
FC0E                 19 17 18 10 0F 18 19 17 18 19 19 18 17 19 19 FD02  11 0F 10              FD &lt;br /&gt;
FC0E                 18 17 19 0F 0E 0F 18 18 19 0F 10 18 17 19 18 FD02  11 0F 10              FD &lt;br /&gt;
FC0E                 19 17 19 0E 0E 0E 0E 0E 0E 0E 0E 0F 18 19 18 FD02  11 0E 10              FD &lt;br /&gt;
FC0E                 19 18 10 0E 0F 0F 0E 0E 0E 0E 0F 0F 10 17 19 FD02  11 0E 10              FD &lt;br /&gt;
FC0E                 18 19 0F 10 11 11 10 0E 0F 10 11 10 0F 17 19 FD02  11 0E 10              FD &lt;br /&gt;
FC0E                 17 19 0E 0F 10 10 11 0F 10 11 10 0F 0E 18 19 FD02  11 0E 10              FD &lt;br /&gt;
FC0E                 19 17 10 0E 0F 0E 0F 0E 10 0F 0E 0E 0E 19 18 FD02  11 0E 10              FD &lt;br /&gt;
FC0E                 18 11 0F 0E 0E 0F 10 0E 0E 10 0F 0E 0E 19 17 FD02  11 0E 10              FD &lt;br /&gt;
FB0D                 10 0F 0E 0E 10 11 0F 11 10 10 0E 0F 10 17 FD02     10 0E 11              FD &lt;br /&gt;
FB0C                 11 10 0F 0E 0E 0F 10 10 0F 0F 0E 0F 0FFC02         10 0E 11              FD &lt;br /&gt;
FA0B                    11 0F 0E 0E 0E 0F 0F 0F 0E 0E 0F 11FC02         0E 0F 11              FD &lt;br /&gt;
FA0B                    11 10 0F 0E 0F 20 10 20 0F 0E 0F 11FD02      10 0E 10                 FC &lt;br /&gt;
F90A                       10 0F 0E 10 20 20 20 10 0F 10 11FD02      0E 0F 11                 FC &lt;br /&gt;
F909                       11 0F 0E 11 15 16 15 11 0F 10FD02      10 0E 10                    FB &lt;br /&gt;
F909                       11 0F 0E 11 1C 1C 1C 11 0F 11FD02      0E 0F 11                    FB &lt;br /&gt;
F808                          10 0F 10 11 1C 11 10 0F 11FE02   10 0E 10                       FA &lt;br /&gt;
F807                          10 0F 0F 10 11 10 0F 10FE03   10 0E 0F 11                       FA &lt;br /&gt;
F807                          11 10 0F 0E 0F 0E 0F 11FF041B 10 0E 10 11                       FA &lt;br /&gt;
F70B                             11 10 0F 0E 0F 10 11 17 1B 10 0F 11                          F9 &lt;br /&gt;
F70B                             11 10 10 10 10 11 17 1B 1A 1B 10 11                          F9 &lt;br /&gt;
F60A                                11 10 0F 10 11 1C 1B 1A 1A 1B 1B                          F9 &lt;br /&gt;
F70B                             1B 1B 10 10 10 1B 1C 1B 1A 1A 1A 1C                          F9 &lt;br /&gt;
F90D                       1B 1B 1A 1A 1B 1B 1B 1A 1B 1A 1A 1A 1B 1C                          F9 &lt;br /&gt;
FA0D                    1B 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1B 1C                             F8 &lt;br /&gt;
FB0E                 1B 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1B 1C                             F8 &lt;br /&gt;
FC0E              1B 1A 1A 1A 1B 1A 1A 1A 1A 1A 1A 1A 1A 1B 1C                                F7 &lt;br /&gt;
FC0E              1B 1A 1A 1B 1C 1B 1A 1A 1A 1A 1A 1A 1B 1B 1C                                F7 &lt;br /&gt;
FD0F           10 10 1B 1B 1C 1B 1B 1A 1A 1A 1A 1A 1A 1B 1B 1C                                F7 &lt;br /&gt;
FD0F           10 0F 10 1C 1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1B 1C                                F7 &lt;br /&gt;
FE03        10 0E 10 11FF0A1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
FE02        10 0F 11   FE0A1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
FF03     10 0E 10 11   FE0A1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
FF02     10 0F 11   FD0A   1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
FF02     10 10 11   FD0A   1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
02    10 0F 10      FC0A   1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
02    10 0E 11      FC0A   1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
02    10 0E 11      FC0A   1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
02    10 0E 11      FC0A   1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
02    10 0E 11      FD0B1C 1B 1A 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
02    10 0F 11      FD0B1C 1B 1A 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
02    10 10 11      FD0B1C 1B 1A 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
03    10 0F 0F 10   FE0B1C 1B 1A 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
04    11 0E 10 0F 10FF0B1C 1B 1B 1A 1A 1A 1A 1A 1A 1B 1B 1C                                   F6 &lt;br /&gt;
03    11 0E 0F 11   FE0B1C 1C 1C 1B 1B 1B 1B 1B 1B 1C 1C 1C                                   F6 &lt;br /&gt;
03    11 0F 0E 10   FE0B22 22 22 21 21 21 21 21 21 21 22 22                                   F6 &lt;br /&gt;
FF02     11 11 11   FE0B22 21 21 20 20 20 20 20 20 20 21 22                                   F6 &lt;br /&gt;
FA0B                    22 21 20 20 20 20 20 20 20 20 21 22                                   F6 &lt;br /&gt;
FA0B                    22 21 20 20 20 21 20 20 20 20 21 22                                   F6 &lt;br /&gt;
FA0B                    22 21 20 20 21 22 21 20 20 20 21 22                                   F6 &lt;br /&gt;
FA0B                    22 21 20 20 21 22 22 21 20 20 21 22                                   F6 &lt;br /&gt;
FA0B                    22 21 21 21 21 22 22 21 21 21 21 22                                   F6 &lt;br /&gt;
F909                       11 10 0F 10 11 11 10 0F 10 11                                      F5 &lt;br /&gt;
F909                       11 0F 0E 0F 11 11 0F 0E 0F 11                                      F5 &lt;br /&gt;
F909                       11 0F 0E 0F 11 11 0F 0E 0F 11                                      F5 &lt;br /&gt;
F909                       11 0F 0E 0F 11 11 0F 0E 0F 11                                      F5 &lt;br /&gt;
F909                       11 0F 0E 0F 11 11 0F 0E 0F 11                                      F5 &lt;br /&gt;
F909                       11 10 0E 0F 11 11 0F 0E 10 11                                      F5 &lt;br /&gt;
F807                          11 0E 0F 11 11 0F 0E 11                                         F4 &lt;br /&gt;
F807                          11 0E 0F 11 11 0F 0E 11                                         F4 &lt;br /&gt;
F807                          11 0E 0F 11 11 0F 0E 11                                         F4 &lt;br /&gt;
F807                          11 0E 0F 11 11 0F 0E 11                                         F4 &lt;br /&gt;
F807                          11 0E 10 11 11 10 0E 11                                         F4 &lt;br /&gt;
F802                          16 16 16  FE02 16 16 16                                         F4 &lt;br /&gt;
F802                          16 15 16  FE02 16 15 16                                         F4 &lt;br /&gt;
F802                          16 15 16  FE02 16 15 16                                         F4 &lt;br /&gt;
F802                          16 15 16  FE02 16 15 16                                         F4 &lt;br /&gt;
F807                          1C 1C 1C 1C 1C 1C 1C 1C                                         F4 &lt;br /&gt;
FA0B                    1C 1B 1A 1B 1B 1C 1C 1B 1B 1A 1B 1C                                   F6 &lt;br /&gt;
FB0D                 1C 1B 1A 1B 1B 1C 1C 1C 1C 1B 1B 1A 1B 1C                                F7 &lt;br /&gt;
FB04                 1C 1C 1C 1C 1C     FC04    1C 1C 1C 1C 1C                                F7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some current BETA demo code is below. Fully functional.&lt;br /&gt;
&amp;lt;pre&amp;gt;// &lt;br /&gt;
// .VNM/.000 Image Extractor - by Napalm&lt;br /&gt;
// BETA - Please do not use this in production mods&lt;br /&gt;
// &lt;br /&gt;
// License: Creative Commons Attribution-Share Alike 2.0 UK: England &amp;amp; Wales&lt;br /&gt;
// http://creativecommons.org/licenses/by-sa/2.0/uk/&lt;br /&gt;
// &lt;br /&gt;
// If you use this all or part of my code please credit me as the license states.&lt;br /&gt;
// &lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;pshpack2.h&amp;gt;&lt;br /&gt;
typedef struct _BITMAPFILEHDR {&lt;br /&gt;
	unsigned short type;&lt;br /&gt;
	unsigned long  size;&lt;br /&gt;
	unsigned short reserved1;&lt;br /&gt;
	unsigned short reserved2;&lt;br /&gt;
	unsigned long  offset;&lt;br /&gt;
} BITMAPFILEHDR;&lt;br /&gt;
&lt;br /&gt;
typedef struct _BITMAPINFOHDR {&lt;br /&gt;
	unsigned long  size;&lt;br /&gt;
	  signed long  width;&lt;br /&gt;
	  signed long  height;&lt;br /&gt;
	unsigned short planes;&lt;br /&gt;
	unsigned short bitcount;&lt;br /&gt;
	unsigned long  compression;&lt;br /&gt;
	unsigned long  image_size;&lt;br /&gt;
	  signed long  x_per_meter;&lt;br /&gt;
	  signed long  y_per_meter;&lt;br /&gt;
	unsigned long  colors_used;&lt;br /&gt;
	unsigned long  colors_important;&lt;br /&gt;
} BITMAPINFOHDR;&lt;br /&gt;
#include &amp;lt;poppack.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct _VNMSPRITE {&lt;br /&gt;
	unsigned long offset; // to bitmap/frame data&lt;br /&gt;
	unsigned long type;   // 0 = Bitmap, 1 = Sprite&lt;br /&gt;
	  signed long width;&lt;br /&gt;
	  signed long height;&lt;br /&gt;
	  signed long x;&lt;br /&gt;
	  signed long y;&lt;br /&gt;
} VNMSPRITE;&lt;br /&gt;
&lt;br /&gt;
typedef struct _VNMHEADER {&lt;br /&gt;
	unsigned long signature;     // 0x564E4D1A &#039;VNM\x1A&#039; // 1.10 version?&lt;br /&gt;
	unsigned long zero;          // 0         ? start of file? always zero?&lt;br /&gt;
	unsigned long size;          // 324764    ? size of file&lt;br /&gt;
	unsigned long paletteoffset; &lt;br /&gt;
	unsigned long offset1;		 // fixed 256 long array of something?&lt;br /&gt;
	unsigned long offset2;		 // fixed 256 long array of something?&lt;br /&gt;
	unsigned long spriteoffset;  //&lt;br /&gt;
	unsigned long palettestart;  // 10  start palette index?&lt;br /&gt;
	unsigned long palettesize;   // 236 number of palette entries?&lt;br /&gt;
	  signed long spritecount;   // 212 number of sprite index?&lt;br /&gt;
} VNMHEADER;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void extractpalette(unsigned long *palette, unsigned char *data,&lt;br /&gt;
				   unsigned long start, unsigned long size)&lt;br /&gt;
{&lt;br /&gt;
	unsigned char buffer[4];&lt;br /&gt;
	unsigned long index;&lt;br /&gt;
&lt;br /&gt;
	buffer[3] = 0;&lt;br /&gt;
	memset(palette, 0, sizeof(unsigned long) * 256);&lt;br /&gt;
	for(index = start; index &amp;lt; (start + size); index++){&lt;br /&gt;
		buffer[0] = (data[2] &amp;lt;&amp;lt; 2);&lt;br /&gt;
		buffer[1] = (data[1] &amp;lt;&amp;lt; 2);&lt;br /&gt;
		buffer[2] = (data[0] &amp;lt;&amp;lt; 2);&lt;br /&gt;
		data += 3;&lt;br /&gt;
		palette[index] = *(unsigned long *)buffer;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void extractbitmap(FILE *bmp, unsigned char *buffer,&lt;br /&gt;
				   VNMSPRITE *spr, BITMAPINFOHDR *bmpinfo, long rounding)&lt;br /&gt;
{&lt;br /&gt;
	unsigned char *line = (buffer + spr-&amp;gt;offset + bmpinfo-&amp;gt;image_size);&lt;br /&gt;
	char zerobuffer[4] = { 0 };&lt;br /&gt;
&lt;br /&gt;
	while(line &amp;gt; buffer + spr-&amp;gt;offset){&lt;br /&gt;
		line -= spr-&amp;gt;width;&lt;br /&gt;
		fwrite(line, 1, spr-&amp;gt;width, bmp);&lt;br /&gt;
		if(rounding)&lt;br /&gt;
			fwrite(zerobuffer, 1, rounding, bmp);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void extractsprite(FILE *bmp, unsigned char *buffer,&lt;br /&gt;
				   VNMSPRITE *spr, BITMAPINFOHDR *bmpinfo, long rounding, int transparent)&lt;br /&gt;
{&lt;br /&gt;
	unsigned long *index = (unsigned long *)(buffer + spr-&amp;gt;offset);&lt;br /&gt;
	unsigned char *row;&lt;br /&gt;
	char zerobuffer[4] = { 0 };&lt;br /&gt;
	int y, j, pixel, count, width, escape;&lt;br /&gt;
&lt;br /&gt;
	escape = (0x100 - spr-&amp;gt;width);&lt;br /&gt;
	for(y = (spr-&amp;gt;height - 1); y &amp;gt;= 0; y--){&lt;br /&gt;
		row = (buffer + index[y]);&lt;br /&gt;
		j = width = spr-&amp;gt;width;&lt;br /&gt;
		while(j &amp;gt; 0){&lt;br /&gt;
			pixel = *row++;&lt;br /&gt;
			if(pixel &amp;gt;= escape){&lt;br /&gt;
				count = (0x100 - pixel);&lt;br /&gt;
				pixel = transparent;&lt;br /&gt;
				row++; // whats this byte for?&lt;br /&gt;
				while(count-- &amp;amp;&amp;amp; j--)&lt;br /&gt;
					fputc(pixel, bmp);&lt;br /&gt;
			}else if(j == width &amp;amp;&amp;amp; pixel &amp;lt; escape){&lt;br /&gt;
				width++;&lt;br /&gt;
			}else{&lt;br /&gt;
				fputc(pixel, bmp);&lt;br /&gt;
				j--;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if(rounding)&lt;br /&gt;
			fwrite(zerobuffer, 1, rounding, bmp);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initbmpheaders(BITMAPFILEHDR *filehdr, BITMAPINFOHDR *infohdr)&lt;br /&gt;
{&lt;br /&gt;
	memset(filehdr, 0, sizeof(BITMAPFILEHDR));&lt;br /&gt;
	memset(infohdr, 0, sizeof(BITMAPINFOHDR));&lt;br /&gt;
	infohdr-&amp;gt;size        = sizeof(BITMAPINFOHDR);&lt;br /&gt;
	infohdr-&amp;gt;planes      = 1;&lt;br /&gt;
	infohdr-&amp;gt;bitcount    = 8; // BI_8_BIT&lt;br /&gt;
	infohdr-&amp;gt;compression = 0; // BI_RGB&lt;br /&gt;
	filehdr-&amp;gt;type        = &#039;MB&#039;;&lt;br /&gt;
	filehdr-&amp;gt;offset      = sizeof(BITMAPFILEHDR) +&lt;br /&gt;
		infohdr-&amp;gt;size + (sizeof(unsigned long) * 256);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
	unsigned long palette[256], *index;&lt;br /&gt;
	unsigned char *buffer;&lt;br /&gt;
	BITMAPFILEHDR bmpfile;&lt;br /&gt;
	BITMAPINFOHDR bmpinfo;&lt;br /&gt;
	VNMHEADER *hdr;&lt;br /&gt;
	VNMSPRITE *spr;&lt;br /&gt;
	FILE *vnm, *bmp;&lt;br /&gt;
	long size, i, rounding;&lt;br /&gt;
	char name[32];&lt;br /&gt;
	&lt;br /&gt;
	vnm = fopen(argv[1], &amp;quot;rb&amp;quot;);&lt;br /&gt;
	if(!vnm){&lt;br /&gt;
		perror(argv[1]);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
	fseek(vnm, 0, SEEK_END);&lt;br /&gt;
	size = ftell(vnm);&lt;br /&gt;
	fseek(vnm, 0, SEEK_SET);&lt;br /&gt;
&lt;br /&gt;
	buffer = (unsigned char *)malloc(size);&lt;br /&gt;
	if(!buffer){&lt;br /&gt;
		perror(&amp;quot;malloc filesize&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
	fread(buffer, 1, size, vnm);&lt;br /&gt;
	fclose(vnm);&lt;br /&gt;
&lt;br /&gt;
	hdr = (VNMHEADER *)buffer;&lt;br /&gt;
	if(hdr-&amp;gt;signature != 0x564E4D1A &amp;amp;&amp;amp; hdr-&amp;gt;signature != 0x1A4D4E56){&lt;br /&gt;
		perror(&amp;quot;invalid vnm signature&amp;quot;);&lt;br /&gt;
		free(buffer);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	extractpalette(palette, buffer + hdr-&amp;gt;paletteoffset, hdr-&amp;gt;palettestart, hdr-&amp;gt;palettesize);&lt;br /&gt;
	initbmpheaders(&amp;amp;bmpfile, &amp;amp;bmpinfo);&lt;br /&gt;
	&lt;br /&gt;
	index = (unsigned long *)(buffer + hdr-&amp;gt;spriteoffset);&lt;br /&gt;
	for(i = 0; i &amp;lt; hdr-&amp;gt;spritecount; i++){ // &lt;br /&gt;
		spr = (VNMSPRITE *)(buffer + index[i]);&lt;br /&gt;
		printf(&amp;quot;spr %#3d: %c(%#3d,%#3d)-(%#3d,%#3d)\n&amp;quot;, i, ((spr-&amp;gt;type) ? &#039;S&#039;:&#039;B&#039;),&lt;br /&gt;
			spr-&amp;gt;x, spr-&amp;gt;y, spr-&amp;gt;width, spr-&amp;gt;height);&lt;br /&gt;
		&lt;br /&gt;
		rounding = (spr-&amp;gt;width % 4);&lt;br /&gt;
		if(rounding &amp;gt; 0) rounding = (4 - rounding);&lt;br /&gt;
		bmpinfo.width      = spr-&amp;gt;width;&lt;br /&gt;
		bmpinfo.height     = spr-&amp;gt;height;&lt;br /&gt;
		bmpinfo.image_size = ((spr-&amp;gt;width + rounding) * spr-&amp;gt;height);&lt;br /&gt;
		bmpfile.size       = (bmpfile.offset + bmpinfo.image_size);&lt;br /&gt;
		&lt;br /&gt;
		sprintf(name, &amp;quot;output\\%03d.bmp&amp;quot;, i);&lt;br /&gt;
		bmp = fopen(name, &amp;quot;wb&amp;quot;);&lt;br /&gt;
		if(!bmp){&lt;br /&gt;
			sprintf(name, &amp;quot;error opening %03d.bmp&amp;quot;, i);&lt;br /&gt;
			perror(name);&lt;br /&gt;
			exit(1);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		fwrite(&amp;amp;bmpfile, sizeof(bmpfile), 1, bmp);&lt;br /&gt;
		fwrite(&amp;amp;bmpinfo, sizeof(bmpinfo), 1, bmp);&lt;br /&gt;
		fwrite(palette,  sizeof(palette), 1, bmp);&lt;br /&gt;
		&lt;br /&gt;
		if(spr-&amp;gt;type)&lt;br /&gt;
			extractsprite(bmp, buffer, spr, &amp;amp;bmpinfo, rounding, 189); // 187&lt;br /&gt;
		else&lt;br /&gt;
			extractbitmap(bmp, buffer, spr, &amp;amp;bmpinfo, rounding);&lt;br /&gt;
		&lt;br /&gt;
		fclose(bmp);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	free(buffer);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
This file format was reverse engineered by [[User:Napalm|Napalm]].&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Graphics Files]]&lt;br /&gt;
[[Category:Beavis and Butthead In Virtual Stupidity]]&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Viacom_New_Media_Graphics_File_Format&amp;diff=2693</id>
		<title>Viacom New Media Graphics File Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Viacom_New_Media_Graphics_File_Format&amp;diff=2693"/>
		<updated>2010-02-09T23:05:49Z</updated>

		<summary type="html">&lt;p&gt;Napalm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Beavis and Butthead In Virtual Stupidity]] stores its graphics externally in .VNM/.000 files. This information here is preliminary and needs verification and is subject to change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VNM_HEADER: VNM File Header &lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Signature||File Signature (should match 0x564E4D1A aka &amp;quot;VNM\x1A&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Flags||Possibly file information flags.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Size||Size Of Data&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetPal|| Offset to Pal Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetUnknown1||Offset to currently Unknown Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetUnknown2||Offset to currently Unknown Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetImages||Offset to VNM_IMAGE array.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE PalIndexFirst||First Valid Index in Colour Palette.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE PalIndexSize||Count of Palette Indexes stored in file at OffsetPal.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE ImageCount||Count of Images stored in file at OffsetImages.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Spr196.png|100px|right|Sprite 196 from BBLOOGIE Mini-game]]&lt;br /&gt;
VNM_IMAGE: VNM Image Header &lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Offset||Offset in file to where raw image data starts.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Type||0 = Bitmap, 1 = Sprite&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Width||Width of this Image&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Height||Height of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE XPos||XPos of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE YPos||YPos of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is test code that decompresses/decodes/extracts Sprite 196 from VNM raw data in the BBLOOGIE Mini-game. Image can be seen to right.&lt;br /&gt;
&lt;br /&gt;
[http://www.netcore2k.net/downloads/spr196.zip spr196.zip]&lt;br /&gt;
&lt;br /&gt;
An somewhat explained version of the raw data is below.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;F800                          19 FD00  18F700                              0F                 FB &lt;br /&gt;
F901                       18 19 FF00  18FF0117 19             F801        0E 10 FD00  0F &lt;br /&gt;
FA07                       19 18 18 17 18 19 17 19             F801        0E 10 FD00  0F &lt;br /&gt;
FA08                    19 17 19 19 17 19 18 18 19 FF00  19    FB05     0F 11 0F 11 0F 10 &lt;br /&gt;
FB0B                    19 18 17 19 18 17 18 18 17 19 17 18    FB05     10 11 10 11 0E 11 &lt;br /&gt;
FB0C                    18 18 19 19 18 17 18 19 17 19 17 19 18 FC04     11 0E 0F 10 0E        FF &lt;br /&gt;
FC0D                 19 17 19 18 19 19 17 18 19 17 18 17 19 18 FD05     10 0E 11 10 11 0F     FF &lt;br /&gt;
FC0D                 19 17 19 18 19 17 18 19 17 18 19 17 19 17 FD05     10 0F 11 11 10 11     FF &lt;br /&gt;
FC0D                 18 17 19 17 18 17 19 18 17 18 19 18 19 19 FC04     11 10 10 0F 10        FF &lt;br /&gt;
FC0E                 18 18 19 17 17 19 19 18 17 18 19 19 18 19 18 FD03  11 0F 0F 10           FE &lt;br /&gt;
FC0E                 19 18 19 18 19 18 19 18 17 18 19 18 17 18 19 FD02  11 11 10              FD &lt;br /&gt;
FC0E                 19 18 19 18 19 17 19 19 17 18 19 17 17 19 19 FD02  11 10 0F              FD &lt;br /&gt;
FC0E                 19 17 18 10 0F 18 19 17 18 19 19 18 17 19 19 FD02  11 0F 10              FD &lt;br /&gt;
FC0E                 18 17 19 0F 0E 0F 18 18 19 0F 10 18 17 19 18 FD02  11 0F 10              FD &lt;br /&gt;
FC0E                 19 17 19 0E 0E 0E 0E 0E 0E 0E 0E 0F 18 19 18 FD02  11 0E 10              FD &lt;br /&gt;
FC0E                 19 18 10 0E 0F 0F 0E 0E 0E 0E 0F 0F 10 17 19 FD02  11 0E 10              FD &lt;br /&gt;
FC0E                 18 19 0F 10 11 11 10 0E 0F 10 11 10 0F 17 19 FD02  11 0E 10              FD &lt;br /&gt;
FC0E                 17 19 0E 0F 10 10 11 0F 10 11 10 0F 0E 18 19 FD02  11 0E 10              FD &lt;br /&gt;
FC0E                 19 17 10 0E 0F 0E 0F 0E 10 0F 0E 0E 0E 19 18 FD02  11 0E 10              FD &lt;br /&gt;
FC0E                 18 11 0F 0E 0E 0F 10 0E 0E 10 0F 0E 0E 19 17 FD02  11 0E 10              FD &lt;br /&gt;
FB0D                 10 0F 0E 0E 10 11 0F 11 10 10 0E 0F 10 17 FD02     10 0E 11              FD &lt;br /&gt;
FB0C                 11 10 0F 0E 0E 0F 10 10 0F 0F 0E 0F 0FFC02         10 0E 11              FD &lt;br /&gt;
FA0B                    11 0F 0E 0E 0E 0F 0F 0F 0E 0E 0F 11FC02         0E 0F 11              FD &lt;br /&gt;
FA0B                    11 10 0F 0E 0F 20 10 20 0F 0E 0F 11FD02      10 0E 10                 FC &lt;br /&gt;
F90A                       10 0F 0E 10 20 20 20 10 0F 10 11FD02      0E 0F 11                 FC &lt;br /&gt;
F909                       11 0F 0E 11 15 16 15 11 0F 10FD02      10 0E 10                    FB &lt;br /&gt;
F909                       11 0F 0E 11 1C 1C 1C 11 0F 11FD02      0E 0F 11                    FB &lt;br /&gt;
F808                          10 0F 10 11 1C 11 10 0F 11FE02   10 0E 10                       FA &lt;br /&gt;
F807                          10 0F 0F 10 11 10 0F 10FE03   10 0E 0F 11                       FA &lt;br /&gt;
F807                          11 10 0F 0E 0F 0E 0F 11FF041B 10 0E 10 11                       FA &lt;br /&gt;
F70B                             11 10 0F 0E 0F 10 11 17 1B 10 0F 11                          F9 &lt;br /&gt;
F70B                             11 10 10 10 10 11 17 1B 1A 1B 10 11                          F9 &lt;br /&gt;
F60A                                11 10 0F 10 11 1C 1B 1A 1A 1B 1B                          F9 &lt;br /&gt;
F70B                             1B 1B 10 10 10 1B 1C 1B 1A 1A 1A 1C                          F9 &lt;br /&gt;
F90D                       1B 1B 1A 1A 1B 1B 1B 1A 1B 1A 1A 1A 1B 1C                          F9 &lt;br /&gt;
FA0D                    1B 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1B 1C                             F8 &lt;br /&gt;
FB0E                 1B 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1B 1C                             F8 &lt;br /&gt;
FC0E              1B 1A 1A 1A 1B 1A 1A 1A 1A 1A 1A 1A 1A 1B 1C                                F7 &lt;br /&gt;
FC0E              1B 1A 1A 1B 1C 1B 1A 1A 1A 1A 1A 1A 1B 1B 1C                                F7 &lt;br /&gt;
FD0F           10 10 1B 1B 1C 1B 1B 1A 1A 1A 1A 1A 1A 1B 1B 1C                                F7 &lt;br /&gt;
FD0F           10 0F 10 1C 1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1B 1C                                F7 &lt;br /&gt;
FE03        10 0E 10 11FF0A1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
FE02        10 0F 11   FE0A1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
FF03     10 0E 10 11   FE0A1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
FF02     10 0F 11   FD0A   1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
FF02     10 10 11   FD0A   1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
02    10 0F 10      FC0A   1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
02    10 0E 11      FC0A   1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
02    10 0E 11      FC0A   1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
02    10 0E 11      FC0A   1C 1B 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
02    10 0E 11      FD0B1C 1B 1A 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
02    10 0F 11      FD0B1C 1B 1A 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
02    10 10 11      FD0B1C 1B 1A 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
03    10 0F 0F 10   FE0B1C 1B 1A 1A 1A 1A 1A 1A 1A 1A 1B 1C                                   F6 &lt;br /&gt;
04    11 0E 10 0F 10FF0B1C 1B 1B 1A 1A 1A 1A 1A 1A 1B 1B 1C                                   F6 &lt;br /&gt;
03    11 0E 0F 11   FE0B1C 1C 1C 1B 1B 1B 1B 1B 1B 1C 1C 1C                                   F6 &lt;br /&gt;
03    11 0F 0E 10   FE0B22 22 22 21 21 21 21 21 21 21 22 22                                   F6 &lt;br /&gt;
FF02     11 11 11   FE0B22 21 21 20 20 20 20 20 20 20 21 22                                   F6 &lt;br /&gt;
FA0B                    22 21 20 20 20 20 20 20 20 20 21 22                                   F6 &lt;br /&gt;
FA0B                    22 21 20 20 20 21 20 20 20 20 21 22                                   F6 &lt;br /&gt;
FA0B                    22 21 20 20 21 22 21 20 20 20 21 22                                   F6 &lt;br /&gt;
FA0B                    22 21 20 20 21 22 22 21 20 20 21 22                                   F6 &lt;br /&gt;
FA0B                    22 21 21 21 21 22 22 21 21 21 21 22                                   F6 &lt;br /&gt;
F909                       11 10 0F 10 11 11 10 0F 10 11                                      F5 &lt;br /&gt;
F909                       11 0F 0E 0F 11 11 0F 0E 0F 11                                      F5 &lt;br /&gt;
F909                       11 0F 0E 0F 11 11 0F 0E 0F 11                                      F5 &lt;br /&gt;
F909                       11 0F 0E 0F 11 11 0F 0E 0F 11                                      F5 &lt;br /&gt;
F909                       11 0F 0E 0F 11 11 0F 0E 0F 11                                      F5 &lt;br /&gt;
F909                       11 10 0E 0F 11 11 0F 0E 10 11                                      F5 &lt;br /&gt;
F807                          11 0E 0F 11 11 0F 0E 11                                         F4 &lt;br /&gt;
F807                          11 0E 0F 11 11 0F 0E 11                                         F4 &lt;br /&gt;
F807                          11 0E 0F 11 11 0F 0E 11                                         F4 &lt;br /&gt;
F807                          11 0E 0F 11 11 0F 0E 11                                         F4 &lt;br /&gt;
F807                          11 0E 10 11 11 10 0E 11                                         F4 &lt;br /&gt;
F802                          16 16 16  FE02 16 16 16                                         F4 &lt;br /&gt;
F802                          16 15 16  FE02 16 15 16                                         F4 &lt;br /&gt;
F802                          16 15 16  FE02 16 15 16                                         F4 &lt;br /&gt;
F802                          16 15 16  FE02 16 15 16                                         F4 &lt;br /&gt;
F807                          1C 1C 1C 1C 1C 1C 1C 1C                                         F4 &lt;br /&gt;
FA0B                    1C 1B 1A 1B 1B 1C 1C 1B 1B 1A 1B 1C                                   F6 &lt;br /&gt;
FB0D                 1C 1B 1A 1B 1B 1C 1C 1C 1C 1B 1B 1A 1B 1C                                F7 &lt;br /&gt;
FB04                 1C 1C 1C 1C 1C     FC04    1C 1C 1C 1C 1C                                F7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some current BETA demo code is below. Fully functional.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;// &lt;br /&gt;
// .VNM/.000 Image Extractor - by Napalm&lt;br /&gt;
// BETA - Please do not use this in production mods&lt;br /&gt;
// &lt;br /&gt;
// License: Creative Commons Attribution-Share Alike 2.0 UK: England &amp;amp; Wales&lt;br /&gt;
// http://creativecommons.org/licenses/by-sa/2.0/uk/&lt;br /&gt;
// &lt;br /&gt;
// If you use this all or part of my code please credit me as the license states.&lt;br /&gt;
// &lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;pshpack2.h&amp;gt;&lt;br /&gt;
typedef struct _BITMAPFILEHDR {&lt;br /&gt;
	unsigned short type;&lt;br /&gt;
	unsigned long  size;&lt;br /&gt;
	unsigned short reserved1;&lt;br /&gt;
	unsigned short reserved2;&lt;br /&gt;
	unsigned long  offset;&lt;br /&gt;
} BITMAPFILEHDR;&lt;br /&gt;
&lt;br /&gt;
typedef struct _BITMAPINFOHDR {&lt;br /&gt;
	unsigned long  size;&lt;br /&gt;
	  signed long  width;&lt;br /&gt;
	  signed long  height;&lt;br /&gt;
	unsigned short planes;&lt;br /&gt;
	unsigned short bitcount;&lt;br /&gt;
	unsigned long  compression;&lt;br /&gt;
	unsigned long  image_size;&lt;br /&gt;
	  signed long  x_per_meter;&lt;br /&gt;
	  signed long  y_per_meter;&lt;br /&gt;
	unsigned long  colors_used;&lt;br /&gt;
	unsigned long  colors_important;&lt;br /&gt;
} BITMAPINFOHDR;&lt;br /&gt;
#include &amp;lt;poppack.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct _VNMSPRITE {&lt;br /&gt;
	unsigned long offset; // to bitmap/frame data&lt;br /&gt;
	unsigned long type;   // 0 = Bitmap, 1 = Sprite&lt;br /&gt;
	  signed long width;&lt;br /&gt;
	  signed long height;&lt;br /&gt;
	  signed long x;&lt;br /&gt;
	  signed long y;&lt;br /&gt;
} VNMSPRITE;&lt;br /&gt;
&lt;br /&gt;
typedef struct _VNMHEADER {&lt;br /&gt;
	unsigned long signature;     // 0x564E4D1A &#039;VNM\x1A&#039; // 1.10 version?&lt;br /&gt;
	unsigned long zero;          // 0         ? start of file? always zero?&lt;br /&gt;
	unsigned long size;          // 324764    ? size of file&lt;br /&gt;
	unsigned long paletteoffset; &lt;br /&gt;
	unsigned long offset1;		 // fixed 256 long array of something?&lt;br /&gt;
	unsigned long offset2;		 // fixed 256 long array of something?&lt;br /&gt;
	unsigned long spriteoffset;  //&lt;br /&gt;
	unsigned long palettestart;  // 10  start palette index?&lt;br /&gt;
	unsigned long palettesize;   // 236 number of palette entries?&lt;br /&gt;
	  signed long spritecount;   // 212 number of sprite index?&lt;br /&gt;
} VNMHEADER;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void extractpalette(unsigned long *palette, unsigned char *data,&lt;br /&gt;
				   unsigned long start, unsigned long size)&lt;br /&gt;
{&lt;br /&gt;
	unsigned char buffer[4];&lt;br /&gt;
	unsigned long index;&lt;br /&gt;
&lt;br /&gt;
	buffer[3] = 0;&lt;br /&gt;
	memset(palette, 0, sizeof(unsigned long) * 256);&lt;br /&gt;
	for(index = start; index &amp;lt; (start + size); index++){&lt;br /&gt;
		buffer[0] = (data[2] &amp;lt;&amp;lt; 2);&lt;br /&gt;
		buffer[1] = (data[1] &amp;lt;&amp;lt; 2);&lt;br /&gt;
		buffer[2] = (data[0] &amp;lt;&amp;lt; 2);&lt;br /&gt;
		data += 3;&lt;br /&gt;
		palette[index] = *(unsigned long *)buffer;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void extractbitmap(FILE *bmp, unsigned char *buffer,&lt;br /&gt;
				   VNMSPRITE *spr, BITMAPINFOHDR *bmpinfo, long rounding)&lt;br /&gt;
{&lt;br /&gt;
	unsigned char *line = (buffer + spr-&amp;gt;offset + bmpinfo-&amp;gt;image_size);&lt;br /&gt;
	char zerobuffer[4] = { 0 };&lt;br /&gt;
&lt;br /&gt;
	while(line &amp;gt; buffer + spr-&amp;gt;offset){&lt;br /&gt;
		line -= spr-&amp;gt;width;&lt;br /&gt;
		fwrite(line, 1, spr-&amp;gt;width, bmp);&lt;br /&gt;
		if(rounding)&lt;br /&gt;
			fwrite(zerobuffer, 1, rounding, bmp);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void extractsprite(FILE *bmp, unsigned char *buffer,&lt;br /&gt;
				   VNMSPRITE *spr, BITMAPINFOHDR *bmpinfo, long rounding, int transparent)&lt;br /&gt;
{&lt;br /&gt;
	unsigned long *index = (unsigned long *)(buffer + spr-&amp;gt;offset);&lt;br /&gt;
	unsigned char *row;&lt;br /&gt;
	char zerobuffer[4] = { 0 };&lt;br /&gt;
	int y, j, pixel, count, width, escape;&lt;br /&gt;
&lt;br /&gt;
	escape = (0x100 - spr-&amp;gt;width);&lt;br /&gt;
	for(y = (spr-&amp;gt;height - 1); y &amp;gt;= 0; y--){&lt;br /&gt;
		row = (buffer + index[y]);&lt;br /&gt;
		j = width = spr-&amp;gt;width;&lt;br /&gt;
		while(j &amp;gt; 0){&lt;br /&gt;
			pixel = *row++;&lt;br /&gt;
			if(pixel &amp;gt;= escape){&lt;br /&gt;
				count = (0x100 - pixel);&lt;br /&gt;
				pixel = transparent;&lt;br /&gt;
				row++; // whats this byte for?&lt;br /&gt;
				while(count-- &amp;amp;&amp;amp; j--)&lt;br /&gt;
					fputc(pixel, bmp);&lt;br /&gt;
			}else if(j == width &amp;amp;&amp;amp; pixel &amp;lt; escape){&lt;br /&gt;
				width++;&lt;br /&gt;
			}else{&lt;br /&gt;
				fputc(pixel, bmp);&lt;br /&gt;
				j--;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if(rounding)&lt;br /&gt;
			fwrite(zerobuffer, 1, rounding, bmp);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initbmpheaders(BITMAPFILEHDR *filehdr, BITMAPINFOHDR *infohdr)&lt;br /&gt;
{&lt;br /&gt;
	memset(filehdr, 0, sizeof(BITMAPFILEHDR));&lt;br /&gt;
	memset(infohdr, 0, sizeof(BITMAPINFOHDR));&lt;br /&gt;
	infohdr-&amp;gt;size        = sizeof(BITMAPINFOHDR);&lt;br /&gt;
	infohdr-&amp;gt;planes      = 1;&lt;br /&gt;
	infohdr-&amp;gt;bitcount    = 8; // BI_8_BIT&lt;br /&gt;
	infohdr-&amp;gt;compression = 0; // BI_RGB&lt;br /&gt;
	filehdr-&amp;gt;type        = &#039;MB&#039;;&lt;br /&gt;
	filehdr-&amp;gt;offset      = sizeof(BITMAPFILEHDR) +&lt;br /&gt;
		infohdr-&amp;gt;size + (sizeof(unsigned long) * 256);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
	unsigned long palette[256], *index;&lt;br /&gt;
	unsigned char *buffer;&lt;br /&gt;
	BITMAPFILEHDR bmpfile;&lt;br /&gt;
	BITMAPINFOHDR bmpinfo;&lt;br /&gt;
	VNMHEADER *hdr;&lt;br /&gt;
	VNMSPRITE *spr;&lt;br /&gt;
	FILE *vnm, *bmp;&lt;br /&gt;
	long size, i, rounding;&lt;br /&gt;
	char name[32];&lt;br /&gt;
	&lt;br /&gt;
	vnm = fopen(argv[1], &amp;quot;rb&amp;quot;);&lt;br /&gt;
	if(!vnm){&lt;br /&gt;
		perror(argv[1]);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
	fseek(vnm, 0, SEEK_END);&lt;br /&gt;
	size = ftell(vnm);&lt;br /&gt;
	fseek(vnm, 0, SEEK_SET);&lt;br /&gt;
&lt;br /&gt;
	buffer = (unsigned char *)malloc(size);&lt;br /&gt;
	if(!buffer){&lt;br /&gt;
		perror(&amp;quot;malloc filesize&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
	fread(buffer, 1, size, vnm);&lt;br /&gt;
	fclose(vnm);&lt;br /&gt;
&lt;br /&gt;
	hdr = (VNMHEADER *)buffer;&lt;br /&gt;
	if(hdr-&amp;gt;signature != 0x564E4D1A &amp;amp;&amp;amp; hdr-&amp;gt;signature != 0x1A4D4E56){&lt;br /&gt;
		perror(&amp;quot;invalid vnm signature&amp;quot;);&lt;br /&gt;
		free(buffer);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	extractpalette(palette, buffer + hdr-&amp;gt;paletteoffset, hdr-&amp;gt;palettestart, hdr-&amp;gt;palettesize);&lt;br /&gt;
	initbmpheaders(&amp;amp;bmpfile, &amp;amp;bmpinfo);&lt;br /&gt;
	&lt;br /&gt;
	index = (unsigned long *)(buffer + hdr-&amp;gt;spriteoffset);&lt;br /&gt;
	for(i = 0; i &amp;lt; hdr-&amp;gt;spritecount; i++){ // &lt;br /&gt;
		spr = (VNMSPRITE *)(buffer + index[i]);&lt;br /&gt;
		printf(&amp;quot;spr %#3d: %c(%#3d,%#3d)-(%#3d,%#3d)\n&amp;quot;, i, ((spr-&amp;gt;type) ? &#039;S&#039;:&#039;B&#039;),&lt;br /&gt;
			spr-&amp;gt;x, spr-&amp;gt;y, spr-&amp;gt;width, spr-&amp;gt;height);&lt;br /&gt;
		&lt;br /&gt;
		rounding = (spr-&amp;gt;width % 4);&lt;br /&gt;
		if(rounding &amp;gt; 0) rounding = (4 - rounding);&lt;br /&gt;
		bmpinfo.width      = spr-&amp;gt;width;&lt;br /&gt;
		bmpinfo.height     = spr-&amp;gt;height;&lt;br /&gt;
		bmpinfo.image_size = ((spr-&amp;gt;width + rounding) * spr-&amp;gt;height);&lt;br /&gt;
		bmpfile.size       = (bmpfile.offset + bmpinfo.image_size);&lt;br /&gt;
		&lt;br /&gt;
		sprintf(name, &amp;quot;output\\%03d.bmp&amp;quot;, i);&lt;br /&gt;
		bmp = fopen(name, &amp;quot;wb&amp;quot;);&lt;br /&gt;
		if(!bmp){&lt;br /&gt;
			sprintf(name, &amp;quot;error opening %03d.bmp&amp;quot;, i);&lt;br /&gt;
			perror(name);&lt;br /&gt;
			exit(1);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		fwrite(&amp;amp;bmpfile, sizeof(bmpfile), 1, bmp);&lt;br /&gt;
		fwrite(&amp;amp;bmpinfo, sizeof(bmpinfo), 1, bmp);&lt;br /&gt;
		fwrite(palette,  sizeof(palette), 1, bmp);&lt;br /&gt;
		&lt;br /&gt;
		if(spr-&amp;gt;type)&lt;br /&gt;
			extractsprite(bmp, buffer, spr, &amp;amp;bmpinfo, rounding, 189); // 187&lt;br /&gt;
		else&lt;br /&gt;
			extractbitmap(bmp, buffer, spr, &amp;amp;bmpinfo, rounding);&lt;br /&gt;
		&lt;br /&gt;
		fclose(bmp);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	free(buffer);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
This file format was reverse engineered by [[User:Napalm|Napalm]].&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Graphics Files]]&lt;br /&gt;
[[Category:Beavis and Butthead In Virtual Stupidity]]&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Viacom_New_Media_Graphics_File_Format&amp;diff=2692</id>
		<title>Viacom New Media Graphics File Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Viacom_New_Media_Graphics_File_Format&amp;diff=2692"/>
		<updated>2010-02-09T23:03:07Z</updated>

		<summary type="html">&lt;p&gt;Napalm: Added Sprite Extraction Example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Beavis and Butthead In Virtual Stupidity]] stores its graphics externally in .VNM/.000 files. This information here is preliminary and needs verification and is subject to change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VNM_HEADER: VNM File Header &lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Signature||File Signature (should match 0x564E4D1A aka &amp;quot;VNM\x1A&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Flags||Possibly file information flags.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Size||Size Of Data&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetPal|| Offset to Pal Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetUnknown1||Offset to currently Unknown Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetUnknown2||Offset to currently Unknown Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetImages||Offset to VNM_IMAGE array.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE PalIndexFirst||First Valid Index in Colour Palette.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE PalIndexSize||Count of Palette Indexes stored in file at OffsetPal.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE ImageCount||Count of Images stored in file at OffsetImages.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Spr196.png|100px|right|Sprite 196 from BBLOOGIE Mini-game]]&lt;br /&gt;
VNM_IMAGE: VNM Image Header &lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Offset||Offset in file to where raw image data starts.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Type||0 = Bitmap, 1 = Sprite&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Width||Width of this Image&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Height||Height of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE XPos||XPos of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE YPos||YPos of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is test code that decompresses/decodes/extracts Sprite 196 from VNM raw data in the BBLOOGIE Mini-game. Image can be seen to right.&lt;br /&gt;
[http://www.netcore2k.net/downloads/spr196.zip spr196.zip]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some current BETA demo code is below. Fully functional.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;// &lt;br /&gt;
// .VNM/.000 Image Extractor - by Napalm&lt;br /&gt;
// BETA - Please do not use this in production mods&lt;br /&gt;
// &lt;br /&gt;
// License: Creative Commons Attribution-Share Alike 2.0 UK: England &amp;amp; Wales&lt;br /&gt;
// http://creativecommons.org/licenses/by-sa/2.0/uk/&lt;br /&gt;
// &lt;br /&gt;
// If you use this all or part of my code please credit me as the license states.&lt;br /&gt;
// &lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;pshpack2.h&amp;gt;&lt;br /&gt;
typedef struct _BITMAPFILEHDR {&lt;br /&gt;
	unsigned short type;&lt;br /&gt;
	unsigned long  size;&lt;br /&gt;
	unsigned short reserved1;&lt;br /&gt;
	unsigned short reserved2;&lt;br /&gt;
	unsigned long  offset;&lt;br /&gt;
} BITMAPFILEHDR;&lt;br /&gt;
&lt;br /&gt;
typedef struct _BITMAPINFOHDR {&lt;br /&gt;
	unsigned long  size;&lt;br /&gt;
	  signed long  width;&lt;br /&gt;
	  signed long  height;&lt;br /&gt;
	unsigned short planes;&lt;br /&gt;
	unsigned short bitcount;&lt;br /&gt;
	unsigned long  compression;&lt;br /&gt;
	unsigned long  image_size;&lt;br /&gt;
	  signed long  x_per_meter;&lt;br /&gt;
	  signed long  y_per_meter;&lt;br /&gt;
	unsigned long  colors_used;&lt;br /&gt;
	unsigned long  colors_important;&lt;br /&gt;
} BITMAPINFOHDR;&lt;br /&gt;
#include &amp;lt;poppack.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct _VNMSPRITE {&lt;br /&gt;
	unsigned long offset; // to bitmap/frame data&lt;br /&gt;
	unsigned long type;   // 0 = Bitmap, 1 = Sprite&lt;br /&gt;
	  signed long width;&lt;br /&gt;
	  signed long height;&lt;br /&gt;
	  signed long x;&lt;br /&gt;
	  signed long y;&lt;br /&gt;
} VNMSPRITE;&lt;br /&gt;
&lt;br /&gt;
typedef struct _VNMHEADER {&lt;br /&gt;
	unsigned long signature;     // 0x564E4D1A &#039;VNM\x1A&#039; // 1.10 version?&lt;br /&gt;
	unsigned long zero;          // 0         ? start of file? always zero?&lt;br /&gt;
	unsigned long size;          // 324764    ? size of file&lt;br /&gt;
	unsigned long paletteoffset; &lt;br /&gt;
	unsigned long offset1;		 // fixed 256 long array of something?&lt;br /&gt;
	unsigned long offset2;		 // fixed 256 long array of something?&lt;br /&gt;
	unsigned long spriteoffset;  //&lt;br /&gt;
	unsigned long palettestart;  // 10  start palette index?&lt;br /&gt;
	unsigned long palettesize;   // 236 number of palette entries?&lt;br /&gt;
	  signed long spritecount;   // 212 number of sprite index?&lt;br /&gt;
} VNMHEADER;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void extractpalette(unsigned long *palette, unsigned char *data,&lt;br /&gt;
				   unsigned long start, unsigned long size)&lt;br /&gt;
{&lt;br /&gt;
	unsigned char buffer[4];&lt;br /&gt;
	unsigned long index;&lt;br /&gt;
&lt;br /&gt;
	buffer[3] = 0;&lt;br /&gt;
	memset(palette, 0, sizeof(unsigned long) * 256);&lt;br /&gt;
	for(index = start; index &amp;lt; (start + size); index++){&lt;br /&gt;
		buffer[0] = (data[2] &amp;lt;&amp;lt; 2);&lt;br /&gt;
		buffer[1] = (data[1] &amp;lt;&amp;lt; 2);&lt;br /&gt;
		buffer[2] = (data[0] &amp;lt;&amp;lt; 2);&lt;br /&gt;
		data += 3;&lt;br /&gt;
		palette[index] = *(unsigned long *)buffer;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void extractbitmap(FILE *bmp, unsigned char *buffer,&lt;br /&gt;
				   VNMSPRITE *spr, BITMAPINFOHDR *bmpinfo, long rounding)&lt;br /&gt;
{&lt;br /&gt;
	unsigned char *line = (buffer + spr-&amp;gt;offset + bmpinfo-&amp;gt;image_size);&lt;br /&gt;
	char zerobuffer[4] = { 0 };&lt;br /&gt;
&lt;br /&gt;
	while(line &amp;gt; buffer + spr-&amp;gt;offset){&lt;br /&gt;
		line -= spr-&amp;gt;width;&lt;br /&gt;
		fwrite(line, 1, spr-&amp;gt;width, bmp);&lt;br /&gt;
		if(rounding)&lt;br /&gt;
			fwrite(zerobuffer, 1, rounding, bmp);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void extractsprite(FILE *bmp, unsigned char *buffer,&lt;br /&gt;
				   VNMSPRITE *spr, BITMAPINFOHDR *bmpinfo, long rounding, int transparent)&lt;br /&gt;
{&lt;br /&gt;
	unsigned long *index = (unsigned long *)(buffer + spr-&amp;gt;offset);&lt;br /&gt;
	unsigned char *row;&lt;br /&gt;
	char zerobuffer[4] = { 0 };&lt;br /&gt;
	int y, j, pixel, count, width, escape;&lt;br /&gt;
&lt;br /&gt;
	escape = (0x100 - spr-&amp;gt;width);&lt;br /&gt;
	for(y = (spr-&amp;gt;height - 1); y &amp;gt;= 0; y--){&lt;br /&gt;
		row = (buffer + index[y]);&lt;br /&gt;
		j = width = spr-&amp;gt;width;&lt;br /&gt;
		while(j &amp;gt; 0){&lt;br /&gt;
			pixel = *row++;&lt;br /&gt;
			if(pixel &amp;gt;= escape){&lt;br /&gt;
				count = (0x100 - pixel);&lt;br /&gt;
				pixel = transparent;&lt;br /&gt;
				row++; // whats this byte for?&lt;br /&gt;
				while(count-- &amp;amp;&amp;amp; j--)&lt;br /&gt;
					fputc(pixel, bmp);&lt;br /&gt;
			}else if(j == width &amp;amp;&amp;amp; pixel &amp;lt; escape){&lt;br /&gt;
				width++;&lt;br /&gt;
			}else{&lt;br /&gt;
				fputc(pixel, bmp);&lt;br /&gt;
				j--;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if(rounding)&lt;br /&gt;
			fwrite(zerobuffer, 1, rounding, bmp);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initbmpheaders(BITMAPFILEHDR *filehdr, BITMAPINFOHDR *infohdr)&lt;br /&gt;
{&lt;br /&gt;
	memset(filehdr, 0, sizeof(BITMAPFILEHDR));&lt;br /&gt;
	memset(infohdr, 0, sizeof(BITMAPINFOHDR));&lt;br /&gt;
	infohdr-&amp;gt;size        = sizeof(BITMAPINFOHDR);&lt;br /&gt;
	infohdr-&amp;gt;planes      = 1;&lt;br /&gt;
	infohdr-&amp;gt;bitcount    = 8; // BI_8_BIT&lt;br /&gt;
	infohdr-&amp;gt;compression = 0; // BI_RGB&lt;br /&gt;
	filehdr-&amp;gt;type        = &#039;MB&#039;;&lt;br /&gt;
	filehdr-&amp;gt;offset      = sizeof(BITMAPFILEHDR) +&lt;br /&gt;
		infohdr-&amp;gt;size + (sizeof(unsigned long) * 256);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
	unsigned long palette[256], *index;&lt;br /&gt;
	unsigned char *buffer;&lt;br /&gt;
	BITMAPFILEHDR bmpfile;&lt;br /&gt;
	BITMAPINFOHDR bmpinfo;&lt;br /&gt;
	VNMHEADER *hdr;&lt;br /&gt;
	VNMSPRITE *spr;&lt;br /&gt;
	FILE *vnm, *bmp;&lt;br /&gt;
	long size, i, rounding;&lt;br /&gt;
	char name[32];&lt;br /&gt;
	&lt;br /&gt;
	vnm = fopen(argv[1], &amp;quot;rb&amp;quot;);&lt;br /&gt;
	if(!vnm){&lt;br /&gt;
		perror(argv[1]);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
	fseek(vnm, 0, SEEK_END);&lt;br /&gt;
	size = ftell(vnm);&lt;br /&gt;
	fseek(vnm, 0, SEEK_SET);&lt;br /&gt;
&lt;br /&gt;
	buffer = (unsigned char *)malloc(size);&lt;br /&gt;
	if(!buffer){&lt;br /&gt;
		perror(&amp;quot;malloc filesize&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
	fread(buffer, 1, size, vnm);&lt;br /&gt;
	fclose(vnm);&lt;br /&gt;
&lt;br /&gt;
	hdr = (VNMHEADER *)buffer;&lt;br /&gt;
	if(hdr-&amp;gt;signature != 0x564E4D1A &amp;amp;&amp;amp; hdr-&amp;gt;signature != 0x1A4D4E56){&lt;br /&gt;
		perror(&amp;quot;invalid vnm signature&amp;quot;);&lt;br /&gt;
		free(buffer);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	extractpalette(palette, buffer + hdr-&amp;gt;paletteoffset, hdr-&amp;gt;palettestart, hdr-&amp;gt;palettesize);&lt;br /&gt;
	initbmpheaders(&amp;amp;bmpfile, &amp;amp;bmpinfo);&lt;br /&gt;
	&lt;br /&gt;
	index = (unsigned long *)(buffer + hdr-&amp;gt;spriteoffset);&lt;br /&gt;
	for(i = 0; i &amp;lt; hdr-&amp;gt;spritecount; i++){ // &lt;br /&gt;
		spr = (VNMSPRITE *)(buffer + index[i]);&lt;br /&gt;
		printf(&amp;quot;spr %#3d: %c(%#3d,%#3d)-(%#3d,%#3d)\n&amp;quot;, i, ((spr-&amp;gt;type) ? &#039;S&#039;:&#039;B&#039;),&lt;br /&gt;
			spr-&amp;gt;x, spr-&amp;gt;y, spr-&amp;gt;width, spr-&amp;gt;height);&lt;br /&gt;
		&lt;br /&gt;
		rounding = (spr-&amp;gt;width % 4);&lt;br /&gt;
		if(rounding &amp;gt; 0) rounding = (4 - rounding);&lt;br /&gt;
		bmpinfo.width      = spr-&amp;gt;width;&lt;br /&gt;
		bmpinfo.height     = spr-&amp;gt;height;&lt;br /&gt;
		bmpinfo.image_size = ((spr-&amp;gt;width + rounding) * spr-&amp;gt;height);&lt;br /&gt;
		bmpfile.size       = (bmpfile.offset + bmpinfo.image_size);&lt;br /&gt;
		&lt;br /&gt;
		sprintf(name, &amp;quot;output\\%03d.bmp&amp;quot;, i);&lt;br /&gt;
		bmp = fopen(name, &amp;quot;wb&amp;quot;);&lt;br /&gt;
		if(!bmp){&lt;br /&gt;
			sprintf(name, &amp;quot;error opening %03d.bmp&amp;quot;, i);&lt;br /&gt;
			perror(name);&lt;br /&gt;
			exit(1);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		fwrite(&amp;amp;bmpfile, sizeof(bmpfile), 1, bmp);&lt;br /&gt;
		fwrite(&amp;amp;bmpinfo, sizeof(bmpinfo), 1, bmp);&lt;br /&gt;
		fwrite(palette,  sizeof(palette), 1, bmp);&lt;br /&gt;
		&lt;br /&gt;
		if(spr-&amp;gt;type)&lt;br /&gt;
			extractsprite(bmp, buffer, spr, &amp;amp;bmpinfo, rounding, 189); // 187&lt;br /&gt;
		else&lt;br /&gt;
			extractbitmap(bmp, buffer, spr, &amp;amp;bmpinfo, rounding);&lt;br /&gt;
		&lt;br /&gt;
		fclose(bmp);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	free(buffer);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
This file format was reverse engineered by [[User:Napalm|Napalm]].&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Graphics Files]]&lt;br /&gt;
[[Category:Beavis and Butthead In Virtual Stupidity]]&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Viacom_New_Media_Graphics_File_Format.png&amp;diff=2691</id>
		<title>File:Viacom New Media Graphics File Format.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Viacom_New_Media_Graphics_File_Format.png&amp;diff=2691"/>
		<updated>2010-02-09T22:58:50Z</updated>

		<summary type="html">&lt;p&gt;Napalm: Result of raw extraction.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Result of raw extraction.&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Viacom_New_Media_Graphics_File_Format&amp;diff=2690</id>
		<title>Viacom New Media Graphics File Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Viacom_New_Media_Graphics_File_Format&amp;diff=2690"/>
		<updated>2010-02-09T22:40:50Z</updated>

		<summary type="html">&lt;p&gt;Napalm: Updated Code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Beavis and Butthead In Virtual Stupidity]] stores its graphics externally in .VNM/.000 files. This information here is preliminary and needs verification and is subject to change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VNM_HEADER: VNM File Header &lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Signature||File Signature (should match 0x564E4D1A aka &amp;quot;VNM\x1A&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Flags||Possibly file information flags.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Size||Size Of Data&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetPal|| Offset to Pal Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetUnknown1||Offset to currently Unknown Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetUnknown2||Offset to currently Unknown Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetImages||Offset to VNM_IMAGE array.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE PalIndexFirst||First Valid Index in Colour Palette.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE PalIndexSize||Count of Palette Indexes stored in file at OffsetPal.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE ImageCount||Count of Images stored in file at OffsetImages.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VNM_IMAGE: VNM Image Header &lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Offset||Offset in file to where raw image data starts.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Type||0 = Bitmap, 1 = Sprite&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Width||Width of this Image&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Height||Height of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE XPos||XPos of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE YPos||YPos of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some current BETA demo code is below. Fully functional.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;// &lt;br /&gt;
// .VNM/.000 Image Extractor - by Napalm&lt;br /&gt;
// BETA - Please do not use this in production mods&lt;br /&gt;
// &lt;br /&gt;
// License: Creative Commons Attribution-Share Alike 2.0 UK: England &amp;amp; Wales&lt;br /&gt;
// http://creativecommons.org/licenses/by-sa/2.0/uk/&lt;br /&gt;
// &lt;br /&gt;
// If you use this all or part of my code please credit me as the license states.&lt;br /&gt;
// &lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;pshpack2.h&amp;gt;&lt;br /&gt;
typedef struct _BITMAPFILEHDR {&lt;br /&gt;
	unsigned short type;&lt;br /&gt;
	unsigned long  size;&lt;br /&gt;
	unsigned short reserved1;&lt;br /&gt;
	unsigned short reserved2;&lt;br /&gt;
	unsigned long  offset;&lt;br /&gt;
} BITMAPFILEHDR;&lt;br /&gt;
&lt;br /&gt;
typedef struct _BITMAPINFOHDR {&lt;br /&gt;
	unsigned long  size;&lt;br /&gt;
	  signed long  width;&lt;br /&gt;
	  signed long  height;&lt;br /&gt;
	unsigned short planes;&lt;br /&gt;
	unsigned short bitcount;&lt;br /&gt;
	unsigned long  compression;&lt;br /&gt;
	unsigned long  image_size;&lt;br /&gt;
	  signed long  x_per_meter;&lt;br /&gt;
	  signed long  y_per_meter;&lt;br /&gt;
	unsigned long  colors_used;&lt;br /&gt;
	unsigned long  colors_important;&lt;br /&gt;
} BITMAPINFOHDR;&lt;br /&gt;
#include &amp;lt;poppack.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct _VNMSPRITE {&lt;br /&gt;
	unsigned long offset; // to bitmap/frame data&lt;br /&gt;
	unsigned long type;   // 0 = Bitmap, 1 = Sprite&lt;br /&gt;
	  signed long width;&lt;br /&gt;
	  signed long height;&lt;br /&gt;
	  signed long x;&lt;br /&gt;
	  signed long y;&lt;br /&gt;
} VNMSPRITE;&lt;br /&gt;
&lt;br /&gt;
typedef struct _VNMHEADER {&lt;br /&gt;
	unsigned long signature;     // 0x564E4D1A &#039;VNM\x1A&#039; // 1.10 version?&lt;br /&gt;
	unsigned long zero;          // 0         ? start of file? always zero?&lt;br /&gt;
	unsigned long size;          // 324764    ? size of file&lt;br /&gt;
	unsigned long paletteoffset; &lt;br /&gt;
	unsigned long offset1;		 // fixed 256 long array of something?&lt;br /&gt;
	unsigned long offset2;		 // fixed 256 long array of something?&lt;br /&gt;
	unsigned long spriteoffset;  //&lt;br /&gt;
	unsigned long palettestart;  // 10  start palette index?&lt;br /&gt;
	unsigned long palettesize;   // 236 number of palette entries?&lt;br /&gt;
	  signed long spritecount;   // 212 number of sprite index?&lt;br /&gt;
} VNMHEADER;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void extractpalette(unsigned long *palette, unsigned char *data,&lt;br /&gt;
				   unsigned long start, unsigned long size)&lt;br /&gt;
{&lt;br /&gt;
	unsigned char buffer[4];&lt;br /&gt;
	unsigned long index;&lt;br /&gt;
&lt;br /&gt;
	buffer[3] = 0;&lt;br /&gt;
	memset(palette, 0, sizeof(unsigned long) * 256);&lt;br /&gt;
	for(index = start; index &amp;lt; (start + size); index++){&lt;br /&gt;
		buffer[0] = (data[2] &amp;lt;&amp;lt; 2);&lt;br /&gt;
		buffer[1] = (data[1] &amp;lt;&amp;lt; 2);&lt;br /&gt;
		buffer[2] = (data[0] &amp;lt;&amp;lt; 2);&lt;br /&gt;
		data += 3;&lt;br /&gt;
		palette[index] = *(unsigned long *)buffer;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void extractbitmap(FILE *bmp, unsigned char *buffer,&lt;br /&gt;
				   VNMSPRITE *spr, BITMAPINFOHDR *bmpinfo, long rounding)&lt;br /&gt;
{&lt;br /&gt;
	unsigned char *line = (buffer + spr-&amp;gt;offset + bmpinfo-&amp;gt;image_size);&lt;br /&gt;
	char zerobuffer[4] = { 0 };&lt;br /&gt;
&lt;br /&gt;
	while(line &amp;gt; buffer + spr-&amp;gt;offset){&lt;br /&gt;
		line -= spr-&amp;gt;width;&lt;br /&gt;
		fwrite(line, 1, spr-&amp;gt;width, bmp);&lt;br /&gt;
		if(rounding)&lt;br /&gt;
			fwrite(zerobuffer, 1, rounding, bmp);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void extractsprite(FILE *bmp, unsigned char *buffer,&lt;br /&gt;
				   VNMSPRITE *spr, BITMAPINFOHDR *bmpinfo, long rounding, int transparent)&lt;br /&gt;
{&lt;br /&gt;
	unsigned long *index = (unsigned long *)(buffer + spr-&amp;gt;offset);&lt;br /&gt;
	unsigned char *row;&lt;br /&gt;
	char zerobuffer[4] = { 0 };&lt;br /&gt;
	int y, j, pixel, count, width, escape;&lt;br /&gt;
&lt;br /&gt;
	escape = (0x100 - spr-&amp;gt;width);&lt;br /&gt;
	for(y = (spr-&amp;gt;height - 1); y &amp;gt;= 0; y--){&lt;br /&gt;
		row = (buffer + index[y]);&lt;br /&gt;
		j = width = spr-&amp;gt;width;&lt;br /&gt;
		while(j &amp;gt; 0){&lt;br /&gt;
			pixel = *row++;&lt;br /&gt;
			if(pixel &amp;gt;= escape){&lt;br /&gt;
				count = (0x100 - pixel);&lt;br /&gt;
				pixel = transparent;&lt;br /&gt;
				row++; // whats this byte for?&lt;br /&gt;
				while(count-- &amp;amp;&amp;amp; j--)&lt;br /&gt;
					fputc(pixel, bmp);&lt;br /&gt;
			}else if(j == width &amp;amp;&amp;amp; pixel &amp;lt; escape){&lt;br /&gt;
				width++;&lt;br /&gt;
			}else{&lt;br /&gt;
				fputc(pixel, bmp);&lt;br /&gt;
				j--;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if(rounding)&lt;br /&gt;
			fwrite(zerobuffer, 1, rounding, bmp);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initbmpheaders(BITMAPFILEHDR *filehdr, BITMAPINFOHDR *infohdr)&lt;br /&gt;
{&lt;br /&gt;
	memset(filehdr, 0, sizeof(BITMAPFILEHDR));&lt;br /&gt;
	memset(infohdr, 0, sizeof(BITMAPINFOHDR));&lt;br /&gt;
	infohdr-&amp;gt;size        = sizeof(BITMAPINFOHDR);&lt;br /&gt;
	infohdr-&amp;gt;planes      = 1;&lt;br /&gt;
	infohdr-&amp;gt;bitcount    = 8; // BI_8_BIT&lt;br /&gt;
	infohdr-&amp;gt;compression = 0; // BI_RGB&lt;br /&gt;
	filehdr-&amp;gt;type        = &#039;MB&#039;;&lt;br /&gt;
	filehdr-&amp;gt;offset      = sizeof(BITMAPFILEHDR) +&lt;br /&gt;
		infohdr-&amp;gt;size + (sizeof(unsigned long) * 256);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
	unsigned long palette[256], *index;&lt;br /&gt;
	unsigned char *buffer;&lt;br /&gt;
	BITMAPFILEHDR bmpfile;&lt;br /&gt;
	BITMAPINFOHDR bmpinfo;&lt;br /&gt;
	VNMHEADER *hdr;&lt;br /&gt;
	VNMSPRITE *spr;&lt;br /&gt;
	FILE *vnm, *bmp;&lt;br /&gt;
	long size, i, rounding;&lt;br /&gt;
	char name[32];&lt;br /&gt;
	&lt;br /&gt;
	vnm = fopen(argv[1], &amp;quot;rb&amp;quot;);&lt;br /&gt;
	if(!vnm){&lt;br /&gt;
		perror(argv[1]);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
	fseek(vnm, 0, SEEK_END);&lt;br /&gt;
	size = ftell(vnm);&lt;br /&gt;
	fseek(vnm, 0, SEEK_SET);&lt;br /&gt;
&lt;br /&gt;
	buffer = (unsigned char *)malloc(size);&lt;br /&gt;
	if(!buffer){&lt;br /&gt;
		perror(&amp;quot;malloc filesize&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
	fread(buffer, 1, size, vnm);&lt;br /&gt;
	fclose(vnm);&lt;br /&gt;
&lt;br /&gt;
	hdr = (VNMHEADER *)buffer;&lt;br /&gt;
	if(hdr-&amp;gt;signature != 0x564E4D1A &amp;amp;&amp;amp; hdr-&amp;gt;signature != 0x1A4D4E56){&lt;br /&gt;
		perror(&amp;quot;invalid vnm signature&amp;quot;);&lt;br /&gt;
		free(buffer);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	extractpalette(palette, buffer + hdr-&amp;gt;paletteoffset, hdr-&amp;gt;palettestart, hdr-&amp;gt;palettesize);&lt;br /&gt;
	initbmpheaders(&amp;amp;bmpfile, &amp;amp;bmpinfo);&lt;br /&gt;
	&lt;br /&gt;
	index = (unsigned long *)(buffer + hdr-&amp;gt;spriteoffset);&lt;br /&gt;
	for(i = 0; i &amp;lt; hdr-&amp;gt;spritecount; i++){ // &lt;br /&gt;
		spr = (VNMSPRITE *)(buffer + index[i]);&lt;br /&gt;
		printf(&amp;quot;spr %#3d: %c(%#3d,%#3d)-(%#3d,%#3d)\n&amp;quot;, i, ((spr-&amp;gt;type) ? &#039;S&#039;:&#039;B&#039;),&lt;br /&gt;
			spr-&amp;gt;x, spr-&amp;gt;y, spr-&amp;gt;width, spr-&amp;gt;height);&lt;br /&gt;
		&lt;br /&gt;
		rounding = (spr-&amp;gt;width % 4);&lt;br /&gt;
		if(rounding &amp;gt; 0) rounding = (4 - rounding);&lt;br /&gt;
		bmpinfo.width      = spr-&amp;gt;width;&lt;br /&gt;
		bmpinfo.height     = spr-&amp;gt;height;&lt;br /&gt;
		bmpinfo.image_size = ((spr-&amp;gt;width + rounding) * spr-&amp;gt;height);&lt;br /&gt;
		bmpfile.size       = (bmpfile.offset + bmpinfo.image_size);&lt;br /&gt;
		&lt;br /&gt;
		sprintf(name, &amp;quot;output\\%03d.bmp&amp;quot;, i);&lt;br /&gt;
		bmp = fopen(name, &amp;quot;wb&amp;quot;);&lt;br /&gt;
		if(!bmp){&lt;br /&gt;
			sprintf(name, &amp;quot;error opening %03d.bmp&amp;quot;, i);&lt;br /&gt;
			perror(name);&lt;br /&gt;
			exit(1);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		fwrite(&amp;amp;bmpfile, sizeof(bmpfile), 1, bmp);&lt;br /&gt;
		fwrite(&amp;amp;bmpinfo, sizeof(bmpinfo), 1, bmp);&lt;br /&gt;
		fwrite(palette,  sizeof(palette), 1, bmp);&lt;br /&gt;
		&lt;br /&gt;
		if(spr-&amp;gt;type)&lt;br /&gt;
			extractsprite(bmp, buffer, spr, &amp;amp;bmpinfo, rounding, 189); // 187&lt;br /&gt;
		else&lt;br /&gt;
			extractbitmap(bmp, buffer, spr, &amp;amp;bmpinfo, rounding);&lt;br /&gt;
		&lt;br /&gt;
		fclose(bmp);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	free(buffer);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
This file format was reverse engineered by [[User:Napalm|Napalm]].&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Graphics Files]]&lt;br /&gt;
[[Category:Beavis and Butthead In Virtual Stupidity]]&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Beavis_and_Butthead_In_Virtual_Stupidity&amp;diff=2689</id>
		<title>Beavis and Butthead In Virtual Stupidity</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Beavis_and_Butthead_In_Virtual_Stupidity&amp;diff=2689"/>
		<updated>2010-02-09T22:39:50Z</updated>

		<summary type="html">&lt;p&gt;Napalm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{GamePage|Beavis and Butthead In Virtual Stupidity}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beavis and Butthead in Virtual Stupidity&#039;&#039;&#039; is an adventure game and four mini-games. It was developed and published by Viacom New Media. It was originally released on the PC on the 31st August 1995. It featured vocals from the original series&#039; cast of voice actors, including Mike Judge the original shows creator.&lt;br /&gt;
&lt;br /&gt;
== Mini Games ==&lt;br /&gt;
* Hock-A-Loogie&lt;br /&gt;
* Court Chaos&lt;br /&gt;
* Bug Justice&lt;br /&gt;
* Air Guitar&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
The main game and the mini-games both use the following formats. Game sound is stored in the standard AIFF File Format. Game Video Sequences are stored in the standard AVI File Format. Game graphics are stored in Viacoms&#039; Custom Format (.VNM Viacom New Media).&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Audio_Interchange_File_Format AIFF Audio Interchange File Format on Wikipedia]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Audio_Video_Interleave Audio Video Interleave File Format on Wikipedia]&lt;br /&gt;
* [[Viacom New Media Graphics File Format]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
The VNM Graphics File Format was reverse engineered by [[User:Napalm|Napalm]].&lt;br /&gt;
&lt;br /&gt;
== Related Links ==&lt;br /&gt;
* [http://www.mobygames.com/game/mtvs-beavis-and-butt-head-in-virtual-stupidity Beavis and Butthead in Virtual Stupidity on MobyGames]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Beavis_and_Butt-head_in_Virtual_Stupidity Beavis and Butthead in Virtual Stupidity on Wikipedia]&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Viacom_New_Media_Graphics_File_Format&amp;diff=2688</id>
		<title>Viacom New Media Graphics File Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Viacom_New_Media_Graphics_File_Format&amp;diff=2688"/>
		<updated>2010-02-09T22:31:30Z</updated>

		<summary type="html">&lt;p&gt;Napalm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Beavis and Butthead In Virtual Stupidity]] stores its graphics externally in .VNM/.000 files. This information here is preliminary and needs verification and is subject to change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VNM_HEADER: VNM File Header &lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Signature||File Signature (should match 0x564E4D1A aka &amp;quot;VNM\x1A&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Flags||Possibly file information flags.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Size||Size Of Data&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetPal|| Offset to Pal Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetUnknown1||Offset to currently Unknown Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetUnknown2||Offset to currently Unknown Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetImages||Offset to VNM_IMAGE array.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE PalIndexFirst||First Valid Index in Colour Palette.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE PalIndexSize||Count of Palette Indexes stored in file at OffsetPal.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE ImageCount||Count of Images stored in file at OffsetImages.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VNM_IMAGE: VNM Image Header &lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Offset||Offset in file to where raw image data starts.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Type||0 = Bitmap, 1 = Sprite&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Width||Width of this Image&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Height||Height of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE XPos||XPos of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE YPos||YPos of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
This file format was reverse engineered by --[[User:Napalm|Napalm]] 22:29, 9 February 2010 (GMT).&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Graphics Files]]&lt;br /&gt;
[[Category:Beavis and Butthead In Virtual Stupidity]]&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Viacom_New_Media_Graphics_File_Format&amp;diff=2687</id>
		<title>Viacom New Media Graphics File Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Viacom_New_Media_Graphics_File_Format&amp;diff=2687"/>
		<updated>2010-02-09T22:29:39Z</updated>

		<summary type="html">&lt;p&gt;Napalm: Created page with &amp;#039;Beavis_and_Butthead_In_Virtual_Stupidity stores its graphics externally in VNM files. This information here is preliminary and needs verification and is subject to change.   …&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Beavis_and_Butthead_In_Virtual_Stupidity]] stores its graphics externally in VNM files. This information here is preliminary and needs verification and is subject to change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VNM_HEADER: VNM File Header &lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Signature||File Signature (should match 0x564E4D1A aka &amp;quot;VNM\x1A&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Flags||Possibly file information flags.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Size||Size Of Data&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetPal|| Offset to Pal Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetUnknown1||Offset to currently Unknown Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetUnknown2||Offset to currently Unknown Data.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE OffsetImages||Offset to VNM_IMAGE array.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE PalIndexFirst||First Valid Index in Colour Palette.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE PalIndexSize||Count of Palette Indexes stored in file at OffsetPal.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE ImageCount||Count of Images stored in file at OffsetImages.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
VNM_IMAGE: VNM Image Header &lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Offset||Offset in file to where raw image data starts.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Type||0 = Bitmap, 1 = Sprite&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Width||Width of this Image&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE Height||Height of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE XPos||XPos of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE YPos||YPos of this Image.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
This file format was reverse engineered by --[[User:Napalm|Napalm]] 22:29, 9 February 2010 (GMT).&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Graphics Files]]&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Beavis_and_Butthead_In_Virtual_Stupidity&amp;diff=2686</id>
		<title>Beavis and Butthead In Virtual Stupidity</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Beavis_and_Butthead_In_Virtual_Stupidity&amp;diff=2686"/>
		<updated>2010-02-09T22:01:55Z</updated>

		<summary type="html">&lt;p&gt;Napalm: Final Update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{GamePage|Beavis and Butthead In Virtual Stupidity}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beavis and Butthead in Virtual Stupidity&#039;&#039;&#039; is an adventure game and four mini-games. It was developed and published by Viacom New Media. It was originally released on the PC on the 31st August 1995. It featured vocals from the original series&#039; cast of voice actors, including Mike Judge the original shows creator.&lt;br /&gt;
&lt;br /&gt;
== Mini Games ==&lt;br /&gt;
* Hock-A-Loogie&lt;br /&gt;
* Court Chaos&lt;br /&gt;
* Bug Justice&lt;br /&gt;
* Air Guitar&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
The main game and the mini-games both use the following formats. Game sound is stored in the standard AIFF File Format. Game Video Sequences are stored in the standard AVI File Format. Game graphics are stored in Viacoms&#039; Custom Format (.VNM Viacom New Media).&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Audio_Interchange_File_Format AIFF Audio Interchange File Format on Wikipedia]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Audio_Video_Interleave Audio Video Interleave File Format on Wikipedia]&lt;br /&gt;
* [[Viacom New Media Graphics File Format]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
The VNM Graphics File Format was reverse engineered by Napalm.&lt;br /&gt;
&lt;br /&gt;
== Related Links ==&lt;br /&gt;
* [http://www.mobygames.com/game/mtvs-beavis-and-butt-head-in-virtual-stupidity Beavis and Butthead in Virtual Stupidity on MobyGames]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Beavis_and_Butt-head_in_Virtual_Stupidity Beavis and Butthead in Virtual Stupidity on Wikipedia]&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Beavis_and_Butthead_In_Virtual_Stupidity&amp;diff=2685</id>
		<title>Beavis and Butthead In Virtual Stupidity</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Beavis_and_Butthead_In_Virtual_Stupidity&amp;diff=2685"/>
		<updated>2010-02-09T21:35:45Z</updated>

		<summary type="html">&lt;p&gt;Napalm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{GamePage|Beavis and Butthead In Virtual Stupidity}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beavis and Butthead in Virtual Stupidity&#039;&#039;&#039; is an adventure game and four mini-games. It was developed and published by Viacom New Media. It was originally released on the PC on the 31st August 1995. It featured vocals from the original series&#039; cast of voice actors, including Mike Judge the original shows creator.&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mini Games ==&lt;br /&gt;
* Hock-A-Loogie&lt;br /&gt;
* Court Chaos&lt;br /&gt;
* Bug Justice&lt;br /&gt;
* Air Guitar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related Links ==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Beavis_and_Butt-head_in_Virtual_Stupidity Beavis and Butthead in Virtual Stupidity on Wikipedia]&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Beavis_and_Butthead_In_Virtual_Stupidity.png&amp;diff=2684</id>
		<title>File:Beavis and Butthead In Virtual Stupidity.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Beavis_and_Butthead_In_Virtual_Stupidity.png&amp;diff=2684"/>
		<updated>2010-02-09T21:34:45Z</updated>

		<summary type="html">&lt;p&gt;Napalm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Beavis_and_Butthead_In_Virtual_Stupidity&amp;diff=2683</id>
		<title>Beavis and Butthead In Virtual Stupidity</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Beavis_and_Butthead_In_Virtual_Stupidity&amp;diff=2683"/>
		<updated>2010-02-09T21:33:14Z</updated>

		<summary type="html">&lt;p&gt;Napalm: Created first page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{GamePage|Beavis and Butthead In Virtual Stupidity}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beavis and Butthead in Virtual Stupidity&#039;&#039;&#039; is an adventure game and four mini-games. It was developed and published by Viacom New Media. It was originally released on the PC on the 31st August 1995. It featured vocals from the original series&#039; cast of voice actors, including Mike Judge the original shows creator.&lt;br /&gt;
&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mini Games ==&lt;br /&gt;
* Hock-A-Loogie&lt;br /&gt;
* Court Chaos&lt;br /&gt;
* Bug Justice&lt;br /&gt;
* Air Guitar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related Links ==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Beavis_and_Butt-head_in_Virtual_Stupidity Beavis and Butthead in Virtual Stupidity on Wikipedia]&lt;/div&gt;</summary>
		<author><name>Napalm</name></author>
	</entry>
</feed>