Collision isn't too hard, just ensure declaration of 'reflector' (etc.) Objects are both A) Unique and B) public (aka the 'let' text is in normal variable location, not a task/loop/etc. )
I'll try?
EDIT: 8D Okay, does odd things once in a while, but... :3
#TouhouDanmakufu
#Title[Mirror Sign 「Border Trackers」]
#Text[Testing obj collision]
#BackGround[Default]
#BGM[.\bgm.mp3]
#PlayLevel[Test]
#Player[FREE]
#ScriptVersion[2]
script_enemy_main {
let frame = -120;
let arc = 0.5;
let cx=GetCenterX();
let minx=GetClipMinX;
let maxx=GetClipMaxX;
let miny=GetClipMinY;
let maxy=GetClipMaxY;
let cy=GetCenterY();
let imgExRumia="script\img\ExRumia.png";
let BossCutIn = "player\Rumia\RumiaCutIn.png";
let SEShot = GetCurrentScriptDirectory~"sound\Eff1.wav";
let objLaz1=Obj_Create(OBJ_LASER);
let objLaz2=Obj_Create(OBJ_LASER);
task BoundShot(x, y, v, angle) {
let obj=Obj_Create(OBJ_SHOT);
Obj_SetPosition(obj, x, y);
Obj_SetAngle(obj, angle);
Obj_SetSpeed(obj, v);
ObjShot_SetGraphic(obj, RED01);
ObjShot_SetDelay (obj, 10);
ObjShot_SetBombResist (obj, true);
while(Obj_BeDeleted(obj)==false) {
if(Collision_Obj_Obj(obj,objLaz1)) {
Obj_SetAngle(obj,180 - Obj_GetAngle(obj) );
Obj_SetX(obj,Obj_GetX(objLaz1) + 5);
}
if(Collision_Obj_Obj(obj,objLaz2)) {
Obj_SetAngle(obj, 180 - Obj_GetAngle(obj) );
Obj_SetX(obj,Obj_GetX(objLaz2) - 5);
}
if(Obj_GetY(obj) < 0){
Obj_SetY(obj,10);
Obj_SetAngle(obj,180-Obj_GetAngle(obj));
}
yield;
}
}
task Lasercage1() {
Obj_SetAngle(objLaz1, 90);
ObjLaser_SetLength(objLaz1, maxx+50);
ObjLaser_SetWidth(objLaz1, 7);
ObjShot_SetDelay(objLaz1, 60);
ObjShot_SetGraphic(objLaz1, WHITE01);
Obj_SetSpeed(objLaz1, 0);
Obj_SetY(objLaz1, 0);
while(Obj_BeDeleted(objLaz1)==false) {
if(GetPlayerX-120 > minx){
Obj_SetX(objLaz1, GetPlayerX-120);
}else{
Obj_SetX(objLaz1, minx);
}
Obj_SetCollisionToObject(objLaz1, true);
ObjShot_SetBombResist(objLaz1, true);
yield;
}
}
task Lasercage2() {
Obj_SetAngle(objLaz2, 90);
ObjLaser_SetLength(objLaz2, maxx+50);
ObjLaser_SetWidth(objLaz2, 7);
ObjShot_SetDelay(objLaz2, 60);
ObjShot_SetGraphic(objLaz2, WHITE01);
Obj_SetSpeed(objLaz2, 0);
Obj_SetY(objLaz2, 0);
while(Obj_BeDeleted(objLaz1)==false) {
if(GetPlayerX+120 < maxx){
Obj_SetX(objLaz2, GetPlayerX+120);
}else{
Obj_SetX(objLaz2, maxx);
}
Obj_SetCollisionToObject(objLaz2, true);
ObjShot_SetBombResist(objLaz2, true);
yield;
}
}
@Initialize {
SetLife(4000);
SetDamageRate(100,80);
SetTimer(50);
SetInvincibility(120);
Concentration01(120);
SetEnemyMarker(true);
SetScore(1000000);
SetEffectForZeroLife(120,51,1);
LoadGraphic(imgExRumia);
SetGraphicRect(1,1,64,64);
CutIn(YOUMU, "Mirror Sign 「Border Trackers」", BossCutIn, 0, 0, 200, 600);
}
@MainLoop {
SetCollisionA(GetX, GetY, 32);
SetCollisionB(GetX, GetY, 24);
SetY(90);
SetX(GetPlayerX);
SetShotAutoDeleteClip(175,64,175,64);
if (frame==-60){
Lasercage1;
Lasercage2;
}
frame++;
if (frame==0){
BoundShot(GetX,GetY,2.5,arc);
BoundShot(GetX,GetY,2.5,arc+90);
BoundShot(GetX,GetY,2.5,arc+180);
BoundShot(GetX,GetY,2.5,arc+270);
arc += rand_int(8,12);
}
if (frame==9){
frame = -1;
}
yield;
}
@DrawLoop {
SetTexture(imgExRumia);
SetGraphicRect(64,1,127,64);
DrawGraphic(GetX,GetY);
}
@Finalize {
loop(8){
CreateItem(ITEM_SCORE,cx+rand(-100,100),rand(20,100));
}
DeleteGraphic(imgExRumia);
}
@BackGround {
}
}