Grand Theft Auto: San Andreas

From xboxdevwiki
Jump to: navigation, search

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 and Grand Theft Auto: Vice City.

At least some parts of the games source code have been leaked into the public. The source code was illegally offered for sale in the past.

Reverse engineering by aap

aap has reverse engineered a lot for skygfx. 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

Shader used for cars

Shader 1

;	c14		0.0 0.5 1.0 2.0
;	c26		specular
;	c27		spec, fresnel, 0.6, power

 dp4	r3.x, v0, c4
 dp4	r3.y, v0, c5
 dp4	r3.z, v0, c6
 add	r2.xyz, c12.xyzz, -r3.xyzz
 dp3	r0.x, v1.xyzz, c4.xyzz
 dp3	r2.w, r2.xyzz, r2.xyzz
 +mov	oD0.w, c14.z
 dp3	r0.y, v1.xyzz, c5.xyzz
 dp3	r0.z, v1.xyzz, c6.xyzz
 +rsq	r1.w, r2.w
 mov	r5.w, c14.w
 mul	r2.xyz, r2.xyzz, r1.w		; r2: normalized view vector
 dp3	r0.w, r0.xyzz, r0.xyzz
 add	r4.xyz, r2.xyzz, -c13.xyzz
 mov	r11.w, c27.w
 +rsq	r1.w, r0.w
 dp3	r4.w, r4.xyzz, r4.xyzz
 mul	r0.xyz, r0.xyzz, r1.w		; r0: normalized world normal
 add	r10.xyz, r2.xyzz, -c18.xyzz
 mul	r11.z, c27.w, r5.w
 +rsq	r1.w, r4.w
 dp3	r4.w, r10.xyzz, r10.xyzz
 add	r9.yzw, r2.yyzx, -c19.yyzx
 mul	r4.xyz, r4.xyzz, r1.w
 dp3	r4.w, r9.wyzz, r9.wyzz
 +rsq	r1.w, r4.w
 add	r8.xzw, r2.yyzx, -c20.yyzx
 dp3	r10.w, r4.xyzz, r0.xyzz
 mul	r4.xyz, r10.xyzz, r1.w
 +rsq	r1.x, r4.w
 dp3	r4.w, r8.wxzz, r8.wxzz
 add	r10.xyz, r2.xyzz, -c21.xyzz
 max	r11.x, r10.w, c14.x
 +rsq	r1.w, r4.w
 dp3	r10.w, r4.xyzz, r0.xyzz
 mul	r4.xyz, r9.wyzz, r1.x
 +lit	r1.z, r11.xxxw
 dp3	r4.w, r10.xyzz, r10.xyzz
 max	r11.y, r10.w, c14.x
 dp3	r11.x, r4.xyzz, r0.xyzz
 mul	r4.xyz, r8.wxzz, r1.w
 +rsq	r1.x, r4.w
 mul	r8.xyz, r1.z, c26.xyzz			; direct light
 mul	r11.w, c27.w, r5.w
 +lit	r1.z, r11.yyyz
 max	r11.y, r11.x, c14.x
 dp3	r11.x, r4.xyzz, r0.xyzz
 mul	r4.xyz, r10.xyzz, r1.x
 dp4	r6.y, v0, c0
 dp4	r6.z, v0, c1
 dp4	r6.x, v0, c2
 +dp4	oFog.x, v0, c2
 mad	r8.xyz, r1.z, c22.xyzz, r8.xyzz		; add extra 1
 mul	r11.w, c27.w, r5.w
 +lit	r1.z, r11.yyyw
 max	r11.y, r11.x, c14.x
 +mov	oPos.xyz, r6.yzxw
 dp3	r11.x, r4.xyzz, r0.xyzz
 dp4	oPos.w, v0, c3
 mad	r8.xyz, r1.z, c23.xyzz, r8.xyzz		; add extra 2
 mul	r11.w, c27.w, r5.w
 +lit	r1.z, r11.yyyw
 max	r11.y, r11.x, c14.x
+rcc	r1.x, r12.w
 mad	r8.xyz, r1.z, c24.xyzz, r8.xyzz		; add extra 3
mul	oPos.xyz, r12.xyzz, c-38.xyzz
 +lit	r1.z, r11.yyyw
 mad	oD0.xyz, r1.z, c25.xyzz, r8.xyzz	; add extra 4
mad	oPos.xyz, r12.xyzz, r1.x, c-37.xyzz


Shader 2

;	v0	vertex
;	v1	normal
;	v2	tex coord
;	c0 c1 c2 c3	worldviewproj matrix
;	c4 c5 c6	world matrix
;	c8 c9		texture matrix?
;	c12		eye position
;	c13		direct direction
;	c14		0.0 0.5 1.0 2.0
;	c15		ambient
;	c16		color
;	c17		direct color
;	c18 c19 c20 c21	extra directions
;	c22 c23 c24 c25	extra colors
;	c26		specular
;	c27		spec, fresnel, 0.6, power

 dp3	r0.x, v1.xyzz, c4.xyzz
 dp3	r0.y, v1.xyzz, c5.xyzz
 dp3	r0.z, v1.xyzz, c6.xyzz
 dp4	r3.x, v0, c4
 dp3	r0.w, r0.xyzz, r0.xyzz
 +mov	oT0.xy, v2.xyyy
 dp4	r3.y, v0, c5
 dp4	r3.z, v0, c6
 +rsq	r1.w, r0.w
 add	r2.xyz, c12.xyzz, -r3.xyzz
 mul	r0.xyz, r0.xyzz, r1.w		; r0.xyz: normalized world-normal
 dp3	r2.w, r2.xyzz, r2.xyzz
 dp3	r0.w, r0.xyzz, -c13.xyzz
 dp3	r11.w, r0.xyzz, -c18.xyzz
 +rsq	r1.w, r2.w
 max	r0.w, r0.w, c14.x
 mul	r2.xyz, r2.xyzz, r1.w		; r2: normalized world-view-vector
dp3	r7.x, r2.xyzz, r0.xyzz
 mul	r8.xyz, r0.w, c16.xyzz		; direct color
max	r5.x, r7.x, c14.x
 mov	r11.xyz, c16
 +mov	oD0.w, c16
 max	r0.w, r11.w, c14.x
 dp3	r11.w, r0.xyzz, -c19.xyzz
mul	r6.x, r7.x, c14.w
add	r5.x, c14.z, -r5.x
 mad	r8.xyz, c15.xyzz, r11.xyzz, r8.xyzz	; add ambient color
 mul	r6.yzw, r0.w, c22.yyzx
 max	r0.w, r11.w, c14.x
 dp3	r11.w, r0.xyzz, -c20.xyzz
mad	r11.xyz, r6.x, r0.xyzz, -r2.xyzz
mul	r6.x, r5.x, r5.x
 dp4	r10.y, v0, c0
 dp4	r10.z, v0, c1
 dp4	r10.x, v0, c2
 +dp4	oFog.x, v0, c2
 mad	r8.xyz, r6.wyzz, c16.xyzz, r8.xyzz	; add extra light 1
 mul	r6.yzw, r0.w, c23.yyzx
 +mov	oPos.xyz, r10.yzxw
 max	r0.w, r11.w, c14.x
 dp3	r0.x, r0.xyzz, -c21.xyzz
dp3	r11.x, r11.xyzz, c8.xyzz
mul	r6.x, r6.x, r6.x
mov	r11.w, c27.y
 dp4	oPos.w, v0, c3
 mad	r8.xyz, r6.wyzz, c16.xyzz, r8.xyzz	; add extra light 2
 mul	r6.yzw, r0.w, c24.yyzx
 +rcc	r1.x, r12.w
 max	r0.w, r0.x, c14.x
dp3	r11.y, r11.xyzz, c9.xyzz
mul	r5.x, r5.x, r6.x
add	r7.x, c14.z, -r11.w
 mad	r8.xyz, r6.wyzz, c16.xyzz, r8.xyzz	; add extra light 3
 mul	r6.xyz, r0.w, c25.xyzz
mul	r11.yw, r11.yyyx, c14.y
mad	r5.x, r7.x, r5.x, c27.y
mul	oPos.xyz, r12.xyzz, c-38.xyzz
 mad	oD0.xyz, r6.xyzz, c16.xyzz, r8.xyzz	; add extra light 4
add	oT1.xy, r11.wyyy, c14.y
mul	oD1, r5.x, c27.x
mad	oPos.xyz, r12.xyzz, r1.x, c-37.xyzz

Gloss shader

; v0 	vertex pos
; v2	tex coord
; c0-c3	matrix
; c4-c7	world matrix
; c12	eye position
; c13	light direction
; c26	pipeline data...
; c27	0, 0, 0, 8.0
; c28	0, 0, 1, 1
; c29	0.5, 0.5, 0.5, 0.5

 dp4	r3.x, v0, c4
 dp4	r3.y, v0, c5
 dp4	r3.z, v0, c6
 add	r2.xyz, c12.xyzz, -r3.xyzz
 dp4	r6.x, v0, c0
 dp3	r2.w, r2.xyzz, r2.xyzz
 +mov	oT0, v2
 dp4	r6.y, v0, c1
 dp4	r6.z, v0, c2
 +rsq	r1.w, r2.w
 dp4	oPos.w, v0, c3
 mul	r2.xyz, r2.xyzz, r1.w	; r2: view vector
 +mov	oPos.xyz, r6
mov	r5.xyz, c28.xyzz
+rcc	r1.x, r12.w
 add	r4.xyz, r2.xyzz, c13.xyzz
 mul	oPos.xyz, r12.xyzz, c-38.xyzz
 dp3	r4.w, r4.xyzz, r4.xyzz
+mov	oFog.xyz, c26.xyzz
mad	oD0.xyz, r5.xyzz, c29.xyzz, c29.xyzz
 rsq	r4.w, r4.w
 mad	oPos.xyz, r12.xyzz, r1.x, c-37.xyzz
 mul	r5.xyz, r4.xyzz, r4.w
 mad	oD1.xyz, r5.xyzz, c29.xyzz, c29.xyzz
typedef struct _D3DPixelShaderDef
{
   DWORD    PSAlphaInputs[8];          // Alpha inputs for each stage
	00000000
	00000000
	00000000
	cdc81010
   DWORD    PSFinalCombinerInputsABCD; // Final combiner inputs
	130f0000
   DWORD    PSFinalCombinerInputsEFG;  // Final combiner inputs (continued)
	0d081c80
   DWORD    PSConstant0[8];            // C0 for each stage
   DWORD    PSConstant1[8];            // C1 for each stage
  DWORD    PSAlphaOutputs[8];         // Alpha output for each stage
	00000000
	00000000
	00000000
	000000c0
   DWORD    PSRGBInputs[8];            // RGB inputs for each stage
	44450000
		PS_REGISTER_V0
		PS_INPUTMAPPING_EXPAND_NORMAL

		PS_REGISTER_V1
		PS_INPUTMAPPING_EXPAND_NORMAL
	cdcd0000
		PS_REGISTER_R1
		PS_INPUTMAPPING_SIGNED_IDENTITY

		PS_REGISTER_R1
		PS_INPUTMAPPING_SIGNED_IDENTITY
	cdcd0000
	cdcd0000
   DWORD    PSCompareMode;             // Compare modes for clipplane texture mode
   DWORD    PSFinalCombinerConstant0;  // C0 in final combiner
   DWORD    PSFinalCombinerConstant1;  // C1 in final combiner
   DWORD    PSRGBOutputs[8];           // Stage 0 RGB outputs
	000020d0
		PS_REGISTER_R1
		PS_COMBINEROUTPUT_AB_DOT_PRODUCT

		PS_REGISTER_ZERO
	000000d0
		PS_REGISTER_R1
		PS_COMBINEROUTPUT_AB_MULTIPLY
	000000d0
	000000d0
   DWORD    PSCombinerCount;           // Active combiner count (Stages 0-7)
	00011104
		4
		PS_COMBINERCOUNT_MUX_MSB
		PS_COMBINERCOUNT_UNIQUE_C0
		PS_COMBINERCOUNT_UNIQUE_C1
   DWORD    PSTextureModes;            // Texture addressing modes
	00000001
		PS_TEXTUREMODES_PROJECT2D
   DWORD    PSDotMapping;              // Input mapping for dot product modes
   DWORD    PSInputTexture;            // Texture source for some texture modes
   DWORD    PSC0Mapping;               // Mapping of c0 regs to D3D constants
   DWORD    PSC1Mapping;               // Mapping of c1 regs to D3D constants
   DWORD    PSFinalCombinerConstants;  // Final combiner constant mapping
} D3DPIXELSHADERDEF;

San Andreas Car Shaders

These shaders are picked depending on the following flags:

1		default
2		refl && !spec && lit
3		env && !lit
		env && !spec && lit
4		spec && lit

5		refl && spec && lit
6		env && spec && lit

Shader 1

; c0-3	matrix
; c4-6	world/normal matrix
; c13	direct color
; c14	0.7 0.7 0.7 1.0
; c15	ambient color
; c16	light direction
; c20	diff mat
; c21	amb mat
; c22	spec mat
; c32	0, 1, 0.5, 2
; c33	0.3 0.7 0.1 0.01

 dp4	oPos.x, v0, c0
 dp4	oPos.y, v0, c1
 dp4	oPos.z, v0, c2
 dp4	oPos.w, v0, c3
 dp3	r0.y, v1, c5
 dp3	r0.x, v1, c4
 +mov	oFog.x, r12.w
 dp3	r0.z, v1, c6
mov	r0.w, c20
 +mov	oT0, v2
 mov	r2, c15
 dp3	r0.xyz, r0, -c16
 mul	oPos.xyz, r12, c-38
+rcc	r1.x, r12.w
 max	r0.xyz, r0.xyzz, c32.x
 min	r0.xyz, r0.xyzz, c32.y
 mul	r0.xyz, r0, c13
 mul	r0.xyz, r0, c20
 mad	oD0, r2, c21, r0
 mad	oPos.xyz, r12, r1.x, c-37

Shader 2

; v0	position
; v1	normal
; v2	tex coord
; c0-3	matrix
; c4-6	world/normal matrix
; c12	eye
; c13	direct color
; c14	0.7 0.7 0.7 1.0
; c15	ambient color
; c16	light direction
; c20	diff mat
; c21	amb mat
; c22	spec mat
; c32	0, 1, 0.5, 2
; c33	0.3 0.7 0.1 0.01

 dp3	r0.x, v1.xyzz, c4.xyzz
 dp3	r0.y, v1.xyzz, c5.xyzz
 dp3	r0.z, v1.xyzz, c6.xyzz
dp4	oPos.w, v0, c3
 dp3	r11.x, r0.xyzz, c8.xyzz
+mov	oT0, v2
 dp3	r11.y, r0.xyzz, c9.xyzz
+rcc	r1.x, r12.w
 dp3	r11.z, r0.xyzz, c10.xyzz
+mov	oFog.x, r12.w
dp3	r0.w, r0.xyzz, -c16.xyzz
 dp3	r11.w, r11.xyzz, r11.xyzz
max	r0.x, r0.w, c32.x
min	r0.x, r0.x, c32.y
 +rsq	r1.w, r11.w
 mov	r10.y, c32.y
 mul	r10.zw, r11.yyyx, r1.w
dp4	oPos.x, v0, c0
dp4	oPos.y, v0, c1
dp4	oPos.z, v0, c2
mul	r0.xyz, r0.x, c13.xyzz
mul	r0.xyz, r0.xyzz, c20.xyzz
mov	r0.w, c20.w
mov	r2, c15
 dp3	r11.x, r10.wzyy, c24.xyzz
 dp3	r11.y, r10.wzyy, c25.xyzz
mov	r11.z, c32.y
mul	oPos.xyz, r12.xyzz, c-38.xyzz
mad	oD0, r2, c21, r0
mov	oT1, r11.xyzz
mad	oPos.xyz, r12.xyzz, r1.x, c-37.xyzz

Shader 3

; v0	position
; v1	normal
; v2	tex coord
; c0-3	matrix
; c4-6	world/normal matrix
; c12	eye
; c13	direct color
; c14	0.7 0.7 0.7 1.0
; c15	ambient color
; c16	light direction
; c20	diff mat
; c21	amb mat
; c22	spec mat
; c32	0, 1, 0.5, 2
; c33	0.3 0.7 0.1 0.01

 dp3	r0.x, v1.xyzz, c4.xyzz
 dp3	r0.y, v1.xyzz, c5.xyzz
 dp3	r0.z, v1.xyzz, c6.xyzz
 dp4	oPos.w, v0, c3
 dp3	r0.w, r0.xyzz, -c16.xyzz
 +mov	oT0, v2
mov	r11.xz, v3.xxyy
+rcc	r1.x, r12.w
 max	r0.x, r0.w, c32.x
 +mov	oFog.x, r12.w
mov	r11.y, c32.y
 min	r0.x, r0.x, c32.y
 dp4	oPos.x, v0, c0
 dp4	oPos.y, v0, c1
 dp4	oPos.z, v0, c2
 mul	r0.xyz, r0.x, c13.xyzz
 mul	r0.xyz, r0.xyzz, c20.xyzz
 mov	r0.w, c20.w
 mov	r2, c15
dp3	r10.w, r11.xzyy, c24.xyzz
dp3	r10.y, r11.xzyy, c25.xyzz
mov	r10.z, v3.w
 mul	oPos.xyz, r12.xyzz, c-38.xyzz
 mad	oD0, r2, c21, r0
mov	oT1, r10.wyzz
 mad	oPos.xyz, r12.xyzz, r1.x, c-37.xyzz

Shader 4

; v0	position
; v1	normal
; v2	tex coord
; c0-3	matrix
; c4-6	world/normal matrix
; c12	eye
; c13	direct color
; c14	0.7 0.7 0.7 1.0
; c15	ambient color
; c16	light direction
; c20	diff mat
; c21	amb mat
; c22	spec mat
; c32	0, 1, 0.5, 2
; c33	0.3 0.7 0.1 0.01

 dp4	r10.x, v0, c4
 dp4	r10.y, v0, c5
 dp4	r10.z, v0, c6
 dp3	r11.x, v1.xyzz, c4.xyzz
 add	r0.xyz, -r10.xyzz, c12.xyzz
 dp3	r11.y, v1.xyzz, c5.xyzz
 dp3	r11.w, r0.xyzz, r0.xyzz
 +mov	oD0.w, c20.w
 dp3	r11.z, v1.xyzz, c6.xyzz		; r11.xyz world normal
 dp4	oPos.w, v0, c3
 +rsq	r1.x, r11.w
 dp3	r4.x, r11.xyzz, -c16.xyzz	; diffuse factor
 +mov	oT0, v2
 mul	r0.xyz, r0.xyzz, r1.x		; r0.xyz view vector
+rcc	r1.y, r12.w
 mul	r4.xyz, r4.x, c13.xyzz
 +mov	oFog.x, r12.w
 add	r2.xyz, r0.xyzz, -c16.xyzz
 mul	r4.xyz, r4.xyzz, c20.xyzz
 dp3	r11.w, r2.xyzz, r2.xyzz
 mul	r4.xyz, r4.xyzz, c32.z
 dp4	oPos.x, v0, c0
 +rsq	r1.x, r11.w
 dp4	oPos.y, v0, c1
 mul	r2.xyz, r2.xyzz, r1.x		; r2.xyz spec vector
 dp3	r3.x, r11.xyzz, r2.xyzz
 dp4	oPos.z, v0, c2
 mul	r3.x, r3.x, r3.x
 mul	r3.x, r3.x, r3.x
 mul	r3.x, r3.x, r3.x
 mul	r3.x, r3.x, r3.x
 mul	r3.xyz, r3.x, c14.xyzz
 mul	r3.xyz, r3.xyzz, c22.xyzz
 mul	r3.xyz, r3.xyzz, c32.z
 add	r0.xyz, r4.xyzz, r3.xyzz
 mov	r2.xyz, c15.xyzz
 mad	r0.xyz, r2.xyzz, c21.xyzz, r0.xyzz
 mul	oPos.xyz, r12.xyzz, c-38.xyzz
 mov	oD0.xyz, r0
 mad	oPos.xyz, r12.xyzz, r1.y, c-37.xyzz

Shader 5

dp3	r11.x, v1.xyzz, c4.xyzz
dp3	r11.y, v1.xyzz, c5.xyzz
dp3	r11.z, v1.xyzz, c6.xyzz
dp4	r10.x, v0, c4
dp4	r10.y, v0, c5
dp4	r10.z, v0, c6
dp3	r4.x, r11.xyzz, -c16.xyzz
+mov	oT0, v2
add	r0.xyz, -r10.xyzz, c12.xyzz
dp3	r10.w, r11.xyzz, c8.xyzz
dp3	r11.w, r0.xyzz, r0.xyzz
+mov	oD0.w, c20.w
dp3	r10.y, r11.xyzz, c9.xyzz
mul	r4.xyz, r4.x, c13.xyzz
+rsq	r1.x, r11.w
dp3	r10.z, r11.xyzz, c10.xyzz
mul	r0.xyz, r0.xyzz, r1.x
add	r2.xyz, r0.xyzz, -c16.xyzz
dp3	r11.w, r10.wyzz, r10.wyzz
dp3	r10.x, r2.xyzz, r2.xyzz
mul	r4.xyz, r4.xyzz, c20.xyzz
+rsq	r1.w, r11.w
dp4	oPos.w, v0, c3
+rsq	r1.x, r10.x
mul	r4.xyz, r4.xyzz, c32.z
mul	r2.xyz, r2.xyzz, r1.x
+rcc	r1.y, r12.w
mul	r10.zw, r10.yyyw, r1.w
+mov	oFog.x, r12.w
dp3	r3.x, r11.xyzz, r2.xyzz
mov	r10.y, c32.y
mul	r3.x, r3.x, r3.x
mul	r3.x, r3.x, r3.x
mul	r3.x, r3.x, r3.x
mul	r3.x, r3.x, r3.x
mul	r3.xyz, r3.x, c14.xyzz
mul	r3.xyz, r3.xyzz, c22.xyzz
mul	r3.xyz, r3.xyzz, c32.z
dp4	oPos.x, v0, c0
dp4	oPos.y, v0, c1
dp4	oPos.z, v0, c2
add	r0.xyz, r4.xyzz, r3.xyzz
mov	r2.xyz, c15.xyzz
mad	r0.xyz, r2.xyzz, c21.xyzz, r0.xyzz
dp3	r11.w, r10.wzyy, c24.xyzz
dp3	r11.y, r10.wzyy, c25.xyzz
+mov	oD0.xyz, r0
mov	r11.z, c32.y
mul	oPos.xyz, r12.xyzz, c-38.xyzz
mov	oT1, r11.wyzz
mad	oPos.xyz, r12.xyzz, r1.y, c-37.xyzz

Shader 6

; v0	position
; v1	normal
; v2	tex coord 1
; v3	tex coord 2
; c0-3	matrix
; c4-6	world/normal matrix
; c12	eye
; c13	direct color
; c14	0.7 0.7 0.7 1.0
; c15	ambient color
; c16	light direction
; c20	diff mat
; c21	amb mat
; c22	spec mat
; c32	0, 1, 0.5, 2
; c33	0.3 0.7 0.1 0.01

 dp4	r10.x, v0, c4
 dp4	r10.y, v0, c5
 dp4	r10.z, v0, c6
 dp3	r11.x, v1.xyzz, c4.xyzz
 add	r0.xyz, -r10.xyzz, c12.xyzz
 dp3	r11.y, v1.xyzz, c5.xyzz
 dp3	r11.w, r0.xyzz, r0.xyzz
 +mov	oD0.w, c20.w
 dp3	r11.z, v1.xyzz, c6.xyzz		; r11 normal
 dp4	oPos.w, v0, c3
 +rsq	r1.x, r11.w
 dp3	r4.x, r11.xyzz, -c16.xyzz
 +mov	oT0, v2
 mul	r0.xyz, r0.xyzz, r1.x		; r0 view vector
 +rcc	r1.y, r12.w
 mul	r4.xyz, r4.x, c13.xyzz
 +mov	oFog.x, r12.w
 add	r2.xyz, r0.xyzz, -c16.xyzz
 mul	r4.xyz, r4.xyzz, c20.xyzz
 dp3	r11.w, r2.xyzz, r2.xyzz
 mul	r4.xyz, r4.xyzz, c32.z		; r4 diffuse term
mov	r10.zw, v3.yyyx
 +rsq	r1.x, r11.w
mov	r10.y, c32.y
 mul	r2.xyz, r2.xyzz, r1.x
 dp3	r3.x, r11.xyzz, r2.xyzz
 dp4	oPos.x, v0, c0
 mul	r3.x, r3.x, r3.x
 mul	r3.x, r3.x, r3.x
 mul	r3.x, r3.x, r3.x
 mul	r3.x, r3.x, r3.x
 mul	r3.xyz, r3.x, c14.xyzz
 mul	r3.xyz, r3.xyzz, c22.xyzz
 mul	r3.xyz, r3.xyzz, c32.z		; r3 specular term
 dp4	oPos.y, v0, c1
 dp4	oPos.z, v0, c2
 add	r0.xyz, r4.xyzz, r3.xyzz
 mov	r2.xyz, c15.xyzz
 mad	r0.xyz, r2.xyzz, c21.xyzz, r0.xyzz
dp3	r11.w, r10.wzyy, c24.xyzz
dp3	r11.y, r10.wzyy, c25.xyzz
 +mov	oD0.xyz, r0
mov	r11.z, v3.w
 mul	oPos.xyz, r12.xyzz, c-38.xyzz
mov	oT1, r11.wyzz
 mad	oPos.xyz, r12.xyzz, r1.y, c-37.xyzz

Shader used for grass

dp4	oPos.w, v0, c3
dp4	oPos.x, v0, c0
dp4	oPos.y, v0, c1
+rcc	r1.x, r12.w
dp4	oPos.z, v0, c2
mov	oFog.x, r12.w
mul	oPos.xyz, r12.xyzz, c-38.xyzz
mov	oT0, v1
mov	oD0, c20
mad	oPos.xyz, r12.xyzz, r1.x, c-37.xyzz

Pixelshader used for world objects (?)

typedef struct _D3DPixelShaderDef
{
   DWORD    PSAlphaInputs[8];          // Alpha inputs for each stage
	14181010
		PS_REGISTER_V0
		PS_INPUTMAPPING_UNSIGNED_IDENTITY

		PS_REGISTER_T0
		PS_INPUTMAPPING_UNSIGNED_IDENTITY

		PS_REGISTER_ZERO
		PS_INPUTMAPPING_UNSIGNED_IDENTITY

		PS_REGISTER_ZERO
		PS_INPUTMAPPING_UNSIGNED_IDENTITY
	dcd11010
		PS_REGISTER_R0
		PS_INPUTMAPPING_SIGNED_IDENTITY

		PS_REGISTER_C0
		PS_INPUTMAPPING_SIGNED_IDENTITY

		PS_REGISTER_ZERO
		PS_INPUTMAPPING_UNSIGNED_IDENTITY

		PS_REGISTER_ZERO
		PS_INPUTMAPPING_UNSIGNED_IDENTITY
   DWORD    PSFinalCombinerInputsABCD; // Final combiner inputs
	130c0300
		PS_REGISTER_FOG
		PS_CHANNEL_ALPHA

		PS_REGISTER_R0

		PS_REGISTER_FOG
   DWORD    PSFinalCombinerInputsEFG;  // Final combiner inputs (continued)
	00001c80
		PS_REGISTER_R0
		PS_CHANNEL_ALPHA

		PS_FINALCOMBINERSETTING_CLAMP_SUM
   DWORD    PSConstant0[8];            // C0 for each stage
	ffffffff
	ffffffff
   DWORD    PSConstant1[8];            // C1 for each stage
   DWORD    PSAlphaOutputs[8];         // Alpha output for each stage
	000000c0
		PS_REGISTER_DISCARD

		PS_REGISTER_R0
	000000c0
		PS_REGISTER_DISCARD

		PS_REGISTER_R0
   DWORD    PSRGBInputs[8];            // RGB inputs for each stage
	0804c149
		PS_REGISTER_T0
		PS_INPUTMAPPING_UNSIGNED_IDENTITY

		PS_REGISTER_V0
		PS_INPUTMAPPING_UNSIGNED_IDENTITY

		PS_REGISTER_C0
		PS_INPUTMAPPING_SIGNED_IDENTITY

		PS_REGISTER_T1
		PS_INPUTMAPPING_EXPAND_NORMAL
	cdcc20cc
		PS_REGISTER_R1
		PS_INPUTMAPPING_SIGNED_IDENTITY

		PS_REGISTER_R0
		PS_INPUTMAPPING_SIGNED_IDENTITY

		PS_REGISTER_ZERO
		PS_INPUTMAPPING_UNSIGNED_INVERT

		PS_REGISTER_R0
		PS_INPUTMAPPING_SIGNED_IDENTITY
   DWORD    PSCompareMode;             // Compare modes for clipplane texture mode
   DWORD    PSFinalCombinerConstant0;  // C0 in final combiner
   DWORD    PSFinalCombinerConstant1;  // C1 in final combiner
   DWORD    PSRGBOutputs[8];           // Stage 0 RGB outputs
	000000cd
		PS_REGISTER_R1
		PS_COMBINEROUTPUT_CD_MULTIPLY

		PS_REGISTER_R0
		PS_COMBINEROUTPUT_AB_MULTIPLY
	00000c00
		PS_REGISTER_R0
		PS_COMBINEROUTPUT_AB_CD_SUM
   DWORD    PSCombinerCount;           // Active combiner count (Stages 0-7)
	00011102
		2
		PS_COMBINERCOUNT_MUX_MSB
		PS_COMBINERCOUNT_UNIQUE_C0
		PS_COMBINERCOUNT_UNIQUE_C1
   DWORD    PSTextureModes;            // Texture addressing modes
	00000021
		PS_TEXTUREMODES_PROJECT2D
		PS_TEXTUREMODES_PROJECT2D
   DWORD    PSDotMapping;              // Input mapping for dot product modes
   DWORD    PSInputTexture;            // Texture source for some texture modes
   DWORD    PSC0Mapping;               // Mapping of c0 regs to D3D constants
	ffffff00
   DWORD    PSC1Mapping;               // Mapping of c1 regs to D3D constants
	ffffffff
   DWORD    PSFinalCombinerConstants;  // Final combiner constant mapping
	000001ff
} D3DPIXELSHADERDEF;

Xbox vertex formats

0000XXXC 44443333 2222111 NNNNVVVV

V N:
	1	0x34	D3DVSDT_PBYTE3
	2	0x35	D3DVSDT_SHORT3
	3	0x31	D3DVSDT_NORMSHORT3
	4	0x16	D3DVSDT_NORMPACKED3		default normal
	5	0x32	D3DVSDT_FLOAT3			default position

C:
		0x40	D3DVSDT_D3DCOLOR
T1-4:
	1	0x24	D3DVSDT_PBYTE2
	2	0x25	D3DVSDT_SHORT2
	3	0x21	D3DVSDT_NORMSHORT2
	4	0x16	D3DVSDT_NORMPACKED3
	5	0x22	D3DVSDT_FLOAT2			default

X:	tangent? XXX is index of tex coord set - 1 that has the data
	anything	0x16	D3DVSDT_NORMPACKED3
				0x16	D3DVSDT_NORMPACKED3

default:
	0	position
	2	normal
	3	color
	9-C	tex coords

skin:
	stream 0
	0	position
	3	normal
	4	color
	5-8	tex coords
	stream 1
	1	weights		D3DVSDT_PBYTEn
	2	indices		D3DVSDT_SHORTn

normmap:
	40320000	; vertex
	40160001	; normal
	40220002	; tex coords
	40160003	; ?
	40160004	; ?

	40320000	; vertex
	40160001	; normal
	40400002	; color
	40220003	; tex coords
	40160004	; ?
	40160005	; ?

20000000h
40320000h ; vertex		5
40160001h ; normal		4
40220002h ; tex coord
40400004h ; color		5
0FFFFFFFFh