104 lines
2.4 KiB
Plaintext
104 lines
2.4 KiB
Plaintext
|
#TouhouDanmakufu[Single]
|
||
|
#ScriptVersion[3]
|
||
|
#Title["SampleB01"]
|
||
|
#Text["SampleB01: ObjPatternShot Demonstrations[r] Powered by Junko"]
|
||
|
|
||
|
#include "script/default_system/Default_ShotConst.txt"
|
||
|
|
||
|
let objEnemy;
|
||
|
let frame = 0;
|
||
|
|
||
|
@Event {
|
||
|
alternative(GetEventType())
|
||
|
case(EV_REQUEST_LIFE) {
|
||
|
SetScriptResult(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);
|
||
|
ObjSprite2D_SetDestCenter(objEnemy);
|
||
|
|
||
|
let cx = GetStgFrameWidth() / 2;
|
||
|
ObjMove_SetDestAtFrame(objEnemy, cx, 120, 60);
|
||
|
|
||
|
SetPlayerInvincibilityFrame(600000);
|
||
|
|
||
|
TShot();
|
||
|
}
|
||
|
|
||
|
@MainLoop {
|
||
|
let ex = ObjMove_GetX(objEnemy);
|
||
|
let ey = ObjMove_GetY(objEnemy);
|
||
|
|
||
|
ObjEnemy_SetIntersectionCircleToShot(objEnemy, ex, ey, 32);
|
||
|
ObjEnemy_SetIntersectionCircleToPlayer(objEnemy, ex, ey, 24);
|
||
|
|
||
|
yield;
|
||
|
|
||
|
if (ObjEnemy_GetInfo(objEnemy, INFO_LIFE) <= 0) {
|
||
|
Obj_Delete(objEnemy);
|
||
|
CloseScript(GetOwnScriptID());
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
task TShot() {
|
||
|
let objPattern1 = ObjPatternShot_Create();
|
||
|
|
||
|
ObjPatternShot_SetParentObject(objPattern1, objEnemy);
|
||
|
|
||
|
ObjPatternShot_SetDelay(objPattern1, 12);
|
||
|
ObjPatternShot_SetGraphic(objPattern1, DS_BALL_S_RED);
|
||
|
|
||
|
ObjPatternShot_SetSpeed(objPattern1, 2, 1);
|
||
|
ObjPatternShot_SetAngle(objPattern1, 90, 0);
|
||
|
|
||
|
ObjPatternShot_SetPatternType(objPattern1, PATTERN_RING);
|
||
|
ObjPatternShot_SetShotCount(objPattern1, 22, 1);
|
||
|
|
||
|
ObjPatternShot_SetShootRadius(objPattern1, 48);
|
||
|
|
||
|
let objPattern2 = ObjPatternShot_Create();
|
||
|
ObjPatternShot_CopySettings(objPattern2, objPattern1);
|
||
|
|
||
|
ObjPatternShot_SetGraphic(objPattern2, DS_BALL_S_PURPLE);
|
||
|
|
||
|
ObjPatternShot_SetSpeed(objPattern2, 1, 1);
|
||
|
|
||
|
ObjPatternShot_SetShotCount(objPattern2, 10, 1);
|
||
|
|
||
|
wait(60);
|
||
|
|
||
|
let frame = 0;
|
||
|
while (ObjEnemy_GetInfo(objEnemy, INFO_LIFE) > 0) {
|
||
|
if (frame % 30 == 0) {
|
||
|
ObjPatternShot_SetBasePointOffsetCircle(objPattern1, rand(0, 360), 32);
|
||
|
ObjPatternShot_Fire(objPattern1);
|
||
|
}
|
||
|
|
||
|
if (frame % 40 == 0 && frame > 75) {
|
||
|
for each (iX in [288, 96]) {
|
||
|
ObjPatternShot_SetBasePoint(objPattern2, iX, 144);
|
||
|
ObjPatternShot_SetBasePointOffsetCircle(objPattern2, rand(0, 360), 32);
|
||
|
|
||
|
ObjPatternShot_SetAngle(objPattern2, rand(0, 360), 0);
|
||
|
|
||
|
ObjPatternShot_Fire(objPattern2);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
frame++;
|
||
|
yield;
|
||
|
}
|
||
|
|
||
|
Obj_Delete(objPattern1);
|
||
|
Obj_Delete(objPattern2);
|
||
|
}
|
||
|
|