Autor Tema: Motor multidireccional.  (Leído 224 veces)

oskarg

  • Full Member
  • ***
  • Mensajes: 208
  • Karma: 3
Motor multidireccional.
« en: Marzo 09, 2020, 07:51:33 pm »
Hola,abro este post para no mezclar cosas.Ire comentando como va avanzando el motor de scroll multidireccional.
Lo que tengo hecho:
1.Cargo un mapa externo  en miniatura que tiene toda la informacion de los "tiles",pongo tiles entre comas porque en verdad no son tiles como tal,pues todo se basa en tablas.
2.Seleciono la pantalla de inicio ,tiene 10x10+10*10... ,es decir 3200x2400 pixeles tiene el mapa del juego,aunque no tiene limite alguno porque todo esta troceado.
3.Me puedo mover de forma multidireccional,es decir de forma ciclica en todos los lados,arriba,abajo,izquierda y derecha.Me falta poner "banderas"en otra tabla,es decir por ejemplo si estoy en la pantalla 03 que solo pueda subir o bajar.
4.Ahora estoy reduciendo codigo,pues repito muchas cosas y mirando porque en los limites del mapa grande no me permite pintar o avanzar,si aun quedan un par de tiles por mostrar.Podria omitirlo y solo utilizar 9x9+9x9..pero mejor encontrar el motivo y si no lo encuentro,pues nada pregunto a ver quien me saca la duda.
Cuando lo solvente paso a la segunda fase  añadir colisones para hacer juegos tipo cenital y comento.

« última modificación: Marzo 09, 2020, 07:56:04 pm por oskarg »

AmakaSt

  • Sr. Member
  • ****
  • Mensajes: 498
  • Karma: 17
    • Amaka Soft
Re:Motor multidireccional.
« Respuesta #1 en: Marzo 10, 2020, 08:59:44 am »
Interesante! Esperando ejemplo para ver que tal funciona. :)

Por si te sirve, hay una función que trocea mapas y te devuelve los trozos en un array: https://www.divgo.net/c-bd2fcf35

Un saludo.

oskarg

  • Full Member
  • ***
  • Mensajes: 208
  • Karma: 3
Re:Motor multidireccional.
« Respuesta #2 en: Marzo 10, 2020, 01:44:29 pm »
Hola amakast,
Hace tiempo que vi este ejemplo, pero no le presté atención,tengo que mirar su código, pues pensaba que era simplemente un efecto gráfico y resulta que cada trozo lo manipulas con su índice de la tabla.... seguro que le saco provecho, gracias.

oskarg

  • Full Member
  • ***
  • Mensajes: 208
  • Karma: 3
Re:Motor multidireccional.
« Respuesta #3 en: Marzo 16, 2020, 10:54:35 pm »
Hola Amakast
Bug chungo...con las condiciones y scrolls ...si elimino la linea  divgo no se bloquea :
 IF(falla==100)falla=200;end ///linea que bloquea divgo ..debes de borrarla para que funcione...

Si elimino la linea :
 // IF(falla==100)falla=200;end ///linea que hace dibujar mal el scroll si pongo todo el motor completo XD;que gracioso..

con el codigo completo el scroll funciona en parte,pues tengo que añadir una condicion que no me deja,pues se bloquea o bien dibuja mal,da igual que parametros ponga en la condicion que aunque sea ficticia afecta al comportamiento erroneo JOE
Código: [Seleccionar]
/*
Program's Name: <My Program Name>
Author's Name: <My Name>
Company's Name: <My Company or Group>
*/

program Motor2d;
global
  resolucionx=128;
  resoluciony=128;
  fichero1;
  T_tx=96;//tamaño de la tablax
  T_ty=96;//tamño de la  tablay
  T_sizex=8;//tamaño del tile
  T_sizey=8;//tamalo del tile
  Casilla_Iniy=1;
  Casilla_Inix=2;
  jota1;
  jota2;
  jota3;
  jota4;
  jota5;
  Celda_x;
  Celda_y;
 
 
  Tiles_nx=resolucionx/8;//numero de tiles x;
  Tiles_ny=resolucionx/8;//numero de tiles y;
 
  T_tiles[96*96];
begin
set_title("Motor 2d");
    //set_icon("graficos/009.png");
set_mode(resolucionx+16,resoluciony+16,2);
    screen_color(rgb(255,0,0));
    set_color(rgb(0,0,0));
    set_fps(60, 0);
    screen_smooth(false);
// call a process
    write_int(0,0,0,0, offset  jota1);
    write_int(0,0,20,0,offset  jota2);
    write_int(0,0,40,0,offset  jota3);
    write_int(0,0,60,0,offset  jota4);
    write_int(0,0,80,0,offset  jota5);
   
   
   
   
   
  fichero1=load_fpg("graficos/motor2d/");
  // my_process(240, 160);
   Inicializa_tabla();

loop
if (key(_esc)) exit("Text Exit", 1); end

frame;
end
end

process my_process(x, y);
private
//declared private variables
    energy = 100;
    life = 3;
   
begin
    file=fichero1;
graph = 1;
size  = 100;
z   = 10;

loop

frame;
end
end
//_______________________________________________________________________________________________________________________________________________________--


//_______________________________________________________________________________________________________________________________________________________--

Process Inicializa_Tabla()
private
valor,tile;
BEGIN
file=fichero1;
for (y=0;y<T_ty;y++)
for (x=0;x<T_tx;x++)
    valor=map_get_pixel(fichero1, 100, x, y, "r");
    if (valor==151) tile=201;end
    if (valor==0)   tile=200;end
    if (valor==44)  tile=202;end
    T_tiles[x+y*T_tx]=tile;
   
end
end
Pinta_Fondo();

END
//__________________________________________________________________________________________________________________________________________________________________________________-


//__________________________________________________________________________________________________________________________________________________________________________________-

Process Pinta_Fondo()
private
x_destino,y_destino,x_origen,y_origen,map_ancho,map_alto;
c_x,c_y,i,j,valor;
n_tilex,n_tiley;//numero de tiles en la horizontal y vertical de la resolucion 128/8=16...
casillax,casillay;
scrolx,scroly,sy;
lineay,lineax;
anteriory,anteriorx;
sentidoy;
actualy;
kx,ky;
scroll_sentido;
incremento_y;
ku,kd;//sube ..kd=baja
ii;
v_sentido;
falla;
BEGIN
file=fichero1;

//graph=101;
 n_tilex=resolucionx/T_sizex;////128/8=16;
 n_tiley=resoluciony/T_sizey;
 
 map_ancho = 1;
 map_alto  = 1;
c_x=Casilla_Inix*(n_tilex);//128/8=16 casillas..4
c_y=Casilla_Iniy*(n_tiley);//128/8=16 casillas..2

casillax=Casilla_Inix*n_tilex;//16
casillay=(Casilla_Iniy)*(T_ty)*(n_tiley);//2*96*16...fila 1== 1*96*16...
//casillay=(Casilla_Iniy)*(T_ty)*(16);//2*96*16...fila 1== 1*96*16...
Celda_x=Casilla_Inix*n_tilex;
Celda_y=Casilla_Iniy*n_tiley;



x=(T_sizex*2+resolucionx)/2;
y=(T_sizey*2+resoluciony)/2;
valor=201;
for(i=0;i<resoluciony/T_sizey;i++)//128/8=16....
for(j=0;j<resolucionx/T_sizex;j++)//128/8=16....
    valor=T_tiles[((Casillax+j)+(Casillay+96*i))];//(casilla Inicial*16+j)+i*96...
    x_origen=0;
    y_origen=0;
    x_destino=T_sizex+T_sizex/2+j*T_sizex;//8+4=12
    y_destino=T_sizey+T_sizey/2+i*T_sizey;

map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...
end
end

i=0;
for(j=0;j<(resolucionx/T_sizex)+8*2;j++)//128/8=16....
    valor=T_tiles[((Casillax+j-1)+(Casillay+96*i)-96)];//(casilla Inicial*16+j)+i*96...
    x_origen=0;
    y_origen=0;
    x_destino=4+j*8;
    y_destino=4;
      ///...............ARRIBA....................................................................
  if(Celda_y<>0)
   map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...
  end
valor=T_tiles[((Casillax+j-1)+(Casillay+96*i)+96*16)];//(casilla Inicial*16+j)+i*96...
    x_origen=0;
    y_origen=0;
    x_destino=4+j*8;
    y_destino=4+8*17;
 
 
 ///...............ABAJO....................................................................
map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...

end









start_scroll(0, fichero1, 101, 201, 0, 15);
scroll.front.alpha = 100;
scroll.back.alpha  = 0;


 

y_destino=0;
anteriory=0;
sentidoy=0;
  // map_block_copy(fichero1,101, 144/2, 144/2 , 4,0,0, 144,144);//dibuja un punto en el centro...
  // refresh_scroll(0);
LOOP
 
 
 
        if(key(_down)  )
             ii++;
             IF(ii>6)
             scroll.front.y  += 8;
             scroll.back.y   += 8;
             ii=0;
             scroll_sentido   = 1;
             else
             scroll_sentido=    0;
             END
        end
       
        if(key(_up)  )
              ii++;
              IF(ii>6)
              scroll.front.y  -= 8;
              scroll.back.y   -= 8;
              ii=0;
              scroll_sentido   =-1;
              else
              scroll_sentido   = 0;
              END
        end
     
     if(not key(_up) and not key(_down))
     scroll_sentido = 0;
     end
     
   
 
     
    If(scroll_sentido<>0 and  (abs(scroll.back.y) % 8 )== 0 ) //si me muevo 8 pixeles hacia arriba o hacia abajo...
        IF(falla==100)falla=200;end ///linea que bloquea divgo ..debes de borrarla para que funcione..//FALLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    i=0;j=0;
    i=0;
       
       
 
     
     
//______________________________________________________________________________________________________________________________________________________________________________________________________________-
   
   
     
     
   
   IF(scroll_sentido == 1)
           
            IF(falla==100)falla=200;end ///linea que hace dibujar mal el scroll si pongo todo el motor completo XD;que gracioso.. FALLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!!!!!!
         
           incremento_y = (Celda_y + Casilla_Iniy*2) mod 18;
           Celda_y=Celda_y+1;
       FOR(j=0;j<(resolucionx/T_sizex)+8*2;j++)//128/8=16....
          valor=T_tiles[(Celda_x+j-1 + (96*Celda_y))+96*16];
           x_origen=0;
           y_origen=0;
           x_destino=4+j*8;
           y_destino=4+8*(incremento_y);
           map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...
       END
          incremento_y++;
          IF(incremento_y==18) incremento_y=0;END
          v_sentido=1;
          refresh_scroll(0); 
         
     
   END   
   
   
   
             

     
   
  END
   

     
     
     
   
   jota1=Celda_x;
   jota2=Celda_y;
   jota3=incremento_y;
   //jota4=incremento_y;
FRAME;

END


END
« última modificación: Marzo 16, 2020, 11:09:41 pm por oskarg »

oskarg

  • Full Member
  • ***
  • Mensajes: 208
  • Karma: 3
Re:Motor multidireccional.
« Respuesta #4 en: Marzo 17, 2020, 08:10:33 am »
Si con esto trozo de código y explicación no encuentras el motivo pq se bloquea divgo te puedo pasar dos ejemplos empaquetados y con su código .lo más reducido posible..uno es simplemente con el código que te he mostrado, provoca que divgo se bloqueé otro añade un par de líneas más donde puedes bajar y subir el scroll por teclado,pero como tengo que añadir una condición para que dibuje correctamente no lo hace bien,si elimino la condición aunque no afecte el código va bien hasta que cambia de sentido el scroll ,lógico pues falta implementar la condición que no me permite,pues hace tonterías ;D

AmakaSt

  • Sr. Member
  • ****
  • Mensajes: 498
  • Karma: 17
    • Amaka Soft
Re:Motor multidireccional.
« Respuesta #5 en: Marzo 17, 2020, 09:01:08 am »
Hola oskarg,

Me faltan los gráficos, sin ellos se me bloquea antes, en la carga. Aun así, en esas líneas no veo nada raro para que se te bloquee el código. Pásame lo que me has comentado para yo poder probar y ver desde el navegador que esta fallando.

Un saludo.

oskarg

  • Full Member
  • ***
  • Mensajes: 208
  • Karma: 3
Re:Motor multidireccional.
« Respuesta #6 en: Marzo 17, 2020, 01:30:24 pm »
Esta noche, cuando llegue a casa, sin falta te paso el ejemplo con gráficos y de esa manera quizás descubras pq se bloquea....si quitas el if comentado no se bloquea.. si añado el otro if los incrementos los suma mal...la mar de divertido 😁 y eso que el if no afecta para nada al código.
Gracias de antemano por echarle un vistazo

oskarg

  • Full Member
  • ***
  • Mensajes: 208
  • Karma: 3
Re:Motor multidireccional.
« Respuesta #7 en: Marzo 17, 2020, 08:34:29 pm »
Hola Amakast,
te paso el primer ejemplo empaquetado donde en este caso se bloquea... a raiz de la linea 238 una vez que pulsas la tecla down...
     IF(falla==100)falla=200;end ///linea que bloquea divgo ..debes de borrarla para que funcione... si la quitas y pulsas tecla down baja el scroll.
 Si encuentras el motivo  ,te agradezco el esfuerzo por encontrarlo ,pues no puedo poner condiciones y si las acepta sin que se quede bloqueado los incrementos ..por ejemplo x++; los hace mal
Un saludo
Código: [Seleccionar]
/*
Program's Name: <My Program Name>
Author's Name: <My Name>
Company's Name: <My Company or Group>
*/

program Motor2d;
global
  resolucionx=128;
  resoluciony=128;
  fichero1;
  T_tx=96;//tamaño de la tablax
  T_ty=96;//tamño de la  tablay
  T_sizex=8;//tamaño del tile
  T_sizey=8;//tamalo del tile
  Casilla_Iniy=1;
  Casilla_Inix=2;
  jota1;
  jota2;
  jota3;
  jota4;
  jota5;
  Celda_x;
  Celda_y;
 
 
  Tiles_nx=resolucionx/8;//numero de tiles x;
  Tiles_ny=resolucionx/8;//numero de tiles y;
 
  T_tiles[96*96];
begin
set_title("Motor 2d");
    //set_icon("graficos/009.png");
set_mode(resolucionx+16,resoluciony+16,2);
    screen_color(rgb(255,0,0));
    set_color(rgb(0,0,0));
    set_fps(60, 0);
    screen_smooth(false);
// call a process
    write_int(0,0,0,0, offset  jota1);
    write_int(0,0,20,0,offset  jota2);
    write_int(0,0,40,0,offset  jota3);
    write_int(0,0,60,0,offset  jota4);
    write_int(0,0,80,0,offset  jota5);
   
   
   
   
   
  fichero1=load_fpg("graficos/motor2d/");
  // my_process(240, 160);
   Inicializa_tabla();

loop
if (key(_esc)) exit("Text Exit", 1); end

frame;
end
end

process my_process(x, y);
private
//declared private variables
    energy = 100;
    life = 3;
   
begin
    file=fichero1;
graph = 1;
size  = 100;
z   = 10;

loop

frame;
end
end
//_______________________________________________________________________________________________________________________________________________________--


//_______________________________________________________________________________________________________________________________________________________--

Process Inicializa_Tabla()
private
valor,tile;
BEGIN
file=fichero1;
for (y=0;y<T_ty;y++)
for (x=0;x<T_tx;x++)
    valor=map_get_pixel(fichero1, 100, x, y, "r");
    if (valor==151) tile=201;end
    if (valor==0)   tile=200;end
    if (valor==44)  tile=202;end
    T_tiles[x+y*T_tx]=tile;
   
end
end
Pinta_Fondo();

END
//__________________________________________________________________________________________________________________________________________________________________________________-


//__________________________________________________________________________________________________________________________________________________________________________________-

Process Pinta_Fondo()
private
x_destino,y_destino,x_origen,y_origen,map_ancho,map_alto;
c_x,c_y,i,j,valor;
n_tilex,n_tiley;//numero de tiles en la horizontal y vertical de la resolucion 128/8=16...
casillax,casillay;
scrolx,scroly,sy;
lineay,lineax;
anteriory,anteriorx;
sentidoy;
actualy;
kx,ky;
scroll_sentido;
incremento_y;
ku,kd;//sube ..kd=baja
ii;
v_sentido;
falla;
BEGIN
file=fichero1;

//graph=101;
 n_tilex=resolucionx/T_sizex;////128/8=16;
 n_tiley=resoluciony/T_sizey;
 
 map_ancho = 1;
 map_alto  = 1;
c_x=Casilla_Inix*(n_tilex);//128/8=16 casillas..4
c_y=Casilla_Iniy*(n_tiley);//128/8=16 casillas..2

casillax=Casilla_Inix*n_tilex;//16
casillay=(Casilla_Iniy)*(T_ty)*(n_tiley);//2*96*16...fila 1== 1*96*16...
//casillay=(Casilla_Iniy)*(T_ty)*(16);//2*96*16...fila 1== 1*96*16...
Celda_x=Casilla_Inix*n_tilex;
Celda_y=Casilla_Iniy*n_tiley;



x=(T_sizex*2+resolucionx)/2;
y=(T_sizey*2+resoluciony)/2;
valor=201;
for(i=0;i<resoluciony/T_sizey;i++)//128/8=16....
for(j=0;j<resolucionx/T_sizex;j++)//128/8=16....
    valor=T_tiles[((Casillax+j)+(Casillay+96*i))];//(casilla Inicial*16+j)+i*96...
    x_origen=0;
    y_origen=0;
    x_destino=T_sizex+T_sizex/2+j*T_sizex;//8+4=12
    y_destino=T_sizey+T_sizey/2+i*T_sizey;

map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...
end
end

i=0;
for(j=0;j<(resolucionx/T_sizex)+8*2;j++)//128/8=16....
    valor=T_tiles[((Casillax+j-1)+(Casillay+96*i)-96)];//(casilla Inicial*16+j)+i*96...
    x_origen=0;
    y_origen=0;
    x_destino=4+j*8;
    y_destino=4;
      ///...............ARRIBA....................................................................
  if(Celda_y<>0)
   map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...
  end
valor=T_tiles[((Casillax+j-1)+(Casillay+96*i)+96*16)];//(casilla Inicial*16+j)+i*96...
    x_origen=0;
    y_origen=0;
    x_destino=4+j*8;
    y_destino=4+8*17;
 
 
 ///...............ABAJO....................................................................
map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...

end









start_scroll(0, fichero1, 101, 201, 0, 15);
scroll.front.alpha = 100;
scroll.back.alpha  = 0;


 

y_destino=0;
anteriory=0;
sentidoy=0;
  // map_block_copy(fichero1,101, 144/2, 144/2 , 4,0,0, 144,144);//dibuja un punto en el centro...
  // refresh_scroll(0);
LOOP
 
 
 
        if(key(_down)  )
             ii++;
             IF(ii>6)
             scroll.front.y  += 8;
             scroll.back.y   += 8;
             ii=0;
             scroll_sentido   = 1;
             else
             scroll_sentido=    0;
             END
        end
       
        if(key(_up)  )
              ii++;
              IF(ii>6)
              scroll.front.y  -= 8;
              scroll.back.y   -= 8;
              ii=0;
              scroll_sentido   =-1;
              else
              scroll_sentido   = 0;
              END
        end
     
     if(not key(_up) and not key(_down))
     scroll_sentido = 0;
     end
     
   
 
     
    If(scroll_sentido<>0 and  (abs(scroll.back.y) % 8 )== 0 ) //si me muevo 8 pixeles hacia arriba o hacia abajo...
          IF(falla==100)falla=200;end ///linea que bloquea divgo ..debes de borrarla para que funcione...
    i=0;j=0;
    i=0;
       
       
 
     
     
//______________________________________________________________________________________________________________________________________________________________________________________________________________-
   
   
     
     
   
   IF(scroll_sentido == 1)
           
           // IF(falla==100)falla=200;end ///linea que hace dibujar mal el scroll si pongo todo el motor completo XD;que gracioso..
         
         //  incremento_y = (Celda_y + Casilla_Iniy*2) mod 18;
           Celda_y=Celda_y+1;
       FOR(j=0;j<(resolucionx/T_sizex)+8*2;j++)//128/8=16....
          valor=T_tiles[(Celda_x+j-1 + (96*Celda_y))+96*16];
           x_origen=0;
           y_origen=0;
           x_destino=4+j*8;
           y_destino=4+8*(incremento_y);
           map_block_copy(fichero1, 101, x_destino,y_destino,valor , x_origen,y_origen, 8,8);//dibuja un punto en el centro...
       END
          incremento_y++;
          IF(incremento_y==18) incremento_y=0;END
          v_sentido=1;
          refresh_scroll(0); 
         
     
   END   
   
   
   
             

     
   
  END
   

     
     
     
   
   jota1=Celda_x;
   jota2=Celda_y;
   jota3=incremento_y;
   //jota4=incremento_y;
FRAME;

END


END



No entiendo por que quitando ese if de la linea 238,divgo no se bloquea y baja el scroll si ese if no hace nada.


oskarg

  • Full Member
  • ***
  • Mensajes: 208
  • Karma: 3
Re:Motor multidireccional.
« Respuesta #8 en: Marzo 17, 2020, 08:54:05 pm »
Hola AmakaST,
He encontrado el motivo pero no entiendo el error que comete divgo al compilarlo e intentar ejecutarlo.
SI pongo esto asi tal cual ,con la condicion no anulada de la linea 238 se bloquea:
Código: [Seleccionar]
   if(key(_down)  )
             ii++;
             IF(ii>6)
             scroll.front.y  += 8;
             scroll.back.y   += 8;
             ii=0;
             scroll_sentido   = 1;
             else
             scroll_sentido=    0;
             END
        end
en cambio si pongo esto con la condicion no anulada no se bloquea.
Código: [Seleccionar]
  if(key(_down)  )
             ii++;
            // IF(ii>6)
             scroll.front.y  += 8;
             scroll.back.y   += 8;
            // ii=0;
             scroll_sentido   = 1;
          //   else
          //   scroll_sentido=    0;
           //  END
        end

y si quito la condicion no se bloquea aunque lo ponga asi
Código: [Seleccionar]
if(key(_down)  )
             ii++;
             IF(ii>6)
             scroll.front.y  += 8;
             scroll.back.y   += 8;
             ii=0;
             scroll_sentido   = 1;
             else
             scroll_sentido=    0;
             END
        end

Qué explicación lógica tiene ?¿? no entiendo nahh ;D

oskarg

  • Full Member
  • ***
  • Mensajes: 208
  • Karma: 3
Re:Motor multidireccional.
« Respuesta #9 en: Marzo 17, 2020, 09:12:16 pm »
HOla otra vez,ya lo tengo funcionando correctamente :P el scroll ,pero no puedo reducir la velocidad del scroll con esta forma ?¿? POR QUE?¿? por que se bloquea ?¿? por que al ponerlo ,tambien me afecta en otras condiciones de forma erronea y los incrementos?¿? .que  explicacion tiene¿?¿?me gustaria comprender el motivo .
Código: [Seleccionar]
     if(key(_down)  )
             ii++;
             IF(ii>6)
             scroll.front.y  += 8;
             scroll.back.y   += 8;
             ii=0;
             scroll_sentido   = 1;
             else
             scroll_sentido=    0;
             END
        end

AmakaSt

  • Sr. Member
  • ****
  • Mensajes: 498
  • Karma: 17
    • Amaka Soft
Re:Motor multidireccional.
« Respuesta #10 en: Marzo 23, 2020, 02:23:28 pm »
Hola oskarg,

Ya he corregido este problema, se debía a un problema en el espacio que reserva DivGO para las condiciones a la hora de construir el javascript, esto es lo que estaba pasando:
Código: [Seleccionar]
this.DivGO_code[107] = function(My){ My.DivGO_inst = 79; };
this.DivGO_code[109] = function(My){ My.falla=200; };
this.DivGO_code[110] = function(My){ My.DivGO_inst = 91; };
this.DivGO_code[112] = function(My){ My.valor=t_tiles[(celda_x+My.j-1 + (96*celda_y))+96*16]; };
this.DivGO_code[113] = function(My){ My.x_origen=0; };
this.DivGO_code[114] = function(My){ My.y_origen=0; };
this.DivGO_code[115] = function(My){ My.x_destino=4+My.j*8; };
this.DivGO_code[116] = function(My){ My.y_destino=4+8*(My.incremento_y); };
this.DivGO_code[116] = function(My){ celda_y=celda_y+1; };
this.DivGO_code[117] = function(My){ DivGO.functions.map_block_copy(fichero1, 101, My.x_destino,My.y_destino,My.valor , My.x_origen,My.y_origen, 8,8); };
this.DivGO_code[117] = function(My){ My.j=0; };
this.DivGO_code[118] = function(My){ My.DivGO_inst = 119; };
this.DivGO_code[118] = function(My){ if ((My.j<(resolucionx/t_sizex)+8*2)){ My.DivGO_inst = 112; }else{ My.DivGO_break(121); }; };
this.DivGO_code[119] = function(My){ My.j++; };
this.DivGO_code[120] = function(My){ My.DivGO_inst = 118; };
El this.DivGO_code[116], this.DivGO_code[117] y this.DivGO_code[118] se repiten y bloquea el programa, esto me estaba fallando hace algún tiempo en mi juego Panic! y no sabía cómo localizarlo debido al código tan grande que tiene. :)

Un saludo y gracias por el report!