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.

AmakaSt

Quote from: SplinterGU on August 21, 2020, 12:22:35 AM
felicitaciones por los mellizos!

Gracias SplinterGU! :)

Quote from: oskarg on August 18, 2020, 08:10:53 PMHola AmakaSt
Me alegra saber que estás bien,hacía tiempo que no publicabas algo y tampoco queria preguntar al respecto por si era un tema algo incomodo y como no veia respuesta tampoco yo me motivaba para trastear con divgo .

Sobre los mellizos,los crios dan mucho trabajo,pero tambien dan  muchas alegrias y sabiendo que has tenido dos de golpe...ya sabes.si te animas... el siguiente reto es tener trillizos.

Gracias por la explicacion de las tablas ,no sabia como hacer algo tan simple.
Un saludo.
Si ahora dejara embarazada a mi mujer me cortaba las bolas... imagínate si encima fueran trillizos!!  :o :o :o :o

Bien... Y ahora lo refrescante para acabar el verano, después de mucho tiempo... una nueva versión de Div GO!  8)

Y las novedades de esta versión 1.32.0:


funciones:
   - polytone(), pause_song(), continue_song();
bugs y mejoras:
   - [ADD] incluida la Web Audio Api y cambiado todo el sistema de audio de div go
   - [ADD] añadida la nueva Web Api de fuentes FontFace, mejorando las cargas de las mismas
   - [ADD] el botón de compilar código ahora se bloquea en espera de respuesta del compilador
   - [FIX] correcciones y mejora en el funcionamiento de las tablas de dos dimensiones
   - [FIX] solucionado el funcionamiento de las funciones out_region() y out_region_dist()
   - [FIX] corregido varios problemas leves del ide
   - [CHANGE] versión windows pasa a Electron, más actual y con soporte a nuevas apis




Aquí dejo un ejemplo de la nueva función polytone(): https://www.divgo.net/c-08908a0c

Un saludo.

AmakaSt

Hola a todos,

Ya está disponible para descargar la versión 1.32.0: https://www.amakasoft.com/herramientas/div-go.html

La versión Windows ha cambiado, ha pasado de PHPDesktop a Electron. :)

Un saludo.

oskarg

Hola AmakaSt,
Gracias por las novedades,
Acabo de probar el comportamiento de las tablas,ahora se asigna correctamente los valores en dos dimensiones ,pefecto.
Sigo trasteando...
Un saludo

AmakaSt

Hola oskarg,
Recuerda que ahora funcionan como en Div 2: variable[x, y];

Un saludo. :)

oskarg

Hola AmakaST,he encontrado un bug  bastante curioso
te adjunto ejemplo.Simplemente no permite hacer dos comparaciones una seguida de otra  guau!!!.debo eliminar una de las dos lineas,sino me pone variable no definida.


/*
Program's Name: <My Program Name>
Author's Name: <My Name>
Company's Name: <My Company or Group>
*/

program MyProgramName;
global
// declared global variables
    points = 0;
    hi_score = 0;

begin
set_title("My Program Name");
    set_icon("graficos/009.png");

// screen canvas options
set_mode(480, 320);
screen_color(cc_silver);

set_fps(60, 0);

     BUG(100,200);

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

frame;
end
end

process BUG(cajax, cajay);
private
xa,ya; 
   
begin
   IF (cajax <= 0 ) xa = cajax; END///de momento lo hacemos de este modo.//si elimino una de estas dos lineas funciona!!!!!!!!!
       IF (cajay <= 0 ) ya = cajay; END///de momento lo hacemos de este modo. //si elimino     una de estas dos lineas funciona.!!!!!!!
       
loop

frame;
end
end





Un saludo.

AmakaSt

Hola oskarg,

Acabo de probarlo y el problema se da en los comentarios de después de END. Al pegar los comentarios a END e incluir una barra de más el compilador ignora el comentario pero dejando una pegada a "END/" y deja de reconocer END y da como que la variable no fue definida.

38        IF (cajay <= 0 ) ya = cajay; END/ -- VARIABLE NO DEFINIDA!
44 end [/size] -- ERROR
 
Prueba en separar el comentario de END o poner solo // en vez de ///, para la próxima versión mirare de corregirlo. :)

Un saludo.

AmakaSt

Hola a todos,
Ya está disponible online (para testeos) una nueva versión de DivGO, la 1.34.0:


bugs y mejoras:
   - [ADD] gamepad virtual para dispositivos con pantalla táctil
   - [ADD] nuevo minimap de código en el ide
   - [FIX] corregido bloqueo de scroll del plano de fondo
   - [FIX] espacio entre caracteres en el formato fnt
   - [FIX] fpg.dat ahora cambia de manera correcta la posición de un gráfico movido o eliminado
   - [FIX] problema con pestañas si tienes proyectos en divgo en distintas carpetas
   - [FIX] comentarios de una línea con más de una barra y apegado a un valor, variable o palabra reservada
   - [CHANGE] los fpg.dat ya no se escriben al compilar, solo al empaquetar proyecto
   - [CHANGE] función load_sound() ahora dispone de 2 nuevos parámetros de repetición
   - [UPDATE] analizador de programa, ahora incluye los datos de filtros del proceso




Aquí os pongo una demostración del gamepad virtual: https://www.divgo.net/proyectos/virtualpad/
Un saludo. :)

panreyes

Me gustaría probar a portar un pequeño juego a DivGO, pero no sé ni por dónde empezar...

Este sería el juego:
https://www.dropbox.com/s/gu50ulecake7s4c/elduelo-1.0.divpmproject.7z?dl=1

¿Hay alguna forma de subir FPGs enteros directamente?
¿Existe la posibilidad de tener códigos en varios archivos?
¿Se pueden abrir archivos de texto?
Me encantaría un videotutorial de cómo portarías este juego xD

(Si alguien quiere probar el juego en un ejecutable de Windows, que vaya aquí:
https://rawrlab.itch.io/el-duelo)

oskarg

Hola AmakaST,
1.El gamepad está muy bien,¿Cómo veo el código fuente?pues me carga directamente el ejemplo ya compilado.
2.El analizador de programa nunca lo he comprendido cómo funciona exactamente en divgo.No es que lo utilice,pero me gustaría entenderlo,Me explico,por ejemplo compilo el ejemplo de procesos lo ejecuto y ahora toco la pestaña de "analizar".
  1.Ocupa toda la pantalla y como el marco no es transparente  no veo que pasa en el juego.
  2.Si no tengo la tecla pulsada,por ejemplo la de avanza a la derecha,no puedo observar luego en el "analizador" como cambia su valor de x,por más que la pulse y toque al siguiente frame.Con lo cual ,no es " interactivo" y esto hace que lo omita y emplee variables con write para saber que realmente pasa.
Un saludo.

     

AmakaSt

Quote from: panreyes on October 25, 2020, 10:14:03 PM
Me gustaría probar a portar un pequeño juego a DivGO, pero no sé ni por dónde empezar...

Este sería el juego:
https://www.dropbox.com/s/gu50ulecake7s4c/elduelo-1.0.divpmproject.7z?dl=1

¿Hay alguna forma de subir FPGs enteros directamente?
¿Existe la posibilidad de tener códigos en varios archivos?
¿Se pueden abrir archivos de texto?
Me encantaría un videotutorial de cómo portarías este juego xD

(Si alguien quiere probar el juego en un ejecutable de Windows, que vaya aquí:
https://rawrlab.itch.io/el-duelo)
Hola panreyes,

Div GO es compatible con los fpg, fnt y map de Div, Fenix y BennuGD, los ejemplos de Steroid, Pitfall, Exploss y Zelda cargan este formato. Sobre los códigos en varios archivos se pueden incluir varios prgs con el bloque include ".prg", ".prg", ".prg"; Este debe estar en el program antes que su begin y los prgs incluidos no deben de tener un program, solo procesos y funciones.
También es posible cargar archivos de texto, al igual que leer datos de BBDD, haciendo uso de load_external_data() y save_external_data(), hay un ejemplo en la carpeta de ejemplos.

Si tengo un rato pruebo en portar tu juego y te lo dejo preparado para que puedas trabajar, y te pueda valer de ejemplo. :)

Quote from: oskarg on October 25, 2020, 10:37:16 PM
Hola AmakaST,
1.El gamepad está muy bien,¿Cómo veo el código fuente?pues me carga directamente el ejemplo ya compilado.
2.El analizador de programa nunca lo he comprendido cómo funciona exactamente en divgo.No es que lo utilice,pero me gustaría entenderlo,Me explico,por ejemplo compilo el ejemplo de procesos lo ejecuto y ahora toco la pestaña de "analizar".
  1.Ocupa toda la pantalla y como el marco no es transparente  no veo que pasa en el juego.
  2.Si no tengo la tecla pulsada,por ejemplo la de avanza a la derecha,no puedo observar luego en el "analizador" como cambia su valor de x,por más que la pulse y toque al siguiente frame.Con lo cual ,no es " interactivo" y esto hace que lo omita y emplee variables con write para saber que realmente pasa.
Un saludo.
     
Hola oskarg,

1. Aquí te pego el código, es como el ejemplo de las colisiones pero he incluido las variables del struct joy, también valen las del struct pad. Luego es activar la opción en el compilador a la hora de empaquetar o proyectar, lo mismo que el botón de fullscreen.
// Pruebas de compilador online Div Games
// Php + Html5 + Canvas + Javascript
// by J. Manuel Habas

program ejemplo_collision;
global
    id_txt1, id_txt2;
    puntos = 0;
    sonido1, sonido2, sonido3;
   
begin
    sonido1 = load_sound("sonidos/inicia.ogg", 0);
    sonido2 = load_sound("sonidos/disparo.wav", 0);
    sonido3 = load_sound("sonidos/elimina.wav", 0);

    set_title("Div GO : Ejemplo de Colisiones");

    /* pruebas con opciones de pantalla */
    set_mode(480, 320);
    screen_color(#025);

    set_fps(60, 0);

    // inicia scroll
    start_scroll(0, 0, 2, 2, 0, 0);
    start_scroll(1, 0, 2, 2, 0, 0);

    scroll[0].front.alpha = 20; scroll[0].back.alpha = 10;
    scroll[1].front.alpha = 80; scroll[1].back.alpha = 40;
   
    text_color = #fff;
    text_size  = 50;
    id_txt1 = write_int(0, 240, 20, 4, offset puntos);
   
    text_color = #ccc;
    id_txt2 = write(0, 240, 90, 4, "Pulsa [B] [N] o [M] para disparar");
   
    shadow_text(id_txt1, #000, 1, 1, 2);
    shadow_text(id_txt2, #000, 1, 1, 2);
   
    nave(240, 290);
    enemigo();
   
    loop
        scroll[0].front.y -= 0.5; scroll[0].back.y -= 0.25;
        scroll[1].front.y -= 2; scroll[1].back.y -= 1;
       
        if (key(_esc)) exit("Amaka Soft 2012", 1); end

        frame;
    end
end

process nave(x, y);
private
    disparado;
   
begin
    graph = 6;
    size  = 50;
   
    loop       
        if (key(_left) and x > 20)
            scroll.front.x += 0.5; scroll.back.x += 0.25;
            scroll[1].front.x += 2; scroll[1].back.x += 1;
            x -= 3;
        end
       
        if (key(_right) and x < 460)
            scroll.front.x -= 0.5; scroll.back.x -= 0.25;
            scroll[1].front.x -= 2; scroll[1].back.x -= 1;
            x += 3;
        end

        if (joy.left and x > 20)
            scroll.front.x += 0.5; scroll.back.x += 0.25;
            scroll[1].front.x += 2; scroll[1].back.x += 1;
            x -= 3;
        end
       
        if (joy.right and x < 460)
            scroll.front.x -= 0.5; scroll.back.x -= 0.25;
            scroll[1].front.x -= 2; scroll[1].back.x -= 1;
            x += 3;
        end

        if ((key(_b) or key(_n) or key(_m) or joy.button1 or joy.button2) and disparado < 1)
            disparo(x, y-20); sound(sonido2, 200, 256);
            disparado = 5;
            delete_text(id_txt2);
        end
           
        disparado --; if (disparado < 0) disparado = 0; end
       
        frame;
    end
end

process disparo(x, y);
begin
    graph = 3;
    angle = 90000;
    size  = 15;
    z      = 10;
   
    loop
        y -= 5; if (y < -10) break; end
       
        frame;
    end
end

process enemigo();
private
    desformacion, anima;
    energia_enemigo = 5;
    id_disp;
   
begin
    graph = 5;
    x       = rand(0, 480)
    y      = -50;
    size  = rand(60, 110);
   
    sound(sonido1, 100, 256);
   
    loop
        if (desformacion == 0)
            shear_x += 4; if (shear_x > 50) desformacion = 1; end
        else
            shear_x -= 4; if (shear_x < -50) desformacion = 0; end
        end

        y+= 5; if (y > 100) y = 100; end
        if (anima == 0)
            x-=2; if (x <0) anima = 1; end
        end
       
        if (anima == 1)
            x+=2; if (x >480) anima = 0; end
        end       
       
        if (anima == 2)
            size -= 5; if (size < 0) puntos += 100; enemigo(); break; end
        end
       
        id_disp = collision(type disparo);
        if (id_disp)
            puntos += 5; energia_enemigo --;
            signal(id_disp, s_kill);
        end
       
        if (energia_enemigo < 0 and anima <> 2) anima = 2; sound(sonido3, 200, 256); energia_enemigo = 0; end
       
        frame;
    end
end


2. Hay que mejorarlo y añadir más cosas aún, pero a mí me ha ido bien para portar Panic!, cambiar el tono y saturación del prota, al pulsar siguiente frame, en el cuadro de imagen del proceso puedo ver el cambio que se hace en las variables con el graph, también se puedes ver donde esta un proceso, si se ha ejecutado o está en el limbo y su estado, pero aun hay que añadir más cosas, para que sea realmente mucho más útil.

Un saludo.

oskarg

#850
Hola AmakaST,
Una sugerencia
Según el tipo de navegador que utilice las colisiones son lentas,tipo collision()  ..por ejemplo en este ejemplo que me has ofrecido,si el proyectil esta cerca del trebol se ralentiza.Esto depende mucho del navegador por lo que observo,en chrome es bien marcado.
Si pongo collision_box...soluciono el probrema,me imagino que haces una simple interseccion de cajas,perfecto,pues bien, mi sugerencia es que esa caja ,colision_box()pueda definir su tamaño size=100 % o size=20% o mejor aun su alto,ancho,de esta manera  quedaria como colision_box(type proceso,ancho,alto);
se me olvidaba ,donde alto y ancho corresponde proceso del trebol.
sigo trasteando....
Un saludo.

AmakaSt

#851
Ya se encuentra disponible para descargar la versión 1.34.0: https://www.amakasoft.com/herramientas/div-go.html

He subido una pequeña actualización de versión a la 1.34.1 que corrige algunos bugs en el compilador, detectado con el juego elduelo de panreyes. :)

AmakaSt

Nueva versión 1.34.2 que corrige algunos bugs:



bugs y mejoras:
   - [FIX] problemas con variable id del proceso
   - [FIX] fallos de compilación en structs que contienen structs con tablas




Ya disponible para descargar en: https://www.amakasoft.com/herramientas/div-go.html

oskarg

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




Un saludo.

panreyes

Buenas Amakast :)

Aquí el rompedor de DivGOs xD

from parece algo roto por aquí:
https://www.divgo.net/c-c08fc05a