<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.multimedia.cx/index.php?action=history&amp;feed=atom&amp;title=UBB</id>
	<title>UBB - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.multimedia.cx/index.php?action=history&amp;feed=atom&amp;title=UBB"/>
	<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=UBB&amp;action=history"/>
	<updated>2026-06-07T06:21:04Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=UBB&amp;diff=14038&amp;oldid=prev</id>
		<title>VAG at 17:21, 15 April 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=UBB&amp;diff=14038&amp;oldid=prev"/>
		<updated>2012-04-15T17:21:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;* Extension:  ubb , sometimes hnm&lt;br /&gt;
* Company: [[CRYO Interactive Entertainment]]&lt;br /&gt;
* Samples: '''ADD ME'''&lt;br /&gt;
&lt;br /&gt;
UBB2 is another generation of FMV format developed by Cryo. It is an improved version of [[HNM4]] format. While general container format remains the same, video encoding is slightly improved.&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
Remains the same as was used in [[HNM4]]. Following parts has changed:&lt;br /&gt;
* File signature is &amp;quot;UBB2&amp;quot; now.&lt;br /&gt;
* Video chunk has &amp;quot;IV&amp;quot; TwoCC.&lt;br /&gt;
&lt;br /&gt;
== Video Compression ==&lt;br /&gt;
The video frame is encoded in a series of horizontal colums of variable width and height. However, columns height (and some of their coding properties) may only change at the beginning of new line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Encoded stream consist of column copy mode bytes:&lt;br /&gt;
 bits:&lt;br /&gt;
      7 - swap rows/columns&lt;br /&gt;
      6 - vertical reverse&lt;br /&gt;
      5 - horizontal reverse&lt;br /&gt;
   4..0 - column width index (table lookup, see below)&lt;br /&gt;
&lt;br /&gt;
Each of such code generally means ''&amp;quot;copy a width-by-height column from some other place to the current, using flags provided.&amp;quot;''&lt;br /&gt;
&amp;lt;br&amp;gt;Flags behavior can be illustrated as follows (assuming 2x3 block and the source points to 'M' pixel):&lt;br /&gt;
 Source      Normal   Horizontal   Vertical   Swap&lt;br /&gt;
     &lt;br /&gt;
  ABCDE        MN         ML          MN       MR&lt;br /&gt;
  FGHIJ        RS         RQ          HI       NS&lt;br /&gt;
  KLMNO   -&amp;gt;   WX         WV          CD       OT&lt;br /&gt;
  PQRST                     &lt;br /&gt;
  UVWXY                     &lt;br /&gt;
&lt;br /&gt;
Multiple flags can be used together.&lt;br /&gt;
&lt;br /&gt;
Encoded column width depends on column's height:&lt;br /&gt;
 2: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20,22,24,26,28,30,32,34,36,38,40,44,48,52,56&lt;br /&gt;
 3: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,24,26,28,30,32,34,36,38,40,42,44&lt;br /&gt;
 4: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,32,34,36,38&lt;br /&gt;
&lt;br /&gt;
Source column offset may be an &amp;quot;absolute&amp;quot; offset - byte distance from the current column, or relative X:Y offset.&lt;br /&gt;
* For absolute offset read next 2-byte value (unsigned, little-endian) and add base oofset.&lt;br /&gt;
* For relative offset read next byte, extract X and Y deltas from it and add base deltas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Certain combination used for special purposes. Those are:&lt;br /&gt;
* 0x20 - skip: read next byte (width) and copy width+1 column from previous frame&lt;br /&gt;
* 0x60 - solo: draw 1-pixel wide column using next bytes of input&lt;br /&gt;
* 0xA0 - draw: read next byte (width) and draw width+2 column using next bytes of input (top-down, left-right)&lt;br /&gt;
* 0xE0 - mode: examine next byte.&lt;br /&gt;
**   if byte is zero, then read two bytes (width, color) and fill width+1 column with color.&lt;br /&gt;
**   if byte is non-zero, change the decoding properties as follows:&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 | byte | height | source | offset | Y.X bits |  X-base | Y-base |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 |   1  |                    end of decoding                     |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 |   2  |   2    |  prev  | -32768 |   N/A    |   N/A   |   N/A  |&lt;br /&gt;
 |   3  |   3    |  prev  | -32768 |   N/A    |   N/A   |   N/A  |&lt;br /&gt;
 |   4  |   4    |  prev  | -32768 |   N/A    |   N/A   |   N/A  |&lt;br /&gt;
 |   5  |   2    |  prev  |   N/A  |   4.4    |   -8    |   -8   |&lt;br /&gt;
 |   6  |   3    |  prev  |   N/A  |   4.4    |   -8    |   -8   |&lt;br /&gt;
 |   7  |   4    |  prev  |   N/A  |   4.4    |   -8    |   -8   |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 |   8  |   2    |  prev  |   N/A  |   4.4    |   -2    |   -8   |&lt;br /&gt;
 |   9  |   2    |  prev  |   N/A  |   4.4    |   -14   |   -8   |&lt;br /&gt;
 |  10  |   2    |  prev  |   N/A  |   4.4    |   -8    |   -2   |&lt;br /&gt;
 |  11  |   2    |  prev  |   N/A  |   4.4    |   -8    |   -14  |&lt;br /&gt;
 |  12  |   2    |  prev  |   N/A  |   4.4    |   -2    |   -2   |&lt;br /&gt;
 |  13  |   2    |  prev  |   N/A  |   4.4    |   -14   |   -2   |&lt;br /&gt;
 |  14  |   2    |  prev  |   N/A  |   4.4    |   -2    |   -14  |&lt;br /&gt;
 |  15  |   2    |  prev  |   N/A  |   4.4    |   -14   |   -14  |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 |  16  |   3    |  prev  |   N/A  |   4.4    |   -2    |   -8   |&lt;br /&gt;
 |  17  |   3    |  prev  |   N/A  |   4.4    |   -14   |   -8   |&lt;br /&gt;
 |  18  |   3    |  prev  |   N/A  |   4.4    |   -8    |   -2   |&lt;br /&gt;
 |  19  |   3    |  prev  |   N/A  |   4.4    |   -8    |   -14  |&lt;br /&gt;
 |  20  |   3    |  prev  |   N/A  |   4.4    |   -2    |   -2   |&lt;br /&gt;
 |  21  |   3    |  prev  |   N/A  |   4.4    |   -14   |   -2   |&lt;br /&gt;
 |  22  |   3    |  prev  |   N/A  |   4.4    |   -2    |   -14  |&lt;br /&gt;
 |  23  |   3    |  prev  |   N/A  |   4.4    |   -14   |   -14  |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 |  24  |   4    |  prev  |   N/A  |   4.4    |   -2    |   -8   |&lt;br /&gt;
 |  25  |   4    |  prev  |   N/A  |   4.4    |   -14   |   -8   |&lt;br /&gt;
 |  26  |   4    |  prev  |   N/A  |   4.4    |   -8    |   -2   |&lt;br /&gt;
 |  27  |   4    |  prev  |   N/A  |   4.4    |   -8    |   -14  |&lt;br /&gt;
 |  28  |   4    |  prev  |   N/A  |   4.4    |   -2    |   -2   |&lt;br /&gt;
 |  29  |   4    |  prev  |   N/A  |   4.4    |   -14   |   -2   |&lt;br /&gt;
 |  30  |   4    |  prev  |   N/A  |   4.4    |   -2    |   -14  |&lt;br /&gt;
 |  31  |   4    |  prev  |   N/A  |   4.4    |   -14   |   -14  |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 |  32  |   2    |  curr  | -65536 |   N/A    |   N/A   |   N/A  |&lt;br /&gt;
 |  33  |   2    |  curr  |   N/A  |   3.5    |   -16   |   -8   |&lt;br /&gt;
 |  34  |   2    |  curr  |   N/A  |   4.4    |   -8    |   -16  |&lt;br /&gt;
 |  35  |   2    |  curr  |   N/A  |   4.4    |   -24   |   -16  |&lt;br /&gt;
 |  36  |   2    |  curr  |   N/A  |   4.4    |   +8    |   -16  |&lt;br /&gt;
 |  37  |   2    |  curr  |   N/A  |   5.3    |   -4    |   -32  |&lt;br /&gt;
 |  38  |   2    |  curr  |   N/A  |   5.3    |   -12   |   -32  |&lt;br /&gt;
 |  39  |   2    |  curr  |   N/A  |   5.3    |   +4    |   -32  |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
 |  40  |   3    |  curr  | -65536 |   N/A    |   N/A   |   N/A  |&lt;br /&gt;
 |  41  |   3    |  curr  |   N/A  |   3.5    |   -16   |   -8   |&lt;br /&gt;
 |  42  |   3    |  curr  |   N/A  |   4.4    |   -8    |   -16  |&lt;br /&gt;
 |  43  |   3    |  curr  |   N/A  |   4.4    |   -24   |   -16  |&lt;br /&gt;
 |  44  |   3    |  curr  |   N/A  |   4.4    |   +8    |   -16  |&lt;br /&gt;
 |  45  |   3    |  curr  |   N/A  |   5.3    |   -4    |   -32  |&lt;br /&gt;
 |  46  |   3    |  curr  |   N/A  |   5.3    |   -12   |   -32  |&lt;br /&gt;
 |  47  |   3    |  curr  |   N/A  |   5.3    |   +4    |   -32  |&lt;br /&gt;
 +------+--------+--------+--------+----------+---------+--------+&lt;br /&gt;
* prev means source is the previous frame, curr - current&lt;br /&gt;
* Y.X means &amp;quot;Y&amp;quot; value in upper Y bits of byte, &amp;quot;X&amp;quot; in lower X bits.&lt;br /&gt;
&lt;br /&gt;
== Trivia ==&lt;br /&gt;
Apparently this format has another less-used name - HNM5.&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
== Games Using UBB ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.mobygames.com/game/megarace-2 Megarace II]&lt;br /&gt;
* lots of others&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Formats missing in FFmpeg]]&lt;/div&gt;</summary>
		<author><name>VAG</name></author>
	</entry>
</feed>