{
	LightImg = ColorToAlpha([>>img\light.bmp]);
	LightImg2 = ColorToAlpha([>>img\light2.bmp]);

	LightPosX = 0;
	LightPosY = 0;
	LightPosZ = 2;

	FUNC["fill_stay"]=
	{
		_col0_r = GetParam( _line, "Color0", CurTime(), 0 );
		_col0_g = GetParam( _line, "Color0", CurTime(), 1 );
		_col0_b = GetParam( _line, "Color0", CurTime(), 2 );
		_draw1 = FillColor( _img_text, _col0_r, _col0_g, _col0_b );
		_draw1_black = FillColor( _img_text, 0, 0, 0 );
		_draw1_white = FillColor( _img_text, 1, 1, 1 );

		_ldirx = LightPosX - _posx;
		_ldiry = LightPosY - _posy;
		_ldirz = LightPosZ;
		_ldirlen = sqrt( _ldirx*_ldirx + _ldiry*_ldiry + _ldirz*_ldirz + 0.0001 );
		_ldirlenxy = sqrt( _ldirx*_ldirx + _ldiry*_ldiry + 0.0001 );
		_ldirx = _ldirx / _ldirlen;
		_ldiry = _ldiry / _ldirlen;
		_ldirz = _ldirz / _ldirlen;
		_sizegain = 1 / _ldirlen;

		_hell = _ldirlen / _ldirlenxy * _ldirz / abs( _ldirz + 0.001 );

		DrawFinal( _draw1_white, _posx+_ldirx, _posy+_ldiry, 100, 100, range( _hell,0,1) );
		DrawFinal( _draw1, _posx, _posy, 100, 100, 1 );
		DrawFinal( _draw1_white, _posx+_ldirx, _posy+_ldiry, 100, 100, range( _hell*_hell*_hell*_hell*_hell*_hell-0.1,0,1) );
		DrawFinal( _draw1_black, _posx-_ldirx, _posy-_ldiry, 100, 100, range(0.5-_hell,0,1) );
	}

	FUNC["border_stay"]=
	{
		_col2_r = GetParam( _line, "Color2", CurTime(), 0 );
		_col2_g = GetParam( _line, "Color2", CurTime(), 1 );
		_col2_b = GetParam( _line, "Color2", CurTime(), 2 );
		_draw2 = FillColor( _img_border, _col2_r, _col2_g, _col2_b );
		_draw2_black = FillColor( _img_text, 0, 0, 0 );

		_ldirx = LightPosX - _posx;
		_ldiry = LightPosY - _posy;
		_ldirlen = sqrt( _ldirx*_ldirx + _ldiry*_ldiry + 0.0001 );
		_ldirx = _ldirx / _ldirlen;
		_ldiry = _ldiry / _ldirlen;
		_sizegain = 40 / (1+_ldirlen);

		DrawFinal( _draw2, _posx, _posy, 100, 100, 1 );
		DrawFinal( _draw2_black, _posx-_ldirx, _posy-_ldiry, 100, 100, 1 );
		DrawFinal( _draw2_black, _posx-_ldirx*2, _posy-_ldiry*2, 100+_sizegain, 100+_sizegain, 0.8 );
		DrawFinal( _draw2_black, _posx-_ldirx*3, _posy-_ldiry*3, 100+_sizegain*2, 100+_sizegain*2, 0.6 );
		DrawFinal( _draw2_black, _posx-_ldirx*4, _posy-_ldiry*4, 100+_sizegain*3, 100+_sizegain*3, 0.4 );
		DrawFinal( _draw2_black, _posx-_ldirx*5, _posy-_ldiry*5, 100+_sizegain*4, 100+_sizegain*4, 0.2 );
		DrawFinal( _draw2_black, _posx-_ldirx*6, _posy-_ldiry*6, 100+_sizegain*5, 100+_sizegain*5, 0.1 );
		DrawFinal( _draw2_black, _posx-_ldirx*7, _posy-_ldiry*7, 100+_sizegain*6, 100+_sizegain*6, 0.1 );
		DrawFinal( _draw2_black, _posx-_ldirx*8, _posy-_ldiry*8, 100+_sizegain*7, 100+_sizegain*7, 0.1 );
		DrawFinal( _draw2_black, _posx-_ldirx*9, _posy-_ldiry*9, 100+_sizegain*8, 100+_sizegain*8, 0.1 );
		DrawFinal( _draw2_black, _posx-_ldirx*10, _posy-_ldiry*10, 100+_sizegain*9, 100+_sizegain*9, 0.05 );
		DrawFinal( _draw2_black, _posx-_ldirx*11, _posy-_ldiry*11, 100+_sizegain*10, 100+_sizegain*10, 0.05 );
	}

	FUNC["light_pos_zneg"]=
	{
//		LightPosZ = LightPosZ*0.9 + (-10)*0.1;
	//	LightPosZ = -10;
	}

	FUNC["light_pos_reset"]=
	{
		LightPosX = 0;
	//	LightPosZ = -10;
	}

	FUNC["light_pos"]=
	{
		LightPosX = LightPosX*0.8 + (_posx)*0.2;
		LightPosY = LightPosY*0.8 + (_posy-20)*0.2;
	//	LightPosZ = LightPosZ*0.8 + (10)*0.2;
	//LightPosX = _posx;
	//LightPosY = _posy;
	//LightPosZ = 10;
	}

	FUNC["light_draw"]=
	{
		_col0_r = GetParam( _line, "Color0", CurTime(), 0 );
		_col0_g = GetParam( _line, "Color0", CurTime(), 1 );
		_col0_b = GetParam( _line, "Color0", CurTime(), 2 );
		_cli = FillColor( LightImg, _col0_r, _col0_g, _col0_b );
		_cli2 = FillColor( LightImg2, _col0_r*2, _col0_g*2, _col0_b*2 );

		DrawFinal( _cli2, LightPosX, LightPosY+12, 100, 100, 1 );
		GenParticleFx( "lighttrail", _cli, 1, LightPosX, LightPosY+12, 0.01, 0.5, 0 );
		EmitterAlpha( "lighttrail", 0.3 );
		ParticleForce( "lighttrail", LightPosX+rand(-10,10), LightPosY+12+rand(-20,20), 10, 0.3 );
		ParticleForce( "lighttrail", LightPosX+rand(-20,10), LightPosY+12+rand(-10,20), 10, 0.3 );
		ParticleForce( "lighttrail", LightPosX+rand(-10,20), LightPosY+12+rand(-20,10), 10, 0.3 );
		ParticleForce( "lighttrail", LightPosX+rand(-20,20), LightPosY+12+rand(-20,20), 10, 0.3 );		
	}

	FUNC["perKara_fill"]=
	{
		Emit( "fill_stay", CurLineStart, CurLineEnd, CurLine, CurKara, -1 );
	}
	FUNC["perKara_border"]=
	{
		Emit( "border_stay", CurLineStart, CurLineEnd, CurLine, CurKara, -1 );
	}

	FUNC["perKara_jumplight"]=
	{
		Emit( "light_pos", CurKaraStart, CurKaraEnd, CurLine, CurKara, -1 );
	}

	FUNC["perLine"]=
	{
		Emit( "light_pos_zneg", CurLineStart, CurLineEnd, CurLine, -1, -1 );
		Emit( "light_pos_reset", CurLineStart-oneframe*2, CurLineStart-oneframe*1, CurLine, -1, -1 );
		EnumKaras( "perKara_jumplight", CurLine );

		EnumKaras( "perKara_border", CurLine );
		EnumKaras( "perKara_fill", CurLine );
	}
	FUNC["perLine2"]=
	{
		Emit( "light_draw", CurLineStart, CurLineEnd, CurLine, -1, -1 );
	}

	EnumLines( "perLine" );
	EnumLines( "perLine2" );
}