#東方弾幕風 #Title[風刃「鎌鼬」] #Text[かまいたち] #Image[] #BackGround[] #ScriptVersion[2] script_enemy_main { let imgExRumia=GetCurrentScriptDirectory~"img\ExRumia.png"; let wSpd = 15; @Initialize() { CutIn(YOUMU, "風刃「鎌鼬」",0 , 0, 0, 0, 0); SetLife(2000);//敵のライフを2000に設定 SetDamageRate(40, 20); SetTimer(30); SetScore(4000000); SetGraphicRect(64,1,127,64);//描画元の矩形を(64,1)-(127,64)に設定 LoadGraphic(imgExRumia);//画像「img\ExRumia.png」を読みこむ LoadUserShotData(GetCurrentScriptDirectory ~ "data_usershot.txt"); SetDurableSpellCard; TMain; } @MainLoop() { SetCollisionA(GetX(),GetY(),32);//敵の座標に当たり判定を登録 SetCollisionB(GetX(),GetY(),24);//敵の座標に当たり判定(体当たり用)を登録 SetInvincibility(10); yield;//毎フレームタスク復帰 } @DrawLoop() { SetTexture(imgExRumia); DrawGraphic(GetX(),GetY());//敵の座標にExルーミアを描画; } @Finalize() { DeleteGraphic(imgExRumia); } //------------------------------------------------------- //メインタスク task TMain { yield; standBy; Tshot(30 ,16 ,150 ,3 ,false); Tshot(16 ,7 ,60 ,2 ,false); Tshot(7 ,0 ,30 ,2 ,true); } // 初期位置へ移動 sub standBy { let wIni = 120; SetMovePosition02(GetCenterX, GetClipMinY+70, wIni); setGraphicMove; SetInvincibility(wIni); wait(wIni); setGraphicPose; SetMovePosition02(GetClipMinX() -40 ,GetClipMinY -40 ,40); wait(40); } //弾制御タスク task Tshot(a ,b ,wSht ,shtn ,crazy) { Tmove(a ,b ,wSht ,crazy); let id = 1; loop { if (GetTimer < a && GetTimer >= b) { loop(30) { //いくつ出すか(時間) loop(shtn) { //一度に出す弾の数 CreateShotA(id ,GetX() ,GetY() ,0); SetShotDataA(id ,0 ,0 ,rand(0,360) ,0 ,0 ,0 ,GREEN12); SetShotDataA(id ,50 ,1 ,rand(0,360) ,0 ,0 ,1 ,GREEN12); FireShot(id); } wait(1); } wait(wSht); }//if else {yield;} }//loop } //移動制御タスク task Tmove(a, b ,wSht ,crazy) { loop{ if (GetTimer < a && GetTimer >= b) { SetX(GetClipMinX() -40); SetY(GetClipMinY() -40); if(GetAngleToPlayer() > 45) { SetMovePosition02(GetPlayerX() -60 ,GetPlayerY() +60 ,wSpd); wait(wSpd); SetMovePosition02(GetClipMaxX() +40 ,GetClipMaxY() +40 ,wSpd); wait(wSpd); } else { SetMovePosition02(GetPlayerX() +60 ,GetPlayerY() -60 ,wSpd); wait(wSpd); SetMovePosition02(GetClipMaxX() +40 ,GetClipMaxY() +40 ,wSpd); wait(wSpd); }//else wait(wSht); if(crazy) { //発狂モード SetX(GetClipMaxX() +40); SetY(GetClipMinY() -40); if(GetAngleToPlayer() > 135) { SetMovePosition02(GetPlayerX() -60 ,GetPlayerY() -60 ,wSpd); wait(wSpd); SetMovePosition02(GetClipMinX() -40 ,GetClipMaxY() +40 ,wSpd); wait(wSpd); } else { SetMovePosition02(GetPlayerX() +60 ,GetPlayerY() +60 ,wSpd); wait(wSpd); SetMovePosition02(GetClipMinX() -40 ,GetClipMaxY() +40 ,wSpd); wait(wSpd); }//else }//crazy else { if(GetAngleToPlayer() < 225) { SetMovePosition02(GetPlayerX() -60 ,GetPlayerY() +60 ,wSpd); wait(wSpd); SetMovePosition02(GetClipMinX() -40 ,GetClipMinY() -40 ,wSpd); wait(wSpd); } else { SetMovePosition02(GetPlayerX() +60 ,GetPlayerY() -60 ,wSpd); wait(wSpd); SetMovePosition02(GetClipMinX() -40 ,GetClipMinY() -40 ,wSpd); wait(wSpd); }//else } wait(wSht); }//if else{yield;} }//loop }//task // グラフィックの設定 sub setGraphicStop { SetGraphicRect( 0, 0, 64, 64); } sub setGraphicPose { SetGraphicRect( 64, 0, 128, 64); } sub setGraphicLeft { SetGraphicRect(128, 0, 192, 64); } sub setGraphicRight { SetGraphicRect(192, 0, 256, 64); } sub setGraphicMove { if(GetSpeedX < 0) { setGraphicLeft; } else if(GetSpeedX > 0){ setGraphicRight; } else if(GetSpeedY > 0 || GetSpeedY < 0){ setGraphicStop; } else if(GetSpeedY == 0){ setGraphicPose; } } // w フレームだけ待つ function wait(w) { loop(w) { yield; } } }