Div Games en Html5 y Canvas

Started by AmakaSt, September 07, 2012, 03:28:01 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

panreyes

Y aquí no sé por qué al pulsar la R para reiniciar el juego no funciona:
https://www.divgo.net/c-72def422

AmakaSt

Hola panreyes,

Me los apunto para revisión, el de from he localizado el problema y es bastante fácil de solucionar. En cambio el de return es un poco más complicado.

Gracias por los reportes. :)
Quote from: oskarg on November 15, 2020, 10:14:15 AM
Buenos dias,
1.Me gustaria que algun dia  se estudiara poder implementara funciones como trae lua en el manejo de tablas.Poder insertar elementos y borrarlos en este lenguaje es muy sencillo y potente.Aunque ni idea si seria factible en divgo.

Como tengo vacas aprovecho para utilizar divgo y si me quedo bloqueado expongo....

2.Estaria bien que se pudiera añadir los puntos de control desde divgo en el editor de graficos.....creo que no se puede......O bien indicar un enlace del fpg editor ,o incluirlo como  herramienta externa .Lo digo para gente nueva que se inicia con este programa....

3.Me gustaria que las primitivas graficas pudiera no aplicar suavizado y dibujarlas desde su centro ,aunque se puede programar,es mas practico que lo traiga por defecto.

4.Que el tamaño de la caja de colision no este realmente determinado por el tamaño del grafico en si,sino que lo lo pueda establecer,por ejemplo diga ancho=20 pixeles ,alto=2 pixeles y sea dinamico,es decir que lo pueda modificar a mi antojo en cualquier momento.

5.Es una reiteracion esto,pero bueno,a veces cometo el error de añadir un grafico erroneo en el fpg con un numero equivocado,pues bien,ya no hay manera de borrarlo y me saca de mis casillas esto, ;D No entiendo por que no se puede insertar encima otro grafico externo .Como hago simples pruebas no es molesto,pero si inicio un proyecto grande   y sucede ;D es engorroso crear otra carpeta nueva,con otro nombre del fpg... e insertar otra vez las imagenes.

6.Siempre he pensado que seria muy util poder definir un grafico ciclico independientemente del scroll,por ejemplo Tengo un juego con  scroll de 320x240,ahora tengo un grafico de 120x8 ,el cual representa la lava,si lo pudiera hacer ciclico por ejemplo en el eje x directamente ya simularia  una animacion y bien sencilla y potente.Podria tener tropecientos graficos moviendose con sus tamaños diferentes,solo con cargarlos en el fpg su imagen inicial y si lo quisiera hacer mas versatil le iria pegando trozos de otro grafico.............vale.... lo puedo programar,pero no es lo mismo si ya por defecto lo trae,lo encuentro muy practico.

Un saludo.
Hola oskarg,

1. No conozco las funciones de lua, si pudieras decirme cuales son y que hacen me lo puedo mirar para incluirlo.
2. No se puede actualmente, las imágenes que se generan en el editor son en formato png y este carece de los puntos de control de Div, en un futuro me gustaría implementarlo como información en el fpg.dat, para que eso fuera posible.
3. Pensé que ya tenía algo implementado para quitarle el suavizado a las primitivas, como en los procesos y la pantalla, me lo apunto para mirármelo. :)
4. Lo tengo apuntado para incluirlo en futuras versiones.
5. En la versión 1.34.0 hice unas correcciones sobre esto, donde pude localizar un problema que me estaba dando al mover un grafico de sitio y mantenía el espacio ocupado. ¿Te sigue fallando en la versión actual?
6. Ya existe una función para hacer esto o muy similar, donde puedes incluso ajustar el tamaño del grafico en el mapa: texture_in_map().

Un saludo. :)

oskarg

Buenos dias,
Explico por encima la mecanica de las tablas en Lua y si ves algo interesante lo meditas... ....:
1.Para declarar una tabla en lua
tabla = {}         --declar una tabla vacia ...no es necesario indicar el tamaño,pues se puede trabajar con tablas dinamicas...
tabla2 = {}       --creo  otra tabla o array
tabla[1] = "uno" ----- le asigno la cadena uno
tabla[2] = "la casa de tio tom" ----- le asigno la  cadena la cas de tio tom
tabla = {"a","b","c"}   inicio la tabla[1]=a ..tabla[2]=b tabla[3]=c

2.Para borrar todos los elementos de una tabla  y de nuevo quede vacia
tabla = nil       --------------ausencia de valor

3.El indice de las tablas puede ser cualquier cosa,por ejemplo incluso una palabra ,no es necesario que sea un valor numerico.
tabla = {}
tabla[1] = "a" --se asigna el valor a al indice 1
tabla["posicion_x"] = 3 -- se asigna el valor 3 a la llave "posicion_x"
tabla.pos = "vaca" --asigna el valor "vaca" a la llave pos

4.Mas ejemplos de inicio de tablas
tabla = { [1] = "a", [2] = "b", [3]= "c" }
tabla2 = { ["pos1"] = "a", ["pos2"] = "b", ["pos3"]= "c" }
5. Devolver la longitud de la tabla

tabla = {"a", "b", "c"}
print(#tabla)   ----con esta muletilla # sabemos la longitud de la tabla...
6.INSERTAR ELEMENTOS DE LA TABLA
table.insert (tabla, [pos], valor) o bien
table.insert (tabla, , valor)
donde [pos] indicamos en que posicion colocamos en nuevo valor a insertar,por defecto pos es la parte final de la matriz.
ejemplo 1.
tabla.insert(tabla,120) ---inserta en la tabla el valor 120 en la ultima posicion.
otro ejemplo definimos una tabla
tabla = {}
tabla = {"a", "c"}
table.insert(tabla, 2, "b") ---inserto en la posicion 2 de la tabla el valor b...
print(tabla[1], tabla[2], tabla[3]) ----con lo cual esto queda a,b,c

otro ejemplo empleando for.............. definimos una tabla
insertamos en cada frame los valores de x e y en la tabla ---aqui actua como si fuera una estructura de una tabla que tiene en sus campos variable_x y variable_y
  table.insert(tabla, {variable_x=x, variable_y=y    }); 

Ahora los leemos...Aqui simplemente le decimos ..ey leeme todos los valores de la tabla ....es un for especial,se puede hacer de forma tradicional,pero es mas sencillo asi,una vez que sabes la mecanica
for k, v in ipairs(tabla) do
  dibuja_elipse(v.x,v.y)---Aqui vemos como se accede a los elementos de la tabla..v e k son variables que no definimos en ningun sitio donde K dice haz un recorrido de todos los elementos de la
    tabla y  para acceder a los valores de variable_x 
  debemos de hacer v.x .. y para acceder a la variable_y v.y...con lo cual v.x==variable_x v.y=variable_y del primer primer frame k==1.. segundo frame k==2  v.x==x  v.y==y del segundo frame.
end
si queremos saber la longitud de la tabla empleamos el  #  por ejemplo empleando un for normal...
for i = 1, #tabla do  ----------hace un recorrido de la tabla desde el elemento 1 hasta el ultimo elemento de la tabla,donde #representa su tamaño.
   --
   --
   --
end

-----------------------------------------------------------------
mas ejemplos de table.insert
table.insert
Sirve para agregar un valor a una tabla creada

tabla = {}     
table.insert(t, 123)
tabla[2] = 321
print(t[1]) ----123  el tamaño ahora es 1.
print(t[2]) ----321 el tamaño ahora es de 2
tabla{}= nil   .....limpiamos la tabla ,la borramos...

También es posible seleccionar el indice al cual agregar el valor

tabla = {"a", "c"}
table.insert(tabla, 2, "b")

-----------------------------------------------------------------

ELIMINACION DE UN ELEMENTO DE LA TABLA
table.remove
Elimina un elemeto con el indice a eliminar

tabla = {"a", "b", "c"}
table.remove(tabla, 2)  --renuevo el elemento b de la tabla...en lua el primer elemento empieza por tabla[1]...
print(t[1], t[2)]            --imprimimos resultado a,c
print(#tabla)             ---- y su tamaño # si lo consultamos sera 2..
Tambien en lua se puede concatenar elementos y ordenar la tabla en orden ascendente ,pero como nunca lo he empleado  lo omito.


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Sobre el editor...me explico..
Si creo un grafico en una posicion y luego quiero eliminarla no puedo ,vale..entonces lo que hago es cambiar su tamaño x e y a 1 pixel para evitar que ocupe espacio,lo que quiero es que esta imagen que he creado de un solo pixel lo pueda sustituir por una que tengo  en el disco duro,arrastrandola,pues me interesa que se encuentre en tal posicion,pero el editor me lo impide con el simbolo de prohibido.Consecuencia,tengo que crear un nuevo fpg,con un nuevo nombre y una nueva carpeta..no es lo ideal.
Entonces me digo..pues cambio manualmente el  fpg creado en el disco ,lo intento  modificar abriendolo como si fuera un  txt y luego lo guardo en su extension correspondiente,pero no afecta ,no puedo tampoco eliminar tal grafico manualmente ,con lo cual ,ni flowers .
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

AmakaSt

Hola oskarg,

Muchas de las cosas que pones se pueden hacer también con Div GO sin mucha complicación, aquí te pongo un ejemplo de manejo de tablas: https://www.divgo.net/c-ae035f92

Un saludo. :)


oskarg

Hola AmakaSt,
Me ha gustado bastante el ejemplo,he aprendido cosas que desconocia de divgo.
Ejemplos  como estos deberias incluirlo en divgo,sencillos pero muy practicos.
Un saludo.

oskarg

Hola AmakaSt,
He probado texture_in_map,esta muy bien,pero como está implementado no se puede indicar en que lugar quiero que ese trozo de mapa lo tengo que colocar.
deberia ser de este modo :
texture_in_map(file, graph, width, height,  avance_x, avance_y,size_x,size,y,posicion_x,posicion_y);
Un saludo.

panreyes

Quote from: AmakaSt on November 15, 2020, 10:30:32 PM
Hola panreyes,

Me los apunto para revisión, el de from he localizado el problema y es bastante fácil de solucionar. En cambio el de return es un poco más complicado.

Gracias por los reportes. :)

Comunico por aquí que Amakast me dio solución por Discord. El problema del return era que faltaba un frame para evitar que se reiniciase infinitamente el juego 😅

AmakaSt

Quote from: oskarg on November 17, 2020, 09:33:52 PM
Hola AmakaSt,
He probado texture_in_map,esta muy bien,pero como está implementado no se puede indicar en que lugar quiero que ese trozo de mapa lo tengo que colocar.
deberia ser de este modo :
texture_in_map(file, graph, width, height,  avance_x, avance_y,size_x,size,y,posicion_x,posicion_y);
Un saludo.
Hola oskarg,

La función texture_in_map() se aplica al graph del proceso, como write_in_map(), por lo que se puede posicionar con x, y, z, rotar, animar, aplicar filtros, cambiar alpha, etc... Aquí te dejo otro ejemplo con texture_in_map(): https://www.divgo.net/c-c036842a

Un saludo.

AmakaSt

#863
Buenas noches,

Ya está disponible online la versión 1.36.0 de Div GO y las novedades:


funciones:
   - clear();

bugs y mejoras:
   - [ADD] nuevos parámetros opcionales en las funciones collision_box() y collision_circle()
   - [ADD] optimización en sistema de colisiones y nuevo modo debug para collision_box() y collision_circle()
   - [FIX] corregido un leve problema en la función collision()
   - [FIX] funciones draw_stamp() y xdraw_stamp() no estampaba en el background todas las draw() y xdraw() mostradas en el frame
   - [FIX] función texture_in_map() no desplazaba bien la textura dentro del mapa ni se posicionaba en el centro del graph
   - [FIX] solucionado problema con la carga de recursos cuando se hace la llamada dentro de un bloque global o private
   - [CHANGE] posición de pintando de primitivas a +0.5 en el canvas, que quita la línea de suavizado
   - [CHANGE] también en la posición para quitar línea de suavizado en la barra de progreso del bloque loading




Ejemplo de collision_box() con nuevos parámetros opcinales: https://www.divgo.net/c-ae0d0623
Ejemplo de collision_circle() con nuevos parámetros opcionales: https://www.divgo.net/c-1cc72ce1

Un saludo.

oskarg

Hola Amakast,
Gracias por las mejoras y fix solventados.Una cuestion a  simple vista...
Cuando ejecutas el ejemplo de collision_box  en el proyector las cajas no se visualizan,desconozco si debe ser de tal manera.
La funcion clear()  me puedes poner un simple ejemplo...la definicion la comprendo mas o menos.. [devuelve valor de array vacio, limpia de datos el array].un ejemplo simple me aclararia su funcionamiento porque como indicas a que array afecta etc...
Un saludo.

AmakaSt

Quote from: oskarg on December 02, 2020, 09:24:38 PM
Hola Amakast,
Gracias por las mejoras y fix solventados.Una cuestion a  simple vista...
Cuando ejecutas el ejemplo de collision_box  en el proyector las cajas no se visualizan,desconozco si debe ser de tal manera.
La funcion clear()  me puedes poner un simple ejemplo...la definicion la comprendo mas o menos.. [devuelve valor de array vacio, limpia de datos el array].un ejemplo simple me aclararia su funcionamiento porque como indicas a que array afecta etc...
Un saludo.

Hola oskarg,

Tanto collision_box como collision_circle las líneas solo se visualizan en el ide para poder ver el size mientras desarrollas para poder ajustar los limites, en el proyector y en el empaquetado ya no se ven.
Sobre la función clear(), es como en el ejemplo que puse de manejo de arrays, que declare un array sin_datos[] para vaciar otros arrays, pero esto lo hace es más coherente sin necesidad de declarar un array.

program ejemplos_tablas;
global   
    tabla[]; //funciona las tablas dinamicas
    tabla2[] = "a", "b", "c", "d", 5, 6;
    //sin_datos[]; //no es necesario
   
begin
    set_mode(320, 200, 2);
    screen_smooth(false);
   
    tabla[1] = "uno";
    tabla[2] = "la casa de tio tom";
   
    text_size = 70;
    write(0, 0, 0, 0, tabla[1] + " : " + tabla[0, 1] + ", " + tabla[1, 1] + ", " + tabla[2, 1]);
    write(0, 0, 20, 0, tabla[2] + ", tamaño: " + sizeof(tabla[2]));
    write(0, 0, 40, 0, tabla2[2]);
   
    tabla2[2] = tabla; //se puede insertar una tabla dentro de otra
   
    write(0, 0, 60, 0, tabla2[2]);
    write(0, 0, 80, 0, tabla2);
   
    tabla2 = clear(); //vaciamos la tabla2
   
    write(0, 0, 100, 0, tabla2);
   
    tabla["pos1"] = "hola";
    tabla["pos2"] = "paco";
    tabla["posvale"] = "chanquete ha muerto";
   
    write(0, 0, 120, 0, tabla["pos1"]);
    write(0, 0, 140, 0, tabla["pos1"] + " " + tabla["pos2"]);
    write(0, 0, 160, 0, tabla["posvale"]);
    write(0, 0, 180, 0, tabla);
   
    loop
        frame;
    end
end


Un saludo.


AmakaSt

Disponible versión 1.36.1 para descargar, que corrige problemas con la carga de fuentes fnt que provocaba bloqueos en la ejecución del programa.
https://www.amakasoft.com/herramientas/div-go.html

AmakaSt

Y otra versión más para empezar las fiestas, disponible para descargar la versión 1.36.5, las novedades:



bugs y mejoras:
   - [ADD] optimizada carga de recursos para no volver a cargar un mismo recurso previamente cargado
   - [FIX] control de valores undefined provocado por gamepads de pocos botones
   - [FIX] corregido parpadeo de gráficos cuando se vuelve a cargar un recurso que había sido descargado
   - [FIX] control de carga de recursos para evitar carga de url null




Un saludo y felices fiestas.

oskarg

Buenos días AmakaSt,
En la ultima version de divgo me da errores en el compilador que antes no aparecian y por tanto no puedo ejecutarlos en esta version.ejemplo
65 CASE 38: MAPA_PANTALLA
  • [y]=138;END -- ESPERANDO [,]
    67 DEFAULT MAPA_PANTALLA
  • [y]=100;END -- ESPERANDO [,]
    92 */ -- NO SE ENCONTRÓ


    //---------------------------------------------------------------------------
    // Program: MEGAMAN
    // Author:  OSCAR ADALID GAVILAN
    // Date:    NO LO SE CUANDO LO TERMINARE XD
    //---------------------------------------------------------------------------

    PROGRAM Mega;
    CONST
    R_ANCHO = 128;
    R_ALTO  = 128;
    M_PX    = 160;
    M_PY    = 160;


    GLOBAL
    MAPA_FASE     [ 11  , 11  ];//100 pantallas posibles...dibujo....
    MAPA_PANTALLA[ 160  , 160 ];//128:8=16*10   10 x 10 pantallas == 100 pantallas....
    FICHERO2;
    LOADING   
    BEGIN

    set_mode(R_ANCHO,R_ALTO,3);
        set_color(rgb(0,0,0));
        screen_color(rgb(20,50,10));
        screen_smooth(FALSE);
    screen_color(cc_silver);
    set_fps(40, 0);
        FICHERO2=load_fpg("graficos/motor001");
       
        put_screen(FICHERO2,1);    // Puts background screen
        fade_on();          // Fades screen on
        INICIALIZA_TABLAS()
       
    LOOP
    IF (key(_esc))
            unload_fpg(FiCHERO2);
            exit("Text Exit", 1);
            END

    FRAME;
    END


    END
    /*
    ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
    ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██                                     ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██          INICIALIZA TABLAS          ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██               TILES                 ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██                                     ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
    ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
    */

    PROCESS INICIALIZA_TABLAS()
    private pixel;
    BEGIN
    FILE=FICHERO2;
    set_center(0,50,0,0);
    FOR(y=0;y<M_PY;y++)
    FOR(x=0;x<M_PX;x++)
        pixel=map_get_pixel(FILE,50,x,y,"r");
        SWITCH(pixel)
              CASE  38: MAPA_PANTALLA[x][y]=138;END
              CASE 255: MAPA_PANTALLA[x][y]=100;END
              DEFAULT   MAPA_PANTALLA[x][y]=100;END
             
        END     
       
       
       
    END
    END





    PINTA_MAPA_INICIAL();
    END

    /*
    ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
    ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██                                     ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██          PINTA_MAPA_INICIAL         ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██                                     ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██                                     ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
    ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
    ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
    */


    PROCESS PINTA_MAPA_INICIAL()
    BEGIN


    END