#e[Stage]
#Title[gʏ8]
#Text[]
#Image[]
#BGM[]
#BackGround[User]
#ScriptVersion[2]
#Player[FREE,
.\player\player_border.txt,
.\player\player_magic.txt,
.\player\player_scarlet.txt,
.\player\player_nether.txt]

script_stage_main{
	#include_function".\lib.txt"
	
	let img = [	csd~"status.png",
				];
	let IMG_STATUS=img[0];
	
	@Initialize{
		SetRateScoreSystemEnable(false);
		ascent(i in 0..length(img)){LoadGraphic(img[i]);}
		Main;
	}
	
	@MainLoop{
		SetShotAutoDeleteClip(64,64,64,64);
		yield;
	}
	
	@Finalize{
		ascent(i in 0..length(img)){DeleteGraphic(img[i]);}
	}
	
	task Main{
		yield;
		System;
		CreateEnemyBossFromFile(csd~"boss.txt",0,0,0,0,0);
		while(GetEnemyNum>0){yield;}
		loop(180){yield;}
		ClearStage;
	}
	
	task System{
		let max_lifetime=0;
		let total_lifetime=0;
		let width=136;	//170
		let height=24;	//30
		let base_x=GetClipMaxX+20;
		let base_y=GetCenterY+30;
		
		Extend;
		Base;
		Timer;
		LifeTimer;
		MaxLifeTime;
		TotalLifeTime;
		MissCount;
		
		task Extend{
			loop{
				if(GetPlayerLife<8){
					ExtendPlayer(8-GetPlayerLife);
				}
				yield;
			}
		}
		
		task Base{
			let obj=Obj_Create(OBJ_EFFECT);
			ObjEffect_SetTexture(obj,IMG_STATUS);
			ObjEffect_SetLayer(obj,8);
			ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
			ObjEffect_CreateVertex(obj,4);
			ObjEffect_SetVertexUV(obj,0,0,190);
			ObjEffect_SetVertexUV(obj,1,0,200);
			ObjEffect_SetVertexUV(obj,2,170,190);
			ObjEffect_SetVertexUV(obj,3,170,200);
			ObjEffect_SetVertexXY(obj,0,0,-10);
			ObjEffect_SetVertexXY(obj,1,0,154);
			ObjEffect_SetVertexXY(obj,2,200,-10);
			ObjEffect_SetVertexXY(obj,3,200,154);
			ascent(i in 0..4){ObjEffect_SetVertexColor(obj,i,224,255,255,255);}
			Obj_SetPosition(obj,base_x,base_y);
		}
		
		task Timer{
			let obj=Obj_Create(OBJ_EFFECT);
			let posy=base_y;
			let time=0;
			let number=[0,0,0,0];
			let w_time;
			let place=1000;
			let end_time=60;
			ObjEffect_SetTexture(obj,IMG_STATUS);
			ObjEffect_SetLayer(obj,8);
			ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
			ObjEffect_CreateVertex(obj,4);
			ObjEffect_SetVertexUV(obj,0,0,1);
			ObjEffect_SetVertexUV(obj,1,0,29);
			ObjEffect_SetVertexUV(obj,2,170,1);
			ObjEffect_SetVertexUV(obj,3,170,29);
			ObjEffect_SetVertexXY(obj,0,0,0);
			ObjEffect_SetVertexXY(obj,1,0,height);
			ObjEffect_SetVertexXY(obj,2,width,0);
			ObjEffect_SetVertexXY(obj,3,width,height);
			Obj_SetPosition(obj,base_x,posy);
			
			ascent(i in 0..4){Number(i);}
			loop{
				loop(60){yield;}
				time++;
				if(time>9999){
					time=9999;
				}
				place=1000;
				w_time=time;
				ascent(i in 0..4){
					number[i]=floor(w_time/place);
					w_time-=number[i]*place;
					place/=10;
				}
				if(time>=end_time){
					ascent(i in 0..4){ObjEffect_SetVertexColor(obj,i,255,255,255,127);}
				}else{
					ascent(i in 0..4){ObjEffect_SetVertexColor(obj,i,255,255,255,255);}
				}
			}
			
			task Number(n){
				let obj=Obj_Create(OBJ_EFFECT);
				let posx=n*width/10;
				let rectx=[0,0];
				ObjEffect_SetTexture(obj,IMG_STATUS);
				ObjEffect_SetLayer(obj,8);
				ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
				ObjEffect_CreateVertex(obj,4);
				ObjEffect_SetVertexXY(obj,0,posx,0);
				ObjEffect_SetVertexXY(obj,1,posx,height);
				ObjEffect_SetVertexXY(obj,2,posx+width/10,0);
				ObjEffect_SetVertexXY(obj,3,posx+width/10,height);
				Obj_SetPosition(obj,base_x+width,posy);
				loop{
					if(time>=end_time){
						ascent(i in 0..4){ObjEffect_SetVertexColor(obj,i,255,255,255,127);}
					}else{
						ascent(i in 0..4){ObjEffect_SetVertexColor(obj,i,255,255,255,255);}
					}
					rectx=[number[n]*17,number[n]*17+17];
					ObjEffect_SetVertexUV(obj,0,rectx[0],151);
					ObjEffect_SetVertexUV(obj,1,rectx[0],179);
					ObjEffect_SetVertexUV(obj,2,rectx[1],151);
					ObjEffect_SetVertexUV(obj,3,rectx[1],179);
					yield;
				}
			}
		}
		
		task LifeTimer{
			let obj=Obj_Create(OBJ_EFFECT);
			let posy=base_y+30;
			let time=0;
			let number=[0,0,0,0];
			let w_time;
			let place=1000;
			let count=0;
			ObjEffect_SetTexture(obj,IMG_STATUS);
			ObjEffect_SetLayer(obj,8);
			ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
			ObjEffect_CreateVertex(obj,4);
			ObjEffect_SetVertexUV(obj,0,0,31);
			ObjEffect_SetVertexUV(obj,1,0,59);
			ObjEffect_SetVertexUV(obj,2,170,31);
			ObjEffect_SetVertexUV(obj,3,170,59);
			ObjEffect_SetVertexXY(obj,0,0,0);
			ObjEffect_SetVertexXY(obj,1,0,height);
			ObjEffect_SetVertexXY(obj,2,width,0);
			ObjEffect_SetVertexXY(obj,3,width,height);
			Obj_SetPosition(obj,base_x,posy);
			
			ascent(i in 0..4){Number(i);}
			loop{
				if(GetTimeOfPlayerInvincibility==0){
					count++;
				}else{
					time=0;
				}
				while(count>=60){
					time++;
					total_lifetime++;
					count-=60;
				}
				if(time>9999){
					time=9999;
				}
				if(time>max_lifetime){
					max_lifetime=time;
				}
				place=1000;
				w_time=time;
				ascent(i in 0..4){
					number[i]=floor(w_time/place);
					w_time-=number[i]*place;
					place/=10;
				}
				yield;
			}
			
			task Number(n){
				let obj=Obj_Create(OBJ_EFFECT);
				let posx=n*width/10;
				let rectx=[0,0];
				ObjEffect_SetTexture(obj,IMG_STATUS);
				ObjEffect_SetLayer(obj,8);
				ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
				ObjEffect_CreateVertex(obj,4);
				ObjEffect_SetVertexXY(obj,0,posx,0);
				ObjEffect_SetVertexXY(obj,1,posx,height);
				ObjEffect_SetVertexXY(obj,2,posx+width/10,0);
				ObjEffect_SetVertexXY(obj,3,posx+width/10,height);
				Obj_SetPosition(obj,base_x+width,posy);
				loop{
					rectx=[number[n]*17,number[n]*17+17];
					ObjEffect_SetVertexUV(obj,0,rectx[0],151);
					ObjEffect_SetVertexUV(obj,1,rectx[0],179);
					ObjEffect_SetVertexUV(obj,2,rectx[1],151);
					ObjEffect_SetVertexUV(obj,3,rectx[1],179);
					yield;
				}
			}
		}
		
		task MaxLifeTime{
			let obj=Obj_Create(OBJ_EFFECT);
			let posy=base_y+60;
			let prev_time=0;
			let number=[0,0,0,0];
			let w_time;
			let place=1000;
			ObjEffect_SetTexture(obj,IMG_STATUS);
			ObjEffect_SetLayer(obj,8);
			ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
			ObjEffect_CreateVertex(obj,4);
			ObjEffect_SetVertexUV(obj,0,0,61);
			ObjEffect_SetVertexUV(obj,1,0,89);
			ObjEffect_SetVertexUV(obj,2,170,61);
			ObjEffect_SetVertexUV(obj,3,170,89);
			ObjEffect_SetVertexXY(obj,0,0,0);
			ObjEffect_SetVertexXY(obj,1,0,height);
			ObjEffect_SetVertexXY(obj,2,width,0);
			ObjEffect_SetVertexXY(obj,3,width,height);
			Obj_SetPosition(obj,base_x,posy);
			
			ascent(i in 0..4){Number(i);}
			loop{
				place=1000;
				w_time=max_lifetime;
				prev_time=max_lifetime;
				ascent(i in 0..4){
					number[i]=floor(w_time/place);
					w_time-=number[i]*place;
					place/=10;
				}
				yield;
				while(prev_time==max_lifetime){yield;}
			}
			
			task Number(n){
				let obj=Obj_Create(OBJ_EFFECT);
				let posx=n*width/10;
				let rectx=[0,0];
				ObjEffect_SetTexture(obj,IMG_STATUS);
				ObjEffect_SetLayer(obj,8);
				ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
				ObjEffect_CreateVertex(obj,4);
				ObjEffect_SetVertexXY(obj,0,posx,0);
				ObjEffect_SetVertexXY(obj,1,posx,height);
				ObjEffect_SetVertexXY(obj,2,posx+width/10,0);
				ObjEffect_SetVertexXY(obj,3,posx+width/10,height);
				Obj_SetPosition(obj,base_x+width,posy);
				loop{
					rectx=[number[n]*17,number[n]*17+17];
					ObjEffect_SetVertexUV(obj,0,rectx[0],151);
					ObjEffect_SetVertexUV(obj,1,rectx[0],179);
					ObjEffect_SetVertexUV(obj,2,rectx[1],151);
					ObjEffect_SetVertexUV(obj,3,rectx[1],179);
					yield;
				}
			}
		}
		
		task TotalLifeTime{
			let obj=Obj_Create(OBJ_EFFECT);
			let posy=base_y+90;
			let prev_time=0;
			let number=[0,0,0,0];
			let w_time;
			let place=1000;
			ObjEffect_SetTexture(obj,IMG_STATUS);
			ObjEffect_SetLayer(obj,8);
			ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
			ObjEffect_CreateVertex(obj,4);
			ObjEffect_SetVertexUV(obj,0,0,91);
			ObjEffect_SetVertexUV(obj,1,0,119);
			ObjEffect_SetVertexUV(obj,2,170,91);
			ObjEffect_SetVertexUV(obj,3,170,119);
			ObjEffect_SetVertexXY(obj,0,0,0);
			ObjEffect_SetVertexXY(obj,1,0,height);
			ObjEffect_SetVertexXY(obj,2,width,0);
			ObjEffect_SetVertexXY(obj,3,width,height);
			Obj_SetPosition(obj,base_x,posy);
			
			ascent(i in 0..4){Number(i);}
			loop{
				place=1000;
				w_time=total_lifetime;
				prev_time=max_lifetime;
				ascent(i in 0..4){
					number[i]=floor(w_time/place);
					w_time-=number[i]*place;
					place/=10;
				}
				yield;
			}
			
			task Number(n){
				let obj=Obj_Create(OBJ_EFFECT);
				let posx=n*width/10;
				let rectx=[0,0];
				ObjEffect_SetTexture(obj,IMG_STATUS);
				ObjEffect_SetLayer(obj,8);
				ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
				ObjEffect_CreateVertex(obj,4);
				ObjEffect_SetVertexXY(obj,0,posx,0);
				ObjEffect_SetVertexXY(obj,1,posx,height);
				ObjEffect_SetVertexXY(obj,2,posx+width/10,0);
				ObjEffect_SetVertexXY(obj,3,posx+width/10,height);
				Obj_SetPosition(obj,base_x+width,posy);
				loop{
					rectx=[number[n]*17,number[n]*17+17];
					ObjEffect_SetVertexUV(obj,0,rectx[0],151);
					ObjEffect_SetVertexUV(obj,1,rectx[0],179);
					ObjEffect_SetVertexUV(obj,2,rectx[1],151);
					ObjEffect_SetVertexUV(obj,3,rectx[1],179);
					yield;
				}
			}
		}
		
		task MissCount{
			let obj=Obj_Create(OBJ_EFFECT);
			let posy=base_y+120;
			let count=0;
			let number=[0,0,0];
			let place=100;
			ObjEffect_SetTexture(obj,IMG_STATUS);
			ObjEffect_SetLayer(obj,8);
			ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
			ObjEffect_CreateVertex(obj,4);
			ObjEffect_SetVertexUV(obj,0,0,121);
			ObjEffect_SetVertexUV(obj,1,0,149);
			ObjEffect_SetVertexUV(obj,2,170,121);
			ObjEffect_SetVertexUV(obj,3,170,149);
			ObjEffect_SetVertexXY(obj,0,0,0);
			ObjEffect_SetVertexXY(obj,1,0,height);
			ObjEffect_SetVertexXY(obj,2,width,0);
			ObjEffect_SetVertexXY(obj,3,width,height);
			Obj_SetPosition(obj,base_x,posy);
			
			ascent(i in 0..3){Number(i);}
			loop{
				count=GetMissCount;
				if(count>999){
					count=999;
				}
				place=100;
				ascent(i in 0..3){
					number[i]=floor(count/place);
					count-=number[i]*place;
					place/=10;
				}
				yield;
			}
			
			task Number(n){
				let obj=Obj_Create(OBJ_EFFECT);
				let posx=n*width/10;
				let rectx=[0,0];
				ObjEffect_SetTexture(obj,IMG_STATUS);
				ObjEffect_SetLayer(obj,8);
				ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
				ObjEffect_CreateVertex(obj,4);
				ObjEffect_SetVertexXY(obj,0,posx,0);
				ObjEffect_SetVertexXY(obj,1,posx,height);
				ObjEffect_SetVertexXY(obj,2,posx+width/10,0);
				ObjEffect_SetVertexXY(obj,3,posx+width/10,height);
				Obj_SetPosition(obj,base_x+width,posy);
				loop{
					rectx=[number[n]*17,number[n]*17+17];
					ObjEffect_SetVertexUV(obj,0,rectx[0],151);
					ObjEffect_SetVertexUV(obj,1,rectx[0],179);
					ObjEffect_SetVertexUV(obj,2,rectx[1],151);
					ObjEffect_SetVertexUV(obj,3,rectx[1],179);
					yield;
				}
			}
		}
	}
}