If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Chess Titans/zh-cn

From The Cutting Room Floor
Jump to navigation Jump to search
This page is a translated version of the page Chess Titans and the translation is 16% complete.
Other languages:
English • ‎español • ‎italiano • ‎polski • ‎português do Brasil • ‎русский • ‎中文(中国大陆)‎ • ‎한국어

标题画面

Chess Titans

开发者: Oberon Games
发行者: Microsoft
平台: Windows
于全球发布日期: January 30, 2007


SourceIcon.png 本游戏有未编译的源代码。
DevTextIcon.png 本游戏有与开发相关的隐藏文本。
DebugIcon.png 本游戏有调试功能。


在Windows Vista 与 Windows 7 中全新内置的游戏之一

调试菜单

Hmmm...
To do:
试试Full Speed Render有没有效果

Chesstitansdebugmenu.png

与 Windows Vista 和 Windows 7 附带的多数游戏一样, 游戏内有着 g_debugEnabled 变量。

这个菜单中的选项包括:

  • Rotate Board - 在3D视角中旋转棋盘到另一侧,但在2D视角中没有作用。
  • Self Play - 由两个计算机玩家对战的游戏。如果游戏已开始,那么会启动一个新游戏。
  • Toggle Top Down View - 切换至2D视角,但回到3D视角会将游戏将至最低画质。
  • Toggle Full Speed Render - 应该会让游戏在低配计算机上运行的更快一点。

XInput支持

一个没有被记录的有趣功能 (没有被帮助菜单记录),游戏支持XInput (控制器)输入 – 如果游戏检测到了Xbox360兼容手柄插入了USB接口,1号玩家的角落将亮起,提示控制器可用。未被记录原因可能是微软认为大家应该用传统方式控制,用控制器应该有点多余,但无论如何这个是个有意思的小功能。

Controls

按键 效果
左摇杆/方向键/肩键/扳机 移动光标。也可以用于在菜单控制
B/返回键 撤回上一步。
A/X 选择光标所在的格子,移动光标到格子再按 A/X 选择此格。再次在高亮格子上按下 A/X 将旗子移动。
Y/开始键 打开游戏菜单。

着色器代码

在 Chess.dll,有一部分着色器代码,从12B9358开始.

float4x4 World;
float4x4 View;
float4x4 Projection;
texture DecalTexture;
texture GradientTexture;


sampler2D DecalSampler = sampler_state
{
    Texture   = (DecalTexture);
    MinFilter = Linear;
    MagFilter = Linear;
    MipFilter = Linear;
    AddressU  = Clamp;
    AddressV  = Clamp;
};


sampler2D DecalSamplerQuick = sampler_state
{
    Texture   = (DecalTexture);
    MinFilter = Point;
    MagFilter = Point;
    MipFilter = Point;
    AddressU  = Clamp;
    AddressV  = Clamp;
};


sampler1D GradientSampler = sampler_state
{
    Texture   = (GradientTexture);
    MinFilter = Linear;
    MagFilter = Linear;
    MipFilter = None; // oh dear god. don't use mips because it'll sample from the lowest mip level when a triangle as the same texture coords for all 3 verts
    AddressU  = Clamp;
};


sampler2D ScreenSampler = sampler_state
{
    Texture   = (DecalTexture);
    MinFilter = Linear;
    MagFilter = Linear;
    MipFilter = Linear;
    AddressU  = Clamp;
    AddressV  = Clamp;
};


sampler2D ScreenSamplerPoint = sampler_state
{
    Texture   = (DecalTexture);
    MinFilter = Point;
    MagFilter = Point;
    MipFilter = Point;
    AddressU  = Clamp;
    AddressV  = Clamp;
};


technique TWorldDecal
{
    pass P0
    {
		WorldTransform[0] = (World);
		ViewTransform = (View);
		ProjectionTransform = (Projection);

        Lighting = false;
        ZEnable = false;
        ZFunc = LessEqual;
        ZWriteEnable = false;

        AlphaBlendEnable = true;
        SrcBlend = SrcAlpha;
        DestBlend = InvSrcAlpha;

		Sampler[0] = (DecalSampler);
		Sampler[1] = (GradientSampler);

		ColorOp[0] = SelectArg1;
		ColorArg1[0] = Texture;
		ColorArg2[0] = Current;
		ColorOp[1] = SelectArg2;
		ColorArg1[1] = Texture;
		ColorArg2[1] = Current;
		ColorOp[2] = Disable;

		AlphaOp[0] = SelectArg1;
		AlphaArg1[0] = Texture;
		AlphaArg2[0] = Current;
		AlphaOp[1] = Modulate;
		AlphaArg1[1] = Texture;
		AlphaArg2[1] = Current;
		AlphaOp[2] = Disable;

        VertexShader = null;
        PixelShader = null;
    }
}


technique TWorldDecalQuick
{
    pass P0
    {
		WorldTransform[0] = (World);
		ViewTransform = (View);
		ProjectionTransform = (Projection);

        Lighting = false;
        ZEnable = false;
        ZFunc = LessEqual;
        ZWriteEnable = false;

        AlphaBlendEnable = true;
        SrcBlend = SrcAlpha;
        DestBlend = InvSrcAlpha;

		Sampler[0] = (DecalSamplerQuick);

		ColorOp[0] = SelectArg1;
		ColorArg1[0] = Texture;
		ColorArg2[0] = Current;
		ColorOp[1] = Disable;

		AlphaOp[0] = SelectArg1;
		AlphaArg1[0] = Texture;
		AlphaArg2[0] = Current;
		AlphaOp[1] = Disable;

        VertexShader = null;
        PixelShader = null;
	}
}


technique TScreenDecal
{
    pass P0
    {
		WorldTransform[0] = (World);
		ViewTransform = (World);
		ProjectionTransform = (World);

        Lighting = false;
        ZEnable = false;
        ZFunc = Always;
        ZWriteEnable = true;

        AlphaBlendEnable = true;
        SrcBlend = SrcAlpha;
        DestBlend = InvSrcAlpha;

		Sampler[0] = (ScreenSampler);
		Sampler[1] = (GradientSampler);

		ColorOp[0] = SelectArg1;
		ColorArg1[0] = Texture;
		ColorArg2[0] = Current;
		ColorOp[1] = SelectArg2;
		ColorArg1[1] = Texture;
		ColorArg2[1] = Current;
		ColorOp[2] = Disable;

		AlphaOp[0] = SelectArg1;
		AlphaArg1[0] = Texture;
		AlphaArg2[0] = Current;
		AlphaOp[1] = Modulate;
		AlphaArg1[1] = Texture;
		AlphaArg2[1] = Current;
		AlphaOp[2] = Disable;

        VertexShader = null;
        PixelShader = null;
    }
}


technique TScreenDecalPoint
{
    pass P0
    {
		WorldTransform[0] = (World);
		ViewTransform = (World);
		ProjectionTransform = (World);

        Lighting = false;
        ZEnable = false;
        ZFunc = Always;
        ZWriteEnable = true;

        AlphaBlendEnable = true;
        SrcBlend = SrcAlpha;
        DestBlend = InvSrcAlpha;

		Sampler[0] = (ScreenSamplerPoint);
		Sampler[1] = (GradientSampler);

		ColorOp[0] = SelectArg1;
		ColorArg1[0] = Texture;
		ColorArg2[0] = Current;
		ColorOp[1] = SelectArg2;
		ColorArg1[1] = Texture;
		ColorArg2[1] = Current;
		ColorOp[2] = Disable;

		AlphaOp[0] = SelectArg1;
		AlphaArg1[0] = Texture;
		AlphaArg2[0] = Current;
		AlphaOp[1] = Modulate;
		AlphaArg1[1] = Texture;
		AlphaArg2[1] = Current;
		AlphaOp[2] = Disable;

        VertexShader = null;
        PixelShader = null;
    }
}


technique TScreenDecalImmediate
{
    pass P0
    {
		WorldTransform[0] = (World);
		ViewTransform = (World);
		ProjectionTransform = (World);

        Lighting = false;
        ZEnable = false;
        ZFunc = Always;
        ZWriteEnable = true;

        AlphaBlendEnable = true;
        SrcBlend = One;
        DestBlend = InvSrcAlpha;

		Sampler[0] = (ScreenSampler);
		Sampler[1] = (GradientSampler);

		ColorOp[0] = SelectArg1;
		ColorArg1[0] = Texture;
		ColorArg2[0] = Current;
		ColorOp[1] = SelectArg2;
		ColorArg1[1] = Texture;
		ColorArg2[1] = Current;
		ColorOp[1] = Disable;

		AlphaOp[0] = SelectArg1;
		AlphaArg1[0] = Texture;
		AlphaArg2[0] = Current;
		AlphaOp[1] = Modulate;
		AlphaArg1[1] = Texture;
		AlphaArg2[1] = Current;
		AlphaOp[1] = Disable;

        VertexShader = null;
        PixelShader = null;
    }
}
float4x4 WorldViewProjection;
float4x4 WorldView;
float4x4 World;
float4x4 View;
float4x4 ViewInv;
float4x4 Projection;
texture AlbedoTexture;
texture ReflTexture;
texture EnvTexture;
float Alpha;


float EnvironmentContribution = 0.25;
float ReflectionStrength = 0.25;
float TrimReflectionStrength = 0.45;


//-----------------------------------------------------------------------------
sampler2D AlbedoSampler = sampler_state
{ 
	Texture   = (AlbedoTexture);
	MipFilter = Linear; 
	MinFilter = Linear;
	MagFilter = Linear;
	AddressU  = Wrap;
	AddressV  = Wrap;
};


sampler2D ReflSampler = sampler_state
{ 
	Texture   = (ReflTexture);
	MipFilter = Point;
	MinFilter = Point;
	MagFilter = Point;
	AddressU  = Clamp;
	AddressV  = Clamp;
};


samplerCUBE EnvSampler = sampler_state
{ 
	Texture   = (EnvTexture);
	MipFilter = Point; 
	MinFilter = Linear;
	MagFilter = Linear;
};


//-----------------------------------------------------------------------------
struct VS_OUTPUT
{
	float4 Position		: POSITION;		// position of the vertex
	float3 Diffuse		: COLOR0;		// diffuse color of the vertex
	float2 TexCoord		: TEXCOORD0;
	float4 ReflCoord	: TEXCOORD1;
	float3 EnvCoord		: TEXCOORD2;
};


//-----------------------------------------------------------------------------
VS_OUTPUT PieceVS(
	uniform float3 ka,
	uniform float3 kd,
	uniform bool bEnvironment,
	uniform bool bReflections,
	float4 Pos		: POSITION,
	float2 TexCoord	: TEXCOORD0,
	float3 Normal	: NORMAL0 )
{
	VS_OUTPUT Output;

	// Output the vetrex position in projection space
	Output.Position = mul( Pos, WorldViewProjection );

	float3 viewNormal = normalize( mul( Normal, (float3x3) WorldView ) );
	float3 L = mul( worldLight, (float3x3) View );
	float3 N = viewNormal;
	float NdotL = saturate( dot( N, L ) );

	float3 ambient = ka;
	float3 diffuse = kd * NdotL;
	Output.Diffuse = ambient + diffuse;

	Output.TexCoord = TexCoord;

	// note: bReflections does nothing
	Output.ReflCoord = float4( 0, 0, 0, 1 );

	if ( bEnvironment )
	{
		float3 viewPos = normalize( mul( Pos, WorldView ) );
		float3 viewReflect = reflect( viewPos, viewNormal );
		float3 worldReflect = mul( viewReflect, (float3x3) ViewInv );
		Output.EnvCoord = worldReflect;
	}
	else
	{
		Output.EnvCoord = float3( 0, 1, 0 );
	}

	return Output;
}


//-----------------------------------------------------------------------------
VS_OUTPUT StandardVS(
	uniform bool bEnvironment,
	uniform bool bReflections,
	float4 Pos		: POSITION,
	float2 TexCoord	: TEXCOORD0,
	float3 Normal	: NORMAL0 )
{
	VS_OUTPUT Output;

	// Output the vetrex position in projection space
	Output.Position = mul( Pos, WorldViewProjection );

	// note: diffuse unused
	Output.Diffuse = float3( 1, 1, 1 );

	Output.TexCoord = TexCoord;

	if ( bReflections )
	{
		Output.ReflCoord.x = Output.Position.x * 0.5 + Output.Position.w * 0.5;
		Output.ReflCoord.y = Output.Position.w * 0.5 - Output.Position.y * 0.5;
		Output.ReflCoord.z = Output.Position.w;
		Output.ReflCoord.w = Output.Position.w;
	}
	else
	{
		Output.ReflCoord = float4( 0, 0, 0, 1 );
	}

	if ( bEnvironment )
	{
		float3 viewNormal = normalize( mul( Normal, (float3x3) WorldView ) );

		float3 viewPos = normalize( mul( Pos, WorldView ) );
		float3 viewReflect = reflect( viewPos, viewNormal );
		float3 worldReflect = mul( viewReflect, (float3x3) ViewInv );
		Output.EnvCoord = worldReflect;
	}
	else
	{
		Output.EnvCoord = float3( 0, 1, 0 );
	}

	return Output;
}


//-----------------------------------------------------------------------------
float4 PiecePS( VS_OUTPUT In, uniform bool bAlbedo, uniform bool bEnvironment, uniform bool bReflections, uniform float reflAmount ) : COLOR0
{
	// note: bReflections does nothing

	if ( bAlbedo )
	{
		float3 Albedo = tex2D( AlbedoSampler, In.TexCoord );

		if ( bEnvironment )
		{
			float3 Environment = texCUBE( EnvSampler, In.EnvCoord ) * reflAmount;
			Albedo = Albedo * environmentTextureAmount;
			return float4( In.Diffuse * Albedo + Environment, Alpha );
		}
		else
		{
			return float4( In.Diffuse * Albedo, Alpha );
		}
	}
	else
	{
		if ( bEnvironment )
		{
			float3 Environment = texCUBE( EnvSampler, In.EnvCoord ) * reflAmount;
			return float4( In.Diffuse + Environment, Alpha );
		}
		else
		{
			return float4( In.Diffuse, Alpha );
		}
	}
}


//-----------------------------------------------------------------------------
float4 BoardPS( VS_OUTPUT In, uniform bool bEnvironment, uniform bool bReflections ) : COLOR0
{
	float3 Albedo = tex2D( AlbedoSampler, In.TexCoord );

	if ( bEnvironment )
	{
		float3 Environment = texCUBE( EnvSampler, In.EnvCoord ) * EnvironmentContribution;
		if ( bReflections )
		{
			float4 Reflections = tex2Dproj( ReflSampler, In.ReflCoord );
			float3 c = lerp( Albedo, Reflections.xyz, Reflections.w * ReflectionStrength );
			return float4( c + Environment, 1 );
		}
		else
		{
			return float4( Albedo + Environment, 1 );
		}
	}
	else
	{
		if ( bReflections )
		{
			float4 Reflections = tex2Dproj( ReflSampler, In.ReflCoord );
			float3 c = lerp( Albedo, Reflections.xyz, Reflections.w * ReflectionStrength );
			return float4( c, 1 );
		}
		else
		{
			return float4( Albedo, 1 );
		}
	}
}


//-----------------------------------------------------------------------------
float4 TablePS( VS_OUTPUT In, uniform bool bEnvironment, uniform bool bReflections ) : COLOR0
{
	// note: bReflections does nothing

	float3 Albedo = tex2D( AlbedoSampler, In.TexCoord );

	if ( bEnvironment )
	{
		float3 Environment = texCUBE( EnvSampler, In.EnvCoord ) * 0.0325;
		return float4( Albedo + Environment, 1 );
	}
	else
	{
		return float4( Albedo, 1 );
	}
}


//-----------------------------------------------------------------------------
float4 TrimPS( VS_OUTPUT In, uniform bool bEnvironment, uniform bool bReflections ) : COLOR0
{
	float3 Albedo = trimColor;

	if ( bEnvironment )
	{
		float3 Environment = texCUBE( EnvSampler, In.EnvCoord ) * EnvironmentContribution;

		if ( bReflections )
		{
			float4 Reflections = tex2Dproj( ReflSampler, In.ReflCoord );
			float3 c = lerp( Albedo, Reflections.xyz, Reflections.w * TrimReflectionStrength );
			return float4( c + Environment, 1 );
		}
		else
		{
			return float4( Albedo + Environment, 1 );
		}
	}
	else
	{
		if ( bReflections )
		{
			float4 Reflections = tex2Dproj( ReflSampler, In.ReflCoord );
			float3 c = lerp( Albedo, Reflections.xyz, Reflections.w * TrimReflectionStrength );
			return float4( c, 1 );
		}
		else
		{
			return float4( Albedo, 1 );
		}
	}
}


//-----------------------------------------------------------------------------
technique TWhite_EnvironmentReflections
{
	pass P0
	{
		AlphaBlendEnable = true;
		SrcBlend = SrcAlpha;
		DestBlend = InvSrcAlpha;

		VertexShader = compile vs_1_1 PieceVS( kaWhite, kdWhite, true, true );
		PixelShader  = compile ps_1_4 PiecePS( pieceAlbedo, true, true, reflWhite );
	}
}


technique TBlack_EnvironmentReflections
{
	pass P0
	{
        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = true;
		SrcBlend = SrcAlpha;
		DestBlend = InvSrcAlpha;

		VertexShader = compile vs_1_1 PieceVS( kaBlack, kdBlack, true, true );
		PixelShader  = compile ps_1_4 PiecePS( pieceAlbedo, true, true, reflBlack );
	}
}


technique TBoard_EnvironmentReflections
{
	pass P0
	{
        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = false;

		VertexShader = compile vs_1_1 StandardVS( true, true );
		PixelShader  = compile ps_1_4 BoardPS( true, true );
	}
}


technique TTable_EnvironmentReflections
{
	pass P0
	{
        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = false;

		VertexShader = compile vs_1_1 StandardVS( true, true );
		PixelShader  = compile ps_1_1 TablePS( true, true );
	}
}


technique TTrim_EnvironmentReflections
{
	pass P0
	{
		AlphaBlendEnable = false;

		VertexShader = compile vs_1_1 StandardVS( true, true );
		PixelShader  = compile ps_1_4 TrimPS( true, true );
	}
}


//-----------------------------------------------------------------------------
technique TWhite_Reflections
{
	pass P0
	{
        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = true;
		SrcBlend = SrcAlpha;
		DestBlend = InvSrcAlpha;

		VertexShader = compile vs_1_1 PieceVS( kaWhite, kdWhite, false, true );
		PixelShader  = compile ps_1_1 PiecePS( pieceAlbedo, false, true, reflWhite );
	}
}


technique TBlack_Reflections
{
	pass P0
	{
        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = true;
		SrcBlend = SrcAlpha;
		DestBlend = InvSrcAlpha;

		VertexShader = compile vs_1_1 PieceVS( kaBlack, kdBlack, false, true );
		PixelShader  = compile ps_1_1 PiecePS( pieceAlbedo, false, true, reflBlack );
	}
}


technique TBoard_Reflections
{
	pass P0
	{
        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = false;

		VertexShader = compile vs_1_1 StandardVS( false, true );
		PixelShader  = compile ps_1_4 BoardPS( false, true );
	}
}


technique TTable_Reflections
{
	pass P0
	{
        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = false;

		VertexShader = compile vs_1_1 StandardVS( false, true );
		PixelShader  = compile ps_1_4 TablePS( false, true );
	}
}


technique TTrim_Reflections
{
	pass P0
	{
        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = false;

		VertexShader = compile vs_1_1 StandardVS( false, true );
		PixelShader  = compile ps_1_4 TrimPS( false, true );
	}
}


//-----------------------------------------------------------------------------
technique TWhite_Environment
{
	pass P0
	{
        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = true;
		SrcBlend = SrcAlpha;
		DestBlend = InvSrcAlpha;

		VertexShader = compile vs_1_1 PieceVS( kaWhite, kdWhite, true, false );
		PixelShader  = compile ps_1_4 PiecePS( pieceAlbedo, true, false, reflWhite );
	}
}


technique TBlack_Environment
{
	pass P0
	{
        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = true;
		SrcBlend = SrcAlpha;
		DestBlend = InvSrcAlpha;

		VertexShader = compile vs_1_1 PieceVS( kaBlack, kdBlack, true, false );
		PixelShader  = compile ps_1_4 PiecePS( pieceAlbedo, true, false, reflBlack );
	}
}


technique TBoard_Environment
{
	pass P0
	{
        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = false;

		VertexShader = compile vs_1_1 StandardVS( true, false );
		PixelShader  = compile ps_1_1 BoardPS( true, false );
	}
}


technique TTable_Environment
{
	pass P0
	{
        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = false;

		VertexShader = compile vs_1_1 StandardVS( true, false );
		PixelShader  = compile ps_1_1 TablePS( true, false );
	}
}


technique TTrim_Environment
{
	pass P0
	{
        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = false;

		VertexShader = compile vs_1_1 StandardVS( true, false );
		PixelShader  = compile ps_1_1 TrimPS( true, false );
	}
}


//-----------------------------------------------------------------------------
technique TWhite
{
	pass P0
	{
		WorldTransform[0] = (World);
		ViewTransform = (View);
		ProjectionTransform = (Projection);

		Lighting = true;
		LightEnable[0] = true;
		LightType[0] = Directional;
		LightDirection[0] = (-worldLight);
		LightAmbient[0] = float4( 0, 0, 0, 0 );
		LightDiffuse[0] = float4( 1, 1, 1, 1 );
		LightSpecular[0] = float4( 1, 1, 1, 1 );
		LightEnable[1] = false;

		Ambient = float4( 1, 1, 1, 1 );
		SpecularEnable = true;

		MaterialAmbient = float4( kaWhite, 1 );
		MaterialDiffuse = float4( kdWhite, 1 );
		MaterialSpecular = float4( 0.15, 0.15, 0.15, 1 );
		MaterialPower = 20.0;
		MaterialEmissive = float4( 0, 0, 0, 0 );

//		AmbientMaterialSource = Material;
//		DiffuseMaterialSource = Material;
//		EmissiveMaterialSource = Material;
//		SpecularMaterialSource = Material;

        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = true;
		SrcBlend = SrcAlpha;
		DestBlend = InvSrcAlpha;

		Sampler[0] = (AlbedoSampler);

		TextureFactor = (Alpha.xxxx);

		ColorOp[0] = COLOROP0;
		ColorArg1[0] = Texture;
		ColorArg2[0] = Current;
		ColorOp[1] = Disable;

		AlphaOp[0] = SelectArg1;
		AlphaArg1[0] = TFactor;
		AlphaArg2[0] = Current;
		AlphaOp[1] = Disable;

		VertexShader = null;
		PixelShader  = null;
	}
}


technique TBlack
{
	pass P0
	{
		WorldTransform[0] = (World);
		ViewTransform = (View);
		ProjectionTransform = (Projection);

		Lighting = true;
		LightEnable[0] = true;
		LightType[0] = Directional;
		LightDirection[0] = (-worldLight);
		LightAmbient[0] = float4( 0, 0, 0, 0 );
		LightDiffuse[0] = float4( 1, 1, 1, 1 );
		LightSpecular[0] = float4( 1, 1, 1, 1 );
		LightEnable[1] = false;

		Ambient = float4( 1, 1, 1, 1 );
		SpecularEnable = true;

		MaterialAmbient = float4( kaBlack, 1 );
		MaterialDiffuse = float4( kdBlack, 1 );
		MaterialSpecular = float4( 0.25, 0.25, 0.25, 1 );
		MaterialPower = 20.0;
		MaterialEmissive = float4( 0, 0, 0, 0 );

//		AmbientMaterialSource = Material;
//		DiffuseMaterialSource = Material;
//		EmissiveMaterialSource = Material;
//		SpecularMaterialSource = Material;

        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = true;
		SrcBlend = SrcAlpha;
		DestBlend = InvSrcAlpha;

		Sampler[0] = (AlbedoSampler);

		TextureFactor = (Alpha.xxxx);

		ColorOp[0] = COLOROP0;
		ColorArg1[0] = Texture;
		ColorArg2[0] = Current;
		ColorOp[1] = Disable;

		AlphaOp[0] = SelectArg1;
		AlphaArg1[0] = TFactor;
		AlphaArg2[0] = Current;
		AlphaOp[1] = Disable;

		VertexShader = null;
		PixelShader  = null;
	}
}


technique TBoard
{
	pass P0
	{
		WorldTransform[0] = (World);
		ViewTransform = (View);
		ProjectionTransform = (Projection);

        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = false;

		Sampler[0] = (AlbedoSampler);

		ColorOp[0] = SelectArg1;
		ColorArg1[0] = Texture;
		ColorArg2[0] = Current;
		ColorOp[1] = Disable;

		AlphaOp[0] = Disable;
		AlphaOp[1] = Disable;

		VertexShader = null;
		PixelShader  = null;
	}
}


technique TTable
{
	pass P0
	{
		WorldTransform[0] = (World);
		ViewTransform = (View);
		ProjectionTransform = (Projection);

        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = false;

		Sampler[0] = (AlbedoSampler);

		ColorOp[0] = SelectArg1;
		ColorArg1[0] = Texture;
		ColorArg2[0] = Current;
		ColorOp[1] = Disable;

		AlphaOp[0] = Disable;
		AlphaOp[1] = Disable;

		VertexShader = null;
		PixelShader  = null;
	}
}


technique TTrim
{
	pass P0
	{
		WorldTransform[0] = (World);
		ViewTransform = (View);
		ProjectionTransform = (Projection);

        ZEnable = true;
        ZFunc = LessEqual;
        ZWriteEnable = true;

		AlphaBlendEnable = false;

		TextureFactor = (trimColor.xyzz);

		ColorOp[0] = SelectArg1;
		ColorArg1[0] = TFactor;
		ColorArg2[0] = Current;
		ColorOp[1] = Disable;

		AlphaOp[0] = Disable;
		AlphaOp[1] = Disable;

		VertexShader = null;
		PixelShader  = null;
	}
}
float3 kaWhite = float3( 0.260, 0.260, 0.290 );
float3 kdWhite = float3( 0.820, 0.820, 0.850 );
float reflWhite = 0.33;

float3 kaBlack = float3( 0.200, 0.200, 0.200 );
float3 kdBlack = float3( 0.450, 0.450, 0.450 );
float reflBlack = 0.14;

float environmentTextureAmount = 0.6;

float3 worldLight = float3( 0.259, 0.966, 0 ); // 15 degrees over
float3 trimColor = float3( 0.600, 0.580, 0.500 );


bool pieceAlbedo = true;
#define COLOROP0 Modulate


#include "Media\Shaders\MeshCommon.fx"


float3 kaWhite = float3( 0.317, 0.317, 0.317 );
float3 kdWhite = float3( 0.651, 0.651, 0.651 );
float reflWhite = 0.08;

float3 kaBlack = float3( 0.035, 0.045, 0.055 );
float3 kdBlack = float3( 0.165, 0.165, 0.165 );
float reflBlack = 0.17;

float environmentTextureAmount = 1.0;

float3 worldLight = float3( 0.259, 0.966, 0 ); // 15 degrees over
float3 trimColor = float3( 0.600, 0.580, 0.500 );


bool pieceAlbedo = false;
#define COLOROP0 SelectArg2


#include "Media\Shaders\MeshCommon.fx"


float3 kaWhite = float3( 0.317, 0.317, 0.317 );
float3 kdWhite = float3( 0.800, 0.800, 0.800 );
float reflWhite = 0.10;

float3 kaBlack = float3( 0.320, 0.250, 0.220 );
float3 kdBlack = float3( 1.000, 1.000, 1.000 );
float reflBlack = 0.14;

float environmentTextureAmount = 1.0;

float3 worldLight = float3( 0.259, 0.966, 0 ); // 15 degrees over
float3 trimColor = float3( 0.600, 0.580, 0.500 );


bool pieceAlbedo = true;
#define COLOROP0 Modulate


#include "Media\Shaders\MeshCommon.fx"


float4x4 WorldViewProjInv;
texture SkyBoxTexture;


samplerCUBE SkyBoxSampler = sampler_state
{
	Texture   = (SkyBoxTexture);
	MinFilter = Linear;
	MagFilter = Linear;
	MipFilter = Linear;
};


struct VS_OUTPUT
{
	float4 Position		: POSITION;
	float3 TexCoord		: TEXCOORD0;
};


VS_OUTPUT SkyBoxVS( float4 Pos : POSITION )
{
	VS_OUTPUT Output;

	Output.Position = Pos;
	Output.TexCoord = normalize( mul( Pos, WorldViewProjInv ) );

	return Output;
}


float4 SkyBoxPS( VS_OUTPUT Input ) : COLOR
{
	float3 c = texCUBE( SkyBoxSampler, Input.TexCoord );
	return float4( c, 1 );
}


technique TSkyBox
{
	pass P0
	{
        ZEnable = false;
		AlphaBlendEnable = false;

		VertexShader = compile vs_1_1 SkyBoxVS();
		PixelShader = compile ps_1_1 SkyBoxPS();
	}
}