#東方弾幕風 #Title[魔鏡「光の森林」] #Text[自作No.2] #ScriptVersion[2] script_enemy_main { let name = "魔鏡「光の森林」"; let imgBoss = "script\img\ExRumia.png"; let maxLife = 200; let spartLife = maxLife / 2; // 初期位置 let xIni = GetCenterX; let yIni = GetClipMinY + 128; @Initialize { CutIn(YOUMU, name, "", 0, 0, 0, 0); SetLife(200); SetTimer(60); SetScore(2500000); SetDamageRate(5, 5); SetInvincibility(300); LoadGraphic(imgBoss); SetTexture(imgBoss); setGraphicStop; TMain; } @MainLoop { SetCollisionA(GetX, GetY, 32); SetCollisionB(GetX, GetY, 16); yield; } @DrawLoop { DrawGraphic(GetX, GetY); } @Finalize { DeleteGraphic(imgBoss); } // メインタスク task TMain { yield; standBy; startLCircle; } // 初期位置へ移動し、攻撃開始 sub standBy { let wIni = 120; SetMovePosition02(xIni, yIni, wIni); setGraphicMove; SetInvincibility(wIni); wait(wIni); setGraphicPose; } task startLCircle { let r = (GetClipMaxX - GetClipMinX)/8; let sx = r; let sy = GetClipMinY; let v = 1.5; let w = 2 * 3.14 * r / v; let i; Concentration01(30); loop{ i = 0; loop(4){ shootLCircle(r + r * 2 * i - 16, sy, r, w, v); i++; wait(w/2); } LaserObject1(r + r * 2 * i - 16, sy, w, v); wait(w / 2); yield; } } task shootLCircle(sx, sy, r, w, v){ let n = 12; let span = 360/n; let i = 0; LaserObject1(sx, sy, w, v); wait(60); loop(n){ bulletCircle(sx, sy, r, span, i, w, v); i++; } } task bulletCircle(sx, sy, r, span, n, w, v){ let x; let y; let angle = 0 + span * n; let wspan = 180 * v/(r * 3.14); let vt = v; let c = 0; let type = RED05; let id = 0; let i; let obj = Obj_Create(OBJ_SHOT); while(!Obj_BeDeleted(obj)){ x = sx + r * (1 + cos(angle)); y = sy + vt + r * sin(angle); if(n == 0 || n == 6){ if(c % 15 == 0){ CreateShotA(id, x, y, 0); SetShotDataA(id, 0, 0, 0, 0, 0, 0, RED05); SetShotKillTime(id, w); FireShot(id); id++; } if(c % 120 == 0){ bulletLaser(x, y, w, v * 2); c = 0; } type = RED02; } Obj_SetX(obj, x); Obj_SetY(obj, y); ObjShot_SetGraphic(obj, type); c++; vt+=v; angle+=wspan; if(angle>=360){angle-=360;} yield; } } task bulletLaser(sx, sy, w, v){ let x = sx; let y = sy; let angle1 = rand(-100, -80); let angle2; let v1 = 0.1; let c = 0; let id = 0; let obj = Obj_Create(OBJ_SHOT); ObjShot_SetGraphic(obj,RED01); while(!Obj_BeDeleted(obj) && c <= w){ x += v1 * cos(angle1); y += v1 * sin(angle1); Obj_SetX(obj, x); Obj_SetY(obj, y); c++; yield; } Obj_Delete(obj); angle2 = atan2(GetPlayerY-y, GetPlayerX-x); LaserObject2(x, y, w, v, angle2); } task LaserObject1(sx, sy, w, v){ let c = 0; let vt = 0; let obj = Obj_Create(OBJ_LASER); Obj_SetAngle(obj, 90); ObjShot_SetGraphic(obj, YELLOW01); ObjLaser_SetWidth(obj, 5); ObjLaser_SetSource(obj, false); Obj_SetX(obj, sx); Obj_SetY(obj, sy); while(c <= w){ ObjLaser_SetLength(obj, vt); c++; vt+=v; yield; } c = 0; vt = 0; while(!Obj_BeDeleted(obj)){ Obj_SetY(obj, sy + vt); c++; vt+=v; yield; } } task LaserObject2(sx, sy, w, v, angle){ let vt = 0; let obj = Obj_Create(OBJ_LASER); Obj_SetAngle(obj, angle); ObjShot_SetGraphic(obj, RED01); ObjLaser_SetWidth(obj, 5); ObjLaser_SetSource(obj, false); ObjLaser_SetLength(obj, 50); while(!Obj_BeDeleted(obj)){ Obj_SetX(obj, sx + vt * cos(angle)); Obj_SetY(obj, sy + vt * sin(angle)); vt+=v; yield; } } // グラフィックの設定 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 { setGraphicRight; } } // w フレームだけ待つ function wait(w) { loop(w) { yield; } } }