<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.ffrtt.ru/index.php?action=history&amp;feed=atom&amp;title=FF9%2FFile%2F0x03</id>
	<title>FF9/File/0x03 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ffrtt.ru/index.php?action=history&amp;feed=atom&amp;title=FF9%2FFile%2F0x03"/>
	<link rel="alternate" type="text/html" href="https://wiki.ffrtt.ru/index.php?title=FF9/File/0x03&amp;action=history"/>
	<updated>2026-08-04T00:49:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.32.1</generator>
	<entry>
		<id>https://wiki.ffrtt.ru/index.php?title=FF9/File/0x03&amp;diff=5169&amp;oldid=prev</id>
		<title>BukTop: 3 revisions imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.ffrtt.ru/index.php?title=FF9/File/0x03&amp;diff=5169&amp;oldid=prev"/>
		<updated>2019-05-23T02:25:22Z</updated>

		<summary type="html">&lt;p&gt;3 revisions imported&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 02:25, 23 May 2019&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>BukTop</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ffrtt.ru/index.php?title=FF9/File/0x03&amp;diff=5168&amp;oldid=prev</id>
		<title>my_wiki&gt;BukTop: 2 revisions imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.ffrtt.ru/index.php?title=FF9/File/0x03&amp;diff=5168&amp;oldid=prev"/>
		<updated>2018-04-04T09:36:56Z</updated>

		<summary type="html">&lt;p&gt;2 revisions imported&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 09:36, 4 April 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>my_wiki&gt;BukTop</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ffrtt.ru/index.php?title=FF9/File/0x03&amp;diff=5167&amp;oldid=prev</id>
		<title>my_wiki&gt;Zidane at 10:21, 16 November 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.ffrtt.ru/index.php?title=FF9/File/0x03&amp;diff=5167&amp;oldid=prev"/>
		<updated>2008-11-16T10:21:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 10:21, 16 November 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''Animation header'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;'''Animation header'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Animation block begins with 2 empty bytes. Here there is main place to calculate animation pointers. Next there is 2 bytes that represents Frames count of animation. 	&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Animation block begins with 2 empty bytes. Here there is main place to calculate animation pointers.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Next there is 2 bytes that represents Frames count of animation. 	&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Next there is 6 bytes, which can be either direct coordinates X, Y, X or pointers to animation position. Type represents next possible values:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Next there is 6 bytes, which can be either direct coordinates X, Y, X or pointers to animation position. Type represents next possible values:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>my_wiki&gt;Zidane</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.ffrtt.ru/index.php?title=FF9/File/0x03&amp;diff=5166&amp;oldid=prev</id>
		<title>my_wiki&gt;Zidane at 10:19, 16 November 2008</title>
		<link rel="alternate" type="text/html" href="https://wiki.ffrtt.ru/index.php?title=FF9/File/0x03&amp;diff=5166&amp;oldid=prev"/>
		<updated>2008-11-16T10:19:57Z</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;'''Animation header'''&lt;br /&gt;
&lt;br /&gt;
Animation block begins with 2 empty bytes. Here there is main place to calculate animation pointers. Next there is 2 bytes that represents Frames count of animation. 	&lt;br /&gt;
&lt;br /&gt;
Next there is 6 bytes, which can be either direct coordinates X, Y, X or pointers to animation position. Type represents next possible values:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;background: rgb(0,0,0)&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:rgb(204,204,204);&amp;quot; align=&amp;quot;center&amp;quot; | Value&lt;br /&gt;
! style=&amp;quot;background:rgb(204,204,204);&amp;quot; align=&amp;quot;center&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;background:rgb(204,204,204);&amp;quot; align=&amp;quot;center&amp;quot; | Bit mask&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 0&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | X, Y, Z â€“ pointers&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 00000000&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 1&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | X-Value, Y,Z-pointers&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 00000001&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 2&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | Y-Value X,Z-pointers&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 00000010&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 3&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | X,Y â€“ Values Z-pointer&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 00000011&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 4&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | Z- Value X,Yâ€“ pointers&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 00000100&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 5&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | X,Zâ€“ Values Yâ€“ pointer&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 00000101&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 6&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | X,Yâ€“ Values  X-pointer&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 00000110&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 7&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | X, Y, Z - Values&lt;br /&gt;
| style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 00000111&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It was made for animation shortage. In other words, value, that doesn't change is represented by 1 value and doesn't changed during all animation, and another, which represented by pointer, points to sequence, consisted of 2*frames_count bytes, which points to coordinate values in current animation frame. For representing position used 2-byte numbers.&lt;br /&gt;
&lt;br /&gt;
After this 8 bytes there is 2 pointers, every is 4-byte, which points to angle table and offset table.(????). Calculated from beginning of animation block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Angle table'''&lt;br /&gt;
&lt;br /&gt;
Next there is bone animation table. Bones animated is achieved by changing angle.  Used very popular and easy to understand Euler angles. For every bone in selected table there is either direct values of angles or pointers to animation. As we saw earlier, there is flag, that represents, what we have (angle or pointer to animation). Record count in table equal to count of bones.&lt;br /&gt;
&lt;br /&gt;
    '''Record structure:'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;background: rgb(0,0,0)&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:rgb(204,204,204);&amp;quot; align=&amp;quot;center&amp;quot; | Pitch			&lt;br /&gt;
! style=&amp;quot;background:rgb(204,204,204);&amp;quot; align=&amp;quot;center&amp;quot; | Yaw&lt;br /&gt;
! style=&amp;quot;background:rgb(204,204,204);&amp;quot; align=&amp;quot;center&amp;quot; | Roll&lt;br /&gt;
! style=&amp;quot;background:rgb(204,204,204);&amp;quot; align=&amp;quot;center&amp;quot; | Flag&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 2 bytes			&lt;br /&gt;
! style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 2 bytes&lt;br /&gt;
! style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 2 bytes&lt;br /&gt;
! style=&amp;quot;background:rgb(255,255,255);&amp;quot; | 2 bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Flag meaning is the same, as we saw earleir. If in table there is angle value, that we need  to take only 1 byte (unsure, second byte is very often not 0), if there is an pointer, it calculated from beginning of animation block, used 2 bytes, and where it points angles is represented by 1 byte (sequence for selected angle contains 1*frames_count bytes)&lt;br /&gt;
&lt;br /&gt;
!!!! This angles needs to be shifted to 4 bits to the left, as from second table it'll be extracted lower bits. Full 360 angles is 4096.!!!!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Low angle part table'''&lt;br /&gt;
&lt;br /&gt;
	Next there is table, identical to table of bone angles, it's table of lower bits of angles. After this table there is same animation block, to which points pointers from this table. For every frame there is half-byte (0x0f possible values), this values or-ing with high parts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the end we have full angles from 0 to 4095.&lt;/div&gt;</summary>
		<author><name>my_wiki&gt;Zidane</name></author>
		
	</entry>
</feed>