Here is the current version of the code I'm using for the card, which, other than the 0,0 spawning post-death, seems to work great by now :
task lazertime{
let angle = 100;
wait(60); //One time wait so the cutin can disappear by this time, and the boss can move into position
loop{
while(GetShotCount(Zataihou) > 160){yield;} //If there's many souls on screen, stop creating new lasers and trails. Once again, Zataihou = objBoss in this example.
wait(10);
ascent(i in 1..6){
let obj = CreateCurveLaserA1(ObjMove_GetX(Zataihou), ObjMove_GetY(Zataihou), 12, angle+i*12, 30, 20, 1019, 10); //Handles the lasers
ObjCrLaser_SetTipDecrement(obj,0); //Makes laser hitbox fair
ObjMove_SetAngularVelocity(obj,-7); //Handles the initial curving of the lasers
trail(obj); //Task to spawn trails
straighten(obj); //Task to have the lasers go straight after a short while (so they leave the screen)
angle+=30; //Increment angle to give different laser angles
}
}}
task trail(obj){
while(Obj_IsDeleted(obj)){return;} //Supposed to handle preventing 0,0 spawning, which works until player death, but some souls spawn at 0,0 anyway on respawn.
loop(5){
wait(8);
let souls = CreateShotA1(ObjMove_GetX(obj),ObjMove_GetY(obj),0,0,rand(291,298),10); //Creates the souls
fly(souls);} //Task to wait until there's a certain amount of souls, then let them begin moving
}
task straighten(obj){
ObjMove_AddPatternA2(obj,60,NO_CHANGE,NO_CHANGE,NO_CHANGE,0,11); //Task to straighten the lasers by setting their angular velocity to 0, leaving everything else intact.
}
task fly(souls){
while(GetShotCount(Zataihou) < 150){yield;} //Wait until there's enough souls, then...
ObjMove_AddPatternA2(souls,60,NO_CHANGE,rand(40,150),0.01,0,12); //... let them move around.
I'm assuming that since the lasers are in an ascent loop (which I need to have an incrementing angle, imo this is the easiest way to do so) they get spawned just a tiny bit one after the other, and because of that, since there's at least one obj (laser) on screen by that time, the ones that can spawn at the lasers' x, while the rest spawn in at 0,0?
Then again, this does not happen when the card starts out, only after player respawn. It's... weird.
For me, personally, it's not a big deal to use DeleteShotInCircle aimed at 0,0 as a workaround, but for keen eyes, it really does look wonky regardless.