   uniform mediump vec2 uTextureDimensions;
 
   void main(void) {
-    highp vec2 coord = vTextureCoord.xy / uTextureDimensions;
+    highp vec2 coord =   vTextureCoord.xy / uTextureDimensions;
     mediump vec4 texelColor = texture2D(uSampler, coord);
+    mediump vec4 finalColor = vec4(texelColor.rgb*texelColor.a*vTextureCoord.z, texelColor.a*vTextureCoord.z);
 
-    gl_FragColor = texelColor;
+    vec4 scaledColor = finalColor * vec4(0.3, 0.59, 0.11, 1.0);
+    float luminance = scaledColor.r + scaledColor.g + scaledColor.b;
+    //gl_FragColor = vec4( luminance, luminance, luminance, finalColor.a);
+    gl_FragColor = finalColor;
   }
 """
 
-COLOR_OVERRIDE_SHADER_ATTRIBUTE_LIST = [
-  { name: "aPosition", width: 2 },
-  { name: "aTextureCoord", width: 2 },
-  { name: "aColor", width: 4 }
+IMAGE_EFFECT_ATTRIBUTE_LIST = [
+  { name: "aPosition",     width: 2 }
+  { name: "aOrientation",  width: 3 }
+  { name: "aLayer",        width: 2 }
+  { name: "aTextureCoord", width: 2 }
 ]
-
 
 class Game.Scripts.Test extends Game.LazerScript
   metadata:

Game = @Game
Game.Scripts ||= {}

DEFAULT_TEXTURE_VERTEX_SHADER = """
  attribute vec2 aPosition;
  attribute vec2 aTextureCoord;
  attribute vec4 aColor;

  varying mediump vec3 vTextureCoord;
  varying lowp vec4 vColor;
  uniform mediump vec2 uTextureDimensions;

  void main() {
    gl_Position = vec4(aPosition, 1, 1);
    vTextureCoord = vec3(aTextureCoord, 1);
    vColor = aColor;
  }
"""

COLOR_OVERRIDE_FRAGMENT_SHADER = """
  precision mediump float;
  varying mediump vec3 vTextureCoord;


        z: -600
      )
    try
      Crafty.e('2D, WebGL, ImageWithEffects')
        .image('images/horizon-city.png')
        .colorShader('#FFFFFF')
        .attr(
