!!ARBvp1.0
ATTRIB pos = vertex.position;
PARAM mat[4] = { state.matrix.mvp };
PARAM mat2[4] = { state.matrix.program[0] };
OUTPUT opos = result.position;

TEMP temp, temp2;
TEMP modpos;

## calculate output position
MUL modpos, pos, {0.0, -0.5, 0.0, 0.0};
SGE temp2.x, pos.y, 10000;												## testing if y >= 0 causes distortion on 8x00 series GPU's -- Kloot
MAD modpos, temp2.x, temp, pos;

DP4 opos.x, modpos, mat[0];
DP4 opos.y, modpos, mat[1];
DP4 opos.z, modpos, mat[2];
DP4 opos.w, modpos, mat[3];



DP4 result.fogcoord.x, modpos, mat[2];
MOV result.color, vertex.color;

## calculate texture coords
MAD result.texcoord[0], pos.xzyw, program.env[12], program.env[11];		## main texture
MUL result.texcoord[1], pos.xzyw, program.env[10];						## shade texture
MAD result.texcoord[2], pos.xzyw, program.env[14], program.env[13];		## detail texture
MOV result.texcoord[2].z, pos.y;
MUL result.texcoord[3], pos.xzyw, program.env[10];						## info texture

## calculate shadow texture coords
DP4 temp.x, modpos, mat2[0];
DP4 temp.y, modpos, mat2[1];

ABS temp2, temp;
ADD temp2, temp2, program.env[17];
RSQ temp2.x, temp2.x;
RSQ temp2.y, temp2.y;
ADD temp2, temp2, program.env[18];
MAD result.texcoord[4], temp, temp2, program.env[16];

DP4 result.texcoord[4].z, modpos, mat2[2];
DP4 result.texcoord[4].w, modpos, mat2[3];

END
