Index: branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc	(revision 7691)
+++ branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc	(revision 7696)
@@ -62,6 +62,6 @@
 {
 	//default values
-	this->fogMode = GL_LINEAR;
-	this->fogDensity = 0.1;
+	this->fogMode = GL_EXP2;
+	this->fogDensity = 0.001;
 	this->fogStart = 0;
 	this->fogEnd = 5000;
Index: branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc	(revision 7691)
+++ branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc	(revision 7696)
@@ -24,9 +24,10 @@
 #include "spark_particles.h"
 #include "plane_emitter.h"
+#include "shell_command.h"
 
 #include "parser/tinyxml/tinyxml.h"
 
-//SHELL_COMMAND(activate, RainEffect, activateRain);
-//SHELL_COMMAND(deactivate, RainEffect, deactivateRain);
+SHELL_COMMAND(activate, RainEffect, activateRain);
+SHELL_COMMAND(deactivate, RainEffect, deactivateRain);
 
 using namespace std;
@@ -43,8 +44,15 @@
 		this->loadParams(root);
 
-	//load sound
+	//load rain sound
 	if (this->rainBuffer != NULL)
 		ResourceManager::getInstance()->unload(this->rainBuffer);
 	this->rainBuffer = (SoundBuffer*)ResourceManager::getInstance()->load("sound/rain.wav", WAV);
+
+	//load wind sound
+	if (this->rainWindForce > 0) {
+		if (this->windBuffer != NULL)
+			ResourceManager::getInstance()->unload(this->windBuffer);
+		this->windBuffer = (SoundBuffer*)ResourceManager::getInstance()->load("sound/wind.wav", WAV);
+	}
 
 	this->activate();
@@ -54,4 +62,10 @@
 {
 	this->deactivate();
+
+	if (this->rainBuffer != NULL)
+		ResourceManager::getInstance()->unload(this->rainBuffer);
+
+	if (this->windBuffer != NULL)
+		ResourceManager::getInstance()->unload(this->windBuffer);
 }
 
@@ -114,7 +128,8 @@
 
 	this->emitter->setSpread(this->rainWindForce / 50, 0.2);
-
+	
 	this->soundSource.loop(this->rainBuffer);
-	PRINTF(0)( "Playing RainSound\n" );
+	if (this->rainWindForce > 0)
+		this->soundSource.loop(this->windBuffer);
 }
 
@@ -123,7 +138,19 @@
 {
 	PRINTF(0)("Deactivating RainEffect\n");
+	this->emitter->setSystem(NULL);
 
-	this->emitter->setSystem(NULL);
+	this->soundSource.stop();
 }
+
+void RainEffect::activateRain()
+{
+	this->activate();
+}
+
+void RainEffect::deactivateRain()
+{
+	this->deactivate();
+}
+
 
 void RainEffect::tick (float dt)
Index: branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.h
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.h	(revision 7691)
+++ branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.h	(revision 7696)
@@ -34,4 +34,7 @@
 		virtual bool deactivate();
 
+		void activateRain();
+		void deactivateRain();
+
 		virtual void tick(float dt);
 
@@ -60,4 +63,5 @@
 		SoundSource												soundSource;
 		SoundBuffer*											rainBuffer;
+		SoundBuffer*											windBuffer;
 };
 
Index: branches/atmospheric_engine/src/lib/graphics/effects/snow_effect.cc
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/snow_effect.cc	(revision 7691)
+++ branches/atmospheric_engine/src/lib/graphics/effects/snow_effect.cc	(revision 7696)
@@ -17,4 +17,5 @@
 #include "util/loading/load_param.h"
 #include "util/loading/factory.h"
+#include "util/loading/resource_manager.h"
 
 #include "glincl.h"
@@ -44,4 +45,11 @@
 	if (root != NULL)
 		this->loadParams(root);
+
+	//load wind sound
+	if (this->snowWindForce > 1) {
+		if (this->windBuffer != NULL)
+			ResourceManager::getInstance()->unload(this->windBuffer);
+		this->windBuffer = (SoundBuffer*)ResourceManager::getInstance()->load("sound/wind.wav", WAV);
+	}
 
 	this->activate();
@@ -77,22 +85,23 @@
 
 	// Default values
-	particles = 12000;
-	texture = "maps/snow_flake_01_32x32.png";
-	life = 8;
-	randomLife = 2;
-	snowRadius = 3.5;
-	randomRadius = 1;
-	snowMass = 1.0;
-	randomMass = 0.3;
-	rate = 900;
-	velocity = -100;
-	randomVelocity = 5;
-	angle = 0.5;
-	randomAngle = 0.2;
-	alpha = 0.5;
-	snowSize = Vector2D(2500, 2500);
-  snowCoord = Vector(100,450,400);
-
-	activated = false;
+	this->particles = 12000;
+	this->texture = "maps/snow_flake_01_32x32.png";
+	this->life = 8;
+	this->randomLife = 2;
+	this->snowRadius = 3.5;
+	this->randomRadius = 1;
+	this->snowMass = 1.0;
+	this->randomMass = 0.3;
+	this->rate = 900;
+	this->velocity = -100;
+	this->randomVelocity = 5;
+	this->angle = 0.5;
+	this->randomAngle = 0.2;
+	this->alpha = 0.5;
+	this->snowSize = Vector2D(2500, 2500);
+  this->snowCoord = Vector(100,450,400);
+	this->snowWindForce = 1;
+
+	this->activated = false;
 }
 
@@ -119,8 +128,11 @@
 	this->emitter->setEmissionRate(rate);
 	this->emitter->setEmissionVelocity(velocity, randomVelocity);
-	this->emitter->setSpread(angle, randomAngle);
+	this->emitter->setSpread(angle * this->snowWindForce , randomAngle * this->snowWindForce);
 	this->emitter->setSize(snowSize);
-  
+
   //SnowEffect::snowParticles->precache(8);
+
+	if (this->snowWindForce > 1)
+		this->soundSource.loop(this->windBuffer);
 }
 
@@ -132,4 +144,8 @@
 
 	this->emitter->setSystem(NULL);
+
+	if (this->windBuffer != NULL)
+		ResourceManager::getInstance()->unload(this->windBuffer);
+
 }
 
Index: branches/atmospheric_engine/src/lib/graphics/effects/snow_effect.h
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/snow_effect.h	(revision 7691)
+++ branches/atmospheric_engine/src/lib/graphics/effects/snow_effect.h	(revision 7696)
@@ -16,4 +16,7 @@
 class PlaneEmitter;
 class PNode;
+
+#include "sound_buffer.h"
+#include "sound_source.h"
 
 class SnowEffect : public WeatherEffect
@@ -36,33 +39,38 @@
 		void deactivateSnow();
 
+		inline void numParticles(int n) { this->particles = n; }
+		inline void materialTexture(const std::string& texture) { this->texture = texture; }
+		inline void lifeSpan(float lifeSpan, float randomLifeSpan) { this->life = lifeSpan; this->randomLife = randomLifeSpan; }
+		inline void radius(float radius, float randomRadius) { this->snowRadius = radius; this->randomRadius = randomRadius; }
+		inline void mass(float mass, float randomMass) { this->snowMass = mass; this->randomMass = randomMass; }
+		inline void emissionRate(float emissionRate){ this->rate = emissionRate; }
+		inline void emissionVelocity(float velocity, float randomVelocity){ this->velocity = velocity; this->randomVelocity = randomVelocity; }
+		inline void size(float sizeX, float sizeY) { this->snowSize = Vector2D(sizeX, sizeY); }
+		inline void coord(float x, float y, float z) { this->snowCoord = Vector(x, y, z); }
+    inline void wind(int force) { this->snowWindForce = force; }
+
+
 	private:
-		void numParticles(int n) { this->particles = n; }
-		void materialTexture(const std::string& texture) { this->texture = texture; }
-		void lifeSpan(float lifeSpan, float randomLifeSpan) { this->life = lifeSpan; this->randomLife = randomLifeSpan; }
-		void radius(float radius, float randomRadius) { this->snowRadius = radius; this->randomRadius = randomRadius; }
-		void mass(float mass, float randomMass) { this->snowMass = mass; this->randomMass = randomMass; }
-		void emissionRate(float emissionRate){ this->rate = emissionRate; }
-		void emissionVelocity(float velocity, float randomVelocity){ this->velocity = velocity; this->randomVelocity = randomVelocity; }
-		void size(float sizeX, float sizeY) { this->snowSize = Vector2D(sizeX, sizeY); }
-		void coord(float x, float y, float z) { this->snowCoord = Vector(x, y, z); }
-    void wind(int force) { this->angle = angle*force; this->randomAngle = randomAngle*force; }
+		int 																particles;
+		std::string 												texture;
+		float 															life, randomLife;
+		float																snowRadius, randomRadius;
+		float																snowMass, randomMass;
+		float 															rate;
+		float 															velocity, randomVelocity;
+		float 															angle, randomAngle;
+		float 															alpha;
+		Vector 															snowCoord;
+		Vector2D 														snowSize;
+		int																	snowWindForce;
 
-		int particles;
-		std::string texture;
-		float life, randomLife;
-		float snowRadius, randomRadius;
-		float snowMass, randomMass;
-		float rate;
-		float velocity, randomVelocity;
-		float angle, randomAngle;
-		float alpha;
-		Vector snowCoord;
-		Vector2D snowSize;
+		bool																activated;
 
-		bool activated;
+		PlaneEmitter*												emitter;
 
-		static SpriteParticles* snowParticles;
+		static SpriteParticles* 						snowParticles;
 
-		PlaneEmitter*          emitter;
+		SoundSource													soundSource;
+		SoundBuffer*												windBuffer;
 };
 
