#東方弾幕風[Single] #ScriptVersion[3] #Title["495"] #Text["反射弾"] //デフォルト弾画像をロード #include"script/default_system/Default_ShotConst.txt" #include"script/default_system/Default_Effect.txt" //---------------------------------------------------- //グローバル変数宣言 //この位置で宣言した変数はスクリプト全体で有効です。 //ただしこの箇所での変数への代入は、定数以外の代入は行えません。 //(実行順序が保障されないため乱数などの使用はできません) //---------------------------------------------------- let objEnemy; //敵オブジェクト let cx = GetStgFrameWidth() / 2; /*let cy = GetStgFrameLength() / 2;*/ //---------------------------------------------------- //敵の動作 //---------------------------------------------------- @Event { alternative(GetEventType()) case(EV_REQUEST_LIFE) { //敵ライフを要求された SetScriptResult(10000);//ライフを500に設定 } case(EV_REQUEST_TIMER) { SetScriptResult(150); } case(EV_REQUEST_SPELL_SCORE) { SetScriptResult(1000000); } } @Initialize { //敵オブジェクトを生成し登録 objEnemy = ObjEnemy_Create(OBJ_ENEMY_BOSS); ObjEnemy_Regist(objEnemy); ObjEnemy_SetDamageRate(objEnemy,50,0); //敵画像の設定 let imgExRumia = GetCurrentScriptDirectory ~ "ExRumia.png"; //敵画像ファイル ObjPrim_SetTexture(objEnemy, imgExRumia); //画像ファイルを読み込む ObjSprite2D_SetSourceRect(objEnemy, 64, 1, 127, 64); //描画元矩形を(64,1) - (127,64)に設定 ObjSprite2D_SetDestCenter(objEnemy); //描画先を中心(0, 0)に設定 //座標(cx, 60)へ60フレームかけて移動する //STGシーンの中心x座標を取得 ObjMove_SetDestAtFrame(objEnemy, cx, 100, 60); Main; End; } @MainLoop { //敵の座標を取得 let ex = ObjMove_GetX(objEnemy); let ey = ObjMove_GetY(objEnemy); //当たり判定登録 ObjEnemy_SetIntersectionCircleToShot(objEnemy, ex, ey, 32);//当たり判定(自機弾用)登録 ObjEnemy_SetIntersectionCircleToPlayer(objEnemy, ex, ey, 24);//当たり判定(体当たり用)登録 yield; } task Main{ Delete; wait(120); /* CutIn(KOUMA,"Q.E.D「495年の波紋」",0,0,0,0,0); Concentration(120); */ let objScene = GetEnemyBossSceneObjectID(); ObjEnemyBossScene_StartSpell(objScene); let way = 120; let w = 225; let x = ObjMove_GetX(objEnemy); let y = ObjMove_GetY(objEnemy); let v = 1.25; let color = DS_RICE_S_BLUE; let delay = 20; loop{ let angle = rand(-180,180); ascent(a in 0..way){ Refrect(x,y,v,angle+360/way*a,color,delay); } wait(w); x = rand(32,cx*2-32); y = rand(60,140); let life = ObjEnemy_GetInfo(objEnemy,INFO_LIFE); if(life <= 6500){v = 1.5; w = 175;} if(life <= 3500){v = 1.75; w = 125;} if(life <= 1500){v = 2; w = 75;} } } task Delete{ loop{ if(GetPlayerState == STATE_HIT){ wait(60); loop(60){ DeleteShotAll(TYPE_ALL,TYPE_FADE); wait(1); } } wait(1); } } task Refrect(x,y,v,angle,color,delay){ let obj = ObjShot_Create(OBJ_SHOT); ObjMove_SetX(obj,x); ObjMove_SetY(obj,y); ObjMove_SetSpeed(obj,v); ObjMove_SetAngle(obj,angle); ObjShot_SetGraphic(obj,color); ObjShot_SetDelay(obj,delay); ObjShot_Regist(obj); while(!Obj_IsDeleted(obj)){ if(ObjMove_GetX(obj) <= 0 || ObjMove_GetX(obj) >= 384){ ObjMove_SetAngle(obj,180-ObjMove_GetAngle(obj)); break; } else if(ObjMove_GetY(obj) <= 0){ ObjMove_SetAngle(obj,-ObjMove_GetAngle(obj)); break; } wait(1); } } function wait(w){ loop(w){yield;} } task End { while(ObjEnemy_GetInfo(objEnemy, INFO_LIFE) > 0) { yield; } let ex = ObjMove_GetX(objEnemy); let ey = ObjMove_GetY(objEnemy); TExplosionA(ex, ey, 10, 0.6); DeleteShotAll(TYPE_ALL, TYPE_ITEM);//敵弾を全て削除 Obj_Delete(objEnemy); loop(30){yield;} CloseScript(GetOwnScriptID()); }