bennu me petaba con wine y me puse a investigar ya que no me dejaba trabajar y llegé a la raiz del promlema...
dentro del proceso enemigo y para ahorrar memoria, por que cada enemigo es el mismo proceso pero con distinto grafico y movimento, le hago un switch dentro del loop
    loop
        latencia++; // uso esa variable para relantizacion de movimientos, graficos, etc        
        switch (direccion)
            case 700: // enemigo sin grafico que controla tirar bolas de fuegos en diferentes direcciones
                if (latencia % 199 == 0)
                    for (C0 = 1; C0 < 7; C0++)
                        bolafuego(C0);
                        frame(50);
                    end
                end
            end
frames y tal y tal
fin del proceso
siguiente proceso: bolafuego(direccion_de_movimiento)  C0 de arriba
begin
    x = father.x;
    y = father.y;
    loop
        graph++;
        switch (direccion_de_movimiento)
            //case 1: x +=4; y +=2; if (x>= 350) break; end end    
              case 2: x +=3; y +=3; if (y>= 260) break; end end    
              case 3: x +=2; y +=4; if (y>= 260) break; end end    
              case 4: y +=4;            if (y>= 260) break; end end    
              case 5: x -=2; y +=4; if (y>= 260) break; end end    
              case 6: x -=3; y +=3; if (y>= 260) break; end end    
              case 7: x -=4; y +=2; if (x>= -30) break; end end    
        end
        frame;
    end
end
    
    El primero lo entrecomillé porque cuando llegaba al break se quedaba todo pillao y se iba al garete, lo comenté y adios problema...
¿porque?
			
			
			
				No tengo ni idea, pero te puedo decir que esa variable C0 hace que me duelan los ojos, ya que mi cerebro no la ve como una variable sino como un valor en hexadecimal xD
Igual me equivoco, pero puede que el compilador o el intérprete también se líe con eso...
			
			
			
				es el nombre que le he dado aqui, en verdad uso una variable llamada neix, pensé que cambiarle de nombre la haría ''menos confundible''
			
			
			
				No creo que sea eso, pero en bennu el switch no tiene break. El break te está sacando del loop.
			
			
			
				todo es porque el primer proceso creado boafuego(neix) o bolafuego(c0) el parametro es igual a lo que pone en el for, osea, que como tiene que añadirse en cada Nframes...
pero eso no tiene ná que ver que se vaya al garete cuando el proceso esté fuera de pantalla, solo cuando llege al break...
			
			
			
				No tiene que ver con que se salga o no (más bien con que no salga), pero veo que en el case de direcciones incrementas X e Y, sin embargo solo evalúas una de ellas para saber si ha salido de la pantalla, no deberías hacer esas comprobaciones (X e Y a la vez) fuera del switch?
			
			
			
				Ahí es donde está la raiz del problema, hay que simplificar el codigo y sacar seis o siete combrobaciones de un switch donde esta entre comillas "gastando memoria" y ponerlo en una sola sentencia antes de terminar el bucle, gracias
Pero ¿es necesario hacer dos comrobaciones (x,y) para matar el proceso? Creo que con una sirve, la suficiente para que el proceso salga del cuadro de vision, ya sea x o y
Aparte, optimizaré un poco mas el codigo para ver si sigue fallando con poner el primer proceso o no bolafuego(1)
			
			
			
				Esas comprobaciones para saber si salio de la pantalla sacalas completamente del switch.
Las podes hacer perfectamente despues del switch, dentro del loop. Con un solo if podes comprobar los 4 lados de la pantalla, y ahi matar al proceso si corresponde.
			
			
			
				no paro de darle vueltas a la cabeza y lo que falla es el:  y +=2; de la primera sentencia...
pongo codigo y si alguien quiere le mando el juego entero
            case 700: //fuegos gargola
                if (latencia % 199 == 0)
                    for (neix = 1; neix < 8; neix++)
                        bolafuego(neix);
                        frame(200);
                    end
                end
            end
process bolafuego(paonde)
begin
cuenta_procesos++;
    graph = 701;
    x = father.x;
    y = father.y;
    loop
        size = 25;
        graph++;
        if (graph => 709) graph = 701; end
        switch (paonde)    
            //case 1: x +=4; y +=2; end    
            case 2: x +=3; y +=3; end    
            case 3: x +=2; y +=4; end    
            case 4: y +=4; end    
            case 5: x -=2; y +=4; end    
            case 6: x -=3; y +=3; end    
            case 7: x -=4; y +=2; end    
        end
        alpha-=2;
        if (alpha <= 0) break; end
        if (y >= 260) break; end
        if (estadojuego == 100) break; end
        frame;
    end
end