public void addBloodStain( int x , int y ) {
		BufferedImage stain = resource.getImage( Trollface.IMG_BLOODSTAIN );
		int stainWidth = stain.getWidth( );
		int stainHeight = stain.getHeight( );
		
		// Gives the stain a random angle
		BufferedImage maniStain = new BufferedImage( stain.getWidth( ) , stain.getHeight( ) , BufferedImage.TYPE_INT_ARGB );
		Graphics2D g2d = ( Graphics2D )maniStain.getGraphics( );
		g2d.translate( stainWidth / 2 , stainHeight / 2 );
		g2d.rotate( Math.toRadians( Trollface.random.nextInt( 30 ) - 15 ) );
		g2d.translate( stainWidth / -2 , stainHeight / -2 );
		g2d.drawImage( stain , 0 , 0 , null );
		g2d.dispose( );
		
		for ( int stainy = 0 ; stainy < stainHeight ; stainy++ ) {
			for ( int stainx = 0 ; stainx < stainWidth ; stainx++ ) {
				int layerx = x + stainx - stainWidth / 2;
				int layery = y + stainy - stainHeight / 2;
				
				if ( layerx >= 0 && layerx < bloodstainLayer.getWidth( ) && layery >= 0 && layery < bloodstainLayer.getHeight( ) ) { 
					int stainrgb = maniStain.getRGB( stainx , stainy );
					int layerrgb = bloodstainLayer.getRGB( layerx , layery );
					int stainAlpha = stainrgb >>> 24; // damn you signed integers!
					int layerAlpha = layerrgb >>> 24;
			
					if ( stainAlpha > layerAlpha ) {
						if ( layerrgb != 0x00000000 ) {
							int stainRed = ( stainrgb & 0x00FF0000 ) >>> 16;
							int layerRed = ( layerrgb & 0x00FF0000 ) >>> 16;
							int mergedRed = ( stainRed + layerRed ) / 2;
							stainrgb = ( stainrgb & 0xFF00FFFF ) | ( mergedRed << 16 );
						}
						
						bloodstainLayer.setRGB( layerx , layery , stainrgb );
					}
				}
			}
		}
	}