#東方弾幕風[Player] //自機スクリプトであることを示します #ScriptVersion[2] //スクリプトバージョン2が必須です #Menu[春雨] //自機選択画面で表示されるメニューです #Text[俺も幻想入り〜主人公] //自機選択画面で表示されるテキストです #Image[player\Rumia\RumiaSelect.png] //自機選択画面で表示される画像ファイルへのパスです #ReplayName[Harusame] //リプレイ選択時に表示される文字です。8文字以内です。 script_player_main { let imgChar = "player\Rumia\Rumia.png"; let imgCharCutIn = "player\Rumia\RumiaCutIn.png"; let shotCount = -1;//弾を連続で発射するための変数 let bNextShot = false;//ちょん押しでも自弾を連続発射するための変数(説明しづらい) @Initialize { //自機の初期化時に一回だけ呼び出される部分です SetPlayerLifeImage(imgChar, 1, 5, 49, 60);//残機数の画像 LoadGraphic(imgChar); SetSpeed(4, 1.6);//移動速度を設定 LoadPlayerShotData("player\Rumia\RumiaShotData.txt"); SetItemCollectLine(128);//アイテム回収ラインを設定 } @MainLoop { if((GetKeyState(VK_SHOT)==KEY_PUSH || GetKeyState(VK_SHOT)==KEY_HOLD || bNextShot==true) && shotCount==-1) { shotCount = 0; bNextShot = false; } if(GetKeyState(VK_SHOT)==KEY_HOLD && shotCount>0) { bNextShot = true; } if(shotCount%15 == 0) { CreatePlayerShot01(GetPlayerX(), GetPlayerY(), 15, -90, 1, 1, 1); } if(shotCount >= 0) { shotCount++; } if(shotCount == 30) { shotCount=-1; } SetIntersectionCircle(GetPlayerX, GetPlayerY, 10);//当たり判定登録 yield; } @Missed{} @SpellCard { UseSpellCard("fumei", true); //カットイン CutIn(KOUMA,"指揮符「????」", imgCharCutIn); } @DrawLoop { //描画ループ。スキップされない限り1フレームに1回実行されます SetColor(255, 255, 255); SetRenderState(ALPHA); SetTexture(imgChar); if(GetKeyState(VK_LEFT)==KEY_PUSH || GetKeyState(VK_LEFT)==KEY_HOLD) { SetGraphicRect(1, 133, 49, 188); } else if(GetKeyState(VK_RIGHT)==KEY_PUSH || GetKeyState(VK_RIGHT)==KEY_HOLD) { SetGraphicRect(1, 69, 49, 124); } else { SetGraphicRect(1, 5, 49, 60); } DrawGraphic(GetPlayerX(), GetPlayerY()); } @Finalize { DeleteGraphic(imgChar); } } script_spell fumei { let current = GetCurrentScriptDirectory(); let imgEffect = "player\Rumia\RumiaSpell.png"; @Initialize { //SetPlayerInvincibility(300);//無敵時間を設定 run(); } @MainLoop { yield; } @Finalize { } task run() { loop(48){yield;}//組み込みのカットインが終わるまで待機 let i = 0; loop(65535){ if(!Obj_BeDeleted(i)){ let y = 224 - Obj_GetY(i); let x = 192 - Obj_GetX(i); let angle = atan2(y, x); Obj_SetAngle(i,angle); Obj_SetSpeed(i,sqrt(x*x+y*y)/120); } i++; } loop(120){;yield;} let ex = GetEnemyX(); let ey = GetEnemyY(); i = 0; loop(65535){ if(!Obj_BeDeleted(i) && Obj_GetY(i) < 229 && Obj_GetY(i) > 219 && Obj_GetX(i) < 197 && Obj_GetX(i) > 187){ let y = ey - Obj_GetY(i); let x = ex - Obj_GetX(i); let angle = atan2(y, x); Obj_SetAngle(i,angle); Obj_SetSpeed(i,sqrt(x*x+y*y)/30); } i++; } loop(30){;yield;} let obj = Obj_Create(OBJ_SPELL); ObjSpell_SetIntersecrionCircle(obj,GetEnemyX(),GetEnemyY(),30,10*GetEnemyShotCountEx(GetEnemyX(),GetEnemyY(),50,ALL),true); yield; Obj_Delete(obj); i = 0; loop(65535){ if(!Obj_BeDeleted(i) && Obj_GetY(i) < ey+20 && Obj_GetY(i) > ey-20 && Obj_GetX(i) < ex+20 && Obj_GetX(i) > ex-20){ let y = GetPlayerY() - Obj_GetY(i); let x = GetPlayerX() - Obj_GetX(i); let angle = atan2(y, x); Obj_SetAngle(i,angle+rand(-50,50)); Obj_SetSpeed(i,sqrt(x*x+y*y)/60); } i++; } End(); } function sqrt(real c){ let xn; let i; let n; n = 10; xn = 0; while (xn*xn