#東方弾幕風 #Title[分裂弾テスト] #Text[テストスクリプト] #ScriptVersion[2] script_enemy_main { let imgBoss = "script\img\ExRumia.png"; let ShotTiming; @Initialize { SetX(GetCenterX); SetY(GetClipMinY + 120); SetLife(2500); SetTimer(60); SetDamageRate(50,50); SetInvincibility(180); LoadGraphic(imgBoss); SetTexture(imgBoss); SetGraphicRect(0, 0, 63, 63); TMain; } @MainLoop { Bombregist; // 発射間隔制御 // if(GetEnemyLife() <= 800){ ShotTiming = 60; } else if(GetEnemyLife() <= 1100){ ShotTiming = 80; } else if(GetEnemyLife() <= 1400){ ShotTiming = 100; } else if(GetEnemyLife() <= 1700){ ShotTiming = 140; } else{ ShotTiming = 180; } SetCollisionA(GetX, GetY, 24); SetCollisionB(GetX, GetY, 24); yield; } @DrawLoop { DrawGraphic(GetX, GetY); } @Finalize { DeleteGraphic(imgBoss); } // キャラを移動させるタスク task TMain{ loop(120){ yield; } loop{ Split_Shot(GetX, GetY, GetAngleToPlayer, 8, RED03, 10); MoveToPlayer(rand(50,80), rand(-20,20), 50, GetClipMinX+75, GetClipMinY+80, GetClipMaxX-75, GetClipMinY+110); loop(ShotTiming){ yield; } } yield; } //分裂弾L task Split_Shot(x, y, angle, spd, color, delay){ //オブジェクト弾の作成 let obj = Obj_Create(OBJ_SHOT); //パラメータの設定 Obj_SetPosition(obj, x, y); Obj_SetAngle(obj, angle); Obj_SetSpeed(obj, spd); ObjShot_SetGraphic(obj, color); ObjShot_SetDelay(obj, delay); loop(delay){ yield; } loop{ Obj_SetSpeed(obj, spd); if(spd<=2){break;} spd -=0.2; yield; } loop(10){ Split_Shot_ten(Obj_GetX(obj), Obj_GetY(obj), angle, 2, RED03, 30); angle +=36; } Obj_Delete(obj); yield; } let s = 20; //10分裂弾L task Split_Shot_ten(x, y, angle, spd, color, delay){ //オブジェクト弾の作成 let obj = Obj_Create(OBJ_SHOT); //パラメータの設定 Obj_SetPosition(obj, x, y); Obj_SetAngle(obj, angle); Obj_SetSpeed(obj, spd); ObjShot_SetGraphic(obj, color); ObjShot_SetDelay(obj, delay); loop(delay){ yield; } loop(s){ yield; } loop(3){ Split_Shot_three_M(Obj_GetX(obj), Obj_GetY(obj), angle, 2, 0); angle +=120; } Obj_Delete(obj); yield; } //3分裂弾M task Split_Shot_three_M(x, y, angle, spd, delay){ //オブジェクト弾の作成 let obj = Obj_Create(OBJ_SHOT); //パラメータの設定 Obj_SetPosition(obj, x, y); Obj_SetAngle(obj, angle); Obj_SetSpeed(obj, spd); ObjShot_SetGraphic(obj, RED02); ObjShot_SetDelay(obj, delay); loop(delay){ yield; } loop(s){ yield; } loop(3){ Split_Shot_three_S(Obj_GetX(obj), Obj_GetY(obj), angle, 2, 0); angle +=120; } Obj_Delete(obj); yield; } //3分裂弾S task Split_Shot_three_S(x, y, angle, spd, delay){ //オブジェクト弾の作成 let obj = Obj_Create(OBJ_SHOT); //パラメータの設定 Obj_SetPosition(obj, x, y); Obj_SetAngle(obj, angle); Obj_SetSpeed(obj, spd); ObjShot_SetGraphic(obj, RED01); ObjShot_SetDelay(obj, delay); loop(delay){ yield; } loop(s){ yield; } loop(3){ CreateShot01(Obj_GetX(obj), Obj_GetY(obj), 2, angle, RED05, 0); angle +=120; } Obj_Delete(obj); yield; } //ボム中無敵 task Bombregist{ while(OnBomb==true){ SetInvincibility(100); yield; } } // なるべくプレイヤーの方向に移動 // xMove : x 方向の移動量(正の数) // yAdd : y 方向の移動量 // frame : 移動に要するフレーム数 // left : 以下、可動範囲 // top : // right : // bottom : function MoveToPlayer(xMove, yAdd, frame, left, top, right, bottom) { let x; let y; if(GetX() >= right){// 可動範囲より右に出た場合。 x = GetX - xMove; } else if(GetX() <= left){// 可動範囲より左に出た場合。 x = GetX + xMove; } else if(GetPlayerX < GetX) { x = GetX - xMove; // プレイヤーより左にいる場合。 } else { x = GetX + xMove; //プレイヤーより右にいる場合。 } // 可動領域の外に行く場合は、端っこで止めます。 y = GetY + yAdd; if(y < top) {y = top;} else if(bottom < y) {y = bottom;} SetMovePosition02(x, y, frame); } }