テンプレート

初心者のうちはこれをベースに作るといいでしょう


v0.x 系用



#東方弾幕風
#Title[無符「テンプレート」]
#Text[]
#Player[FREE]
#ScriptVersion[2]
 
script_enemy_main {
let level   = 5;
//難易度を整数で設定してください 大きいほうが難しい(はず)です
let Name    = "無符「テンプレート」";
//この弾幕の名前を設定してください 必ず「"」で囲んでください
let imgBoss = "script\img\ExRumia.png";
//ボスの画像を設定できます 必ず「"」で囲んでください
let BossX   = GetCenterX;
//登場位置のXを設定できます
let BossY   = GetClipMinY+120;
//登場位置のYを設定できます
let Score   = 3000000;
//取得時の基本点を入れてください 通常弾は0にしてください 基本7桁です
let Timer   = 40;
//制限時間を設定してください 耐久にする場合はマイナスにして書いてください
@Initialize {
    SetLife(2000);
    LoadGraphic(imgBoss);
    SetTexture(imgBoss);
    SetGraphicRect(0,0,64,64);
    SetEnemyMarker(true);
    if(Score>0) {
        SetScore(Score);
        CutIn(YOUMU,Name,"",0,0,0,0);
    }
    if(Timer>0) {
        SetTimer(Timer);
    } else if(Timer<0) {
        SetTimer(-Timer);
        SetDurableSpellCard;
        SetDamageRate(0,0);
    }
    StartTask;
}
@MainLoop {
    SetCollisionA(GetX,GetY,24);
    SetCollisionB(GetX,GetY,24);
    yield;
}
@DrawLoop {
    if(GetSpeed < 0.1) {
        SetGraphicRect(0,0,64,64);
    } else if(cos(GetAngle) < 0) {
        SetGraphicRect(128,0,192,64);
    } else {
        SetGraphicRect(192,0,256,64);
    }
    DrawGraphic(GetX,GetY);
}
@Finalize {
    DeleteGraphic(imgBoss);
}
//--------------------ここから--------------------
task StartTask {
//弾幕を打ち始めるまでのタスクです
    SmoothMove(BossX,BossY,20,40);
    SetInvincibility(90);
    loop(90) {yield;}
    MainTask;
}
task MainTask {
//メインのタスクです
    loop(3) {
        loop(level) {
            CreateShot01(GetX,GetY,3,GetAngleToPlayer,RED01,0);
            loop(10) {yield;}
        }
        loop(30) {yield;}
    }
    MoveTask;
}
task MoveTask {
//ボスが動くときのタスクです
    let Move = rand(70,90);
    Move = Move*Qif(GetX<=GetPlayerX,Qif(GetX+Move<416,1,-1),Qif(GetX-Move>32,-1,1));
    SmoothMove(GetX+Move,rand(BossY-40,BossY+40),20,40);
    loop(60) {yield;}
    MainTask;
}
//--------------------ここまで--------------------
task SmoothMove(X,Y,Time,Time2) {
//減速してスムーズに移動するタスクです
//SmoothMove(X位置,Y位置,等速,移動時間,減速移動時間);
    let Distance = ((Y-GetY)^2+(X-GetX)^2)^0.5;
    let Speed = Distance/(Time*2+Time2)*2;
    SetAngle(atan2(Y-GetY,X-GetX));
    SetSpeed(Speed);
    loop(Time) {yield;}
    loop(Time2) {
        SetSpeed(GetSpeed-(Speed/(Time2*2)));
        yield;
        SetSpeed(GetSpeed-(Speed/(Time2*2)));
    }
    SetSpeed(0);
}
task ObjShot01(X,Y,Speed,Angle,Color,Delay,Stop,Stop2,Change,Change2,Speed2,Angle2,Color2) {
//一旦停止して動き出すオブジェクトショット用タスクです 停止終了が-だと減速しません
//ObjShot01(X位置,Y位置,速度,角度,色,延長,停止開始,停止終了,再起開始,再起終了,再速度,再角度,再色);
    let obj = ObjShot(X,Y,Speed,Angle,Color,Delay);
    loop(Stop + Delay) {yield;}
    let Acc = Obj_GetSpeed(obj) / (Stop2*2);
    loop(Stop2) {
        Obj_SetSpeed(obj,Obj_GetSpeed(obj) - Acc);
        yield;
        Obj_SetSpeed(obj,Obj_GetSpeed(obj) - Acc);
    }
    if(Stop2 >= 0) {
        Obj_SetSpeed(obj,0);
    }
    loop(Change) {yield;}
    Obj_SetAngle(obj,Angle2);
    ObjShot_SetGraphic(obj,Color2);
    Acc = (Speed2 - Obj_GetSpeed(obj)) / (Change2*2);
    loop(Change2) {
        Obj_SetSpeed(obj,Obj_GetSpeed(obj) + Acc);
        yield;
        Obj_SetSpeed(obj,Obj_GetSpeed(obj) + Acc);
    }
    Obj_SetSpeed(obj,Speed2);
}
function ObjShot(X,Y,Speed,Angle,Color,Delay) {
//オブジェクトショットを一行で作ります。
//ObjShot(X位置,Y位置,速度,角度,色,延長);
    let obj = Obj_Create(OBJ_SHOT);
    Obj_SetX(obj,X);
    Obj_SetY(obj,Y);
    Obj_SetSpeed(obj,Speed);
    Obj_SetAngle(obj,Angle);
    ObjShot_SetGraphic(obj,Color);
    ObjShot_SetDelay(obj,Delay);
    return obj;
}
function LineShot01(X,Y,Speed,Angle,Color,Delay,Way,Speed2,Delay2) {
//弾を直線に打つ関数です いわゆる線状弾です
//LineShot01(X位置,Y位置,速度,中心角度,色,延長,数,速度差,延長差);
    loop(Way) {
        CreateShot01(X,Y,Speed,Angle,Color,Delay);
        Speed += Speed2;
        Delay += Delay2;
    }
}
function WayShot01(X,Y,Speed,Angle,Color,Delay,Way,Gap) {
//弾を複数の方向に打つ関数です いわゆるWay弾です
//WayShot01(X位置,Y位置,速度,中心角度,色,延長,数,弾と弾の間);
    Angle -= (Way-1)/2*Gap;
    loop(Way) {
        CreateShot01(X,Y,Speed,Angle,Color,Delay);
        Angle += Gap;
    }
}
function RoundShot01(X,Y,Speed,Angle,Color,Delay,Way) {
//弾を全方向に打つ関数です いわゆる全方位弾です
//RoundShot01(X位置,Y位置,速度,中心角度,色,延長,数);
    loop(Way) {
        CreateShot01(X,Y,Speed,Angle,Color,Delay);
        Angle += 360/Way;
    }
}
function Qif(Quest,YesR,NoR) {
//条件の真偽で返り値を変化させる関数です
//Qif(条件,真の返り値,偽の返り値);
    if(Quest) {
        return(YesR)
    } else {
        return(NoR)
    }
}
}


  • 最終更新:2018-05-13 06:47:24

このWIKIを編集するにはパスワード入力が必要です

認証パスワード