Generalmente, en los juegos de naves (y esto es especulación, porque nunca he visto el código de un juego de naves) hay un contador que sincroniza todo el juego, en concreto, la salida de los escuadrones enemigos.
Se supone que cuando el contador llega a un tiempo determinado (por ejemplo, a los 5000 milisegundos), se lanza el primer escuadrón, y cuando llega al siguiente tiempo (a los 7000 milisegunods, es decir, dos segundos más tarde que el primero) se lanza un segundo escuadrón.
Ojo que digo "escuadrón", no "nave". Un escuadrón es un proceso que crea una nave cada x milisegundos y les dice la ruta que deben seguir.
La idea es que tengas un proceso que incrementa un contador global desde el inicio del nivel, y aparte tengas otro proceso consultando su valor, de forma que si coincide con alguno de los tiempos que tú has decidido, lance el escuadrón adecuado.
Hace tiempo, diseñé algo parecido, pero en lugar de eso, los tiempos se basaban en que un determinado escuadrón hubiera muerto, porque el juego se basaba es destruir lo más rápido posible. Un escuadrón moría cuando sus naves morían o se salían de pantalla. su código era algo así:
//escuadron 1 tarda: 400/2 + 50*n frames en desaparecer
cont=0;
//método de espera por tiempo******************************************************
for (cont=0;cont<300;cont++) frame; end
//*********************************************************************************
l2v_escuadron1(75*100,0,file,1,1, 4, 4,4,3,6);
for (cont=0;cont<400;cont++) frame; end
l2v_escuadron1(200*100,0,file,1,1, 4, 4,4,3,6);
for (cont=0;cont<400;cont++) frame; end
//método de espera por escuadrón (hasta que no sea eliminado, no sale el siguiente)
temp1=l2v_escuadron1(136*100,0,file,1,1, 4, 4,4,3,6);
while (exists(temp1)) frame; end
//*********************************************************************************
for (cont=0;cont<100;cont++) frame; end
temp1=l2v_escuadron1(75*100,0,file,1,1, 4, 4,4,3,6);
while (exists(temp1)) frame; end
temp1=l2v_escuadron1(200*100,0,file,1,1, 4, 4,4,3,6);
while (exists(temp1)) frame; end
temp1=l2v_escuadron1(136*100,0,file,1,1, 4, 4,4,3,6);
while (exists(temp1)) frame; end
Como ves, hay dos comportamientos diferentes: un bucle con un contador, para hacer una pausa entre el lanzamiento de un escuadrón y otro (que te puede servir a ti), y un WHILE-EXISTS, que hace una pausa mientras el proceso escuadrón sigue vivo.
En mis códigos no busques un "process main" porque no los hay. En el PRG (sólo escribo uno por cada proyecto) hay un BEGIN. Ese es el proceso MAIN.
Como ya dije, ando un poco out últimamente, así que lo siento, pero no puedo ser más explícito ahora, porque es que no tengo tiempo ni para mis proyectos. Yo te lanzo ideas, y tu debes leerlas, entenderlas y MODIFICARLAS para ver si te dan ideas nuevas a ti.