<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://xboxdevwiki.net/index.php?action=history&amp;feed=atom&amp;title=Grand_Theft_Auto%3A_San_Andreas</id>
		<title>Grand Theft Auto: San Andreas - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://xboxdevwiki.net/index.php?action=history&amp;feed=atom&amp;title=Grand_Theft_Auto%3A_San_Andreas"/>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Grand_Theft_Auto:_San_Andreas&amp;action=history"/>
		<updated>2026-05-21T14:13:14Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.28.0</generator>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Grand_Theft_Auto:_San_Andreas&amp;diff=5380&amp;oldid=prev</id>
		<title>JayFoxRox at 15:27, 24 May 2017</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Grand_Theft_Auto:_San_Andreas&amp;diff=5380&amp;oldid=prev"/>
				<updated>2017-05-24T15:27:42Z</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='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 15:27, 24 May 2017&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-l3&quot; &gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&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;/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;/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;This game shares some technical aspects with [[Grand Theft Auto III]] and [[Grand Theft Auto: Vice City]].&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;This game shares some technical aspects with [[Grand Theft Auto III]] and [[Grand Theft Auto: Vice City]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;At least some parts of the games source code have been leaked into the public.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The source code was illegally offered for sale in the past.&lt;/ins&gt;&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;/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;/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;== Reverse engineering by aap ==&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;== Reverse engineering by aap ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JayFoxRox</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Grand_Theft_Auto:_San_Andreas&amp;diff=5379&amp;oldid=prev</id>
		<title>JayFoxRox: Created page with &quot;{{Game}} See https://github.com/aap/skygfx for a re-implementation of the Xbox graphics features for PC.  This game shares some technical aspects with Grand Theft Auto III...&quot;</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Grand_Theft_Auto:_San_Andreas&amp;diff=5379&amp;oldid=prev"/>
				<updated>2017-05-24T15:25:16Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{Game}} See https://github.com/aap/skygfx for a re-implementation of the Xbox graphics features for PC.  This game shares some technical aspects with &lt;a href=&quot;/Grand_Theft_Auto_III&quot; title=&quot;Grand Theft Auto III&quot;&gt;Grand Theft Auto III&lt;/a&gt;...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Game}}&lt;br /&gt;
See https://github.com/aap/skygfx for a re-implementation of the Xbox graphics features for PC.&lt;br /&gt;
&lt;br /&gt;
This game shares some technical aspects with [[Grand Theft Auto III]] and [[Grand Theft Auto: Vice City]].&lt;br /&gt;
&lt;br /&gt;
== Reverse engineering by aap ==&lt;br /&gt;
&lt;br /&gt;
aap has reverse engineered a lot for skygfx.&lt;br /&gt;
Some of these files might be for [[Grand Theft Auto III]] or [[Grand Theft Auto: Vice City]]. They come from a folder for all GTA research&lt;br /&gt;
&lt;br /&gt;
=== Shader used for cars ===&lt;br /&gt;
&lt;br /&gt;
==== Shader 1 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;	c14		0.0 0.5 1.0 2.0&lt;br /&gt;
;	c26		specular&lt;br /&gt;
;	c27		spec, fresnel, 0.6, power&lt;br /&gt;
&lt;br /&gt;
 dp4	r3.x, v0, c4&lt;br /&gt;
 dp4	r3.y, v0, c5&lt;br /&gt;
 dp4	r3.z, v0, c6&lt;br /&gt;
 add	r2.xyz, c12.xyzz, -r3.xyzz&lt;br /&gt;
 dp3	r0.x, v1.xyzz, c4.xyzz&lt;br /&gt;
 dp3	r2.w, r2.xyzz, r2.xyzz&lt;br /&gt;
 +mov	oD0.w, c14.z&lt;br /&gt;
 dp3	r0.y, v1.xyzz, c5.xyzz&lt;br /&gt;
 dp3	r0.z, v1.xyzz, c6.xyzz&lt;br /&gt;
 +rsq	r1.w, r2.w&lt;br /&gt;
 mov	r5.w, c14.w&lt;br /&gt;
 mul	r2.xyz, r2.xyzz, r1.w		; r2: normalized view vector&lt;br /&gt;
 dp3	r0.w, r0.xyzz, r0.xyzz&lt;br /&gt;
 add	r4.xyz, r2.xyzz, -c13.xyzz&lt;br /&gt;
 mov	r11.w, c27.w&lt;br /&gt;
 +rsq	r1.w, r0.w&lt;br /&gt;
 dp3	r4.w, r4.xyzz, r4.xyzz&lt;br /&gt;
 mul	r0.xyz, r0.xyzz, r1.w		; r0: normalized world normal&lt;br /&gt;
 add	r10.xyz, r2.xyzz, -c18.xyzz&lt;br /&gt;
 mul	r11.z, c27.w, r5.w&lt;br /&gt;
 +rsq	r1.w, r4.w&lt;br /&gt;
 dp3	r4.w, r10.xyzz, r10.xyzz&lt;br /&gt;
 add	r9.yzw, r2.yyzx, -c19.yyzx&lt;br /&gt;
 mul	r4.xyz, r4.xyzz, r1.w&lt;br /&gt;
 dp3	r4.w, r9.wyzz, r9.wyzz&lt;br /&gt;
 +rsq	r1.w, r4.w&lt;br /&gt;
 add	r8.xzw, r2.yyzx, -c20.yyzx&lt;br /&gt;
 dp3	r10.w, r4.xyzz, r0.xyzz&lt;br /&gt;
 mul	r4.xyz, r10.xyzz, r1.w&lt;br /&gt;
 +rsq	r1.x, r4.w&lt;br /&gt;
 dp3	r4.w, r8.wxzz, r8.wxzz&lt;br /&gt;
 add	r10.xyz, r2.xyzz, -c21.xyzz&lt;br /&gt;
 max	r11.x, r10.w, c14.x&lt;br /&gt;
 +rsq	r1.w, r4.w&lt;br /&gt;
 dp3	r10.w, r4.xyzz, r0.xyzz&lt;br /&gt;
 mul	r4.xyz, r9.wyzz, r1.x&lt;br /&gt;
 +lit	r1.z, r11.xxxw&lt;br /&gt;
 dp3	r4.w, r10.xyzz, r10.xyzz&lt;br /&gt;
 max	r11.y, r10.w, c14.x&lt;br /&gt;
 dp3	r11.x, r4.xyzz, r0.xyzz&lt;br /&gt;
 mul	r4.xyz, r8.wxzz, r1.w&lt;br /&gt;
 +rsq	r1.x, r4.w&lt;br /&gt;
 mul	r8.xyz, r1.z, c26.xyzz			; direct light&lt;br /&gt;
 mul	r11.w, c27.w, r5.w&lt;br /&gt;
 +lit	r1.z, r11.yyyz&lt;br /&gt;
 max	r11.y, r11.x, c14.x&lt;br /&gt;
 dp3	r11.x, r4.xyzz, r0.xyzz&lt;br /&gt;
 mul	r4.xyz, r10.xyzz, r1.x&lt;br /&gt;
 dp4	r6.y, v0, c0&lt;br /&gt;
 dp4	r6.z, v0, c1&lt;br /&gt;
 dp4	r6.x, v0, c2&lt;br /&gt;
 +dp4	oFog.x, v0, c2&lt;br /&gt;
 mad	r8.xyz, r1.z, c22.xyzz, r8.xyzz		; add extra 1&lt;br /&gt;
 mul	r11.w, c27.w, r5.w&lt;br /&gt;
 +lit	r1.z, r11.yyyw&lt;br /&gt;
 max	r11.y, r11.x, c14.x&lt;br /&gt;
 +mov	oPos.xyz, r6.yzxw&lt;br /&gt;
 dp3	r11.x, r4.xyzz, r0.xyzz&lt;br /&gt;
 dp4	oPos.w, v0, c3&lt;br /&gt;
 mad	r8.xyz, r1.z, c23.xyzz, r8.xyzz		; add extra 2&lt;br /&gt;
 mul	r11.w, c27.w, r5.w&lt;br /&gt;
 +lit	r1.z, r11.yyyw&lt;br /&gt;
 max	r11.y, r11.x, c14.x&lt;br /&gt;
+rcc	r1.x, r12.w&lt;br /&gt;
 mad	r8.xyz, r1.z, c24.xyzz, r8.xyzz		; add extra 3&lt;br /&gt;
mul	oPos.xyz, r12.xyzz, c-38.xyzz&lt;br /&gt;
 +lit	r1.z, r11.yyyw&lt;br /&gt;
 mad	oD0.xyz, r1.z, c25.xyzz, r8.xyzz	; add extra 4&lt;br /&gt;
mad	oPos.xyz, r12.xyzz, r1.x, c-37.xyzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Shader 2 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;	v0	vertex&lt;br /&gt;
;	v1	normal&lt;br /&gt;
;	v2	tex coord&lt;br /&gt;
;	c0 c1 c2 c3	worldviewproj matrix&lt;br /&gt;
;	c4 c5 c6	world matrix&lt;br /&gt;
;	c8 c9		texture matrix?&lt;br /&gt;
;	c12		eye position&lt;br /&gt;
;	c13		direct direction&lt;br /&gt;
;	c14		0.0 0.5 1.0 2.0&lt;br /&gt;
;	c15		ambient&lt;br /&gt;
;	c16		color&lt;br /&gt;
;	c17		direct color&lt;br /&gt;
;	c18 c19 c20 c21	extra directions&lt;br /&gt;
;	c22 c23 c24 c25	extra colors&lt;br /&gt;
;	c26		specular&lt;br /&gt;
;	c27		spec, fresnel, 0.6, power&lt;br /&gt;
&lt;br /&gt;
 dp3	r0.x, v1.xyzz, c4.xyzz&lt;br /&gt;
 dp3	r0.y, v1.xyzz, c5.xyzz&lt;br /&gt;
 dp3	r0.z, v1.xyzz, c6.xyzz&lt;br /&gt;
 dp4	r3.x, v0, c4&lt;br /&gt;
 dp3	r0.w, r0.xyzz, r0.xyzz&lt;br /&gt;
 +mov	oT0.xy, v2.xyyy&lt;br /&gt;
 dp4	r3.y, v0, c5&lt;br /&gt;
 dp4	r3.z, v0, c6&lt;br /&gt;
 +rsq	r1.w, r0.w&lt;br /&gt;
 add	r2.xyz, c12.xyzz, -r3.xyzz&lt;br /&gt;
 mul	r0.xyz, r0.xyzz, r1.w		; r0.xyz: normalized world-normal&lt;br /&gt;
 dp3	r2.w, r2.xyzz, r2.xyzz&lt;br /&gt;
 dp3	r0.w, r0.xyzz, -c13.xyzz&lt;br /&gt;
 dp3	r11.w, r0.xyzz, -c18.xyzz&lt;br /&gt;
 +rsq	r1.w, r2.w&lt;br /&gt;
 max	r0.w, r0.w, c14.x&lt;br /&gt;
 mul	r2.xyz, r2.xyzz, r1.w		; r2: normalized world-view-vector&lt;br /&gt;
dp3	r7.x, r2.xyzz, r0.xyzz&lt;br /&gt;
 mul	r8.xyz, r0.w, c16.xyzz		; direct color&lt;br /&gt;
max	r5.x, r7.x, c14.x&lt;br /&gt;
 mov	r11.xyz, c16&lt;br /&gt;
 +mov	oD0.w, c16&lt;br /&gt;
 max	r0.w, r11.w, c14.x&lt;br /&gt;
 dp3	r11.w, r0.xyzz, -c19.xyzz&lt;br /&gt;
mul	r6.x, r7.x, c14.w&lt;br /&gt;
add	r5.x, c14.z, -r5.x&lt;br /&gt;
 mad	r8.xyz, c15.xyzz, r11.xyzz, r8.xyzz	; add ambient color&lt;br /&gt;
 mul	r6.yzw, r0.w, c22.yyzx&lt;br /&gt;
 max	r0.w, r11.w, c14.x&lt;br /&gt;
 dp3	r11.w, r0.xyzz, -c20.xyzz&lt;br /&gt;
mad	r11.xyz, r6.x, r0.xyzz, -r2.xyzz&lt;br /&gt;
mul	r6.x, r5.x, r5.x&lt;br /&gt;
 dp4	r10.y, v0, c0&lt;br /&gt;
 dp4	r10.z, v0, c1&lt;br /&gt;
 dp4	r10.x, v0, c2&lt;br /&gt;
 +dp4	oFog.x, v0, c2&lt;br /&gt;
 mad	r8.xyz, r6.wyzz, c16.xyzz, r8.xyzz	; add extra light 1&lt;br /&gt;
 mul	r6.yzw, r0.w, c23.yyzx&lt;br /&gt;
 +mov	oPos.xyz, r10.yzxw&lt;br /&gt;
 max	r0.w, r11.w, c14.x&lt;br /&gt;
 dp3	r0.x, r0.xyzz, -c21.xyzz&lt;br /&gt;
dp3	r11.x, r11.xyzz, c8.xyzz&lt;br /&gt;
mul	r6.x, r6.x, r6.x&lt;br /&gt;
mov	r11.w, c27.y&lt;br /&gt;
 dp4	oPos.w, v0, c3&lt;br /&gt;
 mad	r8.xyz, r6.wyzz, c16.xyzz, r8.xyzz	; add extra light 2&lt;br /&gt;
 mul	r6.yzw, r0.w, c24.yyzx&lt;br /&gt;
 +rcc	r1.x, r12.w&lt;br /&gt;
 max	r0.w, r0.x, c14.x&lt;br /&gt;
dp3	r11.y, r11.xyzz, c9.xyzz&lt;br /&gt;
mul	r5.x, r5.x, r6.x&lt;br /&gt;
add	r7.x, c14.z, -r11.w&lt;br /&gt;
 mad	r8.xyz, r6.wyzz, c16.xyzz, r8.xyzz	; add extra light 3&lt;br /&gt;
 mul	r6.xyz, r0.w, c25.xyzz&lt;br /&gt;
mul	r11.yw, r11.yyyx, c14.y&lt;br /&gt;
mad	r5.x, r7.x, r5.x, c27.y&lt;br /&gt;
mul	oPos.xyz, r12.xyzz, c-38.xyzz&lt;br /&gt;
 mad	oD0.xyz, r6.xyzz, c16.xyzz, r8.xyzz	; add extra light 4&lt;br /&gt;
add	oT1.xy, r11.wyyy, c14.y&lt;br /&gt;
mul	oD1, r5.x, c27.x&lt;br /&gt;
mad	oPos.xyz, r12.xyzz, r1.x, c-37.xyzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gloss shader ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; v0 	vertex pos&lt;br /&gt;
; v2	tex coord&lt;br /&gt;
; c0-c3	matrix&lt;br /&gt;
; c4-c7	world matrix&lt;br /&gt;
; c12	eye position&lt;br /&gt;
; c13	light direction&lt;br /&gt;
; c26	pipeline data...&lt;br /&gt;
; c27	0, 0, 0, 8.0&lt;br /&gt;
; c28	0, 0, 1, 1&lt;br /&gt;
; c29	0.5, 0.5, 0.5, 0.5&lt;br /&gt;
&lt;br /&gt;
 dp4	r3.x, v0, c4&lt;br /&gt;
 dp4	r3.y, v0, c5&lt;br /&gt;
 dp4	r3.z, v0, c6&lt;br /&gt;
 add	r2.xyz, c12.xyzz, -r3.xyzz&lt;br /&gt;
 dp4	r6.x, v0, c0&lt;br /&gt;
 dp3	r2.w, r2.xyzz, r2.xyzz&lt;br /&gt;
 +mov	oT0, v2&lt;br /&gt;
 dp4	r6.y, v0, c1&lt;br /&gt;
 dp4	r6.z, v0, c2&lt;br /&gt;
 +rsq	r1.w, r2.w&lt;br /&gt;
 dp4	oPos.w, v0, c3&lt;br /&gt;
 mul	r2.xyz, r2.xyzz, r1.w	; r2: view vector&lt;br /&gt;
 +mov	oPos.xyz, r6&lt;br /&gt;
mov	r5.xyz, c28.xyzz&lt;br /&gt;
+rcc	r1.x, r12.w&lt;br /&gt;
 add	r4.xyz, r2.xyzz, c13.xyzz&lt;br /&gt;
 mul	oPos.xyz, r12.xyzz, c-38.xyzz&lt;br /&gt;
 dp3	r4.w, r4.xyzz, r4.xyzz&lt;br /&gt;
+mov	oFog.xyz, c26.xyzz&lt;br /&gt;
mad	oD0.xyz, r5.xyzz, c29.xyzz, c29.xyzz&lt;br /&gt;
 rsq	r4.w, r4.w&lt;br /&gt;
 mad	oPos.xyz, r12.xyzz, r1.x, c-37.xyzz&lt;br /&gt;
 mul	r5.xyz, r4.xyzz, r4.w&lt;br /&gt;
 mad	oD1.xyz, r5.xyzz, c29.xyzz, c29.xyzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct _D3DPixelShaderDef&lt;br /&gt;
{&lt;br /&gt;
   DWORD    PSAlphaInputs[8];          // Alpha inputs for each stage&lt;br /&gt;
	00000000&lt;br /&gt;
	00000000&lt;br /&gt;
	00000000&lt;br /&gt;
	cdc81010&lt;br /&gt;
   DWORD    PSFinalCombinerInputsABCD; // Final combiner inputs&lt;br /&gt;
	130f0000&lt;br /&gt;
   DWORD    PSFinalCombinerInputsEFG;  // Final combiner inputs (continued)&lt;br /&gt;
	0d081c80&lt;br /&gt;
   DWORD    PSConstant0[8];            // C0 for each stage&lt;br /&gt;
   DWORD    PSConstant1[8];            // C1 for each stage&lt;br /&gt;
  DWORD    PSAlphaOutputs[8];         // Alpha output for each stage&lt;br /&gt;
	00000000&lt;br /&gt;
	00000000&lt;br /&gt;
	00000000&lt;br /&gt;
	000000c0&lt;br /&gt;
   DWORD    PSRGBInputs[8];            // RGB inputs for each stage&lt;br /&gt;
	44450000&lt;br /&gt;
		PS_REGISTER_V0&lt;br /&gt;
		PS_INPUTMAPPING_EXPAND_NORMAL&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_V1&lt;br /&gt;
		PS_INPUTMAPPING_EXPAND_NORMAL&lt;br /&gt;
	cdcd0000&lt;br /&gt;
		PS_REGISTER_R1&lt;br /&gt;
		PS_INPUTMAPPING_SIGNED_IDENTITY&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_R1&lt;br /&gt;
		PS_INPUTMAPPING_SIGNED_IDENTITY&lt;br /&gt;
	cdcd0000&lt;br /&gt;
	cdcd0000&lt;br /&gt;
   DWORD    PSCompareMode;             // Compare modes for clipplane texture mode&lt;br /&gt;
   DWORD    PSFinalCombinerConstant0;  // C0 in final combiner&lt;br /&gt;
   DWORD    PSFinalCombinerConstant1;  // C1 in final combiner&lt;br /&gt;
   DWORD    PSRGBOutputs[8];           // Stage 0 RGB outputs&lt;br /&gt;
	000020d0&lt;br /&gt;
		PS_REGISTER_R1&lt;br /&gt;
		PS_COMBINEROUTPUT_AB_DOT_PRODUCT&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_ZERO&lt;br /&gt;
	000000d0&lt;br /&gt;
		PS_REGISTER_R1&lt;br /&gt;
		PS_COMBINEROUTPUT_AB_MULTIPLY&lt;br /&gt;
	000000d0&lt;br /&gt;
	000000d0&lt;br /&gt;
   DWORD    PSCombinerCount;           // Active combiner count (Stages 0-7)&lt;br /&gt;
	00011104&lt;br /&gt;
		4&lt;br /&gt;
		PS_COMBINERCOUNT_MUX_MSB&lt;br /&gt;
		PS_COMBINERCOUNT_UNIQUE_C0&lt;br /&gt;
		PS_COMBINERCOUNT_UNIQUE_C1&lt;br /&gt;
   DWORD    PSTextureModes;            // Texture addressing modes&lt;br /&gt;
	00000001&lt;br /&gt;
		PS_TEXTUREMODES_PROJECT2D&lt;br /&gt;
   DWORD    PSDotMapping;              // Input mapping for dot product modes&lt;br /&gt;
   DWORD    PSInputTexture;            // Texture source for some texture modes&lt;br /&gt;
   DWORD    PSC0Mapping;               // Mapping of c0 regs to D3D constants&lt;br /&gt;
   DWORD    PSC1Mapping;               // Mapping of c1 regs to D3D constants&lt;br /&gt;
   DWORD    PSFinalCombinerConstants;  // Final combiner constant mapping&lt;br /&gt;
} D3DPIXELSHADERDEF;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== San Andreas Car Shaders ===&lt;br /&gt;
&lt;br /&gt;
These shaders are picked depending on the following flags:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1		default&lt;br /&gt;
2		refl &amp;amp;&amp;amp; !spec &amp;amp;&amp;amp; lit&lt;br /&gt;
3		env &amp;amp;&amp;amp; !lit&lt;br /&gt;
		env &amp;amp;&amp;amp; !spec &amp;amp;&amp;amp; lit&lt;br /&gt;
4		spec &amp;amp;&amp;amp; lit&lt;br /&gt;
&lt;br /&gt;
5		refl &amp;amp;&amp;amp; spec &amp;amp;&amp;amp; lit&lt;br /&gt;
6		env &amp;amp;&amp;amp; spec &amp;amp;&amp;amp; lit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Shader 1 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; c0-3	matrix&lt;br /&gt;
; c4-6	world/normal matrix&lt;br /&gt;
; c13	direct color&lt;br /&gt;
; c14	0.7 0.7 0.7 1.0&lt;br /&gt;
; c15	ambient color&lt;br /&gt;
; c16	light direction&lt;br /&gt;
; c20	diff mat&lt;br /&gt;
; c21	amb mat&lt;br /&gt;
; c22	spec mat&lt;br /&gt;
; c32	0, 1, 0.5, 2&lt;br /&gt;
; c33	0.3 0.7 0.1 0.01&lt;br /&gt;
&lt;br /&gt;
 dp4	oPos.x, v0, c0&lt;br /&gt;
 dp4	oPos.y, v0, c1&lt;br /&gt;
 dp4	oPos.z, v0, c2&lt;br /&gt;
 dp4	oPos.w, v0, c3&lt;br /&gt;
 dp3	r0.y, v1, c5&lt;br /&gt;
 dp3	r0.x, v1, c4&lt;br /&gt;
 +mov	oFog.x, r12.w&lt;br /&gt;
 dp3	r0.z, v1, c6&lt;br /&gt;
mov	r0.w, c20&lt;br /&gt;
 +mov	oT0, v2&lt;br /&gt;
 mov	r2, c15&lt;br /&gt;
 dp3	r0.xyz, r0, -c16&lt;br /&gt;
 mul	oPos.xyz, r12, c-38&lt;br /&gt;
+rcc	r1.x, r12.w&lt;br /&gt;
 max	r0.xyz, r0.xyzz, c32.x&lt;br /&gt;
 min	r0.xyz, r0.xyzz, c32.y&lt;br /&gt;
 mul	r0.xyz, r0, c13&lt;br /&gt;
 mul	r0.xyz, r0, c20&lt;br /&gt;
 mad	oD0, r2, c21, r0&lt;br /&gt;
 mad	oPos.xyz, r12, r1.x, c-37&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Shader 2 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; v0	position&lt;br /&gt;
; v1	normal&lt;br /&gt;
; v2	tex coord&lt;br /&gt;
; c0-3	matrix&lt;br /&gt;
; c4-6	world/normal matrix&lt;br /&gt;
; c12	eye&lt;br /&gt;
; c13	direct color&lt;br /&gt;
; c14	0.7 0.7 0.7 1.0&lt;br /&gt;
; c15	ambient color&lt;br /&gt;
; c16	light direction&lt;br /&gt;
; c20	diff mat&lt;br /&gt;
; c21	amb mat&lt;br /&gt;
; c22	spec mat&lt;br /&gt;
; c32	0, 1, 0.5, 2&lt;br /&gt;
; c33	0.3 0.7 0.1 0.01&lt;br /&gt;
&lt;br /&gt;
 dp3	r0.x, v1.xyzz, c4.xyzz&lt;br /&gt;
 dp3	r0.y, v1.xyzz, c5.xyzz&lt;br /&gt;
 dp3	r0.z, v1.xyzz, c6.xyzz&lt;br /&gt;
dp4	oPos.w, v0, c3&lt;br /&gt;
 dp3	r11.x, r0.xyzz, c8.xyzz&lt;br /&gt;
+mov	oT0, v2&lt;br /&gt;
 dp3	r11.y, r0.xyzz, c9.xyzz&lt;br /&gt;
+rcc	r1.x, r12.w&lt;br /&gt;
 dp3	r11.z, r0.xyzz, c10.xyzz&lt;br /&gt;
+mov	oFog.x, r12.w&lt;br /&gt;
dp3	r0.w, r0.xyzz, -c16.xyzz&lt;br /&gt;
 dp3	r11.w, r11.xyzz, r11.xyzz&lt;br /&gt;
max	r0.x, r0.w, c32.x&lt;br /&gt;
min	r0.x, r0.x, c32.y&lt;br /&gt;
 +rsq	r1.w, r11.w&lt;br /&gt;
 mov	r10.y, c32.y&lt;br /&gt;
 mul	r10.zw, r11.yyyx, r1.w&lt;br /&gt;
dp4	oPos.x, v0, c0&lt;br /&gt;
dp4	oPos.y, v0, c1&lt;br /&gt;
dp4	oPos.z, v0, c2&lt;br /&gt;
mul	r0.xyz, r0.x, c13.xyzz&lt;br /&gt;
mul	r0.xyz, r0.xyzz, c20.xyzz&lt;br /&gt;
mov	r0.w, c20.w&lt;br /&gt;
mov	r2, c15&lt;br /&gt;
 dp3	r11.x, r10.wzyy, c24.xyzz&lt;br /&gt;
 dp3	r11.y, r10.wzyy, c25.xyzz&lt;br /&gt;
mov	r11.z, c32.y&lt;br /&gt;
mul	oPos.xyz, r12.xyzz, c-38.xyzz&lt;br /&gt;
mad	oD0, r2, c21, r0&lt;br /&gt;
mov	oT1, r11.xyzz&lt;br /&gt;
mad	oPos.xyz, r12.xyzz, r1.x, c-37.xyzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Shader 3 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; v0	position&lt;br /&gt;
; v1	normal&lt;br /&gt;
; v2	tex coord&lt;br /&gt;
; c0-3	matrix&lt;br /&gt;
; c4-6	world/normal matrix&lt;br /&gt;
; c12	eye&lt;br /&gt;
; c13	direct color&lt;br /&gt;
; c14	0.7 0.7 0.7 1.0&lt;br /&gt;
; c15	ambient color&lt;br /&gt;
; c16	light direction&lt;br /&gt;
; c20	diff mat&lt;br /&gt;
; c21	amb mat&lt;br /&gt;
; c22	spec mat&lt;br /&gt;
; c32	0, 1, 0.5, 2&lt;br /&gt;
; c33	0.3 0.7 0.1 0.01&lt;br /&gt;
&lt;br /&gt;
 dp3	r0.x, v1.xyzz, c4.xyzz&lt;br /&gt;
 dp3	r0.y, v1.xyzz, c5.xyzz&lt;br /&gt;
 dp3	r0.z, v1.xyzz, c6.xyzz&lt;br /&gt;
 dp4	oPos.w, v0, c3&lt;br /&gt;
 dp3	r0.w, r0.xyzz, -c16.xyzz&lt;br /&gt;
 +mov	oT0, v2&lt;br /&gt;
mov	r11.xz, v3.xxyy&lt;br /&gt;
+rcc	r1.x, r12.w&lt;br /&gt;
 max	r0.x, r0.w, c32.x&lt;br /&gt;
 +mov	oFog.x, r12.w&lt;br /&gt;
mov	r11.y, c32.y&lt;br /&gt;
 min	r0.x, r0.x, c32.y&lt;br /&gt;
 dp4	oPos.x, v0, c0&lt;br /&gt;
 dp4	oPos.y, v0, c1&lt;br /&gt;
 dp4	oPos.z, v0, c2&lt;br /&gt;
 mul	r0.xyz, r0.x, c13.xyzz&lt;br /&gt;
 mul	r0.xyz, r0.xyzz, c20.xyzz&lt;br /&gt;
 mov	r0.w, c20.w&lt;br /&gt;
 mov	r2, c15&lt;br /&gt;
dp3	r10.w, r11.xzyy, c24.xyzz&lt;br /&gt;
dp3	r10.y, r11.xzyy, c25.xyzz&lt;br /&gt;
mov	r10.z, v3.w&lt;br /&gt;
 mul	oPos.xyz, r12.xyzz, c-38.xyzz&lt;br /&gt;
 mad	oD0, r2, c21, r0&lt;br /&gt;
mov	oT1, r10.wyzz&lt;br /&gt;
 mad	oPos.xyz, r12.xyzz, r1.x, c-37.xyzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Shader 4 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; v0	position&lt;br /&gt;
; v1	normal&lt;br /&gt;
; v2	tex coord&lt;br /&gt;
; c0-3	matrix&lt;br /&gt;
; c4-6	world/normal matrix&lt;br /&gt;
; c12	eye&lt;br /&gt;
; c13	direct color&lt;br /&gt;
; c14	0.7 0.7 0.7 1.0&lt;br /&gt;
; c15	ambient color&lt;br /&gt;
; c16	light direction&lt;br /&gt;
; c20	diff mat&lt;br /&gt;
; c21	amb mat&lt;br /&gt;
; c22	spec mat&lt;br /&gt;
; c32	0, 1, 0.5, 2&lt;br /&gt;
; c33	0.3 0.7 0.1 0.01&lt;br /&gt;
&lt;br /&gt;
 dp4	r10.x, v0, c4&lt;br /&gt;
 dp4	r10.y, v0, c5&lt;br /&gt;
 dp4	r10.z, v0, c6&lt;br /&gt;
 dp3	r11.x, v1.xyzz, c4.xyzz&lt;br /&gt;
 add	r0.xyz, -r10.xyzz, c12.xyzz&lt;br /&gt;
 dp3	r11.y, v1.xyzz, c5.xyzz&lt;br /&gt;
 dp3	r11.w, r0.xyzz, r0.xyzz&lt;br /&gt;
 +mov	oD0.w, c20.w&lt;br /&gt;
 dp3	r11.z, v1.xyzz, c6.xyzz		; r11.xyz world normal&lt;br /&gt;
 dp4	oPos.w, v0, c3&lt;br /&gt;
 +rsq	r1.x, r11.w&lt;br /&gt;
 dp3	r4.x, r11.xyzz, -c16.xyzz	; diffuse factor&lt;br /&gt;
 +mov	oT0, v2&lt;br /&gt;
 mul	r0.xyz, r0.xyzz, r1.x		; r0.xyz view vector&lt;br /&gt;
+rcc	r1.y, r12.w&lt;br /&gt;
 mul	r4.xyz, r4.x, c13.xyzz&lt;br /&gt;
 +mov	oFog.x, r12.w&lt;br /&gt;
 add	r2.xyz, r0.xyzz, -c16.xyzz&lt;br /&gt;
 mul	r4.xyz, r4.xyzz, c20.xyzz&lt;br /&gt;
 dp3	r11.w, r2.xyzz, r2.xyzz&lt;br /&gt;
 mul	r4.xyz, r4.xyzz, c32.z&lt;br /&gt;
 dp4	oPos.x, v0, c0&lt;br /&gt;
 +rsq	r1.x, r11.w&lt;br /&gt;
 dp4	oPos.y, v0, c1&lt;br /&gt;
 mul	r2.xyz, r2.xyzz, r1.x		; r2.xyz spec vector&lt;br /&gt;
 dp3	r3.x, r11.xyzz, r2.xyzz&lt;br /&gt;
 dp4	oPos.z, v0, c2&lt;br /&gt;
 mul	r3.x, r3.x, r3.x&lt;br /&gt;
 mul	r3.x, r3.x, r3.x&lt;br /&gt;
 mul	r3.x, r3.x, r3.x&lt;br /&gt;
 mul	r3.x, r3.x, r3.x&lt;br /&gt;
 mul	r3.xyz, r3.x, c14.xyzz&lt;br /&gt;
 mul	r3.xyz, r3.xyzz, c22.xyzz&lt;br /&gt;
 mul	r3.xyz, r3.xyzz, c32.z&lt;br /&gt;
 add	r0.xyz, r4.xyzz, r3.xyzz&lt;br /&gt;
 mov	r2.xyz, c15.xyzz&lt;br /&gt;
 mad	r0.xyz, r2.xyzz, c21.xyzz, r0.xyzz&lt;br /&gt;
 mul	oPos.xyz, r12.xyzz, c-38.xyzz&lt;br /&gt;
 mov	oD0.xyz, r0&lt;br /&gt;
 mad	oPos.xyz, r12.xyzz, r1.y, c-37.xyzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Shader 5 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dp3	r11.x, v1.xyzz, c4.xyzz&lt;br /&gt;
dp3	r11.y, v1.xyzz, c5.xyzz&lt;br /&gt;
dp3	r11.z, v1.xyzz, c6.xyzz&lt;br /&gt;
dp4	r10.x, v0, c4&lt;br /&gt;
dp4	r10.y, v0, c5&lt;br /&gt;
dp4	r10.z, v0, c6&lt;br /&gt;
dp3	r4.x, r11.xyzz, -c16.xyzz&lt;br /&gt;
+mov	oT0, v2&lt;br /&gt;
add	r0.xyz, -r10.xyzz, c12.xyzz&lt;br /&gt;
dp3	r10.w, r11.xyzz, c8.xyzz&lt;br /&gt;
dp3	r11.w, r0.xyzz, r0.xyzz&lt;br /&gt;
+mov	oD0.w, c20.w&lt;br /&gt;
dp3	r10.y, r11.xyzz, c9.xyzz&lt;br /&gt;
mul	r4.xyz, r4.x, c13.xyzz&lt;br /&gt;
+rsq	r1.x, r11.w&lt;br /&gt;
dp3	r10.z, r11.xyzz, c10.xyzz&lt;br /&gt;
mul	r0.xyz, r0.xyzz, r1.x&lt;br /&gt;
add	r2.xyz, r0.xyzz, -c16.xyzz&lt;br /&gt;
dp3	r11.w, r10.wyzz, r10.wyzz&lt;br /&gt;
dp3	r10.x, r2.xyzz, r2.xyzz&lt;br /&gt;
mul	r4.xyz, r4.xyzz, c20.xyzz&lt;br /&gt;
+rsq	r1.w, r11.w&lt;br /&gt;
dp4	oPos.w, v0, c3&lt;br /&gt;
+rsq	r1.x, r10.x&lt;br /&gt;
mul	r4.xyz, r4.xyzz, c32.z&lt;br /&gt;
mul	r2.xyz, r2.xyzz, r1.x&lt;br /&gt;
+rcc	r1.y, r12.w&lt;br /&gt;
mul	r10.zw, r10.yyyw, r1.w&lt;br /&gt;
+mov	oFog.x, r12.w&lt;br /&gt;
dp3	r3.x, r11.xyzz, r2.xyzz&lt;br /&gt;
mov	r10.y, c32.y&lt;br /&gt;
mul	r3.x, r3.x, r3.x&lt;br /&gt;
mul	r3.x, r3.x, r3.x&lt;br /&gt;
mul	r3.x, r3.x, r3.x&lt;br /&gt;
mul	r3.x, r3.x, r3.x&lt;br /&gt;
mul	r3.xyz, r3.x, c14.xyzz&lt;br /&gt;
mul	r3.xyz, r3.xyzz, c22.xyzz&lt;br /&gt;
mul	r3.xyz, r3.xyzz, c32.z&lt;br /&gt;
dp4	oPos.x, v0, c0&lt;br /&gt;
dp4	oPos.y, v0, c1&lt;br /&gt;
dp4	oPos.z, v0, c2&lt;br /&gt;
add	r0.xyz, r4.xyzz, r3.xyzz&lt;br /&gt;
mov	r2.xyz, c15.xyzz&lt;br /&gt;
mad	r0.xyz, r2.xyzz, c21.xyzz, r0.xyzz&lt;br /&gt;
dp3	r11.w, r10.wzyy, c24.xyzz&lt;br /&gt;
dp3	r11.y, r10.wzyy, c25.xyzz&lt;br /&gt;
+mov	oD0.xyz, r0&lt;br /&gt;
mov	r11.z, c32.y&lt;br /&gt;
mul	oPos.xyz, r12.xyzz, c-38.xyzz&lt;br /&gt;
mov	oT1, r11.wyzz&lt;br /&gt;
mad	oPos.xyz, r12.xyzz, r1.y, c-37.xyzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Shader 6 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; v0	position&lt;br /&gt;
; v1	normal&lt;br /&gt;
; v2	tex coord 1&lt;br /&gt;
; v3	tex coord 2&lt;br /&gt;
; c0-3	matrix&lt;br /&gt;
; c4-6	world/normal matrix&lt;br /&gt;
; c12	eye&lt;br /&gt;
; c13	direct color&lt;br /&gt;
; c14	0.7 0.7 0.7 1.0&lt;br /&gt;
; c15	ambient color&lt;br /&gt;
; c16	light direction&lt;br /&gt;
; c20	diff mat&lt;br /&gt;
; c21	amb mat&lt;br /&gt;
; c22	spec mat&lt;br /&gt;
; c32	0, 1, 0.5, 2&lt;br /&gt;
; c33	0.3 0.7 0.1 0.01&lt;br /&gt;
&lt;br /&gt;
 dp4	r10.x, v0, c4&lt;br /&gt;
 dp4	r10.y, v0, c5&lt;br /&gt;
 dp4	r10.z, v0, c6&lt;br /&gt;
 dp3	r11.x, v1.xyzz, c4.xyzz&lt;br /&gt;
 add	r0.xyz, -r10.xyzz, c12.xyzz&lt;br /&gt;
 dp3	r11.y, v1.xyzz, c5.xyzz&lt;br /&gt;
 dp3	r11.w, r0.xyzz, r0.xyzz&lt;br /&gt;
 +mov	oD0.w, c20.w&lt;br /&gt;
 dp3	r11.z, v1.xyzz, c6.xyzz		; r11 normal&lt;br /&gt;
 dp4	oPos.w, v0, c3&lt;br /&gt;
 +rsq	r1.x, r11.w&lt;br /&gt;
 dp3	r4.x, r11.xyzz, -c16.xyzz&lt;br /&gt;
 +mov	oT0, v2&lt;br /&gt;
 mul	r0.xyz, r0.xyzz, r1.x		; r0 view vector&lt;br /&gt;
 +rcc	r1.y, r12.w&lt;br /&gt;
 mul	r4.xyz, r4.x, c13.xyzz&lt;br /&gt;
 +mov	oFog.x, r12.w&lt;br /&gt;
 add	r2.xyz, r0.xyzz, -c16.xyzz&lt;br /&gt;
 mul	r4.xyz, r4.xyzz, c20.xyzz&lt;br /&gt;
 dp3	r11.w, r2.xyzz, r2.xyzz&lt;br /&gt;
 mul	r4.xyz, r4.xyzz, c32.z		; r4 diffuse term&lt;br /&gt;
mov	r10.zw, v3.yyyx&lt;br /&gt;
 +rsq	r1.x, r11.w&lt;br /&gt;
mov	r10.y, c32.y&lt;br /&gt;
 mul	r2.xyz, r2.xyzz, r1.x&lt;br /&gt;
 dp3	r3.x, r11.xyzz, r2.xyzz&lt;br /&gt;
 dp4	oPos.x, v0, c0&lt;br /&gt;
 mul	r3.x, r3.x, r3.x&lt;br /&gt;
 mul	r3.x, r3.x, r3.x&lt;br /&gt;
 mul	r3.x, r3.x, r3.x&lt;br /&gt;
 mul	r3.x, r3.x, r3.x&lt;br /&gt;
 mul	r3.xyz, r3.x, c14.xyzz&lt;br /&gt;
 mul	r3.xyz, r3.xyzz, c22.xyzz&lt;br /&gt;
 mul	r3.xyz, r3.xyzz, c32.z		; r3 specular term&lt;br /&gt;
 dp4	oPos.y, v0, c1&lt;br /&gt;
 dp4	oPos.z, v0, c2&lt;br /&gt;
 add	r0.xyz, r4.xyzz, r3.xyzz&lt;br /&gt;
 mov	r2.xyz, c15.xyzz&lt;br /&gt;
 mad	r0.xyz, r2.xyzz, c21.xyzz, r0.xyzz&lt;br /&gt;
dp3	r11.w, r10.wzyy, c24.xyzz&lt;br /&gt;
dp3	r11.y, r10.wzyy, c25.xyzz&lt;br /&gt;
 +mov	oD0.xyz, r0&lt;br /&gt;
mov	r11.z, v3.w&lt;br /&gt;
 mul	oPos.xyz, r12.xyzz, c-38.xyzz&lt;br /&gt;
mov	oT1, r11.wyzz&lt;br /&gt;
 mad	oPos.xyz, r12.xyzz, r1.y, c-37.xyzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shader used for grass ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dp4	oPos.w, v0, c3&lt;br /&gt;
dp4	oPos.x, v0, c0&lt;br /&gt;
dp4	oPos.y, v0, c1&lt;br /&gt;
+rcc	r1.x, r12.w&lt;br /&gt;
dp4	oPos.z, v0, c2&lt;br /&gt;
mov	oFog.x, r12.w&lt;br /&gt;
mul	oPos.xyz, r12.xyzz, c-38.xyzz&lt;br /&gt;
mov	oT0, v1&lt;br /&gt;
mov	oD0, c20&lt;br /&gt;
mad	oPos.xyz, r12.xyzz, r1.x, c-37.xyzz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pixelshader used for world objects (?) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct _D3DPixelShaderDef&lt;br /&gt;
{&lt;br /&gt;
   DWORD    PSAlphaInputs[8];          // Alpha inputs for each stage&lt;br /&gt;
	14181010&lt;br /&gt;
		PS_REGISTER_V0&lt;br /&gt;
		PS_INPUTMAPPING_UNSIGNED_IDENTITY&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_T0&lt;br /&gt;
		PS_INPUTMAPPING_UNSIGNED_IDENTITY&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_ZERO&lt;br /&gt;
		PS_INPUTMAPPING_UNSIGNED_IDENTITY&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_ZERO&lt;br /&gt;
		PS_INPUTMAPPING_UNSIGNED_IDENTITY&lt;br /&gt;
	dcd11010&lt;br /&gt;
		PS_REGISTER_R0&lt;br /&gt;
		PS_INPUTMAPPING_SIGNED_IDENTITY&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_C0&lt;br /&gt;
		PS_INPUTMAPPING_SIGNED_IDENTITY&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_ZERO&lt;br /&gt;
		PS_INPUTMAPPING_UNSIGNED_IDENTITY&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_ZERO&lt;br /&gt;
		PS_INPUTMAPPING_UNSIGNED_IDENTITY&lt;br /&gt;
   DWORD    PSFinalCombinerInputsABCD; // Final combiner inputs&lt;br /&gt;
	130c0300&lt;br /&gt;
		PS_REGISTER_FOG&lt;br /&gt;
		PS_CHANNEL_ALPHA&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_R0&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_FOG&lt;br /&gt;
   DWORD    PSFinalCombinerInputsEFG;  // Final combiner inputs (continued)&lt;br /&gt;
	00001c80&lt;br /&gt;
		PS_REGISTER_R0&lt;br /&gt;
		PS_CHANNEL_ALPHA&lt;br /&gt;
&lt;br /&gt;
		PS_FINALCOMBINERSETTING_CLAMP_SUM&lt;br /&gt;
   DWORD    PSConstant0[8];            // C0 for each stage&lt;br /&gt;
	ffffffff&lt;br /&gt;
	ffffffff&lt;br /&gt;
   DWORD    PSConstant1[8];            // C1 for each stage&lt;br /&gt;
   DWORD    PSAlphaOutputs[8];         // Alpha output for each stage&lt;br /&gt;
	000000c0&lt;br /&gt;
		PS_REGISTER_DISCARD&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_R0&lt;br /&gt;
	000000c0&lt;br /&gt;
		PS_REGISTER_DISCARD&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_R0&lt;br /&gt;
   DWORD    PSRGBInputs[8];            // RGB inputs for each stage&lt;br /&gt;
	0804c149&lt;br /&gt;
		PS_REGISTER_T0&lt;br /&gt;
		PS_INPUTMAPPING_UNSIGNED_IDENTITY&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_V0&lt;br /&gt;
		PS_INPUTMAPPING_UNSIGNED_IDENTITY&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_C0&lt;br /&gt;
		PS_INPUTMAPPING_SIGNED_IDENTITY&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_T1&lt;br /&gt;
		PS_INPUTMAPPING_EXPAND_NORMAL&lt;br /&gt;
	cdcc20cc&lt;br /&gt;
		PS_REGISTER_R1&lt;br /&gt;
		PS_INPUTMAPPING_SIGNED_IDENTITY&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_R0&lt;br /&gt;
		PS_INPUTMAPPING_SIGNED_IDENTITY&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_ZERO&lt;br /&gt;
		PS_INPUTMAPPING_UNSIGNED_INVERT&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_R0&lt;br /&gt;
		PS_INPUTMAPPING_SIGNED_IDENTITY&lt;br /&gt;
   DWORD    PSCompareMode;             // Compare modes for clipplane texture mode&lt;br /&gt;
   DWORD    PSFinalCombinerConstant0;  // C0 in final combiner&lt;br /&gt;
   DWORD    PSFinalCombinerConstant1;  // C1 in final combiner&lt;br /&gt;
   DWORD    PSRGBOutputs[8];           // Stage 0 RGB outputs&lt;br /&gt;
	000000cd&lt;br /&gt;
		PS_REGISTER_R1&lt;br /&gt;
		PS_COMBINEROUTPUT_CD_MULTIPLY&lt;br /&gt;
&lt;br /&gt;
		PS_REGISTER_R0&lt;br /&gt;
		PS_COMBINEROUTPUT_AB_MULTIPLY&lt;br /&gt;
	00000c00&lt;br /&gt;
		PS_REGISTER_R0&lt;br /&gt;
		PS_COMBINEROUTPUT_AB_CD_SUM&lt;br /&gt;
   DWORD    PSCombinerCount;           // Active combiner count (Stages 0-7)&lt;br /&gt;
	00011102&lt;br /&gt;
		2&lt;br /&gt;
		PS_COMBINERCOUNT_MUX_MSB&lt;br /&gt;
		PS_COMBINERCOUNT_UNIQUE_C0&lt;br /&gt;
		PS_COMBINERCOUNT_UNIQUE_C1&lt;br /&gt;
   DWORD    PSTextureModes;            // Texture addressing modes&lt;br /&gt;
	00000021&lt;br /&gt;
		PS_TEXTUREMODES_PROJECT2D&lt;br /&gt;
		PS_TEXTUREMODES_PROJECT2D&lt;br /&gt;
   DWORD    PSDotMapping;              // Input mapping for dot product modes&lt;br /&gt;
   DWORD    PSInputTexture;            // Texture source for some texture modes&lt;br /&gt;
   DWORD    PSC0Mapping;               // Mapping of c0 regs to D3D constants&lt;br /&gt;
	ffffff00&lt;br /&gt;
   DWORD    PSC1Mapping;               // Mapping of c1 regs to D3D constants&lt;br /&gt;
	ffffffff&lt;br /&gt;
   DWORD    PSFinalCombinerConstants;  // Final combiner constant mapping&lt;br /&gt;
	000001ff&lt;br /&gt;
} D3DPIXELSHADERDEF;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Xbox vertex formats ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000XXXC 44443333 2222111 NNNNVVVV&lt;br /&gt;
&lt;br /&gt;
V N:&lt;br /&gt;
	1	0x34	D3DVSDT_PBYTE3&lt;br /&gt;
	2	0x35	D3DVSDT_SHORT3&lt;br /&gt;
	3	0x31	D3DVSDT_NORMSHORT3&lt;br /&gt;
	4	0x16	D3DVSDT_NORMPACKED3		default normal&lt;br /&gt;
	5	0x32	D3DVSDT_FLOAT3			default position&lt;br /&gt;
&lt;br /&gt;
C:&lt;br /&gt;
		0x40	D3DVSDT_D3DCOLOR&lt;br /&gt;
T1-4:&lt;br /&gt;
	1	0x24	D3DVSDT_PBYTE2&lt;br /&gt;
	2	0x25	D3DVSDT_SHORT2&lt;br /&gt;
	3	0x21	D3DVSDT_NORMSHORT2&lt;br /&gt;
	4	0x16	D3DVSDT_NORMPACKED3&lt;br /&gt;
	5	0x22	D3DVSDT_FLOAT2			default&lt;br /&gt;
&lt;br /&gt;
X:	tangent? XXX is index of tex coord set - 1 that has the data&lt;br /&gt;
	anything	0x16	D3DVSDT_NORMPACKED3&lt;br /&gt;
				0x16	D3DVSDT_NORMPACKED3&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
	0	position&lt;br /&gt;
	2	normal&lt;br /&gt;
	3	color&lt;br /&gt;
	9-C	tex coords&lt;br /&gt;
&lt;br /&gt;
skin:&lt;br /&gt;
	stream 0&lt;br /&gt;
	0	position&lt;br /&gt;
	3	normal&lt;br /&gt;
	4	color&lt;br /&gt;
	5-8	tex coords&lt;br /&gt;
	stream 1&lt;br /&gt;
	1	weights		D3DVSDT_PBYTEn&lt;br /&gt;
	2	indices		D3DVSDT_SHORTn&lt;br /&gt;
&lt;br /&gt;
normmap:&lt;br /&gt;
	40320000	; vertex&lt;br /&gt;
	40160001	; normal&lt;br /&gt;
	40220002	; tex coords&lt;br /&gt;
	40160003	; ?&lt;br /&gt;
	40160004	; ?&lt;br /&gt;
&lt;br /&gt;
	40320000	; vertex&lt;br /&gt;
	40160001	; normal&lt;br /&gt;
	40400002	; color&lt;br /&gt;
	40220003	; tex coords&lt;br /&gt;
	40160004	; ?&lt;br /&gt;
	40160005	; ?&lt;br /&gt;
&lt;br /&gt;
20000000h&lt;br /&gt;
40320000h ; vertex		5&lt;br /&gt;
40160001h ; normal		4&lt;br /&gt;
40220002h ; tex coord&lt;br /&gt;
40400004h ; color		5&lt;br /&gt;
0FFFFFFFFh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>JayFoxRox</name></author>	</entry>

	</feed>