ScarletBlackMarket/script/sample/SampleA02.txt

98 lines
4.5 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#東方弾幕風[Single]
#ScriptVersion[3]
#Title["SampleA02"]
#Text["SampleA02自機方向へ5WAY"]
//デフォルト弾画像をロード
#include"script/default_system/Default_ShotConst.txt"
//----------------------------------------------------
//グローバル変数宣言
//この位置で宣言した変数はスクリプト全体で有効です。
//ただしこの箇所での変数への代入は、定数以外の代入は行えません。
//(実行順序が保障されないため乱数などの使用はできません)
//----------------------------------------------------
let objEnemy; //敵オブジェクト
let frame = 0; //敵動作に使用するカウンタ(@MainLoopで1づつ増加させます)
//----------------------------------------------------
//敵の動作
//----------------------------------------------------
@Event
{
alternative(GetEventType())
case(EV_REQUEST_LIFE)
{
//敵ライフを要求された
SetScriptResult(500);//ライフを500に設定
}
}
@Initialize
{
//敵オブジェクトを生成し登録
objEnemy = ObjEnemy_Create(OBJ_ENEMY_BOSS);
ObjEnemy_Regist(objEnemy);
//敵画像の設定
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フレームかけて移動する
let cx = GetStgFrameWidth() / 2;//STGシーンの中心x座標を取得
ObjMove_SetDestAtFrame(objEnemy, cx, 60, 60);
}
@MainLoop
{
//敵の座標を取得
let ex = ObjMove_GetX(objEnemy);
let ey = ObjMove_GetY(objEnemy);
if(frame == 60)
{
//frameが60になったら実行される部分
//自機の座標を取得
let px = GetPlayerX();
let py = GetPlayerY();
//敵からみた自機方向の角度を求める。
let angleToPlayer = atan2(py - ey, px - ex);
//angleを-30から15ずつ増加させ5WAYにする
let angle = -30;
while(angle <= 30)
{//(angle=-30, -15, 0, 15, 30)
//敵の座標から自機に向かって5WAY弾を発射する
//速度1フレームに3
//角度angle + angleToPlayer
//遅延時間30フレーム
CreateShotA1(ex, ey, 3, angle + angleToPlayer, DS_RICE_S_BLUE, 30);
angle += 15;
}
frame = 0;//弾を出したらframeを0にする
}
//当たり判定登録
ObjEnemy_SetIntersectionCircleToShot(objEnemy, ex, ey, 32);//当たり判定(自機弾用)登録
ObjEnemy_SetIntersectionCircleToPlayer(objEnemy, ex, ey, 24);//当たり判定(体当たり用)登録
//カウンタに1追加
frame++;
//ライフ0処理
if(ObjEnemy_GetInfo(objEnemy, INFO_LIFE) <= 0)
{
//ライフが0になったら即座に終了
//本来は爆発エフェクトのタスクを登録し、
//エフェクト終了を待って、スクリプトを終了します。
Obj_Delete(objEnemy);
CloseScript(GetOwnScriptID());
return;
}
}