I know, I know, but I have to agree that this version is REALLY a little bit too hard.
A "playable" version that I could capture with a hittable character here:
#TouhouDanmakufu
#Title[Nightmare "Boundary of Wave and Particle"]
#Text[THIS - IS - BULLET HELL!]
#Player[FREE]
#ScriptVersion[2]
script_enemy_main {
let ImgBoss = "script\img\ExRumia.png";
let count = -70;
let fire = 0;
@Initialize {
SetLife(3000);
SetDamageRate(20, 0);
SetTimer(180);
SetScore(1000000);
SetInvincibility( 200 );
LoadGraphic(ImgBoss);
LoadUserShotData("\script\extrabosses_mcxd\images\shot_All.txt");
SetMovePosition02(GetCenterX, GetCenterY-120, 120);
CutIn(YOUMU, "Chi-Eiki "\""Rainbow Reflection"\", "", 0, 0, 0, 0);
SetGraphicRect(0, 0, 64, 64);
}
@MainLoop {
SetCollisionA(GetX, GetY, 32);
SetCollisionB(GetX, GetY, 16);
if ((count == 100)){
particle;
}
count++;
yield;
}
@DrawLoop {
SetTexture(ImgBoss);
DrawGraphic(GetX, GetY);
}
@Finalize {
DeleteGraphic(ImgBoss);
}
task particle{
let b = 0;
let bup = 7.3;
let reverse = 0;
let lrar = 0;
let kput = 1;
let krar = 72;
let Length = 0;
let n = 0;
let q = 0;
let RollerX;
let RollerY;
loop{
PlaySE(GetCurrentScriptDirectory~"SFX\Shot1.wav");
ascent(a in 0..kput){
RollerX = GetX + Length * cos((180+a*krar+b)+1*(360/2));
RollerY = GetY + Length * sin((180+a*krar+b)+1*(360/2));
Reflection(RollerX, RollerY, 0.7, (360+a*krar+b), 49, 8);
if (GetLife<2625 || GetTimer<140){
Reflection(RollerX, RollerY, 0.8, (360+a*krar+b)+45, 50, 8);}
if (GetLife<2250 || GetTimer<120){
Reflection(RollerX, RollerY, 0.9, (360+a*krar+b)+90, 51, 8);}
if (GetLife<1875 || GetTimer<100){
Reflection(RollerX, RollerY, 1, (360+a*krar+b)+135, 52, 8);}
if (GetLife<1500 || GetTimer<80){
Reflection(RollerX, RollerY, 1.1, (360+a*krar+b)+180, 53, 8);}
if (GetLife<1125 || GetTimer<60){
Reflection(RollerX, RollerY, 1.2, (360+a*krar+b)+225, 54, 8);}
if (GetLife<750 || GetTimer<40){
Reflection(RollerX, RollerY, 1.3, (360+a*krar+b)+270, 55, 8);}
if (GetLife<375 || GetTimer<20){
Reflection(RollerX, RollerY, 1.4, (360+a*krar+b)+315, 56, 8);}
}
if (reverse == 0){
if (bup < 0){
bup += 0;
}
else{
reverse++;
}
}
else{
if (bup > -0){
bup -= 0;
}
else{
reverse--;
}
}
b += bup;
if (Length > 0){
Length -= 0;
}
loop(5){
yield;
}
}
}
task Reflection(x, y, spe, dir, graph, delay){
let obj = Obj_Create(OBJ_SHOT);
let b = 0;
Obj_SetPosition (obj, x, y);
Obj_SetSpeed (obj, spe);
Obj_SetAngle (obj, dir);
ObjShot_SetGraphic(obj, graph);
ObjShot_SetDelay (obj, delay);
while(! Obj_BeDeleted(obj)) {
if (Obj_GetX(obj)<GetClipMinX && b==0) {Obj_SetAngle(obj, -dir+180); b=1;}
if (Obj_GetX(obj)>GetClipMaxX && b==0) {Obj_SetAngle(obj, -dir+180); b=1;}
if (Obj_GetY(obj)<GetClipMinY && b==0) {Obj_SetAngle(obj, -dir); b=1;}
yield;
}
}
}