diff --git a/ATC/default.transmissions b/ATC/default.transmissions
new file mode 100644
index 000000000..5953437e7
--- /dev/null
+++ b/ATC/default.transmissions
@@ -0,0 +1,14 @@
+1 0 -1 0 "@ST approach, @CS, say again please" "Say again"
+1 0 0 1 "@ST approach, @CS, request landing at @AP" "Request landing at @AP"
+1 0 0 2 "@ST approach, @CS, request crossing airspace" "Request crossing airspace of @AP"
+1 0 1 0 "@ST approach, @CS, aborting approach" "Abort approach to @AP"
+1 1 1 0 "@ST approach, @CS, turn @TD heading @HE, @VD @AL feet" ""
+1 0 1 1 "@ST approach, @CS, turning @TD heading @HE, @VD @AL feet" "Read back"
+1 1 2 0 "@ST approach, @CS, turn @TD heading @HE" ""
+1 0 2 1 "@ST approach, @CS, turning @TD heading @HE" "Read back"
+1 1 3 0 "@ST approach, @CS, turn @TD heading @HE, You are cleared for approach to runway @RW" ""
+1 0 3 1 "@ST approach, @CS, turning @TD heading @HE, Cleared to land on runway @RW" "Read back"
+1 1 4 0 "@ST approach, @CS, you are @MI miles off course, turn @TD heading @HE" ""
+1 0 4 1 "@ST approach, @CS, turning @TD heading @HE" "Read back"
+1 1 5 0 "@ST approach, @CS, contact tower on @FR, Good day" ""
+
diff --git a/Aircraft/c172p/c172p.xml b/Aircraft/c172p/c172p.xml
index 0eae36b91..21abd27de 100644
--- a/Aircraft/c172p/c172p.xml
+++ b/Aircraft/c172p/c172p.xml
@@ -778,7 +778,9 @@
aero/qbar-psf
metrics/Sw-sqft
metrics/cbarw-ft
- aero/alpha-rad
+
+ aero/alpha-rad
+
-1.8000
diff --git a/Effects/lightmap.eff b/Effects/lightmap.eff
new file mode 100644
index 000000000..d0fa581f9
--- /dev/null
+++ b/Effects/lightmap.eff
@@ -0,0 +1,145 @@
+
+
+ Effects/lightmap
+
+
+ white
+
+ false
+
+ 1
+
+
+
+
+
+ /sim/rendering/shader-effects
+
+
+ 2.0
+
+
+
+ GL_ARB_shader_objects
+ GL_ARB_shading_language_100
+ GL_ARB_vertex_shader
+ GL_ARB_fragment_shader
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+ linear-mipmap-linear
+ repeat
+ repeat
+
+
+
+
+
+ Shaders/lightmap.vert
+ Shaders/lightmap.frag
+
+
+ texture
+ sampler-2d
+ 0
+
+
+ lightmap_texture
+ sampler-2d
+ 1
+
+
+ colorMode
+ int
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+ modulate
+
+
+
+
+
+
diff --git a/Shaders/lightmap.frag b/Shaders/lightmap.frag
new file mode 100644
index 000000000..6296c18c0
--- /dev/null
+++ b/Shaders/lightmap.frag
@@ -0,0 +1,56 @@
+// -*-C++-*-
+
+// Ambient term comes in gl_Color.rgb.
+//
+// See http://wiki.flightgear.org/index.php/Howto:_Lightmap for details on
+// how to use it.
+
+varying vec4 diffuse_term;
+varying vec3 normal;
+varying float fogCoord;
+
+uniform sampler2D texture;
+uniform sampler2D lightmap_texture;
+
+float luminance(vec3 color)
+{
+ return dot(vec3(0.212671, 0.715160, 0.072169), color);
+}
+
+void main()
+{
+ vec3 n, halfV;
+ float NdotL, NdotHV, fogFactor;
+ vec4 color = gl_Color;
+ vec3 lightDir = gl_LightSource[0].position.xyz;
+ vec3 halfVector = gl_LightSource[0].halfVector.xyz;
+ vec4 texel;
+ vec4 fragColor;
+ vec4 specular = vec4(0.0);
+ n = normalize(normal);
+ // If gl_Color.a == 0, this is a back-facing polygon and the
+ // normal should be reversed.
+
+ n = (2.0 * gl_Color.a - 1.0) * n;
+ NdotL = max(dot(n, lightDir), 0.0);
+ if (NdotL > 0.0) {
+ color += diffuse_term * NdotL;
+ halfV = halfVector;
+ NdotHV = max(dot(n, halfV), 0.0);
+ if (gl_FrontMaterial.shininess > 0.0)
+ specular.rgb = (gl_FrontMaterial.specular.rgb
+ * gl_LightSource[0].specular.rgb
+ * pow(NdotHV, gl_FrontMaterial.shininess));
+ }
+ color.a = diffuse_term.a;
+ // This shouldn't be necessary, but our lighting becomes very
+ // saturated. Clamping the color before modulating by the texture
+ // is closer to what the OpenGL fixed function pipeline does.
+ color = clamp(color, 0.0, 1.0);
+ texel = texture2D(texture, gl_TexCoord[0].st);
+ fragColor = color * texel + specular;
+ vec3 lightmapTexel = texture2D(lightmap_texture, gl_TexCoord[0].st).rgb;
+ fragColor.rgb = max(fragColor.rgb, lightmapTexel * gl_FrontMaterial.diffuse.rgb * texel.rgb);
+ fogFactor = exp(-gl_Fog.density * gl_Fog.density * fogCoord * fogCoord);
+ gl_FragColor = mix(gl_Fog.color, fragColor, fogFactor);
+}
\ No newline at end of file
diff --git a/Shaders/lightmap.vert b/Shaders/lightmap.vert
new file mode 100644
index 000000000..19f1ddc2d
--- /dev/null
+++ b/Shaders/lightmap.vert
@@ -0,0 +1,58 @@
+// -*-C++-*-
+
+// Shader that uses OpenGL state values to do per-pixel lighting
+//
+// The only light used is gl_LightSource[0], which is assumed to be
+// directional.
+//
+// Diffuse colors come from the gl_Color, ambient from the material. This is
+// equivalent to osg::Material::DIFFUSE.
+//
+// See http://wiki.flightgear.org/index.php/Howto:_Lightmap for details on
+// how to use it.
+
+#define MODE_OFF 0
+#define MODE_DIFFUSE 1
+#define MODE_AMBIENT_AND_DIFFUSE 2
+
+// The constant term of the lighting equation that doesn't depend on
+// the surface normal is passed in gl_{Front,Back}Color. The alpha
+// component is set to 1 for front, 0 for back in order to work around
+// bugs with gl_FrontFacing in the fragment shader.
+varying vec4 diffuse_term;
+varying vec3 normal;
+varying float fogCoord;
+uniform int colorMode;
+
+void main()
+{
+ vec4 ecPosition = gl_ModelViewMatrix * gl_Vertex;
+ gl_Position = ftransform();
+ gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
+ normal = gl_NormalMatrix * gl_Normal;
+ vec4 ambient_color, diffuse_color;
+ if (colorMode == MODE_DIFFUSE) {
+ diffuse_color = gl_Color;
+ ambient_color = gl_FrontMaterial.ambient;
+ } else if (colorMode == MODE_AMBIENT_AND_DIFFUSE) {
+ diffuse_color = gl_Color;
+ ambient_color = gl_Color;
+ } else {
+ diffuse_color = gl_FrontMaterial.diffuse;
+ ambient_color = gl_FrontMaterial.ambient;
+ }
+ diffuse_term = diffuse_color * gl_LightSource[0].diffuse;
+ vec4 constant_term = gl_FrontMaterial.emission + ambient_color *
+ (gl_LightModel.ambient + gl_LightSource[0].ambient);
+ // Super hack: if diffuse material alpha is less than 1, assume a
+ // transparency animation is at work
+ if (gl_FrontMaterial.diffuse.a < 1.0)
+ diffuse_term.a = gl_FrontMaterial.diffuse.a;
+ else
+ diffuse_term.a = gl_Color.a;
+ // Another hack for supporting two-sided lighting without using
+ // gl_FrontFacing in the fragment shader.
+ gl_FrontColor.rgb = constant_term.rgb; gl_FrontColor.a = 1.0;
+ gl_BackColor.rgb = constant_term.rgb; gl_BackColor.a = 0.0;
+ fogCoord = abs(ecPosition.z / ecPosition.w);
+}
diff --git a/materials.xml b/materials.xml
index ab5264a26..17d8cdb0a 100644
--- a/materials.xml
+++ b/materials.xml
@@ -960,14 +960,14 @@ Shared parameters for various materials.
5000