	task StageIntro {
		StageIntroBack;
		StageIntroLocation;
		StageIntroName;
	}
	task StageIntroBack {
		let obj = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj, intro);
		ObjEffect_SetLayer(obj, 5);
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_CreateVertex(obj, 4);
		ObjEffect_SetVertexUV(obj, 0, 0, 48);
		ObjEffect_SetVertexUV(obj, 1, 384, 48);
		ObjEffect_SetVertexUV(obj, 2, 384, 80);
		ObjEffect_SetVertexUV(obj, 3, 0, 80);
		ObjEffect_SetVertexXY(obj, 0, -192, -16);
		ObjEffect_SetVertexXY(obj, 1, 192, -16);
		ObjEffect_SetVertexXY(obj, 2, 192, 16);
		ObjEffect_SetVertexXY(obj, 3, -192, 16);
		Obj_SetPosition(obj, GetCenterX, 156);
		descent(i in 0..30) {
			ObjEffect_SetScale(obj, 1, 1-i/30);
		yield; }
		loop(120) { yield; }
		ascent(i in 0..30) {
			ascent(j in 0..4) { ObjEffect_SetVertexColor(obj, j, 255-i/30*255, 255, 255, 255); }
		yield; } Obj_Delete(obj);
	}
	task StageIntroLocation {
		let obj = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj, intro);
		ObjEffect_SetLayer(obj, 5);
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_CreateVertex(obj, 4);
		ObjEffect_SetVertexUV(obj, 0, 0, 32);
		ObjEffect_SetVertexUV(obj, 1, 384, 32);
		ObjEffect_SetVertexUV(obj, 2, 384, 48);
		ObjEffect_SetVertexUV(obj, 3, 0, 48);
		ObjEffect_SetVertexXY(obj, 0, -192, -8);
		ObjEffect_SetVertexXY(obj, 1, 192, -8);
		ObjEffect_SetVertexXY(obj, 2, 192, 8);
		ObjEffect_SetVertexXY(obj, 3, -192, 8);
		Obj_SetPosition(obj, GetCenterX, 168);
		ascent(i in 0..30) {
			ascent(j in 0..4) { ObjEffect_SetVertexColor(obj, j, (i+1)/30*255, 255, 255, 255); }
		yield; }
		loop(120) { yield; }
		ascent(i in 0..30) {
			ascent(j in 0..4) { ObjEffect_SetVertexColor(obj, j, 255-i/30*255, 255, 255, 255); }
		yield; } Obj_Delete(obj);
	}
	task StageIntroName {
		let obj = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj, intro);
		ObjEffect_SetLayer(obj, 5);
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_CreateVertex(obj, 4);
		ObjEffect_SetVertexUV(obj, 0, 0, 0);
		ObjEffect_SetVertexUV(obj, 1, 384, 0);
		ObjEffect_SetVertexUV(obj, 2, 384, 32);
		ObjEffect_SetVertexUV(obj, 3, 0, 32);
		ObjEffect_SetVertexXY(obj, 0, -192, -16);
		ObjEffect_SetVertexXY(obj, 1, 192, -16);
		ObjEffect_SetVertexXY(obj, 2, 192, 16);
		ObjEffect_SetVertexXY(obj, 3, -192, 16);
		Obj_SetPosition(obj, GetCenterX, 144);
		ascent(i in 0..30) {
			ObjEffect_SetScale(obj, 1+(30-i)/30*1/4, 1+(30-i)/30*1/4);
			ascent(j in 0..4) { ObjEffect_SetVertexColor(obj, j, (i+1)/30*255, 255, 255, 255); }
		yield; }
		loop(150) { yield; }
		ascent(i in 0..30) {
			ascent(j in 0..4) { ObjEffect_SetVertexColor(obj, j, 255-i/30*255, 255, 255, 255); }
		yield; } Obj_Delete(obj);
	}
	task MusicName(let num) {
		yield;
		let obj = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_SetLayer(obj, 5);
		ObjEffect_SetTexture(obj, intro);
		ObjEffect_SetRenderState(obj, ALPHA);
		ObjEffect_CreateVertex(obj, 4);
		ObjEffect_SetVertexUV(obj, 0, 0, 80+16*num);
		ObjEffect_SetVertexUV(obj, 1, 384, 80+16*num);
		ObjEffect_SetVertexUV(obj, 2, 384, 96+16*num);
		ObjEffect_SetVertexUV(obj, 3, 0, 96+16*num);
		ObjEffect_SetVertexXY(obj, 0, -384, -16);
		ObjEffect_SetVertexXY(obj, 1, 0, -16);
		ObjEffect_SetVertexXY(obj, 2, 0, 0);
		ObjEffect_SetVertexXY(obj, 3, -384, 0);
		descent(i in 0..90) {
			Obj_SetPosition(obj, GetClipMaxX-256*(cos(i*90/90)-1), GetClipMaxY);
			yield;
		}
		loop(150) { yield; }
		ascent(i in 0..60) {
			ascent(j in 0..4) { ObjEffect_SetVertexColor(obj, j, 255-i/60*255, 255, 255, 255); }
			yield;
		}
		Obj_Delete(obj);
	}