Bennu Game Development

Foros en Español => Otros DIV-likes => Div GO => Topic started by: Drumpi on January 18, 2017, 02:41:28 AM

Title: Getting started
Post by: Drumpi on January 18, 2017, 02:41:28 AM
Hola de nuevo:

Bueno, abro hilo para ir preguntando dudas que me surjan en el desarrollo de DivGo.
Y la primera va a ser la más obvia ¿Cual versión uso? He descargado los dos archivos de la v1.08, la desktop y la que no tiene sufijo. Veo que la desktop, aunque es más grande, ya trae un .exe para empezar a trabajar, parece que no necesita instalación, como parece que se necesita para la otra, que hay que andar descargando e instalando librerías.
A mi no me gustan los instaladores, prefiero que los programas funcionen y, cuando ya no los quiera, borre la carpeta y me olvide (sé que hay desinstaladores, pero muchos de ellos aun así dejan basura).

Así que ¿por dónde empiezo? ¿Y hay algún tutorial de toma de contacto o me puedo poner a programar a las bravas como si fuera DIV2 directamente? :D

Gracias :)
Title: Re:Getting started
Post by: AmakaSt on January 18, 2017, 01:20:58 PM
Hola,

No es necesario descargar ambas versiones, la desktop es solo para Windows y es para los que no saben o no quieren instalarse Wamp o Xampp en el equipo, que es necesario para poder ejecutar PHP y MySQL en localhost. Xampp o Wamp (u otro) lo necesitaras a la larga si quieres crear cuentas de usuario o guardar datos en una BBDD en local. Para Linux y Mac no hay versión desktop, es descomprimir dentro de las carpeta httpdocs en Xampp, o www en Wamp (Mamp en MacOS y Lamp en Linux).

Crea una carpeta con el nombre del proyecto y descomprime DivGO en ella, podrías tener varios proyectos en una sola carpeta de DivGO va a gusto de cada uno. Veras que en la versión Desktop hay una carpeta www, ahí está DivGO, es exactamente lo mismo que la versión que no incluye Windows desktop, al ejecutar lo que se visualiza es lo de esa carpeta, y ahí es donde podrás añadir los assets de tu juego, también se puede incluir gráficos y crear fpgs desde el entorno.

Y desde el entorno, ya puedes programar como si fuera Div2, desde el menú hay una lista de funciones y variables, algunos con ejemplos. Para ver los ejemplos mejor hazlo desde www.divgo.net (http://www.divgo.net), o si no, abre otra pestaña aparte para verlos, otra aparte a la de tu propio juego porque si no lo acabaras pisando con algún ejemplo.

Tu proyecto se guarda cada vez que compilas en el navegador en local, también lo puedes descargar y te generara un archivo prg, o guardar en la "nube" y recuperarlo con una clave encriptada con el que se asocia cada código.

Y ya no sé que mas contar... :P

Cualquier duda que tengas me comentas,

Un saludo.
Title: Re:Getting started
Post by: Drumpi on January 18, 2017, 05:41:27 PM
Ah, genial, porque me estaban obligando a instalar Wamp en el curso de PHP, así que ya tengo dos excusas para hacerlo.

Y no me gusta la idea, sobre todo porque eso significa que voy a tener Apache funcionando cada vez que arranque el ordenador... creo. Cuando estaba trabajando no vi la opción de pararlo (aunque no iba a andar parando servidores ajenos sin saber lo que hacía :D).

Hablando de recursos ¿Los FPG son sólo de 8bits o hay compatibilidad con algún estandar de 16/32bits actual? ¿O es preferible usar PNG con transparencias para reducir los tiempos de carga/descarga de recursos?
Title: Re:Getting started
Post by: AmakaSt on January 18, 2017, 09:14:10 PM
Se puede parar los servicios, normalmente esta el icono de Wamp en la parte inferior derecha, desde ahí también puedes activar o desactivar opciones de PHP.

DivGO soporta los FPG de 8, 16 y 32bits, pero como ya has dicho y siendo para web lo mejor es tenerlo en PNGs, es mas rápido cargando y si el FPG llega a ocupar más de 5Mb el navegador se queda colgado esperando a que se acabe de producir esa carga. Hice en DivGO un sistema de "FPG" por carpetas, colocando los gráficos numerados del 001.png hasta el 999.png.   8)

graficos = load_fpg("mi_carpeta_fpg"); // Y esto funciona como un fpg tradicional donde el 001.png será el graph = 1


Un saludo.
Title: Re:Getting started
Post by: Drumpi on January 25, 2017, 06:35:42 PM
Bueno, por fin he podido ir ejecutando unos cuantos ejemplos y probando DivGo.
De momento me ha gustado lo que he visto: muy buena fidelidad a Div (incluso el modo7 se parece mucho al del Div original), parece que buena respuesta...
Por un momento pensé que por cada proyecto tendría que generar una copia de DivGo, pero ya cuando compilé el primer código vi que no. Tambien el tema del sistema de carpetas de DIV, que no me gustaba nada (prefería tener todos los recursos de un juego en la misma carpeta), y que ya no te fuerza a que los fpgs estén en la carpeta FPG... Good, good!

El ejemplo de 3D lo he visto muy lento, demasiado, no parece que tenga utilidad si queremos hacer un Doom, porque va a ir arrastrándose ^^U En cuanto le he añadido unos 7 elementos a la escena, han empezado a caer los FPS ¡Y yo que quería hacer el "Drajon Lol: devolucion extreme edition" en 3D reales y no con 3 modos 7!

Lo que ya no sé si me convence es que al compilar el código, este se queda entero en el HTML, y cualquiera puede verlo ¿Hay forma de ofuscarlo, ocultarlo o algo así?

Ya iré viendo más ejemplos, pero si es tan fiel como parece al original, lo mismo me animo y termino aquel primer juego que empecé hace la tira, y que no he acabado porque ya no uso DIV2 (y porque tenía un problema con los random, que no eran random :S).
Es que me gusta la idea de que pueda interactuar con una base de datos mediante PHP, y que sea mas web-friendly que DIV3, que este sí que parece que ofusque/compile el código ^^U.
Title: Re:Getting started
Post by: alicesimu on January 27, 2017, 07:59:04 AM
Me gustaria trastear con este entorno y Div-like, me resulta muy atractivo.
Consiste en poder ejecutar juegos en lenguaje Div?? es un Fork de BennuGD???
Directamente des de cualquier navegador WEB??

Documentacion hay? que debo descargar e instalar?

se debe tener en localhost? o puedes gestionarlo en tu propio host de dominio publico(free)
poseo un host gratuito, con soporte de base de datos mySQL y PHP lo tipico.

Me gustaria saber que características contiene y limitaciones.
Existe la posibilidad de guardar datos: save, fopen,load... o ese tipo de operaciones no son validas??¿¿¿


Quiero informarme, por cierto genial proyecto puro HTML5 genial!!
Title: Re:Getting started
Post by: Drumpi on January 27, 2017, 01:47:10 PM
Hasta donde he probado, es como cualquier aplicación PHP: puedes trastear en local si tienes instalado WAMP, XAMMP o instalando Apache, MySQL y PHP/PHPmyadmin. Es crear una carpeta en c:/wamp/www y meter ahí la versión de divGO (la que no es desktop), y desde el navegador, accediendo a http://localhost/divgo (o lo típico para acceder a la carpeta, según el nombre y el puerto) tienes un entorno de desarrollo con editor de código, de FPG, etc.
Por lo demás, se parece mucho a programar en DIV, incluso tienes el mismo esquema de carpetas, con la diferencia de que no estás limitada a la carpeta FPG para guardar los FPG (yo prefiero crear una carpeta en la de divGo para meter los recursos de cada proyecto).

Una vez que has comprobado en su reproductor que todo funciona, le das a compilar y te genera un .zip con todos los recursos que usa tu juego (no sé qué seleccionará, pero puedes añadir y quitar ficheros a tu gusto, es un zip), un html con el programa y los js de divgo (que ocupa unos pocos KB), que puedes subir a tu hosting y enlazarlo desde tu web principal.
Recomiendo que trabajes siempre en local, y cuando lo tengas listo, lo pases a tu hosting (a menos que quieras ir haciendo pruebas periódicas de funcionamiento, pero nunca trabajes en remoto).

En cuanto a si es DIV, o un fork de BennuGD, ni idea. Te puedo decir que el modo7 es más parecido a DIV que a Fenix, pero ya está. Aparte, hay funciones propias, modos de 16 y 32 bits, funciones 3D, y creo que también las hay para interactuar a nivel de web (BBDD MySQL, php, url, etc...). Hay documentación, pero apenas la he mirado, todavía estoy con los códigos de ejemplo que trae (hay varios juegos de DIV, como el Malvado, el Steroid o el Super Paf).
Title: Re:Getting started
Post by: oskarg on January 27, 2017, 09:35:56 PM
Es para daros un tiron de orejas a los dos  ;D pues  Divgo esta genial y es una lastima que tan poca gente lo pruebe y lo baje...Ojala que la gente se anime y amaka siga con este gran proyecto,pues es libre y facil de utilizar.
Title: Re:Getting started
Post by: Drumpi on January 28, 2017, 03:26:21 PM
Pues nada, aprovecha y responde a las dudas que quedan por resolver, porque a mi también me interesan las respuestas :D :D :D
Title: Re:Getting started
Post by: AmakaSt on January 30, 2017, 11:40:08 AM
Quote
Lo que ya no sé si me convence es que al compilar el código, este se queda entero en el HTML, y cualquiera puede verlo ¿Hay forma de ofuscarlo, ocultarlo o algo así?

Hola,

Div GO tiene una opción para minificar el código, pero también puedes coger el script del código y llevarlo a un archivo js y minificar ese archivo, la ofuscación del script no es muy aconsejable, dependiendo como este ofuscado el navegador o el antivirus puede bloquear el script y considerarlo inseguro.

Quote
Consiste en poder ejecutar juegos en lenguaje Div?? es un Fork de BennuGD???
Directamente des de cualquier navegador WEB??

Documentacion hay? que debo descargar e instalar?

se debe tener en localhost? o puedes gestionarlo en tu propio host de dominio publico(free)
poseo un host gratuito, con soporte de base de datos mySQL y PHP lo tipico.

Me gustaria saber que características contiene y limitaciones.
Existe la posibilidad de guardar datos: save, fopen,load... o ese tipo de operaciones no son validas??¿¿¿

No es ningún Fork de Div, Fenix o BennuGD, esta programado en javascript y PHP de cero. Empezó como una librería propia para hacer juegos para navegador, basándome en algunas funciones de Div2 pero a 32bits de color, por lo que no hace uso de paletas. Tiene muchas funciones y variables compatibles de Div2, pero también de Fenix, BennuGD o Gemix, como son: size_x, size_y o alpha.

He intentado poner mucha documentación, pero todavía me falta añadir más ejemplos y describir un poco más las nuevas funciones. Para poder empezar hay una versión desktop para windows, que no requiere de ningún tipo de instalación.

Puedes gestionarlo donde quieras, en local o en un servidor propio (free o no free), pero lo mejor y más rápido es que tu proyecto lo puedas gestionar en tu equipo, luego puedes empaquetarlo y subirlo al servidor que quieras, incluso puedes empaquetarlo en una versión ejecutable usando nw.js o electron. Para hacer funcionar un proyecto empaquetado con DivGO no requiere de PHP o MySQL en el servidor para tu proyecto, pero si quieres guardar datos en una BBDD, crear cuentas de usuario y hacer cosas más avanzadas, te hará falta.

Se puede guardar datos de 3 formas distintas, cree nuevas funciones para cada caso:
Para datos locales en el navegador:
- delete_local_storage(OFFSET variable);
- find_local_storage(OFFSET variable);
- load_local_storage(OFFSET variable);
- save_local_storage(OFFSET variable);

Para datos externos, enviados por POST y poder recogerlo mediante PHP y guardar estos datos en un servidor:
- load_external_data(nombre de archivo);
- save_external_data(ruta del archivo, OFFSET variable);

Para datos de sesión, estos son temporales una vez cierras el navegador se pierden:
- delete_session(OFFSET variable);
- find_session(OFFSET variable);
- load_session(OFFSET variable);
- save_session(OFFSET variable);

Un saludo.
Title: Re:Getting started
Post by: Drumpi on January 30, 2017, 08:26:34 PM
Bueno, de momento no pretendo hacer nada serio, pero si luego quiero crear un programa con contenido de pago ¿no sería un problema el que se pueda acceder al código fuente? He visto lo de minificar, pero con mucha paciencia se podría descifrar ^^U

Y es interesante lo de poder acceder a BBDD, a ficheros locales, ficheros de sesión (¿qué son y dónde se guardan?) y ficheros remotos. Tengo un proyecto entre manos en el que me vendría bien que el usuario pudiera leer imágenes de mi servidor, y que pueda añadir los suyos propios.

Ah, y una pregunta que me dejé en el tintero: ¿se puede dividir el código en distintos ficheros? Igual que Fenix/BennuGD tienen con include. Es que si no, mantener el código, aunque sea con Notepad++ puede ser difícil en cuanto se pasen las 2000 lineas de código.
Title: Re:Getting started
Post by: AmakaSt on January 31, 2017, 12:26:29 PM
Quote from: Drumpi on January 30, 2017, 08:26:34 PM
Bueno, de momento no pretendo hacer nada serio, pero si luego quiero crear un programa con contenido de pago ¿no sería un problema el que se pueda acceder al código fuente? He visto lo de minificar, pero con mucha paciencia se podría descifrar ^^U

Y es interesante lo de poder acceder a BBDD, a ficheros locales, ficheros de sesión (¿qué son y dónde se guardan?) y ficheros remotos. Tengo un proyecto entre manos en el que me vendría bien que el usuario pudiera leer imágenes de mi servidor, y que pueda añadir los suyos propios.

Ah, y una pregunta que me dejé en el tintero: ¿se puede dividir el código en distintos ficheros? Igual que Fenix/BennuGD tienen con include. Es que si no, mantener el código, aunque sea con Notepad++ puede ser difícil en cuanto se pasen las 2000 lineas de código.

Hay ofuscadores de Javascript online como: http://www.danstools.com/javascript-obfuscate/index.php (http://www.danstools.com/javascript-obfuscate/index.php)

Las variables de sesión y las localstorage los almacena el navegador, como las cookies, pero con las localstorage se puede guardar una gran cantidad de datos, que para guardar partidas de un juego va genial. En DivGO las utilizo para guardar los cambios en los gráficos desde el editor.

Si que hay include, se tiene que añadir en el program antes de begin, pero si tienes un error en el archivo que incluyes no te lo marcara en el código, solo te avisara de que hay un error.
Title: Re:Getting started
Post by: Drumpi on January 31, 2017, 04:36:51 PM
Entiendo entonces que include no es exactamente un "copia/pega" como en Bennu, sino más bien como una llamada a una librería externa ¿no?
Estaría bien que pudiese indicar los errores de compilación en los includes, pero bueno, siempre se puede poner el proceso en el main y luego moverlo al include, una vez que sabemos que funciona.

Y ese ofuscador hace lo mismo que el minificador tuyo, con la diferencia de que en lugar de llamar "variable1" a las variables, las llama "jvndvibv", que para el caso es lo mismo ^^U
Title: Re:Getting started
Post by: Drumpi on February 05, 2017, 04:52:31 PM
Vale, primer problema que me encuentro que no sé resolver.
Suelo usar desde hace eones el siguiente proceso dummie para mostrar gráficos:

process dummie (file, graph, x, y, z)
begin
    signal(id,s_freeze);
    frame;
end

De esta manera no consume recursos y si hay que hacer algo con él lo hago desde un proceso aparte. Sin embargo, en DivGo, el proceso dummie muere. Tengo que sustituir su contenido por "loop frame; end".
He intentado ponerle dos frames, a ver si era cosa de la sincronización de procesos, pero que va.

Otra cosa. Vale, hace mucho que no uso DIV, pero ¿no se podían declarar las variables de tipo INT? me da un error cada vez que lo intento, tanto en GLOBAL/PRIVATE como en los parámetos de entrada de funciones y procesos.

Ah, y esto me da error de índice de array negativo:

CONST
    _CTE_A = 10;
GLOBAL
    mi_array[_CTE_A - 1];
Title: Re:Getting started
Post by: AmakaSt on February 06, 2017, 01:25:31 PM
Es curioso, he estado probando lo que comentas del proceso dummie y he visto que en Div GO me ha funcionado haciéndolo al revés, primero frame y luego signal.  :o


process dummie (file, graph, x, y, z)
begin
    frame;
    signal(id,s_freeze);
end


Y así funciona, como te quedas?. xD

Me lo revisare a ver que pasa, ahora no recuerdo exactamente a qué se puede deber.

Sobre los tipos, DivGO no requiere de la declaración de tipo de variable (es de tipado débil) como pasa en PHP, Javascript o Python.

Y lo del array, prueba en poner el valor numérico a la hora de declararlo en el inicio.

Un saludo.
Title: Re:Getting started
Post by: Drumpi on February 06, 2017, 05:41:26 PM
 :o Lo del proceso dummie me ha dejado "to loco". Voy a probarlo... y poner algún FRAME extra para cuando lo arregles :D

Lo del array, si pongo un valor numérico, lógicamente va a funcionar, no hace falta ni probarlo, pero lo ideal es que admita constantes, porque así, si en algún momento tengo que amentar su capacidad (junto al de otros arrays relacionados) basta con modificar un número.

Dos cosas más: al crear el empaquetado, me mete la carpeta de los gráficos de ejemplo ¿Es eso normal? ¿Se puede evitar o lo borro a mano de cada paquete que haga? (como seguramente se quedarán gráficos sin añadir por construir sus nombres en tiempo de ejecución...).

Y al crear mi primer programa, a 800x600, este se ejecuta colocando la esquina superior izquierda de la zona del juego en el centro de la ventana. No es cosa de los gráficos, porque en la "ejecución en modo debug" (es decir, en la ventana del IDE) todo funciona a la perfección. ¿Qué puedo estar haciendo mal? (si lo necesitas, te puedo pasar un enlace a la web de pruebas, o lo poco que llevo del proyecto).

Gracias.
Title: Re:Getting started
Post by: AmakaSt on February 06, 2017, 08:57:32 PM
Los gráficos de la carpeta graficos los puedes eliminar todos si no los vas a usar pero debe ser antes de empaquetar porque si no los buscara para la carga y dará error. Esa carpeta corresponde al file = 0; el primer load_fpg() que añadas en el código corresponderá al file = 1; en esa carpeta con poner el grafico para el bloque LOADING y el icono para la pestaña del navegador es más que suficiente. :)

Sobre lo de que el juego se te va a la esquina superior izquierda no lo acabo de entender, pásame el enlace para ver que puede estar ocurriendo.

Title: Re:Getting started
Post by: Futu-block on February 06, 2017, 09:31:41 PM
Aqui está el ejemplo
(http://forum.bennugd.org/index.php?action=dlattach;topic=4457.0;attach=3907)
(http://forum.bennugd.org/index.php?action=dlattach;topic=4457.0;attach=3912)

Que digo yo, ¿hace falta poner eso de la resolución? o se adapta a la resolución del navegador/pantalla de cada uno...
Title: Re:Getting started
Post by: AmakaSt on February 06, 2017, 10:22:41 PM
Ops, acabo de ver que es por el uso de set_mode(), en DivGO no funciona igual que en BennuGD, el tercer parámetro es de escalado y no de color. Por lo que set_mode(800,600,32) no te va a poner el color a 32bits que eso es siempre en Div GO.

set_mode(800,600,2); //te muestra la pantalla de juego escalada al doble
set_mode(800,600,3); //al triple
set_mode(800,600,4); //al cuadruple... y así hasta 20
set_mode(800,600,view_full_size_scale); //se escala llenando todos los huecos de la página, por lo que toda la página es la pantalla del juego
set_mode(800,600,view_full_aspect_ratio); //se escala manteniendo las proporciones de la pantalla, si la pantalla de juego es 800x600 y el navegador esta a 1280x720, quedaran los márgenes negros en los laterales
set_mode(800,600,view_full_amplitude); //se escala llenando todos los huecos de la pagina manteniendo las proporciones, por lo que se comerá un trozo de pantalla del juego para ajustarlo a dicha resolución
set_mode(800,600,0.5); //usando decimales se reduce, esto es a la mitad

Prueba esto a ver si funciona. :)

Un saludo.
Title: Re:Getting started
Post by: Drumpi on February 07, 2017, 01:03:01 AM
Quote from: AmakaSt on February 06, 2017, 08:57:32 PM
Los gráficos de la carpeta graficos los puedes eliminar todos si no los vas a usar pero debe ser antes de empaquetar porque si no los buscara para la carga y dará error. Esa carpeta corresponde al file = 0; el primer load_fpg() que añadas en el código corresponderá al file = 1; en esa carpeta con poner el grafico para el bloque LOADING y el icono para la pestaña del navegador es más que suficiente. :)

Pero no puedo borrar esa carpeta o su contenido, son los gráficos para los códigos de ejemplo, y viene de serie con DivGo.
¿Podría, al menos, borrar el contenido DESPUÉS de empaquetarlo, y sustituirlo por lo que dices, los gráficos de la barra de progreso y eso? Para que no quede vacía y así, al hacer el auto_load_fpg, se encuentre al menos con un gráfico (como load_fpg no tiene en cuenta el número de gráficos que contiene el fichero...).
Al final vas a tener que implementar un selector de recursos para el empaquetador, o unos comandos para el código, verás tu :P

Vale, Futu, has hecho lo que te dije que no hicieras: publicar el enlace a la alpha privada :D
No, ya no borres la imagen, ya da igual, ya la ha visto la gente... y tampoco es que haya mucho que ver ^^U Si veo que necesito esconder algo, ya cambiaré la URL.

Uuuups. Fallo de novato: suponer que las funciones de DIV/Fenix/Bennu hacen lo mismo en DivGo ^^U
Es bueno saber que sólo hay modo 32bits, porque tenía intención de usar multipaletas para el cambio de color. Abortaré la misión y volveré a la idea original de convertir gráficos de 4bits a 32bits usando map_put_pixel :D ...si sigue existiendo ^^U

Que digo yo, yo estoy haciendo el programa a la resolución del fondo que me pasaste, Futu. Si quieres que se reescale, por mi no hay problema. Tanto sin escalado como con VIEW_FULL_ASPECT_RATIO funcionan correctamente. Ahora sólo necesito esos gráficos que te pedí para poder seguir programando.
Title: Re:Getting started
Post by: Futu-block on February 07, 2017, 12:43:32 PM
Oh, no, sobrecarga del servidor!!!
¡¡SOCORROOOOOOOOO!!

bueno, ahora que está solucionado, ya te he mandado unas imagenes totalmente ambiguas para que hagas la interfaz al gusto, puesto que si lo estas programando tu, que menos que lo hagas como te resulte mas comodo

pd: mejor si no usamos bitstrips, ponle drumpi-tiras o algo asi...
Title: Re:Getting started
Post by: AmakaSt on February 07, 2017, 01:33:37 PM
Quote from: Drumpi on February 07, 2017, 01:03:01 AM
Uuuups. Fallo de novato: suponer que las funciones de DIV/Fenix/Bennu hacen lo mismo en DivGo ^^U
Es bueno saber que sólo hay modo 32bits, porque tenía intención de usar multipaletas para el cambio de color. Abortaré la misión y volveré a la idea original de convertir gráficos de 4bits a 32bits usando map_put_pixel :D ...si sigue existiendo ^^U

La función set_mode() funciona como en Div2, el de un solo parámetro y las constantes mANCHOxALTO: set_mode(m800x600); //esto funciona igual en DivGO
Y con 2 parámetros es igual que en Fenix: set_mode(800,600);
El tercer parámetro es el que deja de ser compatible con Bennu y Gemix, que no lo requiere al depender del color soportado por el navegador, por norma a 32bits. Pero se pueden cargar gráficos y fpgs de 8bits y 16bits sin problemas.
La función map_put_pixel() sigue existiendo pero a 32bits, por lo que no pinta con un número de paleta, en el listado de funciones está el ejemplo, lo mismo que map_get_pixel(). Ejemplo: map_put_pixel(fichero, graph, x, y,color); //en color puedes usar las funciones rgb(r,g,b), rgba(r,g,b,a), constantes de color predefinidos o un valor hexadecimal. :)

Un saludo.
Title: Re:Getting started
Post by: Drumpi on February 08, 2017, 01:14:21 AM
Gracias, Amaka, y perdona que te esté dando la tabarra todo el rato. Los primeros pasos son duros, ya sabes ^^U
Si encima hace milenios que no toco DIV2, pues algunas cosas se olvidan o se mezclan, y como encima DivGo ha tomado cosas de otros lenguajes, pues es casi como empezar de cero.
Eso sí, me tienes que decir si has incorporado el sistema de multi-paletas de Bennu o si sólo sigue habiendo una única, porque si puedo usar una paleta por proceso, el poder elegir color para cada parte del cuerpo se me facilitaría enormemente (sobre todo porque map_put_pixel siempre ha sido, históricamente, una de las funciones más lentas del lenguaje... aunque podría usar la función de tintar, pero eso me limita a poder escoger un solo color y su sombra, y adiós a hacer camisetas del Betis, Deportivo, Barcelona... :D

Futu, ya estamos como siempre :D : si tu eres el grafista, tienes que ser el diseñador, sobre todo porque eres el que ha pedido el proyecto y eres el que conoce el programa que tratamos de imitar. Se supone que tú tomas las decisiones y yo te digo si se puede hacer o no, o en todo caso, tu debes proponer varias ideas y yo decirte cuáles se pueden hacer o cuales son más fáciles o lo que yo podría mejorar.
Cuando hicimos SBTime, vale, porque me tocó a mi el papel de diseñador (aun no sé si porque era mi idea  8) o porque saqué la pajita más corta  :o ), pero ahora te toca decidir los aspectos importantes, y el primero ya lo tienes sobre la mesa: la interfaz del editor de caras. Yo estoy siguiendo tu esquema, y los cambios que te propuse son para aumentar el número de elementos a usar, algo que no se había tenido en cuenta en tu diseño inicial. Aun no sé donde van a ir las herramientas, y cuanto más tardes en decidir una interfaz definitiva, más difícil va a ser aplicarle los cambios ;)
Siento si sueno muy brusco, pero tienes que espabilar un poco. El diseño de programas es muy divertido, pero también exige seriedad y disciplina en algunos aspectos ;)
Title: Re:Getting started
Post by: Futu-block on February 08, 2017, 08:53:05 AM
no, el diseñar progmamas es una puta mierda, ahora entiendo al visual basic, es el maná...

Yo no tengo problemas en diseñarte el pregrama, eso si, lo vamos a cambiar a 1024x600, mas que ná porque los monitores ahora vienen hiper mega enormes. Ya veremos si vá a haber otras versiones en otros formatos y tal y tal

Cambiando de tema y si puedo preguntar esto aqui (y si no copio-pego en mi hilo de ''ayudarme'') yo programo con loop y eso de comprobar 25~50 veces al segundo en un programa que practicamente no variará sino clicas en algun sitio o arrastras como que no es muy util...

¿se puede poner algo como ''untill ... mouse.left'' o algo asi? o el untill tambien hace 25~50 comprobaciones al segundo??
Title: Re:Getting started
Post by: Drumpi on February 08, 2017, 08:25:46 PM
Visual Basic no se libra del tema del diseño. Lo tienes hecho en el ordenador en menos tiempo, pero el dónde ir colocando cada cosa (y luego programar su funcionalidad), de eso no te libras: eso es el diseño del programa :D

Lo de la resolución tu verás, ten en cuenta que es muy probable que la gente use los móviles para eso... aunque ahora tienen una resolución bestial (aunque no en mi caso LOL). Creo que no lo he subido, pero la versión que tengo ahora reescala a la pantalla y se ve bastante bien en mi ordenador (1366*768 o algo así, pero hay que descontar la barra de Windows, las de los menús del navegador...).

Lo otro mejor abre un hilo, y explícate mejor porque no te pillo ^^U
Title: Re:Getting started
Post by: Drumpi on February 11, 2017, 06:47:36 PM
Más problemas:

- He creado un FPG que descomprimido pesa 2'5MB, de 32bits con FPGEditor de DCelso. Write me chiva que se ha cargado (código de FPG = 1), pero no muestra ninguna imagen, y si intento abrirlo desde el inspector del navegador, se queda pensando indefinidamente.
- Graphic_info no me va. graphic_info(0, 0, G_WIDE) no me devuelve nada, literalmente, ya sea con el gráfico 0,0 o con otro cualquiera: cuando añado la línea:
write(0,10,20,0,"ancho pantalla: " + graphic_info(0, 0, G_WIDE));
No me escribe nada, ni siquiera la cadena inicial. Si lo pongo en un put:
put(file, 2, graphic_info(0, 0, G_WIDE) - 1, 0);
La imágen no se coloca.
- set_center no me modifica el centro del gráfico, al menos para los pngs cargados con load_fpg. Estos siguen teniendo el punto de control 0 en el centro de la imagen.

Llevo un rato liado con esto y no consigo que funcione. Voy a segir intentándolo, pero si necesitas que te envíe el código o el proyecto, me lo dices.

EDIT: Vale, retiro lo del set_center. Es la función PUT la que no respeta el nuevo centro de gráfico :D

EDIT2: ¡¡me han vuelto a desaparecer los procesos dummies!! Ya ni con loop frame; end se quedan.
Title: Re:Getting started
Post by: AmakaSt on February 12, 2017, 07:39:53 PM
Hola,

Graphic_info(0,0, G_WIDE); da error porque no existe el grafico, por esté error se detiene el programa, tengo que hacer que devuelva 0 o false

Lo mismo te está pasando con put(), prueba así: put(file, 2, graphic_info(file, 2, G_WIDE) - 1, 0);

Pásame el código para ver en que te puede estar fallando y que puedo solucionar.

Un saludo.

Title: Re:Getting started
Post by: Drumpi on February 12, 2017, 07:55:35 PM
De acuerdo, te subo el proyecto aquí y te paso la contraseña del zip por privado.
Está como la última versión que tengo. Si tienes dudas de qué quería hacer, me lo preguntas. Es que ahora ando un poco liado y no me puedo detener en los detalles ^^U Sorry.
Title: Re:Getting started
Post by: Drumpi on February 13, 2017, 12:48:37 AM
Quote from: AmakaStTe pongo una captura, a mi me ha funcionado, lo de graphic_info() para el ancho de pantalla no lo acabo de entender. Si quieres saber el ancho del canvas, del navegador o de la pantalla del sistema operativo, existe la función get_browser() que te da este tipo de información.

Porque lo que necesito saber es el ancho y alto del canvas donde se ejecuta DivGo, o sea, la zona donde se reproduce, no el tamaño del navegador. Sé que su tamaño ahora es de 800x600 porque es lo que he puesto en el set_mode, pero si el día de mañana decido cambiarlo, prefiero hacerlo de este modo que usando constantes... o si al final decido que se pueda reescalar. Hasta ahora, esta ha sido siempre la única manera de saber las dimensiones del juego: mediante el tamaño del fondo de pantalla.

Y no es que no funcione: eso que te he pasado es la mejor forma de que funcionase, pero si sustituyes la linea 64 por la 63, y la 69 por la 68, las dos imágenes abandonan la posición en la que aparecen en la captura que has puesto, y se descentran.
Por otro lado, la función init_face_preview genera dos procesos "dummie", que deberían aparecer en el centro de la pantalla, como se ve en la imágen que puso futublog:
(http://forum.bennugd.org/index.php?action=dlattach;topic=4457.0;attach=3912)
Faltan la cara y el pelo, y no aparecen en la lista de procesos activos :S

Y por eso te preguntaba tanto por el tema de los archivos que se descargan: en principio va a haber varios tipos de pelo, de cara, de nariz... Necesito que para este editor se descarguen todos (bueno, si son por bloques, mejor), pero luego tengo que hacer otro editor con las partes seleccionadas, y sólo quiero que se descargue una de las caras, uno de los pelos, una de las narices, una de las orejas... si todas comparten carpetas (como se ve en el zip que te he mandado), DivGo las va a descargar automáticamente, y quiero evitarlo, porque hoy son 10 ficheros de cada y en total son 2'5MB, pero dentro de un año lo mismo son 200 de cada y ya tendríamos que descargar 100MB, y no es aceptable :)
Title: Re:Getting started
Post by: FreeYourMind on February 13, 2017, 08:32:27 AM
la contraseña es meneamelaotravez
Title: Re:Getting started
Post by: Drumpi on February 17, 2017, 12:22:54 AM
Casi, Futu, casi, te han faltado... casi todas las letras, pero casi la aciertas :D
Title: Re:Getting started
Post by: Futu-block on February 17, 2017, 01:53:58 AM
jo, ni clonandome como hamster...
Title: Re:Getting started
Post by: Drumpi on February 19, 2017, 05:44:36 PM
AmakaST ¿Alguna pista de por qué no se me ven los procesos dummies? No puedo seguir hasta que se solucione esto :S

EDIT: Nada, olvídalo, he encontrado un graphic_info(0,0, que no había quitado y se interrumpía el código ^^U Ya consigo que se vean los procesos dummies :P

Lo de siempre, tienes que pedir ayuda para encontrar la solución tú solo. Ya van dos hoy: esto y que por fin puedo ejecutar Sonic Generations después de más de seis meses de errores :D :D :D
Title: Re:Getting started
Post by: Drumpi on March 09, 2017, 10:32:03 AM
Por favor, AmakaSt, dime que para cargar imágenes no hay que poner la ruta completa del fichero, que se pueden construir strings al vuelo, porque me está dando un error de compilación que no me está gustando absolutamente nada:

70 fe_grafs_face[cont] = load_image("bitstrips/grafs/face/face_" + cont + ".png"); -- NO SE ENCONTRÓ
79 fe_grafs_hair1[cont] = load_image("bitstrips/grafs/hair1/hair1_" + cont + ".png"); -- NO SE ENCONTRÓ


Esas líneas están dentro de un bucle y los ficheros existen y están en esa ruta.
Voy a usar un rodeo con load_fpg+map_clone para seguir programando, pero si esto es así ¿qué pasará cuando tenga que leer un número indeterminado de ficheros mediante un bucle similar?
Title: Re:Getting started
Post by: AmakaSt on March 10, 2017, 01:24:12 PM
Hola Drumpi,

En principio las rutas dentro de las funciones de carga deben de ser claras, porque sino no te empaquetaría los recursos en el proyecto correctamente. Es el compilador el que analiza las rutas de las funciones de carga y lo prepara para el proyecto, lo mismo para generar los archivo fpg.dat al hacer uso de load_fpg().
Puede que añada para la próxima versión algo para ignorar la comprobación de las rutas en las funciones de carga.

Que sea la carga dinámica puede generarte errores de carga en javascript, si no existe una imagen, bloqueando el script.

Un saludo.
Title: Re:Getting started
Post by: Drumpi on March 11, 2017, 08:36:49 PM
Pero para eso existen las funciones de "file_exists"... o debería ^^U
¿Entonces cómo haces para reconocer y cargar los ficheros de una carpeta? También podría renombrarlos todos como 01.png, 02.png... y usar load_fpg, pero no me parece una buena práctica (y más adelante se va a sustituir por load_external_data... si es esa la función que sustituye a fopen).

Por cierto, tampoco existe un map_clone. Si quieres hacer un map_put, tienes que crear un nuevo mapa e ir pixel por pixel leyendo en uno y pintando en otro ^^U
Paletas entiendo que no hay, que para cambiar un color concreto tengo que ir pixel a pixel ¿no?
Title: Re:Getting started
Post by: AmakaSt on March 11, 2017, 09:21:08 PM
En Javascript no existe la función file_exists() como en PHP, por eso la comprobación se hace al compilar y por esto mismo existe los archivos fpg.dat con las rutas donde localizar los gráficos. Al principio probé en hacer cargas usando en caso de error, por si no existe el archivo, try...catch de Javascript, pero las cargas son interminables al tener que recorrer 999 gráficos en una carpeta y esta cuenta con, por ejemplo, 20 gráficos. La funciona load_external_data() no es exactamente igual a fopen(), esto es el objeto XMLHttpRequest() de Javascript transformado en una función, sirve para obtener la información de una url, por lo que puedes recibir información de variables desde el servidor mediante un GET con PHP.

En Div2 no he encontrado map_clone, es una función de BennuGD. Cree unas funciones para la manipulación de gráficos: graphic_explorer() y graphic_builder(). Y también hice una función para cambiar el color del grafico: color_in_map(), con esta no necesitas ir pixel a pixel.

Un saludo.

Title: Re:Getting started
Post by: Drumpi on March 14, 2017, 08:12:11 PM
Me interesa eso de load_external_data(). Ahora que sé lo básico de PHP, puedo crear una página que sirva de enlace entre el programa en DivGo y el contenido en las carpetas de mi web.
Lo que no veo son ejemplos de uso, así que no sé cómo se usa. Veo que tiene un parámetro de entrada, que es una string, que no sé si será la url del PHP o la info de un XML, o cómo pasar la información que quiero que me busque al PHP

...¿Y luego cómo obtengo esos datos? ¿Vienen todos en una string en crudo?, ¿vienen en formato XML?

Voy a mirar lo del graphic_builder y el graphic_explorer, porque no hay info de ninguna de las dos y a primera vista no entiendo lo que hacen ^^U
La de color_in_map sí la he visto, pero eso cambia todo el color del gráfico, y yo lo que necesito es cambiar todos los pixels de un color concreto. Mis imágenes van a tener 4 colores: transparente, negro, color1 y color2, y quiero que el usuario pueda modificar estos dos últimos a su gusto. Similar al sistema de selección de camisetas en el juego de demostración de fútbol en modo7 que venía en DIV2.
Title: Re:Getting started
Post by: AmakaSt on March 15, 2017, 12:33:39 PM
Hay un ejemplo en la carpeta de ejemplos, pero veo que esta anticuado (de versiones antiguas) y no queda muy claro.

Empecemos con la recogida de datos con load_external_data("ruta/mi_arhivo.php", &mi_variable); //esto recoge datos del archivo php pero con formato JSON y lo introduciría en el juego en la variable 'mi_variable'

Aquí un ejemplo de php haciendo una consulta a la BBDD (para un struct):

    $mysqli = new mysqli('localhost', $usuario, $password, $bbdd);
       
    $consultar = $mysqli -> query("SELECT nombre, puntos FROM mitabla ORDER BY puntos DESC LIMIT 10"); //en caso de querer mostrar los 10 ultimos records
   
    $variables = array();
    while($datos = $consultar -> fetch_array(MYSQLI_ASSOC)){
        $variables[] = array('nombre' => $datos['nombre'],  'puntos' => $datos['puntos']);
    }
       
    echo json_encode($variables); //esto lo recogera DivGO


Aquí otro ejemplo de php sencillo (para una variable sencilla):

    $variable = "Probando Div GO";

    echo json_encode($variable); //esto lo recogera DivGO


Y ahora ejemplo de guardar datos con save_external_data("ruta/mi_arhivo.php", &mi_variable); //esto enviara el valor de la varible por GET con una variable especial que se podra comprobar su existencia para guardar o cargar datos

Aquí un ejemplo de php haciendo la recogida de datos:

    if (isset($_GET['DivGOvar'])){ //DivGOvar es la variable que se envia desde DivGO con los valores de las variables en formato JSON
        $variables = $_GET['DivGOvar'];
        $variables = json_decode($variables, true);

        $nombre = $variables['nombre'];
        $puntos  = $variables['puntos'];

        //aquí añades la inserción de datos a la bbdd
    }


No es difícil si sabes PHP, pero para el que no lo ha tocado nunca tampoco le será fácil.
Yo estoy intentando lo más difícil, estoy combinando DivGO, PHP y la API Graph de Facebook para guardar los datos del usuario, sus avances y puntuaciones del juego, ver los records de amigos... haciendo uso del registro de Facebook.

http://www.divgo.net/proyectos/gamma-z/
Si tienes cuenta de Facebook y quieres ver que tal funciona esta combinación, dímelo. Necesita de invitación para el testeo. :)

Un saludo.
Title: Re:Getting started
Post by: AmakaSt on March 15, 2017, 12:52:42 PM
Me olvidaba, aquí ejemplos de graphic_builder y graphic_explorer:
http://www.divgo.net/c-c5c16287 (este esta disponible en la lista de funciones)
http://www.divgo.net/c-4f2f4beb

Un saludo.
Title: Re:Getting started
Post by: Drumpi on March 22, 2017, 07:31:07 PM
Vale, vamos por partes.
Quizás pueda usar un fichero PHP para obtener la construcción de un nombre de fichero, saber si existe dicho fichero (lo que decía de usar un bucle tipo "fichero"+cont+".png") y devolver su contenido.
Después, gracias por el ejemplo de PHP, aun estoy verde con el tema y toda la ayuda se agradece :)
Pero la parte interesante es saber cómo recoge los datos DivGo. Entiendo que usa una estructura, pero tengo un problema: los ficheros no tienen una longitud fija ¿cómo almaceno los datos de los pixels, por ejemplo, de un map? ¿Capturo esos datos en una string? ¿no dará problemas si detecta un color 13 o 10, que en ASCII son el final de linea, y por tanto, deje de leer la "string"?

Y sobre todo ¿cómo interactúa DivGo con los ficheros JSON? Acabo de conocerlos y no sé si tengo que interpretar yo mismo el fichero, o DivGo hace la conversión, o tiene una API para buscar pares "clave/valor" o navegar por el árbol de datos :S

Lo de Graphic_builder y graphic_explorer necesito tiempo para explorarlo ^^U
Title: Re:Getting started
Post by: AmakaSt on March 23, 2017, 07:28:27 PM
Quote
Y sobre todo ¿cómo interactúa DivGo con los ficheros JSON? Acabo de conocerlos y no sé si tengo que interpretar yo mismo el fichero, o DivGo hace la conversión, o tiene una API para buscar pares "clave/valor" o navegar por el árbol de datos :S

Div GO hace la conversión automáticamente, cualquier variable que guardes o cargues se parsea a JSON, por ejemplo:

STRUCT datos;
    nombre = "Mi nombre";
    puntos = 1000;
    nivel = 0;
END


Equivale a:

var datos = {
    'nombre': 'Mi nombre',
    'puntos': 1000,
    'nivel': 0
}
Title: Re:Getting started
Post by: Drumpi on March 27, 2017, 12:16:31 AM
Entiendo entonces que si guardo todo el contenido de un fichero en una variable VARCHAR o su equivalente con más capacidad en la BD, la leo con mi fichero PHP, y se la mando a DivGo como una string, luego podré leer el contenido, independientemente del tamaño, byte a byte ¿correcto?
Title: Re:Getting started
Post by: AmakaSt on March 28, 2017, 11:30:44 AM
Quote from: Drumpi on March 27, 2017, 12:16:31 AM
Entiendo entonces que si guardo todo el contenido de un fichero en una variable VARCHAR o su equivalente con más capacidad en la BD, la leo con mi fichero PHP, y se la mando a DivGo como una string, luego podré leer el contenido, independientemente del tamaño, byte a byte ¿correcto?

Si, dependiendo la cantidad de datos que quieras guardar un VARCHAR será limitado, mejor un campo TEXT. Aunque lo mejor es que el JSON lo descompongas en un array en PHP y guardes la información en distintos campos de la tabla en la BBDD, así podrás filtrar las consultas más rápidamente. El tamaño byte a byte no se requiere.

Otra cosa, que a veces marea bastante, si lo guardas todo en string (VARCHAR, TEXT) al recuperarlo seguirá siendo tipo string en el juego. Imagina que tu variable donde recuperas la información es 'mi_variable' y has cogido el valor '20' pero es un string si en el juego haces: mi_variable += 15; //mi_variable no será 35, sino 2015. Desde PHP tienes que pasar los valores con intval().
Title: Re:Getting started
Post by: Drumpi on March 28, 2017, 11:31:19 PM
Ya, ya tengo eso en cuenta ;)
La cosa es que no tengo funciones para buscar ficheros, cargar ficheros construyendo una string internamente, ni la posibilidad de abrirlos y leerlos, así que esta es la mejor manera que se me ha ocurrido, porque como digo, los ficheros tienen un tamaño variable, y el único tipo de variable dentro de los divlike que no es de tamaño fijo es una string, así que es la mejor forma de secuenciar los valores de un gráfico de tamaño indeterminado y de formato propio.

Ya sólo tengo que averiguar cómo introducir el contenido del fichero en la base de datos, y construir el JSON... pero con tiempo, porque tengo demasiados frentes abiertos ahora mismo :S