<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.cloudmodding.com/oot/Code:Collision_Normals/history?feed=atom</id>
		<title>Code:Collision Normals - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.cloudmodding.com/oot/Code:Collision_Normals/history?feed=atom"/>
		<link rel="alternate" type="text/html" href="https://wiki.cloudmodding.com/oot/Code:Collision_Normals/history"/>
		<updated>2026-04-05T22:30:07Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://wiki.cloudmodding.com/woot/index.php?title=Code:Collision_Normals&amp;diff=1566&amp;oldid=prev</id>
		<title>Mzxrules: Mzxrules moved page App:Collision Normals to Code:Collision Normals</title>
		<link rel="alternate" type="text/html" href="https://wiki.cloudmodding.com/woot/index.php?title=Code:Collision_Normals&amp;diff=1566&amp;oldid=prev"/>
				<updated>2014-07-11T09:59:14Z</updated>
		
		<summary type="html">&lt;p&gt;Mzxrules moved page &lt;a href=&quot;/oot/App:Collision_Normals/edit?redlink=1&quot; class=&quot;new&quot; title=&quot;App:Collision Normals (page does not exist)&quot;&gt;App:Collision Normals&lt;/a&gt; to &lt;a href=&quot;/oot/Code:Collision_Normals&quot; title=&quot;Code:Collision Normals&quot;&gt;Code:Collision Normals&lt;/a&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 09:59, 11 July 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&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>Mzxrules</name></author>	</entry>

	<entry>
		<id>https://wiki.cloudmodding.com/woot/index.php?title=Code:Collision_Normals&amp;diff=1565&amp;oldid=prev</id>
		<title>Mzxrules at 09:58, 11 July 2014</title>
		<link rel="alternate" type="text/html" href="https://wiki.cloudmodding.com/woot/index.php?title=Code:Collision_Normals&amp;diff=1565&amp;oldid=prev"/>
				<updated>2014-07-11T09:58:48Z</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 style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 09:58, 11 July 2014&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-l188&quot; &gt;Line 188:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 188:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: Documentation]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: Documentation]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: File Formats]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: File Formats]]&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;color:black; 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;[[Category: &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Software&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; 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;[[Category: &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Code&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Mzxrules</name></author>	</entry>

	<entry>
		<id>https://wiki.cloudmodding.com/woot/index.php?title=Code:Collision_Normals&amp;diff=1481&amp;oldid=prev</id>
		<title>CloudMax: CloudMax moved page Collision Normals to App:Collision Normals: Moved to proper namespace</title>
		<link rel="alternate" type="text/html" href="https://wiki.cloudmodding.com/woot/index.php?title=Code:Collision_Normals&amp;diff=1481&amp;oldid=prev"/>
				<updated>2014-07-07T09:21:51Z</updated>
		
		<summary type="html">&lt;p&gt;CloudMax moved page &lt;a href=&quot;/oot/Collision_Normals&quot; class=&quot;mw-redirect&quot; title=&quot;Collision Normals&quot;&gt;Collision Normals&lt;/a&gt; to &lt;a href=&quot;/oot/App:Collision_Normals/edit?redlink=1&quot; class=&quot;new&quot; title=&quot;App:Collision Normals (page does not exist)&quot;&gt;App:Collision Normals&lt;/a&gt;: Moved to proper namespace&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 09:21, 7 July 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&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>CloudMax</name></author>	</entry>

	<entry>
		<id>https://wiki.cloudmodding.com/woot/index.php?title=Code:Collision_Normals&amp;diff=395&amp;oldid=prev</id>
		<title>Mzxrules: Mzxrules moved page Zelda 64: Collision Normals to Collision Normals without leaving a redirect</title>
		<link rel="alternate" type="text/html" href="https://wiki.cloudmodding.com/woot/index.php?title=Code:Collision_Normals&amp;diff=395&amp;oldid=prev"/>
				<updated>2014-06-09T01:37:53Z</updated>
		
		<summary type="html">&lt;p&gt;Mzxrules moved page &lt;a href=&quot;/oot/Zelda_64:_Collision_Normals/edit?redlink=1&quot; class=&quot;new&quot; title=&quot;Zelda 64: Collision Normals (page does not exist)&quot;&gt;Zelda 64: Collision Normals&lt;/a&gt; to &lt;a href=&quot;/oot/Collision_Normals&quot; class=&quot;mw-redirect&quot; title=&quot;Collision Normals&quot;&gt;Collision Normals&lt;/a&gt; without leaving a redirect&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 01:37, 9 June 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&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>Mzxrules</name></author>	</entry>

	<entry>
		<id>https://wiki.cloudmodding.com/woot/index.php?title=Code:Collision_Normals&amp;diff=31&amp;oldid=prev</id>
		<title>Mzxrules: 1 revision</title>
		<link rel="alternate" type="text/html" href="https://wiki.cloudmodding.com/woot/index.php?title=Code:Collision_Normals&amp;diff=31&amp;oldid=prev"/>
				<updated>2014-06-08T23:20:57Z</updated>
		
		<summary type="html">&lt;p&gt;1 revision&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 23:20, 8 June 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&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>Mzxrules</name></author>	</entry>

	<entry>
		<id>https://wiki.cloudmodding.com/woot/index.php?title=Code:Collision_Normals&amp;diff=30&amp;oldid=prev</id>
		<title>Spinout: /* Python */</title>
		<link rel="alternate" type="text/html" href="https://wiki.cloudmodding.com/woot/index.php?title=Code:Collision_Normals&amp;diff=30&amp;oldid=prev"/>
				<updated>2012-05-07T08:51:52Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Python&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;MN for the algorithm, JSA for implementing it originally&lt;br /&gt;
__TOC__&lt;br /&gt;
==C==&lt;br /&gt;
Python code translated to C by spinout.&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define U16(a,p)	(((a)[p]&amp;lt;&amp;lt;8)|((a)[p+1]))&lt;br /&gt;
#define S16(a,p)	(signed short)U16(a,p)&lt;br /&gt;
&lt;br /&gt;
void FixCollision(unsigned char * data, int vertOff, int TriOff, int TriCount)&lt;br /&gt;
{&lt;br /&gt;
    int i, pos, end = TriOff + (TriCount &amp;lt;&amp;lt; 4);&lt;br /&gt;
    int v1, v2, v3, p1[3], p2[3], p3[3], dx[2], dy[2], dz[2], dn, ni[3];&lt;br /&gt;
    float nf[3], nd;&lt;br /&gt;
    for(pos=TriOff;pos&amp;lt;end;pos+=0x10)&lt;br /&gt;
    {&lt;br /&gt;
        v1 = U16(data, pos + 2);&lt;br /&gt;
        v2 = U16(data, pos + 4);&lt;br /&gt;
        v3 = U16(data, pos + 6);&lt;br /&gt;
        for(i=0;i&amp;lt;3;i++)&lt;br /&gt;
        {&lt;br /&gt;
            p1[i] = S16(data, vertOff + (v1 * 0x6) + (i &amp;lt;&amp;lt; 1));&lt;br /&gt;
            p2[i] = S16(data, vertOff + (v2 * 0x6) + (i &amp;lt;&amp;lt; 1));&lt;br /&gt;
            p3[i] = S16(data, vertOff + (v3 * 0x6) + (i &amp;lt;&amp;lt; 1));&lt;br /&gt;
        }&lt;br /&gt;
        dx[0] = p1[0] - p2[0]; dx[1] = p2[0] - p3[0];&lt;br /&gt;
        dy[0] = p1[1] - p2[1]; dy[1] = p2[1] - p3[1];&lt;br /&gt;
        dz[0] = p1[2] - p2[2]; dz[1] = p2[2] - p3[2];&lt;br /&gt;
        &lt;br /&gt;
        ni[0] = (dy[0] * dz[1]) - (dz[0] * dy[1]);&lt;br /&gt;
        ni[1] = (dz[0] * dx[1]) - (dx[0] * dz[1]);&lt;br /&gt;
        ni[2] = (dx[0] * dy[1]) - (dy[0] * dx[1]);&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        for(i=0;i&amp;lt;3;i++)&lt;br /&gt;
            nf[i] = (float)ni[i] * ni[i];&lt;br /&gt;
        &lt;br /&gt;
        nd = nf[0] + nf[1] + nf[2];&lt;br /&gt;
        &lt;br /&gt;
        for(i=0;i&amp;lt;3;i++)&lt;br /&gt;
        {&lt;br /&gt;
            if (nd)&lt;br /&gt;
                nf[i] /= nd;&lt;br /&gt;
            nf[i] *= 0x3FFF0001;&lt;br /&gt;
            nf[i] = sqrt(nf[i]);&lt;br /&gt;
            if(ni[i] &amp;lt; 0)&lt;br /&gt;
                nf[i] *= -1;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        dn = (int)( (nf[0] / 0x7FFF * p1[0]) + (nf[1] / 0x7FFF * p1[1]) + (nf[2] / 0x7FFF * p1[2]) ) * -1;&lt;br /&gt;
        &lt;br /&gt;
        if(dn &amp;lt; 0)&lt;br /&gt;
            dn+=0x10000;&lt;br /&gt;
        data[pos+0xE] = (dn&amp;gt;&amp;gt;8)&amp;amp;0xFF;&lt;br /&gt;
        data[pos+0xF] = dn&amp;amp;0xFF;&lt;br /&gt;
        &lt;br /&gt;
        for(i=0;i&amp;lt;3;i++)&lt;br /&gt;
        {&lt;br /&gt;
            ni[i] = (int)nf[i];&lt;br /&gt;
            if(ni[i] &amp;lt; 0)&lt;br /&gt;
                ni[i] += 0x10000;&lt;br /&gt;
            data[pos+8+(i&amp;lt;&amp;lt;1)] = (ni[i]&amp;gt;&amp;gt;8)&amp;amp;0xFF;&lt;br /&gt;
            data[pos+9+(i&amp;lt;&amp;lt;1)] = ni[i]&amp;amp;0xFF;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==C#==&lt;br /&gt;
C# implementation by xdaniel, based on above C code. Non-standard functions (&amp;quot;Helpers&amp;quot; class) should be self-explanatory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
private void FixCollision(ref List&amp;lt;byte&amp;gt; Data, int VertOff, int TriOff, int TriCount)&lt;br /&gt;
{&lt;br /&gt;
    int i, pos, end = TriOff + (TriCount &amp;lt;&amp;lt; 4);&lt;br /&gt;
    int v1, v2, v3, dn;&lt;br /&gt;
    int[] p1 = new int[3], p2 = new int[3], p3 = new int[3], dx = new int[2], dy = new int[2], dz = new int[2], ni = new int[3];&lt;br /&gt;
    float nd;&lt;br /&gt;
    float[] nf = new float[3];&lt;br /&gt;
&lt;br /&gt;
    for (pos = TriOff; pos &amp;lt; end; pos += 0x10)&lt;br /&gt;
    {&lt;br /&gt;
        v1 = Helpers.Read16(Data, pos + 2);&lt;br /&gt;
        v2 = Helpers.Read16(Data, pos + 4);&lt;br /&gt;
        v3 = Helpers.Read16(Data, pos + 6);&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
        {&lt;br /&gt;
            p1[i] = Helpers.Read16S(Data, VertOff + (v1 * 0x6) + (i &amp;lt;&amp;lt; 1));&lt;br /&gt;
            p2[i] = Helpers.Read16S(Data, VertOff + (v2 * 0x6) + (i &amp;lt;&amp;lt; 1));&lt;br /&gt;
            p3[i] = Helpers.Read16S(Data, VertOff + (v3 * 0x6) + (i &amp;lt;&amp;lt; 1));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        dx[0] = p1[0] - p2[0]; dx[1] = p2[0] - p3[0];&lt;br /&gt;
        dy[0] = p1[1] - p2[1]; dy[1] = p2[1] - p3[1];&lt;br /&gt;
        dz[0] = p1[2] - p2[2]; dz[1] = p2[2] - p3[2];&lt;br /&gt;
&lt;br /&gt;
        ni[0] = (dy[0] * dz[1]) - (dz[0] * dy[1]);&lt;br /&gt;
        ni[1] = (dz[0] * dx[1]) - (dx[0] * dz[1]);&lt;br /&gt;
        ni[2] = (dx[0] * dy[1]) - (dy[0] * dx[1]);&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
            nf[i] = (float)ni[i] * ni[i];&lt;br /&gt;
&lt;br /&gt;
        nd = nf[0] + nf[1] + nf[2];&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
        {&lt;br /&gt;
            if (nd != 0)&lt;br /&gt;
                nf[i] /= nd;&lt;br /&gt;
            nf[i] *= 0x3FFF0001;&lt;br /&gt;
            nf[i] = (float)Math.Sqrt((double)nf[i]);&lt;br /&gt;
            if (ni[i] &amp;lt; 0)&lt;br /&gt;
                nf[i] *= -1;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        dn = (int)( (nf[0] / 0x7FFF * p1[0]) + (nf[1] / 0x7FFF * p1[1]) + (nf[2] / 0x7FFF * p1[2]) ) * -1;&lt;br /&gt;
        &lt;br /&gt;
        if (dn &amp;lt; 0)&lt;br /&gt;
            dn += 0x10000;&lt;br /&gt;
&lt;br /&gt;
        Helpers.Overwrite16(ref Data, pos + 0xE, (ushort)(dn &amp;amp; 0xFFFF));&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
        {&lt;br /&gt;
            ni[i] = (int)nf[i];&lt;br /&gt;
            if (ni[i] &amp;lt; 0)&lt;br /&gt;
                ni[i] += 0x10000;&lt;br /&gt;
            Helpers.Overwrite16(ref Data, (pos + 8 + (i &amp;lt;&amp;lt; 1)), (ushort)(ni[i] &amp;amp; 0xFFFF));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Python==&lt;br /&gt;
Deciphered from VB spaghetti to Python by spinout.&lt;br /&gt;
&amp;lt;pre&amp;gt;from struct import pack, unpack&lt;br /&gt;
&lt;br /&gt;
def FixCollision(data, vertOff, TriOff, TriCount):&lt;br /&gt;
    for pos in range(TriOff, TriOff + (TriCount &amp;lt;&amp;lt; 4), 0x10):&lt;br /&gt;
        v1,v2,v3 = unpack(&amp;quot;&amp;gt;HHH&amp;quot;, data[pos+0x2:][:0x6])&lt;br /&gt;
        p1 = unpack(&amp;quot;&amp;gt;hhh&amp;quot;, data[vertOff + (v1 * 0x6):][:0x6])&lt;br /&gt;
        p2 = unpack(&amp;quot;&amp;gt;hhh&amp;quot;, data[vertOff + (v2 * 0x6):][:0x6])&lt;br /&gt;
        p3 = unpack(&amp;quot;&amp;gt;hhh&amp;quot;, data[vertOff + (v3 * 0x6):][:0x6])&lt;br /&gt;
        &lt;br /&gt;
        dx = [p1[0] - p2[0], p2[0] - p3[0]]&lt;br /&gt;
        dy = [p1[1] - p2[1], p2[1] - p3[1]]&lt;br /&gt;
        dz = [p1[2] - p2[2], p2[2] - p3[2]]&lt;br /&gt;
        &lt;br /&gt;
        n = [(dy[0] * dz[1]) - (dz[0] * dy[1]),&lt;br /&gt;
             (dz[0] * dx[1]) - (dx[0] * dz[1]),&lt;br /&gt;
             (dx[0] * dy[1]) - (dy[0] * dx[1])]&lt;br /&gt;
        &lt;br /&gt;
        n_ = n[:]&lt;br /&gt;
        &lt;br /&gt;
        for i in range(3):&lt;br /&gt;
            n[i] *= float(n[i])&lt;br /&gt;
        &lt;br /&gt;
        nd = n[0] + n[1] + n[2]&lt;br /&gt;
        &lt;br /&gt;
        for i in range(3):&lt;br /&gt;
            if nd:&lt;br /&gt;
                n[i] /= nd&lt;br /&gt;
            n[i] *= 0x3FFF0001&lt;br /&gt;
            n[i] = sqrt(n[i])&lt;br /&gt;
            if(n_[i] &amp;lt; 0):&lt;br /&gt;
                n[i] *= -1&lt;br /&gt;
        &lt;br /&gt;
        dn = int(((n[0] / 0x7FFF * p1[0]) + (n[1] / 0x7FFF * p1[1]) + (n[2] / 0x7FFF * p1[2]) ) * -1)&lt;br /&gt;
        &lt;br /&gt;
        if(dn &amp;lt; 0):&lt;br /&gt;
            dn+=0x10000&lt;br /&gt;
        dn = dn &amp;amp; 0xFFFF&lt;br /&gt;
        &lt;br /&gt;
        for i in range(3):&lt;br /&gt;
            n[i] = int(n[i])&lt;br /&gt;
            if(n[i] &amp;lt; 0):&lt;br /&gt;
                n[i] += 0x10000&lt;br /&gt;
            n[i] = n[i] &amp;amp; 0xFFFF&lt;br /&gt;
        &lt;br /&gt;
        norms = pack(&amp;quot;&amp;gt;HHHH&amp;quot;, n[0], n[1], n[2], dn)&lt;br /&gt;
        &lt;br /&gt;
        if (norms != data[pos+0x8][:0x8]):&lt;br /&gt;
            data = data[:pos+0x8]+norms+data[pos+0x10:]&lt;br /&gt;
        &lt;br /&gt;
    return data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Documentation]]&lt;br /&gt;
[[Category: File Formats]]&lt;br /&gt;
[[Category: Software]]&lt;/div&gt;</summary>
		<author><name>Spinout</name></author>	</entry>

	</feed>