All pastes #442641 Raw Edit

Untitled

public text v1 · immutable
·published 2007-04-16 11:53 UTC
rendered paste body
--- snow.c	2007-04-16 19:51:34.000000000 +0800
+++ firefly.c	2007-02-19 02:00:22.000000000 +0900
@@ -1,9 +1,10 @@
 /**
  *
- * Beryl snow plugin
+ * Beryl FireFly plugin
  *
- * snow.c
+ * fireFlies.c
  *
+ * Copyright (c) 2007 Kyle Mallory <kyle.mallory@utah.edu>
  * Copyright (c) 2006 Eckhart P. <beryl@cornergraf.net>
  * Copyright (c) 2006 Brian Jørgensen <qte@fundanemt.com>
  *
@@ -37,76 +38,66 @@
 #include <beryl.h>
 
 // ------------------------------------------------------------  CONSTANTS  -----------------------------------------------------
-#define MAX_SNOWFLAKES 10000
-
+#define MAX_FIREFLIES	10000
+#define GLOW_STAGES		5
 // ------------------------------------------------------------  WRAPPERS -----------------------------------------------------
-#define GET_SNOW_DISPLAY(d)                            \
-	((SnowDisplay *) (d)->privates[displayPrivateIndex].ptr)
+#define GET_FIREFLY_DISPLAY(d)                            \
+	((FireFlyDisplay *) (d)->privates[displayPrivateIndex].ptr)
 
-#define SNOW_DISPLAY(d)                                \
-	SnowDisplay *sd = GET_SNOW_DISPLAY (d)
+#define FIREFLY_DISPLAY(d)                                \
+	FireFlyDisplay *sd = GET_FIREFLY_DISPLAY (d)
 
-#define GET_SNOW_SCREEN(s, sd)                         \
-	((SnowScreen *) (s)->privates[(sd)->screenPrivateIndex].ptr)
+#define GET_FIREFLY_SCREEN(s, sd)                         \
+	((FireFlyScreen *) (s)->privates[(sd)->screenPrivateIndex].ptr)
 
-#define SNOW_SCREEN(s)                                 \
-	SnowScreen *ss = GET_SNOW_SCREEN (s, GET_SNOW_DISPLAY (s->display))
+#define FIREFLY_SCREEN(s)                                 \
+	FireFlyScreen *ss = GET_FIREFLY_SCREEN (s, GET_FIREFLY_DISPLAY (s->display))
 
 // ------------------------------------------------------------  OPTIONS -----------------------------------------------------
-#define SNOW_DISPLAY_OPTION_NUM_SNOWFLAKES	        0
-#define SNOW_DISPLAY_OPTION_SNOW_SIZE        		1
-#define SNOW_DISPLAY_OPTION_SNOW_SPEED        		2
-#define SNOW_DISPLAY_OPTION_SCREEN_BOXING        	3
-#define SNOW_DISPLAY_OPTION_SCREEN_DEPTH  		    4
-#define SNOW_DISPLAY_OPTION_INITIATE                5
-#define SNOW_DISPLAY_OPTION_ON_TOP				6
-#define SNOW_DISPLAY_OPTION_USE_BLENDING 		7
-#define SNOW_DISPLAY_OPTION_USE_TEXTURES 		8
-#define SNOW_DISPLAY_OPTION_SNOW_UPDATE_DELAY	9
-#define SNOW_DISPLAY_OPTION_SNOW_TEXTURES        10
-#define SNOW_DISPLAY_OPTION_SNOW_DIRECTION        11
-#define SNOW_DISPLAY_OPTION_ROTATION			12
-#define SNOW_DISPLAY_OPTION_NUM					13
-
-#define NUM_SNOW_DIRECTIONS			4
-
-#define SNOW_DISPLAY_OPTION_SNOW_UPDATE_DELAY_DEFAULT 40
-#define SNOW_DISPLAY_OPTION_NUM_SNOWFLAKES_DEFAULT	1500.0
-#define SNOW_DISPLAY_OPTION_SNOW_SIZE_DEFAULT       		10.0
-#define SNOW_DISPLAY_OPTION_SNOW_SPEED_DEFAULT        		85.0
-#define SNOW_DISPLAY_OPTION_SCREEN_BOXING_DEFAULT        	400.0
-#define SNOW_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT  		1000.0
-#define SNOW_DISPLAY_OPTION_SNOW_TEXTURES_DEFAULT  ""
-#define SNOW_DISPLAY_OPTION_INITIATE_KEY                    "F3"
-#define SNOW_DISPLAY_OPTION_INITIATE_MOD                    CompSuperMask
-#define SNOW_DISPLAY_OPTION_ON_TOP_DEFAULT			FALSE
-#define SNOW_DISPLAY_OPTION_ROTATION_DEFAULT			TRUE
-#define SNOW_DISPLAY_OPTION_USE_BLENDING_DEFAULT 		TRUE
-#define SNOW_DISPLAY_OPTION_USE_TEXTURES_DEFAULT 		TRUE
-#define SNOW_DISPLAY_OPTION_DIRECTION_DEFAULT		0
-
-static char *snowDirections[] = {
-	N_("Top to bottom"),
-	N_("Bottom to top"),
-	N_("Right to left"),
-	N_("Left to right")
-};
+#define FIREFLY_DISPLAY_OPTION_NUM_FIREFLIES			0
+#define FIREFLY_DISPLAY_OPTION_FIREFLY_SIZE				1
+#define FIREFLY_DISPLAY_OPTION_FIREFLY_SPEED			2
+#define FIREFLY_DISPLAY_OPTION_SCREEN_BOXING        	3
+#define FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH				4
+#define FIREFLY_DISPLAY_OPTION_INITIATE					5
+#define FIREFLY_DISPLAY_OPTION_ON_TOP					6
+#define FIREFLY_DISPLAY_OPTION_USE_BLENDING				7
+#define FIREFLY_DISPLAY_OPTION_USE_TEXTURES				8
+#define FIREFLY_DISPLAY_OPTION_FIREFLY_UPDATE_DELAY		9
+#define FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES			10
+#define FIREFLY_DISPLAY_OPTION_NUM						11
+
+
+#define FIREFLY_DISPLAY_OPTION_FIREFLY_UPDATE_DELAY_DEFAULT		40
+#define FIREFLY_DISPLAY_OPTION_NUM_FIREFLIES_DEFAULT			1500.0
+#define FIREFLY_DISPLAY_OPTION_FIREFLY_SIZE_DEFAULT				10.0
+#define FIREFLY_DISPLAY_OPTION_FIREFLY_SPEED_DEFAULT			85.0
+#define FIREFLY_DISPLAY_OPTION_SCREEN_BOXING_DEFAULT			400.0
+#define FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT				1000.0
+#define FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES_DEFAULT			""
+#define FIREFLY_DISPLAY_OPTION_INITIATE_KEY						"F4"
+#define FIREFLY_DISPLAY_OPTION_INITIATE_MOD						CompSuperMask
+#define FIREFLY_DISPLAY_OPTION_ON_TOP_DEFAULT					FALSE
+#define FIREFLY_DISPLAY_OPTION_USE_BLENDING_DEFAULT				TRUE
+#define FIREFLY_DISPLAY_OPTION_USE_TEXTURES_DEFAULT				TRUE
+
 
-static char *snowTextures[] = {
-	IMAGEDIR "/snowflake2.png"
+static char *fireFlyTextures[] = {
+	IMAGEDIR "/firefly1.png"
 };
 
-#define N_SNOW_TEXTURES (sizeof (snowTextures) / sizeof (snowTextures[0]))
+#define N_FIREFLY_TEXTURES (sizeof (fireFlyTextures) / sizeof (fireFlyTextures[0]))
 
 #define NUM_OPTIONS(s) (sizeof ((s)->opt) / sizeof (CompOption))
 
+static float glowCurve[GLOW_STAGES][4] = { { 0.0, 0.5, 0.5, 1.0 }, { 1.0, 1.0, 0.5, 0.75 }, { 0.75, 0.3, 1.2, 1.0 }, { 1.0, 0.7, 1.5, 1.0 }, { 1.0, 0.5, 0.5, 0.0 } };
+
 static int displayPrivateIndex = 0;
 
-static int numFlakes;
-static int snowRotate;
-static int snowUpdateDelay;
-static float snowSize;
-static float snowSpeed;
+static int numFlies;
+static int fireFlyUpdateDelay;
+static float fireFlySize;
+static float fireFlySpeed;
 static float boxing;
 static float depth;
 static Bool onTop;
@@ -115,115 +106,160 @@
 static Bool displayListNeedsUpdating;
 
 // ------------------------------------------------------------  STRUCTS -----------------------------------------------------
-typedef struct _SnowDisplay
-{
+typedef struct _FireFlyDisplay {
 	int screenPrivateIndex;
 	Bool useBlending;
 	Bool useTextures;
 
-	int snowTexNFiles;
-	CompOptionValue *snowTexFiles;
+	int fireFliesTexNFiles;
+	CompOptionValue *fireFliesTexFiles;
 
-	float snowSize;
+	float fireFliesSize;
 	Bool displayListNeedsUpdating;
 
-	CompOption opt[SNOW_DISPLAY_OPTION_NUM];
+	CompOption opt[FIREFLY_DISPLAY_OPTION_NUM];
 
-} SnowDisplay;
+} FireFlyDisplay;
 
-typedef struct _SnowScreen SnowScreen;
+typedef struct _FireFlyScreen FireFlyScreen;
 
-typedef struct _SnowTexture
-{
+typedef struct _FireFlyTexture {
 	CompTexture tex;
 	unsigned int width;
 	unsigned int height;
 	Bool loaded;
 	GLuint dList;
-} SnowTexture;
+} FireFlyTexture;
 
-typedef struct _SnowFlake
-{
+typedef struct _FireFly {
+	// fly position
 	float x;
 	float y;
 	float z;
-	float xs;
-	float ys;
-	float zs;
-	float ra;					//rotation angle
-	float rs;					//rotation speed
-
-	SnowTexture *tex;
-} SnowFlake;
-
-static void InitiateSnowFlake(SnowScreen * ss, SnowFlake * sf);
-static void setSnowflakeTexture(SnowScreen * ss, SnowFlake * sf);
-static void beginRendering(SnowScreen * ss, CompScreen * s);
-static void setupDisplayList(SnowScreen * ss);
-
-static void snowThink(SnowScreen * ss, SnowFlake * sf);
-static void snowMove(SnowFlake * sf);
+	
+	// actual fly vector
+	float xs[4];
+	float ys[4];
+	float zs[4];
+
+	float lifespan;		// age when fly will "die"
+	float age;			// age in time
+	float lifecycle;	// 0.0 to 1.0 over lifespan
+	float glowAlpha;	// alpha, given life from tables
+	FireFlyTexture *tex;
+} FireFly;
 
-struct _SnowScreen
-{
-	CompScreen *s;
+struct _FireFlyScreen {
+	CompScreen * s;
 
 	Bool active;
 
 	CompTimeoutHandle timeoutHandle;
 
-	PaintScreenProc paintScreen;
-	DrawWindowProc drawWindow;
-	DrawWindowTextureProc drawWindowTexture;
+	PaintScreenProc				paintScreen;
+	DrawWindowProc				drawWindow;
+	DrawWindowTextureProc		drawWindowTexture;
 
-	SnowTexture *snowTex;
-	int snowTexturesLoaded;
+	FireFlyTexture * fireFliesTex;
+	int fireFlyTexturesLoaded;
 
 	GLuint displayList;
 
-	SnowFlake allSnowFlakes[MAX_SNOWFLAKES];
-};
-static void snowThink(SnowScreen * ss, SnowFlake * sf)
-{
-	if (sf->y >= ss->s->height + boxing
-		|| sf->x <= -boxing
-		|| sf->y >= ss->s->width + boxing
-		|| sf->z <= -(depth / 500.0) || sf->z >= 1)
+	FireFly allFireFlies[MAX_FIREFLIES];
+} ;
 
-	{
-		InitiateSnowFlake(ss, sf);
-	}
-	snowMove(sf);
+static void InitiateFireFly(FireFlyScreen *ss, FireFly *sf);
+static void setFireFlyTexture(FireFlyScreen *ss, FireFly *sf);
+static void beginRendering(FireFlyScreen *ss, CompScreen *s);
+static void setupDisplayList(FireFlyScreen * ss);
+
+static void fireFlyMove(FireFly *sf);
+static void fireFlyThink(FireFlyScreen *ss, FireFly *sf);
+
+// -------------------------------------------------  HELPER FUNCTIONS ----------------------------------------------------
+
+int GetRand(int min, int max);
+int GetRand(int min, int max)
+{
+	return (rand() % (max - min + 1) + min);
 }
 
-static void snowMove(SnowFlake * sf)
+float mmrand(int  min, int max, float divisor);
+float mmrand(int  min, int max, float divisor)
 {
-	float tmp = 1.0f / (100.0f - snowSpeed);
+	return ((float)GetRand(min, max)) / divisor;
+};
 
-	sf->x += (sf->xs * (float)snowUpdateDelay) * tmp;
-	sf->y += (sf->ys * (float)snowUpdateDelay) * tmp;
-	sf->z += (sf->zs * (float)snowUpdateDelay) * tmp;
-	sf->ra += ((float)snowUpdateDelay) / (10.0f - sf->rs);
+float bezierCurve(float p[4], float time) {
+	float a = p[0];
+	float b = p[0] + p[1];
+	float c = p[3] + p[2];
+	float d = p[3];
+	
+    float h = time;
+    float i = 1.0 - time;
+      
+    float out = (a*(i*i*i)) + (3.0*b*(i*i)*h) + (3.0*c*i*(h*h)) + (d*(h*h*h));
+    return out;
+}
+
+// ------------------------------------------------- CORE ANIMATION ------------------------------------------------------
+
+static void fireFlyMove(FireFly *sf)
+{
+	float xs = bezierCurve(sf->xs, sf->lifecycle); 
+	float ys = bezierCurve(sf->ys, sf->lifecycle); 
+	float zs = bezierCurve(sf->zs, sf->lifecycle); 
+	
+	sf->x += (float)(xs * (double)fireFlyUpdateDelay) / (100 - fireFlySpeed);
+	sf->y += (float)(ys * (double)fireFlyUpdateDelay) / (100 - fireFlySpeed);
+	sf->z += (float)(zs * (double)fireFlyUpdateDelay) / (100 - fireFlySpeed);
+}
+
+static void fireFlyThink(FireFlyScreen *ss, FireFly *sf)
+{
+	sf->age += 0.02;
+	sf->lifecycle = sf->age / sf->lifespan;
+	
+	int glowStage = (sf->lifecycle * GLOW_STAGES);
+	sf->glowAlpha = bezierCurve(glowCurve[glowStage], sf->lifecycle);
+	if (sf->glowAlpha > 1.0)
+		sf->glowAlpha = 1.0;
+	 
+	if (	sf->y <= -boxing
+			||  sf->y >= ss->s->height + boxing
+			|| 	sf->x <= -boxing
+			|| 	sf->x >= ss->s->width + boxing
+			|| 	sf->z <= -(depth / 500.0)
+			|| 	sf->z >= 1
+			||  sf->age > sf->lifespan)
+
+	{
+		InitiateFireFly(ss,sf);
+	}
+	fireFlyMove(sf);
 }
 
-static Bool stepSnowPositions(void *sc)
+static Bool stepFireFlyPositions(void *sc)
 {
-	CompScreen *s = sc;
-
-	SNOW_SCREEN(s);
+	CompScreen * s = sc;
+	FIREFLY_SCREEN(s);
 	if (!ss->active)
 		return True;
 	int i = 0;
-
-	SnowFlake *snowFlake = ss->allSnowFlakes;
-
-	for (i = 0; i < numFlakes; i++)
-		snowThink(ss, snowFlake++);
-
-	if (ss->active && !onTop)
-	{
+	for (i = 0; i < numFlies; i++)
+		fireFlyThink(ss, &ss->allFireFlies[i]);
+	if (ss->active && !onTop)//(ss->lastMsCount > 15)
+	{
+		//		// TODO: I Don't quite know which of the following is easiest on
+		//		// CPU/GPU cycles... ought to be the second, but I am no expert.
+		//
+		//		////	if (ss->alpha > 0.0) {
+		//		//		damageScreen(s);
+		//		//	//	XSync(s->display->display, FALSE);
+		//		////	}
+		//
 		CompWindow *w;
-
 		for (w = s->windows; w; w = w->next)
 		{
 			if (w->type & CompWindowTypeDesktopMask)
@@ -237,153 +273,122 @@
 	return True;
 }
 
-static Bool
-snowToggle(CompDisplay * d, CompAction * action, CompActionState state,
-		   CompOption * option, int nOption)
+
+static Bool fireFliesToggle (CompDisplay *d, CompAction *action, CompActionState state, CompOption *option, int nOption)
 {
 	CompScreen *s;
 	Window xid;
 
-	xid = getIntOptionNamed(option, nOption, "root", 0);
-	s = findScreenAtDisplay(d, xid);
+	xid = getIntOptionNamed (option, nOption, "root", 0);
+	s = findScreenAtDisplay (d, xid);
 
-	if (s)
-	{
-		SNOW_SCREEN(s);
+	FIREFLY_SCREEN (s);
+	if (ss) {
 		ss->active = !ss->active;
 		if (!ss->active)
-			damageScreen(s);
+		        damageScreen(s);
 	}
 
 	return TRUE;
 }
 
-// -------------------------------------------------  HELPER FUNCTIONS ----------------------------------------------------
-
-int GetRand(int min, int max);
-int GetRand(int min, int max)
-{
-	return (rand() % (max - min + 1) + min);
-}
-
-float mmrand(int min, int max, float divisor);
-float mmrand(int min, int max, float divisor)
-{
-	return ((float)GetRand(min, max)) / divisor;
-};
-
 // ------------------------------------------------- RENDERING ----------------------------------------------------
-static void setupDisplayList(SnowScreen * ss)
+	static void
+setupDisplayList(FireFlyScreen *ss)
 {
 	// ----------------- untextured list
 
-	ss->displayList = glGenLists(1);
+	ss->displayList =glGenLists(1);
 
 	glNewList(ss->displayList, GL_COMPILE);
-	glBegin(GL_QUADS);
+	glBegin (GL_QUADS);
 
-	glColor4f(1.0, 1.0, 1.0, 1.0);
-	glVertex3f(0, 0, -0.0);
-	glColor4f(1.0, 1.0, 1.0, 1.0);
-	glVertex3f(0, snowSize, -0.0);
-	glColor4f(1.0, 1.0, 1.0, 1.0);
-	glVertex3f(snowSize, snowSize, -0.0);
-	glColor4f(1.0, 1.0, 1.0, 1.0);
-	glVertex3f(snowSize, 0, -0.0);
+	glColor4f (1.0, 1.0, 1.0, 1.0); glVertex3f (0,0, -0.0);
+	glColor4f (1.0, 1.0, 1.0, 1.0); glVertex3f (0,fireFlySize, -0.0);
+	glColor4f (1.0, 1.0, 1.0, 1.0); glVertex3f (fireFlySize, fireFlySize, -0.0);
+	glColor4f (1.0, 1.0, 1.0, 1.0); glVertex3f (fireFlySize, 0, -0.0);
 
-	glEnd();
+	glEnd ();
 	glEndList();
 
 }
 
-static void beginRendering(SnowScreen * ss, CompScreen * s)
+static void
+beginRendering(FireFlyScreen *ss, CompScreen *s)
 {
 	if (useBlending)
-		glEnable(GL_BLEND);
+		glEnable (GL_BLEND);
 
-	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+	glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
 
-	if (displayListNeedsUpdating)
+   	if (displayListNeedsUpdating)
 	{
 		setupDisplayList(ss);
 		displayListNeedsUpdating = FALSE;
 	}
 
-	glColor4f(1.0, 1.0, 1.0, 1.0);
-	if (ss->snowTexturesLoaded && useTextures)
+	glColor4f (1.0, 1.0, 1.0, 1.0);
+	if (ss->fireFlyTexturesLoaded && useTextures)
 	{
 		int j = 0;
 
-		for (j = 0; j < ss->snowTexturesLoaded; j++)
+		for (j = 0; j < ss->fireFlyTexturesLoaded; j++)
 		{
-			enableTexture(ss->s, &ss->snowTex[j].tex,
-						  COMP_TEXTURE_FILTER_GOOD);
+			enableTexture (ss->s, &ss->fireFliesTex[j].tex, COMP_TEXTURE_FILTER_GOOD);
 
 			int i = 0;
-			SnowFlake *snowFlake = ss->allSnowFlakes;
-
-			for (i = 0; i < numFlakes; i++)
+			for (i = 0; i < numFlies; i++)
 			{
-				if (snowFlake->tex == &ss->snowTex[j])
+				glColor4f (1.0, 1.0, 1.0, ss->allFireFlies[i].glowAlpha);
+				if (ss->allFireFlies[i].tex == &ss->fireFliesTex[j])
 				{
-					glTranslatef(snowFlake->x, snowFlake->y, snowFlake->z);
-					if (snowRotate)
-						glRotatef(snowFlake->ra, 0, 0, 1);
-					glCallList(ss->snowTex[j].dList);
-					if (snowRotate)
-						glRotatef(-snowFlake->ra, 0, 0, 1);
-					glTranslatef(-snowFlake->x, -snowFlake->y, -snowFlake->z);
+					glTranslatef(ss->allFireFlies[i].x, ss->allFireFlies[i].y, ss->allFireFlies[i].z);
+					glCallList(ss->fireFliesTex[j].dList);
+					glTranslatef(-ss->allFireFlies[i].x, -ss->allFireFlies[i].y, -ss->allFireFlies[i].z);
 				}
-				snowFlake++;
 			}
-			disableTexture(ss->s, &ss->snowTex[j].tex);
+			disableTexture (ss->s, &ss->fireFliesTex[j].tex);
 		}
 	}
-	else if (!ss->snowTexturesLoaded || !useTextures)
+	else if (!ss->fireFlyTexturesLoaded || !useTextures)
 	{
 		int i = 0;
-		SnowFlake *snowFlake = ss->allSnowFlakes;
-
-		for (i = 0; i < numFlakes; i++)
+		for (i = 0; i < numFlies; i++)
 		{
-			glTranslatef(snowFlake->x, snowFlake->y, snowFlake->z);
-			glRotatef(snowFlake->ra, 0, 0, 1);
+			glColor4f (1.0, 1.0, 1.0, ss->allFireFlies[i].glowAlpha);
+			glTranslatef(ss->allFireFlies[i].x, ss->allFireFlies[i].y, ss->allFireFlies[i].z);
 			glCallList(ss->displayList);
-			glRotatef(-snowFlake->ra, 0, 0, 1);
-			glTranslatef(-snowFlake->x, -snowFlake->y, -snowFlake->z);
-			snowFlake++;
+			glTranslatef(-ss->allFireFlies[i].x, -ss->allFireFlies[i].y, -ss->allFireFlies[i].z);
 		}
 	}
 
-	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+	glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
 	if (useBlending)
 	{
-		glDisable(GL_BLEND);
-		glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
+		glDisable (GL_BLEND);
+		glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
 	}
 }
-
 // -------------------------------------------------  FUNCTIONS ----------------------------------------------------
 
-static Bool
-snowPaintScreen(CompScreen * s,
-								const ScreenPaintAttrib * sa,
-								const CompTransform		* transform,
+static Bool fireFliesPaintScreen(CompScreen *s,
+								const ScreenPaintAttrib *sa,
+								const CompTransform *transform,
 								Region region, int output, unsigned int mask)
 {
 	Bool status;
 
-	SNOW_SCREEN(s);
+	FIREFLY_SCREEN(s);
 
 	if (!onTop && ss->active)
 	{
-		// This line is essential. Without it the snow will be rendered above (some) other windows.
+		// This line is essential. Without it the fireFlies will be rendered above (some) other windows.
 		mask |= PAINT_SCREEN_ORDER_BACK_TO_FRONT_MASK;
 	}
 
 	UNWRAP(ss, s, paintScreen);
 	status = (*s->paintScreen) (s, sa, transform, region, output, mask);
-	WRAP(ss, s, paintScreen, snowPaintScreen);
+	WRAP(ss, s, paintScreen, fireFliesPaintScreen);
 
 	if (onTop && ss->active)
 	{
@@ -399,213 +404,175 @@
 	return status;
 }
 
-static Bool
-snowDrawWindow(CompWindow * w, const CompTransform *transform, const FragmentAttrib *attrib,
-				Region region, unsigned int mask)
+static Bool fireFliesDrawWindow (CompWindow *w,
+							const CompTransform *transform,
+							const FragmentAttrib *attrib,
+							Region region, unsigned int mask)
 {
 	int status;;
 
-	SNOW_SCREEN(w->screen);
+	FIREFLY_SCREEN (w->screen);
 
 	// First draw Window as usual
-	UNWRAP(ss, w->screen, drawWindow);
+	UNWRAP (ss, w->screen, drawWindow);
 	status = (*w->screen->drawWindow) (w, transform, attrib, region, mask);
-	WRAP(ss, w->screen, drawWindow, snowDrawWindow);
+	WRAP (ss, w->screen, drawWindow, fireFliesDrawWindow);
 
 	// Check whether this is the Desktop Window
 	if (w->type & CompWindowTypeDesktopMask && ss->active && !onTop)
 		beginRendering(ss, w->screen);
-
+	
 	return status;
 }
 
-static void InitiateSnowFlake(SnowScreen * ss, SnowFlake * sf)
+static void InitiateFireFly(FireFlyScreen *ss, FireFly *sf)
 {
-	//TODO: possibly place snowflakes based on FOV, instead of a cube.
-	SNOW_DISPLAY(ss->s->display);
-	CompOption *o = &sd->opt[SNOW_DISPLAY_OPTION_SNOW_DIRECTION];
-
-	if (strcmp(snowDirections[0], o->value.s) == 0)
-	{
-		sf->x = mmrand(-boxing, ss->s->width + boxing, 1);
-		sf->xs = mmrand(-1, 1, 500);
-		sf->y = mmrand(-300, 0, 1);
-		sf->ys = mmrand(1, 3, 1);
-	}
-	else if (strcmp(snowDirections[1], o->value.s) == 0)
-	{
-		sf->x = mmrand(-boxing, ss->s->width + boxing, 1);
-		sf->xs = mmrand(-1, 1, 500);
-		sf->y = mmrand(ss->s->height, ss->s->height + 300, 1);
-		sf->ys = -mmrand(1, 3, 1);
-	}
-	else if (strcmp(snowDirections[2], o->value.s) == 0)
-	{
-		sf->x = mmrand(ss->s->width, ss->s->width + 300, 1);
-		sf->xs = -mmrand(1, 3, 1);
-		sf->y = mmrand(-boxing, ss->s->height + boxing, 1);
-		sf->ys = mmrand(-1, 1, 500);
-	}
-	else if (strcmp(snowDirections[3], o->value.s) == 0)
+	//TODO: possibly place fireflies based on FOV, instead of a cube.
+	sf->x = mmrand(-boxing, ss->s->width + boxing, 1);
+	sf->y = mmrand(-boxing, ss->s->height + boxing, 1);
+	sf->z = mmrand(-depth, 0.1, 5000);
+	
+	sf->lifespan = mmrand(50,200, 100);
+	sf->age = 0.0;
+	
+	// speed of firefly
+	int i = 0;
+	for (i = 0; i < 4; i++) 
 	{
-		sf->x = mmrand(-300, 0, 1);
-		sf->xs = mmrand(1, 3, 1);
-		sf->y = mmrand(-boxing, ss->s->height + boxing, 1);
-		sf->ys = mmrand(-1, 1, 500);
+		sf->xs[i] = mmrand(-3000, 3000, 1000);
+		sf->ys[i] = mmrand(-3000, 3000, 1000);
+		sf->zs[i] = mmrand(-1000, 1000, 500000);
 	}
-
-	sf->z = mmrand(-depth, 0.1, 5000);
-	sf->zs = mmrand(-1000, 1000, 500000);
-	sf->ra = mmrand(-1000, 1000, 50);
-	sf->rs = mmrand(-1000, 1000, 1000);
 }
 
-static void setSnowflakeTexture(SnowScreen * ss, SnowFlake * sf)
+static void setFireFlyTexture(FireFlyScreen *ss, FireFly *sf)
 {
-	if (ss->snowTexturesLoaded)
-		sf->tex = &ss->snowTex[rand() % ss->snowTexturesLoaded];
+		if (ss->fireFlyTexturesLoaded)
+		sf->tex = &ss->fireFliesTex[rand() % ss->fireFlyTexturesLoaded];
 }
 
-static void updateSnowTextures(CompScreen * s)
+static void updateFireFlyTextures(CompScreen *s)
 {
-	SNOW_SCREEN(s);
-	SNOW_DISPLAY(s->display);
+	FIREFLY_SCREEN(s);
+	FIREFLY_DISPLAY(s->display);
 	int i = 0;
-
-	for (i = 0; i < ss->snowTexturesLoaded; i++)
+	for (i = 0; i < ss->fireFlyTexturesLoaded; i++)
 	{
-		finiTexture(s, &ss->snowTex[i].tex);
-		glDeleteLists(ss->snowTex[i].dList, 1);
+		finiTexture (s, &ss->fireFliesTex[i].tex);
+		glDeleteLists(ss->fireFliesTex[i].dList,1);
 	}
-	if (ss->snowTexturesLoaded)
-		free(ss->snowTex);
-	ss->snowTexturesLoaded = 0;
+	if (ss->fireFlyTexturesLoaded)
+		free(ss->fireFliesTex);
+	ss->fireFlyTexturesLoaded = 0;
 
-	ss->snowTex = calloc(1, sizeof(SnowTexture) * sd->snowTexNFiles);
+	ss->fireFliesTex = calloc(1, sizeof(FireFlyTexture) * sd->fireFliesTexNFiles);
 
 	int count = 0;
-
-	for (i = 0; i < sd->snowTexNFiles; i++)
+	for (i = 0; i < sd->fireFliesTexNFiles; i++)
 	{
-		ss->snowTex[count].loaded =
-				readImageToTexture(s, &ss->snowTex[count].tex,
-								   sd->snowTexFiles[i].s,
-								   &ss->snowTex[count].width,
-								   &ss->snowTex[count].height);
-		if (!ss->snowTex[count].loaded)
+		ss->fireFliesTex[count].loaded = readImageToTexture (s, &ss->fireFliesTex[count].tex,
+				sd->fireFliesTexFiles[i].s, &ss->fireFliesTex[count].width, &ss->fireFliesTex[count].height);
+		if (!ss->fireFliesTex[count].loaded)
 		{
-			printf("[Snow]: Texture not found : %s\n", sd->snowTexFiles[i].s);
+			printf("[FireFly]: Texture not found : %s\n", sd->fireFliesTexFiles[i].s);
 			continue;
 		}
-		printf("[Snow]: Loaded Texture %s\n", sd->snowTexFiles[i].s);
-		CompMatrix *mat = &ss->snowTex[count].tex.matrix;
-		SnowTexture *sTex = &ss->snowTex[count];
+		printf("[FireFly]: Loaded Texture %s\n",sd->fireFliesTexFiles[i].s);
+		CompMatrix *mat = &ss->fireFliesTex[count].tex.matrix;
+		FireFlyTexture *sTex = &ss->fireFliesTex[count];
 
-		sTex->dList = glGenLists(1);
+		sTex->dList =glGenLists(1);
 
 		glNewList(sTex->dList, GL_COMPILE);
 
-		glBegin(GL_QUADS);
+		glBegin (GL_QUADS);
 
-		glTexCoord2f(COMP_TEX_COORD_X(mat, 0), COMP_TEX_COORD_Y(mat, 0));
-		glVertex2f(0, 0);
-		glTexCoord2f(COMP_TEX_COORD_X(mat, 0),
-					 COMP_TEX_COORD_Y(mat, sTex->height));
-		glVertex2f(0, snowSize * sTex->height / sTex->width);
-		glTexCoord2f(COMP_TEX_COORD_X(mat, sTex->width),
-					 COMP_TEX_COORD_Y(mat, sTex->height));
-		glVertex2f(snowSize, snowSize * sTex->height / sTex->width);
-		glTexCoord2f(COMP_TEX_COORD_X(mat, sTex->width),
-					 COMP_TEX_COORD_Y(mat, 0));
-		glVertex2f(snowSize, 0);
+		glTexCoord2f (COMP_TEX_COORD_X(mat, 0), COMP_TEX_COORD_Y(mat, 0));
+		glVertex2f (0,0);
+		glTexCoord2f (COMP_TEX_COORD_X(mat, 0), COMP_TEX_COORD_Y(mat, sTex->height));
+		glVertex2f (0,fireFlySize * sTex->height / sTex->width);
+		glTexCoord2f (COMP_TEX_COORD_X(mat, sTex->width), COMP_TEX_COORD_Y(mat, sTex->height));
+		glVertex2f (fireFlySize,fireFlySize * sTex->height / sTex->width);
+		glTexCoord2f (COMP_TEX_COORD_X(mat, sTex->width), COMP_TEX_COORD_Y(mat, 0));
+		glVertex2f (fireFlySize,0);
 
-		glEnd();
+		glEnd ();
 		glEndList();
 
 		count++;
 	}
-	ss->snowTexturesLoaded = count;
-	if (count < sd->snowTexNFiles)
-		ss->snowTex = realloc(ss->snowTex, sizeof(SnowTexture) * count);
+	ss->fireFlyTexturesLoaded = count;
+	if (count < sd->fireFliesTexNFiles)
+		ss->fireFliesTex = realloc(ss->fireFliesTex, sizeof(FireFlyTexture) * count);
 
-	SnowFlake *snowFlake = ss->allSnowFlakes;
-
-	for (i = 0; i < MAX_SNOWFLAKES; i++)
+	for (i = 0; i < MAX_FIREFLIES; i++)
 	{
-		setSnowflakeTexture(ss, snowFlake++);
+		setFireFlyTexture(ss, &ss->allFireFlies[i]);
 	}
 }
 
-static Bool snowInitScreen(CompPlugin * p, CompScreen * s)
+static Bool fireFliesInitScreen(CompPlugin *p, CompScreen *s)
 {
-	SNOW_DISPLAY(s->display);
-
-	SnowScreen *ss = (SnowScreen *) calloc(1, sizeof(SnowScreen));
+	FIREFLY_DISPLAY(s->display);
 
+	FireFlyScreen *ss = (FireFlyScreen *) calloc(1, sizeof(FireFlyScreen));
 	ss->s = s;
 	s->privates[sd->screenPrivateIndex].ptr = ss;
 
 	int i = 0;
-	SnowFlake *snowFlake = ss->allSnowFlakes;
-
-	for (i = 0; i < MAX_SNOWFLAKES; i++)
+	for (i = 0; i < MAX_FIREFLIES; i++)
 	{
-		InitiateSnowFlake(ss, snowFlake);
-		setSnowflakeTexture(ss, snowFlake);
-		snowFlake++;
+		InitiateFireFly(ss, &ss->allFireFlies[i]);
+		setFireFlyTexture(ss, &ss->allFireFlies[i]);
 	}
 
-	updateSnowTextures(s);
+	updateFireFlyTextures(s);
 
 	setupDisplayList(ss);
 
 	ss->active = FALSE;
 
-	addScreenAction(s, &sd->opt[SNOW_DISPLAY_OPTION_INITIATE].value.action);
+	addScreenAction (s, &sd->opt[FIREFLY_DISPLAY_OPTION_INITIATE].value.action);
 
-	WRAP(ss, s, paintScreen, snowPaintScreen);
-	WRAP(ss, s, drawWindow, snowDrawWindow);
+	WRAP(ss, s, paintScreen, fireFliesPaintScreen);
+	WRAP(ss, s, drawWindow, fireFliesDrawWindow);
 
-	ss->timeoutHandle = compAddTimeout(snowUpdateDelay, stepSnowPositions, s);
+	ss->timeoutHandle=compAddTimeout(fireFlyUpdateDelay,stepFireFlyPositions,s);
 
 	return TRUE;
 }
 
-static void snowFiniScreen(CompPlugin * p, CompScreen * s)
+static void fireFliesFiniScreen(CompPlugin *p, CompScreen *s)
 {
-	SNOW_SCREEN(s);
-	SNOW_DISPLAY(s->display);
+	FIREFLY_SCREEN(s);
+	FIREFLY_DISPLAY(s->display);
 
 	compRemoveTimeout(ss->timeoutHandle);
 
 	int i = 0;
-
-	for (i = 0; i < ss->snowTexturesLoaded; i++)
+	for (i = 0; i < ss->fireFlyTexturesLoaded; i++)
 	{
-		finiTexture(s, &ss->snowTex[i].tex);
-		glDeleteLists(ss->snowTex[i].dList, 1);
+		finiTexture (s, &ss->fireFliesTex[i].tex);
+		glDeleteLists(ss->fireFliesTex[i].dList,1);
 	}
-	if (ss->snowTexturesLoaded)
-		free(ss->snowTex);
+	if (ss->fireFlyTexturesLoaded)
+		free(ss->fireFliesTex);
 
 	//Restore the original function
 	UNWRAP(ss, s, paintScreen);
 	UNWRAP(ss, s, drawWindow);
 
-	removeScreenAction(s,
-					   &sd->opt[SNOW_DISPLAY_OPTION_INITIATE].value.action);
+	removeScreenAction (s, &sd->opt[FIREFLY_DISPLAY_OPTION_INITIATE].value.action);
 	//Free the pointer
 	free(ss);
 }
 
-static Bool
-snowSetDisplayOption(CompDisplay * display, char *name,
-					 CompOptionValue * value)
+static Bool fireFliesSetDisplayOption(CompDisplay *display, char *name, CompOptionValue *value)
 {
 	CompOption *o;
 	int index;
 
-	SNOW_DISPLAY(display);
+	FIREFLY_DISPLAY(display);
 
 	o = compFindOption(sd->opt, NUM_OPTIONS(sd), name, &index);
 	if (!o)
@@ -613,367 +580,296 @@
 
 	switch (index)
 	{
-	case SNOW_DISPLAY_OPTION_NUM_SNOWFLAKES:
-		if (compSetFloatOption(o, value))
-		{
-			numFlakes =
-					(int)sd->opt[SNOW_DISPLAY_OPTION_NUM_SNOWFLAKES].value.f;
-			return TRUE;
-		}
-		break;
-
-	case SNOW_DISPLAY_OPTION_SNOW_DIRECTION:
-		if (compSetStringOption(o, value))
-		{
-			return TRUE;
-		}
-		break;
-	case SNOW_DISPLAY_OPTION_SNOW_SIZE:
-		if (compSetFloatOption(o, value))
-		{
-			snowSize = sd->opt[SNOW_DISPLAY_OPTION_SNOW_SIZE].value.f;
-			displayListNeedsUpdating = TRUE;
-			CompScreen *s = display->screens;
-
-			updateSnowTextures(s);
-
-			return TRUE;
-		}
-		break;
-	case SNOW_DISPLAY_OPTION_SNOW_SPEED:
-		if (compSetFloatOption(o, value))
-		{
-			snowSpeed = sd->opt[SNOW_DISPLAY_OPTION_SNOW_SPEED].value.f;
-			return TRUE;
-		}
-		break;
-	case SNOW_DISPLAY_OPTION_SNOW_UPDATE_DELAY:
-		if (compSetIntOption(o, value))
-		{
-			CompScreen *s = display->screens;
+		case FIREFLY_DISPLAY_OPTION_NUM_FIREFLIES:
+			if (compSetFloatOption (o, value))
+			{
+				numFlies = (int) sd->opt[FIREFLY_DISPLAY_OPTION_NUM_FIREFLIES].value.f;
+				return TRUE;
+			}
+			break;
+		case FIREFLY_DISPLAY_OPTION_FIREFLY_SIZE:
+			if (compSetFloatOption (o, value))
+			{
+				fireFlySize = sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_SIZE].value.f;
+				displayListNeedsUpdating = TRUE;
+				CompScreen * s=display->screens;
+				updateFireFlyTextures(s);
 
-			SNOW_SCREEN(s);
-			snowUpdateDelay =
-					sd->opt[SNOW_DISPLAY_OPTION_SNOW_UPDATE_DELAY].value.i;
-			if (ss->timeoutHandle)
-				compRemoveTimeout(ss->timeoutHandle);
-			ss->timeoutHandle =
-					compAddTimeout(snowUpdateDelay, stepSnowPositions, s);
-			return TRUE;
-		}
-	case SNOW_DISPLAY_OPTION_SCREEN_BOXING:
-		if (compSetFloatOption(o, value))
-		{
-			boxing = sd->opt[SNOW_DISPLAY_OPTION_SCREEN_BOXING].value.f;
-			return TRUE;
-		}
-		break;
-	case SNOW_DISPLAY_OPTION_SCREEN_DEPTH:
-		if (compSetFloatOption(o, value))
-		{
-			depth = sd->opt[SNOW_DISPLAY_OPTION_SCREEN_DEPTH].value.f;
-			return TRUE;
-		}
-		break;
-	case SNOW_DISPLAY_OPTION_SNOW_TEXTURES:
-		if (compSetOptionList(o, value))
-		{
-			CompScreen *s = display->screens;
+				return TRUE;
+			}
+			break;
+		case FIREFLY_DISPLAY_OPTION_FIREFLY_SPEED:
+			if (compSetFloatOption (o, value))
+			{
+				fireFlySpeed = sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_SPEED].value.f;
+				return TRUE;
+			}
+			break;
+		case FIREFLY_DISPLAY_OPTION_FIREFLY_UPDATE_DELAY:
+			if (compSetIntOption (o,value))
+			{
+				CompScreen * s = display->screens;
+				FIREFLY_SCREEN(s);
+				fireFlyUpdateDelay = sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_UPDATE_DELAY].value.i;
+				if (ss->timeoutHandle)
+					compRemoveTimeout(ss->timeoutHandle);
+				ss->timeoutHandle=compAddTimeout(fireFlyUpdateDelay,stepFireFlyPositions,s);
+				return TRUE;
+			}
+		case FIREFLY_DISPLAY_OPTION_SCREEN_BOXING:
+			if (compSetFloatOption (o, value))
+			{
+				boxing = sd->opt[FIREFLY_DISPLAY_OPTION_SCREEN_BOXING].value.f;
+				return TRUE;
+			}
+			break;
+		case FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH:
+			if (compSetFloatOption (o, value))
+			{
+				depth = sd->opt[FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH].value.f;
+				return TRUE;
+			}
+			break;
+			//    case FIREFLY_DISPLAY_OPTION_MAX_FRAMES:
+			//          if (compSetFloatOption (o, value))
+			//            return TRUE;
+			//        break;
 
-			sd->snowTexFiles =
-					sd->opt[SNOW_DISPLAY_OPTION_SNOW_TEXTURES].value.list.
-					value;
-			sd->snowTexNFiles =
-					sd->opt[SNOW_DISPLAY_OPTION_SNOW_TEXTURES].value.list.
-					nValue;
+		case FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES:
+			if (compSetOptionList (o, value))
+			{
+				CompScreen * s=display->screens;
+				sd->fireFliesTexFiles = sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES].value.list.value;
+				sd->fireFliesTexNFiles = sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES].value.list.nValue;
 
-			updateSnowTextures(s);
-			return TRUE;
-		}
-		break;
+				updateFireFlyTextures(s);
+				return TRUE;
+			}
+			break;
 
-	case SNOW_DISPLAY_OPTION_INITIATE:
-		if (setDisplayAction(display, o, value))
-			return TRUE;
-		break;
-	case SNOW_DISPLAY_OPTION_ON_TOP:
-		if (compSetBoolOption(o, value))
-		{
-			onTop = sd->opt[SNOW_DISPLAY_OPTION_ON_TOP].value.b;
-			return TRUE;
-		}
-		break;
-	case SNOW_DISPLAY_OPTION_ROTATION:
-		if (compSetBoolOption(o, value))
-		{
-			snowRotate = sd->opt[SNOW_DISPLAY_OPTION_ROTATION].value.b;
-			return TRUE;
-		}
-		break;
-	case SNOW_DISPLAY_OPTION_USE_BLENDING:
-		if (compSetBoolOption(o, value))
-		{
-			useBlending = sd->opt[SNOW_DISPLAY_OPTION_USE_BLENDING].value.b;
-			return TRUE;
-		}
-	case SNOW_DISPLAY_OPTION_USE_TEXTURES:
-		if (compSetBoolOption(o, value))
-		{
-			useTextures = sd->opt[SNOW_DISPLAY_OPTION_USE_TEXTURES].value.b;
-			return TRUE;
-		}
-		break;
-	default:
-		break;
+		case FIREFLY_DISPLAY_OPTION_INITIATE:
+			if (setDisplayAction (display, o, value))
+				return TRUE;
+			break;
+		case FIREFLY_DISPLAY_OPTION_ON_TOP:
+			if (compSetBoolOption (o, value))
+			{
+				onTop = sd->opt[FIREFLY_DISPLAY_OPTION_ON_TOP].value.b;
+				return TRUE;
+			}
+			break;
+			case FIREFLY_DISPLAY_OPTION_USE_BLENDING:
+			if (compSetBoolOption (o, value))
+			{
+				useBlending = sd->opt[FIREFLY_DISPLAY_OPTION_USE_BLENDING].value.b;
+				return TRUE;
+			}
+			case FIREFLY_DISPLAY_OPTION_USE_TEXTURES:
+			if (compSetBoolOption (o, value))
+			{
+				useTextures = sd->opt[FIREFLY_DISPLAY_OPTION_USE_TEXTURES].value.b;
+				return TRUE;
+			}
+			break;
+		default:
+			break;
 	}
 	return FALSE;
 }
 
-static void snowDisplayInitOptions(SnowDisplay * sd)
+static void fireFliesDisplayInitOptions(FireFlyDisplay * sd)
 {
 	CompOption *o;
 
-	o = &sd->opt[SNOW_DISPLAY_OPTION_NUM_SNOWFLAKES];
-	o->advanced = False;
-	o->name = "num_snowflakes";
-	o->group = N_("Settings");
-	o->subGroup = N_("");
-	o->displayHints = "";
-	o->shortDesc = N_("Number of Snowflakes");
-	o->longDesc = N_("Number of Snowflakes");
+	o = &sd->opt[FIREFLY_DISPLAY_OPTION_NUM_FIREFLIES];
+	o->name = "num_fireflies";
+	o->group=N_("Settings");
+	o->subGroup=N_("");
+	o->displayHints="";
+	o->shortDesc = N_("Number of fireflies");
+	o->longDesc = N_("Number of fireflies");
 	o->type = CompOptionTypeFloat;
-	o->value.f = SNOW_DISPLAY_OPTION_NUM_SNOWFLAKES_DEFAULT;
+	o->value.f = FIREFLY_DISPLAY_OPTION_NUM_FIREFLIES_DEFAULT;
 	o->rest.f.min = 0;
 	o->rest.f.max = 10000;
 	o->rest.f.precision = 1;
 
-	o = &sd->opt[SNOW_DISPLAY_OPTION_SNOW_SIZE];
-	o->advanced = False;
-	o->name = "snow_size";
-	o->group = N_("Settings");
-	o->subGroup = N_("");
-	o->displayHints = "";
-	o->shortDesc = N_("Size of snowflakes");
-	o->longDesc = N_("Size of snowflakes");
+	o = &sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_SIZE];
+	o->name = "fireFlies_size";
+	o->group=N_("Settings");
+	o->subGroup=N_("");
+	o->displayHints="";
+	o->shortDesc = N_("Size of fireflies");
+	o->longDesc = N_("Size of fireflies");
 	o->type = CompOptionTypeFloat;
-	o->value.f = SNOW_DISPLAY_OPTION_SNOW_SIZE_DEFAULT;
+	o->value.f = FIREFLY_DISPLAY_OPTION_FIREFLY_SIZE_DEFAULT;
 	o->rest.f.min = 0;
 	o->rest.f.max = 50;
 	o->rest.f.precision = 0.1;
 
-	o = &sd->opt[SNOW_DISPLAY_OPTION_SNOW_SPEED];
-	o->advanced = False;
-	o->name = "snow_speed";
-	o->group = N_("Settings");
-	o->subGroup = N_("");
-	o->displayHints = "";
-	o->shortDesc = N_("Speed of falling snow");
-	o->longDesc = N_("Speed of falling snow");
+	o = &sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_SPEED];
+	o->name = "fireFlies_speed";
+	o->group=N_("Settings");
+	o->subGroup=N_("");
+	o->displayHints="";
+	o->shortDesc = N_("Speed of fireflies");
+	o->longDesc = N_("Speed of fireflies");
 	o->type = CompOptionTypeFloat;
-	o->value.f = SNOW_DISPLAY_OPTION_SNOW_SPEED_DEFAULT;
+	o->value.f = FIREFLY_DISPLAY_OPTION_FIREFLY_SPEED_DEFAULT;
 	o->rest.f.min = 0;
 	o->rest.f.max = 100;
 	o->rest.f.precision = 1;
 
-	o = &sd->opt[SNOW_DISPLAY_OPTION_SNOW_UPDATE_DELAY];
-	o->advanced = False;
-	o->name = "snow_update_delay";
-	o->group = N_("Settings");
-	o->subGroup = N_("");
-	o->displayHints = "";
-	o->shortDesc = N_("Update Delay");
-	o->longDesc =
-			N_
-			("Delay in ms between screen updates. Deacreasing this value may make snow fall more smoothly, but will also increase CPU usage.");
+	o = &sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_UPDATE_DELAY];
+	o->name = "fireFlies_update_delay";
+	o->group=N_("Settings");
+	o->subGroup=N_("");
+	o->displayHints="";
+	o->shortDesc = N_("Screen Update Delay");
+	o->longDesc = N_("Delay in ms between screen updates");
 	o->type = CompOptionTypeInt;
-	o->value.i = SNOW_DISPLAY_OPTION_SNOW_UPDATE_DELAY_DEFAULT;
+	o->value.i = FIREFLY_DISPLAY_OPTION_FIREFLY_UPDATE_DELAY_DEFAULT;
 	o->rest.i.min = 10;
 	o->rest.i.max = 200;
 
-	o = &sd->opt[SNOW_DISPLAY_OPTION_SCREEN_BOXING];
-	o->advanced = False;
+	o = &sd->opt[FIREFLY_DISPLAY_OPTION_SCREEN_BOXING];
 	o->name = "screen_boxing";
-	o->group = N_("Settings");
-	o->subGroup = N_("");
-	o->displayHints = "";
+	o->group=N_("Settings");
+	o->subGroup=N_("");
+	o->displayHints="";
 	o->shortDesc = N_("Screen Boxing");
-	o->longDesc =
-			N_
-			("How far outside the screen resolution snowflakes can be before being removed. Needed because of FOV.");
+	o->longDesc = N_("How far outside the screen resolution fireflies can be before being removed. Needed because of FOV.");
 	o->type = CompOptionTypeFloat;
-	o->value.f = SNOW_DISPLAY_OPTION_SCREEN_BOXING_DEFAULT;
+	o->value.f = FIREFLY_DISPLAY_OPTION_SCREEN_BOXING_DEFAULT;
 	o->rest.f.min = -2000;
 	o->rest.f.max = 2000;
 	o->rest.f.precision = 1;
 
-	o = &sd->opt[SNOW_DISPLAY_OPTION_SCREEN_DEPTH];
-	o->advanced = False;
+	o = &sd->opt[FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH];
 	o->name = "screen_depth";
-	o->group = N_("Settings");
-	o->subGroup = N_("");
-	o->displayHints = "";
+	o->group=N_("Settings");
+	o->subGroup=N_("");
+	o->displayHints="";
 	o->shortDesc = N_("Screen Depth");
-	o->longDesc =
-			N_
-			("How deep into the screen snowflakes can be drawn before being removed.");
+	o->longDesc = N_("How deep into the screen fireflies can be drawn before being removed.");
 	o->type = CompOptionTypeFloat;
-	o->value.f = SNOW_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT;
+	o->value.f = FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT;
 	o->rest.f.min = 0;
-	o->rest.f.max = SNOW_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT * 2;
+	o->rest.f.max = FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT * 2;
 	o->rest.f.precision = 1;
 
-	o = &sd->opt[SNOW_DISPLAY_OPTION_SNOW_TEXTURES];
-	o->advanced = False;
-	o->name = "snow_textures";
-	o->group = N_("Textures");
-	o->subGroup = N_("");
-	o->displayHints = "file;image;pngonly;";
-	o->shortDesc = N_("Snow Textures");
-	o->longDesc = N_("Snow textures");
+	o = &sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES];
+	o->name = "fireFlies_textures";
+	o->group=N_("Textures");
+	o->subGroup=N_("");
+	o->displayHints="file;image;pngonly;";
+	o->shortDesc = N_("FireFly Textures");
+	o->longDesc = N_("FireFly textures");
 	o->type = CompOptionTypeList;
 	o->value.list.type = CompOptionTypeString;
-	o->value.list.nValue = N_SNOW_TEXTURES;
-	o->value.list.value = malloc(sizeof(CompOptionValue) * N_SNOW_TEXTURES);
+	o->value.list.nValue = N_FIREFLY_TEXTURES;
+	o->value.list.value =
+	    malloc(sizeof(CompOptionValue) * N_FIREFLY_TEXTURES);
 	int i = 0;
-
-	for (i = 0; i < N_SNOW_TEXTURES; i++)
-		o->value.list.value[i].s = strdup(snowTextures[i]);
+	for (i = 0; i < N_FIREFLY_TEXTURES; i++)
+		o->value.list.value[i].s = strdup(fireFlyTextures[i]);
 	o->rest.s.string = 0;
 	o->rest.s.nString = 0;
 
-	o = &sd->opt[SNOW_DISPLAY_OPTION_INITIATE];
-	o->advanced = False;
+	o = &sd->opt[FIREFLY_DISPLAY_OPTION_INITIATE];
 	o->name = "Initiate";
-	o->group = N_("Key Bindings");
-	o->subGroup = N_("");
+	o->group = N_("Initiate");
+	o->subGroup = N_("Key Bindings");
 	o->displayHints = "";
-	o->shortDesc = N_("snow toggle key");
-	o->longDesc = N_("snow toggle key");
+	o->shortDesc = N_("FireFlies toggle key");
+	o->longDesc = N_("FireFlies toggle key");
 	o->type = CompOptionTypeAction;
-	o->value.action.initiate = snowToggle;
+	o->value.action.initiate = fireFliesToggle;
 	o->value.action.terminate = 0;
 	o->value.action.bell = FALSE;
 	o->value.action.type = CompBindingTypeKey;
 	o->value.action.state = CompActionStateInitKey;
 	o->value.action.state |= CompActionStateInitButton;
-	o->value.action.key.modifiers = SNOW_DISPLAY_OPTION_INITIATE_MOD;
+	o->value.action.key.modifiers = FIREFLY_DISPLAY_OPTION_INITIATE_MOD;
 	o->value.action.key.keysym =
-			XStringToKeysym(SNOW_DISPLAY_OPTION_INITIATE_KEY);
+		XStringToKeysym (FIREFLY_DISPLAY_OPTION_INITIATE_KEY);
 
-	o = &sd->opt[SNOW_DISPLAY_OPTION_ON_TOP];
-	o->advanced = False;
-	o->name = "snow_over_windows";
+	o = &sd->opt[FIREFLY_DISPLAY_OPTION_ON_TOP];
+	o->name = "fireFlies_over_windows";
 	o->group = N_("Settings");
 	o->subGroup = N_("");
 	o->displayHints = "";
-	o->shortDesc = N_("Snow over windows.");
-	o->longDesc = N_("Snow is drawn above windows.");
+	o->shortDesc = N_("Fireflies over windows");
+	o->longDesc = N_("Fireflies are drawn above windows.");
 	o->type = CompOptionTypeBool;
-	o->value.b = SNOW_DISPLAY_OPTION_ON_TOP_DEFAULT;
-
-	o = &sd->opt[SNOW_DISPLAY_OPTION_ROTATION];
-	o->advanced = False;
-	o->name = "snow_rotation";
-	o->group = N_("Settings");
-	o->subGroup = N_("");
-	o->displayHints = "";
-	o->shortDesc = N_("Rotate flakes");
-	o->longDesc = N_("Flakes rotate when checked.");
-	o->type = CompOptionTypeBool;
-	o->value.b = SNOW_DISPLAY_OPTION_ROTATION_DEFAULT;
-
-	o = &sd->opt[SNOW_DISPLAY_OPTION_SNOW_DIRECTION];
-	o->advanced = False;
-	o->name = "snow_direction";
-	o->group = N_("Settings");
-	o->subGroup = N_("");
-	o->displayHints = "";
-	o->shortDesc = N_("Snow Direction");
-	o->longDesc = N_("Select direction in which the snow should fly.");
-	o->type = CompOptionTypeString;
-	o->value.s =
-			strdup(snowDirections[SNOW_DISPLAY_OPTION_DIRECTION_DEFAULT]);
-	o->rest.s.string = snowDirections;
-	o->rest.s.nString = NUM_SNOW_DIRECTIONS;
+	o->value.b = FIREFLY_DISPLAY_OPTION_ON_TOP_DEFAULT;
 
-	o = &sd->opt[SNOW_DISPLAY_OPTION_USE_BLENDING];
-	o->advanced = False;
+	o = &sd->opt[FIREFLY_DISPLAY_OPTION_USE_BLENDING];
 	o->name = "use_blending";
 	o->group = N_("Debug");
 	o->subGroup = N_("");
 	o->displayHints = "";
 	o->shortDesc = N_("Enable Blending");
-	o->longDesc = N_("Enables alpha blending of snowflakes");
+	o->longDesc = N_("Enables alpha blending of fireflies");
 	o->type = CompOptionTypeBool;
-	o->value.b = SNOW_DISPLAY_OPTION_USE_BLENDING_DEFAULT;
+	o->value.b = FIREFLY_DISPLAY_OPTION_USE_BLENDING_DEFAULT;
 
-	o = &sd->opt[SNOW_DISPLAY_OPTION_USE_TEXTURES];
-	o->advanced = False;
+		o = &sd->opt[FIREFLY_DISPLAY_OPTION_USE_TEXTURES];
 	o->name = "use_textures";
 	o->group = N_("Debug");
 	o->subGroup = N_("");
 	o->displayHints = "";
 	o->shortDesc = N_("Enable Textures");
-	o->longDesc =
-			N_
-			("Enables textured snowflakes. Otherwise color gradients are used.");
+	o->longDesc = N_("Enables textured fireflies. Otherwise color gradients are used.");
 	o->type = CompOptionTypeBool;
-	o->value.b = SNOW_DISPLAY_OPTION_USE_TEXTURES_DEFAULT;
+	o->value.b = FIREFLY_DISPLAY_OPTION_USE_TEXTURES_DEFAULT;
 }
 
-static CompOption *snowGetDisplayOptions(CompDisplay * display, int *count)
+static CompOption *fireFliesGetDisplayOptions(CompDisplay * display, int *count)
 {
-	if (display)
-	{
-		SNOW_DISPLAY(display);
+	if (display) {
+		FIREFLY_DISPLAY(display);
 
 		*count = NUM_OPTIONS(sd);
 		return sd->opt;
 	}
-	else
-	{
-		SnowDisplay *sd = malloc(sizeof(SnowDisplay));
-
-		snowDisplayInitOptions(sd);
+	else {
+		FireFlyDisplay *sd = malloc(sizeof(FireFlyDisplay));
+		fireFliesDisplayInitOptions(sd);
 
 		*count = NUM_OPTIONS(sd);
 		return sd->opt;
 	}
 }
 
-static Bool snowInitDisplay(CompPlugin * p, CompDisplay * d)
+static Bool fireFliesInitDisplay(CompPlugin * p, CompDisplay * d)
 {
-	//Generate a snow display
-	SnowDisplay *sd = (SnowDisplay *) malloc(sizeof(SnowDisplay));
-
+	//Generate a fireFlies display
+	FireFlyDisplay *sd = (FireFlyDisplay *) malloc(sizeof(FireFlyDisplay));
 	//Allocate a private index
 	sd->screenPrivateIndex = allocateScreenPrivateIndex(d);
 
 	//Check if its valid
-	if (sd->screenPrivateIndex < 0)
-	{
+	if (sd->screenPrivateIndex < 0) {
 		free(sd);
 		return FALSE;
 	}
 
-	numFlakes = SNOW_DISPLAY_OPTION_NUM_SNOWFLAKES_DEFAULT;
-	snowRotate = SNOW_DISPLAY_OPTION_ROTATION_DEFAULT;
-	snowSize = SNOW_DISPLAY_OPTION_SNOW_SIZE_DEFAULT;
-	snowSpeed = SNOW_DISPLAY_OPTION_SNOW_SPEED_DEFAULT;
-	snowUpdateDelay = SNOW_DISPLAY_OPTION_SNOW_UPDATE_DELAY_DEFAULT;
-	boxing = SNOW_DISPLAY_OPTION_SCREEN_BOXING_DEFAULT;
-	depth = SNOW_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT;
-	onTop = SNOW_DISPLAY_OPTION_ON_TOP_DEFAULT;
+	numFlies = FIREFLY_DISPLAY_OPTION_NUM_FIREFLIES_DEFAULT;
+	fireFlySize = FIREFLY_DISPLAY_OPTION_FIREFLY_SIZE_DEFAULT;
+	fireFlySpeed = FIREFLY_DISPLAY_OPTION_FIREFLY_SPEED_DEFAULT;
+	fireFlyUpdateDelay = FIREFLY_DISPLAY_OPTION_FIREFLY_UPDATE_DELAY_DEFAULT;
+	boxing = FIREFLY_DISPLAY_OPTION_SCREEN_BOXING_DEFAULT;
+	depth = FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT;
+	onTop = FIREFLY_DISPLAY_OPTION_ON_TOP_DEFAULT;
 
 	displayListNeedsUpdating = FALSE;
-	useBlending = SNOW_DISPLAY_OPTION_USE_BLENDING_DEFAULT;
-	useTextures = SNOW_DISPLAY_OPTION_USE_TEXTURES_DEFAULT;
-	snowDisplayInitOptions(sd);
-
-	sd->snowTexFiles =
-			sd->opt[SNOW_DISPLAY_OPTION_SNOW_TEXTURES].value.list.value;
-	sd->snowTexNFiles =
-			sd->opt[SNOW_DISPLAY_OPTION_SNOW_TEXTURES].value.list.nValue;
+	useBlending = FIREFLY_DISPLAY_OPTION_USE_BLENDING_DEFAULT;
+	useTextures = FIREFLY_DISPLAY_OPTION_USE_TEXTURES_DEFAULT;
+	fireFliesDisplayInitOptions(sd);
+
+	sd->fireFliesTexFiles = sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES].value.list.value;
+	sd->fireFliesTexNFiles = sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES].value.list.nValue;
 
 	//Record the display
 	d->privates[displayPrivateIndex].ptr = sd;
@@ -981,9 +877,9 @@
 	return TRUE;
 }
 
-static void snowFiniDisplay(CompPlugin * p, CompDisplay * d)
+static void fireFliesFiniDisplay(CompPlugin * p, CompDisplay * d)
 {
-	SNOW_DISPLAY(d);
+	FIREFLY_DISPLAY(d);
 
 	//Free the private index
 	freeScreenPrivateIndex(d, sd->screenPrivateIndex);
@@ -991,7 +887,7 @@
 	free(sd);
 }
 
-static Bool snowInit(CompPlugin * p)
+static Bool fireFliesInit(CompPlugin * p)
 {
 	displayPrivateIndex = allocateDisplayPrivateIndex();
 
@@ -1001,36 +897,34 @@
 	return TRUE;
 }
 
-static void snowFini(CompPlugin * p)
+static void fireFliesFini(CompPlugin * p)
 {
 	if (displayPrivateIndex >= 0)
 		freeDisplayPrivateIndex(displayPrivateIndex);
 }
 
-CompPluginDep snowDeps[] = {
-	{CompPluginRuleAfterCategory, "imageformat"}
-	,
+CompPluginDep fireflyDeps[] = {
+	{CompPluginRuleAfterCategory, "imageformat"},
 };
 
-CompPluginVTable snowVTable = {
-	"snow",
-	N_("Snow"),
-	N_("XSnow for Beryl"),
-	snowInit,
-	snowFini,
-	snowInitDisplay,
-	snowFiniDisplay,
-	snowInitScreen,
-	snowFiniScreen,
-	0,
+CompPluginVTable fireFliesVTable = {
+	"firefly",
+	N_("FireFlies"),
+	N_("XFireFlies for Beryl"),
+	fireFliesInit,
+	fireFliesFini,
+	fireFliesInitDisplay,
+	fireFliesFiniDisplay,
+	fireFliesInitScreen,
+	fireFliesFiniScreen,
 	0,
-	snowGetDisplayOptions,
-	snowSetDisplayOption,
-	0,							/*snowGetScreenOptions */
-	0,							/*snowSetScreenOption */
 	0,
-	snowDeps,
-	sizeof(snowDeps) / sizeof(snowDeps[0]),
+	fireFliesGetDisplayOptions,
+	fireFliesSetDisplayOption,
+	0,			/*fireFliesGetScreenOptions */
+	0,			/*fireFliesSetScreenOption */
+	fireflyDeps,
+	sizeof(fireflyDeps) / sizeof(fireflyDeps[0]),
 	0,
 	0,
 	BERYL_ABI_INFO,
@@ -1043,5 +937,5 @@
 
 CompPluginVTable *getCompPluginInfo(void)
 {
-	return &snowVTable;
+	return &fireFliesVTable;
 }