Index: binaries/data/mods/public/shaders/glsl/water_high.fs
===================================================================
--- binaries/data/mods/public/shaders/glsl/water_high.fs (révision 12246)
+++ binaries/data/mods/public/shaders/glsl/water_high.fs (copie de travail)
@@ -1,6 +1,7 @@
#version 110
-uniform vec3 ambient;
+//uniform vec3 ambient;
+uniform vec3 color;
uniform vec3 sunDir;
uniform vec3 sunColor;
uniform vec3 cameraPos;
@@ -13,15 +14,70 @@
uniform float waviness; // "Wildness" of the reflections and refractions; choose based on texture
uniform vec3 tint; // Tint for refraction (used to simulate particles in water)
uniform float murkiness; // Amount of tint to blend in with the refracted colour
-uniform float fullDepth; // Depth at which to use full murkiness (shallower water will be clearer)
uniform vec3 reflectionTint; // Tint for reflection (used for really muddy water)
uniform float reflectionTintStrength; // Strength of reflection tint (how much of it to mix in)
+uniform vec2 screenSize;
+uniform float time;
+
+#if USE_SUPERFANCYWATER
+ uniform sampler2D heightmap;
+ uniform sampler2D infoTex;
+ uniform sampler2D normalMap2;
+ uniform sampler2D Foam;
+ uniform sampler2D depthTex;
+ uniform sampler2D waveTex;
+
+ #if USE_SHADOW
+ #if USE_SHADOW_SAMPLER
+ uniform sampler2DShadow shadowTex;
+ #if USE_SHADOW_PCF
+ uniform vec4 shadowScale;
+ #endif
+ #else
+ uniform sampler2D shadowTex;
+ #endif
+ #endif
+#endif
+
varying vec3 worldPos;
varying float waterDepth;
+varying vec4 v_shadow;
+#if USE_SUPERFANCYWATER
+float get_shadow(vec4 coords)
+{
+ #if USE_SHADOW && !DISABLE_RECEIVE_SHADOWS
+ #if USE_SHADOW_SAMPLER
+ #if USE_SHADOW_PCF
+ vec2 offset = fract(coords.xy - 0.5);
+ vec4 size = vec4(offset + 1.0, 2.0 - offset);
+ vec4 weight = (vec4(2.0 - 1.0 / size.xy, 1.0 / size.zw - 1.0) + (coords.xy - offset).xyxy) * shadowScale.zwzw;
+ return (1.0/9.0)*dot(size.zxzx*size.wwyy,
+ vec4(shadow2D(shadowTex, vec3(weight.zw, coords.z)).r,
+ shadow2D(shadowTex, vec3(weight.xw, coords.z)).r,
+ shadow2D(shadowTex, vec3(weight.zy, coords.z)).r,
+ shadow2D(shadowTex, vec3(weight.xy, coords.z)).r));
+ #else
+ return shadow2D(shadowTex, coords.xyz).r;
+ #endif
+ #else
+ if (coords.z >= 1.0)
+ return 1.0;
+ return (coords.z <= texture2D(shadowTex, coords.xy).x ? 1.0 : 0.0);
+ #endif
+ #else
+ return 1.0;
+ #endif
+}
+#endif
void main()
{
+ #if USE_SUPERFANCYWATER
+ vec4 heightmapval = texture2D(heightmap, gl_TexCoord[3].zw);
+ vec2 beachOrientation = heightmapval.rb - vec2(0.5,0.5);
+ float distToShore = heightmapval.a;
+ #endif
vec3 n, l, h, v; // Normal, light vector, half-vector and view vector (vector to eye)
float ndotl, ndoth, ndotv;
float fresnel;
@@ -30,34 +86,126 @@
vec3 reflColor, refrColor, specular;
float losMod;
- n = normalize(texture2D(normalMap, gl_TexCoord[0].st).xzy - vec3(0.5, 0.5, 0.5));
+ vec3 ww = texture2D(normalMap, (gl_TexCoord[0].st) * mix(2.0,0.8,waviness/10.0) +gl_TexCoord[0].zw).xzy;
+ #if USE_SUPERFANCYWATER
+ vec3 ww2 = texture2D(normalMap2, (gl_TexCoord[0].st) * mix(2.0,0.8,waviness/10.0) +gl_TexCoord[0].zw).xzy;
+ ww = mix(ww, ww2, mod(time * 60.0, 8.0) / 8.0);
+ vec3 waves = texture2D(waveTex, gl_FragCoord.xy/screenSize).rbg - vec3(0.5,0.5,0.5);
+ float waveFoam = 0.0;//texture2D(waveTex, gl_FragCoord.xy/screenSize).a;
+ n = normalize(mix(waves, ww - vec3(0.5, 0.5, 0.5) , clamp(distToShore*4.0,0.4,1.0)));
+ #else
+ n = normalize(ww - vec3(0.5, 0.5, 0.5));
+ #endif
+
+ float wavyFactor = waviness * 0.125;
+
+ n = mix(vec3(0.0,1.0,0.0),n,wavyFactor);
+
l = -sunDir;
v = normalize(cameraPos - worldPos);
h = normalize(l + v);
- ndotl = dot(n, l);
+ ndotl = (dot(n, l) + 1.0) /2.0;
ndoth = dot(n, h);
ndotv = dot(n, v);
+
+ #if USE_SUPERFANCYWATER
+ // Don't change these two. They should match the values in the config (TODO: dec uniforms).
+ float zNear = 2.0;
+ float zFar = 4096.0;
- fresnel = pow(1.0 - ndotv, 0.8); // A rather random Fresnel approximation
+ // Okay so here it's a tad complicated. I want to distort the depth buffer along the waves for a nice effect.
+ // However this causes a problem around underwater objects (think fishes): on some pixels, the depth will be seen as the same as the fishes'
+ // and the color will be grass ( cause I don't distort the refraction coord by exactly the same stuff)
+ // Also, things like towers with the feet in water would cause the buffer to see the depth as actually negative in some places.
+ // So what I do is first check the undistorted depth, then I compare with the distorted value and fix.
+ float water_b = gl_FragCoord.z;
+ float water_n = 2.0 * water_b - 1.0;
+ float waterDBuffer = 2.0 * zNear * zFar / (zFar + zNear - water_n * (zFar - zNear));
- refrCoords = (0.5*gl_TexCoord[2].xy - 0.8*waviness*n.xz) / gl_TexCoord[2].w + 0.5; // Unbias texture coords
- reflCoords = (0.5*gl_TexCoord[1].xy + waviness*n.xz) / gl_TexCoord[1].w + 0.5; // Unbias texture coords
+ float undistortedBuffer = texture2D(depthTex, (gl_FragCoord.xy) / screenSize).x;
+
+ float undisto_z_b = texture2D(depthTex, (gl_FragCoord.xy) / screenSize).x;
+ float undisto_z_n = 2.0 * undisto_z_b - 1.0;
+ float waterDepth_undistorted = (2.0 * zNear * zFar / (zFar + zNear - undisto_z_n * (zFar - zNear)) - waterDBuffer);
+
+ vec2 depthCoord = clamp((gl_FragCoord.xy) / screenSize - n.xz*clamp( waterDepth_undistorted/400.0,0.0,0.05) , 0.001, 0.999);
- reflColor = mix(texture2D(reflectionMap, reflCoords).rgb, sunColor * reflectionTint,
- reflectionTintStrength);
+ float z_b = texture2D(depthTex, depthCoord).x;
+
+ if (z_b < undisto_z_b)
+ z_b = undisto_z_b;
+ float z_n = 2.0 * z_b - 1.0;
+ float waterDepth2 = (2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear)) - waterDBuffer);
- refrColor = (0.5 + 0.5*ndotl) * mix(texture2D(refractionMap, refrCoords).rgb, sunColor * tint,
- murkiness * clamp(waterDepth / fullDepth, 0.0, 1.0)); // Murkiness and tint at this pixel (tweaked based on lighting and depth)
+ float distoFactor = clamp(waterDepth2/10.0,0.0,7.0);
+ #endif
- specular = pow(max(0.0, ndoth), shininess) * sunColor * specularStrength;
+ fresnel = pow(1.0 - ndotv, 1.3333);// approximation
+
+ #if USE_SUPERFANCYWATER
+ // texture is rotated 90°, moves slowly.
+ vec2 foam1RC = vec2(-gl_TexCoord[0].t,gl_TexCoord[0].s)*1.3 - 0.012*n.xz + vec2(time*0.004,time*0.003);
+ // texture is not rotated, moves twice faster in the opposite direction, translated.
+ vec2 foam2RC = gl_TexCoord[0].st*1.8 + vec2(time*-0.019,time*-0.012) - 0.012*n.xz + vec2(0.4,0.2);
+
+ vec2 WaveRocking = cos(time*1.2566) * beachOrientation * clamp(1.0 - distToShore*2.0,0.1,1.0)/3.0;
+ vec4 foam1 = texture2D(Foam, foam1RC + vec2(-WaveRocking.t,WaveRocking.s));
+ vec4 foam2 = foam1.r*texture2D(Foam, foam2RC + WaveRocking);
+
+ vec3 finalFoam = min((foam2).rrr * texture2D(infoTex,gl_TexCoord[3].zw).g,1.0);
+
+ if ((1.0 - finalFoam.r) >= wavyFactor)
+ finalFoam = vec3(0.0);
+
+ // waves bypass the regular foam restrictions.
+ finalFoam += min( max(0.0,-waves.b) * texture2D(Foam, foam1RC).r, 1.0)*5.0 * max(0.0,wavyFactor-0.1);
+ finalFoam *= sunColor;
+ #endif
+
+ #if USE_SUPERFANCYWATER
+ refrCoords = clamp( (0.5*gl_TexCoord[2].xy - n.xz * distoFactor) / gl_TexCoord[2].w + 0.5,0.0,1.0); // Unbias texture coords
+ #else
+ refrCoords = clamp( (0.5*gl_TexCoord[2].xy - n.xz * 6.0) / gl_TexCoord[2].w + 0.5,0.0,1.0); // Unbias texture coords
+ #endif
+
+ reflCoords = clamp( (0.5*gl_TexCoord[1].xy + 10.0*n.xz) / gl_TexCoord[1].w + 0.5,0.0,1.0); // Unbias texture coords
+ reflColor = mix(texture2D(reflectionMap, reflCoords).rgb, sunColor * reflectionTint, reflectionTintStrength);
+
+ #if USE_SUPERFANCYWATER
+ vec3 refColor = texture2D(refractionMap, refrCoords).rgb;
+ float luminance = (1.0 - clamp((waterDepth2/mix(300.0,1.0, pow(murkiness,0.2) )), 0.0, 1.0));
+ float colorExtinction = clamp(waterDepth2*murkiness/5.0,0.0,1.0);
+ refrColor = (0.5 + 0.5*ndotl) * mix(color,mix(refColor,refColor*tint,colorExtinction),luminance*luminance);
+ #else
+ // fake it. It won't look as good but it will give a similar result.
+ float perceivedDepth = waterDepth / v.y;
+ vec3 refColor = texture2D(refractionMap, refrCoords).rgb;
+ float luminance = (1.0 - clamp((perceivedDepth/mix(300.0,1.0, pow(murkiness,0.2) )), 0.0, 1.0));
+ float colorExtinction = clamp(perceivedDepth*murkiness/5.0,0.0,1.0);
+ refrColor = (0.5 + 0.5*ndotl) * mix(color,mix(refColor,refColor*tint,colorExtinction),luminance*luminance);
+ #endif
+ specular = pow(ndoth, shininess) * sunColor * specularStrength;
losMod = texture2D(losMap, gl_TexCoord[3].st).a;
- gl_FragColor.rgb = mix(refrColor + 0.3*specular, reflColor + specular, fresnel) * losMod;
+ #if USE_SUPERFANCYWATER
+ float shadow = get_shadow(vec4(v_shadow.xy - 8.0*waviness*n.xz, v_shadow.zw));
+ float fresShadow = mix(fresnel, fresnel*shadow, 0.05 + (murkiness * 0.15));
+ vec3 colour = mix(refrColor*(shadow/5.0 + 0.8) + fresnel*shadow*specular, reflColor + fresnel*shadow*specular, fresShadow) + max(ndotl,0.4)*(finalFoam)*(shadow/2.0 + 0.5);
+ colour = mix( texture2D(refractionMap, (0.5*gl_TexCoord[2].xy) / gl_TexCoord[2].w + 0.5).rgb ,colour, clamp(waterDepth2,0.0,1.0));
+ #else
+ vec3 colour = mix(refrColor + fresnel*specular, reflColor + fresnel*specular, fresnel);
+ #endif
+
+ gl_FragColor.rgb = colour * losMod;
- // Make alpha vary based on both depth (so it blends with the shore) and view angle (make it
- // become opaque faster at lower view angles so we can't look "underneath" the water plane)
- t = 18.0 * max(0.0, 0.7 - v.y);
- gl_FragColor.a = 0.15 * waterDepth * (1.2 + t + fresnel);
+ #if USE_SUPERFANCYWATER
+ gl_FragColor.a = clamp(distToShore-0.012,waterDepth2/2.0,1.0) + finalFoam.r;
+ #else
+ // Make alpha vary based on both depth (so it blends with the shore) and view angle (make it
+ // become opaque faster at lower view angles so we can't look "underneath" the water plane)
+ t = 18.0 * max(0.0, 0.9 - v.y);
+ gl_FragColor.a = clamp(0.15 * waterDepth * (1.2 + t + fresnel),0.0,1.0);
+ #endif
}
Index: binaries/data/mods/public/shaders/glsl/water_high.vs
===================================================================
--- binaries/data/mods/public/shaders/glsl/water_high.vs (révision 12246)
+++ binaries/data/mods/public/shaders/glsl/water_high.vs (copie de travail)
@@ -3,23 +3,43 @@
uniform mat4 reflectionMatrix;
uniform mat4 refractionMatrix;
uniform mat4 losMatrix;
+uniform mat4 shadowTransform;
uniform float repeatScale;
uniform vec2 translation;
+uniform float waviness; // "Wildness" of the reflections and refractions; choose based on texture
+#if USE_SHADOW_SAMPLER && USE_SHADOW_PCF
+ uniform vec4 shadowScale;
+#endif
+
+uniform float time;
+uniform float mapSize;
+
varying vec3 worldPos;
varying float waterDepth;
+varying vec4 v_shadow;
attribute vec3 a_vertex;
attribute vec4 a_encodedDepth;
void main()
{
- worldPos = a_vertex.xyz;
+ worldPos = a_vertex;
waterDepth = dot(a_encodedDepth.xyz, vec3(255.0, -255.0, 1.0));
- gl_TexCoord[0].st = a_vertex.xz*repeatScale + translation;
+
+ gl_TexCoord[0] = vec4(a_vertex.xz*repeatScale,translation);
gl_TexCoord[1] = reflectionMatrix * vec4(a_vertex, 1.0); // projective texturing
gl_TexCoord[2] = refractionMatrix * vec4(a_vertex, 1.0);
gl_TexCoord[3] = losMatrix * vec4(a_vertex, 1.0);
+ gl_TexCoord[3].zw = vec2(a_vertex.xz)/mapSize;
+
+ #if USE_SHADOW && USE_SUPERFANCYWATER
+ v_shadow = shadowTransform * vec4(a_vertex, 1.0);
+ #if USE_SHADOW_SAMPLER && USE_SHADOW_PCF
+ v_shadow.xy *= shadowScale.xy;
+ #endif
+ #endif
+
gl_Position = gl_ModelViewProjectionMatrix * vec4(a_vertex, 1.0);
}
Index: binaries/data/mods/public/shaders/glsl/waves.fs
===================================================================
--- binaries/data/mods/public/shaders/glsl/waves.fs (révision 0)
+++ binaries/data/mods/public/shaders/glsl/waves.fs (copie de travail)
@@ -0,0 +1,24 @@
+#version 110
+
+uniform sampler2D waveTex;
+uniform sampler2D infoTex;
+
+uniform float time;
+uniform float waviness;
+
+void main()
+{
+ vec3 color = texture2D(waveTex, gl_TexCoord[0].st * vec2(2.0,4.0) - vec2(0.0,0.5 + time/5.0)).rgb;
+ float split = abs(gl_TexCoord[0].x - 0.5);
+ split = 0.48 - split;
+ split *= 3.0;
+ split = min(1.0,split);
+
+ float opac = split*min(1.0, gl_TexCoord[0].y);
+ opac *= 1.0 - max(0.0,gl_TexCoord[0].y-0.9)*10.0;
+ color = mix(vec3(0.5,0.5,1.0),color, opac);
+
+ gl_FragColor.rgb = mix(vec3(0.5,0.5,1.0), color, clamp(texture2D(infoTex,gl_TexCoord[0].zw).r,0.4,1.0));
+
+ gl_FragColor.a = 1.0;
+}
Index: binaries/data/mods/public/shaders/glsl/waves.vs
===================================================================
--- binaries/data/mods/public/shaders/glsl/waves.vs (révision 0)
+++ binaries/data/mods/public/shaders/glsl/waves.vs (copie de travail)
@@ -0,0 +1,13 @@
+#version 110
+
+attribute vec3 a_vertex;
+attribute vec2 a_uv0;
+
+uniform float mapSize;
+
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * vec4(a_vertex, 1.0);
+ gl_TexCoord[0].st = a_uv0;
+ gl_TexCoord[0].zw = vec2(a_vertex.xz)/mapSize;
+}
Index: binaries/data/mods/public/shaders/glsl/waves.xml
===================================================================
--- binaries/data/mods/public/shaders/glsl/waves.xml (révision 0)
+++ binaries/data/mods/public/shaders/glsl/waves.xml (copie de travail)
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: binaries/data/mods/public/maps/scenarios/waterTest.pmp
===================================================================
Impossible d'afficher : fichier considéré comme binaire.
svn:mime-type = application/octet-stream
Index: binaries/data/mods/public/maps/scenarios/waterTest.pmp
===================================================================
--- binaries/data/mods/public/maps/scenarios/waterTest.pmp (révision 12246)
+++ binaries/data/mods/public/maps/scenarios/waterTest.pmp (copie de travail)
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: binaries/data/mods/public/maps/scenarios/waterTest.xml
===================================================================
--- binaries/data/mods/public/maps/scenarios/waterTest.xml (révision 0)
+++ binaries/data/mods/public/maps/scenarios/waterTest.xml (copie de travail)
@@ -0,0 +1,2128 @@
+
+
+
+
+ standard
+ default
+
+
+
+
+
+
+
+ default
+
+ 51.2
+ 111.572
+ 5.52734
+ 0.476562
+
+
+ 0.310547
+
+
+
+
+
+
+
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ structures/hele_defense_tower
+ 0
+
+
+
+
+ structures/hele_defense_tower
+ 0
+
+
+
+
+ structures/celt_defense_tower
+ 0
+
+
+
+
+ gaia/fauna_fish_tuna
+ 0
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_tall
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_cretan_date_palm_short
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_tree_senegal_date_palm
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ gaia/flora_bush_badlands
+ 0
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|props/flora/grass_tropical.xml
+
+
+
+
+ actor|fauna/fish.xml
+
+
+
+
+ actor|fauna/fish.xml
+
+
+
+
+ actor|fauna/fish.xml
+
+
+
+
+ actor|fauna/fish.xml
+
+
+
+
+ actor|fauna/fish.xml
+
+
+
+
+ actor|fauna/fish.xml
+
+
+
+
+ actor|fauna/fish.xml
+
+
+
+
+ actor|fauna/fish.xml
+
+
+
+
+ actor|fauna/shark.xml
+
+
+
+
+ actor|fauna/shark.xml
+
+
+
+
+ actor|fauna/shark.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+ actor|geology/gray_rock1.xml
+
+
+
+
+
+
Index: binaries/data/mods/public/gui/session/session.xml
===================================================================
--- binaries/data/mods/public/gui/session/session.xml (révision 12246)
+++ binaries/data/mods/public/gui/session/session.xml (copie de travail)
@@ -228,77 +228,84 @@
-