I think it's why because you scaled your model by script and it's change his origin without changing bounding box, but maybe I'm wrong

so try to use my.polygon =on; or set c_setminmax(me); maybe it will help

and in function f_ship you have wait but where is while?

or try to do it with my.event function, then without loop

and in my_phaser function you have wait(20)...
I think is not the best idea to colision detection

EDIT: I see that this wait(20) is in else function... so You don't have wait(1) for while loop

cheers
Code:
}
else
{
wait (20);
ent_remove (me);
}
wait(1);
}
}