More advanced stage enemy problem!
Code for an enemy in a stage script is as follows:
script_enemy_main
{//Slave-having enemy
let count=0;
let cx=GetCenterX();
let imgEnemy=GetCurrentScriptDirectory~"img\Enemy.png";
let imgAngle=0;
let shotAngle=0;
let id = GetArgument;
function wait(n) {
loop(n) { yield; }
}
task TMove {
wait(400);
VanishEnemy;
}
@Initialize
{
SetLife(500);
SetGraphicRect(1,1,32,32);
SetMovePosition03(GetCenterX+(-(GetX-GetCenterX)+600), GetY + 800, 30, 1);
if(id) {
SetCommonData("Enemy01LeftX", GetX);
SetCommonData("Enemy01LeftY", GetY);
} else {
SetCommonData("Enemy01RightX", GetX);
SetCommonData("Enemy01RightY", GetY);
}
SetCommonData("Enemy01Side", GetArgument);
ascent(i in 0..4) {
CreateEnemyFromScript("Familiar", GetX, GetY, 0, 0, i*90);
}
TMove;
}
@MainLoop
{
SetCollisionA(GetX, GetY, 16);
SetCollisionB(GetX, GetY, 16);
if(id) {
SetCommonData("Enemy01LeftX", GetX);
SetCommonData("Enemy01LeftY", GetY);
} else {
SetCommonData("Enemy01RightX", GetX);
SetCommonData("Enemy01RightY", GetY);
}
yield;
}
@Finalize
{//読みこんだファイルを削除
CreateItem(ITEM_SCORE, GetX + rand(-10,10), GetY + rand(10,10));
}
@DrawLoop
{//描画
SetTexture(imgEnemy);
SetColor(255,255,255);
SetRenderState(ALPHA);
SetGraphicAngle(0,0,imgAngle);
DrawGraphic(GetX(),GetY());
SetRenderState(ADD);
SetGraphicAngle(0,0,-imgAngle);
DrawGraphic(GetX(),GetY());
imgAngle+=4;
if(imgAngle>360){imgAngle=0;}
}
}
script_enemy Familiar {
let ImgFam = GetCurrentScriptDirectory ~ "img\Enemy.png";
let imgAngle=0;
let angle = GetArgument;
let id = false;
function wait(w) {
loop(w) { yield; }
}
@Initialize {
SetLife(100);
SetScore(0);
SetDamageRateEx(100, 100, 50, 50);
LoadGraphic(ImgFam);
SetTexture(ImgFam);
SetGraphicRect(1,1,32,32);
id = GetCommonData("Enemy01Side");
TRotate;
TFire;
}
@MainLoop {
SetCollisionA(GetX, GetY, 8);
SetCollisionB(GetX, GetY, 8);
yield;
}
@DrawLoop
{//描画
SetTexture(ImgFam);
SetColor(255,255,255);
SetRenderState(ALPHA);
SetGraphicAngle(0,0,imgAngle);
DrawGraphic(GetX(),GetY());
SetRenderState(ADD);
SetGraphicAngle(0,0,-imgAngle);
DrawGraphic(GetX(),GetY());
imgAngle+=4;
if(imgAngle>360){imgAngle=0;}
}
@Finalize
{//読みこんだファイルを削除
CreateShot01(GetX, GetY, 2, angle, RED01, 10);
CreateShot01(GetX, GetY, 2, angle+30, RED01, 10);
CreateShot01(GetX, GetY, 2, angle-30, RED01, 10);
CreateItem(ITEM_SCORE, GetX + rand(-10,10), GetY + rand(10,10));
}
// rotate around the boss
task TRotate {
let eX = 0;
let eY = 0;
loop {
if(id) {
eX = GetCommonData("Enemy01LeftX");
eY = GetCommonData("Enemy01LeftY");
} else {
eX = GetCommonData("Enemy01RightX");
eY = GetCommonData("Enemy01RightY");
}
SetX(eX + cos(angle) * 50);
SetY(eY + sin(angle) * 50);
yield;
angle += 1.5;
}
}
task TFire {
loop {
CreateShot01(GetX, GetY, 2, angle, RED01, 10);
wait(40);
}
}
}
This is supposed to create one enemy with four slave enemies rotating around it. I have a test state script with just the one enemy, and it does do this - but as soon as the master enemy is killed, the game crashes and force-quits. Is there some kind of garbage collection I should be doing in here?