public void drawAlphaTextWithShadow(String text, int x, int y, int currentColour,
			int seed) {
		if (text == null)
			return;
		
		/*
		 * Set the seet for the RNG.
		 */
		random.setSeed(seed);
		
		/*
		 * Generate a random alpha value that is more
		 * opaque than the shadow (192 is the alpha value
		 * for the shadow).
		 */
		int alpha = 192 + (random.nextInt() & 0x1f);
		
		/*
		 * Draw from the top-left instead of the bottom.
		 */
		y -= fontHeight;
		
		/*
		 * Iterate through all the characters in the text.
		 */
		for (int c = 0; c < text.length(); c++) {
			/*
			 * Check if the current piece of text being processed
			 * is a colour for (@dre@ for example)
			 */
			if (text.charAt(c) == '@'
					&& c + 4 < text.length()
					&& text.charAt(c + 4) == '@') {
				int colour = handleEmbeddedEffect(text.substring(c + 1, c + 4));
				if (colour != -1)
					currentColour = colour;
				c += 4;
			} else {
				char character = text.charAt(c);
				
				/*
				 * If the character is a space, we don't draw
				 * it - we just add the width of the space
				 * to the current x position.
				 */
				if (character != ' ') {
					drawGlyphAlpha(glyphPixels[character], x + horizontalKerning[character] + 1,
							y
									+ verticalKerning[character] + 1, glyphWidth[character], glyphHeight[character],
							0, 192);
					drawGlyphAlpha(glyphPixels[character], x + horizontalKerning[character],
							y
									+ verticalKerning[character], glyphWidth[character], glyphHeight[character],
							currentColour, alpha);
				}
				x += glyphDisplayWidth[character];
				
				/*
				 * Apply a slight offset to the text occasionally.
				 * 
				 * Not sure why.
				 */
				if ((random.nextInt() & 3) == 0)
					x++;
			}
		}
	}