#e[Player]
#ScriptVersion[2]
#Menu[Jc]
#Text[[U[L[ŃbNVbg[hA
L͈&Η͏WVbg[h؂ւ\B
Η͍A蔻菬B
bNVbgAGɐڋ߂΂ق
IvVΗ͏㏸B
Ver2.00]
#Image[]
#ReplayName[ketui_sanae]

script_player_main {
	let bShot  = false;
    let bSlow  = false;
	let mt = false;
	let Mode = false;
	let opShotAngle1=-90;
	let opShotAngle2=-90;
	let opShotAngle3=-90;
	let opShotAngle4=-90;
	let opX1=-20;
	let opX2=20;
	let opX3=-10;
	let opX4=10;
	let opY1=0;
	let opY2=0;
	let opY3=20;
	let opY4=20;
	let op2X1=-40;
	let op2X2=40;
	let op2X3=-20;
	let op2X4=20;
	let op2Y1=0;
	let op2Y2=0;
	let op2Y3=0;
	let op2Y4=0;
	let SE1 = GetCurrentScriptDirectory ~"tm2r_shoot16.wav";
	let SE2 = GetCurrentScriptDirectory ~"tm2_gun006_minigunlp2.wav";
	let SE3 = GetCurrentScriptDirectory ~"se1.wav";
	let RSAngle1 = -100;
    let RSAngle2 = -80; 
    let RSAngle3 = -95;
    let RSAngle4 = -85;
    let RSAngle5 = -100;
    let RSAngle6 = -80; 
    let RSAngle7 = -95;
    let RSAngle8 = -85;
    let EF = GetCurrentScriptDirectory ~"Sanae_effect01.png";
    let n = 1;
    let MainShotCount = 0;
    let Rock = false;
    let se = 0;
    let TargetX=GetPlayerX;
	let TargetY=GetPlayerY+300;

	
	@Initialize {
		
		LoadGraphic(GetCurrentScriptDirectory ~ "player_sanae.png");
		LoadGraphic(EF);
		
		SetSpeed(4, 1.5);
		
		
		SetGrazeCircle(30);
		
		
		SetItemCollectLine(180);
		
		
		SetInitialBombCount(3);
		
		
		SetPlayerLifeImage(GetCurrentScriptDirectory ~ "player_sanae.png", 0, 192, 31, 223);
		
		
		LoadPlayerShotData(GetCurrentScriptDirectory ~ "sanaeShot.txt");
		Tmain;
	}
	
	@MainLoop {
		
		
		
		SetIntersectionCircle(GetPlayerX, GetPlayerY, 0.7);
		if (OnBomb){
			SetItemCollectLine(470);
		}else if (!OnBomb){
			SetItemCollectLine(180);
		}
		
		yield;
		
	}
	
	@Missed {
		SetInitialBombCount(3+1+GetMissCount);
		
		
	}
	
	@SpellCard {
		
		UseSpellCard("bom", 0);
		
}
	@DrawLoop {
		
		
		
		SetTexture(GetCurrentScriptDirectory ~ "player_sanae.png");
		
		
		if((GetKeyState(VK_LEFT) == KEY_PUSH) || (GetKeyState(VK_LEFT) == KEY_HOLD))
		{
			
			
			SetGraphicRect(0, 48, 47, 95);
		}
		else if((GetKeyState(VK_RIGHT) == KEY_PUSH) || (GetKeyState(VK_RIGHT) == KEY_HOLD))
		{
			
			
			SetGraphicRect(0, 96, 47, 143);
		}
		else
		{
			
			
			SetGraphicRect(0, 0, 47, 47);
		}
		
	
		DrawGraphic(GetPlayerX, GetPlayerY);


		if (!Mode){
			SetGraphicRect(22, 161, 37, 176);
			DrawGraphic(GetPlayerX+opX1, GetPlayerY+opY1);
			SetGraphicRect(22, 161, 37, 176);
			DrawGraphic(GetPlayerX+opX2, GetPlayerY+opY2);
			SetGraphicRect(22, 161, 37, 176);
			DrawGraphic(GetPlayerX+opX3, GetPlayerY+opY3);
			SetGraphicRect(22, 161, 37, 176);
			DrawGraphic(GetPlayerX+opX4, GetPlayerY+opY4);
		} else if (Mode) {
			SetGraphicRect(42, 161, 57, 176);
			DrawGraphic(GetPlayerX+op2X1, GetPlayerY+op2Y1);
			SetGraphicRect(42, 161, 57, 176);
			DrawGraphic(GetPlayerX+op2X2, GetPlayerY+op2Y2);
			SetGraphicRect(42, 161, 57, 176);
			DrawGraphic(GetPlayerX+op2X3, GetPlayerY+op2Y3);
			SetGraphicRect(42, 161, 57, 176);
			DrawGraphic(GetPlayerX+op2X4, GetPlayerY+op2Y4);
		}
			
	}
	
	@Finalize {

		
		DeleteGraphic(GetCurrentScriptDirectory ~ "player_sanae.png");
	}

task Tmain{
	yield;
	MT;
	MH;
	TMShot;
	TAngle;
	SShot;
}
task rockm(tx,ty){
	
	loop{
	if (Mode){
		
				let obj=Obj_Create(OBJ_EFFECT);
				ObjEffect_SetTexture(obj,EF);
				ObjEffect_SetLayer(obj,5);
				ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
				ObjEffect_CreateVertex(obj,4);
				ObjEffect_SetRenderState(obj, ADD);
				ObjEffect_SetVertexUV(obj, 0, 96, 160);
				ObjEffect_SetVertexUV(obj, 1, 96, 255);
				ObjEffect_SetVertexUV(obj, 2, 191, 160);
				ObjEffect_SetVertexUV(obj, 3, 191, 255);
				ObjEffect_SetVertexXY(obj,0,-40,-40);
				ObjEffect_SetVertexXY(obj,1,40,-40);
				ObjEffect_SetVertexXY(obj,2,-40,40);
				ObjEffect_SetVertexXY(obj,3,40,40);
				loop {
				Obj_SetPosition(obj,tx,ty);
				if (!Mode){
					Obj_Delete(obj);

				break;
						  }
				if (GetEnemyNum == 0){
						Obj_Delete(obj);

				break;
			}
					
				yield;
				Obj_Delete(obj);
					}
							
								
				}
				
			yield;
		}
		}

task TMShot {	
        let bShotP = false;
        let t = 0;
        
        loop {
            if(!bShot) {
                if(bShotP) {
                    t = 10;
                }
                if(t == 0) {
                    while(! bShot) { yield; }
                } else {
                    t--;
                }
            }
            if (Mode){
	            PlaySE("sePlayerShot01.wav");
	            RockShot(GetPlayerX,GetPlayerY,-90);
	            MShot(GetPlayerX+10,GetPlayerY,-85);
	MShot(GetPlayerX-10,GetPlayerY,-95);		
 	MShot(GetPlayerX+5,GetPlayerY,-90);
	MShot(GetPlayerX-5,GetPlayerY,-90);
	
            bShotP = bShot;

            wait(6);
            
           }else if (!bSlow){
	           PlaySE("sePlayerShot01.wav");
	CreatePlayerShot01(GetPlayerX+10,GetPlayerY,18,-50, 1.4, 2, 1  );
	CreatePlayerShot01(GetPlayerX-10,GetPlayerY,18,-130, 1.4, 2, 1  );
	CreatePlayerShot01(GetPlayerX+10,GetPlayerY,18,-65, 1.4, 2, 1  );
	CreatePlayerShot01(GetPlayerX-10,GetPlayerY,18,-115, 1.4, 2, 1  );
 	CreatePlayerShot01(GetPlayerX+5,GetPlayerY,20,-80, 1.4, 2, 1  );
	CreatePlayerShot01(GetPlayerX-5,GetPlayerY,20,-100, 1.4, 2, 1  );
	CreatePlayerShot01(GetPlayerX+5,GetPlayerY,20,-90, 1.4, 2, 1  );
	CreatePlayerShot01(GetPlayerX-5,GetPlayerY,20,-90, 1.4, 2, 1  );
            bShotP = bShot;
            wait(6);
           }else if(bSlow){
	           PlaySE("sePlayerShot01.wav");
	           CreatePlayerShot01(GetPlayerX+10,GetPlayerY,18,-89, 1.4, 2, 1);
			CreatePlayerShot01(GetPlayerX-10,GetPlayerY,18,-91, 1.4, 2, 1);		
			CreatePlayerShot01(GetPlayerX+5,GetPlayerY,20,-90, 1.4, 2, 1);
		       CreatePlayerShot01(GetPlayerX-5,GetPlayerY,20,-90, 1.4, 2, 1);
		       CreatePlayerShot01(GetPlayerX+5,GetPlayerY,20,-90, 1.4, 2, 1);
		       CreatePlayerShot01(GetPlayerX-5,GetPlayerY,20,-90, 1.4, 2, 1);
		       CreatePlayerShot01(GetPlayerX+10,GetPlayerY,18,-89, 1.4, 2, 1  );
	CreatePlayerShot01(GetPlayerX-10,GetPlayerY,18,-91, 1.4, 2, 1  );
		       bShotP = bShot;
            wait(6);
						}
	
	
        }
	      
    }
    	task TAngle{
		let angle;
		loop{
			if(Mode) {
				 if (Rock){
				RSAngle1 = atan2(TargetY-(GetPlayerY+op2Y1-5),TargetX- (GetPlayerX+op2X1));        
    				RSAngle2 = atan2(TargetY-(GetPlayerY+op2Y2-5),TargetX- (GetPlayerX+op2X2)); 
    				RSAngle3 = atan2(TargetY-(GetPlayerY+op2Y3-5),TargetX- (GetPlayerX+op2X3));      
    				RSAngle4 = atan2(TargetY-(GetPlayerY+op2Y4-5),TargetX- (GetPlayerX+op2X4));
    				
    				RSAngle5 = atan2(TargetY-(GetPlayerY+op2Y1+5),TargetX- (GetPlayerX+op2X1));        
    				RSAngle6 = atan2(TargetY-(GetPlayerY+op2Y2+5),TargetX- (GetPlayerX+op2X2)); 
    				RSAngle7 = atan2(TargetY-(GetPlayerY+op2Y3+5),TargetX- (GetPlayerX+op2X3));      
    				RSAngle8 = atan2(TargetY-(GetPlayerY+op2Y4+5),TargetX- (GetPlayerX+op2X4));
    			}else {
	    			RSAngle1 = -90;
	    			RSAngle2 = -90;
	    			RSAngle3 = -90;
	    			RSAngle4 = -90;
	    			RSAngle5 = -90;
	    			RSAngle6 = -90;
	    			RSAngle7 = -90;
	    			RSAngle8 = -90;
	    		}

}else if (!bSlow){
				RSAngle1 = -130;
    				RSAngle2 = -50; 
    				RSAngle3 = -100;
    				RSAngle4 = -80;
				}else if (bSlow){
					RSAngle1 = -90;
    				RSAngle2 = -90; 
    				RSAngle3 = -90;
    				RSAngle4 = -90;
    			}


			yield;
			}
	}
task SShot{
	let bShotP = false;
        let t = 0;
        let d = 0;
        let P = 0.7;
        let L = 0;
        loop {
            if(! bShot) {
                if(bShotP) {
                    t = 10;
                }
                if(t == 0) {
                    while(! bShot) { yield; }
                } else {
                    t--;
                }
            }
            if (Mode){
	            d = 3;
	           }else{
		           d= 6;
		          }
            if(!Mode){
            CreatePlayerShot01(GetPlayerX+opX1,GetPlayerY+opY1,18,RSAngle1, 1.4, 2, 2);
			CreatePlayerShot01(GetPlayerX+opX2,GetPlayerY+opY2,18,RSAngle2, 1.4, 2, 2);		
 			CreatePlayerShot01(GetPlayerX+opX3,GetPlayerY+opY3,18,RSAngle3, 1.4, 2, 2);
			CreatePlayerShot01(GetPlayerX+opX4,GetPlayerY+opY4,18,RSAngle4, 1.4, 2, 2);
			wait(d);
			bShotP = bShot;
		} else if (Mode) {
			L = GetGapLength(GetPlayerX,GetPlayerY,GetEnemyX,GetEnemyY);
			if (L > 200){
				P = 0.7;
			}else if (L<100){
				P = 1.4;
			}else if (L<150){
				P = 1.2;
			}else if (L<200){
				P = 1.0;
			}
			CreatePlayerShot01(GetPlayerX+op2X1-5,GetPlayerY+op2Y1,18,RSAngle1, P, 3, 5);
			CreatePlayerShot01(GetPlayerX+op2X2-5,GetPlayerY+op2Y2,18,RSAngle2, P, 3, 5);		
 			CreatePlayerShot01(GetPlayerX+op2X3-5,GetPlayerY+op2Y3,18,RSAngle3, P, 3, 5);
			CreatePlayerShot01(GetPlayerX+op2X4-5,GetPlayerY+op2Y4,18,RSAngle4, P, 3, 5);
			
			CreatePlayerShot01(GetPlayerX+op2X1+5,GetPlayerY+op2Y1,18,RSAngle5, P, 3, 5);
			CreatePlayerShot01(GetPlayerX+op2X2+5,GetPlayerY+op2Y2,18,RSAngle6, P, 3, 5);		
 			CreatePlayerShot01(GetPlayerX+op2X3+5,GetPlayerY+op2Y3,18,RSAngle7, P, 3, 5);
			CreatePlayerShot01(GetPlayerX+op2X4+5,GetPlayerY+op2Y4,18,RSAngle8, P, 3, 5);
			bShotP = bShot;
			wait(d)
		}
		yield;
	}
}
	            
task MShot(x,y,angle){
	let MSO = Obj_Create(OBJ_SHOT);
	Obj_SetX(MSO, x);
	Obj_SetY(MSO, y);
	ObjShot_SetGraphic(MSO, 4);
	ObjShot_SetDamage(MSO, 1);
	ObjShot_SetPenetration(MSO, 1);
	Obj_SetAngle(MSO,angle);
	Obj_SetSpeed(MSO,18);
	while( !Obj_BeDeleted(MSO) && Obj_GetY(MSO)>GetClipMinY-64){yield;}
	Obj_Delete(MSO);
}

task RockShot(x,y,angle){
	let MSO = Obj_Create(OBJ_SHOT);
	Obj_SetX(MSO, x);
	Obj_SetY(MSO, y);
	ObjShot_SetGraphic(MSO, 4);
	ObjShot_SetDamage(MSO, 0);
	ObjShot_SetPenetration(MSO, 1);
	Obj_SetAngle(MSO,angle);
	Obj_SetSpeed(MSO,18);
	while( !Obj_BeDeleted(MSO) && Obj_GetY(MSO)>GetClipMinY-64){
		if(Obj_IsIntersected(MSO)){
			RockTag(Obj_GetX(MSO),Obj_GetY(MSO));
		}
	yield;}
	MainShotCount--;
	Obj_Delete(MSO);
}
task RockTag(x,y){
	let D=0;
	let dx=0;
	let dy=0;
	let MD=10000;
	let EID=0;
	ascent(enemy in EnumEnemyBegin..EnumEnemyEnd){
		let enemyID = EnumEnemyGetID(enemy);
		let Enx=GetEnemyInfo(enemyID,ENEMY_X);
		let Eny=GetEnemyInfo(enemyID,ENEMY_Y);
		if(Enx>=GetClipMinX && Enx<=GetClipMaxX && Eny>=GetClipMinY && Eny<=GetClipMaxY){
			dx=Enx-x;
			dy=Eny-y;
			D=dx*dx+dy*dy;
			if(D<MD){
				MD=D;
				EID=enemyID;
				}
			}
		}
	EnemyRock(EID);
	}
task EnemyRock(enemyID){
	Rock=true;
	while(GetEnemyInfoDefault(enemyID, ENEMY_LIFE,-1)>0 && bShot && !OnMissed){
		TargetX=GetEnemyInfoDefault(enemyID, ENEMY_X,224);
		TargetY=GetEnemyInfoDefault(enemyID, ENEMY_Y,-60);
		yield;
		}
	Rock=false;
	}
task MT{
		let sta;
		loop {
			sta  = GetKeyState(VK_SHOT);
            bShot  = (sta == KEY_PUSH || sta == KEY_HOLD);
        
            sta  = GetKeyState(VK_SLOWMOVE);
            bSlow  = (sta == KEY_PUSH || sta == KEY_HOLD);
            
			sta = GetKeyState(VK_USER);
			mt = (sta == KEY_PUSH);
			yield;
		}
}
task MH{
	loop{
		if(mt){
			if(!Mode){
				PlaySE(SE1);
				Mode = true;
			}else if(Mode) {
				PlaySE(SE3);
				Mode = false;
			}
		}
		yield;
	}
}




function GetGapLength(
	let xA,		// _AxW
	let yA,		// _AyW
	let xB,		// _BxW
	let yB		// _ByW
){
	return ( ( xB - xA ) ^ 2 + ( yB - yA ) ^ 2 ) ^ 0.5;
}

function wait(w) {
        loop(w) { yield; }
    }
}






script_spell bom {
	let EF = GetCurrentScriptDirectory ~"Sanae_shots.png";
	let angle1 = 0;
	let angle2 = 0;
	@Initialize {
        SetPlayerInvincibility(300);
        LoadGraphic(EF);
	TMain;
    }

    @Finalize {
    }

    @MainLoop {
        yield;

    }
    task TMain {
	    yield;
	    exp;
	   }
	   task exp{
		   
		   let objs = Obj_Create(OBJ_SPELL);
		   Obj_SetX(objs, GetPlayerX);
		   Obj_SetX(objs, GetPlayerY-200);
		   PlaySE(GetCurrentScriptDirectory ~"bom01.wav");
		   ObjEffect_SetTexture(objs,EF);
				ObjEffect_SetLayer(objs,5);
				ObjEffect_SetPrimitiveType(objs,PRIMITIVE_TRIANGLESTRIP);
				ObjEffect_CreateVertex(objs,4);
				ObjEffect_SetVertexUV(objs, 0, 88, 144);
				ObjEffect_SetVertexUV(objs, 1, 88, 231);
				ObjEffect_SetVertexUV(objs, 2, 182, 144);
				ObjEffect_SetVertexUV(objs, 3, 182, 231);
				ObjEffect_SetVertexXY(objs,0,-50,-50);
				ObjEffect_SetVertexXY(objs,1,50,-50);
				ObjEffect_SetVertexXY(objs,2,-50,50);
				ObjEffect_SetVertexXY(objs,3,50,50);
				

					Obj_SetPosition(objs, GetPlayerX, GetPlayerY-200);
					loop(240){
						ObjSpell_SetIntersecrionCircle(objs, GetPlayerX, GetPlayerY-200, 300, 10, true);
						ObjEffect_SetScale(objs, angle1,angle2);
						angle1 -= 0.5;
						angle2 += 0.5;
						wait(1);
					}
					
				
		   Obj_Delete(objs);
		   End;
		  }
		  function wait(w) {
        loop(w) { yield; }
    }
		 }