Abro este hilo para ir comentando los avances importantes que vayan surgiendo...
Al 16/04/2008
Ya existe una version reducida del core... solo instrucciones basicas de la maquina virtual, sin ninguna dependencia a video, sonido, teclado, etc... solo procesos, jerarquias, prioridades, y esas cosas...
Aparicion de la primera version Linux.
Aparicion nuevamente de la consola de la aplicacion, adios stdout.txt y stderr.txt.
Core (compilador e interprete) sin ninguna dependencia a SDL.
Modulos que no usan SDL, ya no dependen de esta.
Interprete de alrededor de 40k (menos) tanto en linux como en windows. Libreria de runtime de 199k, modulos un promedio de 8k, algunos menos (5k) y otros mas (37k)
De momento no hay modulos de todo aquello que tenga que ver con video y formatos graficos, estoy trabajando en eso.
Bien esas son las novedades que queria compartir del dia de hoy.
Que gran noticia.
¿Para cuando soltarás una versión de pruebas del nuevo sistema?, me pica la curiosidad usar bennugd sin soporte gráfico ni de sonido ni de teclado. Solo se podrán hacer aplicaciones del tipo hola mundo ¿No?;D.
Saludos.
Quote from: dcelso on April 18, 2008, 07:30:25 AM
Que gran noticia.
¿Para cuando soltarás una versión de pruebas del nuevo sistema?, me pica la curiosidad usar bennugd sin soporte gráfico ni de sonido ni de teclado. Solo se podrán hacer aplicaciones del tipo hola mundo ¿No?;D.
Saludos.
Yo creo que ni eso, a no ser que se hayan creado para la ocasión nuevas funciones (o quizas ya existian?) para tirar texto por la consola. Ánimo Splinter ^^
Existian esas funciones... ahora mismo las quite... de momento... con la version que funcional tengo se puede hacer todo lo que no impleque un mapa ni salida a pantalla... pero bueno, hacer una dll que implemente el SAY son 2 minutos...
Ya el core esta limpio como para liberarlo... pero se que me faltan algunas cosas, por ejemplo:
- Tema de byteorder en el dcb... hacerlo de una vez por todas 100% compatible entre plataformas...
- Dependencias de modulos... esto es, si un modulo depende de otro modulo o libreria, que esta sea importada automaticamente y sin necesidad de tener que incluirla en un import (codigo o archivo)
- Warning al declarar desde un modulo constantes o variables ya existentes... siempre y cuando el valor o prototipo de la misma coincidan... o quizas la posibilidad de poder declarar si no existe...
- Ver posibilidad de no requerir el -Ca para poder compilar con funciones no declaradas, pero que el -Ca pase a ser algo asi como -pendantic del C...
Y algunas otras cosas mas que ahora mismo no recuerdo, pero las tengo anotadas por ahi... y primero quiero tener los modulos que ya existian listos, para que no me quede nada del core faltante a la hora de implementar algun modulo.
Tambien estoy pensando quitar el soporte de mapas animados... la verdad que no me parece muy practico, los mapas estandard deberian ser algo basico.... y no es demasiado complejo animar un mapa por codigo... creo que no vale la pena... igual actualmente no se estan usando porque no estan terminados, y si bien trabaje bastante en eso no me preocupa mucho tirar ese trabajo...
Me parece bien quitar el soporte que comentas de mapas animados, si alguien los usaba es facil readaptarlos en código.
Pero podría dejarnos ya una versioncilla del core del bennugd tal y como está aunque no sirva ni para hacer hola mundos :D.
Asi podríamos incluso buscar fallos al núcleo.
Saludos.
Quote from: SplinterGU on April 21, 2008, 10:25:33 PM
Tambien estoy pensando quitar el soporte de mapas animados... la verdad que no me parece muy practico, los mapas estandard deberian ser algo basico.... y no es demasiado complejo animar un mapa por codigo... creo que no vale la pena... igual actualmente no se estan usando porque no estan terminados, y si bien trabaje bastante en eso no me preocupa mucho tirar ese trabajo...
Tienes razon, no es dificil animar un mapa por codigo incluso creo que es mas personalizable por codigo (quizas me equivoco no se). Pero si te ha llevado mucho trabajo ponerlo al dia, compensa tirarlo a la basura?
Realmente no se como empezo el tema de meter animaciones en un fgc, supongo seria hacer mas comodo a un novato hacer un loop de animacion?? yo en mi proyecto no tengo animaciones por fgc, lo tengo todo por codigo.
PD: Gracias por todo SplinterGU y tiene un pinta estupenda.
Hombre tanto los fgc como los fbm tienen la estructura para meter animaciones desde el principio. Es en los map/fpg donde si que no tiene ningun sentio extender eso.
Yo las animaciones predefinidas en fichero no lo veo mal, aunque siempre he dicho que el sistema que esta ahora no me parece el mejor.
dcelso: Pronto pondre una preview del core reducido... a modo demo, no final... quizas hoy al fin del dia...
TYCO: No importa tirar cosas a la basura (aunque guarda backup por si en el futuro parte del codigo me sirve para alguna libreria) si es para clarificar y ordenar un poco mas las cosas.
GINO: Si, esos formatos graficos siempre estuvieron preparados para animaciones, pero nunca estuvieron funcionales, hasta la 0.93preview9 que esta a un 98% funcional... pero lamentablemente, todos los datos asociados a esto estan metidos internamente en las mismas estructuras que estan los datos de los MAPS... a nivel interno no existen los conceptos de fgc, fbm, fpl... todo se termina traduciendo a los clasicos fpg, map, pal... y las animaciones creo que son un desproposito... y a esta altura no tiene sentido hacer un reanalisis de todo el sistema de animaciones, cuando es demasiado facil escribirlo por codigo... seria algo diferente si nuestro bennu seria un browser o una aplicacion que no permite codificar, en ese caso, un grafico al estilo gif animado seria espectacular, pero aca es otra historia...
Nuevos avances:
- Se quitaron los formatos fgc, fbm y fpl... se volveran a introducir soporte completo a los formatos fpg, map y pal...
- Se divide lo que es fpg, map y map... en 3 partes: libreria base (creacion/borrado/navegacion), librerias de carga de ficheros, libreria de funciones de manipulacion...
- Se quita de las librerias base toda dependencia a SDL. (Al hacer esto, tambien se esta ganando velocidad, ya que se usaban estructuras de datos SDL y para usarlas nunca se usaban en formato SDL, y habia que hacer conversiones para luego usarlas... por ejemplo, datos rgb de las paletas)
- Se empieza a dar soporte a 32bits... (por ahora no render)
jejeje entonces habra unos nuevos formatos con cabecera f32 y m32 no?
Posiblemente... todavia no llegue a esa parte...
Tengo pensado de dar soporte a algun tipo de archivo empaquetado, quizas un zip standard o algo similar... donde podamos meter todos los archivos que querramos facilmente... quizas usar .zip como si fueses .fpg y que el nombre de cada uno de los archivos (numerico) sea el id del grafico (podrian ser 001.bmp, 002.png, etc)... seria muy simple manipularlos, incluso se podrian guardar con password... pero bueno, de cualquier forma esto seria un modulo...
Quote from: SplinterGU on April 22, 2008, 12:27:16 PM
- Se quitaron los formatos fgc, fbm y fpl... se volveran a introducir soporte completo a los formatos fpg, map y pal...
Entonces nada de load/save de fgc, fbm ni fpl; y solo queda load/save fpg, map y pal?? Si es asi en Bennu me das una alegria porque como bien dices en memoria se trataban por igual, y mejor no tener funciones repetidas que hacian practicamente lo mismo (ahora que se quitan las animaciones de graficos).
Quote from: SplinterGU on April 22, 2008, 12:27:16 PM
- Se quita de las librerias base toda dependencia a SDL. (Al hacer esto, tambien se esta ganando velocidad, ya que se usaban estructuras de datos SDL y para usarlas nunca se usaban en formato SDL, y habia que hacer conversiones para luego usarlas... por ejemplo, datos rgb de las paletas)
Significa esto que para hacer un juego mas o menos con graficos y sonidos y tal habra que inicializar la SDL o algo parecido, con alguna instruccion no como la "mod_sdlevthandler (install SDL event handler)"???
Quote from: SplinterGU on April 22, 2008, 12:27:16 PM
- Se empieza a dar soporte a 32bits... (por ahora no render)
Eres un maestro y no tienes limites.
Con respecto a las dependencias SDL es solo librerias de nivel mas basico, las de alto nivel por ahora si tienen dependencias SDL, y a nivel programador Bennu no hay que hacer nada...
Como se nota que ya no hay presiones por el tema de fpg y map.
Y el uso de estos ¿serán los de siempre o hay modificaciones en el formato?
Por cierto, pensé que no ibas a meter 32bits en los mapas, es bueno saber que se está haciendo (sobre todo porque, si se está escribiendo el código de cero, ya es trabajo que te ahorras si finalmente decides incluirlo oficialmente), pero no te agotes mucho con ello ^^
Por cierto, respecto a las animaciones... si el gráfico ya está animado de por sí, no es por ahorrar código al programador, pero creo que siempre irá más rápido si se anima internamente que por el propio código... aunque claro, dadas las máquinas de hoy, eso ni se nota ^^U
Sinceramente, no me importa si hay presiones o no de los fpg o map... en todo caso es un modulo, asi que de ultima se quita y ya... pero primero me tienen que encontrar... :P
Por ahora seran los de siempre... no se si para los 32bits tendre que modificar algo del formato... por ahora no estoy metido con eso... voy paso a paso...
Tenerlo interno o no, no mejora absolutamente nada... ya que no se hacen animaciones de 1000 frames por segundo... asi que no afecta en lo mas minimo...
Aca les dejo lo prometido...
No hay ningun modulo de salida a video... ni siquiera a consola... pero si compilan con -g (informacion de debug) y luego ejecutan con -d podran ver en consola el trace (mejorado con respecto a Fenix) de lo que se va ejecutando...
Tambien se corrigen muchos errores tanto de Fenix como algunos de la ultima Bennu preview...
ATENCION: Esto es experimental, no tomarlo para hacer proyectos ya que tiene un set reducido de instrucciones, todo lo que tiene que ver con graficos no se incluye... asi sea usar un mapa para poner el iconito a la ventana de ejecucion...
Se requiere la instalacion de librerias SDL, SDL_Mixer, etc... leer el readme.txt
Tambien dejo unos ejemplos...
Otra cuestion, en linux agregar en la consola donde corren el bgdi la variable de enviroment LD_LIBRARY_PATH con el valor del directorio donde se encuentran las librerias .so, por ejemplo:
export LD_LIBRARY_PATH=/opt/bennu/modules
link http://betatester.bennugd.org/20082304/
Gracias, pero no veo el enlace con la descarga.
Puede que esté un poco ciego o que se te haya olvidado.
¿Lo puedes resaltar o poner?
Otra cosa, si no hay dependencia de SDL ¿porqué son necesarias las librerías?
Y por último, ¿lleva soporte para usar extensiónes? Lo digo por intentar hacer una librería que imprima en la stdout y stderr y tal.
Saludos.
Perdon, me olvide... aca esta...
http://betatester.bennugd.org/20082304/
Aclarare un poco mas... dije...
Quote from: SplinterGU on April 17, 2008, 03:00:51 AM
Core (compilador e interprete) sin ninguna dependencia a SDL.
Modulos que no usan SDL, ya no dependen de esta.
Core sin dependencia...
Modulos que NO usan SDL, sin dependencia de la SDL... (modulos que si usan alguna funcion SDL, si tienen dependencia de esta)
Quote from: SplinterGU on April 22, 2008, 12:27:16 PM
- Se quita de las librerias base toda dependencia a SDL. (Al hacer esto, tambien se esta ganando velocidad, ya que se usaban estructuras de datos SDL y para usarlas nunca se usaban en formato SDL, y habia que hacer conversiones para luego usarlas... por ejemplo, datos rgb de las paletas)
Librerias "base", o sea "basicas", o sea, "bajo nivel"... los modulos no son "base", no son "basicos", no son "bajo nivel"...
Quote from: dcelso on April 24, 2008, 07:45:53 AM
Gracias, pero no veo el enlace con la descarga.
Puede que esté un poco ciego o que se te haya olvidado.
¿Lo puedes resaltar o poner?
Otra cosa, si no hay dependencia de SDL ¿porqué son necesarias las librerías?
Y por último, ¿lleva soporte para usar extensiónes? Lo digo por intentar hacer una librería que imprima en la stdout y stderr y tal.
Saludos.
Si, puedes hacer extensiones simplemente, salvo que ahora la libreria que era "bgdi.dll" es "bgdrtm.dll", y solo trae funciones basicas que si te bajas el "Dependency Walker" (un exe chiquito) podes ver que funciones exporta la "bgdrtm.dll" (o cualquier otra dll, modulo o ejecutable), incluso podes ver que dependencias externas (librerias dinamicas requiere).
Quote from: SplinterGU on April 24, 2008, 01:22:00 PM
Si, puedes hacer extensiones simplemente, salvo que ahora la libreria que era "bgdi.dll" es "bgdrtm.dll", y solo trae funciones basicas...
Entonces el CORE de Bennu va a depender al menos de una libreria para su ejecucion no??? la "bgdrtm.dll", o la tienes pensado quitar esa dependencia??
Otra cosa, me ha extrañado que http://bennugd.sourceforge.net/ no se use para colgar las veriones betatester, se va a usar solo para releases??
Esa no se quitara, esa sera la dependencia del core y la mas basica para todos los modulos... (no quiere decir que todos los modulos la vayan a usar, pero casi todos... si interactuan con procesos o usan strings... entonces deben usarla)
El sourceforge voy a actualizarlo cuando tenga el primer release, despues de ahi en adelante todo se hara ahi...
Alguien probo la version linux? Si alguien lo hizo, seria bueno saber en que version lo probaron y que resultados dio...
Yo he probado el ejemplo arrays.prg y se queda "colgado" el otro perfecto 4 calculadoras a la vez y 4 bloc de notas uno detras de otro.
hago "bgdc.exe -Ca arrays.prg" y todo bien con el resumen de siempre.
hago "bgdi.exe arrays.dcb" y se queda sin hacer nada como esperando algo y no funciona la tecla ESC, lo cierro con Crontrol+C, que esta pasando?
Las librerias uso las que has dicho:
SDL_mixer v1.2.7.0
SDL v1.2.13.0
No, no se queda colgado... es que no ves nada lo que hace... por eso hay que correrlo en modo debug y ver en consola que hace...
El modulo de teclado no funciona sin el modulo de video, ya que para el teclado se usa la SDL y SDL instala los handlers de teclado cuando tiene el modulo de video.
Hace lo siguiente:
bgdc -Ca -g arrays.prg
bgdi -d arrays
Veo que lo probaste en windows... gracias por las pruebas...
No consigo compilar en Ubuntu
He verificado si tenía la version correcta de SDL
He cambiado los archivos imp de los samples para quitar el directorio modules.
He añadido al path el directorio de bennu, de camino también lo he metido en ld_libary_path por si la moscas.
He compilado y nada da error.
Siempre intenta buscar el .so en el directorio actual, pero bueno tambien he probado a poner todos los .so ahí y sigue igual.
Saludos.
ubuntu@ubuntu-desktop:~/bennugd/samples$ bgdc arrays.prg
BGDC 0.93 (Apr 26 2008 21:34:48)
Copyright � 2006-2007 SplinterGU
Copyright � 2002-2006 Fenix Team
Copyright � 1999-2002 Jos� Luis Cebri�n Pag
Fenix comes with ABSOLUTELY NO WARRANTY; see COPYING for details
Error in file arrays.imp at line 0: Library .\libsdlhandler.so not found (EOF)
ubuntu@ubuntu-desktop:~/bennugd/samples$ ls
arrays.imp libkey.so mod_joy.so mod_rand.so mod_sys.so
arrays.prg libsdlhandler.so mod_key.so mod_regex.so mod_timers.so
exec.imp mod_cd.so mod_math.so mod_sort.so mod_time.so
exec.prg mod_dir.so mod_mem.so mod_sound.so
libbgdrtm.so mod_file.so mod_proc.so mod_string.so
ubuntu@ubuntu-desktop:~/bennugd/samples$
EDIT: es cierto... ahora lo estoy corrigiendo... gracias...
EDIT2:
Corregido, en el mismo link de la WIP3, pueden bajar el nuevo paquete, ahora los samples estan en el mismo paquete.
En el caso de linux agregue 2 scripts 1 llamado "compile" y otro llamado "run", que obviamente sirven para compilar y ejecutar... ambos setean las variables de enviroment necesarias... los modulos en linux se encuentran en la carpeta modules.
En el caso de windows se podrian poner tambien en una carpeta modules, pero hay que agregar la carpeta a la variable de enviroment PATH.
Tambien modifique la mod_sys para que no sea necesario ponerle el path del archivo, ahora lo busca en el path... tanto en linux como windows...
Tambien se probo ejecutar un dcb compilado en windows en linux, y a la inversa...
- Se corrigen finalmente la precedencia de los operadores like C... (http://www.cppreference.com/operator_precedence.html)
- Se corrigen errores de compilacion en cosas como "a = 1<<2+3;"
- Se da soporte al sizeof de resolucion de size de elementos de un puntero, por ejemplo:
char ** p;
sizeof(p) = 4
sizeof(*p) = 4
sizeof(**p) = 1
PD: dcelso, no comentaste como te fueron las pruebas...
nuevos avances que bien
Aún no he podido, pero ya dices que probaste que iba en linux ¿No?
En cuanto pueda lo pruebo en mi Ubuntu y edito este post.
Editado: Ya he probado bennu en Ubuntu y van bien los dos ejemplos con los siguiente comandos:
añades en el path la ruta de bennugd y luego desde el directorio donde está el prg
compile -g -Ca arrays.prg
run -d arrays.dbc
Si no pones el comando -g o pones el comando -d al "compile" cuando ejecutas "run" se queda colgado el ejemplo.
Quote from: dcelso on April 28, 2008, 07:57:02 AM
Aún no he podido, pero ya dices que probaste que iba en linux ¿No?
En cuanto pueda lo pruebo en mi Ubuntu y edito este post.
Editado: Ya he probado bennu en Ubuntu y van bien los dos ejemplos con los siguiente comandos:
añades en el path la ruta de bennugd y luego desde el directorio donde está el prg
compile -g -Ca arrays.prg
run -d arrays.dbc
Si no pones el comando -g o pones el comando -d al "compile" cuando ejecutas "run" se queda colgado el ejemplo.
No necesitas añadir el path, puedes ejecutar asi:
./compile -g -Ca arrays.prg
./run -d arrays
Me parece que esto ya te lo respondi, pero bueno, puede ser algun dejavu... te respondo:
No es que se queda colgado, esta trabajando, solo que al no tener ningun I/O no ves nada... pero esta corriendo y a los pedos (rapidisimo)...
EDIT: Gracias por probarlo.
Acabo de subir una nueva WIP4... corrigiendo completamente (eso creo) la precendencia de los operadores... pediria que por favor me ayuden a depurarlo...
En el paquete agregue, un programa de ejemplo llamado "precedencias.prg" con algunos test de precedencia, pero necesitaria probar todas las combinaciones posibles... o hasta donde se pueda... fui probando contra lo mismo en C... hasta obtener los mismos resultados...
Tambien inclui un directori DOC, con un html (basado en el del link que puse unos posts atras, pero corregido en base a Bennu) con la referencia de el orden de precendencia de los operadores.
Realmente en Fenix todo el tema de la precedencia de operadores estaba funcionando mal, y es por eso que a veces nos encontramos con errores ilogicos en nuestros codigos... ahora se supone que ya se acabaran... pero necesito que me ayuden a depurarlo...
Aca les dejo el link (solo compile windows, si alguien en verdad quiere ayudar y solo tiene linux, le genero una version, pero por favor no me lo pidan solo querer una version linux que ni siquieran van a probar...)
http://betatester.bennugd.org/20080429/
Desde ya, muchas gracias.
EDIT: dcelso, no olvides ver la respuesta que te puse http://forum.bennugd.org/index.php?topic=102.msg907#msg907
Ah, es verdad, vi que respondiste a ello en este mismo "topic" a TYCO.
Creía que en mi caso podría ser otra cosa.
Voy a intentar probar las precedencias. Ya te comentaré si encuentro alguna mal. De todas formas usando paréntesis para obligar un orden irá bien, digo yo :D.
Por cierto he intentado compilar un dll con una función que hace un simple fprinft(stdout,"%s", cadena) y resulta que no consigo que me lo reconozca como un dll válido ni para fenix ni para bennugd.
Sigo los pasos de los tutoriales de hacer dlls para fenix pero nada, creo que algo configuro mal en el IDE codeblocks.
A ver si alguien sabe que pasos hay que seguir en este IDE. O, simplemente, SplinterGU ¿que comandos pongo para compilar y enlazar el .c usando GCC?
Gracias de antemano.
Busca en este foro dllkit... o algo asi... no hay muchos temas en el foro, asi que no te va a costar mucho navegar y encontrar el tema...
Si he entendido bien, hay que probar los distintos OPERADORES, y comprobar que cada uno de ellos se va ejecutando segun la tabla de precedencia no?? aunque estos OPERADORES este casi al final de la instruccion, es asi???
no entendi
"aunque estos OPERADORES este casi al final de la instruccion, es asi???"
Pero si, hay que probar...
Queria decir que al haber OPERADADORES que tienen mas PRECEDENCIA que otros en un IF (15+3*5 == 30), el "*" esta casi al final de la instruccion, aun asi se ejecutaria antes que el "+", cierto?
Y a todo esto el resultado de:
15+3*5 deberia ser 30 y no 90. No es un buen ejemplo pero es sencillo de entender.
No, ahi el + no es un operador de signo, sino un operador de adicion... o sea, que de nivel 4, y la multiplicacion de nivel 3... o sea, que la multiplicacion se ejecuta primero...
A mi me da 30, tanto en el viejo como en el nuevo Bennu.
Sasto, aplicando las matemáticas escritas de toda la vida también da ese resultado :D.
Creo que quiere decir que ti te referias tu a que había probar ese tipo de preferencias.
Asi que la respuesta debería ser sí, hay que hacer operaciones más complejas y ver si se aplica correctamente el orden viendo como lo hacer C o simplemente viendo tu documento adjunto.
Si, probarlo, yo ya encontre errores del sizeof([puntero].elemento) o &((cast *)0).elemento o sizeof(((cast *)0).elemento), estoy corrigiendo esas cosas... y probando tambien varias.
que paso con la mod_draw y faltan otras?
es que intento compilar el test que viene con el fenix ,
note que no tiene dependencias a otras dlls solo requiere la runtime estilo NET o VB
esta genial ,
Quote from: l1nk3rn3l on May 01, 2008, 08:15:14 PM
que paso con la mod_draw y faltan otras?
es que intento compilar el test que viene con el fenix ,
note que no tiene dependencias a otras dlls solo requiere la runtime estilo NET o VB
esta genial ,
http://forum.bennugd.org/index.php?topic=102.msg867#msg867
Correcciones importantisimas en el core, bugs transmitidos desde Fenix, se detallan a continuacion:
- Se corrige y se completa el soporte de casteo, direccionamiento(&) y sizeof. (al final adjunto ejemplo y resultados)
- Se corrige precedencia de operadores.
- Se corrige tamaño de arrays asignados en la declaracion.
1) El error consistia en 2, si el tamaño era especificado pero se le incluian valores, el tamaño del array era modificado con respecto a la cantidad de valores que se ingresaban. Tambien el calculo de dichos valores era incorrecto, con lo que el tamaño para esa area de memoria era menor que el necesario.
2) Cuando no se especificaba dimension, el tamaño era calculado erroneamente (mismo caso que el punto 1)
- Se mejora y acelera el switcheo y ejecucion de procesos. Ahora cada proceso tiene su propio stack, no hay un stack global. Ahora todo deberia ir mucho mas rapido, con muchos procesos deberia notarse la mejora.
[code language="bennu"]
global
a;
f;
i;
array[10]=10,9,8,7,6,5,4,3,2,1,0;
char carray[10]=10,9,8,7,6,5,4,3,2,1,0;
char * pcarray;
char ** ppcarray;
pointer p;
v = 7;
float d;
begin
say("-----------");
for (i=0;i<=10;i++)
say("array["+i+"]="+array[ i ]);
end
say("-----------");
p = &array[2];
for (i=0;i<=5;i++)
say("p["+i+"]="+p[ i ]);
end
say("-----------");
p = &array[2];
for (i=0;i<=5;i++)
say("p["+i+"]="+ *++p);
end
say("-----------");
p = &array[0];
say("p[0]="+ *p);
say("-----------");
say("sizeof(carray)="+ sizeof(carray));
say("sizeof(carray[0])="+ sizeof(carray[0]));
say("sizeof(*pcarray)="+ sizeof(*pcarray));
say("sizeof(pcarray[0])="+ sizeof(pcarray[0]));
say("sizeof(ppcarray)="+ sizeof(ppcarray));
say("sizeof(*ppcarray)="+ sizeof(*ppcarray));
say("sizeof(**ppcarray)="+ sizeof(**ppcarray));
say("sizeof(*p)="+ sizeof(*p));
say("sizeof(p[0])="+ sizeof(p[0]));
say("sizeof(p)="+ sizeof(p));
say("sizeof(array)="+ sizeof(array));
say("sizeof(array[0])="+ sizeof(array[0]));
say("-----------");
say("1 && 2 & 1 = "+(1 && 2 & 1));
say("(1 && 2) & 1 = "+((1 && 2) & 1));
say("1 & 2 && 1 = "+(1 & 2 && 1));
say("1 & (2 && 1) = "+(1 & (2 && 1)));
say("-----------");
say("1 || 2 && 0 = "+(1 || 2 && 0));
say("1 || (2 && 0) = "+(1 || (2 && 0)));
say("(1 || 2) && 0 = "+((1 || 2) && 0));
say("-----------");
say("0 && 1 || 2 = "+(0 && 1 || 2));
say("0 && (1 || 2) = "+(0 && (1 || 2)));
say("(0 && 1) || 2 = "+((0 && 1) || 2));
say("-----------");
say("1 ^ 2 & 3 ^ 5 = "+(1 ^ 2 & 3 ^ 5));
say("1 ^ (2 & 3) ^ 5 = "+(1 ^ (2 & 3) ^ 5));
say("(1 ^ 2) & (3 ^ 5) = "+((1 ^ 2) & (3 ^ 5)));
say("-----------");
say("1 == 3 == 3 = "+(1 == 3 == 3));
say("(1 == 3) == 3 = "+((1 == 3) == 3));
say("1 == (3 == 3) = "+(1 == (3 == 3)));
say("1 == 2 > 1 == 3 = "+(1 == 2 > 1 == 3));
say("1 == (2 > 1) == 3 = "+(1 == (2 > 1) == 3));
say("1 == 2 > 1 == 1 = "+(1 == 2 > 1 == 1));
say("1 == (2 > 1) == 1 = "+(1 == (2 > 1) == 1));
say("1<<2+3 = "+(1<<2+3));
say("-----------");
say("15.0 / 3.0 / 2.0 = "+(15.0 / 3.0 / 2.0));
say("(15.0 / 3.0) / 2.0 = "+((15.0 / 3.0) / 2.0));
say("15.0 / (3.0 / 2.0) = "+(15.0 / (3.0 / 2.0)));
say("15+3*5=" + (15+3*5));
end
[/code]
Resultados
-----------
array[0]=10
array[1]=9
array[2]=8
array[3]=7
array[4]=6
array[5]=5
array[6]=4
array[7]=3
array[8]=2
array[9]=1
array[10]=0
-----------
p[0]=8
p[1]=7
p[2]=6
p[3]=5
p[4]=4
p[5]=3
-----------
p[0]=7
p[1]=6
p[2]=5
p[3]=4
p[4]=3
p[5]=2
-----------
p[0]=10
-----------
sizeof(carray)=11
sizeof(carray[0])=1
sizeof(*pcarray)=1
sizeof(pcarray[0])=1
sizeof(ppcarray)=4
sizeof(*ppcarray)=4
sizeof(**ppcarray)=1
sizeof(*p)=4
sizeof(p[0])=4
sizeof(p)=4
sizeof(array)=44
sizeof(array[0])=4
-----------
1 && 2 & 1 = 0
(1 && 2) & 1 = 1
1 & 2 && 1 = 0
1 & (2 && 1) = 1
-----------
1 || 2 && 0 = 1
1 || (2 && 0) = 1
(1 || 2) && 0 = 0
-----------
0 && 1 || 2 = 1
0 && (1 || 2) = 0
(0 && 1) || 2 = 1
-----------
1 ^ 2 & 3 ^ 5 = 6
1 ^ (2 & 3) ^ 5 = 6
(1 ^ 2) & (3 ^ 5) = 2
-----------
1 == 3 == 3 = 0
(1 == 3) == 3 = 0
1 == (3 == 3) = 1
1 == 2 > 1 == 3 = 0
1 == (2 > 1) == 3 = 0
1 == 2 > 1 == 1 = 1
1 == (2 > 1) == 1 = 1
1<<2+3 = 32
-----------
15.0 / 3.0 / 2.0 = 2.5
(15.0 / 3.0) / 2.0 = 2.5
15.0 / (3.0 / 2.0) = 10
15+3*5=30
[code language="bennu"]
program prueba;
type struct3 // 4 + 1 + 4 = 9
char *var0;
char var1;
float var2;
end;
type struct2 // 1 + 4 + 4 + 4 = 13
char status;
float flags;
struct3 * s3;
float * f;
end;
type struct1 // 4 + 2 + 4 + 4 + 13 = 27
string name;
short score;
struct2 * s;
struct2 ** s1;
struct2 s2;
end;
global
struct1 st[6] = "Jugador 1", 10, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 2", 5, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 3", 210, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 4", 3, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 5", 33, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 6", 12, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 7", 210, 0, 0, (0, 0.0, NULL, NULL);
struct1 st2[6][10];
struct1 st3[] = "Jugador 1", 10, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 2", 5, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 3", 210, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 4", 3, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 5", 33, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 6", 12, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 7", 210, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 8", 3, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 9", 33, 0, 0, (0, 0.0, NULL, NULL),
"Jugador 10", 12, 0, 0, (0, 0.0, NULL, NULL);
int array[15] = 1,2,3,4,5,6,7,8;
int array1[] = 1,2,3,4,5,6,7,8,9,10,11,12;
short array2[] = 1,2,3,4,5,6,7,8,9,10,11,12,13,14;
struct2 fill = ( 'A', 2.3, NULL, NULL);
char ** ch;
char carr[10][10];
string str[10][10];
string str1[10];
string str2;
string pstr;
i;
struct1 * pst = NULL; // Auxiliar
struct1 ** ppst = NULL;
struct1 *** pppst = NULL;
int total;
int o;
float f;
#define OFFS(s,m) &((s *)0.m)
process test()
public
n;
struct1 m;
begin
say("offset(struct2, flags)=" + OFFS(struct2,flags));
say("offset(struct1, s)=" + OFFS(struct1,s));
say("-----------");
say("sizeof(n)=" + sizeof(n));
say("sizeof(m.score)=" + sizeof(m.score));
quicksort(&st, sizeof(st[0]), total, OFFS(struct1,score), sizeof(pst.score), 0);
for (i = 0; i < total; i++)
say("st["+i+"].name="+st[ i ].name+" - score=" + st[ i ].score);
end
say("-----------");
say("&[pst].score=" + &[pst].score);
say("&pst.score=" + &pst.score);
say("&[ppst].score=" + &[ppst].score);
say("&[[ppst]].score=" + &[[ppst]].score);
say("&[[pppst]].score=" + &[[pppst]].score);
say("&(**pppst).score=" + &(**pppst).score);
say("&(struct1 *)pst.score=" + &(struct1 *)pst.score);
say("&(struct1 *)pst.s=" + &(struct1 *)pst.s);
say("offset=" + &((struct1 *)0).score);
say("sizeof(float)=" + sizeof(float));
say("sizeof(*pst)=" + sizeof(*pst));
say("sizeof(*pst.score)=" + sizeof((*pst).score));
say("sizeof(pst.score)=" + sizeof(pst.score));
say("sizeof(pst.s.status)=" + sizeof(pst.s.status));
say("sizeof([pst])=" + sizeof([pst]));
say("sizeof([ch])=" + sizeof([ch]));
say("sizeof([[ch]])=" + sizeof([[ch]]));
say("sizeof(*ch)=" + sizeof(*ch));
say("sizeof(**ch)=" + sizeof(**ch));
while(1)
frame;
end
end
local
test t;
begin
say("sizeof(dword) =" + sizeof(dword) );
say("sizeof(int) =" + sizeof(int) );
say("sizeof(string)=" + sizeof(string));
say("sizeof(float) =" + sizeof(float) );
say("sizeof(short) =" + sizeof(short) );
say("sizeof(word) =" + sizeof(word) );
say("sizeof(char) =" + sizeof(char) );
say("sizeof(byte) =" + sizeof(byte) );
say("sizeof(dword *) =" + sizeof(dword *) );
say("sizeof(int *) =" + sizeof(int *) );
say("sizeof(string *)=" + sizeof(string *));
say("sizeof(float *) =" + sizeof(float *) );
say("sizeof(short *) =" + sizeof(short *) );
say("sizeof(word *) =" + sizeof(word *) );
say("sizeof(char *) =" + sizeof(char *) );
say("sizeof(byte *) =" + sizeof(byte *) );
say("sizeof(pst.score)=" + sizeof(pst.score));
say("sizeof((pst).score)=" + sizeof((pst).score));
say("sizeof((*pst).score)=" + sizeof((*pst).score));
say("sizeof([*ppst].score)=" + sizeof([*ppst].score));
// say("sizeof([**ppst].score)=" + sizeof([**ppst].score)); // error - pointer required
// say("sizeof([*ppst.score])=" + sizeof([*ppst.score])); // error - pointer required
say("sizeof((*pst.s).s3)=" + sizeof((*pst.s).s3));
say("sizeof(*(*pst.s).s3)=" + sizeof(*(*pst.s).s3));
say("sizeof(pst.s)=" + sizeof(pst.s));
say("sizeof([pst].s)=" + sizeof([pst].s));
say("sizeof([[pst].s])=" + sizeof([[pst].s]));
say("sizeof([ppst].s)=" + sizeof([ppst].s));
say("sizeof([[[ppst]].s])=" + sizeof([[[ppst]].s]));
say("sizeof([[ppst]].)=" + sizeof([[ppst]].));
say("sizeof(pst.s)=" + sizeof([pst].s));
say("sizeof([pst].)=" + sizeof([pst].));
say("sizeof([[*ppst].s])=" + sizeof([[*ppst].s]));
say("sizeof([*ppst.s])=" + sizeof([[ppst]].));
say ("sizeof([pst].s)="+ sizeof([pst].s));
say ("sizeof(*[pst].s)="+ sizeof(*[pst].s));
say ("sizeof([[pst].s])="+ sizeof([[pst].s]));
say ("sizeof([pst].)="+ sizeof([pst].));
say("sizeof(pst[0])=" + sizeof(pst[0]));
say("sizeof(pst[0].score)=" + sizeof(pst[0].score));
say("sizeof(ppst)=" + sizeof(ppst));
say("sizeof(ppst[0])=" + sizeof(ppst[0]));
say("sizeof(*ppst)=" + sizeof(*ppst));
say("sizeof(**ppst)=" + sizeof(**ppst));
say("sizeof(*ppst[0])=" + sizeof(*ppst[0]));
// say("sizeof(ppst[0][0])=" + sizeof(ppst[0][0])); // error - exceded array access from pointer
// say("sizeof(***ppst)=" + sizeof(***ppst)); // error - exceded pointer reference
// say("sizeof(pst[0][0].score)=" + sizeof(pst[0][0].score)); // error - exceded array access from pointer
say("sizeof(ppst[0].score)=" + sizeof(ppst[0].score));
// say("sizeof(ppst.score)=" + sizeof(ppst.score)); // error - requiere estructura
say("sizeof([[ppst]].score)=" + sizeof([[ppst]].score));
say("sizeof([ppst].score)=" + sizeof([ppst].score));
say("sizeof([ppst[0]].score)=" + sizeof([ppst[0]].score));
// say("sizeof(ppst[0][0].score)=" + sizeof(ppst[0][0].score)); // error - exceded array access from pointer
// say("sizeof([st[0]].score)=" + sizeof([st[0]].score)); // error - pointer required
say("sizeof(st[0].score)=" + sizeof(st[0].score));
say("sizeof(pst.s)=" + sizeof(pst.s));
say("sizeof(*pst.s)=" + sizeof(*pst.s));
say("sizeof(*pst[0].s)=" + sizeof(*pst[0].s));
say("sizeof(pst.s[0])=" + sizeof(pst.s[0]));
say("sizeof(*pst.s1)=" + sizeof(*pst.s1));
say("sizeof(**pst.s1)=" + sizeof(**pst.s1));
// say("sizeof(***pst.s1)=" + sizeof(***pst.s1)); // error - exceded pointer reference
say("sizeof(pst.score)=" + sizeof(pst.score));
say("sizeof(pst[0].score)=" + sizeof(pst[0].score));
say("sizeof(pst.s.s3)=" + sizeof(pst.s.s3));
say("sizeof(pst[0].s[0].s3)=" + sizeof(pst[0].s[0].s3));
say("sizeof(*pst.s.s3)=" + sizeof(*pst.s.s3));
// say("sizeof(**pst.s.s3)=" + sizeof(**pst.s.s3)); // error - exceded pointer reference
say("sizeof(pst[0].s[0].s3[0])=" + sizeof(pst[0].s[0].s3[0]));
// say("sizeof(*pst.score)=" + sizeof(*pst.score)); // error - no es puntero
// say("sizeof(st[0][0].score)=" + sizeof(st[0][0].score)); // error - Excede dimensiones de array
// say("sizeof(st2[0].score)=" + sizeof(st2[0].score)); // error - Referencia array no es correcta, falta un indice
say("sizeof(st2[0][0].score)=" + sizeof(st2[0][0].score));
// say("sizeof(st2[0][0][0].score)=" + sizeof(st2[0][0][0].score)); // error - Excede dimensiones de array
say("sizeof(struct1)=" + sizeof(struct1));
say("sizeof(struct2)=" + sizeof(struct2));
say("sizeof(struct3)=" + sizeof(struct3));
say("sizeof(*pst)=" + sizeof(*pst));
say("sizeof((*pst).score)=" + sizeof((*pst).score));
say("sizeof(*pst.s)=" + sizeof(*pst.s));
say("sizeof(*(pst.s))=" + sizeof(*(pst.s)));
say("sizeof(carr[0])=" + sizeof(carr[0]));
say("sizeof(carr[0][0])=" + sizeof(carr[0][0]));
say("sizeof(pstr[0])=" + sizeof(pstr[0]));
say("sizeof(str2[0])=" + sizeof(str2[0]));
say("sizeof(str[0])=" + sizeof(str[0]));
say("sizeof(str[0][0])=" + sizeof(str[0][0]));
say("sizeof(str[0][0][0])=" + sizeof(str[0][0][0]));
// say("sizeof(str[0][0][0][0])=" + sizeof(str[0][0][0][0])); // error - array dimension error
say("sizeof(str1[0])=" + sizeof(str1[0]));
say("sizeof(str1[0][0])=" + sizeof(str1[0][0]));
say("sizeof(st)="+sizeof(st));
say("sizeof(st[0])="+sizeof(st[0]));
say("sizeof(st3)="+sizeof(st3));
say("sizeof(st3[0])="+sizeof(st3[0]));
say("sizeof(array)="+sizeof(array));
say("sizeof(array1)="+sizeof(array1));
say("sizeof(array2)="+sizeof(array2));
say("sizeof(t.m.score)=" + sizeof(t.m.score));
say("sizeof(t.m)=" + sizeof(t.m));
say("sizeof(t)=" + sizeof(t));
pst = alloc(sizeof(struct1));
[pst].s = alloc(sizeof(struct2));
memset([pst].s, 126, sizeof([[pst].s]));
ppst = &pst;
pppst = &ppst;
total = sizeof(st)/sizeof(st[0]);
t = test();
say("&t.m.score=" + &t.m.score);
say("&t.m=" + &t.m);
say("&t=" + &t);
say("sizeof(st)="+sizeof(st)+" sizeof(st[0])="+sizeof(st[0]) +" total="+total);
say("[pst].s="+ [pst].s + " [pst].s.status=" + [pst].s.status);
say("[pst].s="+ [pst].s + " [[pst].s].status=" + [[pst].s].status);
[[pst].s] = fill;
say("&fill="+ &fill);
say("[pst].s="+ [pst].s + " [pst].s.status=" + [pst].s.status);
say("[pst].s="+ [pst].s + " [[pst].s].status=" + [[pst].s].status);
say ("memset("+[pst].s+", 35, "+sizeof([pst.s])+")");
memset([pst].s, 35, sizeof([pst.s]));
say("[pst].s="+ [pst].s + " [pst].s.status=" + [pst].s.status);
say("[pst].s="+ [pst].s + " [[pst].s].status=" + [[pst].s].status);
[[pst].s] = fill;
say("[pst].s="+ [pst].s + " [pst].s.status=" + [pst].s.status);
say("[pst].s="+ [pst].s + " [[pst].s].status=" + [[pst].s].status);
let_me_alone();
end
[/code]
sizeof(dword) =4
sizeof(int) =4
sizeof(string)=4
sizeof(float) =4
sizeof(short) =2
sizeof(word) =2
sizeof(char) =1
sizeof(byte) =1
sizeof(dword *) =4
sizeof(int *) =4
sizeof(string *)=4
sizeof(float *) =4
sizeof(short *) =4
sizeof(word *) =4
sizeof(char *) =4
sizeof(byte *) =4
sizeof(pst.score)=2
sizeof((pst).score)=2
sizeof((*pst).score)=2
sizeof([*ppst].score)=2
sizeof((*pst.s).s3)=4
sizeof(*(*pst.s).s3)=9
sizeof(pst.s)=4
sizeof([pst].s)=4
sizeof([[pst].s])=13
sizeof([ppst].s)=4
sizeof([[[ppst]].s])=13
sizeof([[ppst]].[s])=13
sizeof(pst.s)=4
sizeof([pst].[s])=13
sizeof([[*ppst].s])=13
sizeof([*ppst.s])=13
sizeof([pst].s)=4
sizeof(*[pst].s)=13
sizeof([[pst].s])=13
sizeof([pst].[s])=13
sizeof(pst[0])=27
sizeof(pst[0].score)=2
sizeof(ppst)=4
sizeof(ppst[0])=4
sizeof(*ppst)=4
sizeof(**ppst)=27
sizeof(*ppst[0])=4
sizeof(ppst[0].score)=2
sizeof([[ppst]].score)=2
sizeof([ppst].score)=2
sizeof([ppst[0]].score)=2
sizeof(st[0].score)=2
sizeof(pst.s)=4
sizeof(*pst.s)=13
sizeof(*pst[0].s)=13
sizeof(pst.s[0])=13
sizeof(*pst.s1)=4
sizeof(**pst.s1)=13
sizeof(pst.score)=2
sizeof(pst[0].score)=2
sizeof(pst.s.s3)=4
sizeof(pst[0].s[0].s3)=4
sizeof(*pst.s.s3)=9
sizeof(pst[0].s[0].s3[0])=9
sizeof(st2[0][0].score)=2
sizeof(struct1)=27
sizeof(struct2)=13
sizeof(struct3)=9
sizeof(*pst)=27
sizeof((*pst).score)=2
sizeof(*pst.s)=13
sizeof(*(pst.s))=13
sizeof(carr[0])=11
sizeof(carr[0][0])=1
sizeof(pstr[0])=1
sizeof(str2[0])=1
sizeof(str[0])=44
sizeof(str[0][0])=4
sizeof(str[0][0][0])=1
sizeof(str1[0])=4
sizeof(str1[0][0])=1
sizeof(st)=189
sizeof(st[0])=27
sizeof(st3)=270
sizeof(st3[0])=27
sizeof(array)=64
sizeof(array1)=48
sizeof(array2)=28
sizeof(t.m.score)=2
sizeof(t.m)=27
sizeof(t)=4
offset(struct2, flags)=00000001
offset(struct1, s)=00000006
-----------
sizeof(n)=4
sizeof(m.score)=2
st[0].name=Jugador 4 - score=3
st[1].name=Jugador 2 - score=5
st[2].name=Jugador 1 - score=10
st[3].name=Jugador 6 - score=12
st[4].name=Jugador 5 - score=33
st[5].name=Jugador 7 - score=210
st[6].name=Jugador 3 - score=210
-----------
&[pst].score=00592A54
&pst.score=00592A54
&[ppst].score=00592A54
&[[ppst]].score=00592A54
&[[pppst]].score=00592A54
&(**pppst).score=00592A54
&(struct1 *)pst.score=00592A54
&(struct1 *)pst.s=00592A56
offset=00000004
sizeof(float)=4
sizeof(*pst)=27
sizeof(*pst.score)=2
sizeof(pst.score)=2
sizeof(pst.s.status)=1
sizeof([pst])=27
sizeof([ch])=4
sizeof([[ch]])=1
sizeof(*ch)=4
sizeof(**ch)=1
&t.m.score=00592B00
&t.m=00592AFC
&t=005917CC
sizeof(st)=189 sizeof(st[0])=27 total=7
[pst].s=00592A38 [pst].s.status=~
[pst].s=00592A38 [[pst].s].status=~
&fill=003FED46
[pst].s=00592A38 [pst].s.status=A
[pst].s=00592A38 [[pst].s].status=A
memset(00592A38, 35, 13)
[pst].s=00592A38 [pst].s.status=#
[pst].s=00592A38 [[pst].s].status=#
[pst].s=00592A38 [pst].s.status=A
[pst].s=00592A38 [[pst].s].status=A
Es que pienso adicionar al flamebird la opcion de incluir todo en el dcb
osease mochila(exe) y por fuera las dlls lo normal..
cual es la opcion para decirle a bennu que incluya todos los recursos
referenciados en el codigo fuente...
gracias
http://forum.bennugd.org/index.php?topic=53.0
Por el amor de dos!! (o de dios XD) a ver si le damos a buscar que encima hace dos dias yo postee en ello para ver si la opcion "-c" se iba a INVERTIR (que seria lo mas logico ya que en MS-DOS no funciona Bennu)
o si se iba a suprimir (que tambien seria lo mas logico). SlinterGU que opinas??
http://forum.bennugd.org/index.php?topic=53.msg937#msg937
Lo lei, pero no respondi porque esperaba que otro lo haga, esto no tiene nada que ver con MS-DOS, es la codificacion de caracteres MS-DOS que todavia muchos la usamos.
Ok, nunca dejaremos ms-dos enterrado jeje, entonces la respuesta seria.. que se mantiene la opcion "-c", que no se va a quitar, y que tampoco se va invertir, pues a usar "-c" entonces.
Que conste que solo lo pregunte porque no hace mucho alguien posteo que en ms-dos no funcionaba Fenix/Bennu y por eso me extrañaba que aun en Bennu se mantuviera esa opcion si nunca se podria ejecutar en ms-dos.
Una mala interpretacion de las palabras por mi parte, por mi esta aclarado el porque de esa opcion. Gracias.
Luego analizare bien el tema y te dire si vale la pena mantenerlo asi.
- Se permite declaracion de variables, constantes, en diferentes modulos. Esto permite poder definir una variable necesaria para mas de 1 modulo en cada uno de ellos, para evitar el tener que depender de un modulo especifico solo para declarar las variables. Por ejemplo, tengo 2 modulos que necesitan tener una variable "VAR1", pero ambos modulos no dependen entre si, y si la variable existe para 1 necesito mantener dicho valor para el otro modulo, entonces declaro dicha variable en los 2 modulos y solo se toma la primera, el 2do modulo solo usa la ya declarada. El compilador advierte con un warning esta situacion, si los tipos no coinciden obviamente tendremos problemas, pero se supone que uno sabe lo que hace al construir un modulo.
En el caso de las constantes, si el valor es diferente aborta la compilacion, en caso contrario se ignora.
- Se agregan constantes __DATE__, __TIME__, __FILE__ y __LINE__.
__DATE__ = fecha de compilacion del .prg
__TIME__ = hora de compilacion del .prg
__FILE__ = archivo en el cual esta la linea que se esta ejecutando
__LINE__ = numero de linea que se esta ejecutando
ejemplo:
prueba2.prg
[code language="bennu"]
include "debug.inc"
begin
say("Build: "+__DATE__+" "+__TIME__);
DEBUG("msg1");
say(__FILE__ + ":" + __LINE__ + ":" + " msg2");
say(__FILE__ + ":" + __LINE__ + ":" + " msg3");
hello();
hello2();
end[/code]
debug.inc
[code language="bennu"]
#define DEBUG(msg) say(__FILE__ + ":" + __LINE__ + ": " + msg)
include "prueba2.pr2"
process hello()
begin
DEBUG("hello");
end[/code]
prueba2.pr2
[code language="bennu"]process hello2()
begin
DEBUG("hello2");
end[/code]
output:
Build: 2008/05/09 18:46:21
prueba2.prg:6: msg1
prueba2.prg:7: msg2
prueba2.prg:8: msg3
debug.inc:8: hello
prueba2.pr2:3: hello2
- Se corrigio y reescribio mucho del tokenizador del compilador
- Se dio soporte a #include(adicionalmente de include sin #), correcto tratamiendo de # ..., comentarios, continuacion de linea, numeracion de lineas y archivos, y otras tantas cosas mas... con esto tambien se corrigieron muchos bugs ocacionados por el mal parseo de los token...
Hola, con el bennu wip actual que hay subido no me funciona ni el say ni el Debug. Supongo que aún no has subido otra versión nueva con los avances que comentas en estos 3 últimos post. ¿no?
Por cierto, ¿Como va la parte de separación de dependencias SDL del núcleo? y ¿ya te pusiste con los modulos de tratamiento de teclado y gráficos?
Por otro lado me preguntaba si la independecia de SDL fuera total, sería factible reimplementar eso módulos SDL en Allegro (u OpenGL o Directx a pelo que quizás ganen en velocidad) para hacer lo mismo. ¿Verdad?
Saludos.
Bien, no se que version estas probando, si linux o windows, cual de todas las wip? ya que el say funciona perfectamente.
No, no subo version por cada avance, solo informo como va.
Teclado ya esta... hace tiempo... video lo deje por un momento de lado, para meterme un rato en el core... cambios que explique estos dias, y voy a terminar de corregir el byteorder de los dcb... y creo que con eso (tengo que revisar que no me falte nada) podria liberar la primer version del core...
El core como ya dije no tiene ninguna dependencia SDL ni tendra nunca Allegro ni nada parecido, ya que el core no entiende de graficos, sonidos, ni ninguna cosa rara... esos son los modulos... y como ya lo explique (hay que leer los posts :D) se va a dividir en 2 partes (los que ameriten), una capa independiente (basica) y otra capa dependiente de lo que sea, oficialmente solo hare SDL, si algun otro quiere hacer otra, podra hacerlo tranquilamente.
PD: Tambien me entretuve estos 2 ultimos dias (y por ende no me dedique al codigo) haciendo un driver para xp64 de mi tableta grafica serial, ya que no hay... al final no hice un driver, sino un programa que inyecta en windows eventos de mouse... y con eso ya tengo mi tabletita funcionando en cualquier windows sin necesidad de drivers... :P
Ahhh, y 2 dias antes, con los nuevos iconos... asi me distraigo un poco y no me saturo...
como dice en los paises anglosajones: "take it easy man!".
Tu a tu ritmo, por que como decimos en aqui en españa: "lo bueno se hace esperar".
Saludos a todos.
Que bueno que esta! de unta pan y moja XD
PD: Perdon el offtopic (tampoco hago muchos)
He probado el nuevo core (el que no tiene nada de rutinas graficas, ni formatos graficos) con una version recompilada de la m8ee (de coldev), salvo que tuve que agregar una funcion de inicializacion del video SDL para que active el teclado y comentar las lineas de codigo dependiente de las rutinas graficas de Bennu/Fenix (set_mode, set_fps, write, etc), la dll se integro perfectamente, incluso antes de agregar esta funcion de inicializacion, salvo que no tenia teclado. No pude comprobar el rendimiento en fps, ya que no existen funciones de texto.
En resumen, se comprobo que ya es factible integrar un render externo al core de bennu de forma satisfactoria.
Solo puedo decir una cosa: ¡GUAAUUUU! :o
Al final Bennu va a tener 3d antes que 2d, jajajaja.
- Se agrega parametro de linea de comando -o, que permite definir el nombre del archivo de salida. (esto tambien es valido para el sistema de stub -generacion de ejecutable-)
- Se permiten como extensiones dcb validas: .dcb, .dat, .bin. (se podrian agregar otros)
- Se quita en el sistema de stub, el limite de que solo se permiten incluir archivos del directorio de trabajo. (Ahora se almacena el path completo serializado)
- Se optimiza comienza a serializar la grabacion/lectura de los archivos dcb y dejar de ser archivos que graban estructuras de datos fijas, con lo cual se graban datos basura.
- Se normalizan tamaños maximos en nombres de archivos y pathnames completos.
- Se agregan chequeos de previa inclusion de modulos.
- Optimizaciones y correcciones varias al manejo de strings. (fix en funcion format)
- Se incrementan limites en la cantidad de includes y en la cantidad de parametros tanto de macros como de funciones. (estos limites seran eliminados)
- Corregido bug al usar defines que usan otros defines
- Concepto de procesos huerfanos. Ahora es posible saber exactamente cuando un padre muere, ya que los abuelos no heredan mas a los nietos tras la muerte del padre. (Esto consumia muchisima cpu)
- Los modulos ahora soportan dependencia a otros modulos (esto es cargar automaticamente otras dlls, requeridas por un modulo)
- Se mejoran la logica de las rutinas de control de instancias y se logra con esto un incremento de velocidad muy muy importante.
Bien, bien, bien, esto pinta muy bien.
Ummm... ahora recuerdo uno de los motivos importantes por los que quite eso de los procesos huerfanos... en principio me acordaba del tema de no poder ver la lista total de procesos con el debugger, ahora me acuerdo que tampoco habia forma de mandar signals en tree a los procesos huerfanos...
Ahora recaera en nosotros la responsabilidad de tener controlados los procesos huerfanos, no?
Estoy trabajando en eso.
Por ejemplo, ahora la signal, puede recibir como parametro 0, y de esta forma afecta a todos los ids de todos los procesos, huerfanos o no, menos el nuestro. De esta forma, puedo por ejemplo, mandar a freezar todos los procesos. Tambien existe el get_id(type ...) con lo que trae a los procesos de un tipo determinado, por ejemplo, enemigos.
Estoy pensando quizas en agregar un parametro de runtime, o ciertas variables, que definan el comportamiento que puede tomar el sistema, solo que en el caso de heredar procesos huerfanos, la performance decae mucho.
Lo ultimo de poder definir el comportamiento del sistema, lo encuentro muy interesante, aunque supongo que es el camino mas dificil, pero creo es el mas idoneo, lo facil (y supongo que chapuzero), seria definir un estado mas (por ejemplo: Orphan) para los procesos.
Pero ser huerfano no significa que un proceso este muerto, congelado, dormido, etc... solo significa que no tiene padre... asi que eso no puede ir como un estado.
Si tienes toda la razon, es que ayer te escribi a las 0:30, y tenia mucho sueño, por cierto haciendo un poco Offtopic, no estoy muy seguro, pero me parece que no hay una funcion que sea inversa a SIGNAL, una funcion a la cual introduzcas el Id de un proceso y esta te devuelva el estado de el, vuelvo a repetir que probablemente este yo equivocado, ya que hace tiempo que no programo, pero si no fuera asi, seria interesante incluir una funcion de este tipo.
Es una variable... reserved.status
Bien, bien, bien, me gustan que los planes salgan bien. :D :D :D
- Se mejora rutinas de strings internas, se replantea la logica de creacion/borrado de strings con lo que se logra un incremento en el rendimiento. Se reduce tambien el consumo de memoria.
- Se mejora la performance en rutinas internas file (fgets)
- Se mejora el manejo de modulos (cambios internos)
- Varias mejoras internas en strings.
genial que se pueda cambiar el rendimiento
desde codigo
esperare la beta
Ummm... bueno, cambiar desde el codigo, no... cambiar el rendimiento del codigo, si...
Nuevos avances...
- Se sigue mejorando el rendimiento del manejador de procesos y acceso a los mismas desde otros procesos.
- Se mejora agregan nuevos tipos de hooks.
- Se agrega la posibilidad ignorar señales y tambien la posibilidad de forzar envio de estas (señal ignorada o no).
- Funciones para obtener el estado actual de un proceso
Si se aceptan sugerencias, te sugiero que mires en el foro de Fenix el hilo de Gemix, por si te ineteresa algo de lo dicho sobre "priority_signals".
Lo escribiría aqui, pero ando justo de tiempo, y ya me he calentado las neuronas escribiendo cierto pseudo-código-chapucero-horrible :D:D:D
Ya vi ese hilo, no me parece logico... mi idea de Bennu es hacerlo un lenguaje profesional, preferente "like C", que al tener una logica similar a un sistema operativo con seudo-procesos, se comporte casi como tal... por otro lado, no tiene sentido teniendo estas funciones, se puede implementar facilmente desde codigo con la nueva funcion y nuevo comportamiento adicional de las existentes...
SplinterGU estas muy activo últimamente :D.
¿Como va el tema de la pantalla y el teclado?
¿Se puede ya poner una imagen y moverla con las teclas dentro de un fondo?:).
Por cierto he hecho unas muchas pruebas de prioridades de operadores y no le he visto comportamiento errático a ninguna.
Por otro lado, tienes pensado implementar algo como fscanf(stdout,"%s",cadena), para poder optener datos del usuario, sería interesante.
Si, claro, existe la SAY...
Jur, me había sorprendido la respuesta porque no me la esperaba,no me he explicado bien, bueno confundí fprintf con fscanf, y me he asustado al creer que con SAY se le podía pedir a un usuario una cadena.
He rehecho la pregunta en el reply anterior.
Saludos.
No, scanf para input de teclado es una funcion blockeante, no es logica para un lenguaje para programacion de videojuegos.
:D. Todo juego que se digne debe tener un hiscore, ya me dirás si sería util para poder registrar las iniciales. Ahora tengo implementado teniendo que usar variables globales, obteniendo el codigo asccii, restando, sumando cadenas, etc y control de bloqueo manual :D.
Pero bueno, yo lo decia por ayudar a ello. Si es chungo de meter en el nucleo y eso pues nada a la manera dificil dificilisima siempre se podrá. No hay nada imposible sino solo casi imposible ::)
Pero no se hace un scanf, es demasiado simple hacer un input por codigo...
No es que sea imposible, no es logico...
Lo que quiere decir es que un fscanf paraliza todo el código hasta que el usuario introduce la cadena de texto, y como lenguaje concurrente eso no se DEBE hacer. Y aunque se implementase de forma no bloqueante, cada vez que pulsas una tecla puedes provocar que otros procesos respondan (crear un proceso disparo, mover al personaje...)
Si usas la global ASCII en un bucle verás lo sencillo que es hacer un input. Creo que por el foro de Fenix ya se ha puesto unos cuantos ejemplos.
Si, bueno da igual, me refería a que formara parte del núcleo alguna forma para recibir información del usuario y no tener que hacerla a manini. Como decís hay por ahí código para ello. Tema zanjado.
Por otro lado SplinterGU, que buenas nuevas tienes? ¿Ya estás liado con la parte del teclado y el video?
3/6:
- Se corrige comportamiento de los tipos de datos CHAR (espero que no quede ningun bug)... ahora son realmente strings de ancho fijo (1 caracter o arrays N caracteres)...
- Se agrega labels (etiquetas) locales y nuevas instrucciones de control de flujo (al momento goto) al mejor estilo C.
[code language="c"]#include <stdio.h>
int main()
{
etiqueta: //La etiqueta
printf("Uso del GOTO");
goto etiqueta;
}
[/code]
[code language="bennu"]
import "mod_say"
begin
etiqueta: //La etiqueta
say("Uso del GOTO");
goto etiqueta;
end
[/code]
- OnExit pasa a comportarse como una etiqueta (especial)
- Ya casi tengo el formato definitivo del dcb (version Bennu 1.0), que con el cambio de etiquetas ahora se podran poner cosas al estilo "ON ERROR" sin necesidad de tocar el dcb.
- El dcb ya casi es totalmente portable entre plataformas de diferentes byteorders, solo me queda recorrer las variables y darles el formato adecuado segun corresponda... (obviamente, y probarlo...)
Quote from: dcelso on June 03, 2008, 01:18:53 PM
Si, bueno da igual, me refería a que formara parte del núcleo alguna forma para recibir información del usuario y no tener que hacerla a manini. Como decís hay por ahí código para ello. Tema zanjado.
Por otro lado SplinterGU, que buenas nuevas tienes? ¿Ya estás liado con la parte del teclado y el video?
No aun, me urgen otras cosas para cerrar el tema del core, que es lo mas cercano a ser liberado... el teclado esta desde hace mucho tiempo, salvo que al no tener video no se puede usar, pero por ejemplo usando el modulo 3d de coldev como driver de video, el modulo de teclado funciona a la perfeccion...
okis, entonces a esperar toca. ¿Tienes pensada alguna estimación de tiempo para liberarla?
Quote from: SplinterGU on June 03, 2008, 01:24:24 PM
3/6:
- Se corrige comportamiento de los tipos de datos CHAR (espero que no quede ningun bug)... ahora son realmente strings de ancho fijo (1 caracter o arrays N caracteres)...
Umm... creo que no lo escribi bien...
CHAR son strings de 1 byte (son el analogico a BYTE, pero que manejan strings), pero pueden ser usados en expresiones numericas.
EDIT: Hoy no estoy bien... donde decia "SIGNED BYTE" lo cambie por "BYTE"
Quote from: dcelso on June 03, 2008, 03:35:52 PM
okis, entonces a esperar toca. ¿Tienes pensada alguna estimación de tiempo para liberarla?
Sin presion por favor... :)
Dioooxxx, recuperamos el GOTO, jejejejejeje, no lo utilizaba desde aprendi a programar en pascal, y deje el quick basic, bienvenido abuelo GOTO, vuelves a entrar en accion.
P.D: bueno de hecho si lo uso, lo uso en un lenguaje de psudocodigo que estoy creando para manejar la logica de los enemigos en un juego de machacamarcianos, jejejeje, pero no si lo llegare a acabar algun dia.
GOTO/JMP y voy a agregar GOSUB/CALL para rutinas rapidas que cuando terminen regresen al punto donde fueron llamados... serviran como funciones, pero son sin parametros, locales, y sin retorno por valor, ya que usan el mismo espacio de variables que quien las llama, por ende son rapidisimas...
Y otras funciones mas de este estilo... que ya se informaran...
Vaya, pinta bien, lo malo que le veo es que se van a difurcar muchísimo la forma de hacer las cosas :D
Sip pero tambien se adaptara mejor el codigo para casos mas concretos, me encanta cada vez mas este bennu. ;D ;D ;D
La idea es que sea una opcion, el que la quiera usar que la use, el que no, no...
Para casos concretos como dice kim-elet-o, es muy util. Bueno, ya de hecho para el caso de un handler de error... aunque este enmascarado en otras instrucciones.
Veo tu pascal y subo a Basic 1.0 en mi viejo amstrad :o.
Y ahora también gosub, fue de las pocas cosas que llegué a aprender de programación en aquel entonces (y eso que iba sin ánimos de hacerlo).
No sabía que las etiquetas se usasen en C, sólo las vi en ensamblador.
De todas formas, splinter, no te pases añadiendo cosas, que cuanto más metas más complicado será el lenguaje (aunque seguramente muchos habrá que les interesen estos cambios :))
Por cierto ¿no se habían creado ya los "procesos subrutinas"? eran procesos normales sin la seccion de variables y toda la carga de un proceso normal, que hacía precisamente eso, ser una subrutina, pero llamándola como si fuera un proceso.
Las cosas que se agregan no son necesarias para hacer un juego/programa, pero seguro haran un juego/programa mejor.
No, no existe eso de procesos subrutinas... habia algo que era si se llamaba a una funcion o proceso que no tuviese frame, se usaba el mismo espacio de algunas cosas, pero si mal no recuerdo, no de variables, pero... estaba mal implementado, y no era tan rapido como lo que plantea una implementacion CALL del estilo que menciono.
Faaa como avanza esto!!
una pregunta.. ya esta como para empezar a usarla? o falta un poco mas?
Falta...
Quote from: Drumpi on June 04, 2008, 02:49:16 PM
Por cierto ¿no se habían creado ya los "procesos subrutinas"? eran procesos normales sin la seccion de variables y toda la carga de un proceso normal, que hacía precisamente eso, ser una subrutina, pero llamándola como si fuera un proceso.
La ventaja creo, es que como no procesa internamente parametros ni retorno , el nuevo comando seria mas rapido.
se parece a las funciones inline de C++. ;)
- Se corrige grabacion y lectura de array de strings usando SAVE y LOAD, solo guardaba el primer valor del array. Se optimiza tambien la grabacion de variables (SAVE/LOAD)
- Se corrigen for, from, switch/case... ahora soportan correctamente los siguiente tipos de datos (tenian bugs o no soportaban):
for: byte, word, dword, short, long, int, float, char (es posible hacer cosas como FOR (a = "A"; a <= "F"; a++) siendo "a" de tipo char).
from: byte, word, dword, short, long, int, float, char (es posible hacer cosas como FROM a = "A" TO "F"; siendo "a" de tipo char). STEP ahora puede tener incrementos float.
switch: cualquier tipo de dato, excepto TYPE, los case son tratados/convertidos al formato de la expresion provista en el switch. En los casos de char, por ejemplo, es posible especificar un case 101: y un case "e", ambos son validos, pero solo ejecutara la primera ocurrencia.
- Se agrega constante __VERSION__ = COMPILER_VERSION
Buen trabajo!
- Documento sobre Varspaces.
- Correcciones menores en el uso de variables.
- Se elimina limite en cantidad de TYPEs permitidos, antes solo se permitian 64.
Deja de poner la miel en los labios que te vamos a morder, >:( grgr. :'(
La próxima noticia que venga con versión beta nueva, sino no pongas :) ;) ;D.
ánimo Splinter, veo que no paras, ese es el espíritu ;D
Y los demas no metáis bulla que con prisas todo sale mal xdd
Novedades
- Se agrega soporte completo call/return
- Se agrega comandos on exit y on error, con la siguiente sintaxis:
on exit goto label; // Cambia el callback de salida
on exit goto 0; // Deshabilita el callback de salida
on error goto label; // Cambia el manejador de errores. Se parsea y se executa, pero no se le da tratamiento de error por ahora.
on error goto 0; // Deshabilita el manejador de errores.
resume; // no es funcional ahora, pero regresa al mismo punto que origino una llamada al manejador de errores, reintentando la operacion.
resume next; // no es funcional ahora, pero salta la instruccion del error y continua el flujo del programa normalmente.
resume label; // no es funcional ahora, pero sale del manejador de errores y continua el flujo del programa a partir de label.
- Se pasa el interprete a la bgdrtm, ahora con esto es posible llamar a funciones del usuario (codigo escrito en lenguaje Bennu) desde una dll.
Interesantes novedades, ademas que casualidad justamente estos dias me he estado peleando con la gestiones de errores en delphi, y vas tu, y amplias el lenguaje hacia esta direccion, jejejejejeje, no me estaras leyendo la mente de forma insconciente?, saludos.
P.d: el programa en delphi es una utilidad para un juego que estoy elaborando, cuando vera luz?, uuuufffff mejor seria preguntarse si algun proyecto mio pasa de ser eso, un proyecto.
;)
Se puede probar ?
Podria subir una version para probar, pero sigue estando sin video... si queres probar decime, tengo una version windows que se puede probar...
Bueno, no podemos mover nada aun por la pantalla así que la satisfacción será menor, esperemos al video si no le queda mucho :D.
Haciendo pruebas de performance, he notado que la nueva version de Bennu, es 40 veces mas rapido en procesamiento que la version WIP2...
Se realizo una prueba de 1000 procesos corriendo 1000 frames (o ciclos de ejecucion), con calculos de animacion pero sin render, tardando en realizarlo en la WIP2, unos 40 segundos... mientras que en la WIP6.2 unos 700ms... maquina dualcore 1.6 intel...
El mismo programa, renderizando con una libreria experimental opengl sobre SDL (no compatible con la vieja sintaxis y motor Fenix/Bennu) da unos 400fps en Bennu... mientras que la misma logica en C llamando a la misma libreria (modulo bennu) da unos 423fps... o sea, 1000 procesos rebotando y cambiando su grafico en pantalla (animacion), un total de 1000 frames... demas esta decir que al usar opengl, en un sistema dualcore, hace uso de los 2 procesadores para el render... es una caracteristica del opengl...
PD: Olvide decir que las pruebas fueron con 1000 graficos 32x32x32... con 40 cuadros de animacion cada uno...
No esta nada mal B-0........| :o :o
disculpa, ¿cuándo podremos probar el bennu wip 4 para programar? y ¿Habrá cambios en cuanto al lenguaje y la sintaxis de las funciones?, ¿se necesitará el declare todavía? y ¿en verdad utilizará 32b en gráficos? gracias.
De momento esta un poco parado el desarrollo, estas ultimas semanas estuve complicado...
Ya voy por una WIP6.2, que envio a ciertos usuarios que me ayudan con pruebas... para el video todavia falta un tiempo... las versiones actuales no tienen librerias graficas... es todo procesamiento y alguna libreria experimental de algunos usuarios... pero no compatible con lo que estamos acostumbrados...
Si te interesa usar la WIP6.2 (sin libs graficas) puedo pasartela o subirla, pero si no la van a usar, es mejor esperar...
ok, gracias, creo que mejor espero.¡Que sea una verdadera sorpresa el final!. :) Bueno, entonces continuaré con la versión que tengo, creo que el wip 2. Gracias amigo.
Ualaa, cuantos dias sin noticias ya.
Que, de vacas ya no?. :D , que suerte.
Hola...
Aca no hay vacaciones... tuve un poco de trabajo... y bueno, ahora otros problemas que me han bajado el animo un poco...
Ah, ok, pues nada, a ver si se soluciona todo bien.
Venga ánimo.
Saludos.
Los problemas son de publico conocimiento... No hay solucion, solo tiempo para que pase el bajon...
Bueno, yo creo que lo más inteligente es partir peras y se acabó.
Que cada uno vaya por su lado y punto. Está visto que estar en un mismo sitio (Divsite) con tantos problemas absurdos no tiene ningún sentido. Que Bennu tenga su foro y su web, y que Gemix haga lo que quiera por su lado. Y que la gente, libremente, escoja dónde y con quién quiere estar. Porque Fénix -el vínculo de unión- tal como yo lo veo está un poco muerto. Y ningún problema: todos amigos pero cada uno en su casa.
Otra cosa no queda, pero sinceramente me siento mal porque defraude a todo el equipo de moderacion... porque hicieron un trabajo tremendo con el foro, sin olvidad la cantidad de veces que, yo particularmente, limpie el ftp/site de hackeos, incluso parche el sistema de foro en muchos lugares para mejorar la seguridad y agregarle caracteristicas, y muchas otras cosas mas... hace 2 años atras el foro era algo inhabitable, un caos... todo el equipo hizo posible que ahora sea un lugar donde se puede participar, y en vez de un agradecimiento o apoyo, lo unico que se obtuvo fue un quite de permisos de golpe y porrazo, sin previo aviso, sin aunque sea, una ayuda para corregir aquello que se consideraba que se estaba haciendo mal... el mensaje recibido, fue el de "les quito todo porque hicieron todo para el culo...", y la verdad que no fue asi... ninguno del equipo se merecio esto... y yo me siento responsable de haberlos defraudado, por darles algo que luego se les quito sin ver siquiera todo lo que se hizo positivamente... pero bueno, quizas haya intereses mayores de por medio (personales en algunos, economicos en otros)... y no hay nada que hacerle a esto...
Sinceramente me afecto mucho...
No quiero hacer de este post un flame... aunque ya seguro habra quien quiera hacerlo...
;D, adelante
Ni caso tu, pasando de esa gente de cuyo nombre no quiero acordarme, el foro de bennu es tu casa, y el que quiere de verdad tu trabajo, a ella viene, la verdad es que migre hace poco a bennu wip 2, y no me arrepiento para nada, por cierto haciendo un poco off-topic, he batido mi propio record ya llevo 2 meses y medio con un mismo proyecto, pero me esta costando un pelin, por que estoy paralelamente desarrollando las herramientas necesarias para la edicion de los datos que usara mi programa, bueno en fin, gracias de corazon por tu trabajo, y pienso seguir preguntando mis dudas por aqui.
amigo, no entiendo muy bien lo que está pasando, pero todos te apoyamos, levanta ése semblante, y alégrate, que el tiempo frente a la pc es corto y hay que saberlo utilizar, ja ja ja, alégrate amigo, y que la codicia o la oposición ajena no te afecte. :)
Bien, despues de un tiempo parado, he decido retomar la senda perdida... y he retomado el engine grafico, pero con un cambio de planes, he dejado de lado lo que estaba haciendo, porque era un poco ambicioso y la verdad que me urge liberar una version con fuentes lo mas rapido posible, asi que he tomado la version mas vieja (Bennu) del modulo grafico, sin grandes cambios de los nuevos (32 bits por ejemplo) y empece a trabajar en ello.
Sí he quitado todo lo referente a mapas animados, tambien fgc, fpl, y los nuevos formatos de archivos, no es que estaban mal, pero el soporte de algunos estaba incompleto y tambien algunos pensados en la filosofia de animacion, asi que como no se incluiran mapas animados, esto no tiene sentido...
Quizas se incluya soporte 32 bits en esta version, quizas no... pero si en alguna futura version...
Por ahora no hay muchos avances que anunciar al respecto, solo que volvi a las pistas...
Me parece perfecto. Será una versión "fenix" con dll separados, cientos de bugs corregidos y algunas mejoras funcionales. Espero ansioso el nuevo bennu :D.
Por cierto, sería estupendísmo que se hiciera un subversion con los fuentes y poner un IDE oficial de desarrollo (por ejemplo codeblocks,o eclipseCDT. Entre otras muchas cosas porque te abstraen de los makefiles sin necesidad de usar ni automake ni cmake y solo te preocupas de los fuentes y te ayudan a sincronizarte o subir y bajar comodamente a subversion).
Así se podría ampliar el número de programadores en activo y cada uno dedicarse a tareas distintas y siempre tener una rama de fuentes estable y otra de desarrollo. Y los no programadores podrían descargarse en cualquier momento versiones inestables de desarrollo para ver avances (o bugs) sin necesidad de esperar que se suelten unos binarios.
Saludos.
"la verdad que me urge liberar una version con fuentes lo mas rapido posible"
AMEN, espero desde hace mucho tiempo con ansia. Ya sabeis que mi credo impide el uso de programas que no acompañen fuente :P
Espero que deis cobijo en este santo foro para gente que aun no usa bennu pero que siente aprecio por la gente de esta iglesia :D
Animos y que sepais que si necesitais gente para hacer determinadas librerias o para cualquier cosa, si puedo hechar una mano la hechare con sumo gusto. ;)
Celebro que vuelvas a la senda!!
Yo estoy de acuerdo dcelso que no sería mala idea tener un gestor de versiones público... Tampoco hace falta matarse mucho: en sourceforge ya vale, no? Y lo del entorno, me parece que tú usas Ultraedit, verdad? Bueno, tampoco creo que sea lo más importante, cada uno que haga lo que quiera...pero el hecho de tener las fuentes a mano, realmente es algo que merecería mucho la pena, y quién sabe si se une alguien más al proyecto...
*Yo creo que para que la cosa empiece a despegar se necesitaría publicar (porque yo reconozco que ando perdido) la versión "estable" de Bennu, y la de desarrollo, y ADEMÁS, empaquetar (aunque sea de forma oficiosa) toda esta pléyade de DLLs que están flotando por ahí, si puede ser también con su código fuente.
*Luego, ya puestos a pedir, una interfaz gráfica multiplataforma para los comandos de consola de manipulación de FPGs/FNTs/PAL sería la repera.
*Y un IDE de Bennu (o varios) multiplataforma también (al estilo BennuPack, pero para Linux también!!).De hecho, en la búsqueda de IDEs para Fénix que funcionen en Linux (no haaaaayy!!!?) he encontrado uno programado por Semitex llamado FPadSharp, que no lo he probado, pero que viene con las fuentes y está programado en .NET (Mono) y GTK+. Me lo tengo que mirar, pero si resulta factible, estaría muy chulo si se pudiera integrar ya dentro de algún pack, junto con el Flamebird y tal, no? Por aquello del multiplataforma y eso...
*Tema aparte es el de la documentación, que yo ya sabéis que me puedo comprometer a escribir algún manualillo como el de Fénix, cuando esté más o menos todo esto que digo.
Venga, que vaya bien el lío.
Exacto, esto no es mas que Fenix con las mismas funcionalidades separadas en dlls, y obviamente, funcionalidades nuevas y diria que varios cientos de bugs corregidos, tantos que deje de anotarlos... Asi como el Gaim, paso a nombrarse Pidgin... este proyecto es "Fenix, nombre clave Bennu Game Development" (aunque algunos se esfuercen en convencer al resto de lo contrario)
Con respecto al SVN, ya tenemos el sourceforge para eso, aunque tambien se baraja la posibilidad de hacer uno tambien (adicionalmente) en este site...
No esta en planes hacer un IDE oficial, pero si esta en mis planes hacer plantillas para integrar diversos IDEs (o editores que den funcionalidad adecuada para programadores), y asi cada uno puede adaptar su IDE favorito que ya use para otras cosas a Bennu... para esto, tambien se esperan colaboracion de los usuarios... y todo esto operable a traves de algun instalador (que puede estar escrito en Bennu).
En cuanto a la documentacion, cosa muy importante, yo suministrare (o quizas algun otro si se atreve) documentacion de estilo tecnico, resumida pero detallada... y documentacion y diagramas a nivel interno... (todo esto de la documentacion seguramente no saldra con la primera release, sera en una etapa posterior, aunque algunas cosas ya se estan liberando). No voy a hacer un manual tipo curso para iniciados, asi que un osk-manual al respecto seria algo grandioso.
Con respecto a la distribucion, sera en 3 paquetes bien delimitados:
- Core (bgdc, bgdi y bgdrtm)
- Modules (todos los modulos oficiales)
- Tools (fpg, map, moddesc,...)
bien, bien, bien, ansioso a migrar de nuevo a la proxima wip de bennu, y ansioso de ir cazando bugs sobre la marcha (aunque a veces el bug soy precisamente yo, pero mi yo-bug lo machaco con mi yo-depurador).
Genial!! :D
YA QUE estan tocando el tema, el ide hecho en fenix
porque no liberan el codigo y yo continuo su desarrollo
ya que permitia la edicion de textos grandes (campos memo)
menus, listas ,etc
no se a ver si se animan los autores y se termina en bennu
a que IDE hecho en fenix te referis? al "Black Pearl IDE"? si te referis a ese, Phreak lo esta haciendo, y lo paso a Bennu, al final decidio reescribir nuevamente el GUI grafico, y el editor es rapidisimo, moviendose en un archivo como de 30mb (algo exagerado) se mueve mas rapido que cualquier editor windows, incluido el Ultraedit... pero bueno, quizas deberias ponerte en contacto con el y ver si puedes colaborar con el... o lo que sea... cuando lo vea le comento muestro este post...
He estado un tiempo alejado de este foro por motivos personales y me alegra ver que el proyecto sigue adelante. Lamento las movidas que has tenido en divnet. Animo Splinter!! Saludos :)
El IDE va encaminado, pero le falta mucho...
Si hay alguien interesado en ayudar muyy bienvenido sea...
El codigo esta muy prolijo y comentado, no creo que sea dificil de entender.
Cualquier cosa mi mail: gal_head@hotmail.com
Saludos
Se corrigen comparaciones entre expresiones flotantes, cuyos valores son indeterminados, este bug se arrastra desde la 0.84a
ejemplo:
[code language="bennu"]
begin
say (0.93 == 0.93); // (un)comment this line
if (0.93 == 0.93)
say ("true");
else
say ("false");
end
end
[/code]
Tambien se corrige todo el tema del uso de directivas de preprocesador (esta vez espero que definitivamente), donde nunca funcionarion correctamente #if*, #else, #endif, encadenados.
Temas graves.
En prueba, los siguientes nuevos modulos:
libblit.dll
libdraw.dll
libfont.dll
libgrbase.dll
libmouse.dll
librender.dll
libtext.dll
libvideo.dll
libwm.dll
mod_draw.dll
mod_map.dll
mod_path.dll
mod_text.dll
mod_video.dll
mod_wm.dll
- Soporte Vsync (con y sin limitacion a la velocidad del refresco del monitor, normalmente 60 fps)
- Eliminados limites de resolucion de pantalla
- Soporte de mapas y fps a 32 bits.
- Correccion en el comportamiento de espera o salto de fps... antes (en Fenix y WIP2) no era correcto, y trabajaba sobre el tiempo que tardo en completarse el ultimo frame... con lo que solo se ajustaba 1 salto, y por consiguiente no se alcanzaba la velocidad deseada.
- Correccion en el cambio de modos de video y la paleta de los graficos de 8 bits cargados.
- No se corrompe mas el fondo al cambiar de modo de video, incluso entre diferentes profundidades.
- Ya no se utilizan mas 2 fondos (8 y 16 bits), hay 1 fondo unico como debe ser, con su propia profundidad de colores.
- Optimizaciones varias tanto en grafico, como en procesamiento.
- Muchos otras mejoras y agregados que ire comentando luego.
recuerda realizar backup en un medio externo (web,cd,etc)
;D
Esto...
- Correccion en el cambio de modos de video y la paleta de los graficos de 8 bits cargados.
Es el problema que te comente de que si ponias un grafico de 8 bits y le hacias un load_pal y seguidamente hacias un set_mode y se quedaba la pantlla en negro con bennu colgado??? Si es asi OLE!
PD: A ver si sale pronto la primera version.
Quote from: TYCO on September 06, 2008, 01:53:07 PM
Esto...
- Correccion en el cambio de modos de video y la paleta de los graficos de 8 bits cargados.
Es el problema que te comente de que si ponias un grafico de 8 bits y le hacias un load_pal y seguidamente hacias un set_mode y se quedaba la pantlla en negro con bennu colgado??? Si es asi OLE!
PD: A ver si sale pronto la primera version.
No estoy pudiendo reproducir el error en la version anterior, no tenes a mano el ejemplo? a ver si se corrige esto en la nueva?
EDIT: Si, ya lo pude reproducir, ya no pasa eso.
Bueno, tuve que cambiar unos de los comportamientos...
habia hecho que se mantenga el fondo aunque cambies de resolucion o profundidad, pero claro, el blit no soporta dibujar mapas de 16 sobre mapas de 8 bits (si a la inversa), entonces ese funcionamiento era confuso, porque en algunos casos iba bien ( 8 a 16 ) pero en otros no ( 16 a 8 )... entonces ahora hice que solo se mantenga el fondo mientras no se cambia alto, ancho, o profundidad, en todos los otros casos se mantiene, o sea, que se puede hacer un full_screen o window_mode o incluso poner o quitar un modo escalado y se mantiene el fondo, cosa que antes no se podia...
No se si lo comente, pero ahora el scale se puede hacer a cualquier resolucion...
wow, esto se ve muy bien :), y me alegro que se corrijan lo del path_find, ya que si la función se llamaba y uno de los puntos de búsqueda estaba en una zona blanca, el juego se trababa. Y también considero que los ángulos deberían de ser float (no se si lo sea, pero el trabajar con milésimas sigue siendo impreciso en ángulos muy pequeños) para evitar los problemas de trabajar con ángulos muy pequeños.
Quote from: SplinterGU on September 06, 2008, 09:21:35 PM
No se si lo comente, pero ahora el scale se puede hacer a cualquier resolucion...
Una gran noticia, buen trabajo Splinter! ;)
nueva version disponible...
http://betatester.bennugd.org/betas/
Tras una ardua noche de trabajo, voy a comentar las novedades...
Estuve con el port a linux... y me encontre con unos cuantos problemas...
1) tuve que escribir una nueva implementacion sobre la dlopen, ya que la maldita dlopen cuando uno hace una dll que usa otras dlls y pide un simbolo de la primera dll, la dlopen busca el simbolo en la dll creada y si no lo encuentra (aunque mas bien creo que retorna el primero cargado) en las subsiguientes... y no hay forma de decir, que no haga eso... y por ende muchas de las funciones declaradas por otros modulos eran vistas y ejecutadas por el principal... asi que tuve que parchar la dlopen, escribiendo un wrapper encima...
2) quizas parte del comportamiento anterior, una vez solucionado que solo importe los simbolos de la dll en curso, empece a probar y si bien ahora cargaba todo adecuadamente y el interprete hacias las cosas como debian ser, el maldito linker (o el modulo de runtime del operativo) asociaba todas las referencias a las tablas que se llamaban iguales pero eran locales (y exportables) al primero cargado desde una dll... (concretamente me refiero a las estructuras fixup, que son necesarias que cada una sea local)... yo se que diran que eso no se debe hacer, pero que va, si yo quiero trabajar en un ambito local exportable, porque el tipo tiene que asumir que yo quiero que la variable sea una sola?
Bueno, tras maldecir a linux (ya que windows se porto como un señorito frances)... me vi obligado a reeplantear y a modificar todo el sistema actual de dll, y publicacion de servicios, funciones, etc...
Si bien no es un gran cambio externamente, si tuve que escribir bastante...
bueno, ahora todos los simbolos que interactuan con el core de bennu, deben ser prefijados con el nombre del modulo + un "_". por ejemplo, supongamos que la lib libkey exportaba module_initialize, ahora debe exportar libkey_module_initialize (todo en minusculas, claro esta eso)... esto tambien obliga a que los accesos a variables ahora requieran un nuevo parametro, por ejemplo... un GLODWORD(a), ahora es GLODWORD(libkey, a)... libkey siguiendo el caso de la libkey, pero puede ser cualquier nombre de modulo y define el ambito de referencia... (fixups)
prepare macros para hacer un poco mas homogenea la cosa...
__bgdexport( module, variable/funcion)
por ejemplo
char * __bgdexport( libkey, modules_dependency )[] =
{
"libsdlhandler",
NULL
};
o
void __bgdexport( libkey, module_finalize )()
{
return;
}
espero sepan disculpar las molestias, pero todo esto es por el putisimo linux... maldito linux...
ahora tengo otro problema y es que la maldita sdl no me crea el surface de video... quizas el linux que tengo no es compatible con la version de sdl que tengo o vaya uno a saber... ya veremos que pasa...
Demas esta decir que si bien el cambio fue grande y violento, esto no afecta a los dcb ya compilados con la 7.5... siguen funcionando con las nuevas dlls...
Vaya Splinter, siento que linux te haya dado tantos problemas :(. En fin, aunque no escriba mucho, está bien ver que bennu avanza.
Supongo además que si andas ya con el port a linux es porque estás cerquita de la release.
En fin, ánimo y gracias por el curro.
hola, me laegra leerte nuevamente, luego del ultimo mail donde te mande una version de los fuentes del core, nunca supe mas nada de vos....
bien, yo diria muy cerca, aunque voy a dejar muchas cosas para luego de la release, como por ejemplo, las mejoras finales al render o mejor dicho el nuevo render optimizado (ya lo tengo diseñado, pero bueno, tengo que escribirlo)... por ahora esta mejorado, pero no son las mejoras finales... tambien optimizaciones en general y toda la normalizacion de los nombres de funcion a PREFIJO_funcion... (con compatibilidad a lo existente)...
otra capa grafica que trabaje directamente a nivel SDL, otra opengl... puf, hay mucho trabajo... mucho... pero bueno, todo eso despues de liberar la release actual (y tomarme un pequeño descanso)... que no falta mucho...
Jeje, perdona. Como me pediste que no comentara nada, lo estuve mirando y me callé :)
En fin, mucho ánimo, acaba con la release y date un descanso, que te lo has currado.
:)
Se agregaron 4 nuevas funciones a la mod_joy (thanks Sandman)
JOY_NUMHATS
JOY_NUMBALLS
JOY_GETHAT
JOY_GETBALL
Tambien por sugerencia de Sandman se optimizo la funcion abriendo los joysticks solo en el momento de inicializacion, ya que de todas formas la SDL solo los detecta cuando inicializa...
Bien, debo decir que los cambios de anoche sobre la version linux, dieron resultados positivos... sin tener que tocar nada mas que el tema de las malditas librerias dinamicas en linux, bennu funciona de maravillas, y ejecuta los mismos dcb compilados en windows...
Un exito...
El problema con la SDL era el maldito Suse, ni siquiera funcionaban los samples que vienen en la SDL... asi que ahora compile todo y probe en un DSL linux en una VM, chiquito y rapido... voy a hacer unas pruebas mas y luego subire los nuevos paquetes tanto de linux como de windows...
luego resta modulo scroll y modulo m7... a todo esto, interesa el modulo m7? alguien lo extrañaria si no fuera incluido?
PD: http://www.damnsmalllinux.org/index_es.html
SplinterGU:
"luego resta modulo scroll y modulo m7... a todo esto, interesa el modulo m7? alguien lo extrañaria si no fuera incluido?"
a ver, aunque el m7 no evolucione, esta bien que se quede como esta (sin bugs claro) por ser una forma distinta al 2d y al m8(3d) de hacer un paisaje/juego/etc.
Mi voto es que se quede.
Yo creo que esta bien que se quede. Pero que si se saca la release sin el modo 7 por ahora pues prefiero que salga antes la release y poder usar bennu que se demore mas la salida de bennu. Es solo una opinion. (Por cierto que no he visto el link a la release de bennu para linux, ¿soy yo o esque aun no ha salido?)
aun, no ha salido, ya que he tenido algunos problemas con dicha version, pero creo que se debe a faltas de .so en el operativo, tengo que debuguear, pero me pase toda la noche limpiando los "warnings" de compilacion y haciendo pruebas...
el tema es que funcionan ejemplos, como el de flic, scroll_test (tileado), pero no funcionan win-to-full, grbrowser (que es un browseador de graficos contenidos en un directorio haciendo miniaturas), ni un test de angulos, funcionar funcionan, pero no aprece nada en pantalla... pero tengo que entrar a debuguear el codigo a ver que pasa...
tampoco esta la nueva version windows... ya saldran los 2 paquetes...
esto de dormir 2-3 (ocacionalmente 4) horas por dia desde hace un mes, me esta matando... pero bueno, dejar temas inconclusos no me deja dormir...
Decir que soy un idiota es ser generoso...
Los ejemplos no funcionaban por las mayusculas/minusculas de los archivos... siempre recomiendo atencion a eso, y se me pasa a mi... :P
Me pase toda la noche recompilando, je, bueno, o vino demas...
igual quedan 2 temas, no aparecen los write y tampoco veo los draw... espero que no sea nada complicado de rastrear...
Sigue el consejo de arquimedes y date un baño. :D A veces se gana mas relajando y dejando la mente libre que intentando meter mas horas sin descansar. ;-)
Muchos animos, que yo tambien me he tenido que pegar temporadas de no dormir... y se pasa mal
Linux version 100% working!!!
El error con los write era que tenia mal prefijados los simbolos exportados por la libfont, los tenia como mod_font... :P
y luego corregi la implementacion glob sobre linux, ya habia hecho lo propio en la version windows, restaba la linux...
100% working, lo importante es que toda la logica elaborada no tuvo que ser modificada solo tema de exportacion y pavadas menores descriptas en este diario...
WIP8 Windows y Linux disponible
http://betatester.bennugd.org/betas
Le estoy echando un ojo, pero veo que en Ubuntu Intrepid (8.10, aún en desarrollo) funciona el ejemplo win_to_full. Sólo está el tema de las mayúsculas (el código hace referencia a globe8.PNG y el fichero el globe8.png). Pasa algo parecido con fondo_8.png.
La funcionalidad, eso sí, está bien. Voy a probar con código viejo, a ver qué tal :)
[Edito] Y va a unos 180fps con compiz activado en modo ventana.
si, corregir las mayusculas y minusculas, no lo hice en los ejemplos que subi al ftp... es cierto...
anda eliminando y poniendo cosas, con f1 tenes el help, y tambien hay cambios con la simple linea de f1-help o sin esta... los fps que consumen los textos sos horribles... pero bueno, ya se optimizara...
gracias por probar...
Sí, eso funciona sin problemas: incluso mover la ventana, que supongo que puede ser muy problemático.
El escalado también funciona.... En esa demo todo funciona sin problemas :)
Ese ahíiííííí!!!
Pues yo uso un Suse y el win-to-full no me va, aunque estoy seguro que es por un error estúpido mio. Básicamente al compilar me dice:
win-to-full.prg:2: error: Library "mod_proc.so" not found ("mod_proc")
cuando es evidente que la librería sí que está. He copiado todo el juego en la misma carpeta donde está el compilador pero da el mismo error...¿El setvars.sh influye en algo...?
Muchas gracias!!!
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):<path donde estan las librerias bennu>
o hay un archivo en el /etc que ahora no recuerdo como se llama que se pueden agregar los paths de las librerias dinamicas... lamentablemente en la mierda de linux, no se pueden cargar las librerias dinamicas especificando un path, el path debe estar registrado por el sistema...
si, fijate el setvars.sh, lo deje a modo de ejemplo...
osk, tienes que añadir el directorio bin a las variables de entorno LD_LIBRARY_PATH y PATH (el setvars.sh hace eso, pero para un path predefinido). En general el siguiente código funcionará, siempre que lo ejecutes desde el directorio "bin" donde estén los ejecutables de Bennu y las librerías:
export LD_LIBRARY_PATH=$(pwd):$LD_LIBRARY_PATH
export PATH=$(pwd):$PATH
Por cierto, que el ejemplo de los flic tira sin problemas también.
Echo de menos cabeceras para poder compilar mis librerías antiguas (o mejor, el código fuente :))
probaste el escalado, rotacion y moviento de los flics? me parecio interesante incluir esas caracteristicas...
Muchas gracias!!!!
Ahora funcionó de maravilla!!
Splinter: Todo va sin problemas, he tocado todas las teclas que pone en la ayuda :).
A primera vista, diría que has hecho un trabajo genial :)
gracias... se hizo esperar y dio mucho trabajo, no por lo complicado, sino por la cantidad de trabajo... y eso que todavia faltan muchas cosas por incluir y mejorar...
pues bien...
El juego Bloqueado (http://forum.bennugd.org/index.php?topic=157.0) tira sin problemas (he tenido que añadir unos mod_*, pero poco más).
Uno de los screenshots tiene un contador de fps:
(http://lh5.ggpht.com/josebagar/SM7RNyIXR4I/AAAAAAAAHgE/xW4bZid-hYc/s512/Pantallazo-bloqueado-2.png)
(http://lh3.ggpht.com/josebagar/SM7RNlUWZMI/AAAAAAAAHf8/7lZktzFdF1o/s512/Pantallazo-bloqueado-1.png)
Acabo de bajar la wip 8 para windows. Tengo problemas al compilar un proyecto que incluye una dll propia.
En la 7.5 funciona perfectamente bien:
player.inc:75:error:Undefined procedure ("check_side")
Check_side es una funcion de la dll.Dejo el codigo de la dll:
#include <stdio.h>
#include <bgdi.h>
#include <bgddl.h>
#include <math.h>
static int *Tiles;
static int Map_width;//ancho del mapa en columnas
static int Map_height;//altura del mapa en filas
static int aux;
static int bgd_collision_init (INSTANCE * my, int * params){
Tiles = (int *)params[0];
Map_width = params[1];
Map_height = params[2];
return 1;
}
int bgd_check_down(INSTANCE * my, int * params){
params[0] = (int)((params[0]+1)/32);
params[1] = (int)((params[1]-1)/32);
aux = (int)(params[2]/32)*Map_width;
for(;params[0] <= params[1];params[0]++){
if(Tiles[params[0]+aux]){
return -params[2]%32;
}else if(params[0] == params[1]){
return 0;
}
}
}
int bgd_check_up(INSTANCE * my, int * params){
params[0] = (int)((params[0]+1)/32);
params[1] = (int)((params[1]-1)/32);
aux = (int)(params[2]/32)*Map_width;
for(;params[0] <= params[1];params[0]++){
if(Tiles[params[0]+aux] == 1){
return 32-params[2]%32;
}else if(params[0] == params[1]){
return 0;
}
}
}
int bgd_check_side(INSTANCE * my, int * params){
params[0] = (int)((params[0]+1)/32);
params[1] = (int)((params[1]-1)/32);
aux = (int)(params[2]/32);
for(;params[0] <= params[1];params[0]++){
if(Tiles[aux+params[0]*Map_width] == 1){
if(params[3] == 0){
return -params[2]%32;
}else{
return 32-params[2]%32;
}
}else if(params[0] == params[1]){
return 0;
}
}
}
DLSYSFUNCS functions_exports[] = {
{ "COLLISION_INIT", "PII", TYPE_DWORD, bgd_collision_init },
{ "CHECK_DOWN", "III", TYPE_DWORD, bgd_check_down },
{ "CHECK_UP", "III", TYPE_DWORD, bgd_check_up },
{ "CHECK_SIDE", "IIII", TYPE_DWORD, bgd_check_side },
{ NULL , NULL , 0 , NULL }
};
Tambien quiero comentar que desde la 7.5 tengo este warning:
librender:2: warning: Variable redeclared ("alpha_steps")
Un saludo
tenes que prefijar functions_exports con el nombre de la dll, seguido de _, por ejemplo...
collision_functions_exports
lo del warning es solo un "warning" a nivel dlls, ignorarlo...
Perfecto.Ademas ya no esta el problema con el map_clear.Gracias.
Epa tragamanzanas en linux tambien compila y funciona perfectamente en bennu. Una cosa :D si no os quereis complicar para probar un juego:
for I in `ls mod_*`; do echo $I >> nombrejuego.imp; done;
y despues compilar y ejecutar.
PD: Esque no me queria complicar mirando cuales eran las librerias que debia meterle XD
PD2: enhorabuena!! al final dominaste al caballo!!! :D
seguimos trabajando...
correccion en reasignacion de ids strings reciclados, lo mismo para los mapas...
en el caso de las strings hacia que los textos bajan mas lento que en fenix... ahora esta corregido...
pronto subire nueva version...
Buenas.Encontre un posible pequeño bug. Si haces un define, que termine en ; y sin dejar espacio haces un comentario:
#define cosa a;//comentario
o si no pones el ;
#define cosa a//comentario
Tenes este error en el compilador:
La instruccion 0 en "0x7c920f29" hace referencia a la memoria en "0x00000000".La memoria no se puede "read".
Se soluciona dejando el espacio.El segundo caso es poco comun pero el primero no tanto.
Edito:
Pongo la linea en cuestion por que da otros problemas:
#define set_hitTester(a,b,c,d,e) a._relx = b;a._rely = c ;a.size_x = d*10;a.size_y= e*10;a._attack = 0
Aca la linea en la que lo uso:
(linea 339) set_hitTester(hitTester_id,20,-30,10,20);
Si multiplico d*10 y e*10 no compila: Invalid Character ("HITTEST") (linea 339)
pero si multiplico solo uno compila bien.
Hay otro error que no he podido recrear, con las mismas lineas, pero la salida era: Unknow identifier ("_r") (linea 339)
lo cual no tiene ningun sentido.
los voy a revisar... y te digo... gracias...
Quote from: Packo_z007 on September 16, 2008, 12:52:01 AM
Buenas.Encontre un posible pequeño bug. Si haces un define, que termine en ; y sin dejar espacio haces un comentario:
#define cosa a;//comentario
o si no pones el ;
#define cosa a//comentario
Tenes este error en el compilador:
La instruccion 0 en "0x7c920f29" hace referencia a la memoria en "0x00000000".La memoria no se puede "read".
Se soluciona dejando el espacio.El segundo caso es poco comun pero el primero no tanto.
Edito:
Pongo la linea en cuestion por que da otros problemas:
#define set_hitTester(a,b,c,d,e) a._relx = b;a._rely = c ;a.size_x = d*10;a.size_y= e*10;a._attack = 0
Aca la linea en la que lo uso:
(linea 339) set_hitTester(hitTester_id,20,-30,10,20);
Si multiplico d*10 y e*10 no compila: Invalid Character ("HITTEST") (linea 339)
pero si multiplico solo uno compila bien.
Hay otro error que no he podido recrear, con las mismas lineas, pero la salida era: Unknow identifier ("_r") (linea 339)
lo cual no tiene ningun sentido.
revise estos errores y a mi no me pasan, seguro tienen que ver con la expansion del comando, pero no pude reproducirlos, los use, pero no paso nada... tiene sentido que me digas que esto te paso en la wip2, pero en estas versiones lo dudo, porque recuerdo claramente haber corregido el tema del con/sin espacio...
estuve trabajando en los bugs de rotaciones y en acelerar el dibujado en pantalla...
el eterno error de las rotaciones ya esta corregido... se debia principalmente a un problema de precision de calculos al usar ints, ahora pase algunos campos a float, elimine codigo innecesario, pero supongo que ahora algunos casos el dibujado podria ser mas lento... aun queda una diferencia de desplazamiento de 1 pixel con respecto al grafico sin rotar y el grafico rotado, todavia tengo que hacer un analisis mas detallado y ver si lo que falla es el blit rotativo, el blit normal, o el calculo de los vertices (quizas esto tambien sea parte de otro problema que tengo y explicare mas abajo en este post)...
tambien acelere el tema de los dibujado de textos en pantalla, en los casos de numeros enteros, hice una nueva funcion que es un 800% mas rapida la conversion de numeros a texto con respecto a la funcion de C... (lo que no quiere decir que los textos se dibujen un 800% mas rapido, pero todo cuenta)
tambien en la version actual se me escapo algo, que al restaurar el fondo de pantalla y si el dump es = 0, restaura siempre el fondo, por eso no hay una mejora significativa con respecto a versiones anteriores que si lo hacen, aun asi, el rendimiento en la mayoria de los casos es mejor, con este cambio nuevo, en circunstancias de resposo obtuve un rendimiento de 102000 fps cuando antes obtenia con la misma prueba unos 24000 maximo... en casos de varios procesos en pantalla, y uno con actualiaciones, obtuve rendimientos 3500fps donde antes eran 670... pero me esta quedando alguna basura en el video que tengo que corregir y no logro detectar aun la cirscuntancia, pero mientras estaba escribiendo este texto se me ocurrio posibles motivos...
Felicitaciones Splinter, esto se ve muy bien. Que bien que ya está lo de los ángulos. Y la velocidad que has alcanzado me impresiona bastante. Felicidades. :)
Si, tampoco voy a mentir diciendo que esas velocidades son en todos los casos, se logran mejoras de rendimiento cuando hay procesos estaticos (sin cambio en ningun aspecto) y procesos con cambios frecuentes... si todos los procesos se mueven o se actualizan constantemente no hay una mejora tan significativa, pero bueno, supongo que esto supondra una mejora en la mayoria de los casos...
Quote from: SplinterGU on September 17, 2008, 02:40:32 PM
estuve trabajando en los bugs de rotaciones y en acelerar el dibujado en pantalla...
el eterno error de las rotaciones ya esta corregido... se debia principalmente a un problema de precision de calculos al usar ints, ahora pase algunos campos a float, elimine codigo innecesario, pero supongo que ahora algunos casos el dibujado podria ser mas lento... aun queda una diferencia de desplazamiento de 1 pixel con respecto al grafico sin rotar y el grafico rotado, todavia tengo que hacer un analisis mas detallado y ver si lo que falla es el blit rotativo, el blit normal, o el calculo de los vertices (quizas esto tambien sea parte de otro problema que tengo y explicare mas abajo en este post)...
tambien acelere el tema de los dibujado de textos en pantalla, en los casos de numeros enteros, hice una nueva funcion que es un 800% mas rapida la conversion de numeros a texto con respecto a la funcion de C... (lo que no quiere decir que los textos se dibujen un 800% mas rapido, pero todo cuenta)
tambien en la version actual se me escapo algo, que al restaurar el fondo de pantalla y si el dump es = 0, restaura siempre el fondo, por eso no hay una mejora significativa con respecto a versiones anteriores que si lo hacen, aun asi, el rendimiento en la mayoria de los casos es mejor, con este cambio nuevo, en circunstancias de resposo obtuve un rendimiento de 102000 fps cuando antes obtenia con la misma prueba unos 24000 maximo... en casos de varios procesos en pantalla, y uno con actualiaciones, obtuve rendimientos 3500fps donde antes eran 670... pero me esta quedando alguna basura en el video que tengo que corregir y no logro detectar aun la cirscuntancia, pero mientras estaba escribiendo este texto se me ocurrio posibles motivos...
Uh maestro, por fin alguien se digno a ver esos errores!! son añejos!! XD
A proposito, no entiendo eso de q cuando cambias la resolucion el fondo no se dibuja.
cuando hacias set_mode, el fondo se perdia, ahora solo se pierde cuando se hace un set_mode de dimensiones o profundidad de color diferente... en un principio habia hecho que no se pierda, pero en algunas combinaciones no es correcto ni conceptual ni practicamente, asi que solo se mantiene en casos de por ejemplo, querer cambiar a full_screen, esperar vsync, usar doublebuffer, scale, etc...
Quote from: SplinterGU on September 17, 2008, 02:27:15 PM
revise estos errores y a mi no me pasan, seguro tienen que ver con la expansion del comando, pero no pude reproducirlos, los use, pero no paso nada... tiene sentido que me digas que esto te paso en la wip2, pero en estas versiones lo dudo, porque recuerdo claramente haber corregido el tema del con/sin espacio...
En realidad me pasa usando la wip 8. Tengo problemas en los defines del principio.Quizas sea error mio. Fijate que si al primer define le pones un comentario se cuelga el compilador. Link del source
http://rapidshare.com/files/146124464/Bin-WIP8.rar.html
no compila sin cambiar el define de la linea 6 (RPG.prg)
y el define ese es usado en el Player.inc linea 346.
ahora si, no me da los mismos errores, pero me da errores, lo voy a revisar... gracias...
Quote from: Packo_z007 on September 17, 2008, 07:51:03 PM
Quote from: SplinterGU on September 17, 2008, 02:27:15 PM
revise estos errores y a mi no me pasan, seguro tienen que ver con la expansion del comando, pero no pude reproducirlos, los use, pero no paso nada... tiene sentido que me digas que esto te paso en la wip2, pero en estas versiones lo dudo, porque recuerdo claramente haber corregido el tema del con/sin espacio...
En realidad me pasa usando la wip 8. Tengo problemas en los defines del principio.Quizas sea error mio. Fijate que si al primer define le pones un comentario se cuelga el compilador. Link del source
http://rapidshare.com/files/146124464/Bin-WIP8.rar.html
no compila sin cambiar el define de la linea 6 (RPG.prg)
y el define ese es usado en el Player.inc linea 346.
Bien, costo pero salieron, eran 2 bugs, referentes a los defines... uno era un bug viejo y el otro era nuevo...
el error viejo se debia a que solo funcionan bien expansiones hasta 128bytes, ya que el expand hacia mal el calculo de la relocacion del espacio para la expasion del define.
el error nuevo, era que no se descartaban bien los comentarios en la expansion de defines...
luego subire una nueva version del compilador, ahora me voy a dormir un ratito... no doy mas...
gracias por el reporte...
No voy a subir nueva version de momento... para solucionar tu problema por ahora te recomiendo no hagas defines largos... y que no pongas comentarios en la misma linea del define... en unos dias sacare nueva version cuanto tenga depurado el tema del dibujado que veo alguna basura (parece ser que ahora es solo con los textos) en la nueva version optimizada...
Ok, no hay problema.Los defines no son de vida o muerte.
gracias, por cierto, esta muy bueno tu proyecto, muy simpaticos los personajes y muy buena animacion...
la verdad prefiero esperar un poco mas para la nueva version, salvo que sea un error que no deje progresar en los proyectos, asi agrego el scroll, corrigo un par de cosas que me gustaria tener resueltas ahora, y luego si sacar la primer release con fuentes... aunque se que luego hay muchas cosas por mejorar, corregir y completar...
Gracias. Sin dudas el punto mas flojo es el consumo de recursos, pero por el momento trato de tener un codigo mas ordenado y facil de entender.La optimizacion vendra despues.
Hola.Encontre unos problemas con los operadores bitwise uno de los operandos supera MAX_int. El primer caso siempre devuelve 0.El segundo 2147483903.
Program Ejemplo;
private
dword var1;
dword var2 = 2147483650 ;
end
begin
full_screen = false;
set_fps(24,1);
set_mode(640,480,16);
var1 = (var2 & 255);
say(var1);
end
Program Ejemplo2;
private
dword var1;
dword var2 = 2147483904;
end
begin
full_screen = false;
set_fps(24,1);
set_mode(640,480,16);
var1 = (var2 | 255);
say(var1);
end
el problema no esta en los bitwise, ni tampoco es un problema, el problema esta en el uso... en ambos casos estas superando el valor de un int, pero sin embargo escribis el numero como un int... para casos dword, los numeros para una correcta interpretacion deben ser escritos en hexadecimal... mira el siguiente codigo...
Program Ejemplo;
import "mod_say";
private
dword var1;
dword var2 = 2147483650 ;
end
begin
var1 = (var2 & 255);
say(var1);
var2 = (dword)2147483904;
say(var2);
var1 = ( var2 | 255);
say(var1);
var2 = 80000002h ;
var1 = (var2 & 255);
say(var1);
var2 = 080000100h;
say(var2);
var1 = ( var2 | 255);
say(var1);
end
/*
max_int: 2147483647
*/
vamos a ver si puedo hacer algo al respecto
Eso no sabia.. Muchas gracias. Me gustaria comentar, aunque posiblemente ya lo hayas notado, que si el numero hexadecimal comienza con una letra, lo considera una variable y no compila.. pero se soluciona con un 0 adelante.¿Esto va a seguir asi verdad?
otro ejemplo
Program Ejemplo;
import "mod_say";
private
dword var1;
dword var2 = 2147483650 ;
end
begin
var1 = (var2 & 255);
say(var1);
// var2 = 2147483904;
var2 = 2147483647 + 257;
say(var2);
var1 = ( var2 | 255);
say(var1);
var2 = 80000002h ;
var1 = (var2 & 255);
say(var1);
var2 = 080000100h;
say(var2);
var1 = ( var2 | 255);
say(var1);
end
/*
max_int: 2147483647
*/
la norma es que si empieza con una letra es variable, y que los numeros deben empezar con numeros...
para mas datos...
si compilamos este programa en C
int main(int argc, char * argv[])
{
double f = 2147483904;
int i = f;
int ii = ( int )f;
printf ("%f\n", f);
printf ("%u %x\n", i, i);
printf ("%u %x\n", ii, ii);
}
da los siguientes resultados (acordes a lo que da bennu):
2147483904.000000
2147483648 80000000
2147483648 80000000
Bennu usa double para obtener el numero y luego lo convierte a int usando el casteo...
numeros fijos que superan el valor del dato es un tema delicado...
ya se cual es el problema, el problema es que desde C, por lo menos desde GNUC, al castear un float que supera el valor del tipo de dato esperado, lo limita al valor maximo segun el signo de este, asi que lo solucione no usando float/double para tomar el dato numerico, en realidad uso los 2 a la vez, un float para floats y un int para ints...
y ahi parece funcionar adecuadamente, gracias...
No se si sera un bug del gcc o por norma es asi... pero bueno, es un poco problematico ese comportamiento... ahora me pregunto en que otros tantos lugares esto podria estar afectando...
Siguiendo el tema de las rotaciones, trabaje un poco mas en el tema, y ya quedo bastante preciso... tambien corregi un tema de marcado de dirtyrects, llegando a los limites de un rectangulo dirty, no era muy preciso y limpiaba/marcaba uno de los rects limitrofes, ya esta solucionado... por otro lado, corregi el temas de los espejados (MIRROR) estos no tenian en cuenta los angulos, solo hacian mirror de la textura... ya esta corregido... ahora el mirror es mirror... como debio ser siempre... ahora es posible crear de esta forma el efecto visto en muchos juegos de un piso espejado o un espejo en si... quizas esto provoque problemas a algunos juegos ya hechos, pero bueno, es era un bug...
Quote from: SplinterGU on September 20, 2008, 05:34:25 PM
Siguiendo el tema de las rotaciones, trabaje un poco mas en el tema, y ya quedo bastante preciso... tambien corregi un tema de marcado de dirtyrects, llegando a los limites de un rectangulo dirty, no era muy preciso y limpiaba/marcaba uno de los rects limitrofes, ya esta solucionado... por otro lado, corregi el temas de los espejados (MIRROR) estos no tenian en cuenta los angulos, solo hacian mirror de la textura... ya esta corregido... ahora el mirror es mirror... como debio ser siempre... ahora es posible crear de esta forma el efecto visto en muchos juegos de un piso espejado o un espejo en si... quizas esto provoque problemas a algunos juegos ya hechos, pero bueno, es era un bug...
Bueno, sigo teniendo problemas con el blitter, creo que este capricho mio por aprovechar el que ya existe es un error, ya que no es tan preciso... ahora si le pongo size, cuando es 0 el angulo, y cuando hay ambos mirror, el grafico se corrompe... bueno, ya vere que pasa, pero me esta consumiendo mas tiempo del esperado...
Gran trabajo el que estas haciendo. Tomate un descanso que te lo mereces ;)
En el site (Betas) hay 2 nuevos parches... que corrigen varios temas, como mapas, actualizaciones en pantalla, dirtys, files, strings...
nota, no usar librender por el momento, o si se usa, tener en cuenta que hay problemas con los fonts de 1bpp, esto se debe a un error en el blit de video con mapas de 1bpp, ya esta corregido, pero como el blitter todavia no esta al 100% sugiero no usarlo si se usan fonts del sistema para imprimir textos...
Nueva wip9 disponible...
Se incluyen todos los fix a los bugs reportados, y otros cambios mas, entre los que destacan:
- fpg_save o save_fpg, con soporte de 8, 16 y 32 bits... (idem map_save o save_map)
- correccion a las rotaciones con escalado. bugs conocidos, al rotar o escalar, se le agrega un pixel de ancho a al dibujo, en mapas de 1pixel (ancho o alto) puede que en ocaciones no se dibuje al rotarlo o escalarlo. en cuento a todo lo demas referente al bliteo se mejoro.
- mejora de velocidad del sistema en reposo (sin cambios en pantalla o incluso con algunos cambios)
- mejora en el render de textos
- correcccion en el modulo de graficos png
- 32 bits parcial, se permite cargar mapas de 32 bits, setear modo de video y algunas operaciones mas, todavia no esta disponible el bliteo y tampoco operaciones que impliquen el uso del blitter
y algunos otros mas que no recuerdo ahora mismo...
nota adicional: como la version linux nadie la esta probando o por lo menos no hay feedback al respecto, no generare version de momento... luego saldra una version si empiezan a usarla activamente o cuando salga la version final...
saludos, y gracias a todos por colaborar con los reportes de bugs.
EDIT: AHHH, importantisimo, se corrigio el sistema de mirror... ahora tiene en cuenta el angulo, y se puede hacer un mirror real, no como antes que era solo de la textura...
Revisen la carpeta samples, hay nuevos ejemplos...
Que ritmo llevas, impresionante. Ahora mismo la bajo, gracias! :)
Veo que no has incluido la libreria libblit.dll, significa que ya no la usas o la has implementado en otra?
Edit: acabo de probar y sin ella el compilador no funciona.
se me paso...
subiendo, gracias por el aviso...
Se siguen añadiendo cosas nuevas a Bennu y mejorandolo, cosa que es genial, pero porque aun no estan el mod_scroll y el mod_m7??? tanto errores o problemas tienen que no se pueden incluir aun???
Gracias por la nueva wip.
no estan porque habia que corregir errores, y scroll asi como esta no es posible meterla en bennu, porque es incompatible con el nuevo sistema de optimizacion de procesos... ademas que tienen errores...
la m7, creo que nunca funciono correctamente, y para ser sincero no quiero lidiar con algo obsoleto como la m7... prefiero en todo caso pensar en un nuevo modulo 3d, usando opengl...
m7 no la incluire...
de nada, es un placer...
por otro lado, el scroll es lo proximo que hare, creo que la version actual ya tiene todos los cambios nuevos bastante estables...
el soporte a 32bits por ahora quedara a medio hacer, no estara completo en la primera version, por lo menos esos son mis plantes de momento... quizas luego me emociono y lo hago, pero por el momento no lo tengo en planes... asi que no te preocupes, no se agregaran muchas mas cosas... a pesar de tener muchos agregados y mejoras planificadas...
quiero agregar, que muchas de las cosas que salieron en esta wip, son correcciones de errores, y agregados que por necesitar tocar alguna parte asociada a ese codigo, y siendo mas complejo agregar luego las funcionalidades, entonces las pongo cuando paso por ese fuente por algun motivo...
Yo creo que podrías distribuir la m7 aunque ya no la modifiques. Por si alguien quiere adaptar su viejo código en Div o Fenix que usa ese modo. Bueno eso es lo que yo pienso, esta claro que el proyecto de Bennu es tuyo y tu decides que debe tener o no. Es solo una opinión. Saludos y gracias por el esfuerzo que realizas!
ya se vera eso en el futuro...
Gracias por la wip. ¿Al final en que quedo el tema del load_fpg? Me refiero a eso de que el primer fpg cargado es 1 y no 0.
es 0... tambien 0 es la libreria del sistema, pero los graficos a partir del 1000...
Me parece que el problema de esto es que cuando descarguemos el primer fpg cargado tambien se van a descargar los graficos creados con new_map y funciones por el estilo. La verdad es que me parecia correcto que el primero cargado tenga el codigo 1. Pero bueno.. es solo una opinion.
no, no... los del fpg son del 1-999... los demas son del sistema... estan en la misma libreria pero son diferentes...
es que de lo contrario deja de funcionar lo que ya funcionaba...
A ver si entiendo ¿unload_fpg(0) descarga los graficos 1-999? ¿los graficos a partir del 1000 se descargan cuando termina la ejecucion del programa?
De ser asi.. se podria incluir un unload_fpg(-1) para descargar los del 1000 en adelante?
eso no seria factible, porque arriba de los 999, no solo estan los mapas creados con load_map, map_new, etc, sino que estan los font del sistema, los fonts cargados por los usuarios, y cualquier grafico interno, o sea, que no se puede hacer eso, si alguien quiere descargar graficos que cargo individualmente debe hacerlo de la misma forma...
Ahora me queda claro.Gracias.
;)
de nada...
como van las pruebas con esta version? me gustaria tener feedback... y de esta forma saber si no hay reportes de bug porque no la estan usando o porque no se encuentran...
siempre es bueno el feedback hacia ambos lados... ayuda a mover la maquinaria...
gracias a todos...
La baje y la probe muy poco.. desde ayer que estoy con el tema de la wiki. Lo que si quiero comentar es que hay un bug (seguramente en el juego) que descubri con esta version (tengo que fijarme si tambien pasa en la wip 8 ).
En el archivo de salida de error obtengo:
^C
Que significa esto?
control+c...
estas actualizando la wiki de bennu? no se si esta realmente operativa, creo que es basura, me parece que fueron intentos pero no va, creo que hay que borrarla... no se, eso sabe sandman, pero en el hosting hay muchos directorios con de wiki, con nombres como FAIL y cosas raras...
Pero que significa que el interprete salga y deje en el log Control+C?
Sip.. Tiene mucha informacion.Y ya arrgle el menu (medio que lo ate con alambre pero funciona correctamente) pero nose como editarlo. Lo que no puedo hacer es editar la portada.
http://wiki.bennugd.org/index.php?title=Category:Index
wait... no se si sirve ese wiki, dejame consultar, hasta donde sabia habia que borrarlo... estaba mal instalado...
no tengo idea de eso del ^C, si me pasas un ejemplo lo podria ver...
y disculpa por no responder antes, hace un par de horas que hay un problema global de conectividad en argentina con mi provider de internet... y ahora mismo esta es la unica pagina a la que me puedo conectar... (gracias a dios), ni google me va...
Eso del control C lo deje pasar. Nose por que aparecia, pero el juego se quedaba por un error mio.
Modulo de scroll activo...
Se corrigen comportamientos de region1 y region2 dentro del scroll, o sea, area de no scroll y area de movimiento maximo con camaras...
voy a ver si incluyo el m7...
Esto se pone interesante, a ver si pronto se queda estable por completo.
WIP10 lista para descarga...
Se incluye...
- mod_mouse
- mod_scroll
- libscroll
y varios fixes extra...
no olviden bajar el test de scroll...
No sabes que alegría me ha dado leer este post, esperaba con muchas ganas el scroll. Ahora mismo me la bajo y el sample también. Muchas gracias Splinter, de verdad, GRACIAS!!! :)
Excelente noticia. Sobre el m7, creo que sólo sería para la nostalgia, lo más importante es el scroll.
Una pregunta ¿Las librerías de m8 no son parte oficial del bennu? :)
Bueno, pues a descargar la nueva versión y ver lo que ha cambiado.
Otra pregunta, me la quería guardar, pero mejor la saco: ¿el path_find sigue teniendo la distancia de búsqueda definida, o se amplió la distancia de búsqueda, o qué pasó con esa función? :)
Gracias por todo. ;)
la m7 la tengo lista, y funciona, pero me da problemas al salir del modo 7, se cae el ejecutable... no quiero perder tiempo en esto, yo sabia que habia problemas con este modulo...
m8ee no es parte oficial de bennu...
a que te referis con eso de la distancia de busqueda? yo no veo ningun limite en la libreria... te estas refiriendo a la pathfind de bennu o alguna de coldev?
Lo he probado por encima (aun tengo que probar bien la wip10) noto varias cosas:
1. En los FROM hay que ponerles ";" para que compile, a parte de eso compila todo el codigo sin tocar mas.
2. Uso scroll y noto que al hacer un: map_xput(file,102,graph,x,y,angle,60,0); no lo veo en el fondo del scroll como lo veia en la WIP2.
3. La consola debug no sale con ALT+C, se ha cambiado la combinacion de teclas y no me he enterado??? He probado poner -d, -g en compilador e interprete pero no consigo activar la consola en ejecucion.
Repito que aun tengo que testear bien todo con la wip10
1) si
2) necesito un ejemplo, eso deberia funcionar
3) no hay consola de debug, solo debug por log
Quotea que te referis con eso de la distancia de busqueda? yo no veo ningun limite en la libreria... te estas refiriendo a la pathfind de bennu o alguna de coldev?
no estoy seguro que wip utilizaba, creo que era el wip 2, y cuando utilizaba path find a una distancia mayor a 600 por ejemplo (el punto a buscar estaba a una distancia mayor a 600) no encontraba nada, no me daba puntos. Este era uno de mis problemas con el bomberman que estaba haciendo, por eso lo dejé en espera. Sin embargo no eh tenido tiempo de probar la función actual. La probaré y luego te digo ¿ok?.
- Solucionado el tema con la m7... ya hay m7 disponible...
pronto para descarga...
wip10a disponible para descarga...
- fix reportado al cambiar el grafico a 0 en un proceso que hacia que este desaparezca
- modulo m7
Program Pruebas;
Global
int fpg;
Begin
set_mode(320,200,16);
ctype=c_scroll;
fpg=load_fpg("test.fpg");
start_scroll(0,fpg,1,0,0,0);
// SI EN VEZ DE USAR EL "START_SCROLL" PONGO EL "PUT_SCREEN" NO VEO EL "GRAPH" ENCIMA DE EL.
//put_screen(fpg,1);
// Con este grafico lo hace bien
// graph=new_map(10,10,8);
// Con este grafico lo hace mal
graph=new_map(10,10,16);
map_clear(fpg,graph,rgb(255,255,255));
x=160;
y=100;
While (NOT key(_esc))
IF (key(_right))
x+=5;
map_xput(fpg,1,graph,x,y,angle,60,0);
END
IF (key(_left))
x-=5;
map_xput(fpg,1,graph,x,y,angle,60,0);
END
IF (key(_down))
y+=5;
map_xput(fpg,1,graph,x,y,angle,60,0);
END
IF (key(_up))
y-=5;
map_xput(fpg,1,graph,x,y,angle,60,0);
END
Frame;
End
End
Bueno con ese codigo y probando las funciones de los "comentarios" se puede reproducir el efecto que me pasa en el scroll, aunque tambien he visto que al hacer un PUT_SCREEN no veo el GRAPH para moverlo por la pantalla.
PD: "test.fpg" es el mismo que el del ejemplo "scroll.prg"
a ver... el proceso es de tipo c_scroll, por ende, si no haces start_scroll, el grafico no debe verse... entonces el comportamiento esta perfecto...
lo que veo mal es que al usar el mapa de 8 que decis va bien, deja una estella... que no deberia dejar... o sea, el que decis va bien, esta mal... y el de 16 va bien...
si el proceso es de tipo c_scroll no debe verse si no tenes start_scroll...
EDIT:
ahhh, ya veo, el map_xput...
claro, esta perfecto que no funcione... no se puede poner sobre un mapa de 8 bits graficos de 16 bits...
el ejemplo funciona correctamente... no hay bugs...
si se necesita alguna aclaracion mas simple, "ask me"
gracias.
fix win32-wip10a1.rar disponible para descarga, soluciona el problema de la z, mencionado unos posts atras...
ya empezamos con las pruebas a 32 bits...
debo decir que sobre escritorio de 32 bits, render de 32 bits tiene mejor performance que 16 bits... lo mismo para escritorio de 16 y graficos de 16...
bueno, vamos a los resultados...
pruebas con ablend y sblend...
donde antes en 16 bits daba 240 fps, ahora esta rondando los 870 fps...
en 32 bits va un poco mas lento, unos 710 fps... pero bueno, es satisfactorio, y 32 bits es una version experimiental, con casi nada de optimizaciones...
asi esta la cosa...
B-O.......| Dioooooxxxxxxxx esto pinta muy bien, pardiez haber si acabo con mi dichosa herramienta en delphi, y me pongo a probar la wip10 y pico ya.
Splinter como cargo graficos de 32 bits? Con load_png seteando el modo de video en 32 los carga como de 16.
Edit: Por lo menos es eso lo que devuelve graphic_info.. Ademas no puedo visualizar las imagenes.
Todavia tengo que ver de que forma hacer para cargar png como 32 bits y no romper la compatibilidad con lo actual, que es cargar png de 24bits como si fueran de 16bits... y esta forma no puede ser por el modo de video, ya que la carga de graficos debe ser independiente de modo de video seleccionado... por ahora me inclino a un nuevo parametro que defina la profundidad del mapa a cargar... o una nueva funcion, quizas load_png32... (aunque esta ultima no me gusta mucho), no se... si se les ocurre alguna forma mejor, acepto sugerencias...
Visualizacion, solo en mi version interna... no funciona completamente todas las combinaciones aun... es completamente experimental...
Me parece mejor una nueva función para cargar los gráficos de 32 que añadir un parámetro más a todas las funciones de map existentes, aunque, que sabre yo...
La verdad es que me parece que lo mas comodo seria que dependa del modo de video.. pero si no se puede me inclino mas por un parametro opcional. Me parece mas prolijo.
el parametro de ser agregado seria opcional... no es requerimiento, sino opcional... si no esta se comportaria como hasta ahora...
Quote from: Packo_z007 on September 29, 2008, 10:26:13 PM
La verdad es que me parece que lo mas comodo seria que dependa del modo de video.. pero si no se puede me inclino mas por un parametro opcional. Me parece mas prolijo.
no es que no se pueda hacer, pero en esta version me preocupe porque los graficos no esten restringidos al modo de video actual, para de esta forma poder manipular mapas de cualquier resolucion sin preocuparse por conversiones automaticas y cosas raras segun el modo de video, por ejempo, para un conversor de png a fpg... o cualquier manipulacion de imagenes...
Bueno.. podrias hacer que los graficos se carguen en el modo de video actual con el load_png comun y corriente.. y poner un parametro opcional para cargarlos con una profundidad diferente.
Program Pruebas;
Global
int fpg1;
int fpg2;
Begin
set_mode(320,200,8);
// CARGAMOS VARIOS FPG EN EL JUEGO
fpg1=load_fpg("test.fpg");
fpg2=load_fpg("test.fpg");
// INICIAMOS UN SCROLL CON UN FPG QUE NO SEA EL "PRIMERO" CARGADO
start_scroll(0,fpg2,1,0,0,0);
graph=new_map(10,10,8);
// SEGUN LA FENIXWIKI MAP_XPUT SOLO SE PUEDE UTILIZAR EN UN MISMO FPG Y DICE USAR "MAP_CLONE"
// PARA ESTOS CASOS, AUN ASI PARECE NO FUNCIONAR EL MAP_XPUT
graph=map_clone(0,graph);
map_clear(0,graph,rgb(255,255,255));
say(fpg1);
say(fpg2);
x=160;
y=100;
While (NOT key(_esc))
IF (key(_right))
x+=5;
map_xput(fpg2,1,graph,x,y,angle,60,0);
END
IF (key(_left))
x-=5;
map_xput(fpg2,1,graph,x,y,angle,60,0);
END
IF (key(_down))
y+=5;
map_xput(fpg2,1,graph,x,y,angle,60,0);
END
IF (key(_up))
y-=5;
map_xput(fpg2,1,graph,x,y,angle,60,0);
END
Frame;
End
End
Este codigo si no me equivoco deberia dejar un rastro.
Solo funciona bien (el cuadradito blanco deja un rastro tras de si) si eliminamos la linea: "fpg1=load_fpg("test.fpg");"
Habia otro tema de problemas con los fpg, el numero de graficos y tal, no tendra nada que ver???
PD: El "test.fpg" sigue siendo el del ejemplo "scroll.prg", que es un fpg de 8bits.
---------------------------------
Con respecto a lo que hablais de la profundidad de color....
Seria logico que si tienes seteado a "set_mode(640,480,16)" no te dejara cargar FPG/MAP/PNG de 32Bits, asi bennu no tendria que cargar por ejemplo uno de 24Bits como si fuera uno de 16Bits no???
no, no deberia dejar nada... el funcionamiento es correcto... ya que estas haciendo un map_xput sobre fpg2 con un grafico que no existe en fpg2... tenes 2 formas de que esto te de el resultado que vos esperas...
forma 1 (usando fpg_add)
Program Pruebas;
#ifdef COMPILER_VERSION
import "mod_key";
#endif
#ifdef __VERSION__
import "mod_say";
import "mod_wm";
import "mod_video";
import "mod_screen";
import "mod_map";
import "mod_text";
import "mod_scroll";
#else
#ifdef COMPILER_VERSION
import "mod_sdlevthandler";
#endif
#endif
Global
int fpg1;
int fpg2;
Begin
set_mode(320,200,8);
// CARGAMOS VARIOS FPG EN EL JUEGO
fpg1=load_fpg("test.fpg");
fpg2=load_fpg("test.fpg");
// INICIAMOS UN SCROLL CON UN FPG QUE NO SEA EL "PRIMERO" CARGADO
start_scroll(0,fpg2,1,0,0,0);
graph=new_map(10,10,8);
// SEGUN LA FENIXWIKI MAP_XPUT SOLO SE PUEDE UTILIZAR EN UN MISMO FPG Y DICE USAR "MAP_CLONE"
// PARA ESTOS CASOS, AUN ASI PARECE NO FUNCIONAR EL MAP_XPUT
graph=map_clone(0,graph);
map_clear(0,graph,rgb(255,255,255));
fpg_add(fpg2,10,0,graph);
say(fpg1);
say(fpg2);
x=160;
y=100;
While (NOT key(_esc))
IF (key(_right))
x+=5;
map_xput(fpg2,1,10,x,y,angle,60,0);
END
IF (key(_left))
x-=5;
map_xput(fpg2,1,10,x,y,angle,60,0);
END
IF (key(_down))
y+=5;
map_xput(fpg2,1,10,x,y,angle,60,0);
END
IF (key(_up))
y-=5;
map_xput(fpg2,1,10,x,y,angle,60,0);
END
Frame;
End
End
forma 2 (usando map_xputnp)
Program Pruebas;
#ifdef COMPILER_VERSION
import "mod_key";
#endif
#ifdef __VERSION__
import "mod_say";
import "mod_wm";
import "mod_video";
import "mod_screen";
import "mod_map";
import "mod_text";
import "mod_scroll";
#else
#ifdef COMPILER_VERSION
import "mod_sdlevthandler";
#endif
#endif
Global
int fpg1;
int fpg2;
Begin
set_mode(320,200,8);
// CARGAMOS VARIOS FPG EN EL JUEGO
fpg1=load_fpg("test.fpg");
fpg2=load_fpg("test.fpg");
// INICIAMOS UN SCROLL CON UN FPG QUE NO SEA EL "PRIMERO" CARGADO
start_scroll(0,fpg2,1,0,0,0);
graph=new_map(10,10,8);
// SEGUN LA FENIXWIKI MAP_XPUT SOLO SE PUEDE UTILIZAR EN UN MISMO FPG Y DICE USAR "MAP_CLONE"
// PARA ESTOS CASOS, AUN ASI PARECE NO FUNCIONAR EL MAP_XPUT
graph=map_clone(0,graph);
map_clear(0,graph,rgb(255,255,255));
say(fpg1);
say(fpg2);
x=160;
y=100;
While (NOT key(_esc))
IF (key(_right))
x+=5;
map_xputnp(fpg2,1,0,graph,x,y,angle,60,60,0);
END
IF (key(_left))
x-=5;
map_xputnp(fpg2,1,0,graph,x,y,angle,60,60,0);
END
IF (key(_down))
y+=5;
map_xputnp(fpg2,1,0,graph,x,y,angle,60,60,0);
END
IF (key(_up))
y-=5;
map_xputnp(fpg2,1,0,graph,x,y,angle,60,60,0);
END
Frame;
End
End
con respecto a los mapas 32, la idea como ya dije es que siempre se pueda cargar cualquier grafico independiente del modo de video, y uno tenga libertad luego para usarlo a su antojo...
Luego miro las propuestas que me comentas a ver si me sirven, pero entonces... porque ese codigo si deja un "rastro" en Bennu WIP2??? era un bug???
ummm... ahora que lo pienso, si el codigo del grafico es mayor a 999 deberia tomarlo del fpg 0... aunque quizas no es tan correcto... bien...
ahora lo cambio, gracias...
ya esta corregido, gracias...
ahora lo que veo es que el rgb(255,255,255) en wip2 da un color marron, y en la ultima bennu da blanco (correcto)
Se supone que un FPG cargado contiene hasta un maximo de 999 graficos no???, entonces los new_map, map_clone, etc deberan tener un numero de 1000 en adelante que se almacenaran en el FPG "0", es decir... el fpg del sistema... o del primer fpg que has cargado.
PD: En mi caso solo serviria "map_xputnp" ya que el ancho de "graph" varia dependiendo de la velocidad de los coches.
si, claro, hasta 999, los de arriba de 999 en el fpg 0 (no fichero sino libreria en memoria) son los mapas del sistema... busca unas paginas atras en este thread, se explica como se comporta...
gracias.
Splinter,no se si lo que digo es una varbaridad, pero ¿no se podría eliminar, tarde o temprano, la limitación de los map_put, y map_xput, y similares, de que ambos mapas estén en la misma librería? Es que es un poco coñazo andar con map_clone y unload map todo el rato, al menos para mí.
Un saludo.
Quote from: Danielo515 on October 01, 2008, 09:43:49 AM
Splinter,no se si lo que digo es una varbaridad, pero ¿no se podría eliminar, tarde o temprano, la limitación de los map_put, y map_xput, y similares, de que ambos mapas estén en la misma librería? Es que es un poco coñazo andar con map_clone y unload map todo el rato, al menos para mí.
Un saludo.
map_xputnp
Soporte de modos 32 bits...
- modos: 1 a 32, 8 a 32, 16 a 32, 32 a 32
- normal, translucent, ablend, sblend, nocolorkey, alphas sobre todos los modos anteriores (salvo nocolorkey, obviamente)
- alphas por pixel (solo 32 a 32 y modos diferentes a nocolorkey)
- Optimizados los algoritmos de ablend y sblend del blitter...
Limitaciones:
- blendop no soportado en 32 bits, usar el metodo de tablas requeriria 24mb de memoria por tabla, una locura... y demasiado procesamiento...
- Fade 32, no soportados aun...
Otros cambios
- mejoras en los translucent sobre cualquier otro efecto, ahora es 50% sobre lo que sea (antes no lo era en todos los casos, en algunos si y en otros no...)
Los resultados de performance con respecto a la primera version ya no son tan significativos, mejoro significativamente los xblend sobre 16, pero decayo en 32bits... la cosa es que en la primera version no tuve en cuenta los alphas...
Todavia queda intentar optimizar mucho mas los algoritmos... pero bueno, ya hay una version funcional en desarrollo.
QuoteSoporte de modos 32 bits...
Cool, thanks. :)
Bien, al final hice algo que no queria pero bien, quizas no es la mas prolija o la mejor de las formas...
- load_png, pngs con alphas son cargados en mapas de 32 bits salvo si el modo de pantalla seteado es de 16 bits, caso en el que el png es creado como de 16 bits...
Voy a armar un ejemplo y voy a subir una version asi la testean y me comentan...
Capturas
(http://img401.imageshack.us/img401/2469/capture1xu2.png)
(http://img523.imageshack.us/img523/2273/capture2bv7.png)
esta demas decirlo, pero vean la gota de agua, es el puntero del mouse con varios canales alpha...
y miren en la zona amarilla y las azules en el cubo...
descarga wip11
http://betatester.bennugd.org/betas/win32-wip11.rar
http://betatester.bennugd.org/betas/dlls-externals-mandatory-pack.rar (nunca olvidar esto si no lo tienen)
sample
http://betatester.bennugd.org/betas/samples/rotate-mirror-32bits.rar
teclas del sample:
tab - switchea entre 32 y 16 bits
f1 - activa b_translucent
f2 - desactiva b_translucent
f3 - activa ablend
f4 - desactiva ablend
f5 - activa sblend
f6 - desactiva sblend
+/- - zoom
1 - incrementa alpha general sobre el grafico
2 - decrementa alpha general sobre el grafico
q/w - angulos incrementos de 1000
a/s - angulos incrementos de 100 (hay que quitar la linea que autoincrementa en el codigo para darle utilidad a esto)
z/x - angulos incrementos de 10 (hay que quitar la linea que autoincrementa en el codigo para darle utilidad a esto)
0/9 - fading (solo 16 bits)
h - mirror horizontal
v - mirror vertical
f10 - captura pantalla
space - angle = 0
hola estoy armando el pack y no he podido compilar el ejemplo de cebrian
desearia que lo modifiques para correrlo con la ultima version..
gracias...
// --------------------------------------------------------------------------
// Fenix Tests 2000 José Luis Cebrián
// --------------------------------------------------------------------------
GLOBAL option ;
import "mod_draw"
import "mod_key"
import "mod_timers"
import "mod_sound"
import "mod_path"
import "mod_m7"
import "mod_proc"
import "mod_scroll"
PROCESS Menu()
PRIVATE i, c, map ;
BEGIN
load_fpg ("../media/test.fpg") ;
set_fps (30, 4) ;
write (0, 160, 4, 1, "Fenix tests") ;
write (0, 160, 14, 1, "Select your option") ;
write (0, 60, 50, 0, "1. Basic sprite drawing") ;
write (0, 60, 60, 0, "2. Blending operations") ;
write (0, 60, 70, 0, "3. Primitive drawing") ;
write (0, 60, 80, 0, "4. Scroll interactive test") ;
write (0, 60, 90, 0, "5. Mode 7 interactive test") ;
write (0, 60, 100, 0, "6. Path-finding interactive test") ;
write (0, 60, 110, 0, "7. Sound test") ;
write (0, 60, 150, 0, "0. Exit") ;
map = new_map (320, 200, 8) ;
map_clear (0, map, 0) ;
option = 0 ;
REPEAT
IF key(_1): option = 1; END
IF key(_2): option = 2; END
IF key(_3): option = 3; END
IF key(_4): option = 4; END
IF key(_5): option = 5; END
IF key(_6): option = 6; END
IF key(_7): option = 7; END
IF key(_0): BREAK; END
c = rgb (rand(32,128), rand(32,64), rand(32,64)) ;
x = timer/5%100 ;
IF (x > 50) x = 100-x; END
xput (0, map, 160, 100, timer*-50, 200+x, 4, 0) ;
FROM i = 0 TO 100
map_put_pixel (0, map, rand(0,320), rand(0, 200), c) ;
map_put_pixel (0, map, rand(0,320), rand(0, 200), 1) ;
END
FRAME ;
UNTIL option != 0;
unload_map(0, map) ;
END
PROCESS Header(string title)
BEGIN
delete_text (0) ;
write (0, 160, 4, 1, title) ;
write (0, 155, 15, 2, "FPS:") ;
write_int (0, 165, 15, 0, &fps) ;
write (0, 155, 25, 2, "Speed %:") ;
write_int (0, 165, 25, 0, &speed_gauge) ;
write (0, 160, 185, 1, "Press ESC to continue") ;
END
// ----------------------------------------------------------------------
// Simple sprite drawing
// ----------------------------------------------------------------------
PROCESS FallingObject(graph, size, flags, angleinc)
PRIVATE xspeed, yspeed, inispeed ;
BEGIN
z = rand (-5, 125) ;
x = rand (15, 305) ;
y = - rand (20, 100) ;
xspeed = rand (-10, 10) ;
yspeed = rand (-4, 0) ;
inispeed = rand (10, 15) ;
angle = rand (0, 50 * angleinc) ;
LOOP
alpha = timer;
x += xspeed ;
IF (x > 305 || x < 15) xspeed = -xspeed; END
y += yspeed++ ;
IF (yspeed < -14) yspeed = -14; END
IF (y > 180)
yspeed = -inispeed ;
IF (inispeed > 1)
inispeed--;
ELSE
inispeed = 15;
END
END
IF (out_region(ID, 0)) y = -rand(20, 100) ; inispeed = 15 ; END
angle += angleinc ;
FRAME ;
END
END
PROCESS FallingObjects()
BEGIN
set_mode (320, 200, 16);
put_screen (0, 1);
Header ("400 sprites") ;
FROM x = 0 TO 400
FallingObject(100, 100, 0, 0);
END;
WHILE !key(_ESC): FRAME; END;
signal (TYPE FallingObject, S_KILL) ;
WHILE key(_ESC): FRAME; END;
Header ("100 rotating sprites") ;
FROM x = 0 TO 100: FallingObject(101, 100, 0, rand(500,1000)); END
WHILE !key(_ESC): FRAME; END
signal (TYPE FallingObject, S_KILL) ;
WHILE key(_ESC): FRAME; END;
Header ("100 sprites with transparency") ;
FROM x = 0 TO 100: FallingObject(100, 100, 4, 0); END
WHILE !key(_ESC): FRAME; END
signal (TYPE FallingObject, S_KILL) ;
WHILE key(_ESC): FRAME; END;
Header ("100 scaled up sprites") ;
FROM x = 0 TO 100: FallingObject(100, 150, 0, 0); END
WHILE !key(_ESC): FRAME; END
END
// ----------------------------------------------------------------------
// Blendop tests
// ----------------------------------------------------------------------
PROCESS BlendedObject (x, y, string text, string text2, int flags, blendop)
BEGIN
write (0, x, y+32, 4, text) ;
write (0, x, y+40, 4, text2) ;
angle = 1000 ;
size = 150 ;
graph = 101 ;
LOOP
angle += 2000 ;
FRAME ;
END
END
PROCESS BlendedObjects()
BEGIN
graph_mode = mode_16bits ;
set_mode (320,200,16) ;
put_screen (0, 1) ;
Header ("Blit flags") ;
BlendedObject (60, 65, "Normal", "", 0, 0) ;
BlendedObject (160, 65, "H-Mirror", "", 1, 0) ;
BlendedObject (260, 65, "V-Mirror", "", 2, 0) ;
BlendedObject (60, 135, "Normal", "Transparency", 4, 0) ;
BlendedObject (160, 135, "H-Mirror", "Transparency", 5, 0) ;
BlendedObject (260, 135, "No key", "", 128, 0) ;
WHILE !scan_code: FRAME; END
scan_code = 0 ;
signal (TYPE BlendedObject, S_KILL) ;
Header ("Blending operations") ;
blendop = blendop_new() ;
blendop_translucency (blendop, 0.70) ;
BlendedObject (60, 65, "Transparency", "(70%)", 0, blendop) ;
blendop = blendop_new() ;
blendop_grayscale (blendop, 1) ;
BlendedObject (160, 65, "Grayscale", "(Luminance)", 0, blendop) ;
blendop = blendop_new() ;
blendop_intensity (blendop, 2.00) ;
BlendedObject (260, 65, "Lighting", "(50%)", 0, blendop) ;
blendop = blendop_new() ;
blendop_tint (blendop, 0.50, 255, 0, 0) ;
BlendedObject (60, 135, "Red tint", "(50%)", 0, blendop) ;
blendop = blendop_new() ;
blendop_intensity (blendop, 0.75) ;
BlendedObject (160, 135, "Darkening", "(25%)", 0, blendop) ;
blendop = blendop_new() ;
blendop_grayscale (blendop, 1) ;
blendop_intensity (blendop, 3.0) ;
blendop_swap (blendop);
BlendedObject (260, 135, "Inverted", "(Grayscale)", 0, blendop) ;
WHILE !scan_code: FRAME; END
fade_off() ;
graph_mode = 0 ;
set_mode (320,200,16) ;
END
// ----------------------------------------------------------------------
// Primitive drawing
// ----------------------------------------------------------------------
PROCESS PrimitiveTests()
PRIVATE
map, color, i ;
word POINTER ptr ;
BEGIN
load_fpg ("test.fpg") ;
Header ("Primitive drawing") ;
graph = new_map (400, 400, 8) ;
set_center (0, graph, 200, 200) ;
drawing_map (0, graph) ;
x = 160 ; y = 100 ; flags = 4 ;
REPEAT
drawing_color (rgb (rand(0,255), rand(0,255), rand(0,255))) ;
draw_fcircle (rand(0,399), rand(0,399), rand(0,25)) ;
draw_rect (rand(0,399), rand(0,399), rand(0,399), rand(0,399)) ;
draw_line (rand(0,399), rand(0,399), rand(0,399), rand(0,399)) ;
draw_circle (rand(0,399), rand(0,399), rand(0,100)) ;
FRAME ;
angle += 1000 ;
UNTIL scan_code;
unload_map (0, graph) ;
END
// ----------------------------------------------------------------------
// Scrolling
// ----------------------------------------------------------------------
PROCESS ScrollSphere (x, y, graph)
BEGIN
priority = 100 ;
ctype = c_scroll;
LOOP
IF (key(_right)) x += 4 ; END
IF (key(_left)) x -= 4 ; END
IF (key(_down)) y += 4 ; END
IF (key(_up)) y -= 4 ; END
IF (key(_space)) x = y = 0 ; END
FRAME;
END
END
PROCESS ScrollTriangle (follow, angle)
BEGIN
priority = 101 ;
graph = 102 ;
ctype = c_scroll ;
LOOP
x = follow.x + get_distx (angle, 40) ;
y = follow.y + get_disty (angle, 40) ;
angle += 185000 ;
FRAME ;
angle -= 180000 ;
END
END
PROCESS ScrollTest()
BEGIN
define_region (1, 0, 0, 160, 100) ;
define_region (2, 0, 100, 160, 100) ;
define_region (3, 160, 0, 160, 100) ;
define_region (4, 160, 100, 160, 100) ;
start_scroll(0, 0, 200, 1, 1, 15);
start_scroll(1, 0, 200, 1, 2, 15);
start_scroll(2, 0, 200, 1, 3, 15);
start_scroll(3, 0, 200, 1, 4, 15);
scroll[0].camera = ScrollSphere (160, 100, 100) ;
scroll[1].camera = ScrollTriangle (scroll[0].camera, 0) ;
scroll[2].camera = ScrollTriangle (scroll[0].camera, 120000) ;
scroll[3].camera = ScrollTriangle (scroll[0].camera, 240000) ;
scroll[0].ratio = 400 ;
scroll[1].ratio = 800 ;
scroll[2].ratio = 50 ;
scroll[3].ratio = 2000 ;
scroll[0].speed = 3 ;
scroll[0].flags1 = 4 ;
scroll[1].flags1 = 4 ;
scroll[2].flags1 = 4 ;
scroll[3].flags1 = 4 ;
scroll[0].flags2 = 129 ;
scroll[1].flags2 = 129 ;
scroll[2].flags2 = 129 ;
scroll[3].flags2 = 129 ;
Header ("Scroll test") ;
REPEAT: FRAME; UNTIL key(_esc);
fade_off() ;
stop_scroll(0) ;
stop_scroll(1) ;
stop_scroll(2) ;
stop_scroll(3) ;
END
// ----------------------------------------------------------------------
// Mode 7
// ----------------------------------------------------------------------
PROCESS Mode7Object (x, y, graph)
PRIVATE
speed = -1 ;
BEGIN
ctype = c_m7 ;
cnumber = 1 ;
height = rand (0, 16) ;
resolution = 4 ;
x *= 4 ; y *= 4 ;
LOOP
IF height > 0 && speed > -8: speed-- ; END
height += speed ;
IF (height < 0)
height = 0 ;
speed = rand(5, 15) ;
END
FRAME;
END
END
PROCESS Mode7Test()
PRIVATE
a, b ;
BEGIN
put_screen (0, 1) ;
Header ("Mode 7 - Press cursor keys, Q, W, A, Z") ;
start_mode7 (0, 0, 1, 0, 0, 64) ;
start_mode7 (1, 0, 0, 200, 0, 64) ;
m7[0].distance = 0 ;
m7[0].camera = id ;
m7[0].height = 90 ;
m7[1].distance = 0 ;
m7[1].camera = id ;
m7[1].height = 80 ;
m7[1].flags = 4 ;
resolution = 100 ;
FROM a = 0 TO 64 Step 16
FROM b = 0 TO 64 Step 16
Mode7Object (a, b, 100) ;
END
END
FRAME;
LOOP
m7[0].z = m7[0].height ;
m7[1].z = m7[1].height ;
IF (m7.height < 0)
m7[0].z = -m7[0].height ;
m7[1].z = -m7[1].height ;
END
IF (key(_up)) advance(200) ; END
IF (key(_down)) advance(-200) ; END
IF (key(_left)) angle += 2000 ; END
IF (key(_right)) angle -= 2000 ;END
IF (key(_a)) m7.height+=2 ; m7[1].height+=2 ; END
IF (key(_z)) m7.height-=2 ; m7[1].height-=2 ; END
IF (key(_q)) xadvance(angle+90000, 200) ; END
IF (key(_w)) xadvance(angle-90000, 200) ; END
scan_code = 0 ;
FRAME ;
IF key(_esc): BREAK; END
END
fade_off() ;
stop_mode7(0) ;
stop_mode7(1) ;
END
// ----------------------------------------------------------------------
// Path-finding
// ----------------------------------------------------------------------
CONST
width = 64 ;
height = 32 ;
GLOBAL
int graphic ;
int title ;
int wall_color ;
int start_color ;
int end_color ;
int color_ruta ;
int last_x, last_y ;
int start_x, start_y ;
int end_x, end_y ;
PROCESS ClearRoute ()
PRIVATE
byte POINTER ptr ;
int pitch ;
BEGIN
ptr = map_buffer (0, graphic) ;
pitch = graphic_info(0, graphic, G_PITCH) ;
FROM y = 0 TO HEIGHT:
ptr = map_buffer(0,graphic) ;
ptr += pitch * y ;
FROM x = 0 TO WIDTH:
IF [ptr] == color_ruta: [ptr] = 0; END
ptr++ ;
END
END
END
PROCESS Reset()
BEGIN
drawing_color (0) ;
draw_box (0, 0, WIDTH, HEIGHT) ;
drawing_color (wall_color) ;
draw_rect (0, 0, WIDTH, HEIGHT) ;
start_x = WIDTH/4 ;
end_x = WIDTH*3/4 ;
start_y = HEIGHT/2 ;
end_y = HEIGHT/2 ;
map_put_pixel (0, graphic, start_x, start_y, start_color) ;
map_put_pixel (0, graphic, end_x, end_y, end_color) ;
END
PROCESS PathFinding()
BEGIN
mouse.graph = 200 ;
graphic = new_map (WIDTH, HEIGHT, 8) ;
wall_color = rgb (196, 196, 196) ;
start_color = rgb (255, 0, 0) ;
end_color = rgb (0, 0, 255) ;
color_ruta = rgb (128, 64, 128) ;
drawing_map (0, graphic) ;
Reset() ;
title = write (0, 160, 4, 1, "Path finding") ;
write (0, 160, 180, 1, "Draw walls with the mouse") ;
write (0, 160, 190, 1, "(S) start (E) end (R) reset (SPACE) go") ;
last_x = mouse.x / 4 ;
last_y = mouse.y / 4 ;
WHILE !key(_esc):
clear_screen() ;
xput (0, graphic, 160, 100, 0, 400, 0, 0) ;
x = mouse.x / 4 - (40-WIDTH/2);
y = mouse.y / 4 - (25-HEIGHT/2);
IF mouse.left:
drawing_color (wall_color) ;
draw_line (x, y, last_x, last_y) ;
map_put_pixel (0, graphic, x, y, wall_color) ;
END
IF mouse.right:
drawing_color (0) ;
draw_line (x, y, last_x, last_y) ;
map_put_pixel (0, graphic, x, y, 0) ;
END
IF key(_s):
ClearRoute() ;
map_put_pixel (0, graphic, start_x, start_y, 0) ;
start_x = x ; start_y = y ;
map_put_pixel (0, graphic, x, y, start_color) ;
END
IF key(_r):
Reset() ;
END
IF key(_e):
ClearRoute() ;
map_put_pixel (0, graphic, end_x, end_y, 0) ;
end_x = x ; end_y = y ;
map_put_pixel (0, graphic, x, y, end_color) ;
END
IF key(_space):
FRAME ;
ClearRoute() ;
IF !path_find(0, graphic, start_x, start_y,
end_x, end_y, PF_NODIAG):
delete_text(title) ;
title = write (0, 160, 6, 1, "The path is blocked") ;
ELSE:
FRAME ;
clear_screen() ;
delete_text(title) ;
title = write (0, 160, 6, 1, "Path found in " + (speed_gauge*60/100) + " ms") ;
set_fps (60, 0) ;
WHILE path_getxy(&x, &y):
map_put_pixel (0, graphic, x, y, color_ruta) ;
xput (0, graphic, 160, 100, 0, 400, 128, 0) ;
FRAME ;
END
set_fps (60, 0) ;
map_put_pixel (0, graphic, start_x, start_y, start_color) ;
map_put_pixel (0, graphic, end_x, end_y, end_color) ;
END
WHILE key(_space): FRAME; END
END
IF key(_esc): BREAK; END
last_x = x ;
last_y = y ;
FRAME ;
END
unload_map (0, graphic) ;
fade_off() ;
END
// ------------------------------------------------------------------------
// Sound test
// ------------------------------------------------------------------------
PROCESS SoundTest()
PRIVATE
int pat, pos, vol, time, md ;
BEGIN
header ("Sound test") ;
md = load_song("../media/game.s3m") ;
play_song (md,-1) ;
vol = 128 ;
WHILE is_playing_song() AND scan_code != _esc:
FRAME ;
END
WHILE is_playing_song() AND vol > 0:
FRAME ;
set_song_volume ( vol -= 2) ;
END
stop_song() ;
unload_song(md) ;
END
// ----------------------------------------------------------------------
PRIVATE proc ;
BEGIN
FULL_SCREEN = FALSE ;
LOOP
proc = Menu() ;
WHILE exists(proc): FRAME; END
fade_off() ;
put_screen(0, 1) ;
delete_text(0) ;
fade_on() ;
IF option == 0: BREAK; END
SWITCH (option)
CASE 1: proc = FallingObjects(); END
CASE 2: proc = BlendedObjects(); END
CASE 3: proc = PrimitiveTests(); END
CASE 4: proc = ScrollTest(); END
CASE 5: proc = Mode7Test(); END
CASE 6: proc = PathFinding(); END
CASE 7: proc = SoundTest(); END
END
WHILE exists(proc): FRAME; END
fade_off() ;
let_me_alone() ;
clear_screen() ;
delete_text(0) ;
fade_on() ;
END
END
por que no pudiste compilarlo? solo tenes que hacer los imports...
// --------------------------------------------------------------------------
// Bennu Tests 2000 José Luis Cebrián
// --------------------------------------------------------------------------
#ifndef __VERSION__
import "mod_sdlevthandler";
import "mod_pathfind";
#else
import "mod_blendop";
import "mod_text";
import "mod_grproc";
import "mod_video";
import "mod_map";
import "mod_screen";
import "mod_path";
import "mod_rand";
import "mod_say";
import "mod_mouse";
import "mod_scroll";
import "mod_math";
#endif
import "mod_m7";
import "mod_proc";
import "mod_key";
import "mod_draw";
import "mod_timers";
import "mod_sound";
#define SCR_DEPTH 16
GLOBAL option ;
PROCESS Menu()
PRIVATE i, c, map ;
BEGIN
set_mode(320,200,SCR_DEPTH);
load_fpg ("test.fpg") ;
set_fps (0, 0) ;
write (0, 160, 4, 1, "Bennu tests") ;
write (0, 160, 14, 1, "Select your option") ;
write (0, 60, 50, 0, "1. Basic sprite drawing") ;
write (0, 60, 60, 0, "2. Blending operations") ;
write (0, 60, 70, 0, "3. Primitive drawing") ;
write (0, 60, 80, 0, "4. Scroll interactive test") ;
write (0, 60, 90, 0, "5. Mode 7 interactive test") ;
write (0, 60, 100, 0, "6. Path-finding interactive test") ;
write (0, 60, 110, 0, "7. Sound test") ;
write (0, 60, 150, 0, "0. Exit") ;
map = new_map (320, 200, 8) ;
map_clear (0, map, 0) ;
option = 0 ;
REPEAT
IF key(_1): option = 1; END
IF key(_2): option = 2; END
IF key(_3): option = 3; END
IF key(_4): option = 4; END
IF key(_5): option = 5; END
IF key(_6): option = 6; END
IF key(_7): option = 7; END
IF key(_0): BREAK; END
c = rgb (rand(32,128), rand(32,64), rand(32,64)) ;
x = timer/5%100 ;
IF (x > 50) x = 100-x; END
xput (0, map, 160, 100, timer*-50, 200+x, 4, 0) ;
FROM i = 0 TO 100;
map_put_pixel (0, map, rand(0,320), rand(0, 200), c) ;
map_put_pixel (0, map, rand(0,320), rand(0, 200), 1) ;
END
FRAME ;
UNTIL option != 0;
unload_map(0, map) ;
END
PROCESS Header(string title)
private
w, h;
BEGIN
delete_text (0) ;
w = graphic_info(0, 0, G_WIDTH) ;
h = graphic_info(0, 0, G_HEIGHT) ;
write (0, w/2, 4, 1, title) ;
write (0, w/2-15, 15, 2, "FPS:") ;
write_int (0, w/2+10, 15, 0, &fps) ;
write (0, w/2-15, 25, 2, "Speed %:") ;
write_int (0, w/2+10, 25, 0, &speed_gauge) ;
write (0, w/2, h-20, 1, "Press ESC to continue") ;
END
// ----------------------------------------------------------------------
// Simple sprite drawing
// ----------------------------------------------------------------------
PROCESS FallingObjects()
BEGIN
set_mode (320, 200, SCR_DEPTH);
put_screen (0, 1);
Header ("400 sprites") ;
FROM x = 0 TO 400; FallingObject(100, 100, 0, 0); END
WHILE !key(_ESC); FRAME; END;
signal (TYPE FallingObject, S_KILL) ;
WHILE key(_ESC); FRAME; END;
Header ("100 rotating sprites") ;
FROM x = 0 TO 100; FallingObject(101, 100, 0, rand(500,1000)); END
WHILE !key(_ESC): FRAME; END
signal (TYPE FallingObject, S_KILL) ;
WHILE key(_ESC): FRAME; END;
Header ("100 sprites with transparency") ;
FROM x = 0 TO 100; FallingObject(100, 100, 4, 0); END
WHILE !key(_ESC): FRAME; END
signal (TYPE FallingObject, S_KILL) ;
WHILE key(_ESC): FRAME; END;
Header ("100 scaled up sprites") ;
FROM x = 0 TO 100; FallingObject(100, 120, 0, 0); END
WHILE !key(_ESC): FRAME; END
END
PROCESS FallingObject(graph, size, flags, angleinc)
PRIVATE xspeed, yspeed, inispeed ;
BEGIN
z = rand (-5, 125) ;
x = rand (15, 305) ;
y = - rand (20, 100) ;
xspeed = rand (-10, 10) ;
yspeed = rand (-4, 0) ;
inispeed = rand (10, 15) ;
angle = rand (0, 50 * angleinc) ;
LOOP
alpha = timer;
x += xspeed ;
IF (x > 305 || x < 15) xspeed = -xspeed; END
y += yspeed++ ;
IF (yspeed < -14) yspeed = -14; END
IF (y > 180)
yspeed = -inispeed ;
IF (inispeed > 1)
inispeed--;
ELSE
inispeed = 15;
END
END
IF (out_region(ID, 0)) y = -rand(20, 100) ; inispeed = 15 ; END
angle += angleinc ;
FRAME ;
END
END
// ----------------------------------------------------------------------
// Blendop tests
// ----------------------------------------------------------------------
PROCESS BlendedObject (x, y, string text, string text2, int flags, blendop)
BEGIN
write (0, x, y+32, 4, text) ;
write (0, x, y+40, 4, text2) ;
angle = 1000 ;
size = 150 ;
graph = 101 ;
LOOP
angle += 2000 ;
FRAME ;
END
END
PROCESS BlendedObjects()
BEGIN
// graph_mode = mode_16bits ;
set_mode (320, 200, SCR_DEPTH);
put_screen (0, 1) ;
Header ("Blit flags") ;
BlendedObject (60, 65, "Normal", "", 0, 0) ;
BlendedObject (160, 65, "H-Mirror", "", 1, 0) ;
BlendedObject (260, 65, "V-Mirror", "", 2, 0) ;
BlendedObject (60, 135, "Normal", "Transparency", 4, 0) ;
BlendedObject (160, 135, "H-Mirror", "Transparency", 5, 0) ;
BlendedObject (260, 135, "No key", "", 128, 0) ;
WHILE !key(_ESC); FRAME; END;
scan_code = 0 ;
signal (TYPE BlendedObject, S_KILL) ;
Header ("Blending operations") ;
blendop = blendop_new() ;
blendop_translucency (blendop, 0.70) ;
BlendedObject (60, 65, "Transparency", "(70%)", 0, blendop) ;
blendop = blendop_new() ;
blendop_grayscale (blendop, 1) ;
BlendedObject (160, 65, "Grayscale", "(Luminance)", 0, blendop) ;
blendop = blendop_new() ;
blendop_intensity (blendop, 2.00) ;
BlendedObject (260, 65, "Lighting", "(50%)", 0, blendop) ;
blendop = blendop_new() ;
blendop_tint (blendop, 0.50, 255, 0, 0) ;
BlendedObject (60, 135, "Red tint", "(50%)", 0, blendop) ;
blendop = blendop_new() ;
blendop_intensity (blendop, 0.75) ;
BlendedObject (160, 135, "Darkening", "(25%)", 0, blendop) ;
blendop = blendop_new() ;
blendop_grayscale (blendop, 1) ;
blendop_intensity (blendop, 3.0) ;
blendop_swap (blendop);
BlendedObject (260, 135, "Inverted", "(Grayscale)", 0, blendop) ;
WHILE key(_ESC); FRAME; END;
WHILE !key(_ESC); FRAME; END;
fade_off() ; while (fading); frame; end;
set_mode (320, 200, SCR_DEPTH);
END
// ----------------------------------------------------------------------
// Primitive drawing
// ----------------------------------------------------------------------
PROCESS PrimitiveTests()
PRIVATE
map, color, i ;
word POINTER ptr ;
BEGIN
// load_fpg ("test.fpg") ;
set_mode (320, 200, SCR_DEPTH);
put_screen (0, 1) ;
Header ("Primitive drawing") ;
graph = new_map (400, 400, 8) ;
set_center (0, graph, 200, 200) ;
drawing_map (0, graph) ;
x = 160 ; y = 100 ; flags = 4 ;
REPEAT
drawing_color (rgb (rand(0,255), rand(0,255), rand(0,255))) ;
draw_fcircle (rand(0,399), rand(0,399), rand(0,25)) ;
draw_rect (rand(0,399), rand(0,399), rand(0,399), rand(0,399)) ;
draw_line (rand(0,399), rand(0,399), rand(0,399), rand(0,399)) ;
draw_circle (rand(0,399), rand(0,399), rand(0,100)) ;
FRAME ;
angle += 1000 ;
UNTIL scan_code;
unload_map (0, graph) ;
END
// ----------------------------------------------------------------------
// Scrolling
// ----------------------------------------------------------------------
PROCESS ScrollTest()
BEGIN
set_mode(640,480,SCR_DEPTH);
define_region (1, 0, 0, 320, 240) ;
define_region (2, 0, 240, 320, 240) ;
define_region (3, 320, 0, 320, 240) ;
define_region (4, 320, 240, 320, 240) ;
define_region (5, 80, 80, 160, 80) ;
start_scroll(0, 0, 200, 1, 1, 15);
start_scroll(1, 0, 200, 1, 2, 15);
start_scroll(2, 0, 200, 1, 3, 15);
start_scroll(3, 0, 200, 1, 4, 15);
scroll[0].camera = ScrollSphere (160, 100, 100) ;
scroll[1].camera = ScrollTriangle (scroll[0].camera, 0) ;
scroll[2].camera = ScrollTriangle (scroll[0].camera, 120000) ;
scroll[3].camera = ScrollTriangle (scroll[0].camera, 240000) ;
/*
scroll[0].ratio = 400 ;
scroll[1].ratio = 800 ;
scroll[2].ratio = 50 ;
scroll[3].ratio = 2000 ;
*/
scroll[0].region1 = 5 ;
scroll[0].region2 = 1 ;
scroll[0].ratio = 100 ;
scroll[1].ratio = 100 ;
scroll[2].ratio = 100 ;
scroll[3].ratio = 100 ;
scroll[0].speed = 3 ;
scroll[1].speed = 3 ;
scroll[2].speed = 3 ;
scroll[3].speed = 3 ;
scroll[0].flags1 = B_TRANSLUCENT ;
scroll[1].flags1 = B_TRANSLUCENT ;
scroll[2].flags1 = B_TRANSLUCENT ;
scroll[3].flags1 = B_TRANSLUCENT ;
scroll[0].flags2 = B_NOCOLORKEY | B_HMIRROR;
scroll[1].flags2 = B_NOCOLORKEY | B_HMIRROR;
scroll[2].flags2 = B_NOCOLORKEY | B_HMIRROR;
scroll[3].flags2 = B_NOCOLORKEY | B_HMIRROR;
Header ("Scroll test") ;
REPEAT: FRAME; UNTIL key(_esc);
fade_off() ; while (fading); frame; end;
stop_scroll(0) ;
stop_scroll(1) ;
stop_scroll(2) ;
stop_scroll(3) ;
set_mode(320,200,SCR_DEPTH);
END
PROCESS ScrollSphere (x, y, graph)
BEGIN
priority = 101 ;
ctype = c_scroll;
LOOP
IF (key(_right)) x += 4 ; END
IF (key(_left)) x -= 4 ; END
IF (key(_down)) y += 4 ; END
IF (key(_up)) y -= 4 ; END
IF (key(_space)) x = y = 0 ; END
FRAME;
END
END
PROCESS ScrollTriangle (follow, angle)
BEGIN
priority = 100 ;
graph = 102 ;
ctype = c_scroll ;
LOOP
x = follow.x + get_distx (angle, 40) ;
y = follow.y + get_disty (angle, 40) ;
angle += 185000 ;
FRAME ;
angle -= 180000 ;
END
END
// ----------------------------------------------------------------------
// Mode 7
// ----------------------------------------------------------------------
PROCESS Mode7Test()
PRIVATE
a, b ;
BEGIN
set_mode(320,200,8);
put_screen (0, 1) ;
Header ("Mode 7 - Press cursor keys, Q, W, A, Z") ;
start_mode7 (0, 0, 1, 0, 0, 64) ;
start_mode7 (1, 0, 0, 200, 0, 64) ;
m7[0].distance = 0 ;
m7[0].camera = id ;
m7[0].height = 90 ;
m7[1].distance = 0 ;
m7[1].camera = id ;
m7[1].height = 80 ;
m7[1].flags = 4 ;
resolution = 100 ;
FROM a = 0 TO 64 Step 16;
FROM b = 0 TO 64 Step 16;
Mode7Object (a, b, 100) ;
END
END
FRAME;
LOOP
m7[0].z = m7[0].height ;
m7[1].z = m7[1].height ;
IF (m7.height < 0)
m7[0].z = -m7[0].height ;
m7[1].z = -m7[1].height ;
END
IF (key(_up)) advance(200) ; END
IF (key(_down)) advance(-200) ; END
IF (key(_left)) angle += 2000 ; END
IF (key(_right)) angle -= 2000 ;END
IF (key(_a)) m7.height+=2 ; m7[1].height+=2 ; END
IF (key(_z)) m7.height-=2 ; m7[1].height-=2 ; END
IF (key(_q)) xadvance(angle+90000, 200) ; END
IF (key(_w)) xadvance(angle-90000, 200) ; END
scan_code = 0 ;
FRAME ;
IF key(_esc): BREAK; END
END
fade_off() ; while (fading); frame; end;
stop_mode7(1) ;
stop_mode7(0) ;
set_mode(320,200,SCR_DEPTH);
END
PROCESS Mode7Object (x, y, graph)
PRIVATE
speed = -1 ;
BEGIN
ctype = c_m7 ;
cnumber = 1 ;
height = rand (0, 16) ;
resolution = 4 ;
x *= 4 ; y *= 4 ;
LOOP
IF height > 0 && speed > -8: speed-- ; END
height += speed ;
IF (height < 0)
height = 0 ;
speed = rand(5, 15) ;
END
FRAME;
END
END
// ----------------------------------------------------------------------
// Path-finding
// ----------------------------------------------------------------------
CONST
width = 64 ;
height = 32 ;
GLOBAL
int graphic ;
int title ;
int wall_color ;
int start_color ;
int end_color ;
int color_ruta ;
int last_x, last_y ;
int start_x, start_y ;
int end_x, end_y ;
PROCESS ClearRoute ()
PRIVATE
byte POINTER ptr ;
int pitch ;
BEGIN
ptr = map_buffer (0, graphic) ;
pitch = graphic_info(0, graphic, G_PITCH) ;
FROM y = 0 TO HEIGHT;
ptr = map_buffer(0,graphic) ;
ptr += pitch * y ;
FROM x = 0 TO WIDTH;
IF [ptr] == color_ruta: [ptr] = 0; END
ptr++ ;
END
END
END
PROCESS Reset()
BEGIN
drawing_color (0) ;
draw_box (0, 0, WIDTH, HEIGHT) ;
drawing_color (wall_color) ;
draw_rect (0, 0, WIDTH, HEIGHT) ;
start_x = WIDTH/4 ;
end_x = WIDTH*3/4 ;
start_y = HEIGHT/2 ;
end_y = HEIGHT/2 ;
map_put_pixel (0, graphic, start_x, start_y, start_color) ;
map_put_pixel (0, graphic, end_x, end_y, end_color) ;
END
PROCESS PathFinding()
BEGIN
mouse.graph = 200 ;
graphic = new_map (WIDTH, HEIGHT, 8) ;
wall_color = rgb (196, 196, 196) ;
start_color = rgb (255, 0, 0) ;
end_color = rgb (0, 0, 255) ;
color_ruta = rgb (128, 64, 128) ;
drawing_map (0, graphic) ;
Reset() ;
title = write (0, 160, 4, 1, "Path finding") ;
write (0, 160, 180, 1, "Draw walls with the mouse") ;
write (0, 160, 190, 1, "(S) start (E) end (R) reset (SPACE) go") ;
last_x = mouse.x / 4 ;
last_y = mouse.y / 4 ;
WHILE !key(_esc):
clear_screen() ;
xput (0, graphic, 160, 100, 0, 400, 0, 0) ;
x = mouse.x / 4 - (40-WIDTH/2);
y = mouse.y / 4 - (25-HEIGHT/2);
IF mouse.left:
drawing_color (wall_color) ;
draw_line (x, y, last_x, last_y) ;
map_put_pixel (0, graphic, x, y, wall_color) ;
END
IF mouse.right:
drawing_color (0) ;
draw_line (x, y, last_x, last_y) ;
map_put_pixel (0, graphic, x, y, 0) ;
END
IF key(_s):
ClearRoute() ;
map_put_pixel (0, graphic, start_x, start_y, 0) ;
start_x = x ; start_y = y ;
map_put_pixel (0, graphic, x, y, start_color) ;
END
IF key(_r):
Reset() ;
END
IF key(_e):
ClearRoute() ;
map_put_pixel (0, graphic, end_x, end_y, 0) ;
end_x = x ; end_y = y ;
map_put_pixel (0, graphic, x, y, end_color) ;
END
IF key(_space):
FRAME ;
ClearRoute() ;
IF !path_find(0, graphic, start_x, start_y, end_x, end_y, PF_NODIAG):
delete_text(title) ;
title = write (0, 160, 6, 1, "The path is blocked") ;
ELSE:
FRAME ;
clear_screen() ;
delete_text(title) ;
title = write (0, 160, 6, 1, "Path found in " + (speed_gauge*60/100) + " ms") ;
set_fps (0, 0) ;
WHILE path_getxy(&x, &y):
map_put_pixel (0, graphic, x, y, color_ruta) ;
xput (0, graphic, 160, 100, 0, 400, 128, 0) ;
FRAME ;
END
set_fps (0, 0) ;
map_put_pixel (0, graphic, start_x, start_y, start_color) ;
map_put_pixel (0, graphic, end_x, end_y, end_color) ;
END
WHILE key(_space): FRAME; END
END
IF key(_esc): BREAK; END
last_x = x ;
last_y = y ;
FRAME ;
END
unload_map (0, graphic) ;
fade_off() ; while (fading); frame; end;
END
// ------------------------------------------------------------------------
// Sound test
// ------------------------------------------------------------------------
PROCESS SoundTest()
PRIVATE
int pat, pos, vol, time, md ;
BEGIN
header ("Sound test") ;
md = load_song("game.s3m") ;
play_song (md,-1) ;
vol = 128 ;
WHILE is_playing_song() AND scan_code != _esc:
FRAME ;
END
WHILE is_playing_song() AND vol > 0:
FRAME ;
set_song_volume ( vol -= 2) ;
END
stop_song() ;
unload_song(md) ;
END
// ----------------------------------------------------------------------
PRIVATE proc ;
BEGIN
FULL_SCREEN = FALSE ;
LOOP
proc = Menu() ;
WHILE exists(proc): FRAME; END
fade_off() ; while (fading); frame; end;
put_screen(0, 1) ;
delete_text(0) ;
fade_on() ; while (fading); frame; end;
IF option == 0: BREAK; END
SWITCH (option)
CASE 1: proc = FallingObjects(); END
CASE 2: proc = BlendedObjects(); END
CASE 3: proc = PrimitiveTests(); END
CASE 4: proc = ScrollTest(); END
CASE 5: proc = Mode7Test(); END
CASE 6: proc = PathFinding(); END
CASE 7: proc = SoundTest(); END
END
WHILE exists(proc): FRAME; END
fade_off() ; while (fading); frame; end;
let_me_alone() ;
clear_screen() ;
delete_text(0) ;
fade_on() ;
END
END
Tiene buena pinta, la gota de agua queda muy bonita, el Zoom (+,-) no funciona, y ver asi el efecto espejado gusta.
Por otro lado a ver porque estre codigo no muestra un cuadrado blanco con un rectagulo rojo como cola. Probado en la WIP11, en la WIP10a tampoco va.
Program Pruebas;
Global
int fpg1;
int fpg2;
int map1;
int map2;
Begin
set_mode(320,200,8);
// El FPG es el de los TESTS de siempre
fpg1=load_fpg("test.fpg");
// fpg2=load_fpg("test16.fpg");
put_screen(fpg1,1);
graph=map1=new_map(20,20,100);//rgb(255,255,255));
x=160;
y=100;
sombra(x,y,angle);
While (NOT key(_esc))
IF (key(_right))
angle-=5000;
END
IF (key(_left))
angle+=5000;
END
IF (key(_down))
advance(-5);
END
IF (key(_up))
advance(5);
END
Frame;
End
End
Process sombra (x, y, angle)
Begin
flags=5;
graph=map2=new_map(30,10,200);//rgb(255,0,0));
While (NOT key(_esc))
x=father.x;
y=father.y;
angle=father.angle;
advance(-20);
Frame;
End
End
no es el + y - del teclado numerico, es el + y - al lado del backspace.
Quote from: TYCO on October 03, 2008, 07:22:51 PM
Tiene buena pinta, la gota de agua queda muy bonita, el Zoom (+,-) no funciona, y ver asi el efecto espejado gusta.
Por otro lado a ver porque estre codigo no muestra un cuadrado blanco con un rectagulo rojo como cola. Probado en la WIP11, en la WIP10a tampoco va.
Program Pruebas;
Global
int fpg1;
int fpg2;
int map1;
int map2;
Begin
set_mode(320,200,8);
// El FPG es el de los TESTS de siempre
fpg1=load_fpg("test.fpg");
// fpg2=load_fpg("test16.fpg");
put_screen(fpg1,1);
graph=map1=new_map(20,20,100);//rgb(255,255,255));
x=160;
y=100;
sombra(x,y,angle);
While (NOT key(_esc))
IF (key(_right))
angle-=5000;
END
IF (key(_left))
angle+=5000;
END
IF (key(_down))
advance(-5);
END
IF (key(_up))
advance(5);
END
Frame;
End
End
Process sombra (x, y, angle)
Begin
flags=5;
graph=map2=new_map(30,10,200);//rgb(255,0,0));
While (NOT key(_esc))
x=father.x;
y=father.y;
angle=father.angle;
advance(-20);
Frame;
End
End
obviamente que no va a mostrar nada, mapas de 100 bits de profundidad por ahora no soportamos...
Lo de la gota me ha dejado realmente impresionado, por fin podremos con bennu hacer todos esos programas multimedia que siempre quise con preciosas interfaces, adiós a los problemas de paletas e imágenes con colores raros ¡todo en 32 bits! viva el color, viva el preciosismo. Se me hace la boca agua...
Por cierto, la gota de agua es un mapa con esas transparencias aplicadas con un programa de edición de imagen (es decir, es así y se respeta dentro de bennu) o es una gota corriente a la que le has aplicado por software como distintas capas de transparencias y demás historias?
Un saludo, y muchas gracias splinter.
hola a todos, hay alguna forma de insertar los dlls en el ejecutable final?
Quote from: Danielo515 on October 03, 2008, 11:28:37 PM
Lo de la gota me ha dejado realmente impresionado, por fin podremos con bennu hacer todos esos programas multimedia que siempre quise con preciosas interfaces, adiós a los problemas de paletas e imágenes con colores raros ¡todo en 32 bits! viva el color, viva el preciosismo. Se me hace la boca agua...
Por cierto, la gota de agua es un mapa con esas transparencias aplicadas con un programa de edición de imagen (es decir, es así y se respeta dentro de bennu) o es una gota corriente a la que le has aplicado por software como distintas capas de transparencias y demás historias?
Un saludo, y muchas gracias splinter.
es un png con canales alpha a nivel pixel... hecho con un editor grafico comun y corriente...
en el ejemplo tenes el mapa que podes ver tranquilamente en cualquier editor...
Uff, he estado unos 40 minutos para leerme toda la información de este post... estaba bastante desactualizado...
Pero bueno quería decir que me alegro de que la cosa marche... 32 bits uhmm nice. Voy a jugar un poquillo con la WIP de bennu :).
Un saludo a los que se acuerden de mí! Cada vez que enciendo el ordenador me dan ganas de retomar viejos proyectos...
Danko (acá Darío)
hola dario, hacia tiempo que no te veia por aca... me alegra tu visita... saludos...
debo entender que en modo 32 bits los degradados se verán más que majetes no? porque me acuerdo de un proyecto que tenía en fenix y que los degradados salian caca, y lo tuve que quitar.
Un saludo.
muchas preguntas y pocas pruebas... prueba y lo veras con tus propios ojos...
He estado probando el ejemplo de 32 bits y las transparencias son alucinantes. Gran trabajo Splinter.
Disculpa mi ignorancia pero podrías explicarme esta linea del ejemplo:
depth = depth == 32 ? depth = 16 : 32 ;
Gracias!
claro, esto es lo mismo que poner...
if (depth == 32)
depth = 16;
else
depth = 32;
end
Gracias, desconocía ese método para declarar un condicional.
Siguiendo con el trabajo
- Se corrigen varios temas con el bliteo de 32 bits (cuando se hacen combinaciones de map_put o map_xput con flags y otras combinaciones de mapas)
- Se modifica la rgb para que en el caso de 32bits retorne el rgba adecuado (con alpha al 100% o sea, 255)
- Se agrega correccion al soporte de vsync, ahora se usa directx para el vsync (por el momento solo windows, pero ya tengo las funciones para linux, solo que no tengo un linux nativo para probarlas... pero ya estara en su momento)
- Otros fixes varios que no recuerdo... (no me pidan recordar mucho, vengo durmiendo 2 horas por dia desde hace 2 meses...)
Hola a todos y fantastico trabajo Splinter.
Una duda, porque en el fichero test.prg que ha posteado linkernel aparece muy lento y brusco el scroll a diferencia de tu ejemplo en la pagina de betas Splinter? y el modo 7 tambien aparece fatal y brusco?
Gracias y genial el trabajo.....
P.D. A ver si cuando saques la primera release pudieras pasar una recopilacion de cambios con respecto a Fenix porque a veces no se te puede seguir el ritmo. ;)
Otra cuestion es que al parecer cuando ejecutas varias veces bennu se va volviendo algo brusco....se liberan bien los recursos? parece como si le costara a sdl...
Un abrazo
sinceramente no me pasa, es la primera persona que lo dice, los recursos se liberan todos, pero como sea, cuando uno cierra un programa los recursos se liberan automaticamente... actualmente en bennu solo se estan liberando por algun futuro desarrollo donde se necesite ejecutar varias veces el motor en casos donde la aplicacion no termine cuando termina el runtime... y este se pueda volver a ejucutar bajo ciertas condiciones...
por otro lado una cosa diferente es setear comportamientos y no volver a restaurarlos, pero los recursos se liberan al morir los programas, esto es siempre asi... salvo casos muy especificos de uso de memoria compartida y/o colas de algun tipo especifico... todas cosas que no usamos con bennu... pero si podes ser mas explicito ayudaria con el tema....
nen, duerme un pokillo mas que lo recomendable son 8 a ver si nos keamos sin coder :D. Por cierto, serìa factible de no depender de SDL?, es dedir, usar Allegro u otra libreria que te abstaiga del HW pero que siga siendo trasnparente para el coder en bennu.
Por otra parte, repregunto si es posible con alguna opcion o programa externo insertar las dll necesarias en el exe final.
cual es el problema con la SDL? estuve viendo algunas cosas de allegro y no me gustaron nada, los que conocen ambas librerias desaconsejan allegro...
no, las dlls son recuersos separados, el sistema operativo las tiene que cargar, y por eso no pueden ser metidas dentro del exe...
Problema con SDL?. Ninguno,simplemente digo tener opciones, usar directx del tiron u opengl o alternativas de cualquier índole, no se allegro es clavadito a SDL, si alguien dice que es peor, es
simplemente porque no ve sus cosas buenas. nada es peor o mejor solo son formas distintas de realiza una solución ambas tendran eficiencia en cosas distintas a las otras, no creo que tú con la solera que demuestras tener seas capaz de declinarte por una o por otra objetivamente :D.
bien... tenemos que recordar que no solo el video es lo que ofrece SDL, y SDL actualmente se usa para muchas cosas, no solo para el video... de hecho es muy poco lo que se usa del video SDL...
Opengl, por supuesto, pero esto no quitara la dependencia de SDL, ya que se usa para cosas como el teclado, mouse, sonido, y otras tantas cosas mas...
Quote from: Makinor on October 04, 2008, 09:19:13 PM
P.D. A ver si cuando saques la primera release pudieras pasar una recopilacion de cambios con respecto a Fenix porque a veces no se te puede seguir el ritmo. ;)
Me uno a la petición, porque agosto sin internet me ha dejado muchísimo que leer, y en este mes otro tanto XD
En fin, mi enhorabuena por como va quedando todo, y viendo que ya tenemos modo 32 bits, podré hacer una versión de Venturer en HD (como me pidió Donan en su dia).
NOTA MENTAL: al acabar el programa que estoy haciendo, portar el motor de tiles v3 a Bennu.
Hola drumpi, pense que ya nos habias abandonado... El de tiles que vos me pasaste ya lo corri en bennu, hace tiempo, incluso en 32 bits, pero claro, no tiene graficos a 32 bits... :D
Hola,
Quote from: SplinterGU on October 04, 2008, 08:20:29 PM- Se agrega correccion al soporte de vsync, ahora se usa directx para el vsync (por el momento solo windows...
pese a que se dice que se corrigió el problema del vsync, lo cierto es que yo he probado y, aunque mejora muchísimo la nitidez del scroll (comparado con Fenix), lo cierto es que sigue sin irme fino, pues cada 'x' segundos se nota que se produce la dessincronía y entonces aparece el típico efecto de una banda horizontal que va subiendo por la pantalla desde abajo y que al llegar arriba desaparece para estar unos instantes mostrándose perfecta la pantalla y entonces vuelta a empezar con la barra...
Mi pregunta es si existe algún flag o combinación de estos para añadir a set_mode u otra solución y que se me haya escapado (ya he probado con la pareja MODE_DOUBLEBUFFER | MODE_HARDWARE pero sigue sin ir fino) para solucionar esto, y si no, pues nada :-)
Saludos.
no, no son esos los flags... el flag es WAITVSYNC...
Igualmente puede que no te vaya bien, si tenes ATI... funciona bien en GFORGE... por otro lado, la version que tengo en mi poder que todavia tengo que subir, si esta corregida para que funcione con todas las tarjetas...
Vale, perfecto, ahora sí que va fino con el WAITVSYNC :)
Por cierto, mi chip gráfico es un nvidia GeForce 8400M G.
Gracias y gran trabajo el que estás realizando con Bennu.
Quote from: SplinterGU on October 08, 2008, 10:50:39 AM
Hola drumpi, pense que ya nos habias abandonado... El de tiles que vos me pasaste ya lo corri en bennu, hace tiempo, incluso en 32 bits, pero claro, no tiene graficos a 32 bits... :D
No, no os he abandonado, simplemente que tenía flojera de lectura :D:D:D Solo pido un poco de paciencia porque soy MUY MUY MUY reacio a cambiar de programas cuando estoy cómodo con uno. El DIV2 no lo abandoné hasta que fui obligado por w2k, así que, aunque Bennu es, en el fondo, Fenix "splinter version", tardaré en acostumbrarme a incluir librerías.
Y si, es cierto, probamos el scroll tileado, lo recordé un par de noches despues de escribirlo. Pero aun no había soporte de los FPG (que es una de las razones del miedo al cambio, tengo que admitir). En fin, si ya lo hay pronto lo pasaré oficialmente a Bennu, tan pronto termine las pruebas en GP2X. Por cierto, que los FPG eran de 8bits hechos con el DIV2, por si quedaban dudas del funcionamiento de estos en otros modos de color ^^U
;)
se da funcionalidad a la variable local "palette", donde se permite asignar una paleta propia a los procesos con graficos de 8 bits...
Actualizacion del modulo render en el site de betas... tambien bajar el sample "palettes.rar" y probar unos ejemplos de uso de paletas... incluido la asignacion de paletas por proceso, usando un mismo grafico...
Hola.
No sé si lo que voy a escribir está fuera de tiesto, pero es que me he dado cuenta ahora de un warning en la versión para Linux, del cual no me había dado cuenta hasta ahora (soy poco observador, sí). No sé si ya se ha solucionado...
Va todo bien, pero cuando compilo sale este mensaje:
librender:0: warning: Variable redeclared ("ALPHA_STEPS")
¿Es importante?
Pasa en la de windows también desde hace tiempo, según SplinterGU parece que no tiene importancia.
Sale desde hace unas cuantas versiones, Splinter dijo que lo ignorasemos : error (http://forum.bennugd.org/index.php?topic=102.msg1954;topicseen#msg1954)
Voy a explicar el motivo del por que el warning...
Los modulos (dlls) pueden declarar las variables que les son utiles/propias en su codigo, resulta que muchas de estas variables son utiles/propias a varios modulos pero no necesariamente los modulos que la declaran tienen que estar si o si en la compilacion, entonces cada uno de estos modulos opcionales necesitan declarar dichas variables, estas variables al momento de ejecucion apuntan al mismo espacio de memoria y deben ser del mismo tipo para no tener problemas... entonces el compilador no considera esto como un error de redeclaracion ya que estos casos son posibles, entonces, lo advierte como un warning para que el programador del modulo lo tenga en cuenta y revise de no haber declarado la variable con un tipo diferente... es solo una advertencia de que la variable tambien fue declarada previamente por otro modulo...
aprovechando que hablamos de los módulos, cuando se exporte el proyecto a exe, ¿es necesario tener todas las librerías en la carpeta o sólo las que carga nuestro proyectos, y las dependencias (de las que dependen)?
solo las que carga y sus dependencias...
estoy pensando en poner algun log que diga que modulos se usan... pero lamentablemente podre informar los modulos/libs bennu, las externas como SDL, ogg, etc... no puedo saber si se necesitan o no... por lo menos no de forma automatica...
Quotesolo las que carga y sus dependencias...
estoy pensando en poner algun log que diga que modulos se usan... pero lamentablemente podre informar los modulos/libs bennu, las externas como SDL, ogg, etc... no puedo saber si se necesitan o no... por lo menos no de forma automatica...
Es muy bueno saber que ya no es necesario poner todas las librerías. En cuanto a lo de las externas, por ahora sería incluirlas todas, al fin y al cabo no son tantas.
La idea de poner un "log que diga que modulos se usan" es una excelente idea, sin embargo de mientras con la lista que nos diste en la nueva versión creo que podemos saber cuáles mods son los que nuestro proyecto usa. Gracias por todo :) , la nueva versión cada vez me deja más asombrado, Felicidades.
Wip 14, Linux/Win32
Core:
- args fix, now argc (argument count) say count of argv... and argv[0] is dcbname in not stub version, and executable name in stub version.
Modules:
- Several casts
- Add some includes
- Indent
- Some pointers size fix
- Remove unused vars
- Fix in use of grlib_destroy when error creation.
- Somes casts in palette module
- Linux port of libvideo
- Load map functions return 0 on fail
- Split MAGIC used in fpg/map/pal to MAGIC of 7 bytes and 1 byte for version
Ese ahíí!!
ejemplo?
Fixed sample 4 of palettes.rar... bad name in fpg...
si queres agregame al msn y hablamos antes que me retire a dormir...
Perdona Splinter, ha sido fallo mío.
Estaba probando el tutorial de matamarcianos que hizo Drumpi hace mil años, para aprovecharlo para mañana y no me fijé en ponerle el "&" a la variable de un write_int. Ahora va bien; de todas maneras, estoy investigando por qué los dibujos se ven mal, sin colores y el negro absoluto viéndose como un blanco raro...Me parece que es un problema de paletas al querer usar en modo 16 un gráfico de 8 bits...ahora lo pruebo.
Hola. MIrad, he estado probando el tema de los gráficos con la nueva Wip14 (en Linux, pero supongo que es igual en Windows) y esto es a lo que he llegado:
-Si se cargan gráficos de 8 bits (o sea, voy al Gimp al menú Imagen->Modo->Indexado) con load_png, aparentemente no hay ningún problema...
-Si se cargan gráficos que no son de 8 bits (o sea, voy al Gimp al menú Imagen->Modo->RGB) con load_png, directamente no se ve nada de nada.
-Si se cargan gráficos de 8 bits con load_fpg, se ven raros: las zonas de negro (las transparentes) se ven blancas, y los colores precisamente se ven transparentes...
-No he podido cargar gráficos que no son de 8 bits en un fpg porque el png2fpg no lo hace: no genera ninguna salida.
Qué cosas. ¿A alguien más le pasa este mismo problema?
Bueno, hasta luego.
P.D: Si alguien quiere probar este tema, aquí os paso las imágenes de 8 bits, el fpg con éstas dentro y el código del jueguecito: http://www.xtec.net/~otorren2/MataMarcianos.tar.gz (EDIT: Link Corregido...)
Para el png2fpg, todos los graficos tienen que ser de la misma profundidad de color...
Podes tambien probar forzar el modo de video en el png2fpg...
Lo demas que dijiste no entendi nada... o sea, no se ven en el gimp? no entiendo...
Ah!, vale, gracias. Seguramente el fallo del png2fpg viene por ahí, porque estaba mezclando imágenes de diferentes profundidades. Ahora lo pruebo: si no digo nada es que va bien.
Lo que quería decir es que si la misma imagen, la convierto de indexada a RGB con el Gimp, cuando luego ejecuto el juego entonces se deja de ver, pasa a estar invisible.
Gracias por tener paciencia a las molestias que estoy causando...
Si lo pasas a RGB de 32 bits y no estas seteando el alpha al 100% (255), entonces significa que el alpha es 0, por ende invisible.
Funciona perfectooooo!!!!!!! A 32 bits con transparencias, fuera o dentro del fpg creado con el png2fpg. Aaaaaahhh!!!
Se acabó lidiar con el color negro como transparente. Los 8 bits al olvido!!! Aaaaahhh!!!
Ejem,ejem. Es muy tarde, ya no controlo lo que digo...
- new set_window_pos, get_window_pos and get_window_size functions
- GET_WINDOW_SIZE now difference between window size and client area
- GET_DESKTOP_SIZE added
- Linux Port (need tested)
Estoy intentando migrar a la wip14, pero tengo un problema, cuando intento compilar mi programa machaca marcianos, me salta un error diciendo que le falta bgdi.dll, me he fijado que la wip14 viene sin esa dll, y usar la dll de la wip2 no soluciona el problema, donde puedo encontrar la dll que falta?.
no va mas bgdi.dll... quitala...
Ok, "yasta" ya he emigrado a wip14, el problema con la dll fantasma, era que sin querer habia copiado el fichero bgdc.import de la version wip2 ::) ::) :P :P :D :D, pero he vaciado el import y problema casi solucionado, por que aparte he tenido que ir añadiendo mas dll nuevas, y algun que otro cambio que ha habido de sintasis en el bennu, pelearme con alguna que otra constante redefinida. Bueno a partir de ahora a seguir desarrollando el machacamarcianos e ir cazando bugs en el bennu wip14. hasta pronto.
Fantastico, me alegra saber que ya te pasaste a la ultima...
Juan, no quiero meterte prisa ni nada parecido porque la WIP14 ya es increiblemente funcional. Pero tengo la duda; en que fase se encuentra el desarrollo de Bennu, esta cerca de la 1.0 o todavia le falta algo? Es solo curiosidad. El trabajo que estas haciendo es fantastico. Saludos!
para la release de la siguiente version falta poco...
para la 1.0, falta unas cuantas releases, todavia... tiene que quedar todo finalizado, y hay algunos cuantos temas que completar... mas alla de las nuevas funcionalidades que tengo planificadas, que no necesariamente tienen que estar incluidas en la 1.0...
para la 1.0 (que no es la 0.93 release) calculo faltan de 6 a 12 meses...
Quote from: SplinterGU on October 21, 2008, 04:08:07 PM
para la 1.0, falta unas cuantas releases, todavia... tiene que quedar todo finalizado, y hay algunos cuantos temas que completar... mas alla de las nuevas funcionalidades que tengo planificadas, que no necesariamente tienen que estar incluidas en la 1.0...
para la 1.0 (que no es la 0.93 release) calculo faltan de 6 a 12 meses...
A este ritmo, en 6 o 12 meses, cualquiera sabe las novedades que nos traes.
- Prohibit unload font 0
- Fix controls points + mirrors + angle
- Check if graph exist on gr_save_png
- Fix on 32 bits collision
- Fix on 32 bits blits
- mod_debug added! with some improvements... ;)
Great!!
Quote from: SplinterGU on October 26, 2008, 06:28:50 AM
- mod_debug added! with some improvements... ;)
This looks like great... Great work Juan, there're no words to say it.
I forget...
- Spanish runtime error translated to English
- Linux Port
- Fixes on mod_wm, linux
Por qué se habla en ingles en el Foro Español??? XD eso está bien en el Foro English para postear más allí.
Por fin la consola de debug! gracias, y con mejoras, habrá que ver esas mejoras... o habrá que adivinarlas porque no son visibles??? Esperando la nueva WIP con ganas, veo que la WIP-15 para linux se está subiendo (veo como los KB van cambiando jeje), así que no tardará mucho en estar completa y también la de windows.
Gran trabajo.
en ingles, porque me resulta mas facil copy&paste del svn... sorry...
mmm... ya estoy subiendo la version 15... en un rato estara disponible...
exacto...
me olvide algunas cosas, que no puse en el help...
con shift+cursor se agranda y se achica la consola...
Juan como esta el fpg.exe y el map.exe, ya tienen soporte 32 bits? Seria mucho pedir que los incluyeras en las WIP?
Wip 15 disponible...
lamentablemente esas utilidades no tienen soporte 32bits... de momento te sugiero usar el png2fpg... prg esta trabajando en un editor, si la cosa se complica, voy a hacer uno yo, uno simple, no pretendo hacer algo complejo, sino algo que permita importar graficos (no exportar, ni tampoco convertir) y ponerle puntos de control... nada mas que eso...
Entendido, pero sigo pensando que seria bueno incluirlos en la WIP aunque no tengan soporte 32 bits. Gracias por la WIP15, bajando y probando. Karma plus. Saludos! :)
sin soporte 32 bits, tenes la version de fenix, que sirve igualmente ...
Mañana en el curro (trabajo) emigro a la wip 15, tengo por desgracia :( 8 horas para hacerlo.
- Some debug fixes
WIP15a uploaded!
Que bueno!! gracias por devolverme el debug, me estaba volviendo loco!
Quote from: SplinterGU on October 26, 2008, 04:24:30 PM
en ingles, porque me resulta mas facil copy&paste del svn... sorry...
Mmmm, me pregunto dónde andará el svn.... svn.bennugd.org me dice que tururú, que a ver quién soy :)
A ver si cojo mi viejo karaoke y lo porto a bennu, que tengo ganas de tocarlo...
el svn esta en mi pc... ;)
pronto se liberara, en tanto todos colaboren con las pruebas y lo depuremos...
:)
A ver si me pongo y porto mis librerías que tengo unas cuantas ideas para mi karaoke.
Si sale algo, te cuento.
Quote from: josebita on October 28, 2008, 08:33:45 PM
:)
A ver si me pongo y porto mis librerías que tengo unas cuantas ideas para mi karaoke.
Si sale algo, te cuento.
Karaoke?
Código rápido que escribí para una fiesta de mi cumple del año pasado. Puede leer los ficheros del ultrastar, aunque está muy verde por algunos lados, es divertido y funciona.
Por cierto, que usa librerías para poder utilizar ficheros de texto de cualquier charset (un binding para iconv) y para podeer reproducir sonido por gstreamer (por historias de codecs y alguna cosilla más).
- Debugger's new appearance
- New characters added to debug's system font
- New debug's functions: breakall, breakalltypes, deleteall, deletealltypes, go, nextframe, nextproc.
- Process list in brief mode
- Process browse window, by id or by type, allowing to set/remove breakpoints, inspect his variables, etc...
- Palete fix on 8 bits fpg save
- Mirror fix on angle = 0
- Several module's dependencies added
- SDL_Initializations on some modules
- Debug info add at loading modules in runtime...
- English messages in compiler
Wip 15b uploaded
Bajando para probar el debbuger, gracias!
Re-emigrando "again" a la wip15b, tengo 8 horas para hacerlo esta tarde en el "curro". ::) ::)
Quote from: SplinterGU on October 29, 2008, 01:57:22 AM
- Debugger's new appearance
- New characters added to debug's system font
- New debug's functions: breakall, breakalltypes, deleteall, deletealltypes, go, nextframe, nextproc.
- Process list in brief mode
- Process browse window, by id or by type, allowing to set/remove breakpoints, inspect his variables, etc...
Simplemente genial, ahora es una consola mucho mas controlable, me ha gustado mucho nextframe, nextproc(que en vez de hacer un "TRACE" por todas las lineas de todos los procesos hasta llegar al procesos que te interesa; con esto pasas directamente al proceso siguiente y luego ya usas TRACE linea a linea), la browse window by id or by type, el poder set/remove breakpoints y inspect his variables. Pero he tenido que adivinar las TECLAS jeje, con el SHIFT para ver la browse window, y con el ALT+FECHAS ajustar el tamaño de la consola, mucho mejor que como era antes (COLUM.. =80, etc). He testeado todo lo que pongo que me agrada y no he visto bugs.
Gran trabajo.
PD: ya verías que en la WIP15a no se podía escribir en la consola, esto ya no pasa en la WIP15b
Quote from: SplinterGU on October 29, 2008, 01:57:22 AM
- Debugger's new appearance
- New characters added to debug's system font
- New debug's functions: breakall, breakalltypes, deleteall, deletealltypes, go, nextframe, nextproc.
- Process list in brief mode
- Process browse window, by id or by type, allowing to set/remove breakpoints, inspect his variables, etc...
- Palete fix on 8 bits fpg save
- Mirror fix on angle = 0
- Several module's dependencies added
- SDL_Initializations on some modules
- Debug info add at loading modules in runtime...
- English messages in compiler
Qué buena pinta tiene! Ahora todo está mucho más controlable y accesible. No tienes que memorizar comandos y con atajos de teclado que -además- se muestran en la consola, todo se hace más fácil. Todo un acierto!
Me alegra que haya gustado... yo si encontre un bug... que me pasó con nextframe teniendo 2 procesos... luego de un tiempo o tras un let_me_alone (creo) la consola quedo llamandose constantemente... mostrando la imagen animada y las entradas a la consola a la vez, solo parando al pulsar nuevamente alt+c... quizas tenga simple solucion, pero por ahora es un bug conocido...
Bueno, ya tengo una solucion temporal, el problema es que cuando da la vuelta completa de los procesos a ejecutar (hizo un frame completo sobre todos los procesos) el primer proceso entra 2 veces a la consola, no ejecuta nada, pero la instruccion aparece 2 veces en la consola...
Solucionado!
descargando y probando :)
Bien gente, muchas visitas y pocos comentarios...
Necesito que por favor le dediquen unos minutos a probar esta version... que yo diria ya empieza a ser "Release Candidate"... pero tambien necesito un poco de feedback de Uds., para dejarla lista para liberarla como Release...
Gracias...
Hola SplinterGU, he cazado un bug en la wip15b, es poco importante pero es un bug de todas formas, cuando compilo un programa en el bgdc, en el resultado de la compilacion hay omision de etiquetas en los datos sacados a la consola de los comando, para que se entienda:
BGDC 0.93 (Oct 18 2008 18:33:02)
Copyright ® 2006-2008 SplinterGU (Fenix/Bennugd)
Copyright ® 2002-2006 Fenix Team (Fenix)
Copyright ® 1999-2002 JosÚ Luis Cebrißn Pag³e (Fenix)
Fenix comes with ABSOLUTELY NO WARRANTY; see COPYING for details
librender:1: warning: Variable redeclared ("ALPHA_STEPS")
File AirWars_0v06.dcb compiled (145153 bytes):
Processes 26
Global data 1592 bytes
Local data 204 bytes
Private data 2512 bytes
Public data 24 bytes
Code 54060 bytes
System processes 238
Globals vars 72
Locals vars 28
Private vars 93
Publics vars 6
Identifiers 994
Structs 11
Strings 41 (407 bytes)
omision de etiquetas? a que te referis?
si te referis al texto que iba detras de los totalizadores, si te referis a eso, lo elimine... era redundante, poner:
"Processes 123 processes"
etc
Otro posible error, digo posible error por que puede ser un comportamiento del fenix, es el caso siguiente, tengo una serie de procesos los cuales han reservado memoria dinamica, y los cuales cuando son destruidos liberan la memoria dinamica que han reservado mediante la clausula ONEXIT, el proceso principal tambien reserva memoria dinamica, liberando igualmente la memoria dinamica cuando este es destruido, usando de nuevo un ONEXIT, pero antes de liberar su correspondiente memoria, el proceso principal mata a todos los procesos con un Let_Me_alone().
[code language="bennu"]
BEGIN // Proceso principal.
... // Codigo
...
ONEXIT
Let_Me_Alone(); // Matamos todos los procesos menos el principal
FinalizaGeneral(); // Liberamos recursos y memoria dinamica
END
[/code]
ejecuto el juego, finalizo el juego saliendome del bucle principal del proceso principal y dejando terminar el proceso principal, si entre los procesos que Let_Me_Alone a muerto hay Procesos que han reservado memoria dinamica, se produce un error tipo de windows "DGDI.EXE ha detectado un problema y debe cerrarse, bla bla, bla" con los tres clasicos botones, pero si entre Let_Me_alone() y FinalizaGeneral(), añadimos un FRAME tal que asi:
[code language="bennu"]
BEGIN // Proceso principal.
... // Codigo
...
ONEXIT
Let_Me_Alone(); // Matamos todos los procesos menos el principal
FRAME; // Con esto me libro del BUG.
FinalizaGeneral(); // Liberamos recursos y memoria dinamica
END
[/code]
El bug desaparece, dandole asi tiempo a los procesos a liberar su memoria dinamica, antes que lo haga el proceso principal.
P.D: El post es un poco "tocho" pero es la mejor forma que he encontrado para explicarme.
Quote from: SplinterGU on October 30, 2008, 10:05:10 AM
si te referis al texto que iba detras de los totalizadores, si te referis a eso, lo elimine... era redundante, poner:
"Processes 123 processes"
etc
Aaaah ok, entendido.
Quote from: kim-elet-o on October 30, 2008, 10:20:47 AM
Otro posible error, digo posible error por que puede ser un comportamiento del fenix, es el caso siguiente, tengo una serie de procesos los cuales han reservado memoria dinamica, y los cuales cuando son destruidos liberan la memoria dinamica que han reservado mediante la clausula ONEXIT, el proceso principal tambien reserva memoria dinamica, liberando igualmente la memoria dinamica cuando este es destruido, usando de nuevo un ONEXIT, pero antes de liberar su correspondiente memoria, el proceso principal mata a todos los procesos con un Let_Me_alone().
[code language="bennu"]
BEGIN // Proceso principal.
... // Codigo
...
ONEXIT
Let_Me_Alone(); // Matamos todos los procesos menos el principal
FinalizaGeneral(); // Liberamos recursos y memoria dinamica
END
[/code]
ejecuto el juego, finalizo el juego saliendome del bucle principal del proceso principal y dejando terminar el proceso principal, si entre los procesos que Let_Me_Alone a muerto hay Procesos que han reservado memoria dinamica, se produce un error tipo de windows "DGDI.EXE ha detectado un problema y debe cerrarse, bla bla, bla" con los tres clasicos botones, pero si entre Let_Me_alone() y FinalizaGeneral(), añadimos un FRAME tal que asi:
[code language="bennu"]
BEGIN // Proceso principal.
... // Codigo
...
ONEXIT
Let_Me_Alone(); // Matamos todos los procesos menos el principal
FRAME; // Con esto me libro del BUG.
FinalizaGeneral(); // Liberamos recursos y memoria dinamica
END
[/code]
El bug desaparece, dandole asi tiempo a los procesos a liberar su memoria dinamica, antes que lo haga el proceso principal.
P.D: El post es un poco "tocho" pero es la mejor forma que he encontrado para explicarme.
no sera que los demas procesos acceden en el onexit a datos alocados por el principal o datos que libera el principal? o estaras desalocando varias veces lo mismo (llamando a la misma funcion de desalocar en todos los procesos, sin hacer chequeos de que si estos ya fueron liberados)?
No, los procesos "hijos" acceden a los datos dinamicos del proceso principal fuera de su ONEXIT, el codigo de ONEXIT de los procesos "hijos" solo elimina los datos dinamicos de los procesos "hijo" .
No, uso una funcion comun, cada uno tiene su codigo propio para eliminar sus datos dinamicos propios.
te paso mi directorio de trabajo por si le quieres hechar una ojeada:
http://rapidshare.com/files/158960023/airwars.zip.html
P.D: Y aunque suene contradictorio despues de haberte dado mas trabajo: Leñe! descansa un poquito que no queremos que te pongas pachucho, que te queremos mucho. ;D ;D ;D
Ya tengo que salir, por la noche lo bajo y lo miro, gracias...
No te preocupes, como viene siendo habitual, es un error mio, resulta al morir estos procesos "hijos", generaban otros procesos hijos que intentaban utilizar los recursos ya borrados del proceso principal, solucion: he añadido una funcionalidad a mi "engine" de enemigos, un sistema de señales especificas para evitar estos casos y otros casos futuros que ya ire desarrollando en un futuro cercano, gracias por las molestias tomadas.
puf, me da error la descarga... no lo puedo chequear...
ahhh, ok, no era problema de bennu, fantastico...
Corregido tremendo bug al procesar comandos de preprocesamiento:
#if <expresion>
dejaba el codigo generado por la expresion en el codigo del dcb... :P
Quote from: SplinterGU on October 31, 2008, 03:08:03 AM
Corregido tremendo bug al procesar comandos de preprocesamiento:
#if <expresion>
dejaba el codigo generado por la expresion en el codigo del dcb... :P
ufff suerte que lo has detectado, buen trabajo! :)
Me volvi loco preguntandome que tenia mal dentro de las funciones nuevas que habia hecho en la GUI y no era la GUI, era el compilador...
Tambien detecte otros bugs o mejor dicho comportamiento que no es el deseado, pero bueno, ya lo arreglare, aunque no es nada tan grave...
gracias...
Version Wip15c (solo windows por ahora, luego subo la version linux y actualizo las noticias en la seccion ingles, ahora mismo no tengo tiempo de hacerlo)
Incluye, Core:
- Fix copyright text in bgdc and bgdi
- Add project basename path to includes paths
- Add project basename path in messages errors
- #if preprocesor fix
- English message fixed
Modules:
- Get graphic library fix when lib == 0 and map-> is > 0 and < 999
- NEXTPROC fix in mod_debug
- Mouse x and y now setting with value 99999 on startup
Hola, perdona Splinter, en la wip 15.c ha dejado de salirme el gráfico que tenía para el mouse, un saludo :)
que grafico no te sale? da un poco mas de detalles, a mi me funciona perfectamente.
Pues es uno normal a traves del load_fpg, mouse.file y mouse.graph etc :-\ esque con el wip 11 si iba, y no he hecho nada con el mouse para que ahora no funcione. no se, la verdad esque no estoy seguro, mando ahora todo el trabajo hecho.
ya vi el error, ya lo corregi, gracias por el reporte, ahora en un rato subo un parche... para el modulo corregido...
patch disponible... wip15c.2
Bueno esto no es un bug en el "mod_debug", pero a ver que te parece...
En cierto momento del código, hago:
fade_off()
...
....
...
debug;
..
......
..
....
fade_on();
Entre los Fade_on/off hago unloads, loads, coloco cosas en su sitio... incluso FRAMES para que otros procesos puedan hacer cosas concretas con la pantalla apagada(fade_off), el problema es bien sencillo, cuando llamo a la "consola de debug", no la veo, aunque estar si que está, tengo que hacer //fade_off() cuando hay "debug;" cerca, la consola no debería hacer un encendido/apagado de pantalla automáticamente al llamarla??? en el viejo div2 creo recordar que si estaba apagada... al llamar al trazador... la encendida... y al cerrar el trazador la dejaba apagada otra vez.
podria ser...
Ejecuto: "Bennu-WIP15c2\bgdi Rally.dcb >Log.txt 2>Error.txt" desde la consola en win xp.
Desde el juego salgo con: "exit("Gracias por jugar.",9);"
Problema: Este exit no muestra "Gracias por jugar." en ningún lado, ni en la consola ms-dos, ni en Log.txt, ni en Error.txt, ni en un msgbox. Eso sin contar con que funcione bien y Retorne 9, al .BAT que le llamó por ejemplo.
Quote from: TYCO on November 06, 2008, 01:47:33 PM
Ejecuto: "Bennu-WIP15c2\bgdi Rally.dcb >Log.txt 2>Error.txt" desde la consola en win xp.
Desde el juego salgo con: "exit("Gracias por jugar.",9);"
Problema: Este exit no muestra "Gracias por jugar." en ningún lado, ni en la consola ms-dos, ni en Log.txt, ni en Error.txt, ni en un msgbox. Eso sin contar con que funcione bien y Retorne 9, al .BAT que le llamó por ejemplo.
En el codigo Fenix (tambien en Bennu) dice claramente...
/** EXIT ()
* Leaves the program at next frame (two parameters accepted for compatibility)
*/
A esto agrego, la funciones "exit" no es retorno directo al SO, hace una salida ordenada, matando primero a todos los procesos... aunque realmente tampoco lo hace, y no tiene mucho sentido lo que se hace, ya que si bien envia la señal de kill a todos los procesos, apenas retorna de la ejecucion del proceso actual, fuerza una salida del loop principal, sin esperar que los demas ejecuten su exit...
for compatibility... simplemente los acepta... pero no los usa, si la frase "Gracias por jugar." no se va a mostrar en "Bennu v1.0" no veo lógico que se pueda poner como parámetro. Fénix desde la 0.84 y más aún Bennu dejaron hace tiempo de ser compatibles con div (empezando por los fwrite, fread, load, save, etc).
Lo único que quede claro para los novatos que no es un bug que no salga ese mensaje.
Otra cosa... si en el código hay funciones que llaman a la consola (debug;) y no has hecho: import "mod_debug"; genera el archivo DCB sin dar errores ni advertencias. Es algo sin importancia, pero ahí lo dejo.
1) Quizas la exit necesite un replanteo...
2) La instruccion "debug" es propia de bennu, no del modulo debug... por ende es correcto que no de error... quizas deba removerse del core y meterse en el mod_debug...
Nuevo modulo interface portable de funciones externas... (importar cualquier dll/so a bennu)... version experimental que sufrira ciertos cambios, pero ya es funcional... se pueden importar dlls del operativo, ya hice un ejemplo, que manipula la ventana, muestra un MessageBox (del operativo), lee el estado de la pulsacion de los botones y actua en consecuencia...
Con esto, mucha de la creacion de modulos para incorporar funcionalidades existentes en dlls externas ya no sera necesaria... en la mayoria de los casos, solo bastara con importar la dll y a disfrutar...
Actualmente solo se soportan tipos de datos basicos, pero pronto soportara estructuras, la idea es probar que el metodo es factible... y de hecho ya es una realidad...
Esto no dará problemas en multiplataforma? (linux, etc)
No, como dije, es portable... se usa una libreria opensource con una licencia totalmente permisiva para realizar esto... soporta:
arm oabi linux
arm eabi linux
hppa linux
mips o32 linux (little endian)
powerpc darwin
powerpc64 linux
sparc solaris
sparc64 solaris
x86 cygwin
x86 darwin
x86 freebsd
x86 linux
x86 openbsd
x86-64 darwin
x86-64 linux
x86-64 OS X
x86-64 openbsd
y actualmente se usa en muchos lenguajes populares, algunos son:
PHP, Lua, Java, Python, PyObjC, RubyCocoa, gcj, GNU Smalltalk, IcedTea, Pawn, Squeak,...
Como dije es portable, da una forma standard de llamar a librerias dinamicas entre sistemas operativos... obviamente que esto no quiere decir que podes llamar a una lib de windows desde linux, pero asi como usamos la exec para ejecutar aplicaciones externas desde Bennu, tambien podes usar este modulo para hacer lo propio con las dls... recorda que en todo momento desde Bennu podes saber en que operativo estamos corriendo...
Me encanta esa funcionalidad, pero mucho mucho. :D :D :D :D :D
Quote from: kim-elet-o on November 07, 2008, 10:00:21 AM
Me encanta esa funcionalidad, pero mucho mucho. :D :D :D :D :D
gracias
Codigo de ejemplo (las funciones pueden sufrir modificaciones, por ahora es experimental, y lamentablemente por problemas de internet no puedo subir ninguna version hasta que me solucionen el problema de que no puedo subir mas de 4kb y con problemas):
import "mod_video";
import "mod_ffi";
import "mod_say";
import "mod_wm";
import "mod_key";
/* --------------------------------------------------------------------------- */
#define SW_HIDE 0
#define SW_NORMAL 1
#define SW_SHOWNORMAL 1
#define SW_SHOWMINIMIZED 2
#define SW_MAXIMIZE 3
#define SW_SHOWMAXIMIZED 3
#define SW_SHOWNOACTIVATE 4
#define SW_SHOW 5
#define SW_MINIMIZE 6
#define SW_SHOWMINNOACTIVE 7
#define SW_SHOWNA 8
#define SW_RESTORE 9
#define SW_SHOWDEFAULT 10
#define SW_FORCEMINIMIZE 11
#define SW_MAX 11
/* --------------------------------------------------------------------------- */
#define MB_ABORTRETRYIGNORE 2
#define MB_APPLMODAL 0
#define MB_DEFAULT_DESKTOP_ONLY 020000h
#define MB_HELP 04000h
#define MB_RIGHT 080000h
#define MB_RTLREADING 0100000h
#define MB_TOPMOST 040000h
#define MB_DEFBUTTON1 0
#define MB_DEFBUTTON2 256
#define MB_DEFBUTTON3 512
#define MB_DEFBUTTON4 0300h
#define MB_ICONINFORMATION 64
#define MB_ICONSTOP 16
#define MB_OKCANCEL 1
#define MB_RETRYCANCEL 5
/* --------------------------------------------------------------------------- */
#define HWND_BROADCAST (0FFFFh)
#define HWND_BOTTOM (1)
#define HWND_NOTOPMOST (-2)
#define HWND_TOP (0)
#define HWND_TOPMOST (-1)
#define HWND_DESKTOP 0
/* --------------------------------------------------------------------------- */
type _RECT;
INT left;
INT top;
INT right;
INT bottom;
end
/* --------------------------------------------------------------------------- */
Global
fMessageBox;
fGetForegroundWindow;
fGetConsoleWindow;
fGetWindowThreadProcessId;
fShowWindow;
fGetCurrentProcessId;
fBringWindowToTop;
fSetWindowPos;
fGetWindowRect;
end
/* --------------------------------------------------------------------------- */
process ImportExternals()
begin
fMessageBox = ffi_declare(FFI_STDCALL, "user32.dll", "MessageBoxA", "PPPI", "I");
fGetForegroundWindow = ffi_declare(FFI_STDCALL, "user32.dll", "GetForegroundWindow", "", "I");
fGetConsoleWindow = ffi_declare(FFI_STDCALL, "kernel32.dll", "GetConsoleWindow", "", "I");
fGetWindowThreadProcessId = ffi_declare(FFI_STDCALL, "user32.dll", "GetWindowThreadProcessId", "IP", "I");
fGetCurrentProcessId = ffi_declare(FFI_STDCALL, "kernel32.dll", "GetCurrentProcessId", "", "I");
fShowWindow = ffi_declare(FFI_STDCALL, "user32.dll", "ShowWindow", "II", "I");
fBringWindowToTop = ffi_declare(FFI_STDCALL, "user32.dll", "BringWindowToTop", "I", "I");
fSetWindowPos = ffi_declare(FFI_STDCALL, "user32.dll", "SetWindowPos", "IIIIIII", "I");
fGetWindowRect = ffi_declare(FFI_STDCALL, "user32.dll", "GetWindowRect", "IP", "I");
end
/* --------------------------------------------------------------------------- */
function GetWindowRect(int hWnd, _RECT * lpRect)
private
int ret = 0;
int * values[1];
begin
values[0] = &hWnd;
values[1] = &lpRect;
ffi_call(fGetWindowRect, &ret, &values);
return ret;
end
/* --------------------------------------------------------------------------- */
function SetWindowPos(int hWnd, int hWndInsertAfter, int x, int y, int cx, int cy, int uFlags)
private
int ret = 0;
int * values[6];
begin
values[0] = &hWnd;
values[1] = &hWndInsertAfter;
values[2] = &x;
values[3] = &y;
values[4] = &cx;
values[5] = &cy;
values[6] = &uFlags;
ffi_call(fSetWindowPos, &ret, &values);
return ret;
end
/* --------------------------------------------------------------------------- */
function GetForegroundWindow()
private
int ret = 0;
begin
ffi_call(fGetForegroundWindow, &ret, NULL);
return ret;
end
/* --------------------------------------------------------------------------- */
function GetConsoleWindow()
private
int ret = 0;
begin
ffi_call(fGetConsoleWindow, &ret, NULL);
return ret;
end
/* --------------------------------------------------------------------------- */
function GetCurrentProcessId()
private
int ret = 0;
begin
ffi_call(fGetCurrentProcessId, &ret, NULL);
return ret;
end
/* --------------------------------------------------------------------------- */
function GetWindowThreadProcessId(int hWnd, int * dwProcessId)
private
int ret = 0;
int * values[1];
begin
values[0] = &hWnd;
values[1] = &dwProcessId;
ffi_call(fGetWindowThreadProcessId, &ret, &values);
return ret;
end
/* --------------------------------------------------------------------------- */
function BringWindowToTop(int hWnd,)
private
int * values[0];
int ret = 0;
begin
values[0] = &hWnd;
ffi_call(fBringWindowToTop, &ret, &values);
return ret;
end
/* --------------------------------------------------------------------------- */
function ShowWindow(int hWnd, int nCmdShow)
private
int ret = 0;
int * values[1];
begin
values[0] = &hWnd;
values[1] = &nCmdShow;
ffi_call(fShowWindow, &ret, &values);
return ret;
end
/* --------------------------------------------------------------------------- */
function MessageBox(int hWnd, string title, string message, int btype)
private
int ret = 0;
int * values[3];
char _message[30];
char _title[30];
char * pmessage;
char * ptitle;
begin
_message = message; pmessage = &_message;
_title = title; ptitle = &_title;
values[0] = &hWnd;
values[1] = &pmessage;
values[2] = &ptitle;
values[3] = &btype;
ffi_call(fMessageBox, &ret, &values);
return ret;
end
/* --------------------------------------------------------------------------- */
private
ret;
int hWnd, hMainWnd;
DWORD dwProcessId;
_RECT rect;
begin
ImportExternals();
hMainWnd = GetForegroundWindow();
hWnd = GetConsoleWindow();
GetWindowThreadProcessId( hWnd, &dwProcessId );
if ( dwProcessId == GetCurrentProcessId() )
ShowWindow( hWnd, SW_SHOW );
end
GetWindowRect(hMainWnd, &rect);
SetWindowPos(hMainWnd, HWND_TOPMOST, rect.left, rect.top, 0, 0, 0);
loop
if (key(_ESC))
GetWindowRect(hMainWnd, &rect);
SetWindowPos(hMainWnd, HWND_NOTOPMOST, rect.left, rect.top, 0, 0, 0);
ret = MessageBox(NULL, argv[0], "Are you sure you want to quit?", MB_OKCANCEL);
if (ret == 1)
break;
end
GetWindowRect(hMainWnd, &rect);
SetWindowPos(hMainWnd, HWND_TOPMOST, rect.left, rect.top, 0, 0, 0);
end
frame;
end
end
Aaagghh qué guapoo!!!
Cuando Bennu esté listo hay que lanzar la buena nueva en todos los rincones del mundo!!
Revistas, foros, portales ... aquí viene una nueva era!!
Joé, tiene muy buena pinta. A ver si lo probamos :)
http://wiki.bennugd.org/images/1/1c/Ffitest.zip
aca va el link del programa de prueba con el ultimo update de bennu, perdon que no lo suba como wip, pero no solo es prueba, sino que tengo problemas de internet y para hacer esto, tuve que pasarselo a sandman en 77 fragmentos de 2k, y con varios intentos hasta lograrlo... gracias Sandman por la ayuda y la paciencia.
pd: en el ejemplo, veran que se usa el api para desocultar la ventana de la consola de comandos, tambien veran como se obtiene las coordenadas de la ventana, como se hace que esta sea siempre visible, como se usa un MessageBox y como se interpreta sus resultados... y tambien hay otras funciones mas a modo de ejemplo...
Ese ejemplo solo consigo ver el MsgBox de salida, pero está curioso.
-------------------------------------------------------------------------------
Lo de la función exit("",0); por ejemplo yo en mi código tengo esto:
memoria_libre=memory_free();
memoria_libre=memoria_libre/1024000;
If (memoria_libre < 16)
exit("ERROR_03: Memoria insuficiente. Se necesita un mínimo de 16MB de RAM.",3);
End
Entonces si no puedo leer ese mensaje en la consola... no se por qué ha salido del juego, yo creo que es útil que saldría el mensaje.
puf no solo tiene el messagebox de salida, tiene todas las cosas que describi un post antes del tuyo...
Quote from: TYCO on November 07, 2008, 02:31:23 PM
Ese ejemplo solo consigo ver el MsgBox de salida, pero está curioso.
-------------------------------------------------------------------------------
Lo de la función exit("",0); por ejemplo yo en mi código tengo esto:
memoria_libre=memory_free();
memoria_libre=memoria_libre/1024000;
If (memoria_libre < 16)
exit("ERROR_03: Memoria insuficiente. Se necesita un mínimo de 16MB de RAM.",3);
End
Entonces si no puedo leer ese mensaje en la consola... no se por qué ha salido del juego, yo creo que es útil que saldría el mensaje.
si, si, no digo lo contrario...
potencia&flexibilidadDeBennu+=5;
¿A un pasito para crear aplicaciones con el escritorio como fondo, verdad?
Por decir solo una, que ésto abre muchas puertas...
Grande.
TYCO siempre puedes crearte un fichero para guardar los mensajes de error si se da el caso.
QuoteNuevo modulo interface portable de funciones externas... (importar cualquier dll/so a bennu)...
Increíble, cada vez me dejas más con la boca abierta splinter, esto será muy bueno a la hora de hacer programas como el editor fpg :D .
Increíble todo lo que se puede ahorrar uno usando librerías del sistema... que lo que ya está hecho nos quite los problemas de hacerlo nosotros mismos ;D
oye, y la función set_text_color ya funciona?
eso iba a responderte y me olvido, funciona la set_text_color, solo que para fonts de 1 bit de color... para fonts de mas bits el color es el definido...
De todas maneras, Prg, yo pediría que en el caso concreto del editor Fpg no se hiciera uso de esta funcionalidad, si se quiere que el programa funcione igual para todas las plataformas... Si se meten funciones que manejan dll de windows, se tendría que hacer lo propio para Linux y eso puede ser un follón. La gracia de esto yo lo veo cuando uno quiere hacer un programa para una plataforma concreta, para exprimir sus posibilidades...porque repetir lo mismo para diferentes sistemas operativos repito que puede ser algo tedioso, no?
tal vez si, tal vez no tanto...
- Soporte de todas las formas exit
- Soporte "#define lala() pepe"
- Fonts 32 bits
- STRINGS en la consola de debug, ahora saca la informacion en la misma.
¿He leido bien? ¿dll externas? ¿sin recompilacion y sin usos de los headers? esto hay que celebrarlo.
Es que, si no me he vuelto loco, eso implica no solo el uso de las funciones del sistema para crear ides, o integrarse en el escritorio, tambien el uso de DX, OGL y demás sin necesitar los módulos (salvo para simplificar su uso, claro ^^U) y de librerías libres ya precompiladas que aumentarían exponencialmente la velocidad de los juegos.
Sumo una de karma a Splinter. A este paso, el propio código de Bennu va a quedar a la sombra de todo lo que puede serle compatible XD
entendiste bien...
ahora me surge una duda... el codigo de Bennu va a "quedar" a la sombra o va a "dejar" a la sombra a los demas compatibles...?
XD
Saludos y gracias
Quoteahora me surge una duda... el codigo de Bennu va a "quedar" a la sombra o va a "dejar" a la sombra a los demas compatibles...?
el bennu tiene que quedar arriba :) , y es verdada, otro karma para splinter.
QuoteDe todas maneras, Prg, yo pediría que en el caso concreto del editor Fpg no se hiciera uso de esta funcionalidad, si se quiere que el programa funcione igual para todas las plataformas... Si se meten funciones que manejan dll de windows, se tendría que hacer lo propio para Linux y eso puede ser un follón. La gracia de esto yo lo veo cuando uno quiere hacer un programa para una plataforma concreta, para exprimir sus posibilidades...porque repetir lo mismo para diferentes sistemas operativos repito que puede ser algo tedioso, no?
Es verdad blostec, no te preocupes, no tengo intenciones de hacerlo, por el contrario, tengo otras mejoras que pienso mensionar en el foro. Eh hecho otras mejoras a la gui, y otras cosas que después, quizá en la próxima semana les comente.
fantastico...
Nuevos avances...
- Now division by zero are allow in float expresions, new functions are added:
int isinf(float x);
int isnan(float x);
int finite(float x);
- Ternary condition fixed... and improved speed in ternary condition when expression is constant.
- Add core's functions bgdrtm_entry and bgdrtm_exit to bgdrtm...
- Now exit code can be return at finish execution of bgdi
- Lib WM now don't exit when close botton are clicked, only set exit_status to true
- EXIT(...) functions now fixed, and use the params
Quote from: SplinterGU on November 09, 2008, 10:12:27 AM
- Now division by zero are allow in float expresions, new functions are added:
int isinf(float x);
int isnan(float x);
int finite(float x);
TE AMO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Una pregunta sobre esto, entiendo que un float se vuelve infinito cuando dices que es por ejemplo 2/0, y que se vuelve ¿nan? cuando dices que es 0/0, es esto así?. Qué ocurre si un float que es infinito dices say(variable);??
Gracias por todo.
Quote from: HaCkZJuaNN on November 09, 2008, 10:52:33 AM
Quote from: SplinterGU on November 09, 2008, 10:12:27 AM
- Now division by zero are allow in float expresions, new functions are added:
int isinf(float x);
int isnan(float x);
int finite(float x);
TE AMO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Una pregunta sobre esto, entiendo que un float se vuelve infinito cuando dices que es por ejemplo 2/0, y que se vuelve ¿nan? cuando dices que es 0/0, es esto así?. Qué ocurre si un float que es infinito dices say(variable);??
Gracias por todo.
import "mod_say"
import "mod_math"
Private
int i;
float n = 10,n1 = 0;
int i2=2;
Begin
say ("n=" + n + " n1=" + n1 );
say ("");
say ("n/n1=" + n/n1 + " isinf(n/n1)="+ isinf(n/n1) + " isnan(n/n1)="+ isnan(n/n1)+ " finite(n/n1)="+ finite(n/n1));
say ("n/0.0=" + n/0.0 + " isinf(n/0.0)="+ isinf(n/0.0) + " isnan(n/0.0)="+ isnan(n/0.0)+ " finite(n/0.0)="+ finite(n/0.0));
say ("n/2=" + n/2 + " isinf(n/2)="+ isinf(n/2) + " isnan(n/2)="+ isnan(n/2)+ " finite(n/2)="+ finite(n/2));
say ("(1+n/0.0)=" + (1+n/0.0) + " isinf((1+n/0.0))="+ isinf((1+n/0.0)) + " isnan((1+n/0.0))="+ isnan((1+n/0.0))+ " finite((1+n/0.0))="+ finite((1+n/0.0)));
say ("n/0=" + n/0 + " isinf(n/0)="+ isinf(n/0) + " isnan(n/0)="+ isnan(n/0)+ " finite(n/0)="+ finite(n/0));
say ("");
say ("i2/0.0=" + i2/0.0 + " isinf(i2/0.0)="+ isinf(i2/0.0) + " isnan(i2/0.0)="+ isnan(i2/0.0)+ " finite(i2/0.0)="+ finite(i2/0.0));
say ("0.0/0.0=" + 0.0/0.0 + " isinf(0.0/0.0)="+ isinf(0.0/0.0) + " isnan(0.0/0.0)="+ isnan(0.0/0.0)+ " finite(0.0/0.0)="+ finite(0.0/0.0));
say ("");
n = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000; //130 zeros
say ("n=" + n + " (10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)");
say( "isinf(n)=" + isinf(n) );
say( "isnan(n)=" + isnan(n) );
say( "finite(n)=" + finite(n) );
say ("");
n = 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001; //130 zeros
say ("n=" + n + " (0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001)");
say( "isinf(n)=" + isinf(n) );
say( "isnan(n)=" + isnan(n) );
say( "finite(n)=" + finite(n) );
say ("");
n = -1;
say ("n=" + n );
say ("sqrt(n)=" + sqrt(n) + " isinf(sqrt(n))="+ isinf(sqrt(n)) + " isnan(sqrt(n))="+ isnan(sqrt(n))+ " finite(sqrt(n))="+ finite(sqrt(n)));
say ("");
n = 1/0.0;
say ("n=" + n + " (1/0.0)");
say ("1.0/n=" + 1.0/n + " isinf(1.0/n)="+ isinf(1.0/n) + " isnan(1.0/n)="+ isnan(1.0/n)+ " finite(1.0/n)="+ finite(1.0/n));
say ("1.0/0=" + 1.0/0 + " isinf(1.0/0)="+ isinf(1.0/0) + " isnan(1.0/0)="+ isnan(1.0/0)+ " finite(1.0/0)="+ finite(1.0/0));
say ("1.0/0=" + 1.0/0 + " isinf(1.0/0)="+ isinf(1.0/0) + " isnan(1.0/0)="+ isnan(1.0/0)+ " finite(1.0/0)="+ finite(1.0/0));
End
output:
n=10 n1=0
n/n1=1.#INF isinf(n/n1)=1 isnan(n/n1)=0 finite(n/n1)=0
n/0.0=1.#INF isinf(n/0.0)=1 isnan(n/0.0)=0 finite(n/0.0)=0
n/2=5 isinf(n/2)=0 isnan(n/2)=0 finite(n/2)=1
(1+n/0.0)=1.#INF isinf((1+n/0.0))=1 isnan((1+n/0.0))=0 finite((1+n/0.0))=0
n/0=1.#INF isinf(n/0)=1 isnan(n/0)=0 finite(n/0)=0
i2/0.0=1.#INF isinf(i2/0.0)=1 isnan(i2/0.0)=0 finite(i2/0.0)=0
0.0/0.0=-1.#IND isinf(0.0/0.0)=0 isnan(0.0/0.0)=1 finite(0.0/0.0)=0
n=0 (10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)
isinf(n)=0
isnan(n)=0
finite(n)=1
n=0 (0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001)
isinf(n)=0
isnan(n)=0
finite(n)=1
n=-1
sqrt(n)=-1.#IND isinf(sqrt(n))=0 isnan(sqrt(n))=1 finite(sqrt(n))=0
n=1.#INF (1/0.0)
1.0/n=0 isinf(1.0/n)=0 isnan(1.0/n)=0 finite(1.0/n)=1
1.0/0=1.#INF isinf(1.0/0)=1 isnan(1.0/0)=0 finite(1.0/0)=0
1.0/0=1.#INF isinf(1.0/0)=1 isnan(1.0/0)=0 finite(1.0/0)=0
Recordar, solo para expresiones flotantes, si se hace una division por cero de numeros no flotantes, vamos a recibir el mensaje ya conocido de "Division by zero".
No me acorde de agradecer en la nueva consola debug.... el que cuando cambias valores de X, Y, Z, angle, size, write_int y supongo que un largo etcétera, lo cambia al instante! sin tener que hacer un frame global (F10) o pasar a otro proceso (F11), es algo que ayuda mucho a la hora de ir haciendo pruebas y buscar errores en tiempo real y que particularmente me ha gustado mucho también aparte de todo lo que me gusto de la nueva consola debug.
Gran trabajo.
Ahora quiero plantear un duda que tengo.... y es que... a veces como todos sabemos Bennu al dar un error estilo: Procedimiento no activo Pepe(65578) se sale de la ejecución... y me preguntaba... si en vez de que salga de la ejecución... podría abrirse la consla de debug y dar el error ahí.... y con esto poder localizar el error dado, viendo que línea de código produjo el error, y poder hacer pruebas para localizar el error desde consola... lógicamente si haces un Frame (F10) podría llegar a entender que Bennu se cerrará a causa de ese Procedimiento no activo, pero ya tienes la oportunidad de investigar un poco en la consola debug antes de cerrarse Bennu. Igual estoy diciendo una barbaridad... no lo sé.
Si no se entiende... lo intento explicar mejor.
Se entiende, es una buena sugerencia, ahora hay que ver de que forma se puede implementar esto sin hacer que el core dependa de un modulo externo como es el debug.
Un momento, creo que me he flipao, ¿ahora se le puede meter opengl a bennu?
mas o menos creo que si, y algunas cosillas mas. :D :D :D
Quote from: SplinterGU on November 07, 2008, 03:24:55 AM
Nuevo modulo interface portable de funciones externas... (importar cualquier dll/so a bennu)...
Esto implica poder usar OpenGL, OpenAL, o lo que a uno se le ocurra ??
si, pero obviamente no de la forma automatica de render (por ejemplo), pero si llamar a las funciones de OpenGL y de esta forma hacer los renders...
Vamos que incluso se podria crear juegos 3d usando motores externos,si necesidad de que la gente creara dll especificas?
La bennu 3d no iba ya sobre openGL? es que me parece raro que la gente se sorprenda a estas alturas lo de poder usar otras lib gráficas: ya se dijo hace tiempo que se podía mediante los módulos que fueran saliendo ¿o hay algo que no he pillado?
claro no has pillado que ahora bennu se pueden meter dlls "normales" sin necesidad de crear un modulo externo.
Si, eso lo he pillado: ahora usar openGL tal cual, pero antes de ese cambio, tambien se podía usar openGl ¿o no? :P
a ver, que se pueda no significaba que estaba hecho... hay un modulo experimental de Sandman, pero cuando yo dije "se puede" lo decia en sentido potencial... o sea, hay que hacer el modulo, pero se puede hacer de forma de meter luego la pieza y quitando el otro render facilmente...
alguno mas habia entendido, tambien, mal esto?
Yo,:(:(, y sigo sin entenderlo. Lo leo y releo, pero no capto el mensaje.
A ver, cuando añadiste plugins a fenix, ya se podía enganchar con cualquier librería externa, simplemente programando un plugin para ello.
Aqui en bennu, has separado en módulos el core de fenix, siguiendo algun sistema parecido para enganchar con las dll de los modulos, pero no es el mismo sistema como con los plugins.
Antes había que crear en c o c++ una especie de wrapper para poder encapsular las librerías dinámicas a usar.
Nos estás diciendo que a partir de ahora no hace falta hacer eso y que directamente podemos enganchar de alguna forma nuestro código con las dlls dinámicas son solo tener sus "headers" mas no menos¿?.
Verás: Fenix usaba SDL para representar gráficos, así que cuando creabas una libreria (dll) con otro motor gráfico, al final, tenías que recurrir de nuevo a SDL para integrarlo.
Splinter, al separarlos en módulos, dejó de usar SDL, y para representar gráficos podías usar los módulos que ha hecho él (creo que van por software, ¿no?) o crear la tuya propia con openGL, DX o la que te diera la gana (es decir, podías hacer cosas como cambiar el angle, el size, trabajar con paletas y demás usando aceleracion hardware con.. directX, por ejemplo. O como han hecho con la bennu3D, que es otra librería gráfica, pero 3d)
El cambio actual permite que, sin crearte ninguna librería que usase las librerías gráficas, con símplemente el core, puedas hacer llamadas directamente a dichas librerías. Es decir, te quita una capa en medio que tenías que diseñar.
Antes: creabas una librería con la funcion dibuja_cuadrado, en la que se llamaba a SDL_draw_box.
Ahora: llamas directamente a SDL_draw_box.
Quote from: DCelso on November 19, 2008, 02:52:37 PM
Yo,:(:(, y sigo sin entenderlo. Lo leo y releo, pero no capto el mensaje.
A ver, cuando añadiste plugins a fenix, ya se podía enganchar con cualquier librería externa, simplemente programando un plugin para ello.
Aqui en bennu, has separado en módulos el core de fenix, siguiendo algun sistema parecido para enganchar con las dll de los modulos, pero no es el mismo sistema como con los plugins.
Antes había que crear en c o c++ una especie de wrapper para poder encapsular las librerías dinámicas a usar.
Nos estás diciendo que a partir de ahora no hace falta hacer eso y que directamente podemos enganchar de alguna forma nuestro código con las dlls dinámicas son solo tener sus "headers" mas no menos¿?.
En Fenix no podias llamar a cualquier dll, solo a dlls fenix...
Quote from: Drumpi on November 19, 2008, 03:01:57 PM
Verás: Fenix usaba SDL para representar gráficos, así que cuando creabas una libreria (dll) con otro motor gráfico, al final, tenías que recurrir de nuevo a SDL para integrarlo.
Splinter, al separarlos en módulos, dejó de usar SDL, y para representar gráficos podías usar los módulos que ha hecho él (creo que van por software, ¿no?) o crear la tuya propia con openGL, DX o la que te diera la gana (es decir, podías hacer cosas como cambiar el angle, el size, trabajar con paletas y demás usando aceleracion hardware con.. directX, por ejemplo. O como han hecho con la bennu3D, que es otra librería gráfica, pero 3d)
El cambio actual permite que, sin crearte ninguna librería que usase las librerías gráficas, con símplemente el core, puedas hacer llamadas directamente a dichas librerías. Es decir, te quita una capa en medio que tenías que diseñar.
Antes: creabas una librería con la funcion dibuja_cuadrado, en la que se llamaba a SDL_draw_box.
Ahora: llamas directamente a SDL_draw_box.
No es tan directo, pero bueno, no se necesita crear una dll para poder usarlo, o sea, los programadores que no tienen conocimiento de C podran hacer sus propias llamadas a dlls normales sin necesidad de depender de alguien que sepa C para que le arme una dll, incluso a uno que sepa C, para simplificarle trabajo.
Mas adelante el soporte podra ser mejor y mas intuitivo, por ahora hay que llamar a una serie de funciones.
Y ya tenia una version nueva, con bugs corregidos, pero bueno, tendre que hacer esas correcciones nuevamente cuando pueda dedicarle un tiempo a rearmar el entorno.
Quote from: SplinterGU on November 18, 2008, 08:22:22 PM
claro no has pillado que ahora bennu se pueden meter dlls "normales" sin necesidad de crear un modulo externo.
Simplemente genial! :)
Quote from: SplinterGU on November 20, 2008, 02:03:06 PM
Quote from: DCelso on November 19, 2008, 02:52:37 PM
Yo,:(:(, y sigo sin entenderlo. Lo leo y releo, pero no capto el mensaje.
A ver, cuando añadiste plugins a fenix, ya se podía enganchar con cualquier librería externa, simplemente programando un plugin para ello.
Aqui en bennu, has separado en módulos el core de fenix, siguiendo algun sistema parecido para enganchar con las dll de los modulos, pero no es el mismo sistema como con los plugins.
Antes había que crear en c o c++ una especie de wrapper para poder encapsular las librerías dinámicas a usar.
Nos estás diciendo que a partir de ahora no hace falta hacer eso y que directamente podemos enganchar de alguna forma nuestro código con las dlls dinámicas son solo tener sus "headers" mas no menos¿?.
En Fenix no podias llamar a cualquier dll, solo a dlls fenix...
Quote from: Drumpi on November 19, 2008, 03:01:57 PM
Verás: Fenix usaba SDL para representar gráficos, así que cuando creabas una libreria (dll) con otro motor gráfico, al final, tenías que recurrir de nuevo a SDL para integrarlo.
Splinter, al separarlos en módulos, dejó de usar SDL, y para representar gráficos podías usar los módulos que ha hecho él (creo que van por software, ¿no?) o crear la tuya propia con openGL, DX o la que te diera la gana (es decir, podías hacer cosas como cambiar el angle, el size, trabajar con paletas y demás usando aceleracion hardware con.. directX, por ejemplo. O como han hecho con la bennu3D, que es otra librería gráfica, pero 3d)
El cambio actual permite que, sin crearte ninguna librería que usase las librerías gráficas, con símplemente el core, puedas hacer llamadas directamente a dichas librerías. Es decir, te quita una capa en medio que tenías que diseñar.
Antes: creabas una librería con la funcion dibuja_cuadrado, en la que se llamaba a SDL_draw_box.
Ahora: llamas directamente a SDL_draw_box.
No es tan directo, pero bueno, no se necesita crear una dll para poder usarlo, o sea, los programadores que no tienen conocimiento de C podran hacer sus propias llamadas a dlls normales sin necesidad de depender de alguien que sepa C para que le arme una dll, incluso a uno que sepa C, para simplificarle trabajo.
Mas adelante el soporte podra ser mejor y mas intuitivo, por ahora hay que llamar a una serie de funciones.
Y ya tenia una version nueva, con bugs corregidos, pero bueno, tendre que hacer esas correcciones nuevamente cuando pueda dedicarle un tiempo a rearmar el entorno.
A eso me refería yo, a eso mismo, no me expliqué bien, entonces la idea que tenía era la correcta, es que con tanto alboroto me pusisteis en duda.
Yo quise decir que en fenix se podía enganchar con cualquier dll, pero no directamente, sino a través de una "dll fenix" que hiciera de wrapper (envoltorio, encapsulador, puente) entre fenix y la dll. Esta había que programarla en C.
Y lo que comentas que tendrá bennu es una forma de conectar "directamente" con la dll externa conociendo sus funciones y estructuras lo que se denomina cabecera "header". Esto de directamente me refiero a través de código Bennu, independientemente de que tengas que usar alguna función adicional para activar la dll tipo "dllimport" o "LoadLibrary" de c.
"tendrá", no... "tiene", es el "mod_ffi" que subi hace unas semanas con un sample...
para cuando unas tcpsock o fsock para bennu ???
Debo anunciar gratamente que luego de muchisimos intentos y distros probadas, y tras tomarme una buena ducha fria y una pastillita para la presión he logrado compilar bennu en linux... donde otros fallaron la fuente fue la solucion... no me quedo otra opcion (gratamente) que instalar un debian puro, ahi todo fue fluido... y la verdad que va muy lindo... supongo que otras distro base podran ir tambien bien... pero bueno, ubuntu un fracaso, ultimas distros de otros linux que antes me funcionaban ahora son un desastre... no se que pasara en el mundo linux, pero bueno, la buena noticia es que el tema se soluciono...
En el site hay nueva version binaria para linux, esto es lo ultimo que recupere del SVN, tiene todos los ultimos cambios informados, me faltan algunos que yo habia corregido y que ahora tengo que recordar.
La novedad es que ahora linux posee un instalador (hay que descomprimir el paquete principal, no lo que esta dentro de este), es precario, pero cumple su objetivo, se necesita tener permisos de root o superusuario para instalar el paquete, si haces "./install.sh help" muestra una ayuda, pero basicamente es:
./install.sh instala el producto
./install.sh remove desinstala el producto
ya no hay que hacer LD_LIBRARY_PATH, ni veran las dlls desperdigadas en el directorio del proyecto.
Para aquellos que no quieran usar el instalador, dentro del paquete hay un archivo bgd.pkg, que es un simple tgz con todos los archivos de bennu.
No se incluyen SDL, ogg, etc... esos hay que instalarlos con la herramienta para tal fin...
NOTA: Acabo de probar que el instalador solo funciona bien en linux 32, en 64 bits no se encuentran luego las dlls... en 64 bits sugiero el metodo manual.
Hola! Está bueno!!
Una pregunta: el moddesc no está (ni el function-list.txt). ¿Es por alguna razón?
He visto el script...sólo por curiosidad, ¿por qué la comparación que haces es x$1="xhelp" en vez de $1="help" ? Por otro lado, no sé si sería buena idea dar la opción a la hora de instalar de poder elegir dónde: si no he visto mal, desempaqueta automáticamente en la carpeta donde estés...no sé.
Y una chorrada tocapelotas: ¿qué tal cambiar el nombre del script con algo como "setup" o similar? Lo digo porque un "install remove" es como un poco esquizofrénico...un "setup install" o un "setup remove" estaría más guay, no?
...Y finalmente, ¿por qué no hacer algo similar para Windows también? Hay multitud de programas generadores de instalación open source, no hace falta que os lo diga...por ejemplo http://nsis.sourceforge.net . En verdad yo casi que prefiero no usar instalador, pero reconozco que la mayoría de usuarios estándar lo agradecerán.
Ah, y lo de instalar todas las librerías en una subcarpeta dentro de /usr/lib...¿daría muchos problemas? Manía con el orden y eso...
Genial!, muchas gracias :)
1) El moddesc ni el function list no estan incluidos por razones de publico conocimiento con mi instalacion previa de windows+grub...
2) el hecho de tener "x$1" = "xhelp" y no lo otro, es por el simple motivo de que sino cuando ejecutas sin argumentos el if dara un error de expresion unaria (logicamente)
3) no desempaqueta donde estas, lo hace en el directorio /usr
4) porque no estas "setupeando" nada, sino que estas instalando... setup es mas bien para "seteos", esto no es un seteo es una instalacion
5) preguntar el path ira en alguna proxima version, anuncie que esto es un poco precario y rapido, pero que cumple con su funcion
6) Windows ya tendra su instalador... (conozco el nsis, de hecho lo use varias veces, para armar o para "desarmar" y toquetear instaladores) por ahora el problema de la mayoria es linux... a pesar de que los que usan linux son los pocos... pero bueno... me uni al club...
7) /usr/lib, quizas deberia usar otro, por si se llega a pisar (por ahora no pasa) alguna libreria del sistema que no haya tenido en cuenta, pero eso no deberia pasar, y ademas todos los productos instalan sus libs en dicha carpeta... quizas la solucion sea cambiar los nombres de las libs internas por algo asi como libbgd* o bgdlib*, eso no afectaria en nada, ya que ningun usuario deberia usarlas...
espero me digan como va esta version y si encuentran algun bug... saludos...
yo por lo pronto encontre problemas con librerias libvorbisfiles3 en ubuntu 64, que no instala la lib 32 de esa y otras libs mas.
ahora mismo hare una instalacion de debian, como dios manda, adios a las distro fantasmas...
Bueno, por lo pronto veo que ya no hace falta aquello de LD_PRELOAD=/usr/lib/libX11.so.6, ¿verdad?.
Mi mini-proyecto de karaoke funciona sin problemas, no sabría decir objetivamente si más rápido, pero parece que sí. En fin, felicidades.
fantastico
Nuevo instalador para linux, no hubo cambios en codigo, solo el instalador, por eso se subio el paquete nuevamente, recordar que si ya hicieron ./install.sh, hay que hacer "./install.sh remove" antes de correr el nuevo instalador.
No se dio opcion de preguntar el path, porque solo un directorio permite el uso de mod_* como shared library, o por lo menos todavia no se hacer que me soporte otro directorio, la otra opcion es poner todos los modulos como lib*, pero ahi ya no funcionan...
No sé si es exactamente lo que preguntas, pero puedes añadir un ficherico en /etc/ld.so.conf.d con el directorio de instalación de las librerías. Algo como:
echo "/opt/bennugd/lib" > /etc/ld.so.conf.d/bennugd-i386.conf
Obviamente, cambiando ese directorio por el de instalación. Luego conviene hacer un
ldconfig
como root, claro.
en el script de instalacion hago eso... solo que otro path y no puse el "-i386" no se me ocurrio eso...
chequeatelo en la ultima version subida
El tema de los floats infinitos y demás no está incluido en la WIP 15.c.2, que es la última que hay para windows en el directorio de betas, o sí???, porque no logro encontrar en qué módulo está y no viene en la lista de funciones. Además, pone que esa se subió el 3 de noviembre, y el mensaje en el que hablaste de ello es del 9 de noviembre, así que supongo que aún no lo habrás subido.
en la de linux
Quote from: SplinterGU on November 26, 2008, 05:05:31 PM
en el script de instalacion hago eso... solo que otro path y no puse el "-i386" no se me ocurrio eso...
chequeatelo en la ultima version subida
Hoy no puedo, pero mañana te lo miro, ¿ok?
A mí el instalador me funciona sin mayor problema. Sólo una sugerencia: en vez de usar "cp" quizás te interese mirar el programa "install".
En cuanto a lo de las librerías que empiezan por 'mod' parece que no hay suerte. Según estos dos enlaces:
http://ubuntuforums.org/showthread.php?t=834388
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
todas las librerías salvo las de más bajo nivel deben tener por nombre lib*.so o ld-*.so
Sin embargo, acabo de comprobar que copiándolas con mod* al directorio que sea (yo las tengo en /opt/bennugd/lib) y haciendo softlinks a ellas, las encuentra. Esto es:
[code language="bash"][root@localhost lib]# pwd
/opt/bennugd/lib
[root@localhost lib]# /sbin/ldconfig -p | grep '/opt'
libwm.so (libc6) => /opt/bennugd/lib/libwm.so
libvideo.so (libc6) => /opt/bennugd/lib/libvideo.so
libtext.so (libc6) => /opt/bennugd/lib/libtext.so
libsdlhandler.so (libc6) => /opt/bennugd/lib/libsdlhandler.so
libscroll.so (libc6) => /opt/bennugd/lib/libscroll.so
librender.so (libc6) => /opt/bennugd/lib/librender.so
libmouse.so (libc6) => /opt/bennugd/lib/libmouse.so
libkey.so (libc6) => /opt/bennugd/lib/libkey.so
libgrbase.so (libc6) => /opt/bennugd/lib/libgrbase.so
libfont.so (libc6) => /opt/bennugd/lib/libfont.so
libdraw.so (libc6) => /opt/bennugd/lib/libdraw.so
libblit.so (libc6) => /opt/bennugd/lib/libblit.so
libbgdrtm.so (libc6) => /opt/bennugd/lib/libbgdrtm.so
[root@localhost lib]# for i in mod_*; do ln -s $i lib$i; done
[root@localhost lib]# /sbin/ldconfig
[root@localhost lib]# /sbin/ldconfig -p | grep '/opt'
mod_wm.so (libc6) => /opt/bennugd/lib/mod_wm.so
mod_video.so (libc6) => /opt/bennugd/lib/mod_video.so
mod_timers.so (libc6) => /opt/bennugd/lib/mod_timers.so
mod_time.so (libc6) => /opt/bennugd/lib/mod_time.so
mod_text.so (libc6) => /opt/bennugd/lib/mod_text.so
mod_sys.so (libc6) => /opt/bennugd/lib/mod_sys.so
mod_string.so (libc6) => /opt/bennugd/lib/mod_string.so
mod_sound.so (libc6) => /opt/bennugd/lib/mod_sound.so
mod_sort.so (libc6) => /opt/bennugd/lib/mod_sort.so
mod_scroll.so (libc6) => /opt/bennugd/lib/mod_scroll.so
mod_screen.so (libc6) => /opt/bennugd/lib/mod_screen.so
mod_say.so (libc6) => /opt/bennugd/lib/mod_say.so
mod_regex.so (libc6) => /opt/bennugd/lib/mod_regex.so
mod_rand.so (libc6) => /opt/bennugd/lib/mod_rand.so
mod_proc.so (libc6) => /opt/bennugd/lib/mod_proc.so
mod_path.so (libc6) => /opt/bennugd/lib/mod_path.so
mod_m7.so (libc6) => /opt/bennugd/lib/mod_m7.so
mod_mouse.so (libc6) => /opt/bennugd/lib/mod_mouse.so
mod_mem.so (libc6) => /opt/bennugd/lib/mod_mem.so
mod_math.so (libc6) => /opt/bennugd/lib/mod_math.so
mod_map.so (libc6) => /opt/bennugd/lib/mod_map.so
mod_key.so (libc6) => /opt/bennugd/lib/mod_key.so
mod_joy.so (libc6) => /opt/bennugd/lib/mod_joy.so
mod_grproc.so (libc6) => /opt/bennugd/lib/mod_grproc.so
mod_flic.so (libc6) => /opt/bennugd/lib/mod_flic.so
mod_file.so (libc6) => /opt/bennugd/lib/mod_file.so
mod_ffi.so (libc6) => /opt/bennugd/lib/mod_ffi.so
mod_effects.so (libc6) => /opt/bennugd/lib/mod_effects.so
mod_draw.so (libc6) => /opt/bennugd/lib/mod_draw.so
mod_dir.so (libc6) => /opt/bennugd/lib/mod_dir.so
mod_debug.so (libc6) => /opt/bennugd/lib/mod_debug.so
mod_cd.so (libc6) => /opt/bennugd/lib/mod_cd.so
mod_blendop.so (libc6) => /opt/bennugd/lib/mod_blendop.so
libwm.so (libc6) => /opt/bennugd/lib/libwm.so
libvideo.so (libc6) => /opt/bennugd/lib/libvideo.so
libtext.so (libc6) => /opt/bennugd/lib/libtext.so
libsdlhandler.so (libc6) => /opt/bennugd/lib/libsdlhandler.so
libscroll.so (libc6) => /opt/bennugd/lib/libscroll.so
librender.so (libc6) => /opt/bennugd/lib/librender.so
libmouse.so (libc6) => /opt/bennugd/lib/libmouse.so
libkey.so (libc6) => /opt/bennugd/lib/libkey.so
libgrbase.so (libc6) => /opt/bennugd/lib/libgrbase.so
libfont.so (libc6) => /opt/bennugd/lib/libfont.so
libdraw.so (libc6) => /opt/bennugd/lib/libdraw.so
libblit.so (libc6) => /opt/bennugd/lib/libblit.so
libbgdrtm.so (libc6) => /opt/bennugd/lib/libbgdrtm.so
[root@localhost lib]# [/code]
Venga, más cosas:
En las cabeceras de desarrollo, la libgrbase.h no incluye en ningún momento SDL.h, aunque la usa. Si mi librería no la incluye a mano, no puedo compilar. Creo que debería iincluirla.
son headers viejos, igual creo que la grbase no la usa, la usa otro modulo... por otro lado, no sirven hacer softlinks, ya que el nombre de la dll es usado como parte de los symbolos de exportacion, y cambiar ahora los nombres no va...
si usas LD_LIBRARY_PATH, toma los mod donde sea... y si los pones en /usr/lib o /usr/lib32 va fenomeno...
El tema es que no conviene no respetar la convención de nombres. Entre otras cosas eso significa que, si alguna vez intentas meter bennu en los repositorios de debian (por ejemplo) no te lo van a aceptar.
En cuanto a lo de que las librerías no van... A mí me funciona en dos ordenadores distintos, uno con fedora y otro con ubuntu... En realidad no toma el nombre de la librería como libmod*, porque sigue el enlace. La salida de "ldconfig -p" muestra que realmente está tomando la librería como mod*, pero hay que crear los enlaces.
yo la probe y no me funciono, pero cuando haces el import, que pones?
si usas el ultimo Bennu, no te puede funcionar que pongas import "libmod_video"... ya que al importarla bennu intentara cargar las funciones llamadas "libmod_video_*", las cuales no existen... y si pones "mod_video", no te la tomara porque el nombre es "mod_video"... por lo menos en mi debian no me funciona poner esto ultimo si hago un soflink... asi que no entiendo como te funciona...
puedo hacer que internamente se busque por libmod_ o por mod_ en los unix, no hay problema con eso, pero me obliga a tener que renombrar a mano los modulos, porque libtool y toda la porqueria esa lo genera sin el prefijo.
No sé si estamos haciendo lo mismo. Siento ser tan pesado, pero entiendo que estás dejando las librerías mod* como tal y estás creando los enlaces a ellas como libmod*, ¿verdad?. Y en mi código bennu, lo he dejado como estaba cuando hacía lo de LD_LIBRARY_PATH: import "mod_video";
Sólo por si tiene alguna trascendencia, he puesto todas las lib* (las que vienen con el paquete) y las mod* en el mismo directorio, y he creado los enlaces en ese también.
no, esta bien... no hay problema...
que directorio? el de tu proyecto? el que usas con LD_LIBRARY_PATH? como haces el import?
A ver, lo que yo he hecho es copiar las librerías mod* y lib* a /opt/bennugd/lib. Además, he copiado los binarios bgdc y bgdi a /opt/bennugd/bin.
Luego he creado el fichero /etc/ld.so.conf.d/bennugd-i386.conf con el siguiente contenido:/opt/bennugd/lib
Luego he hecho los enlaces de las librerías mod* a libmod* del directorio /opt/bennugd/lib de la siguiente forma:[code language="bash"]for i in mod*; do ln -s $i lib$i; done[/code]De forma que ahora tengo en ese directorio las lib* originales, las mod* originales y un montón de libmod* enlazando con éstas últimas.
Ahora hago un /sbin/ldconfig para que actualice la base de datos de librerías.
Al consultar esa base de datos obtengo:[code language="bash"][root@localhost ~]# /sbin/ldconfig -p | grep '/opt'
mod_wm.so (libc6) => /opt/bennugd/lib/mod_wm.so
mod_video.so (libc6) => /opt/bennugd/lib/mod_video.so
mod_timers.so (libc6) => /opt/bennugd/lib/mod_timers.so
mod_time.so (libc6) => /opt/bennugd/lib/mod_time.so
mod_text.so (libc6) => /opt/bennugd/lib/mod_text.so
mod_sys.so (libc6) => /opt/bennugd/lib/mod_sys.so
mod_string.so (libc6) => /opt/bennugd/lib/mod_string.so
mod_sound.so (libc6) => /opt/bennugd/lib/mod_sound.so
mod_sort.so (libc6) => /opt/bennugd/lib/mod_sort.so
mod_scroll.so (libc6) => /opt/bennugd/lib/mod_scroll.so
mod_screen.so (libc6) => /opt/bennugd/lib/mod_screen.so
mod_say.so (libc6) => /opt/bennugd/lib/mod_say.so
mod_regex.so (libc6) => /opt/bennugd/lib/mod_regex.so
mod_rand.so (libc6) => /opt/bennugd/lib/mod_rand.so
mod_proc.so (libc6) => /opt/bennugd/lib/mod_proc.so
mod_path.so (libc6) => /opt/bennugd/lib/mod_path.so
mod_m7.so (libc6) => /opt/bennugd/lib/mod_m7.so
mod_mouse.so (libc6) => /opt/bennugd/lib/mod_mouse.so
mod_mem.so (libc6) => /opt/bennugd/lib/mod_mem.so
mod_math.so (libc6) => /opt/bennugd/lib/mod_math.so
mod_map.so (libc6) => /opt/bennugd/lib/mod_map.so
mod_key.so (libc6) => /opt/bennugd/lib/mod_key.so
mod_joy.so (libc6) => /opt/bennugd/lib/mod_joy.so
mod_grproc.so (libc6) => /opt/bennugd/lib/mod_grproc.so
mod_flic.so (libc6) => /opt/bennugd/lib/mod_flic.so
mod_file.so (libc6) => /opt/bennugd/lib/mod_file.so
mod_ffi.so (libc6) => /opt/bennugd/lib/mod_ffi.so
mod_effects.so (libc6) => /opt/bennugd/lib/mod_effects.so
mod_draw.so (libc6) => /opt/bennugd/lib/mod_draw.so
mod_dir.so (libc6) => /opt/bennugd/lib/mod_dir.so
mod_debug.so (libc6) => /opt/bennugd/lib/mod_debug.so
mod_cd.so (libc6) => /opt/bennugd/lib/mod_cd.so
mod_blendop.so (libc6) => /opt/bennugd/lib/mod_blendop.so
libwm.so (libc6) => /opt/bennugd/lib/libwm.so
libvideo.so (libc6) => /opt/bennugd/lib/libvideo.so
libtext.so (libc6) => /opt/bennugd/lib/libtext.so
libsdlhandler.so (libc6) => /opt/bennugd/lib/libsdlhandler.so
libscroll.so (libc6) => /opt/bennugd/lib/libscroll.so
librender.so (libc6) => /opt/bennugd/lib/librender.so
libmouse.so (libc6) => /opt/bennugd/lib/libmouse.so
libkey.so (libc6) => /opt/bennugd/lib/libkey.so
libgrbase.so (libc6) => /opt/bennugd/lib/libgrbase.so
libfont.so (libc6) => /opt/bennugd/lib/libfont.so
libdraw.so (libc6) => /opt/bennugd/lib/libdraw.so
libblit.so (libc6) => /opt/bennugd/lib/libblit.so
libbgdrtm.so (libc6) => /opt/bennugd/lib/libbgdrtm.so
[/code]Y como digo, las librerías que mete en la base de datos son las mod*, no las libmod*·
Por lo que tengo entendido, la razón de que busque las lib* pero luego meta en la base de datos las librerías reales (en caso de que las lib* sean enlaces) es porque así, con linkar contra (p. ej.) /usr/lib/libamarok.so y en cada sistema se puedan utilizar versiones de librerías distintas, mientras sean compatibles a nivel de símbolos. Es decir, en mi ordenador /usr/lib/libamarok.so es en realidad un enlace a /usr/lib/libamarok.so.0.0.0 y en otro sistema puede ser un enlace a /usr/lib/libamarok.so.0.1.2. Eso te permite linkar contra librerías de forma genérica o contra versiones en particular (linkando contra el enlace o contra el fichero en sí).
En cuanto a lo del LD_LIBRARY_PATH me refería a que mi código lo tengo igual que cuando hacía falta lo del LD_LIBRARY_PATH, es decir, para importar mod_video hago un simple:[code language="bennu"]import "mod_video";[/code] y no [code language="bennu"]import "libmod_video";[/code] En realidad mi variable de entorno LD_LIBRARY_PATH no está ni siquiera definida... Y bueno, mi proyecto está en /home/user/Programas/karaoke en un ordenador y en /home/joseba/cvs/karaoke en otro, pero podría estar en cualquier lado.
¡Vaya rollo que te acabo de meter!. Espero haberme explicado :)
no, no hay rollo...
exactamente eso mismo hice yo, pero el ldconfig de mi debian 64, no me incorporo los mod... si las libs, pero no los mods... y ademas de eso, haciendo luego import "mod_video", no lo tomo... no se si sera un bug de la version 64 bits, pero no me extraña... que version tenes vos?
Estoy con una fedora 8 de 32 bits y con una Ubuntu 8.10 de 32 también.
Si me das un minuto, voy a probar con una redhat ws 4 de 64 bits.
dale... gracias...
igualmente para quitarnos de la duda, luego vuelvo a probar, pero tene por seguro que el asunto de los links fue una de las primeras cosas que hice y no funciono... quizas me olvide el ldconfig, pero es raro porque lo tengo en el script install, pero quien sabe... ahora no puedo, pero luego vuelvo a probar y te comento.
Bueno, entramos en el campo de lo extraño. Lo acabo de comprobar en el ordenador de 64 bits con la redhat (un poquito antigua, todo hay que decirlo) y funciona igual...
Yo qué se... son chorradas, pero intenta hacerlo a mano y comprueba los permisos y esas cosas que a veces se nos pasan.
lo hice a mano, por eso quizas me falto algo, volver a hacerlo nuevamente
incluso hice tambien un for para los link... volvere a probar... gracias por la preocupacion...
Funciono, me faltaba incluir un directorio mas en el bgd.conf, pero bueno, ya que estamos lo mejore un poco...
Con respecto a debian y los archivos que no empiezan con lib en el lib32, temo decir que tengo en la instalacion de debian paquetes que no cumplen con eso... asi que no veo motivos por no incluir a bennu...
El script quedo asi:
#!/bin/sh
MACHINE=$(uname -m)
if [ "$MACHINE" == "x86_64" ];
then
TARGET_LIB=/usr/lib32
else
TARGET_LIB=/usr/lib
fi
if [ "x$1" == "xhelp" ];
then
echo "Bennu Game Development Installer"
echo "(C) 2008 - SplinterGU"
echo
echo "usage: $0 [options]"
echo "options:"
echo " help - show this text"
echo " remove - uninstall Bennu Game Development"
echo
elif [ "x$1" == "xremove" ];
then
echo "Uninstalling Bennu Game Development..."
rm -f /usr/bin/bgdc
rm -f /usr/bin/bgdi
rm -Rf $TARGET_LIB/bgd
rm /etc/ld.so.conf.d/bgd.conf
ldconfig
echo "done!"
else
CPWD=$PWD
echo "Installing Bennu Game Development..."
mkdir -p /tmp/bgd>/dev/null 2>/dev/null
cd /tmp/bgd
tar -zxvf $CPWD/bgd.pkg
cp -Rf bin/* /usr/bin
cp -Rf bgd $TARGET_LIB
echo $TARGET_LIB/bgd>/etc/ld.so.conf.d/bgd.conf
echo $TARGET_LIB/bgd/lib>>/etc/ld.so.conf.d/bgd.conf
echo $TARGET_LIB/bgd/module>>/etc/ld.so.conf.d/bgd.conf
ldconfig
cd $CPWD
rm -Rf /tmp/bgd
echo "done!"
fi
Con la siguiente release, saldra con ese script...
josebita, te ganaste un karma!
Quote from: SplinterGU on December 02, 2008, 07:14:43 PM
Funciono, me faltaba incluir un directorio mas en el bgd.conf, pero bueno, ya que estamos lo mejore un poco...
¡Genial!, me alegro mucho.
Quote from: SplinterGU on December 02, 2008, 07:14:43 PM
Con respecto a debian y los archivos que no empiezan con lib en el lib32, temo decir que tengo en la instalacion de debian paquetes que no cumplen con eso... asi que no veo motivos por no incluir a bennu...
Tendré que revisar eso, porque pensaba que era así :).
En fin, gracias por mirarlo...
por ejemplo, mira el paquete bonobo
/usr/lib/bonobo/servers/*.server (xml que no empiezan con lib)
(lib o lib32, segun el caso)
/usr/lib/bonobo-activation/* (hay ejecutables, que no empiezan con lib)
/usr/lib/dri/*.so (no empiezan con lib)
y hay un monton...
No puedo más que darte la razón :). El tema es que dejarlos en /usr/lib directamente me da cosita.... ¿Quizás /usr/lib/bgd?
Bueno, que no te quiero liar más, concéntrate en lo importante que es sacar la 1.0, que ya hay ganitas :)
si, ahi van ahora, en /usr/bin/bgd... nada en el /usr/lib... igual deberia no darte cosita, todos los productos meten sus libs en /usr/lib... no solo los del sistema...
y ahora mejore la version del instalador, ahora es un solo script... no hay mas 2 archivos... es un .sh, que se ejecuta e instala...
nuevo instalador linux agregado... ahora es un solo archivo... (http://betatester.bennugd.org/betas/bgd-wip16-installer.sh)
Ei, ahora estoy en Windows y no lo he podido probar, pero he abierto el código con el bloc de notas y justo después del script hay un montón un montón un montón de líneas con símbolos raros...(?) Míratelo a ver si se te ha colado algo, porque es bastante extraño
esos simbolos raros es la idea del instalador, esta en perfectas condiciones...
gracias...
Creo que prefiero la otra version ^^ no me gusta eso de ejecutar un script como root :P. Se que al final es lo que hacemos con los paquetes .deb :D pero , dejaria tambien la posibilidad de untarear en un lugar especificado. podrias añadir que como argumento te puedan pasar instalar en el directorio actual y simplemente te untaree todo en el directorio actual.
Por cierto no se si conoceras, kdialog. Podrias ponerle al instalador ventanitas sin casi esfuerzo usando el programa. Para la gente mas acostumbrada al tema wizard de siguiente siguiente y siguiente les gustara mas ^^.
Basicamente ejecutas algo en plan:
kdialog --msgbox "Se va a proceder a la instalacion de bennu game development" y te pone un dialogo con el mensaje y un aceptar. Puedes con las diferentes opciones montar menus sencillos listas pedir ficheros y directorios, passwords y tal
Se puede usar tambien el gtkdialog que se supone puede coger interfaces hechas con el glade eso es ya rollo quiero ponerlo como me gusta :D pero yo no lo he usado aun. ^^
se me olvidaba ¿porque le añades la x antes de las variables?
caramba! como desconfian del producto!
la version anterior tambien necesita de permisos de root... todo instalador necesita permisos de root... todos los productos serios tienen su instalador o paquete... siempre pueden tocar el script y obtener los archivos si no les gusta que un script les haga el trabajo y setear todo lo que setea el script...
ya tendra su instalador de ventanitas, por ahora es asi... ultimamente no tengo tanto tiempo para dedicarle...
lo de las x en las variables ya lo explique unos mensajes atras, es algo basico en el uso de scripts con datos opcionales... leete un par de mensajes atras...
hay muchos productos que usan metodos de stub-script... no veo el problema de que bennu tambien lo use...
Quote from: SplinterGU on December 03, 2008, 01:29:12 AM
caramba! como desconfian del producto!
la version anterior tambien necesita de permisos de root... todo instalador necesita permisos de root... todos los productos serios tienen su instalador o paquete... siempre pueden tocar el script y obtener los archivos si no les gusta que un script les haga el trabajo y setear todo lo que setea el script...
ya tendra su instalador de ventanitas, por ahora es asi... ultimamente no tengo tanto tiempo para dedicarle...
lo de las x en las variables ya lo explique unos mensajes atras, es algo basico en el uso de scripts con datos opcionales... leete un par de mensajes atras...
hay muchos productos que usan metodos de stub-script... no veo el problema de que bennu tambien lo use...
no hay desconfianza simplemente son sugerencias o opiniones para mejorar un producto eso es lo que significa una comunidad recibir criticas constructivas para crecer
Perfecto, pero la idea del installer es mejorar, cuantos mensajes hubo diciendo que no iba en linux, que como se hacia para que funcione, que el metodo de instalacion y tener todas las dlls junto al juego y a los ejecutables era algo feo y desordenado? ahora que esta ordenado y mejorado como lo hace cualquier producto serio, no entiendo la sugerencia.
pero bueno, los instaladores saldran asi, y si alguien considera que no es adecuado o no cumple con sus exigencias podra tirar de los fuentes...
sinceramente me esperaba una felicitacion por hacer que la instalacion sea tan simple, compacta, seria y ordenada (1 solo archivo de instalacion y no 2 o mas como habia antes...), pero bueno...
con respecto al kdialog o gtkdialog no viene instalado por default, y la instalacion dependeria del SO... pero veo que si esta instalado el dialog... y esta muy bueno... quizas luego se incluya, aunque no hay mucho para configurar, y el path de instalacion debe ser el que instala el script, por normas generales de instalacion de librerias y porque asi funciona tanto en 64bits como en 32bits...
Yo no tengo ningún problema con el instalador en modo stub, los instaladores de GarageGames, ID, icculus... lo hacen. En realidad, es lo más sensato si no te quieres meter con historias de empaquetar para cada distribución que tiende a ser un infierno.
Además, se puede sacar un tar.gz (o como esté comprimido en el paquete) del script con una línea de bash. Ahora no tengo tiempo para mirarlo, pero si quereis esta tarde puedo intentar postearlo.
Sinceramente no es la idea, y me desagrada la intencion, pero bueno, la linea para obtener el paquete original es...
tail -n +52 bgd-wip16-installer.sh > bgd.tgz
Si en esto te doy la razón. Lo suyo es eso.
Tampoco hay razón para que quien quiera toquetear su sistema no lo pueda hacer. Tú dejas éste como sistema de instalación recomendado y punto, porque a la mayor parte de la gente le será más útil eso.
En fin, que en mi Ubuntu de 32 bits el instalador va como genial. Rápido y limpio.
Yo lo probe en linux 64, asi que excelente... lo unico malo que vi a esto, es que hay .so necesarias para bennu que no instala el apt de linux64... bueno, supongo tambien que es cosa de debian... ya que en 32 bits las instala, asi que el trabajo fue instalarlas en un jail de 32 bits y luego copiarlas a la carpeta /usr/lib32... estas .so son las de libsdl_mixer...
Gracias.
jo lo siento. No me exprese bien :S No estaba diciendo que estubiese mal ni nada de eso. Ni pretendi expresar desconfianza. Lo que pretendia decir es que seria bueno tener la opcion de desempaquetar en el propio directorio. Algo parecido al prefix de los configure. Pero era simplemente por el tema de que determinadas cosas yo las suelo instalar en directorios aparte, no como critica a que estubiese mal hecho ni nada ni fuese mala idea. Como dije todos los paquetes .deb se instalan con root. :( Siento que te pudiese sentar mal.
Hola, por cierto esto podria meterse en otra sección llamada linux bennu, o problemas bennu o algo asi no?
lo digo porque he entrado varias veces a lo largo de estos dos dias creyendo que había novedades y releases en el avance de bennu y me he encontrado con esto :(.
Creía que ya estabas puesto manos a la obra con el código fuente de BennuGD :D
Venga, saludos.
animanegra, no, disculpame a mi... es que estoy un poco agotado estos ultimos dias, con linux y trabajo, y la cabeza siente ese cansancio.. y quizas respondo de la forma adecuada... disculpame...
dcelso, festival, si bien no es codigo C, esto es parte del proyecto... y si bien no toco el codigo estoy relevando informacion sobre las cosas que hay que tocar... ademas de que emplee tiempo en el documento de estilo...
ok, no yo era por organizarlo un poco, en verdad no pasa nada donde esté, era simplemente eso que al ver que habia nuevas respuestas pues entraba animado creyendo en una posible nueva versión :D :D.
No te mosquees ni te satures, no era mi intención.
Bastante haces con estar las 24 horas viendo el foro :D.
Gracias por todo.
:)
Para cuando tienes planeado colgar la release para windows? Lo digo porque tengo un pequeño código ya hecho que probar usando las funciones nuevas de floats, y querría probar el código antes de seguir complicándolo.
Gracias por todo.
apenas tenga un momento de hacer la compilacion...
Buenas tardes a todos:
Aprovechando la salida del WIP16 me descargue el sh y lo ejecute correctamente. El tema es que soy usuario div/fenix/bennu en windows de toda la vida y no sé por donde empezar, ni para adaptar los codigos a linux ni para que corran en linux.
Algo de documentacion al respecto tenemos?
hola, creo que no hay ningun documento... lo que debes saber en linux principalemente es que las mayusculas y minusculas en los nombres de archivos y directorios es de importancia... yo sugiero tener todo en minusculas... tambien no usar paths absolutos y usar las barra de division para los paths... luego de eso, no deberias tener mayores problemas.
quizas me olvide algo, pero creo que con eso es suficiente por ahora.
Quote from: SplinterGU on December 08, 2008, 02:43:44 PM
hola, creo que no hay ningun documento... lo que debes saber en linux principalemente es que las mayusculas y minusculas en los nombres de archivos y directorios es de importancia... yo sugiero tener todo en minusculas... tambien no usar paths absolutos y usar las barra de division para los paths... luego de eso, no deberias tener mayores problemas.
quizas me olvide algo, pero creo que con eso es suficiente por ahora.
Y a parte de la gramática... ¿algun entorno de desarrollo para linux?
en windows creas el programa, lo compilas con el compilador y lo ejecutas con el interprete.
necesito saber el equivalente a esos pasos en linux, ya que como veis estoy bastante verde en este sistema operativo... jeje
Gracias Splinter por la respuesta, y por la velocidad de ella, un saludo
Pues lo mismo: creas el programa con el editor de texto que más te guste, lo compilas con el compilador (bgdc) y lo interpretas con el intérprete (bgdi). Nada más.
P.D: Foni, mejor pon los posts de ayuda en su tema correspondiente,ok?...para mejorar la legibilidad y eso.
Quote from: osk on December 08, 2008, 03:00:53 PM
Pues lo mismo: creas el programa con el editor de texto que más te guste, lo compilas con el compilador (bgdc) y lo interpretas con el intérprete (bgdi). Nada más.
vale bien, jaja, pense que sería algo mas complicado, voy a probar!
PD: vale, postearé en la ayuda
¡¡No había visto que habías subido la wip 17!!
Ahora lo miro, si encuentro algo ya aviso :)
[Edito] Sólo una cosita con el instalador , si lo instalo como "sudo ./bgd-installer" me dice que no encuentra el ejecutable ldconfig.
¿Podrías explicitar en el script que es /sbin/ldconfig?
claro que podria...
No avise que la subi, esperaba subir una de windows... aunque de esta wip17 solo corregi pocas cosas... pero la mas importante es el tema de los floats en linux...
Y para compilar la version windows es linux, es un tema, con el cygwin no va... tarda una locura siquiera correr el configure... asi que le estoy dando a una vm, pero estoy armando todo el tema de las librerias necesarias, poniendo todas las ultimas versiones de todos los productos.
Quoteesperaba subir una de windows...
;D :) Dentro de poco. :) dentro de poco... (Sonrisa de docientos [de cien a cien]). ;)
Amigo, no se si te había agradecido por todo, de lo contrario, ¡Gracias! :)
... (vocesita a lo lejos) Dentro de poco tendremos versión nueva los de windows...
PDT: (Si falta aún un poco de tiempo, no nos quiten las esperanzas, sólo digan que dentro de poco y se sobreentiende). :)
¡¡¡versión de windows, versión de windows!!!
;)
Yo cada dia visito el site de betas a ver si esta ;D
Que novedades aporta la wip17 respeto a la wip15c2? Saludos!
es verdad que novedades va a tener la nueva versión de windows.
La wip16 no salió aún ¿no?
La wip16 sólo salió para linux.
ya dije que cosas corrije la wip17...
Problemas con la version windows...
Despues de actualizar todos los paquetes compilador+SDL+SDL_Mixer+ogg+png+etc+etc+etc... parece que SDL cambio varios nombres en las constantes de teclado, lo que me obligara a reescribir parte del modulo de teclado y chequear que no haya inconsistencias... quizas tambien esto solucione el tema del mapeo incorrecto de teclas que pasaba con version anterior de la SDL.
Dichosos cambios, ¿eh? :-)
[MENSAJE_DE_ALIENTO ON]
En cualquier caso, gracias por estar metiéndole la caña que le estás metiendo al Bennu, lenguaje divertido y potente a la par como pocos :-)
[MENSAJE_DE_ALIENTO OFF]
¡Saludos!
Quote
Despues de actualizar todos los paquetes compilador+SDL+SDL_Mixer+ogg+png+etc+etc+etc... parece que SDL cambio varios nombres en las constantes de teclado, lo que me obligara a reescribir parte del modulo de teclado y chequear que no haya inconsistencias... quizas tambien esto solucione el tema del mapeo incorrecto de teclas que pasaba con version anterior de la SDL.
:) No importa, podemos esperar todavía. Además, si esto soluciona algo, ¡qué mejor! :)
que sdl usas? la 1.2.13 o la 1.3
la version windows esta muy rapida y estable , asi que no se va a acabar el mundo... ;D
1.3...
nuevamente problemas de equipo... tuve que reinstalar nuevamente linux, tras varios intentos infructuosos de instalar linux 64, termine con linux32... puf, que lento es linux 32 bits!
No me queda claro cual fue el problema, si hard, si grabadora de dvd que no funciona adecuadamente, o simplemente porque no se puede pasar de una etch a una sid sin pasar antes por una lenny... no se, pero me volvi loco, toda la noche despierto...
pero esta vez no perdi nada...
Quote
pero esta vez no perdi nada...
Cuando inicié a leer el mensaje me asusté,
que bueno, que no pasó a mayores...
A dormir amigo, hay que recuperar ese tiempo que no dormiste. :)
Quote from: SplinterGU on December 16, 2008, 04:00:08 PM
1.3...
nuevamente problemas de equipo... tuve que reinstalar nuevamente linux, tras varios intentos infructuosos de instalar linux 64, termine con linux32... puf, que lento es linux 32 bits!
No me queda claro cual fue el problema, si hard, si grabadora de dvd que no funciona adecuadamente, o simplemente porque no se puede pasar de una etch a una sid sin pasar antes por una lenny... no se, pero me volvi loco, toda la noche despierto...
pero esta vez no perdi nada...
Go Back to Windows,Go Back to Windows,Go Back to Windows,.......... (Leer esto recordando la musiquita de inicio de Windows, ta-ra.....)
jeje... en linux pasan cosas extrañas... hoy se me "trabo" el X, no respondia el teclado, solo se movia el mouse, pero obviamente, ningun evento de este era procesado... no siquiera respondio el ctrl+backspace, ctrl+alt+backspace, ctrl+alt+F1/F10... nada... no me quedo otra que pulsar el boton de reset... y con el vmware corriendo... raro, pero no se corrompio nada (aparentemente)...
esto es como cuando me lei la biblia completa para poder criticar con propiedad a la religion... tengo que seguir usando linux como desktop para poder criticarlo con propiedad... y realmente la cantidad de problemas que tengo en linux, no me pasaban en windows... y eso que no se puede decir que es por ser un usuario iniciado, ya que manejo el linux a nivel mas que avanzado, y corregi problemas que no vi solucion en ningun lado... y tengo detectados, diagnosticados y analizados unos cuantos bugs... pero me doy cuenta que linux es una caja de pandora...
svn creado
http://bennugd.svn.sourceforge.net/viewvc/bennugd/
Genial :)
bueno, chequeen el svn cada tanto, hay cambios bastante frecuentemente.
Interesante el poder ir observando las novedades/modificaciones/fixs/etc. que se van realizando en el proyecto gracias al svn...
Saludos y... ¿cómo no lo digo? Feliz Año 2009 :-)
Una cosita:
El script "configure" que viene del svn en "modules" no chequea que esté instalada la cabecera ffi.h.
Otra cosa es que tampoco tiene permiso de ejecución, pero eso es un poco chorradilla...
exacto, no chequea por el ffi.h puesto que aun ese modulo es experimental, no es definitivo...
ok.
varios fix... revisar http://forum.bennugd.org/index.php?topic=343.0 y el svn http://bennugd.svn.sourceforge.net/viewvc/bennugd/
Corregido error de actualizacion del grafico al cambiar su centro.
Ostras, que bien, en cuanto tenga un hueco pruebo el ejemplo que hice enel que ví el bug.
Mis felicitaciones.
No se si sera el mismo bug... hay un bug pendiente, pero no tengo tiempo ahora de mirarlo, vi el ejemplo del jetpack, pero ese error no lo corregi aun... cuando tenga tiempo lo hago...
Corregido bug de actualizacion de pantalla con mirror y punto de control no centrado y sin usar angle.
Splinter, no he podido probar nada aún, creí que estaba el exe por algún lado, veo que ya dejaste definitivamente de mantener los binarios de windows :( (siento ser windowsnero buaaa). Esto de depender de compilar los fuentes es mas complejo. Mingw32 es un asquillo, hay que compilar todo todo todo. Estoy intentandolo desde cygwin que veo que ya hay bastantes paquetes compliados como los zlib, png y SDL, a ver si consigo pronto un binario (y dlls) para win :(.
De todas formas, gracias por el bugfix.
PD: por cierto, ¿hay alguna forma de cargar jpgs?¿Sería dificil adaptar la parte del código de fenix de lectura de jpgs para hacer un modulo bennugd?¿o existe alguna librería power para hacer eso ya en bennu?
Es que los fondos ocupan un huevo en png de 32 bits :D.
yo no me preocuparia mucho por el tamaño, en memoria va a ocupar lo mismo un png que un jpg... ademas un jpg para funcionar correctamente necesitaria ser un jpg sin compresion (o sin perdida de calidad), ya que en bennu los colores (0 por ejemplo) son significativos.
No deje de mantener los binarios windows, Sandman se estaba encargando de compilarlos, pero pronto volveré a hacerlo yo... quiero armar un instalador, asi las distro (tanto linux como windows) salen con su instalador...
Ok la paciencia es una virtud, y como por aqui queremos ser virtuosos en el arte del fenix, seremos pacientes, ademas como me gusta decir "lo bueno se hace esperar".
:D :D
SplinterGu no hay prisa, yo de momento sigo usando la beta 15c y tan contento. ;)
Saludos!
binarios de la revision 22 listos para descarga
http://betatester.bennugd.org/betas/
Oh Yeah!, Thankcias, voy a probarla...
SplinterGU.Karma++
buenísimo, ya lo tenía yo desde ayer por la mañana.
es lo que tiene revisar el svn cada dia :D.
Bajando la 22, gracias Juan! :)
hola
tengo rato revisando y las librerías de la wip 22 no me funcionan correctamente.
aunque todas dicen haber sido creadas el 4 de febrero, excepto dos archivos que fueron creados el 5, encuentro los mismos bugs que la versión de diciembre que recibimos como regalo de navidad. no cierra ventana en la cruz, no se crean fpgs nuevos, etc, etc, etc. no entiendo qué pasa, pues había leido que todos estos problemas ya se habían resuelto.
antes de decir algo más, quisiera preguntar si a todos les ha funcionado bien la nueva versión. es suficiente con que revisen que se cierra la ventana de windows al dar click en la cruz. a mi no me pasa, y ya revisé la ruta de compilación y ejecusión, lo hice manualmente, y borré todas las versiones anteriores, revisé que no compilara al eliminar algunas librerías, me descargué los librerías externas zdl, etc.
saludos a todos :) (no se me ocurre nada más :-[ )
ya se explico que lo de no cerrar ventana con la cruz no es un bug, cuando se pulsa la cruz se setea una variable que indica esta acccion... de hecho si mal no recuerdo lo use en el ejemplo de la GUI...
eso de que no se crean fpg nuevos no entiendo a que te referis el programa que crea fpg a partir de pngs funciona perfectamente... y no se que otros bugs mas decis... podrias numerarlos?
??? no es bug... oh??? perdón :D
he revisado y si se crean fpgs nuevos en memoria, pero le doy a save_fpg, y no se guarda, y cambio las librerías a las de octubre y ahí si se guarda el fpg ???
ehhhh, perdón por lo alarmista, como antes si funcionaba la x y ahora no (y parte esta cosita), pues pensé que había muchas cositas (cositas que no funcionaban) más, sin embargo no he tenido tiempo de buscar, por eso puse etc ::) (je je, lo siento)
de todas formas, eso de que no se guarde los fpgs está raro, y les dejo un ejemplo.
saludos.
si los maps en una lib tienen distinta profundidad no se grabaran...
el error esta en la fpg_new, que da 0... voy a revisar si es correcto...
bueno, tampoco se cuanto daba la version anterior...
Fixeado, gracias!
Hola, tengo un error con la ultima versión y los 32 bits de color.
Cuando pongo esa profundidad, si cargo un proceso con un gráfico con regiones transparentes y cargo otro proceso con otro gráfico mas chico que se moverá por encima del otro, me detecta colisión en las zonas transparentes del primer gráfico. En cambio en profundidad de 16 bits no pasa.
¿Es conocido ya?
eso no es un bug...
las transparencias son colisionables... tanto en 16, como en 32bits..
el 0 absoluto es la unica transparencia que no colisiona, en 16 bits las transparencias con valor menos a 50% son convertidas a 0 absoluto, en 32 bits cada transparencia es respetada...
yo creo que de esto ya se hablo...
Sí, se habló de eso y eso que comentas lo veo correcto, el problema es que te hablo de transparente transparente osea 0 absoluto. No he dicho transparencias en ningún caso sino transparente. Voy a revisar la imagen no vaya a ser que sea cercano a 0 y no 0.
si seguis teniendo el error, por favor, postea un ejemplo (con imagenes) asi lo pruebo...
gracias...
Lo he revisado y no encuentro nada raro, a ver si podes ayuarme a verlo.
Saludos.
NOTA: Te mando un ejemplo con imágenes si lo pones a 16 va bien, si lo pones a 32 va mal, presento la variable hay colisión en la pantalla por si te sirve para algo.
Se me ha olvidado explicar lo esperado. El proceso player incrementa la coordenada "y" hasta colisionar con el proceso backgr. En 32 bits siempre está colisionando y no cae nunca (asi que parece que el player vuela), en 16 bits va bien cae hasta tocar algo distinto de transparente.
Como dije, el problema esta en que no estas usando color absoluto 0, estas usando un RGBA de 255,255,255,0... en 32 bits poner un canal alpha en 0, solo hace a un pixel no visible, pero el pixel sigue estando, es hacerlo invisible, pero existe y colisiona...
esto es un grafico con un fondo 0 absoluto (RGBA=0,0,0,0)...
espero que ahora con la nota del RGBA se entienda el asunto...
Ostras tu, pues eso no es lo típico de los programas, por ejemplo, el gimp no lo tiene en cuenta.
Yo creo que deberías permitir que fuera cualquier color a alpha 0. Date cuenta que el RGB(0,0,0) es otro color, asi que se está suponiendo que el "transparente transparente" es el negro con alpha 0. Cosa que hasta ahora ningún programa de los que he usado presupone: irfranview, acdsee,photoshop, inkscape, painshop pro. Para todos ellos alpha 0 es transparente independiente del color que tengan los otros canales. Cosa diferente sería que alpha fuera distinto de 0 porque supondría un color translúcido no transparente total.
Bueno, en fin, da igual, teniéndolo en cuenta tendré que pintar de negro lo que quiera que sea transparente y aplicarle alpha 0.
Muchas gracias por la aclaración.
alpha 0 es transparente... como un vidrio, porque sea transparente no significa que no este... proba correr contra una ventana y luego me decis si colisionas o no contra esta...
hay algo que todavia veo no se logra entender... una cosa es transparente otra cosa es ausente... 0 es ausencia... alpha 0 es transparente... pero no significa que este ausente, es un objeto transparente... esto es fantastico para 32 bits, porque nos permite poder colisionar contra objetos no visibles (transparentes)... cosa que en 16 y los otros modos no se puede...
EDIT:
Tampoco te equivoques, los programas graficos que mencionas se comportan igual... si vos tenes varios graficos de diferente color y luego le aplicas alpha 0 a cada 1 de estos, los colores de estos objetos siguen siendo el que tenian anteriormente, solo que no se ven... conservan su propiedad color... y si vos aplicas el selector magico para seleccionarlos por color, no va a tocar toda el area transparente porque tienen alpha 0, sino que van a tomar la seleccion del objeto por su color y no por su alpha...
veo que es dificil entender paletas, transparencias, alphas, huecos en los graficos (ausencia de pixels)...
ok, gracias de nuevo
pero se entiende ahora?
sipo, eso del RGBA lo explica bien. El único color que no produce colixion en 32 bits es el rgba (0,0,0,0) el resto sí producen colixion aunque no se vean.
perfect!
binarios r24 estan disponibles... http://betatester.bennugd.org/betas/
wow, muchísimas gracias, descargando :)
Actualizando versión, muchas gracias Splinter. Karma up!! :)
Novedades, SplinterGU?
Quote from: izubiaurre on February 24, 2009, 12:31:53 PM
Novedades, SplinterGU?
http://bennugd.svn.sourceforge.net/viewvc/bennugd/modules/?sortby=rev&sortdir=down&view=log
No lo conocía. Una cosa, ya que la página de inicio de bennugd.org está tan vacío. Porqué no se ponen algunos links interesantes además de acceder al foro? Podrían ser acceso a la wikipedia, descargar la última versión, ...
podria ser... no es mala idea... algo basico... si alguien se anima a armar esa pagina, yo la subo y luego actualizo los links...
Hola por que no pruebas este mod para smf y integrar los foros y un cms con portal de noticias, descargas, enlaces y en un plisaplas y manteniendo la estica
;Dhttp://www.tinyportal.net (http://www.tinyportal.net)
Muy bueno ese link syous.
Pixel ya creó una pagina (http://web.bennugd.org/) para el proyecto usando el CMS Drupal. Solo habría que redireccionar para que se mostrara por defecto al acceder a http://bennugd.org/ y buscar un theme acorde con el aspecto del foro. También veo importante que sea multilingue pudiéndose escoger el idioma. Drupal esta preparado para ello. Es imprescindible que esté en inglés para darse a conocer pero sin olvidar a la comunidad de usuarios en español que aquí somos la mayoría.
por motivos de los ultimos hackeos, estamos intentando mantener todo por separado... en dominios y usuarios diferentes... la idea es el foro en un lugar, el portal en otro, etc, se que sera una complicacion, pero por lo menos limitamos un poco los hackeos...
Actualmente Sandman está toqueteando la web, y planea hacer un tema común para ella, para el wiki, y no sé si para el foro, aunque creo que es más bien basado en el del foro actual.
Coincido con ello. Es necesario unificar los contenidos aunque estén en diferentes servidores o sitios. Cosas imprescindibles:
- Foro
- Página de inicio
- Noticias
- Documentación y Wiki
- Material:
- Ejemplos
- Imágenes
- Fuentes
- Sonidos
- ...
En inglés como en castellano. Convendría promocionarlo un poco, Div_arena se convirtión en un gran portal con muchos usuarios...
Si es cuestión de promocionarlo, yo me comprometo a escribir algún artículo de iniciación para las revistas que hagan falta (TodoLinux, LinuxMagazine, Linu+...otra cosa es que me hagan caso), cuando salga una versión definitiva de Bennu.
Y evidentemente, ir por otros foros.
Eso de tener algún tipo de página web además del foro, por muy sencilla que sea, me parece fundamental.
Muchas veces recomiendo Bennu, pero la gente se extraña de que haya que conocerlo a través de un foro. A mí personalmente también me pasó en un principio, hasta que me decidí a postear y me encontré con las grandes personas que sois todos ;)
Siento no poder ayudar en el tema de la web, soy bloggero pero no soy webero...
muchas gracias a ambos...
Quote from: izubiaurre on February 27, 2009, 10:01:37 AM
Coincido con ello. Es necesario unificar los contenidos aunque estén en diferentes servidores o sitios. Cosas imprescindibles:
- Foro
- Página de inicio
- Noticias
- Documentación y Wiki
- Material:
- Ejemplos
- Imágenes
- Fuentes
- Sonidos
- ...
En inglés como en castellano. Convendría promocionarlo un poco, Div_arena se convirtión en un gran portal con muchos usuarios...
100% de acuerdo, cada dia que pasa que alguien cae en esta web y no ve toda la informacion a golpe de vista, es un posible nuevo usuario de bennu que se pierde.
Es IMPRESCINDIBLE si se quiere que bennu sea utilizado que disponga de una WEB, simple, que tenga muy resumido ¿que es? ¿como empezar? etc, para que cualquier persona con conocimientos basicos de programacion pueda estar en 5 minutos trasteando con el.
en mi opinion intentaria basarme ya en alguna web que tenga todo eso para ver como lo estructuran. es necesario que salgan en portada imagenes de juegos ya echos con bennu y con un buen acabado esteticamente, que la gente vea lo que se puede hacer, una vez visto que con un simple click vea como se empieza, que de un simple click pueda descargar todo lo necesario, y tenga a la vista un tutorial para principiantes (ESPECIFICO DE BENNU)
es decir, que si yo le doy el link a mi primo de 15 años, le pique la curiosidad 1º, 2º que intente hacer el algo, y 3º que lo consiga por basico que sea, si se consiguen estos 3 pasos en la primera hora de contacto con bennu (cosa mas que sencilla) el usuario ya indagara mas a fondo por los foros etc... y sera un habitual de bennu.
En cambio si llega y ve: click para acceder a los foros ya dices: vaya, ni una triste web... entras en el foro y no sabes ni por donde buscar... y tardas 3 horas en encontrar simplemente como funciona en comparacion con fenix... eso es lo q no puede pasar, que alguien que ya conozca div/fenix tenga que tirarse 3 horas para ver como funciona esto...donde conseguirlo etc...
Y se deberia hacer cuanto antes, pues cuanto mas se tarde menos usuarios nuevos en esta comunidad tendremos y estaremos perdiendo
;D podría mirar otro sistema mas completo de integrar smf y sistema de portal muy completo http://mkportal.es/ (http://mkportal.es/) y serie independientes a la vez de que se integran
si puede ser independiente (alojado fisicamente en otro subdominio o usuario) seria lo ideal...
con respecto a los cambios que estan haciendo en el site, por favor, no me toquen el foro... solo denme ese gustito... despues hagan lo que crean conveniente con el resto del site...
Ya os he dicho que soy bloggero, un blog de Wordpress direccionado con bennugd.org podría servir temporalmente... Aunque por supuesto que no es la mejor solución ni mucho menos. Una web sería lo adecuado, preferiblemente con su propio alojamiento para poder modificar cualquier cosa en cualquier momento.
El foro ni tocarlo, es el único foro que uso, nunca me han gustado usar foros pero es que este es sencillamente perfecto!
Holas, pregunta supertonta. Donde andan las fuentes? Que toy con un mac que me han dejado pa compilar el bennu, y no las veo por ningun sitio. ^^ Asi le meto un compile y dejo una release compilada para macosX con motorola. Me he bajado de betatester los sh y nas. Hay solo versiones compiladas, y en sources no me sale la page :( (Puede que me haya perdido algo ya que llevo mucho tiempo sin tiempo para leer los foros en condiciones :S aparte de lo empanao que suelo ser ^^)
Quote from: animanegra on March 04, 2009, 07:43:34 PM
Holas, pregunta supertonta. Donde andan las fuentes? Que toy con un mac que me han dejado pa compilar el bennu, y no las veo por ningun sitio. ^^ Asi le meto un compile y dejo una release compilada para macosX con motorola. Me he bajado de betatester los sh y nas. Hay solo versiones compiladas, y en sources no me sale la page :( (Puede que me haya perdido algo ya que llevo mucho tiempo sin tiempo para leer los foros en condiciones :S aparte de lo empanao que suelo ser ^^)
http://forum.bennugd.org/index.php?action=search2
pones sourceforge... y le das enter...
o podes ver mi firma...
joder menudo empane, te juro que habia visto tu firma pero se ve que me habia fijado solo en la parte de betatesters :S ^^ Gracias :D
je, eso lo agregue cuanto respondi... ;)
- Soporte de fade 32 bits (disponible en SVN)
Finalmente funciona correctamente (eso creo)!
- Fixed Translucent tables in 8 bits
- Fixed blend operations in 8 bits
- Fixed Translucent+Blend in 8 bits
sample
Program Pruebas;
#ifdef __VERSION__
import "mod_screen";
import "mod_video";
import "mod_map";
import "mod_say";
import "mod_text";
import "mod_rand";
import "mod_mouse";
#endif
import "mod_file";
import "mod_key";
import "mod_draw";
import "mod_proc";
import "mod_math";
#define GR_DEPTH depth
//#define GR_DEPTH 16
global
int recta;
int cubo;
int fondo;
int depth = 32;
int gflags = 0;
int gangle = 0;
int gsize = 100;
int galpha = 255;
int sw = 0;
begin
set_fps(0,0);
action();
While (NOT key(_esc))
if (key(_TAB))
let_me_alone();
depth /= 2;
if (depth<8) depth = 32; end
delete_text(all_text);
unload_map(0,fondo);
unload_map(0,cubo);
unload_map(0,recta);
unload_map(0,mouse.graph);
action();
while (key(_TAB)) frame; end;
end
frame;
end
end
process action()
private
map;
count ;
Begin
// scale_mode = scale_normal2x;
/*
dump_type=1;
restore_type=1;
*/
set_mode(640,480,GR_DEPTH|WAITVSYNC); // For rgb for graphs
cubo=new_map(100,100,GR_DEPTH);
drawing_map(0,cubo);
drawing_color(rgb(0,0,200));
draw_box(50,0,100,100);
drawing_color(rgb(0,100,200));
draw_box(0,0,50,100);
drawing_color(rgba(100,0,200,50));
draw_box(25,0,75,25);
/* Hole */
drawing_color(rgba(255,255,0,200));
draw_box(35,35,65,65);
drawing_color(rgba(255,0,255,64));
draw_box(45,45,55,55);
/*
cubo=new_map(100,100,GR_DEPTH);
drawing_map(0,cubo);
drawing_color(rgb(0,0,200));
draw_fcircle(50,50,50);
drawing_color(rgb(0,100,200));
draw_fcircle(50,25,20);
*/
recta=new_map(5,100,GR_DEPTH);
drawing_map(0,recta);
drawing_color(rgb(200,0,0));
draw_box(0,0,5,100);
drawing_color(rgb(0,200,0));
draw_box(0,0,5,5);
drawing_color(rgb(0,0,200));
draw_box(5,0,5,100);
set_mode(640,480,depth);
mouse.graph=png_load("pngtest.png");
fondo=new_map(640,480,depth);
for (y=0;y<480;y++)
for (x=0;x<640;x++)
//((y*100/256)<<(((y>>2)%3)<<3))
// map_put_pixel(0,fondo,x,y,rgb(y*256/480,y*256/480,y*256/480));
map_put_pixel(0,fondo,x,y,rgb((y&1)?x*256/640:0,(x&1)?x*256/640:0,(y&1)?y*256/480:0));
end
end
put_screen(0,fondo);
write_int (0,100,10,1,&fps);
write_int (0,200,10,1,&depth);
write_int (0,300,10,1,&gangle);
write_int (0,400,10,1,&gsize);
write_int (0,500,10,1,&galpha);
jugador(120,180,cubo,-180000,0);
jugador(240,180,cubo,-180000,B_HMIRROR);
jugador(120,300,cubo,-180000,B_VMIRROR);
jugador(240,300,cubo,-180000,B_HMIRROR|B_VMIRROR);
jugador(440,180,recta,-180000,0);
jugador(560,180,recta,-180000,B_HMIRROR);
jugador(440,300,recta,-180000,B_VMIRROR);
jugador(560,300,recta,-180000,B_HMIRROR|B_VMIRROR);
While (NOT key(_esc))
gangle+=100;
If (key(_F1)) gflags |= B_TRANSLUCENT; end
If (key(_F2)) gflags = gflags & ~B_TRANSLUCENT; end
If (key(_F3)) gflags |= B_ABLEND; end
If (key(_F4)) gflags = gflags & ~B_ABLEND; end
If (key(_F5)) gflags |= B_SBLEND; end
If (key(_F6)) gflags = gflags & ~B_SBLEND; end
If (key(_minus)) gsize-=10; if (shift_status) while(key(_minus)) frame; end ;end; end
If (key(_plus)) gsize+=10; if (shift_status) while(key(_plus)) frame; end ;end; end
If (key(_1) && galpha > 0) galpha--; if (shift_status) while(key(_1)) frame; end ;end; end
If (key(_2) && galpha < 255) galpha++; if (shift_status) while(key(_2)) frame; end ;end; end
If (key(_q)) gangle-=1000; if (shift_status) while(key(_q)) frame; end ;end; end
If (key(_w)) gangle+=1000; if (shift_status) while(key(_w)) frame; end ;end; end
If (key(_a)) gangle-=100; if (shift_status) while(key(_a)) frame; end ;end; end
If (key(_s)) gangle+=100; if (shift_status) while(key(_s)) frame; end ;end; end
If (key(_z)) gangle-=10; if (shift_status) while(key(_z)) frame; end ;end; end
If (key(_x)) gangle+=10; if (shift_status) while(key(_x)) frame; end ;end; end
If (key(_9) && !fading) fade_off(); while(key(_9)) frame; end; end
If (key(_0) && !fading) fade_on() ; while(key(_0)) frame; end; end
if ( key( _H ) ) gflags ^= B_HMIRROR; while ( key( _H ) ) frame; end; end
if ( key( _V ) ) gflags ^= B_VMIRROR; while ( key( _V ) ) frame; end; end
if ( key(_F10)) map = get_screen(); while(file_exists("capture"+count+".png"));count++;end;save_png(0,map,"capture"+count+".png"); unload_map(0,map);while ( key(_F10)) frame; end; end
if ( key( _SPACE ) ) gangle = 0; end
Frame;
End
let_me_alone();
End
Process jugador(x,y,graph,angle,iflags)
Private
int mapa;
Begin
While (NOT key(_esc))
alpha = galpha;
size = gsize;
angle = gangle;
flags = gflags ^ iflags;
Frame;
End
End
r28 available for download...
Actualizando versión, gracias SplinterGU! karma++ :)
No se si lo has hecho a propósito o es un descuido, pero en esta release falta el describe.bat.
r29 in svn...
Quote from: blostec on March 13, 2009, 09:25:45 AM
No se si lo has hecho a propósito o es un descuido, pero en esta release falta el describe.bat.
no me di cuenta... gracias... lo incluire en la proxima... me esta costando mucho subir las releases...
r30 in svn...
core:
- new string_ptoa more efficient and same result in different SO.
- check constants already defined as variable
- Fix variant arg for pointer vars
- Fix unsigned comparations
modules:
- 32 bits drawing alpha support (alpha-pixel and drawing_alpha)
- speed up some drawing functions
- write_var pointer vars support
sample:
import "mod_draw"
import "mod_wm"
import "mod_key"
import "mod_video"
import "mod_text"
import "mod_say"
import "mod_rand"
import "mod_map"
Process Main()
private
unsigned int ga = 255;
unsigned int r = 255, g = 255, b = 255;
unsigned int a = 255;
char * rgba;
Begin
set_mode(640,480,32);
write(0,10,10,0,"drawing_alpha:"); write_var(0,110,10,0,ga);
write(0,10,20,0,"r:"); write_var(0,110,20,0,r);
write(0,10,30,0,"g:"); write_var(0,110,30,0,g);
write(0,10,40,0,"b:"); write_var(0,110,40,0,b);
write(0,10,50,0,"alpha"); write_var(0,110,50,0,a);
write(0,10,60,0,"color32:"); write_var(0,110,60,0,rgba);
Repeat
if (key(_1) and ga>0) drawing_alpha(ga--); end
if (key(_2) and ga<255) drawing_alpha(ga++); end
if (key(_q) and r>0) drawing_color(rgba(r--,g,b,a)); end
if (key(_a) and r<255) drawing_color(rgba(r++,g,b,a)); end
if (key(_w) and g>0) drawing_color(rgba(r,g--,b,a)); end
if (key(_s) and g<255) drawing_color(rgba(r,g++,b,a)); end
if (key(_e) and b>0) drawing_color(rgba(r,g,b--,a)); end
if (key(_d) and b<255) drawing_color(rgba(r,g,b++,a)); end
if (key(_r) and a>0) drawing_color(rgba(r,g,b,a--)); end
if (key(_f) and a<255) drawing_color(rgba(r,g,b,a++)); end
if (key(_SPACE)) draw_box(rand(0,640),rand(0,480),rand(0,640),rand(0,480)); end
rgba = rgba(r,g,b,a);
frame;
Until(exit_status||key(_ESC))
End
Por curiosidad ¿cuando sacas los binarios? cuando ya se ha probado como estable, cuando trabajas en la siguiente revisión, al poco tiempo...
Es que hay ganas :D :D :D :D
hoy a la noche generare todo...
splinter_work? a que se debe ese nuevo nick?
a que estoy en el trabajo... mi otro nick es solo para uso en zona militarizada...
Gran trabajo con las últimas optimizaciones/incorporaciones al lenguaje con cosas tales como "new string_ptoa more efficient and same result in different SO", "speed up some drawing functions", "write_var pointer vars support"... me gustan esas cosas...
Por cierto, puesto que ya diste soporte de fade en 32bits, ya se podría eliminar la línea que hace referencia a ello en la sección "a completar (urgencia media)" del hilo "TODO", así como quizás actualizar alguna cosa de ese hilo...
Saludos.
Quote from: SplinterGU on March 15, 2009, 12:05:01 AM
(...)
import "mod_draw"
import "mod_wm"
import "mod_key"
import "mod_video"
import "mod_text"
import "mod_say"
import "mod_rand"
import "mod_map"
Process Main()
private
unsigned int ga = 255;
unsigned int r = 255, g = 255, b = 255;
unsigned int a = 255;
char * rgba;
Begin
set_mode(640,480,32);
write(0,10,10,0,"drawing_alpha:"); write_var(0,110,10,0,ga);
write(0,10,20,0,"r:"); write_var(0,110,20,0,r);
write(0,10,30,0,"g:"); write_var(0,110,30,0,g);
write(0,10,40,0,"b:"); write_var(0,110,40,0,b);
write(0,10,50,0,"alpha"); write_var(0,110,50,0,a);
write(0,10,60,0,"color32:"); write_var(0,110,60,0,rgba);
Repeat
if (key(_1) and ga>0) drawing_alpha(ga--); end
if (key(_2) and ga<255) drawing_alpha(ga++); end
if (key(_q) and r>0) drawing_color(rgba(r--,g,b,a)); end
if (key(_a) and r<255) drawing_color(rgba(r++,g,b,a)); end
if (key(_w) and g>0) drawing_color(rgba(r,g--,b,a)); end
if (key(_s) and g<255) drawing_color(rgba(r,g++,b,a)); end
if (key(_e) and b>0) drawing_color(rgba(r,g,b--,a)); end
if (key(_d) and b<255) drawing_color(rgba(r,g,b++,a)); end
if (key(_r) and a>0) drawing_color(rgba(r,g,b,a--)); end
if (key(_f) and a<255) drawing_color(rgba(r,g,b,a++)); end
if (key(_SPACE)) draw_box(rand(0,640),rand(0,480),rand(0,640),rand(0,480)); end
rgba = rgba(r,g,b,a);
frame;
Until(exit_status||key(_ESC))
End
Una cosa, ¿el código no se tendría que ver con colores?
Bueno, me respondo a mí mismo:
[code language="bennu"]
import "mod_draw"
import "mod_wm"
import "mod_key"
import "mod_video"
import "mod_text"
import "mod_say"
import "mod_rand"
import "mod_map"
Process Main()
private
unsigned int ga = 255;
unsigned int r = 255, g = 255, b = 255;
unsigned int a = 255;
char * rgba;
Begin
set_mode(640,480,32);
write(0,10,10,0,"drawing_alpha:"); write_var(0,110,10,0,ga);
write(0,10,20,0,"r:"); write_var(0,110,20,0,r);
write(0,10,30,0,"g:"); write_var(0,110,30,0,g);
write(0,10,40,0,"b:"); write_var(0,110,40,0,b);
write(0,10,50,0,"alpha"); write_var(0,110,50,0,a);
write(0,10,60,0,"color32:"); write_var(0,110,60,0,rgba);
Repeat
if (key(_1) and ga>0) drawing_alpha(ga--); end
if (key(_2) and ga<255) drawing_alpha(ga++); end
if (key(_q) and r>0) drawing_color(rgba(r--,g,b,a)); end
if (key(_a) and r<255) drawing_color(rgba(r++,g,b,a)); end
if (key(_w) and g>0) drawing_color(rgba(r,g--,b,a)); end
if (key(_s) and g<255) drawing_color(rgba(r,g++,b,a)); end
if (key(_e) and b>0) drawing_color(rgba(r,g,b--,a)); end
if (key(_d) and b<255) drawing_color(rgba(r,g,b++,a)); end
if (key(_r) and a>0) drawing_color(rgba(r,g,b,a--)); end
if (key(_f) and a<255) drawing_color(rgba(r,g,b,a++)); end
if (key(_SPACE)) draw_box(rand(0,640),rand(0,480),rand(0,640),rand(0,480)); end
rgba = rgba(r,g,b,a);
frame;
Until(exit_status||key(_ESC))
End
[/code]
Quote from: MythomizeR on March 20, 2009, 09:35:38 AM
Gran trabajo con las últimas optimizaciones/incorporaciones al lenguaje con cosas tales como "new string_ptoa more efficient and same result in different SO", "speed up some drawing functions", "write_var pointer vars support"... me gustan esas cosas...
Por cierto, puesto que ya diste soporte de fade en 32bits, ya se podría eliminar la línea que hace referencia a ello en la sección "a completar (urgencia media)" del hilo "TODO", así como quizás actualizar alguna cosa de ese hilo...
Saludos.
gracias... hoy hay nuevas mejoras, en un rato las subo...
cierto...
A ti por la labor, estaré pendiente de esas novedades ;-)
Arg, siento decir que desde Windows, copiando y pegando ese codigo y pulsando F6 (Compilar+Ejecutar) el programa se me cierra solo...
¿Me falta actualizar una DLL verdad? Me ha pasado varias veces en los ultimos meses. Si usa alguna DLL nueva de las ultimas 3-4 semanas tiene que ser eso. Confirmadme!
Ese código no te funciona porque el soporte 32bits alpha se ha añadido en la r30 de la cual no se han liberado los binarios. Es normal que con la r28 no funcione. Si tienes dudas con las dll's, lo mejor es que las borres y te bajes de nuevo la release 28 y el mandatory pack. Saludos!
maldicion, ayer pense que habia subido los cambios, pero se ve que fallo...
ahora si, revision 33 disponible en el svn...
lamentablemente no estoy pudiendo subir los ejecutables, mi ISP me tiene cansado...
no mas betas... ahora son snapshot...
http://betatester.bennugd.org/snapshot/
Diferencias entre betas, wips, revisions y snapshots?
Veo que ya estas subiendo la r34, mañana me la bajo y la pruebo. Gracias! ;)
betas son betas...
wips, son versiones en desarrollo, podria ser lo mismo que snapshots.
revision es la numeracion de cada cambio...
snapshot es una foto binaria de lo que esta en el repositorio en tal revision
Quoteahora si, revision ...
gracias, :)
Gracias por la r34.
A ver si se me ocurren más sugerencias para el lenguaje y las digo, aunque supongo que lo prioritario en éstos momentos sea su depuración...
Bueno, escribo en un post nuevo no vaya a ser que por editar el anterior pase desapercibido... :-)
El caso es que tras probar la última release, la r34, un sencillo fragmento de código que antes me funcionaba sin problemas ahora ha dejado de hacerlo, a saber:
private
int fichero;
word *buffer;
int n;
begin
buffer = alloc(1000);
fichero = fopen(filename,O_READ);
for(n=1000;n;n--)
fread(fichero,buffer);
buffer++;
end
fclose(fichero);
end
Antes me cargaba los 1000 bytes correctamente en 'buffer' y ahora lo carga con datos "basura" que nada tienen que ver con lo que antes cargaba...
Ello me hace pensar que quizás en este tiempo ha habido algún cambio (quizás bug, no se...) en la función fread.
Y que sí, que es un poco gañán usar fread en su versión de dos parámetros teniendo una de tres que te lee todos los datos de una, pero lo cierto es que cuando vi la documentación de ésta, no me lo dejaba claro (INT FREAD(POINTER, INTEGER, INTEGER))... y bueno, ya se que es cuestión de probar, pero aprovecho para preguntar cual de los dos enteros es el que recoge el dato y cual la cantidad de este :-)
Por cierto, aprovecho tambien para decir que qué chulo estaría que el Bennu dejara usar llaves {} en lugar del begin-end... y ya de paso, que nos dejara ahorrarnos éstas en aquellos casos de sentencia única a lo C style, of course... pero bueno, esto ya es por pedir, que para eso es gratis :-)
iba a probar tu codigo, pero caramba! claro que no va a funcionar... buffer es un pointer... lo unico que haces con fread es leer punteros (4 bytes, pointer), no su contenido...
por otra parte con alloc 1000 solo estas alocando espacio para 500 words...
esta todo mal por donde lo mires... no puede ser que antes te funcionara... si antes te funcionaba habia un bug...
LOL qué cosas me dices :-), me sorprende, pues te puedo asegurar que me ha estado funcionando perfectamente hasta no sé que versión, porque no sé si me quedé por la r28 o por ahí, no recuerdo bien... yo pensaba que debe recibir un puntero al área a cargar, como en C...
Y sí, claro que sé que alloc reserva bytes, y por tanto en words son la mitad, pero es que por otro lado ese no es el código exactamente original, pero vamos, que el original es así solo que algo más engorroso... pero vamos que es así.
Pues a ver si va a ser un bug que hubo, no se... pero ya te digo que me ha ido de rechupete para una librería que hice y que, bueno... tendrá que ver la luz algún día y espero os guste :-)
Editado:
Viendo la documentación de la Wiki, jaja ya lo veo, pero es que qué raro que no viera tal docu, pues echo mano de ésta con frecuencia como es natural... y qué suerte por tanto he tenido todo este tiempo al funcionarme jaja
Pues voy a ver si subsano el asunto...
Gracias.
perdon, quizas no me explique bien... intentare explicarlo, para que razonemos juntos y veamos porque no deberia funcionar...
el prototipo de la funcion (original) es:
fread(fichero, variable)
donde fichero es lo que retorna el fopen
y variable es la variable a cargar
bien, la funcion fread, toma del "tipo" de variable los valores de address y tamaño...
esto es:
&variable y sizeof(variable)
entonces, al variable ser un pointer... lo unico que haces es leer el puntero. ("&variable" NO variable...)
se entiende ahora?
Cuando dije 500, lo dije, porque en el ejemplo haces un for de 1000, y no de 500...
EDIT:
En otro prototipo es:
fread(address, size, fichero);
casi como C.
Sí, bien, todo aclarado... con la primera explicación que me has dao ya he empezado a ver el asunto y luego después al mirar la wiki (que no sé por que se me habia pasado por alto mirar allí)...
Y sí, lo del bucle 1000 es que es por lo que te he contado después en el EDIT de mi post anterior, que el código no es el original y entonces por eso se me ha pasado modificar eso...
Gracias, voy a ver si arreglo la cosa y no hay más problemas en el código :-D
aca te pongo un ejemplo, llama al codigo "fread.prg"
[code language="bennu"]
import "mod_file";
import "mod_mem";
import "mod_say";
import "mod_string";
private
int fichero;
char *buffer;
string str;
int n;
begin
buffer = alloc(1000);
fichero = fopen("fread.prg",O_READ);
fread(buffer,1000-1,fichero);
buffer[1000]=0;
fclose(fichero);
str = "";
for (n=0;n<1000;n++)
str += chr(buffer[n]);
if (!buffer[n]) break; end
end
say(str);
end
[/code]
Nada, no te preocupes, si ya lo he visto todo claro y ya me vuelve a funcionar perfecto el código, era esa chuminá y que lógicamente he solucionado con simplemente añadir un bonito asterisco punterístico delante de 'buffer' y así cargar donde hay que cargar X-D) (pero sabía yo que mi fallo provenía del fread... :-):
fread(fichero,*buffer);
La confusión vino porque al no dar yo con la documentación de fread en su versión dos parámetros, pues yo imaginé que la variable que recibe el dato leido era tambien un puntero como ocurre con el fread de C, más o menos...
Pues nada me alegro de que me vuelva a rular el código.
Gracias de nuevo :-)
Pregunta tonta del día [música del "wanna be a millionarie"]
¿Se puede compilar el código de Bennu del SVN usando dev-c++?
a- Sí, compilando sólo el código principal.
b- Sí, pero tendrías que crear un proyecto nuevo.
c- Sí, pero tendrías que configurarlo.
d- No, tienes que usar los comandos gcc, etc... que vienen en la carpeta bin del dev-c++
NOTA: es la pregunta 10 y estamos sin comodines ;D
no se.
¿Cómo haces tu los binarios para windows, pues?
Quote from: Drumpi on March 23, 2009, 12:12:08 PM
¿Cómo haces tu los binarios para windows, pues?
esa es la pregunta el millon!
bien, te respondere...
Quote
For compile BennuGD in windows, you need:
- Last version of gcc (only install "current", and g++ and gnumake)
- autotools is suggest
- MSYS
- SDL (source and compile it)
- SDLMixer (source and compile it)
- libogg (source and compile it)
- libungif (source and compile it)
- libpng (source and compile it)
- zlib (this must installed manual)
- and bennugd sourcecode from svn.
I think that is all.
for core compilation (from core folder):
./configure && make
for modules compilation (from modules folder):
./configure --with-bennu-prefix=<path where core reside> && make
p.e.: ./configure --with-bennu-prefix=/opt/bennugd/core && make
r38 en el svn
New function MAP_NEW(w,h,depth,flags) where flags can be: B_CLEAR (bitmap clear) or 0 (no clear new bitmap)
mmm... cuando se crea un map_new no se supone que esta limpio por defecto?
No.
Quote from: TYCO on April 02, 2009, 04:03:27 PM
New function MAP_NEW(w,h,depth,flags) where flags can be: B_CLEAR (bitmap clear) or 0 (no clear new bitmap)
mmm... cuando se crea un map_new no se supone que esta limpio por defecto?
por eso mismo...
A ver que quede claro, porque aún no hay que pagar por escribir, ni hay limite de carácteres como en un SMS.
"MAP_NEW(100,100,16,B_CLEAR)" que tiene de diferente de "MAP_NEW(100,100,16,0)"???
que "MAP_NEW(100,100,16,0)" no limpia el mapa, y por consiguiente es mas rapida.
Esto sirve para casos donde se necesita crear cantidades de mapa, que luego seran sobreescritos en su totalidad. En estos casos se evita la limpieza del area de memoria asignada al grafico al momento de la creacion.
r39 disponible!
Tyco: Se entendio para que sirve? es una funcion para usuarios avanzados, solo para maniaticos. No te preocupes, para tu tranquilidad, la clasica MAP_NEW sigue disponible.
Será para maniaticos sí XD. Supongo que puedes crear 100 mapas sin "rellenar", ocupando así menos memoria, y según vas necesitando los mapas, si se pinta uno, ese mapa pintado ya ocurá más en memoria (como un map_new clásico) por tener algo pintado en él.
PD: No soy maniaTyco. XD
je, en realidad la memoria que consume es la misma, es el tiempo empleado...
supone que necesitas cortar un mapa grande en 100 porciones, y para eso necesitas crear 100 mapas mas pequeños... no tiene sentido que el code pierda tiempo en limpiar esos 100 mapas si vos vas a sobreescribir esa informacion... entonces en esos casos esto es mucho mas rapido.
r40 released!
http://betatester.bennugd.org/snapshot/
Muchas gracias SplinterGU, ¿algo que probar?
Por cierto una cosilla veo desactualizado la información de los binarios
********************
C:\DevBennu\bin>bgdc
BGDC 0.93 (Apr 20 2009 20:38:27)
Copyright ® 2006-2009 SplinterGU (Fenix/BennuGD)
Copyright ® 2002-2006 Fenix Team (Fenix)
Copyright ® 1999-2002 JosÚ Luis Cebrißn Pag³e (Fenix)
Bennu Game Development comes with ABSOLUTELY NO WARRANTY;
see COPYING for details
*************
Bueno más o menos.
Recuerdo que en muchos proyectos existe un configure -version="r40" o asi que añade esa cadena en los sitions necesarios de código en los que se necesite saber la versión.
En algunos otros proyectos simplemente es editando un archivo version.txt y ejecutando en configure como siempre.
Aqui podrias plantear en hacer alguna autogestión de versiones para que la cabecera siempre esté al día y podamos ver rápidamente la versión actual que tenemos instalada en el equipo. También ya de camino un --version vendría genial :D.
¿Que te parece?
Actualizando, gracias Juan ;)
incluire la version pronto, aunque ya esta mas para sacar la 0.93 release o 0.94...
la fecha sale bien... eso es el indicador de la version...
gracias a uds por usar la herramienta...
descargando.... gracias :)
hay nueva version en SVN...
Gracias, sólo una cosa... en la R40 como la R34, la consola de debug en 8Bits se transparenta el fondo negro, y se ve el juego detrás impidiendote leer correctamente la consola de debug. En 16/32 bits no sucede.
Asi es, gracias.
El color 0, para el fondo no es algo muy acertado.
Bien, a partir de ahora, paleta cargada, paleta asignada.
Recordar liberar la paleta cuando ya no se use. Porque las paletas permanecen cargadas en memoria.
Si se usa modo de video 16 o 32, la cada mapa de 8 bits tiene su paleta, o sea, que si se quiere que use la del sistema hay que eliminarle la paleta asignada usando map_assign, poniendole como paleta 0 (paleta del sistema).
Se agregan nuevas funciones de paleta:
pal_set(byte raw[768])
pal_set(palid)
para setear la paleta del sistema por medio de un array con la info rgb o desde otra paleta previamente cargada
tambien si a pal_set se le pasa 0 como id de paleta entonces setea sobre la paleta del sistema.
get_screen ahora retorna un clone de la pantalla dibujada en el ultimo frame.
y funciona perfectamente con los efectos de paleta:
Program prueba;
import "mod_video";
import "mod_map";
import "mod_string";
import "mod_screen";
import "mod_draw";
Global
int counter=0;
int map;
begin
full_screen=false;
set_mode(640,480,32,WAITVSYNC);
set_fps(25,0);
drawing_map(0,0);
draw_box(50,50,100,100);
fade(200,0,0,1);
while(fading)
frame;
map = get_screen();
save_png(0,map,"captures/img"+substr("00000"+counter,-5)+".png");
counter++;
unload_map(0,map);
end
end
¡Buen trabajo!
Por cierto, ¿no habria que sacar fuera del while el unload_map(0,map);? o ¿es que acaso hay que ir liberando el mapa antes de cada nueva llamada a get_screen() al devolver ésta ids diferentes por cada una de ellas?
Ahora que lo pienso, creo va a ser lo segundo por resultarme más lógico...
1) ¿no habria que sacar fuera del while el unload_map(0,map);?
No, dentro, porque cada get_screen (ahora y antes) crea un map nuevo en cada ejecucion.
2) o ¿es que acaso hay que ir liberando el mapa antes de cada nueva llamada a get_screen() al devolver ésta ids diferentes por cada una de ellas?
Exacto "o".... ;)
Esto: pal_set(byte raw[768]) es lo que antiguamente se hacía con set_colors? Y cómo se sabe a qué paleta se le están cambiando los colores?
Quote from: SplinterGU on May 05, 2009, 10:41:20 AM2) o ¿es que acaso hay que ir liberando el mapa antes de cada nueva llamada a get_screen() al devolver ésta ids diferentes por cada una de ellas?
Exacto "o".... ;)
Era de esperar :-)
Quote from: Drumpi on May 05, 2009, 11:35:56 AM
Esto: pal_set(byte raw[768]) es lo que antiguamente se hacía con set_colors? Y cómo se sabe a qué paleta se le están cambiando los colores?
Elemental mi querido Watson...
En aquellas funciones que permiten no especificar paleta, trabajan sobre la del sistema.
No es lo que se hacia, es lo que se hace. Uno de los modos de esta funcion (la que tiene los mismos parametros) es un alias a set_colors.
get_screen() es una de las funciones que nunca me había dado por probar, no me lo había planteado todavía pero en cuanto tenga un momento me pongo a hacer efectos graciosos de transición de fase y cosas así xD
En cuanto a paletas... Soy amigo de usar sprites "robados". y como provienen de paletas diversas trabajo directamente en 16 bits. No he usado una paleta desde el antiguo DIV2...
Ya esta disponible en el SVN "Bennu Game Development 1.0.0 RC (Release Candidate)"...
Genial, ahora mismo me actualizo con tortoise. Gracias Juan!!
(Casi)yujuuuuu.
Bennu, bennu, bennu ¡2009! (http://www.youtube.com/watch?v=qCcaNTrHkPs)
Hola. ¿El módulo fsock no entrará dentro de la versión oficial de bennu? Graciaaas.
no, es un contrib... quizas lo ponga en contrib...
todavia no se bien que hacer con los contrib... ya esta creada una carpeta para que se siga una norma de donde agregarlos (a nivel usuario)... pero no se si se incluiran en la version oficial... en principio, no
¿que es un contrib?
¿Una contribución?
yep!
Ya he nominado a Bennu.
Me ha respuesto con un link que no sé exactamente para qué sirve, creo que es para que otros nominen, cosa un poco tonta porque para eso los mandaría a donde yo lo encontré.
<a href="http://sourceforge.net/community/cca09/nominate/?project_name=Bennu Game Development&project_url=http://forum.bennugd.org/"><img src="http://sourceforge.net/images/cca/cca_nominate.png" border="0"/></a>
eso es para que si vos tenes un site, lo pongas en el y ayudes de esta forma a promocionar el proyecto y tambien a votar por el.
Gracias.
EDIT: Lei las reglas y es posible votar el mismo proyecto para otras categorias, pero solo se puede votar 1 vez por categoria, esto se valida contra el mail.
Los mails no se guardan en ninguna base de datos, solo se usan para enviar la confirmacion de la votacion que uno tiene que clickear para confirmar.
Gracias.
Yo no sabía en qué categoría votar...al final he votado en "best project for developers" y "best project for gamers"...
Lo suyo es mejor proyecto para desarrolladores... al menos, por la descripción que se da. Dudo mucho que gane el de mejor proyecto del mundo :D
Bueno, que tambien he votado.
Quote from: Drumpi on May 14, 2009, 12:42:42 PM
Lo suyo es mejor proyecto para desarrolladores... al menos, por la descripción que se da. Dudo mucho que gane el de mejor proyecto del mundo :D
Bueno, que tambien he votado.
Gracias por la confianza! :P
Igual la idea es que podamos dar a conocer un poco mas el proyecto... por favor colaboren pidiendo a sus conocidos que voten por el proyecto.
Saludos.
Splinter, estamos en la era de la web 2.0: el internet de la sociedad, donde lo importante son los blogs chorra cn la última borrachera del botellón de anoche, las páginas de relacion social tipo tuenti o myspace donde darse a conocer y acumular la mayor lista de amigos a ver quien es el primero en desbordar el servidor, o programas de chat donde acumular correos y más correos para despues mandar un spam masivo (si, las cartas de la cadena ya son eso), saturar la red y preguntarse por qué la red va lenta.
No, Juan, se realista, no podemos competir con pidgin y demás programas de interaccion social, aunque evangelicemos tres paises enteros :D :D :D :D :D
De todas formas, ya sabes que, por mi parte, estoy ganando adeptos por donde puedo: ya me he labrado una fama en gp32spain (no se si buena o mala ;D) y tdos los que conozco con problemas con el C++ o señales y procesos los mando para acá (o al "foro padre"), jejeje.
Yo también voté... dos veces... no se si es hacer trampa :P
Obviamente no se pretende ganar, pero si se ve bennu cada tanto entre los ultimos votados eso ayuda mucho, alguno que otro querra saber de que trata...
Oye, ¿Qué es Bennu? :D
Nueva version en el svn...
------------------------------------------------------------------------
r83 | SplinterGU | 2009-07-01 21:20:53 -0300 (mié 01 de jul de 2009) | 23 lines
- New dirs lib and new glob, diropen, dirread, dirclose functions
- New mod_crypt:
method
------
CRYPT_NONE
CRYPT_DES
CRYPT_3DES
functions
---------
handle CRYPT_NEW(int method, byte * key); /* key = byte [8] in DES, byte [24] 3DES */
int CRYPT_DEL(handle);
int CRYPT_ENCRYPT(handle, pointer in, pointer out, int blocks ); /* each block = 8 bytes */
int CRYPT_DECRYPT(handle, pointer in, pointer out, int blocks ); /* each block = 8 bytes */
int CRYPT_ENCRYPT(int method, byte * key, pointer in, pointer out, int blocks ); /* each block = 8 bytes */
int CRYPT_DECRYPT(int method, byte * key, pointer in, pointer out, int blocks ); /* each block = 8 bytes */
- add vendor folder and modified libdes-4.04b
- some configure fix
samples de encripcion... no recomiendo usar esta logica, sino variantes de la misma, por tema de tener una logica cerrada de encripcion... por ejemplo, encriptar distintos fragmentos con distintas keys o incluso distintos metodos...
¡Genial!
¿Esto será parte de la 1.0?
Muy interesante, aunque _parece_ algo engorroso el sistema (aunque también parece potente y flexible)...
Gracias.
Edit: Por cierto, quizás en Argentina esté bien dicho, pero tengo entendido que es "encriptación", en cualquier caso, es un detalle sin importancia pibe ;-)
La idea es que sea engorroso para evitar hackeos... es muy simple siendo esto opensource hackear un sistema transparente, asi que tras mucho pensar y debatir juntos Sandman y a otros... se me ocurrio que el mejor metodo es hacerlo asi ya que es mas complicado de hackear... ya que la forma de llamar a la encripcion, claves, metodos y el orden lo define el programador en el dcb, y este es cerrado.
Si bennu fuera codigo cerrado, se podria hacer bastante seguro (nada lo es) de forma transparente, pero lamentablemente (para esto) no lo es.
;D una gran idea :D
aca hay otro ejemplo, menos rebuscado. las variantes posibles son muchas.
Hola ¿AES no se tiene previsto implementar?
Sólo por tocar las narices...
Quote from: SplinterGU on July 02, 2009, 03:14:25 PM
La idea es que sea engorroso para evitar hackeos... es muy simple siendo esto opensource hackear un sistema transparente, asi que tras mucho pensar y debatir juntos Sandman y a otros... se me ocurrio que el mejor metodo es hacerlo asi ya que es mas complicado de hackear... ya que la forma de llamar a la encripcion, claves, metodos y el orden lo define el programador en el dcb, y este es cerrado.
Si bennu fuera codigo cerrado, se podria hacer bastante seguro (nada lo es) de forma transparente, pero lamentablemente (para esto) no lo es.
Ahora comprendo... pues sí, mucho mejor así entonces.
Siento ser pesado, pero es que estoy empaquetando el deb con los últimos cambios para el PPA. ¿Incluyo el módulo o no?.
Graciaaaaas
Una cosilla más, dentro de mod_crypt creo que falta el Makefile.in.
El core y la nueva dependencia ya los he subido al PPA (falta que se compilen).
si, se implementaran luego mas metodos, por ahora solo estos.
Incluye el nuevo modulo, por supuesto.
me falta me svn add... ahora lo incluyo... gracias...
Quote from: josebita on July 02, 2009, 07:03:30 PM
Una cosilla más, dentro de mod_crypt creo que falta el Makefile.in.
El core y la nueva dependencia ya los he subido al PPA (falta que se compilen).
ya esta incluido el Makefile.in... voy a corregir un poco el tema de los Makefiles y configure... porque no todos los modulos deberian depender de todas las libs... por ejemplo, X11, libz, etc... asi que voy a corregir eso...
Genial, gracias.
Era lo que me hacía falta. Pongo el bennugd-modules en la cola de compilación.
Nuevos cambios.
- Fix all configure/makefiles dependencies
Genial, creo que era una de las pocas carencias de Fenix respecto a su predecesor :D
De todas formas, como decía mi profesor de Sistemas Operativos "la seguridad del sistema no depende de cómo esté implementado el sistema, sino de la clave con la que se protege".
Si, es posible que haya sitemas más seguros que otros, pero sin la clave habría que dar muchas vueltas, además, tampoco vamos a proteger secretos de estado ¿no? sólo son videojuegos :P
seguro, pero trabajar en un sistema que en 10 minutos sea hackeado, no sirve de mucho.
recomiendo tambien una funcion que genere hashes como string MD5(string)
para por ejemplo colocar records en paginas web u otras cosas utiles
se incluira...
New version in SVN
- Add "types_def" to shared library systems
- Add "types_def" to moddesc
ya subi un paquete binario windows con la ultima version, por ahora sin instalador, solo el autoextraible...
estamos trabajando en el instalador bennu.
probemos, pues
Quote from: SplinterGU on July 02, 2009, 01:38:09 AM
Nueva version en el svn...
------------------------------------------------------------------------
r83 | SplinterGU | 2009-07-01 21:20:53 -0300 (mié 01 de jul de 2009) | 23 lines
- New dirs lib and new glob, diropen, dirread, dirclose functions
¿no hay una documentación un poco más extensa? o algún ejemplo, o algo asín
je, me olvide poner la documentacion... solo esta en el fuente...
Quote
int DIROPEN (STRING path)
Open a dir for read it, returns handle id.
return 0 if fail.
int DIRCLOSE (INT handle)
Close a dir
string DIRREAD (INT handle)
Given a path with wildcards ('*' or '?' characters), returns the first
file that matches and, in every next call, all matching files found
until no more files exists. It then returns NIL.
esto trabaja con las misma estructuras que glob, asi que devolvera resultados en la misma estructura.
La nueva versión me da error al cargar la image.dll, la ponga donde la ponga me dice que no encuentra la librería, y eso que la he probado con proyectos que funcionan en antigüas versiones de bennu con la image.dll.
donde la estas poniendo?
¿donde debería ponerla? la he puesto en todos los sitios que se me ha ocurrido. En la misma carpeta que el prorgrama, en la carpeta de los mod_x, en la carpeta de las dlls, y nada de nada.
Portado pacman de tyco a wiz... subido con el runtime al sitio de snapshots...
http://betatester.bennugd.org/snapshot/
tambien he corregido del pacman aquello que dice de premovimiento... y alguna otra cosa mas que ahora no recuerdo bien...
al final que pasa con la image.dll? está confirmado que funciona con la 1.0 y es por lo pronto un problema mío o le pasa a más gente?
Un saludín
Ultimamente suelo faltar a clase... eso de WIZ.. ¿Qué es? algo de la GP32???
La verdad es que el Pacman ocupa muy poco y es un buen juego para pasarlo a plataformas como la GP32 que son más reducidas que un pc. A ver que tal funciona, si alguien lo puede probar.
Yo tampoco sé qué es lo que es eso de WIZ, acabo de leer a Josebita hablando de ello y ??? xD
Si es que se intenta estar a todo, pero son días tan cortos y laburosos...
:D, pues mas o menos tyco y windgate, la nueva de esos mismos.
http://www.gameparkwiz.com/
Quote from: TYCO on July 20, 2009, 08:34:22 PM
Ultimamente suelo faltar a clase... eso de WIZ.. ¿Qué es? algo de la GP32???
La verdad es que el Pacman ocupa muy poco y es un buen juego para pasarlo a plataformas como la GP32 que son más reducidas que un pc. A ver que tal funciona, si alguien lo puede probar.
funciona muy lindo... puse eso de la pre-pulsacion de las teclas... y tambien hice un resize automatico de todos los mapas y fonts, ya qe esto corre a 320x200, en cuanto al codigo, no me tome el trabajo de cambiar todas las coordenadas, solo puse "/2" en casi todo el codigo... y toque alguna otra cosa que no iba bien... pero ya esta funcionando y va muy lindo...
¿Otra consola que soporta Bennu? No estuve muy al día con la GP32, miré su precio y dije: :o :o :o
Ahora miro la información para comprar la GamePark Wiz y sólo veo un banner publicitario ???
Intentaré ponerme más al día con el tema, pero la verdad es que dejé el mundo de las videoconsolas hace muchos años...
Wow, la verdad es que es muy buena noticia... Nunca me animo a comprarme una consola porque luego no tengo tiempo de disfrutarlas pero esto es fácil atraer a algunos usuarios de la Wiz a Bennu :)
La verdad que estoy muy conforme con la consola...
----
nueva version en el svn... mañana procupare subir versiones nuevas...
------------------------------------------------------------------------
r95 | SplinterGU | 2009-07-21 23:39:43 -0300 (mar 21 de jul de 2009) | 2 lines
- Open2xWiz setup vars for configure
------------------------------------------------------------------------
r94 | SplinterGU | 2009-07-21 23:02:45 -0300 (mar 21 de jul de 2009) | 9 lines
- Add GP2XWIZ
- New fps limit and frameskip system... now, all time is adjusted it.
- Fix mod_joy help
- Fix align rgb_component struct
- Fix mod_map, palette use and discard
- Add Makefile.openwiz to libdes
- libvideo, add VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_DEPTH environment vars to change initial video mode
------------------------------------------------------------------------
Quote- libvideo, add VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_DEPTH environment vars to change initial video mode
¿Son constantes donde consultar la resolución horizontal y vertical de vídeo actual o son globales donde establecer la resolución horizontal y vertical? ¿O son otra cosa? :P
Siempre acabo definiendo esas CONST y la verdad, es buena idea que ahora vengan "de serie" xD
Quote from: Windgate on July 22, 2009, 12:20:43 PM
Quote- libvideo, add VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_DEPTH environment vars to change initial video mode
¿Son constantes donde consultar la resolución horizontal y vertical de vídeo actual o son globales donde establecer la resolución horizontal y vertical? ¿O son otra cosa? :P
Siempre acabo definiendo esas CONST y la verdad, es buena idea que ahora vengan "de serie" xD
no, son "variables de entorno", que definis en tu operativo (o script de arranque) y al cargar el modulo de video, se setea en ese modo en vez de hacerlo en 320x240x32 al iniciar.
no podes consultar nada.
para consultar eso, map_info de 0,0, o las funciones del modulo mod_wm (en casos donde hay ventanas)...
Oh, cierto, el map_info de 0,0 ¿Porque ahí se guarda un map con el contenido actual de la pantalla verdad?
Ciertamente había oído hablar de ello muchas veces, pero nunca le he sacado partido :-[
Bastante fuera del tema, llevo tiempo pensando en la posibilidad de manipular el size de un scroll... ¿Hay pensado algún cambio en el funcionamiento de scroll[] en ese sentido o en algún otro?
Simple curiosidad...
chequea el ejemplo...
scroll.rar en el sitio de descargas...
:)
Me he bajado la última versión del instalador para Linux y me sigue haciendo lo mismo que ya comenté: no acepta los parámetros.
Si pongo --help me sale:
[: 57: --help: unexpected operator
[: 57: --help: unexpected operator
e intenta instalarse.
Si pongo --remove lo mismo:
[: 57: --remove: unexpected operator
[: 57: --remove: unexpected operator
y tira para alante también.
Y si no pongo nada, también me da un aviso de error:
[: 57: unexpected operator
[: 57: unexpected operator
Malamente,pues.
EDIT: El instalador de Windows tampoco me va. Salta un messagebox diciendo: "Error al iniciar la aplicación porque no se encontró libbgdrtm.dll.La reinstalación de la aplicación puede solucionar el problema". Parece obvia la solución: copiar esta dll a la carpeta del instalador...pero precisamente para eso está el instalador, para instalar las dll necesarias, no? Es el pez que se muerde la cola...en un ordenador limpio sin que tengan ningún Bennu instalado previamente.
Hola, yo el lunes instalé bennu en un "ordenador limpio" (con windows xp) con el último instalador disponible que había y si me funcionó el instalador a la perfección. La versión de bennu era la que estaba disponible en la web oficial a esa fecha (ahora no tengo acceso al ordenador donde lo instalé).
Lo que si que creo recordar es que como se hace modificación en la variable de entorno PATH, hay que reiniciar el sistema para que funcionen los comandos bgdc y bgdi desde la consola. Quizá sería intersante un mensaje al final del instalador diciendo que es posible que deba reiniciar el equipo o algo.
Un saludo,
Darío
Quote from: osk on July 25, 2009, 11:02:11 AM
Me he bajado la última versión del instalador para Linux y me sigue haciendo lo mismo que ya comenté: no acepta los parámetros.
Si pongo --help me sale:
[: 57: --help: unexpected operator
[: 57: --help: unexpected operator
e intenta instalarse.
Si pongo --remove lo mismo:
[: 57: --remove: unexpected operator
[: 57: --remove: unexpected operator
y tira para alante también.
Y si no pongo nada, también me da un aviso de error:
[: 57: unexpected operator
[: 57: unexpected operator
Malamente,pues.
EDIT: El instalador de Windows tampoco me va. Salta un messagebox diciendo: "Error al iniciar la aplicación porque no se encontró libbgdrtm.dll.La reinstalación de la aplicación puede solucionar el problema". Parece obvia la solución: copiar esta dll a la carpeta del instalador...pero precisamente para eso está el instalador, para instalar las dll necesarias, no? Es el pez que se muerde la cola...en un ordenador limpio sin que tengan ningún Bennu instalado previamente.
en que distribucion de linux lo estas queriendo hacer?
a mi me funciono perfecto recien, como comentario adicional, la instalacion debe hacerse desde el usuario root.
hola, me quice instalar el "bgd-1.0.0RC6(r95)-win32" en mi windows y me dice que no encuentra el libgdrtm.dll...
¿Qué tengo que hacer? gracias :)
eso puede ser que me falto algo entonces... a ver...
ya esta corregido... disculpas las molestias...
:) muchas gracias, ya pude...
una cosita... seleccioné c y luego bennugd (anterior instalación), pero sólo le di un click a la carpeta, no doble, y la nueva carpeta (donde se instaló bennu) se llamaba c:/bennugdbennugd, también... las letras de abajo corrían muy deprisa(las verdes que dan los mensajes), estaba haciendo un análisis de virus, no se si eso tiene que ver (aunque el analisis pone lenta la pc y ls letras corrían muy rápido)
nuevamente muchas gracias :)
saludos
tiene un set_fps(0,0) al momento de instalar, pero en ese momento no deberian haber letras abajo... y lo de la carpeta, bien, faltara poner una barra... lo voy a revisar.
Vale, he visto que el error de Windows ya se ha solucionado.
Mi error de Linux es en una Ubuntu normal y corriente...no sé, por mi parte puedo intentar toquetear el shellscript a ver qué es lo que pasa...pero es raro que me pase sólo a mi.
Venga, hasta pronto.
El problema debe estar en el shell que tenes configurado como root (supongo que lo estas lanzando desde root), podrias probar ejecutarlo con otro shell...
en windows, hay un problema con el tema de los fps... con linux y wine anda perfecto... pero se ve que en windows no le da el timing... por la fraccion de tiempo... o algun otro problema, estoy intentando resolverlo, pero el putisimo windows me cago el teclado y me es imposible teclear ciertas cosas... voy a ver si pruebo actualizando vmware...
Efectivamente, es un problema de shells.
Según el foro de Ubuntu:
"It looks like it's a bug in their script, based on the (technically) incorrect but usually safe assumption that /bin/sh is just an alias of bash, Ubuntu is one of two distributions (ubuntu and debian) that use the more sh compliant dash by default."
Así que lo que he hecho ha sido cambiar la primera línea del script:
#!/bin/sh
por
#!/bin/bash
y ha funcionado perfecto.
Por otro lado, tanto mi usuario normal como el usuario root utilizan el shell bash por defecto, a tenor de lo que hay en /etc/passwd.
Espero que este hecho sea de provecho.
creo que si haces
bash ./bgd-...
functionaria igual
Bueno, la ultima version windows y linux, no esta usable... para corregir los fps en la wiz, destrui el sistema en los otros operativos... bueno, no es nada grave, pero necesito darme mejor precision al sistema de fps... con los cambios que estoy haciendo ahora va mejor, pero entre muestra y muestra hace pausas un poco mayores a las que deberia...
ya lo solucionare.
Claro, claro. Si haces lo que tú dices sí que funciona, porque estás diciéndole con qué shell quieres ejecutar el script, pero si no le dices nada (como suelo hacer yo) entonces por defecto coge el shell que hay en la primera línea del script...no sé si sería buena idea pues poner como shell por defecto el bash, que es de hecho el que todos los Linux tienen (salvo cosas muy raras) y para el que está pensado el script.
Pero vaya, veo que tienes cosas más importantes que mirar. Sólo era una sugerencia tonta.
Hasta luego.
entonces en windows tenemos que seguir con la anterior a la r95 ¿no? para evitar problemas de fps digo.
Si usas fps(0,0) podes usar la nueva version...
ahora si necesitas ajustar los fps, va a ir muy rapido... a menos que tengas un equipo lento (600mhz supongo) donde ahi si va bien...
Quote from: SplinterGU on July 02, 2009, 01:38:09 AM
- New mod_crypt:
method
------
CRYPT_NONE
CRYPT_DES
CRYPT_3DES
functions
---------
handle CRYPT_NEW(int method, byte * key); /* key = byte [8] in DES, byte [24] 3DES */
int CRYPT_DEL(handle);
int CRYPT_ENCRYPT(handle, pointer in, pointer out, int blocks ); /* each block = 8 bytes */
int CRYPT_DECRYPT(handle, pointer in, pointer out, int blocks ); /* each block = 8 bytes */
int CRYPT_ENCRYPT(int method, byte * key, pointer in, pointer out, int blocks ); /* each block = 8 bytes */
int CRYPT_DECRYPT(int method, byte * key, pointer in, pointer out, int blocks ); /* each block = 8 bytes */
Acabo de entrar en el "Sitio Maldito" y me he encontrado con algo que a priori parece interesante.
No he mirado nada, pero por si lo consideráis útil...a lo mejor se puede aprovechar algo:
http://forum.divsite.net/viewthread.php?tid=6481
http://forum.divsite.net/viewthread.php?tid=6465
:)
gracias... ya lo habia visto... el md5 podria ser incluido, pero no es crypt... el hash no puede ser desencriptado... y tampoco es la data encriptada... lo mismo el md5...
Nueva funcionalidad
variable global "scale_resolution"
descripcion:
sirve para escalar hacia abajo un modo de video... esto es, el modo interno para el juego es el del set_mode, pero el modo a dibujar es el especificado en scale_resolution.
uso:
scale_resolution = WWWWHHHH ;
donde:
"WWWW" es el ancho
"HHHH" es el alto
puede ser cualquier valor menor a las dimensiones de set_mode...
nota:
por ahora no se aplica ningun como ser escalado bilineal, bicubic, etc... con lo que si se usan resoluciones a la mitad puede que si tenemos algo con ancho 1, y esta fijo en pantalla no se vea.
contra:
hay que tener cuidado con el uso de los fonts, ya que si usamos el del sistema, al reducir no entiende lo que se ve...
ventajas:
Facilidad para portar los juegos a consolas.
Ahora falta la opción para poder hacer resize de la ventana con el ratón :D
Perdón por darte trabajo xD
eso es mucho mas dificil... no te envicies...
lol, eso de dar resize a la ventana de forma "dinámica" sería un follón de mucho cuidado...
La ventana muestra la resolución del set_mode dentro de la resolución de escritorio, y aumentar la ventana sería casi un pecado tal y cómo está estructurada la cosa ahora mismo.
Se me ocurre hacer uso del map 0,0 (El que almacena el último FRAME) e ir haciendo el set_mode correspondiente y mostrar ese gráfico con un size adecuado... Pero es una cochinada :-\
Con el nuevo scale_resolution por ahora no se me ocurre nada, lo probaré, y gracias Splinter :P
Quote from: Windgate on August 19, 2009, 01:23:51 PM
Con el nuevo scale_resolution por ahora no se me ocurre nada, lo probaré, y gracias Splinter :P
Te dare algunas ideas...
que tal si tienes tu juego hecho en 1280x1024 y lo quieres correr en una gp2x wiz, o en una dingoo o en una xbox, o en algun otro aparatejo que no te deje llegar a esa definicion? simple, seteas set_resolution y ya tu juego funcionara, asi de simple... y no tienes que andar perdiendo tiempo ni matandote en modificar toda la logica del programa para cuadrarlo a la resolucion del hard a portar.
Ahora, no hay duda de que es tirar recursos, pero en muchos casos merecerá la pena. Por ejemplo, algunos de mis juegos están en 1024x768, pero el Acer Aspire One que tengo sólo soporta 1024x600. ¿Solución? Esta :)
Otro: PiX Pang - 800x600 -> 640x480 y a correr en la Wii :D
Je, no conseguí hacer funcionar un juego de 800x600 en GP2X, pese a que usa el reescalado automático de UFenix (no se si es HW o SW)... Incluso me da problemas con otro porque me falta memoria y voy a tener que rehacerlo reescalando los gráficos. Menos mal que construí en un par de horas un programilla que me abre los FPG de una lista y me crea otros nuevos al escalado que le indique, aunque claro, usa el size de Fenix/Bennu, que es uno básico sin filtrados ni los escalados que comentaba splinter.
Lo cierto es que es una de esas funcionalidades que todos los novatos agradecen y que puede ser util segun los requisitos y la máquina, pero que los más experimentados acaban por no usar.
Quote from: Drumpi on August 19, 2009, 05:04:36 PM
Je, no conseguí hacer funcionar un juego de 800x600 en GP2X, pese a que usa el reescalado automático de UFenix (no se si es HW o SW)... Incluso me da problemas con otro porque me falta memoria y voy a tener que rehacerlo reescalando los gráficos. Menos mal que construí en un par de horas un programilla que me abre los FPG de una lista y me crea otros nuevos al escalado que le indique, aunque claro, usa el size de Fenix/Bennu, que es uno básico sin filtrados ni los escalados que comentaba splinter.
Lo cierto es que es una de esas funcionalidades que todos los novatos agradecen y que puede ser util segun los requisitos y la máquina, pero que los más experimentados acaban por no usar.
No se con que escalado basico de fenix/bennu probaste eso, porque esto que nombre es nuevo... todavia no libere ningun binario...
No vas a tener que rehacer tu juego, va a correr sin cambios (salvo los del teclado).
No, si digo que en Fenix y UFenix de GP2X puedo hacer un juego de 800x600 y, sin cambiar nada, este se ajusta a la pantalla de la consola (que recordemos que tiene una resolución fija de 320x240).
La GP2X tiene un HW de escalado (que Puck añadió para esto en concreto en su port), por lo que dicha operación no consume nada de CPU, y se pueden hacer el juego del tamaño que se quiera (sólo probado con resoluciones mayores que la pantalla), pero claro, si un juego de 320x240 ya requiere optimización, meterle un renderizado de 800x600...
Lo digo porque probé, por accidente, mi motor a dicha resolución y el framerate cayó por los suelos (de 50 fps a 320x240, a 12 fps siendo generosos). No es lo mismo (320/32)*(240/32)*2 procesos que (800/32)*(600/32)*2.
ya te dire como funciona en las consolitas...
ya probe la version en la wiz, cero problemas de velocidad... se ve impecable... probe el pacman, que volvi a restaurar a su resolucion original...
esto va a ser genial para el apagame, que estabamos cambiando resoluciones para ajustarlo a 640x480 para wii y no veas que chungo es reajustar todo :D. Por cierto, el proyecto lo tengo olvidadísimo, a ver si despues de verano le meto un cambio :D.
bueno, no todo es color de rosas... pase el galaxian... y ahi como hay scroll, el rendimiento no es tan bueno.
EDIT: Con un frame_skip 3, va de lujo... supongo que con 1 o 2, tambien va bien... tendria que probarlo...
version RC8 (r101) disponible http://betatester.bennugd.org/snapshot/
Pregunta tonta: ¿los DCB son compatibles con versiones anteriores? es decir, si no se usan las novedades, claro.
Es que aun tengo en la cabeza los problemas de compilar Fenix y de que tal no es un DCB compatible cuando uno es el 0.xxa y el otro el 0.xxb.
Estaría bien saber cuando llega la hora de cambiar de versión, cuando hay que recompilar viejos códigos para que vuelvan a funcionar...
Hablando de esto ¿donde está SandMan? Hace tiempo que no le veo, le dejé un mensaje en el subforo inglés, a ver si puede hacer el port para GP2X de la versión actual, ya que él tiene experiencia, sabe más que yo...
Sandman es como un fantasma.... de vez en cuando (ahora, en particular) aparece en la lista de usuarios que están leyendo el foro, pero permanece silencioso...
VA DE CINE! :D
Quote from: Drumpi on August 21, 2009, 02:31:48 AM
Pregunta tonta: ¿los DCB son compatibles con versiones anteriores? es decir, si no se usan las novedades, claro.
Es que aun tengo en la cabeza los problemas de compilar Fenix y de que tal no es un DCB compatible cuando uno es el 0.xxa y el otro el 0.xxb.
Estaría bien saber cuando llega la hora de cambiar de versión, cuando hay que recompilar viejos códigos para que vuelvan a funcionar...
Hablando de esto ¿donde está SandMan? Hace tiempo que no le veo, le dejé un mensaje en el subforo inglés, a ver si puede hacer el port para GP2X de la versión actual, ya que él tiene experiencia, sabe más que yo...
creo que en este caso, por incluir una nueva global, hay que recompilar el dcb... no estoy seguro... tengo que revisar...
Drumpi, he intentado compilar bennu para gp2x, por toda la información recopilada acerca de wiz y gp2x y por la forma de crear los entornos de desarrollo de ambas plataformas (en el caso del devkit y open2x misma configuración), juraría que son 100% compatibles en binarios, así que mi opinión es que pruebes a ejecutar la versión wiz de splinter.
Quote from: DCelso on August 21, 2009, 12:10:13 PM
Drumpi, he intentado compilar bennu para gp2x, por toda la información recopilada acerca de wiz y gp2x y por la forma de crear los entornos de desarrollo de ambas plataformas (en el caso del devkit y open2x misma configuración), juraría que son 100% compatibles en binarios, así que mi opinión es que pruebes a ejecutar la versión wiz de splinter.
Yo he intentado a la inversa... o sea, correr cosas gp2x en la wiz, y no va... pero claro, posiblemente sea porque usan particularidades de la consola... habria que probar con algo generico, y bennu es ideal para eso...
Mmm, puedo probar, pero juraría que hay cambios de ciertas librerías a la hora de compilar y no sirven, no se, mañana lo miro.
Pero estoy más interesado en saber cómo hacer funcionar los entornos: tengo el oficial con dev-c++, pero Splinter usa los makefiles para compilar y no se cómo se hace eso con el Dev-c++, luego tengo otro con una cosa llamada minsys y un porrón de carpetas que, supuestamente, debo añadir al PATH de windows para compilar... ahora se, pero en su día usaba una opción de make que cambiaba de directorio previamente a la compilación y saqué un ejemplo de SDL... pero había un problema con el resto o no se.
Y el del Open2X jamás lo encontré, su web es un labreinto y no he visto ni los ejecutables del entorno, ni del IDE ni na de na. Estoy harto de pedir ayuda, sobre todo en gp32spain, pero parece que allí todo el mundo sabe y no le dicen nada a los novatos, así que...
Y me interesa tenerlo funcionando, porque luego quiero basarme en la librería de scroll para montar otra de tiles y, si puedo, meter la VSE de una vez. Se que no es una librería tan seria como la Bennu3D, pero me sirve para lo que quiero hacer (proyecto nº 7 de la pila, lleva como tres años sin bajar de ese puesto, por lo que debo tener interés en él).
pero la VSE funcionaba mal...
Mmmm, mal no. Se que en la version 084 se hicieron cambios en la estructura interna de los mapas (que aun ignoro por qué) y el código ya no servía porque usaba la antigua.
Aparte de eso, había un problema de división por cero al usar la función VSE_Target con determinados ángulos, pero localicé la linea del fallo (y lo comenté en el foro de Fenix)... lo que no se es qué valor ponerle en ese caso porque no conozco el funcionamiento del código en si.
Y bueno, también está la cosita del auto-escalado de los sprites 2D según la distancia a la cámara, que no está bien calibrado, pero podrían ser sustituibles por los "sprites 3D" que se añadieron en la última versión (el efecto con el que se hace el cubo rotatorio en la demo).
Ahora, que si alguien se quiere hacer cargo de hacer una nueva que haga lo mismo, oye... yo quiero hacer ese plataformas pseudo3D que empecé para aprender a manejar la librería.
Splinter, mira a ver si he pillado lo del scale_resolution:
http://www.bennugd.org/?q=node/27
También, si alguien me pone un par de screenshots con el mismo código funcionando con y sin el efecto para la noticia, se lo agradezco, que ahora no tengo mucho tiempo libre para probar.
nueva version disponible que corrige el contador de fps que no se mostraba correctamente... lo mismo para el speed_gauge...
Acabo de tener un problemilla: Necesito una CONST donde poner el máximo valor float para el lenguaje (Bennu xD).
He comprobado que MAX_INT existe, pero en function_list.txt no aparece... También he comprobado que MAX_FLOAT no existe.
¿Alguien sabe decirme cuál es el máximo valor float en Bennu? Una precisión de +/- 20% me es suficiente, no quiero arriesgarme a excederme y tener overflow ni quedarme demasiado corto y que el algoritmo que estoy escribiendo funcione mal :P
PD: Hago esta pregunta en este hilo porque es el más relevante donde se ha hablado de MAX_INT
Hello :)
Habría que modificar una cosa.
Al poner
scale_resolution=06400480;
y hacer
set_mode(1280,1024,16);
sobre un monitor que sólo soporta hasta 1024x768, el juego se sale. ¿Esto tiene solución?
no se si sera eso... es raro eso...
RC9 r105... disponible...
fix en fps como anuncie hace unos cuantos dias
fix en posicion del mouse, cuando se usea scale_resolution
agradeceria si pueden postear la noticia en todos lados...
Gracias, ya he actualizado los enlaces de la página de descargas.
Bajando nueva RC, gracias Juan! ;)
nuevo parche que corrige el tema de nombres de parametros llamados igual a constantes...
Genial, gracias :)
gracias
:) Gracias
Parcheado, gracias por tu labor.
avances al dia de hoy...
------------------------------------------------------------------------
r110 | SplinterGU | 2009-10-14 23:30:25 -0300 (mié 14 de oct de 2009) | 11 lines
- Add more modifier to shift_status:
STAT_RCTRL 0x0000010
STAT_LCTRL 0x0000020
STAT_RALT 0x0000040
STAT_LALT 0x0000080
STAT_NUM 0x0000100
STAT_CAPS 0x0000200
STAT_SHIFT 0x0000400
------------------------------------------------------------------------
r109 | SplinterGU | 2009-10-14 20:44:00 -0300 (mié 14 de oct de 2009) | 2 lines
- scale_resolutions now works in any resolution
------------------------------------------------------------------------
r108 | SplinterGU | 2009-10-07 22:16:14 -0300 (mié 07 de oct de 2009) | 2 lines
- Fix on arrays chars
------------------------------------------------------------------------
r107 | SplinterGU | 2009-10-06 09:11:00 -0300 (mar 06 de oct de 2009) | 2 lines
- scale speed up
Oh, ¿Esos "modifier to shift status" son GLOBAL que indican el estado de pulsación de esas teclitas o cómo se usan? Creo que fue en base a un hilo propuesto por uno de mis alumnos, si es que se les ocurren cosas que a mí no se me ocurrirían en la vida :P
Qué Bien ;D
Karmón que te ganaste
Genial, pal ppa que se va.
Bien bien, esto avanza. Pero hay muchas versiones 1.0.
Splinter, esto no soluciona el problema de write_in_map en 32 bits que detectó sandman cuando hizo el mod_ttf ¿no?
http://forum.bennugd.org/index.php?topic=837.msg12061#msg12061
Gracias Aladdin Splinter :)
Mis deseos se convierten siempre en realidad, grande genio me pille! :)
Que es exactamente lo de scale speed up? Optimización de scale_resoultion? O de size, size_x y size_y?
Toda optimización me parece cojonudisima, es solo curiosidad ;)
Quote from: La momia que fuma on October 15, 2009, 06:44:35 PM
Que es exactamente lo de scale speed up? Optimización de scale_resoultion? O de size, size_x y size_y?
Toda optimización me parece cojonudisima, es solo curiosidad ;)
scale_resolution
Quote from: DCelso on October 15, 2009, 02:40:54 PM
Splinter, esto no soluciona el problema de write_in_map en 32 bits que detectó sandman cuando hizo el mod_ttf ¿no?
http://forum.bennugd.org/index.php?topic=837.msg12061#msg12061
ni idea de ese problema... no lo lei... que era?
Básicamente es que al hacer un write_in_map en modo 32 bits no escribe bien los colores.
set_mode(320,240,32);
f = ttf_loadx("C:\Windows\fonts\vladimir.ttf",40,32,rgba(255,255,255,255),rgba(255,255,255,0),0);
map_clear(0,0,rgb(0,255,0));
drawing_map(0,graph);
drawing_color(rgb(255,0,0));
draw_box(100,100,200,200); // Borramos con rojo el grafico
graph = write_in_map(f,"HELLO WORLD",0); // escribimos hello world en blanco
ya hable con sandman... la cosa es que cuando dibujas sobre un grafico de 32 bits, el alpha de los pixels dibujados es 255... y eso tiene que ser asi... la conclusion que llegamos es que necesitamos tener un flag para poder modificar ese comportamiento... (pero no lo hare ahora)
una solucion es poner text_flags = B_NOCOLORKEY; pero justo con el font que sandman esta probando da problemas ya que cada caracter si pisa sobre el anterior, entonces se corta parte del grafico... pero en un font normal (no italico) o italico con un espaciado mas amplio funcionaria correctamente.
el por que de alpha a 255 en el mapa destino tiene un porque... y es algo un poco largo de explicar...
Me ocurrió algo relacionado en un juego que hice... Todavía no lo había comentado pero quizás sea ahora el momento:
En ese juego disparaba a un objeto con una ametralladora y quería que el objeto se agujerease con las balas (Agujeros transparentes). Para ello hice un map_block_copy y no conseguí poder dibujar un círculo con su alpha correcto para los bordes... Así que terminé dibujando cuadrados negros que trabajando en 16 bits hacían la vez de alpha.
Pero me quedé con las ganas de poder hacerlo en 32, los agujeritos totalmente redondos hubiesen sido muy graciosos.
Me alegro que esté en la lista de tareas pendientes Splinter. Esperaremos con paciencia :D
Splinter porfa la snapshot de la r107 que me prometiste :) Que quiero programar en Bennu todo el Sabado.
Con las DLL de la última RC me dejaron de funcionar los juegos en 3D... No sé qué pasó, si sale nueva RC sustituyo DLLs a ver qué es... Ya lo reporté con captura del error pero nadie me dijo nada al respecto :'(
subida rc10 revision 110...
por favor, "difundid la palabra..." :D
PD:
les debo el instalador windows, solo esta el rar... lo siento, pero el ultimo upgrade de mingw32 para linux esta cagado... no entiendo por que meten mano y hacen cagadas que no arreglan en varias versiones de mingw que estan saliendo en el toolchains de linux...
Quote from: Windgate on October 16, 2009, 08:26:42 PM
En ese juego disparaba a un objeto con una ametralladora y quería que el objeto se agujerease con las balas (Agujeros transparentes). Para ello hice un map_block_copy y no conseguí poder dibujar un círculo con su alpha correcto para los bordes... Así que terminé dibujando cuadrados negros que trabajando en 16 bits hacían la vez de alpha.
Para eso lo que puedes hacer es (a ver si me doy explicado bien), tener un gráfico aparte con el agujero, irlo recorriendo con map_get_pixel, y donde encuentres el color que le hayas puesto al agujero, meter un pixel transparente en el gráfico a agujerear con map_put_pixel teniendo en cuenta la referencia que acabas de obtener en el gráfico del agujero y en que coordenadas del gráfico vas a meter el
bujeroUsé el truco este hace mucho (DIV1) para un remake que había hecho del mitico gorilla del Qbasic (http://www.pixfans.com/wp-content/uploads/2008/12/gorilla-bas.gif), que causaba furor por aquel entonces en las clases de informática de mi instituto XD
Sin embargo este método sería demasiado lento para cumplir mi viejo anhelo de meter en un juego la siempre encantadoramente hortera
cortinilla de estrellas (vease el capitulo de los simpson en el que la palma la mujer de Flanders) para cambiar de escena XD
¿Y que tal las funciones draw? permiten pintar en color transparente, y no se si en modo 32 bits o con alguna variable incluso con alphas distintas.
También es verdad, mucho mejor que lo que decía yo, aunque sigue siendo complicado hacer una cortinilla de estrellas XD
el problema es que actualmente si uno dibuja sobre un grafico de 32 bits, el alpha del grafico destino es 255... a menos que usemos b_nocolorkey... pero al hacer eso, las areas negras se copian...
Ya, pero pensaba que como el color es rgbA ya se incluía el valor del alpha para cada pixel en el destino.
Y la cortinilla de estrellas, es posible hacerla con las lineas, sólo debes definir a cada frame la posición de los 10 vértices y dibujar las lineas correspondientes (aunque creo que dejan algunos huecos por los redondeos).
Ok, probaré lo que dices Momia a ver qué tal queda, me dolió no poder dejar el juego terminado como quería :'(
Los problemas que estamos hablando con los 32 bits supongo que serán a causa de que todavía no hemos testeado a fondo los videojuegos con esta profundidad de color. Imagino que a base de darles caña y reportar posibles fallos se irán arreglando, al fin y al cabo sólo es añadir A a las ya existentes R G y B... Con los flags que comentaba Splinter para transparencia aditiva, sustractiva y esas cosas que tiene el color se debería poder hacer "cualquier" cosa.
Drumpi, el trazado de líneas no tiene "suavizado" (No tiene alpha, vamos) y cuando lo probé en mi visor 3D para el wireframe sí que salía algún hueco.
¿Hay algo pensado para primitivas de dibujo en 32 bits? Simple curiosidad, hay otras cosas más importantes ;)
No, no tiene suavizado, pero cada color en 32bits si que lo tiene, ya que se usan 8 para la componente roja, 8 para la verde, 8 para la azul y 8 para el ALPHA, por lo que un color hFFFFFFF0 debería ser un color blanco con transparecia al 50%
las primitivas graficas de 32 bits estan soportadas
las primitivas graficas de 32 bits estan soportadas
Sí, eso ya me imaginaba, que es posible dibujar una línea con cierto alpha, de hecho lo probé con mi visor 3D.
Lo que quería saber es si era posible trazar la línea con suavizado, de forma que las diagonales no muestren "escalones", para ello la línea añade algunos píxeles con transparencia extra en los "escalones" y da mayor sensación de diagonal.
¿Eso no está, verdad? Tampoco lo hecho en falta, es por curiosidad y por conocer bien lo que hay y lo que no hay.
no, podes modificar el alpha como ya probaste, pero no con suavizado...
eso implicaria que la linea realmente sea mas grande que 1 pixel... lo que podes hacer es trazar varias lineas con diferentes alfas y con algun pixel de diferencia... y finalmente trazar la linea final sin el alfa...
Ok Splinter gracias por la aclaración. Aquí dejo el detalle del efecto de línea con suavizado, a 1 píxel en negro puro, sin alpha, por si a alguien le diese por implementar el algoritmo en un futuro, fijaros que ni un sólo pixel queda totalmente negro realmente xD
(http://trinit.es/images/linea_alpha.png)
Por supuesto sin zoom la línea queda estupendamente, no se ve ni un pixel.
he incluido nuevos productos en el svn de autoria propia con licencia LGPL... y he actualizado el componente loadlib a LGPL... ire haciendo lo propio con los modulos de mi autoria... y si en el futuro puedo pasar todo a LGPL, asi lo hare.
saludos...
Por lo que leo: http://es.wikipedia.org/wiki/GNU_Lesser_General_Public_License
Con ello Bennu es todavía más libre... No puede ser más libre diría yo... Karma++ SplinterGU, ¿Sabes que vas a ir al cielo quieras o no? ;)
je, gracias... todavia no estan todos los modulos, hay que estudiar bien, cuanto tienen de fenix aun... y si se llegara a conseguir que todos los que participaron en Fenix (o por lo menos los principales) autoricen a cambiar la licencia a LGPL entonces seria fantastico y se cambiaria...
He accedido al Centro de Software de Ubuntu, el "gestor de paquetes" de la nueva 9.10, he buscado Bennu para ver si había algo pero veo que no... En el tema de Linux ya sabéis que apenas llevo 1 año y eso es "nada", ¿Habría alguna forma de hacer que el paquete de Bennu fuese un paquete instalable desde ese menú?
Por tema de hostearlo supongo que no hay problema, bennugd tiene su hosting y algunos más podríamos aportar, ¿Qué clase de impedimentos hay? Por curiosidad :P
http://forum.bennugd.org/index.php?topic=496.0
Gracias DCelso... Ahora creo recordar que mire ese hilo tiempo ha, voy a verlo de nuevo porque tengo memoria de pez :P
Me estaba haciendo una preguntilla:
Sobre el map_block_copy:
Seria posible crear un mapa 'virtual' que no ocupará memória à diferencia de crear uno cargando un mapa vacio, el cual si va ocupar memória ?
Lo pregunto sobretodo por temas de rendimiento, ya que el mapa seria para pintarlo utilizando el map_block_copy, y lo ideal es que la memória que este ocupa fuera sólo la memória ocupada por los gráficos utilizados en el map_block_copy (y sus punteros) y creo que la memória del mapa inicial para poder utilizar el map_block_copy sobrária....
Vamos, resumiendo, actualmente este mapa se carga al principio de la fase para poder pintar los tiles sobre el, pero creo que la memória de este mapa en sí sobraria, ya que sólo sirve para servir de referencia a los tiles pintados con map_block_copy...
a lo mejor existe otra alternativa para hacer esto sin usar un mapa de base ...
No se se me entendeis...
No comprendo, un mapa virtual seguiría ocupando memoria, ¿Dónde iba a estar si no?
Claro es que le llamo virtual para decir un mapa null.
Vamos lo ideal seria que el map_block_copy puediera copiar sobre una region nula (o mapa nulo que es lo mismo), sin tener aparte de la memória del tile, la memória del mapa vacio (ya que me imagino que los otros tiles iguales apuntarian a la memoria del primero y no ocuparian espacio).
O sea, que el map_block_copy pudiera poner ese tile en las coordenadas x,y pero sin necesidad de basarse en un mapa destino, y al final tendriamos un mapa completo pero compuesto sólo por la memória de los tiles.
Porque me imagino que al usar un mapa + tiles, vas a tener aparte de la memoria de mapa que cargaste al inicio, la memoria de los tiles usados en el. Si este ultimo no es así pues el problema ya estaria resuelto ;)
Por otro lado, creo que no ocupa lo mismo un mapa con X,Y dimensión pintado de negro, que el mismo mapa lleno de colores.
Pues yo sigo sin enterarme de lo que quieres decir, la verdad...
Creo que map_block_copy coge los datos del mapa origen y los pega en el destino, sin usar memoria intermedia, porque no vas a descargar el mapa origen durante la operación. Si lo que quieres es tener una copia en memoria tienes map_clone, y si quieres guardar un trozo creas un nuevo mapa del tamaño que quieras y haces el map_block_copy sobre este.
Pero un mapa con dimensión (x,y) pintado de negro ocupará lo mismo que el mismo mapa lleno de colores, porque el propio negro es un color (aunque hablemos de negro, transparente o vacío, el 0 ocupa una posición de memoria). Lo que dices sería cierto si se usase algún tipo de compresión en memoria, pero no es así.
Yo tampoco entiendo del todo la sugerencia, pero FreeYourMind, créeme que he estado investigando map_block_copy y me interesan mucho las posibles mejoras sobre esta función, especialmente en 32 bits.
Entiendo que propones una mejora de eficiencia, pero no comprendo qué propósito tiene ese mapa virtual... ¿Para qué caso o casos en concreto ahorraría memoria?
Por tu último comentario me parece que te refieres a hacer un map_block_copy sobre un mapa "vacío", para componerlo completamente desde 0. Por ejemplo con mí módulo "Dialog Boxes" hacía algo así, la idea de hacerlo desde 0 es interesante pero no la tuve en cuenta, exprésate más a fondo sobre el tema please.
Quote from: FreeYourMind on November 27, 2009, 12:42:42 PM
Claro es que le llamo virtual para decir un mapa null.
Vamos lo ideal seria que el map_block_copy puediera copiar sobre una region nula (o mapa nulo que es lo mismo), sin tener aparte de la memória del tile, la memória del mapa vacio (ya que me imagino que los otros tiles iguales apuntarian a la memoria del primero y no ocuparian espacio).
O sea, que el map_block_copy pudiera poner ese tile en las coordenadas x,y pero sin necesidad de basarse en un mapa destino, y al final tendriamos un mapa completo pero compuesto sólo por la memória de los tiles.
Porque me imagino que al usar un mapa + tiles, vas a tener aparte de la memoria de mapa que cargaste al inicio, la memoria de los tiles usados en el. Si este ultimo no es así pues el problema ya estaria resuelto ;)
Por otro lado, creo que no ocupa lo mismo un mapa con X,Y dimensión pintado de negro, que el mismo mapa lleno de colores.
La idea de un tile no es que si tenes que pintar un tile 10 veces tengas 10 graficos clones... la idea es que uses un solo grafico para cada uno de los tiles...
tiles no necesariamente significa que tengas que usar map_block_copy (puede, pero no es necesario), podes usar procesos tambien...
como sea, en el caso del block_copy, solo copias a un mapa mas grande... pero no por eso vas a consumir mas memoria...
segun leo en el mensaje que queres transmitir es que ademas de hacer el map_block_copy, tenes un grafico unico por cada uso del tile... eso no es necesario... si no es eso lo que quisiste decir, entonces no te entendi...
Buenas. Estoy de vuelta, por fin espero no volver a quedar sin portatil, ya que de una vez quite el maldito disco duro de mi portatil, ahora acabo de estrenar disco duro de 680 gigas, como evolucionan estos trastos :)
Comento lo del map_block_copy, porque cargo 3 mapas para pintar las distintas partes de un nivel (objectos de fondo, objetos de colisiones y objetos frontales que tapan a los personajes), como si fueran 3 en 1. Al hacerlo repito 3 veces el mismo mapa, ya que cada uno va construir su respectiva region o scroll. Lo que pienso es que internamente esta función podria ser más optimizada, no veo sentido que se necesite de principio un mapa para poner tiles en el, tener un mapa sin memória y que al final los tiles al copiarse en realidad se estarian creando regiones de mapas con esos tiles. o sea, se construyerá el mapa con tiles sin tener una base para ponerlos... ya se que hay formas de hacerlo, pero si tuvieramos una función equivalente a la que le pasaramos un mapa destino que no existierá molaria por comodidad.
Es que noto que por ejemplo si no borro este mapa al empezar de nuevo el nivel, al generar de nuevo los tiles (ya que lo hago al empezar el nivel), estos se sobreponen sobre los antiguos del mismo mapa en memoria (y como los antiguos son los mismos en la misma posición), el mapa va tener cada vez mas memoria ya que se va sobrecargar de objetos, aunque siga teniendo la misma dimensión...
Esto tambien me parece un poco raro ya que si estamos poniendo tiles en ese mapa es como si estuvieramos de nuevo pintando en el, y si un mapa ocupa siempre el mismo tamaño tenga el pintado que tenga como decis, el mapa no tendria que aumentar de memoria...
Humm Free ,has probado como te a dicho Splinter ¿crear los tiles por procesos?,mira yo te doy dos opciones.
1- Si no quieres nada de fondo ,usar una estructura que segun valla leyendola te valla colocando los tiles en la posición que quieres ,como map_block_copy,pero con procesos...
2- Si quieres fondo,le pones y haces lo de 1. Una estructura de 1024x1024pixel dividida en tiles de 16x16 te ocupa 16 kb+los graficos de los tiles....
Creo que la forma que estas haciendo para colocar los tiles a base de map_block_copy,es un poco ,y permitemelo decir ^^,estraña....
Te estas armando un lio tu solo:
Si quieres sacar información de un mapa, esa información debes colocarla en alguna parte, no puedes dejarla en el aire, porque ocupa un espacio de memoria si o si, por lo que debes guardarla en un mapa, o en su defecto, en una zona de memoria que hayas reservado con un puntero, pero va a gastar memoria... y entonces es mejor que la tengas en un mapa.
Otra cosa: si pegas información de un mapa en otro, el destio NO AUMENTA SU MEMORIA, sigue con la misma que ocupa siempre (ancho*alto*profundidad_de_color(8/16/32)), sobreescribes información, lo que hubiera antes en esa posición se pierde porque se ha cambiado, no existe la función "deshacer" sobre los mapas.
Ten en cuenta que todo lo que sea copia, requiere una memoria: en el caso de map_block_copy usa el espacio de memoria donde está el mapa origen (si descargas el mapa origen, entonces desaparecen estos datos y no se pueden copiar), si usas map_clone se crea un nuevo mapa con esa info. Hasta el copy/paste que haces en windows ocupa memoria nueva, esa info se almacena en una zona de memoria, y puedes consultarla si usas el "visor del portapapeles" (si sigue existiendo, es una vieja aplicación que traía w95, w98 y creo que w2000)
Otra cosa: si pegas información de un mapa en otro, el destio NO AUMENTA SU MEMORIA, sigue con la misma que ocupa siempre (ancho*alto*profundidad_de_color(8/16/32)), sobreescribes información, lo que hubiera antes en esa posición se pierde porque se ha cambiado, no existe la función "deshacer" sobre los mapas.
Vale, el problema se resume sólo a eso, segun las pruebas parece que esto no ocurre, si se sobrescribe información y se pierde lo que existia en esa posición, porque el juego pierde rendimiento si lo hago ? y porque si hago unload y vuelvo a cargar el mapa antes de volver a poner de nuevo los tiles en el, esto no ocurre ? Alguna cosa de errado hay, porque eso no parece que este funcionando, me gustaria que Splinter revisara justamente eso en map_block_copy, que confirmará que el tile anteriormente pintado en la posición del segundo que lo va a substituir, se pierde (hablando de memoria claro).
eso que dices no tiene sentido como lo dices...
lo que necesitas es no pintar sobre ningun mapa, sino usar 1 proceso para cada tile.
Quote from: FreeYourMind on November 29, 2009, 02:15:52 AM
Otra cosa: si pegas información de un mapa en otro, el destio NO AUMENTA SU MEMORIA, sigue con la misma que ocupa siempre (ancho*alto*profundidad_de_color(8/16/32)), sobreescribes información, lo que hubiera antes en esa posición se pierde porque se ha cambiado, no existe la función "deshacer" sobre los mapas.
Vale, el problema se resume sólo a eso, segun las pruebas parece que esto no ocurre, si se sobrescribe información y se pierde lo que existia en esa posición, porque el juego pierde rendimiento si lo hago ? y porque si hago unload y vuelvo a cargar el mapa antes de volver a poner de nuevo los tiles en el, esto no ocurre ? Alguna cosa de errado hay, porque eso no parece que este funcionando, me gustaria que Splinter revisara justamente eso en map_block_copy, que confirmará que el tile anteriormente pintado en la posición del segundo que lo va a substituir, se pierde (hablando de memoria claro).
WTF!
Quote from: SplinterGU on November 29, 2009, 05:48:42 AM
WTF!
Bueno, en lugar de espanto, estaria bien aclarar si el mapa destino ocuparia la misma memória, haciendo sobre el 10 map_block_copy
que 10000.
Free, no debería haber aumento de memoria en el mapa, hagas 10, 1000 o 100000000000000 map_block_copy, porque map_block_copy es como map_put_pixel pero con varios pixels a la vez. Una cosa es que los comandos PUT y familia (entre ellos map_block_copy) sean comando "lentos" (la gp2x no puede "refrescar" una pantalla de 320x240 a 30fps) y otra cosa es que se ralenticen.
Si haces unload del mapa, lógicamente se pierden los cambios porque no los has guardado, al hacer load cargas el que tenías en el disco, sin cambios. Si quieres que se guarden, debes hacerlo en el disco, no sólo en la memoria.
Me parece que no tienes claro el concepto de memoria.
Hombre, la culpa ha sido mia no expresarme bien, si que tengo el concepto, si creeme :)
Lo que ocurre es que yo pongo los tiles en el mapa al empezar la fase, con lo cual no tendria que hacer un unload_map antes, ya que si voy a volver a poner los mismos tiles en el al repetir la fase, la logica es que como vuelve a pintar el mismo mapa con los mismos tiles, no habria ningun cambio en la memoria.
Pero con las pruebas que hice (y claro esto sólo se puede observar en la Wiz), si no descargo antes el mapa al repetir la fase, la memoria se va incrementando (sea o no la del mapa en concreto, esto se me escapa, pero no cargo más ningun recurso en ese instante) hasta el punto que quedaba lento y petaba por memoria.
Otra cosa que ocurria y que arregle en parte, es que en ciertos puntos de algunos mapas el fps caia en picado haste el 0,1 fps, y lo curisoso es que salia al menu, y como tengo un let_me_alone tendria que recuperar su fps normal.
Esto no ocurria (dandole tiempo para hacerlo claro), y me entero que tambien es por problemas de memoria, ya que lo que hice fue descargar tambien el mapa al entrar al menu y no sólo al repetir fase.
Esto me soluciono lo del fps al salir de una fase que ocurra la caida brusca :) (lo bueno es que si descargas un mapa que no existe Bennu no peta, al reves de lo que ocurria con las musicas, pero vamos esto tampoco importa mucho, es ponerle la condicion is null y listo).
Así que con esto se conprueba que ni siempre los errores tienen origen en lo mismo, la caida del fps y su recuperación siempre esta asociada al numero de procesos y rendimiento en determinado punto, pero tambien tiene origen en la memória que en ese punto se consume...
Sobre lo del unload, es buena tu observación, pero me imagino que cuando haces unload de un mapa cargado este será sobre el mapa que ya ha sido modificado en ejecución, o sea, con los cambios que tuvo en la Ram.
Ha y se me olvidaba. Sobre el tema tambien tengo una muy buena pregunta:
Como sabes ahora se permite, tal como en DIV, poner un tile sobre el mapa destino en regiones negativas (fuera del mapa destino), la pregunta es, las partes que quedan fuera (regiones del tile que no coincidan con el area del mapa destino) tambien se pintan o desaparecen ??
Es que estas partes si se pintan pues tambien ocuparan memória, o sea, si estan ahí, no vas a tener sólo la memória que ocupe el mapa destino, ya que el resultado va ser una region mayor...
Quote from: Drumpi on November 29, 2009, 02:12:41 PM
Free, no debería haber aumento de memoria en el mapa, hagas 10, 1000 o 100000000000000 map_block_copy, porque map_block_copy es como map_put_pixel pero con varios pixels a la vez. Una cosa es que los comandos PUT y familia (entre ellos map_block_copy) sean comando "lentos" (la gp2x no puede "refrescar" una pantalla de 320x240 a 30fps) y otra cosa es que se ralenticen.
Si haces unload del mapa, lógicamente se pierden los cambios porque no los has guardado, al hacer load cargas el que tenías en el disco, sin cambios. Si quieres que se guarden, debes hacerlo en el disco, no sólo en la memoria.
Me parece que no tienes claro el concepto de memoria.
esto es correcto...
Free, lo que dices no es asi, si lo piensas y haces las cosas correctamente, no hay forma de que pase lo que dices... el map_block_copy (ya lo dije en su momento) no escribe mas alla de los limites del mapa destino, no crea ningun mapa nuevo ni lo agranda ni lo achica... seria ilogico si hace eso. Entonces, si yo tengo un escritorio con 10 cajones que solo entra un objeto en cada cajon, si yo hago un copy a ese cajon de otro objeto (reemplazando el que tenia previamente) cómo eso va a ser que mi escritorio tenga mas cajones? imposible. Por eso el "WTF!"
Desaparecen, ya te lo habia explicado, se ve que no lo hice bien. Es completamente ilogico que queden.
Ahora, si creas el mapa destino muchas veces o cargas constantemente los tiles y no los desacargas, o haces clone y no haces unload de esos mapas, entonces seguramente te va a consumir mas memoria cada vez. Revisa tu codigo, quizas tienes algo de eso...
Ok, esta todo aclarado, entonces el cambio que hiciste en la rc112, para poder poner tiles que tienen parte de su gráfico fuera del mapa destino, se 'limpian' automaticamente y sólo queda en memoria la parte visible que pertenece a la region del mapa destino ???
No se si te acuerdas, pero DCelso te puso unas pantallas que aclaraban esto, y en ellas y segun el cambio que hiciste, ya se podian pintar tiles fuera de la region destino (como en DIV), o sea, tiles que parte de su cuerpo salian fuera del mapa destino.
Por otro lado lado me parece un poco raro que con el cambio que hiciste en la rc112, no ponga nada fuera del mapa destino, ya que yo por ejemplo pongo un tile (que creo que esta fuera del mapa destino, x<0) que sirve como pared invisible, que no deja que el prota pase de x < 0 del mapa destino, y esta pared ya se encuentra fuera del mapa visible pero tiene que estar ahí ya que el prota colisiona con ella.
De momento esta todo OK, esto fue a titulo de reflexión/dudas, para mi el map_block_copy no necesita ningun cambio, ni necesito buscar otra solución de momento, ya que en principio y segun mis ultimas pruebas ya no voy a tener más problemas de rendimiento en la Wiz, ya que en el juego final no vas a tener vida infinita como en mis pruebas :) Es que esto me permite pasar por varios enemigos y matar varios a la vez, encima que tenia el tiro en automatico (tirando mogollon de tiros al mismo tiempo) pero en la version final el jugador no llega a este estremo ya que va a morrir antes, con suerte luchará con 2 enemigos al mismo tiempo, heheheh, así que en rendimiento no va poder caer tan en picado :)
a ver... nunca se copio mas alla del espacio que existe... antes directamente no se copiaba nada... si eran negativas las coords...
nooo! nunca se pintan tiles fuera de la region, ni en bennu ni en DIV...
que dificil es explicar algo muy basico... si yo tengo una bolsa (mapa destino) que entra 1kg de pan... por mas que yo tenga 10kg de pan para ponerle... en la bolsa solo entra 1kg de pan... el resto no entra, entonces no se pone...
creo que aun no logro que entiendas el concepto.
Por favor, alguien que me de una mano a explicar la cosa de forma mas simple...
Si te entiendo, no te preocupes. Grácias por la paciencia de santo.
Lo del map_block_copy es muy sencillo:
Imagina que en una pared cuelgas un papel grande, ahora trazas una linea enorme y esta se sale del papel y pintas la pared (es lo que sucede cuando tu mapa pinta fuera del mapa, cuando se sale), pues bien, si retiras el papel de la pared, sólo verás la linea que ha quedado dentro, lo que has pintado en la pared no aparece y el papel no se ha hecho más grande para abarcarlo. En el mapa destino pasa lo mismo, sólo almacena los datos del papel, lo que pase en la pared se pierde, como si nunca hubiera existido.
Y no, eso que se sale del mapa no ocupa memoria extra, simplemente no se dibuja en ningún sitio, en ese aspecto la brocha es "inteligente" y no mancha nada fuera del papel.
si, con la salvedad que en bennu, cuando se va a pintar mas alla de los limites del papel, directamente no se pinta... no se hace el trabajo de pintarlo...
pero si, esa es la idea, gracias.
Mira Free eso lo puedes ver bien en mi editor,que como tiene Scroll ciclico,si te pasas con el scroll el tamaño que has selecionado veras que no puedes pintar,y otra prueba que tambien puedes hacer es pintar un tile por ejemplo de 32x32 en el limite y veras que "SOLO"se pinta el cacho que entre en tu mapa y el resto no se pinta ^^,ahi lo puedes comprobar perfectamente ^^...
Grácias compis. Sobre funcionamiento y como debe funcionar nunca tuve dudas, otra cosa era saber si realmente lo hacia de esa forma ;)
Con vuestras palabras ya me fio, no tengo que probarlo, es suficiente ;D
nuevas correcciones:
- Tablas de calculos trigonometricos se calculan ahora al cargar el modulo mod_grproc y no al momento de usar las funciones, esto corrige la pausa en el juego galaxian cuando la primera nave entraba en rotacion
- Se reemplaza la des-4.04b por la libssl (openssl)
- la carpeta vendor ahora se llama 3rdparty
- los fuentes crypt.* ahora se llaman b_crypt.* para evitar conflictos con los del SO
- la libreria de log se agregar comando para controlar nivel de log (aun no se usa esta lib en el proyecto)
- revision del modulo de sonido, y se agregan 2 nuevas funciones SOUND_INIT y SOUND_CLOSE, sirven para resetear el sistema de sonido y poder modificar cosas como cantidad de canales, frecuencia y otras cosas.
Genial, gracias :)
Me pongo a empaquetar.
Venga, un pequeño comentario: al enlazar contra libssl me da un error de dependencias, tengo que enlazar contra libcrypto, que también viene del paquete libssd-dev. (En Ubuntu libssl.so depende de libcrypto.so).
Lo que he hecho es cambiar el configure.in para enlazar contra libcrypto, no sé si te parece bien.
Bueno, el bennugd-core ya se ha compilado en el servidor y pronto se copiará a los servidores de actualizaciones y los módulos empezarán en unos 20 minutillos a compilar, así que si todo va bien, en un ratito le dais a actualizar y listo.
lo raro es que a mi no me dio esos errores y compilo correctamente...
pero me parece bien...
Bueno, ya lo comenté en el otro hilo: si esto funciona, podría resolver los problemas de incompatibilidad entre firms de GP2X.
A Splinter ya le di un karma por el trabajo hecho, ahora le doy otro al Josebita por mantener la versión Linux (ahora tendré que pillar un rato de desconexión para actualizar :D :D :D).
;D ;D ;D, Jejejeje, o sea que mi Galaxian ha provocado el cambio y revision de los calculos trigonometricos, no se si sentirme orgulloso o sentirme lapidado por SplinterGU.
la cosa es que la tabla de cosenos y senos se calculaba cuando se usaban las funciones de getangle o similares... en pc se caga de la risa, pero en wiz se reciente mucho el uso de flotantes... y se frena un momento cuando el primer marciano cae en ataque...
despues de revisar el galaxian y optimizar un monton de cosas, pero aun asi ver que no mejoraba, sospechaba que el problema estaba ahi, pero cuando lo modifique confirme que ese era el problema...
gracias, un karma...
Gracias Splinter, ni sabía que hubiese una tabla de trigonometría que se inicializaba, un granito de arena más de tantos otros :D
para optimizar calculos luego.
Grandioso que exista algo así, se presupone que la primera utilización de una función trigonométrica supondrá posteriores usos, no es lo habitual cuando empiezas "desde 0", pero un videojuego es un videojuego, y si se usa una... Se usarán también en adelante.
Veo que todos los años de desarrollo tienen su fruto, si es que da "yuyu" pensar en usar otra cosa que no sea Bennu para hacer un videojuego :D
bien, tras un tiempo sin actualizacion, acabo de liberar una nueva version que incluye todos los nuevos fixes, incluido el uso de openssl para la encripcion...
vuelve a funcionar el instalador de win32 (en teoria, deberia decir, lo hice compilar)
ver mi firma para la descarga... version 1.0 RC11(r131)
Permíteme ser el primero en darte el merecido karma por la release :)
No te quejarás, acabo de terminar de programar en bennu por hoy y son las 3 de la noche ;D
Gracias!!
Quote from: SplinterGU on January 20, 2010, 12:47:52 AM
bien, tras un tiempo sin actualizacion, acabo de liberar una nueva version que incluye todos los nuevos fixes, incluido el uso de openssl para la encripcion...
vuelve a funcionar el instalador de win32 (en teoria, deberia decir, lo hice compilar)
ver mi firma para la descarga... version 1.0 RC11(r131)
Que cosas nuevas tiene? fixes arreglados?
:)
hay que revisar en el svn el log desde la ultima release a esta... esos son los cambios...
------------------------------------------------------------------------
r113 | SplinterGU | 2009-11-08 15:09:38 -0300 (dom 08 de nov de 2009) | 3 lines
- Fix modvideo_mode_is_ok parameters
- Fix mod_crypt args types
------------------------------------------------------------------------
r114 | SplinterGU | 2009-11-09 14:24:33 -0300 (lun 09 de nov de 2009) | 3 lines
- Add liblog (LGPL)
- Add libdict (LGPL)
------------------------------------------------------------------------
r115 | SplinterGU | 2009-11-09 14:33:47 -0300 (lun 09 de nov de 2009) | 2 lines
- loadlib LGPL upgrade
------------------------------------------------------------------------
r116 | SplinterGU | 2009-11-12 00:41:19 -0300 (jue 12 de nov de 2009) | 2 lines
- Log update
------------------------------------------------------------------------
r117 | SplinterGU | 2009-11-12 21:45:45 -0300 (jue 12 de nov de 2009) | 2 lines
- Log Update
------------------------------------------------------------------------
r118 | SplinterGU | 2009-12-26 19:29:45 -0300 (sáb 26 de dic de 2009) | 2 lines
- Add module_initialize with init_cos_tables in mod_grproc and mod_m7, for speedup
------------------------------------------------------------------------
r119 | SplinterGU | 2009-12-26 21:13:10 -0300 (sáb 26 de dic de 2009) | 3 lines
- Add SOUND_INIT and SOUND_CLOSE for initialize and deinitialize the module
- Remove unusefull variables
------------------------------------------------------------------------
r120 | SplinterGU | 2009-12-29 16:25:47 -0300 (mar 29 de dic de 2009) | 2 lines
- Log level control added
------------------------------------------------------------------------
r121 | SplinterGU | 2009-12-30 18:15:17 -0300 (mié 30 de dic de 2009) | 6 lines
- Rename vendor folder to 3rdparty
- Remove use des-4.04b, and now use openssl
- Update configure/autotools
- rename crypt* to b_crypt*
------------------------------------------------------------------------
r122 | SplinterGU | 2009-12-30 18:23:40 -0300 (mié 30 de dic de 2009) | 5 lines
- Rename vendor folder to 3rdparty
- Remove use des-4.04b, and now use openssl
------------------------------------------------------------------------
r123 | SplinterGU | 2009-12-30 18:26:57 -0300 (mié 30 de dic de 2009) | 3 lines
- Rename vendor folder to 3rdparty
- Remove use des-4.04b, and now use openssl
------------------------------------------------------------------------
r124 | SplinterGU | 2009-12-30 18:47:27 -0300 (mié 30 de dic de 2009) | 2 lines
- Replace libdes to libssl
------------------------------------------------------------------------
r125 | SplinterGU | 2010-01-15 14:52:27 -0300 (vie 15 de ene de 2010) | 2 lines
- Fix some problems with set mouse position on scale_mode
------------------------------------------------------------------------
r126 | SplinterGU | 2010-01-15 19:29:46 -0300 (vie 15 de ene de 2010) | 2 lines
- path_find memory leak fix
------------------------------------------------------------------------
r127 | SplinterGU | 2010-01-17 17:28:55 -0300 (dom 17 de ene de 2010) | 2 lines
- mod_path memory leak patch fix
------------------------------------------------------------------------
r128 | SplinterGU | 2010-01-18 02:50:36 -0300 (lun 18 de ene de 2010) | 2 lines
- Fix libssl on mingw
------------------------------------------------------------------------
r129 | SplinterGU | 2010-01-18 03:02:25 -0300 (lun 18 de ene de 2010) | 2 lines
- libSSL fix
------------------------------------------------------------------------
r130 | SplinterGU | 2010-01-18 03:06:33 -0300 (lun 18 de ene de 2010) | 2 lines
- LibSSL fix mingw
------------------------------------------------------------------------
r131 | SplinterGU | 2010-01-19 18:38:26 -0300 (mar 19 de ene de 2010) | 2 lines
- Win32 libpng fix
------------------------------------------------------------------------
r132 | SplinterGU | 2010-01-19 21:34:43 -0300 (mar 19 de ene de 2010) | 2 lines
- Change ssl by crypto
------------------------------------------------------------------------
gracias por la nueva versión, karma++ splinter :)
Muchas gracias Juan, otro karma y superando ya los 100 ;D
Me uno al K++, el tema del path_find estaba pendiente y me interesaba desde hace tiempo, gracias!
:)
por favor, si hacen pruebas pasenme feedback... gracias...
A mi el instalador de Windows no me funciona, uso Windows XP.
SplinterGU, felicidades por los cambios al bennu, el último punto no lo entiendo, has cambiado ssh por crypto? o que un tal crypto ha sido el que ha hecho el ssh o ..., no me queda claro :D.
Por otro lado ahora la dependencia de libdes no existe no? ahora necesitamos en las demás platarormas una nueva librería dinámica externa de ssh o está dentro de las internas de bennu.
Saludos.,
crypto es parte del openssl, la libssl era la incorrecta para las funciones que uso, deberia haber puesto inicialmente libcrypto, pero me confundi... y linux no chillo...
libdes no va mas... ahora se usa openssl, es una lib estandard... hasta ya la compile en wiz...
ok, thanks for the explanation. ::)
Pero libcrypto ahora será una dependencia externa no?, necesitamos de un libcrypto.dll.
O esta compilado de forma estática como antes estaba libdes.
Y como compilaste libcrypto en wiz? o ya viene.
No tengo claro en wiz aún las dependencias que en linux y windows se hacen con las external libs.
He mirado la distribución de wiz y no he visto ningún "*.so" de las external libs, esto quiere decir que van de forma estática en el bennu de wiz o que vienen ya en el sistema de la wiz o como va la cosa.
las que se necesitan en wiz y no estan incluidas en el SO, van en la misma carpeta que el bgd-runtime... trato de no modificar el sistema operativo.
Pero libcrypto ahora será una dependencia externa no?
Y como compilaste libcrypto en wiz? porque el codigo fuente viene para cc en sus makefiles. Y tampoco veo libcrypto en bdd-runtimes del binario de openwiz r131, por ejemplo.
entonces en wiz esta metida estatica... la compile con make...
no te funciona la version wiz?
No tengo wiz, estoy esperando a pandora :).
Yo lo comentaba por saber para un futuro poder hacer compilaciones cruzadas de bennu.
he probado a compilar el código de openssl usando open2x y no lo he logrado, los makefiles no están muy bien hechos para compilaciones cruzadas.
Resulta que usan el compilador "cc" sin la variable CC, y así las demás.
algo tuve que tocar a mano...
Jolín, hace mucho que no me paso por aquí, y ya estoy totalmente perdido, ja ja ja. ¿Por que versión de bennu vamos ya? yo me quedé en la wip 11 ¿merece la pena que pruebe alguna de las betas no oficiales? ya que he leido en la página oficial que la última versión estable es la 11 ¿ o hay algo que he interpretado mal?
La última versión es la RC11 (Release Candidate). Vamos por la casi1.0.
Bienvenido de nuevo :)
Si, es la RC11, version r131 ;D
Splinter no se atreve aun a dar por definitiva la versión actual, pues aun se van encontrando bugs, cada vez menos.
Por cierto, hace mucho que no se te ve :)
betas no oficiales? y eso?
por otro lado, wip11, es viejisima...
Puede ser que esté equivocado y la r-24 sea más nueva que la wip 11? pues en ese caso, voy por la r-24 ;D
No se, yo en bennugd.org he leido en downloads algo de 11..... a lo mejor me he flipado
muchacho... vamos por la r131... o mas... r24 es viejisima...
Hello. Una pregunta, ¿es normal que pida libcrypto el configure del core?
Se supone que si, ahora que se ha pasado a openssl. Creía haber entendido que era una de las librerías que venían con él ¿o era porque la función de encriptado era nueva?
viene en la openssl
Creo que pregunta que cree que solo sería necesario enlazar con ella el módulo de encriptado y que si el core no hace de uso de ella pues no sería necesar "linkarlo" con esta librería.
Dicho de otra forma, ¿Es necesario el uso de la librería libcrypto de openssl para compilar el core de bennugd?
Quote from: DCelso on February 11, 2010, 02:46:30 PM
Creo que pregunta que cree que solo sería necesario enlazar con ella el módulo de encriptado y que si el core no hace de uso de ella pues no sería necesar "linkarlo" con esta librería.
Dicho de otra forma, ¿Es necesario el uso de la librería libcrypto de openssl para compilar el core de bennugd?
Esa era mi pregunta concreta :)
si, es necesario, puesto que esta pensando para en un futuro tener dcb encriptados.
moola, ¿un futuro próximo?¿Será extensible para archivos de recursos fpg,oggs,etc?
Por otro lado, entonces para que pixel lo compile para el linux de la wii ahora no es necesario, es decir, podemos prescindir del módulo de encriptación y compilar el core sin el libcrypto por ahora para optener una versión de bennugd para wii sin necesidad de compilar libcrypto en wii.
es la idea... pero a nivel compilacion solo dcb encriptados.
no, no se puede prescindir... no me explique bien entonces...
si, es necesario, puesto que esta pensando para en un futuro tener dcb encriptados, e incluido en los apis basicos.
¿Y tiene utilidad encriptar los DCBs? es decir ¿tan sencillo es hacer ingeniería inversa con ellos en proyectos de índole comercial cuyo código debe ser protegido bajo cuatro llaves en el fondo del mar?
Los gráficos, músicas y demás todavía lo entiendo (aunque seamos aficionados, no nos hace gracia que otros se enriquezcan con nuestro trabajo, como ya ha pasado alguna vez), pero los DCB... al menos, muchos de nosotros hasta compartimos código ;D
el dcb puede contener datos sensibles que si bien para tus proyectos no son necesarios, no significa lo mismo para todos los proyectos...
Yo no saco absolutamente nada sin todo el código y recursos abiertos para que cualquiera pueda utilizarlos ;D
Y si se forra alguien me alegraré, pues significa que yo también puedo hacerlo xD
es correcto, pero hay gente que no quiere eso...
Yo, por ejemplo. Me fastidiaría sobremanera que alguien se lucrase de MI trabajo sin ni siquiera pedirme permiso.
O sea, no me importa que se use el código que he subido (por ejemplo, del motor de tiles), los juegos que haga o las aplicaciones, mientras no se cobre por ello. Pero si se va a conseguir algún beneficio, al menos, avisar para llegar a algun acuerdo (o llevarme la parte que me corresponde) ¿no? ;D ;D ;D
primeras pruebas con opengl...
una modificacion muy cutre del core bennu para usar opengl hecho en 15 minutos anoche... me dio en una prueba de un programa que hace rebotar 1000 pelotas en una resolucion de 640x480x32 con graficos de 32x32x32 unos 254fps, cuando la misma prueba en bennu por soft me da unos 48fps...
esta es una rapida version... con cero optimizacion, muy sucia y ejecutando mucho codigo que no deberia ejecutar... solo soporta procesos con graficos sin rotacion ni escalado.. si con alphas... pero bueno, es un adelanto y queria compartirlo con Uds.
Lo ideal, es que despues pongas una variable que permita elegir el modo al principio del programa (aceleración por Software/Hardware).
Incluso puedes ir sacando versiones del mismo modo que lo haces hasta ahora, pero que ni que tenga la parte por Hardware en estado beta, cosa que no implica que puedas seguir sacando Bennu sin que tenga la parte por hardware completa al 100%, y podemos seguir usando la parte por software como hasta ahora...
genial, pero ¿SDL no traía una forma de usar opengl internamente?+
http://www.libsdl.org/opengl/index.php
El primer ejemplo hacel algo como SDL_SetVideoMode(640, 480, 0, SDL_OPENGL)
//
// This code was created by Jeff Molofee '99
// (ported to SDL by Sam Lantinga '2000)
//
// If you've found this code useful, please let me know.
//
// Visit me at www.demonews.com/hosted/nehe
//
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
#if defined(__APPLE__) && defined(__MACH__)
#include <OpenGL/gl.h> // Header File For The OpenGL32 Library
#include <OpenGL/glu.h> // Header File For The GLu32 Library
#else
#include <GL/gl.h> // Header File For The OpenGL32 Library
#include <GL/glu.h> // Header File For The GLu32 Library
#endif
#include "SDL.h"
/* A general OpenGL initialization function. Sets all of the initial parameters. */
void InitGL(int Width, int Height) // We call this right after our OpenGL window is created.
{
glViewport(0, 0, Width, Height);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // This Will Clear The Background Color To Black
glClearDepth(1.0); // Enables Clearing Of The Depth Buffer
glDepthFunc(GL_LESS); // The Type Of Depth Test To Do
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glShadeModel(GL_SMOOTH); // Enables Smooth Color Shading
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); // Reset The Projection Matrix
gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f); // Calculate The Aspect Ratio Of The Window
glMatrixMode(GL_MODELVIEW);
}
/* The main drawing function. */
void DrawGLScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
glLoadIdentity(); // Reset The View
glTranslatef(-1.5f,0.0f,-6.0f); // Move Left 1.5 Units And Into The Screen 6.0
// draw a triangle
glBegin(GL_POLYGON); // start drawing a polygon
glVertex3f( 0.0f, 1.0f, 0.0f); // Top
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glEnd(); // we're done with the polygon
glTranslatef(3.0f,0.0f,0.0f); // Move Right 3 Units
// draw a square (quadrilateral)
glBegin(GL_QUADS); // start drawing a polygon (4 sided)
glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left
glVertex3f( 1.0f, 1.0f, 0.0f); // Top Right
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glEnd(); // done with the polygon
// swap buffers to display, since we're double buffered.
SDL_GL_SwapBuffers();
}
int main(int argc, char **argv)
{
int done;
/* Initialize SDL for video output */
if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());
exit(1);
}
/* Create a 640x480 OpenGL screen */
if ( SDL_SetVideoMode(640, 480, 0, SDL_OPENGL) == NULL ) {
fprintf(stderr, "Unable to create OpenGL screen: %s\n", SDL_GetError());
SDL_Quit();
exit(2);
}
/* Set the title bar in environments that support it */
SDL_WM_SetCaption("Jeff Molofee's GL Code Tutorial ... NeHe '99", NULL);
/* Loop, drawing and checking events */
InitGL(640, 480);
done = 0;
while ( ! done ) {
DrawGLScene();
/* This could go in a separate function */
{ SDL_Event event;
while ( SDL_PollEvent(&event) ) {
if ( event.type == SDL_QUIT ) {
done = 1;
}
if ( event.type == SDL_KEYDOWN ) {
if ( event.key.keysym.sym == SDLK_ESCAPE ) {
done = 1;
}
}
}
}
}
SDL_Quit();
return 1;
}
Un artículo que entra a fondo en SDL y aceleración hardware
http://linuxdevcenter.com/pub/a/linux/2003/08/07/sdl_anim.html
¿Es esto lo que estás haciendo? porque esto supongo que será más facil para empezar.
O por el contrario lo que estas haciendo es eliminar SDL de Bennu, lo que estaría genial y optimizaría el sistema increiblemente.
Si, si, eliminaba el SDL y tu harias los ports multiplataforma :)
Quote from: FreeYourMind on March 18, 2010, 05:26:25 PM
Si, si, eliminaba el SDL y tu harias los ports multiplataforma :)
¿?
Genial, si se le mete aceleración HW, Bennu, en vez de volar, viajaría por el espacio :D
Lo que me llama la atención es que los cambios se hagan en el core de bennu en lugar de en los módulos/librerías que tratan con gráficos y toda la pesca, y así luego poder escoger entre las librerías con SDL y las otras con OGL, sin variables ni nada, a traves de los imports ¿no era ese el objetivo?
Ha dicho que es una primera versión muy preliminar.
Pero si le estás metiendo cosas nuevas, no deberíamos llamar a la rc11 cómo 1. 0 final?
ufff... vamos por partes...
Quote from: FreeYourMind on March 18, 2010, 04:48:17 PM
Lo ideal, es que despues pongas una variable que permita elegir el modo al principio del programa (aceleración por Software/Hardware).
Incluso puedes ir sacando versiones del mismo modo que lo haces hasta ahora, pero que ni que tenga la parte por Hardware en estado beta, cosa que no implica que puedas seguir sacando Bennu sin que tenga la parte por hardware completa al 100%, y podemos seguir usando la parte por software como hasta ahora...
Sera mucho mejor que eso... podras elegir...
Quote from: DCelso on March 18, 2010, 05:13:33 PM
genial, pero ¿SDL no traía una forma de usar opengl internamente?+
http://www.libsdl.org/opengl/index.php
El primer ejemplo hacel algo como SDL_SetVideoMode(640, 480, 0, SDL_OPENGL)
quien dijo que no estaba usando eso? es mas arranque con opengl directo (cosa que no descarto) pero luego use SDL_gl... por otro lado, no es tan transparente como vos decis... solo estoy usando SDL para setear el modo de video y que no me cree una ventana nueva, para hacer el swap del video, y para activar cosas como el vsync... pero nada mas que eso, no uso surfaces SDL ni nada de eso... todo directo... asi que nada...
Quote from: Drumpi on March 18, 2010, 06:35:34 PM
Genial, si se le mete aceleración HW, Bennu, en vez de volar, viajaría por el espacio :D
Lo que me llama la atención es que los cambios se hagan en el core de bennu en lugar de en los módulos/librerías que tratan con gráficos y toda la pesca, y así luego poder escoger entre las librerías con SDL y las otras con OGL, sin variables ni nada, a traves de los imports ¿no era ese el objetivo?
"core" me refiero al core grafico (parte del core que reside en los modulos), creo que eso es mas que obvio, no necesita explicacion... sin embargo no toda la parte de lo que se dice "core" esta residente en el bgdrtm... mucha funcionalidad del core se encuenta en los modulos o librerias y se proveen a traves de callbacks o hooks.
Quote from: josebita on March 18, 2010, 07:20:56 PM
Ha dicho que es una primera versión muy preliminar.
Pero si le estás metiendo cosas nuevas, no deberíamos llamar a la rc11 cómo 1. 0 final?
exacto, es preliminar, aunque mas que premiliar diria experimental, y es otra rama de modulos por ahora... esta lejos de ser version distribuible...
----
a todos... la noticia es que estoy empezando a trabajar en la acceleracion grafica de bennu y que ya es en parte un prototipo funcional, pero no final... yo no dije nada mas... no dije que voy a quitar el swrender... ni tampoco dije que no iba a ser posible elegir entre sw o hardware... tampoco dije que use o no use SDL... ni otra cosa... solo digo que estoy trabajando en prototipos con acceleracion y me da un 500% mas rapido que el actual render...
Eso es genial. Intento decir que ya es hora de tener la 1.0 en base a lo que ya hay, que es mas que estable.
:o anda que no molaría ver el test.
podrías ponernos un vídeo o algo que ver :D
No es bueno enseñar una piruleta a un niño y luego esconderla ;).
Pues nada, esperaremos, será que no hay cosas por hacer mientras.
Como ya tenemos experiencia con el tema de esperar una release que maneje gráficos (¿alguien se acuerda de la WIP2? ;D) sabemos lo que nos toca, aunque claro, splinter, lo primero es lo primero, no descuides tu vida exterior ;)
Pues nada, voy a seguir con mis ratos libres, a ver si consigo el deslumbramiento que se me pidió hace un par de días, estoy trabajando en el editor de terrenos.
excelente noticia la de bennu con opengl :) ;D ;D nadie le ha dado karmas a splinter por esta noticia?
karma++
Muy muy buena noticia!
Siento ser un poquito parte de algo cada vez mas y mas importante como lo es Bennu!
jajaja
Gracias Splinter! :)
Yo no le doy karmas que ya tiene muchos, y si no me va a costar más alcanzarlo :D.
Veeenga va, si nos pones algo que ver, almenos un screenshot con ese 300% de "performanze" te doy unos karmas ;).
Quote from: DCelso on March 19, 2010, 07:39:25 AM
Yo no le doy karmas que ya tiene muchos, y si no me va a costar más alcanzarlo :D.
Veeenga va, si nos pones algo que ver, almenos un screenshot con ese 300% de "performanze" te doy unos karmas ;).
vos tambien tenes muchos karmas y sin embargo te seguimos dando mas...
las 2 versiones de bennu corriendo juntas... corriendo solo la version opengl da unos 254fps... y la bennu normal 48fps...
la imagen no sale perfecta porque el capturador no espera vsync...
(http://img59.imageshack.us/img59/4245/pantallazoe.jpg)
ahora me doy cuenta que el tema de los colores, no siempre van bien... veo que en algunos casos tengo que hacer algun swap de bytes y en otros no...
bueno, 1 es png y los fonts son fonts de bennu...
como sea, estos son solo pruebas, todo lo que estoy haciendo va a la basura... la cosa es probar el funcionamiento y adquirir toda el conocimiento opengl, para luego hacer el cambio correctamente...
no es 300% es 500%...
Oh, pues siendo test mola mucho, encima ya usa fonts y múltiples procesos con imágenes.
ea, karmita pal nene que se lo ha currao :).
Karma up, el incremento de rendimiento para el dibujado nunca me ha dado problemas significativos, ni con miles de procesos, pero siempre viene bien acelerar los cálculos para permitir liberar de carga a la CPU y poder hacer otras cosas. Con 32 bits he hecho alguna prueba exhaustiva con unos 1000 procesos con transparencia y ahí se nota más la pérdida de fps, quizás OpenGL sea la solución para poder hacer videojuegos en 32 bits con grandes cantidades de procesos activos... Sólo nos faltan unos buenos grafistas, pero bueno xD
Es cierto, olvidé darle karma al amigo para que tenga suficiente energía para seguir con ello (y no es al único).
De todas formas ¿esto tiene algo que ver con que WIZ soporte OpenGL ES 1.1? ;D Lo cierto es que le daría un empujón muy grande a la scene portatil, sobre todo para que no se me quejen de cierto proyecto por tener un frameskip cada segundo :D
todavia no probe nada en Opengl ES... pero basicamente es lo mismo... con alguna que otra diferencia... pero claro, la idea es que la version opengl tambien sea portable...
Ahora que esta el SDK oficial con soporte OpenGL habrá que ver como funciona, y que dependencias tiene para controlar correctamente la aceleración hardware de la consola, ya que por ejemplo con el GLBasic el OpenGL todavia no funciona correctamente en la Wiz.
Fantástica noticia Splinter, gracias por tu esfuerzo. karma up!
CROOOOOOMMMM! que rendimiento, como diriamos por aqui, SplinterGU eres el puto amo, gracias por todo el curro que te esta pegando.
Quote from: SplinterGU on March 18, 2010, 03:29:47 PM
primeras pruebas con opengl...
una modificacion muy cutre del core bennu para usar opengl hecho en 15 minutos anoche... me dio en una prueba de un programa que hace rebotar 1000 pelotas en una resolucion de 640x480x32 con graficos de 32x32x32 unos 254fps, cuando la misma prueba en bennu por soft me da unos 48fps...
esta es una rapida version... con cero optimizacion, muy sucia y ejecutando mucho codigo que no deberia ejecutar... solo soporta procesos con graficos sin rotacion ni escalado.. si con alphas... pero bueno, es un adelanto y queria compartirlo con Uds.
¿Está en el SVN?
no
Ok :)
Mucho ánimo Splinter, cuenta con mi ayuda para lo que necesitas, yo me "apuesto" ya un donativo para cuando salga la versión que use OpenGL para dibujar, qué menos :D
La verdad no sabía que estabas hablando de ese tema en este hilo, lo sigo a partir de ahora :D
por fin logre renderizar texturas de 16 y 32 bits a la vez en opengl... lo unico que ahora los mapas de 16bits para opengl seran convertidos a RGBA=5551...
me voy a dormir... saludos.
Que diferencia horaria tienes, siempre me lo he perguntado :) Los libros que he puesto han servido de algo ? alguien sabe donde sacar los 4 ? Tengo eso pendiente...
Me autorespondo ;D
Justo ahora aqui van ser las 11 de la mañana y en Argentina las 6 de la mañana ;)
Currando hasta tarde, he Splinter! Me imagino que ya no tienes curro de día ;D
No ayuda mucho, pero un karma por el sueño invertido! Bueno, más bien por el logro :)
¡Muchas felicidades!
Yo también me sumo al karma, porque es un curro impresionante y va a repercutir muy positivamente en aquellas máquinas con aceleración HW.
Además, es posible que ayude a la integración de aquellas librerías que usen OGL en lugar de SDL.
De todas formas, muchas gracias por currártelo tanto, Splinter. Te mereces todo nuestro apoyo y mucho más :)
Quote from: SplinterGU on March 30, 2010, 08:33:33 AM
por fin logre renderizar texturas de 16 y 32 bits a la vez en opengl... lo unico que ahora los mapas de 16bits para opengl seran convertidos a RGBA=5551...
me voy a dormir... saludos.
genial, excelente noticia :)
me uno al karma ++
buenas noches... más bien diría buenos días que ya deben ser como las 8 :D
lamentablemente los libros no me sirvieron para resolver el problema... pero me serviran para otras cosas... al final consegui varios en rapidshare...
tengo curro de dia, pero curro en casa... duermo un poco de dia muy tarde y despues me cuesta dormir a la noche... y luego duermo a la noche un poco... no logro dormir mas de 3 horas... asi que tengo sueño invertido y corto...
por ahora los experimentos tienen render mixto... o sea, render por soft para dibujar texturas sobre texturas o para cosas como dibujar el fondo (ahora mismo no recuerdo bien porque hay un dibujado sobre una textura y luego sobre la pantalla... mmmm... anoche lo mire y ya me olvide... tengo que revisar...) y SDL esta detras de opengl para inicializar video, para manejar el input (joys, key, mouse, etc...) y el sonido, pero eso es un modo bien independiente...
no creo que vaya a eliminar completamente la SDL, porque SDL no es solo video...
Menudo transtorno del sueño que tienes.... :)
Bueno, teniendo en cuenta que ha tardado 7 horas a volver a postear, me imagino que ha dormido las 7 horas, o sea, eso es el máximo que puedo llegar a dormir todas las noches, tampoco es para tanto ;D
si, bueno, la cosa es que realmente no me fui a dormir con el ultimo post... pero supongo que 5 horas dormi...
Tres Karmas al que consiga hacer un juego para que Splinter duerma sus horas ;D
Aunque si no lo consiguió el WiiFat...
bien, sin usar SDL (usando directo opengl) para hacer el swap del video, en las pruebas donde antes obtenia 500fps ahora obtengo 1600fps...
Mi modulo Open3D ha dejado de tener sentido, para continuar con el sólo tendria sentido usar una version beta de tu nuevo motor compilado para windows, para que yo creará las ventanas usando tus funciones, y ahora ya tendria sólo una ventana renderizada por open gl (la disponibilizada por Bennu), y el modulo serviria para crear funcionalidades, o sea, seguir con la creacion de funciones 3d, modelación, carga de mapas, etc, etc.
te repito, lo que yo estoy trabajando es 2D, no es 3D...
tu modulo mas que nunca tiene sentido... no te preocupes por los detalles que luego se pueden ajustar...
Que si, te entiendo y lo se, pero OpenGl es tanto 3D como 2D, el render de video es comun...
Se que tiene sentido, pero mi modulo, no tiene sentido en el punto en que, ha diferencia de otros modulos, tiene más caracter de trabajo oficial, que de no oficial, porque es mas un complemento al trabajo que tu o el equipo de bennu tendrá que hacer tarde o temprano, que es adaptar todas las funciones que OpenGL disponibiliza, al lenguaje Bennu.
Se que interesa por esto, pero infelizmente no me puedo dividir en dos chinos :), como ya comente antes, ese es un trabajo de chinos ;D Ya veremos, lleva meses parado, me imagino las cosas chulas que ya podria tener si no lo hubiese abandonado, estoy por ponerlo en la sección 'StandBy' que curiosamente es la sección que más va creciendo de mi soft :D
nueva version del core en svn...
yo habia dicho que si uno usaba la opcion -a y tenia #include se incluian los fuentes en el dcb, bueno, me confundi, vi que corregi ese tema hace tiempo... por otro lado mejore el sistema de inclusion de archivos, ahora funciona mejor con los #import, no se incluye ninguno, antes usaba deteccion por extension, ahora directamente cuando se hace #import, la siguiente string que es el nombre del archivo no se tiene en cuenta en la inclusion de archivos.
tambien quite el uso de los arranges en la compilacion, solo se hacen en el momento de grabacion... (igualmente, el sistema de byteorder no esta completo aun)
y otros cambios mas...
Saludos.
¡Genial, Splinter!. Me alegra ver que te has puesto a trabajar en esto :)
por favor, decime ahora si sigue siendo necesario ese arrange que estas poniendo extra... igual todavia no esta completo el tema de los arranges... pero por lo menos ahora deberia funcionar compilando y leyendo en la misma plataforma... y posiblemente se solucione el tema del save/load... por favor, confirmame cuando puedas...
He subido una versión compilada del último SVN para Windows :
http://www.bombergames.net/BennuGD_win.zip
Incluye ultimas SDL y mixer :)
Me tienes que dar classes como preparar el entorno de compilación...
Importante fix en bitmap_analize, que hacia que se analizara fuera de los limites del area de datos en algunos casos con mapas de 16 y 32bits.
Eternamente agradecido a Bomberlink, por la cantidad de pruebas (como 1 semana), para ayudarme a detectar el bug.
Gracias.
No hay de que ;) los crashes empezaban a asustarme :D
He subido los binarios de la versión Windows de forma temporal :
http://bombergames.net/BennuGD_win.zip
Versión modificada de camino a mi PPA :) Gracias a los dos.
Ya tengo el bennu actualizado en mi ubuntu, gracias a todos por vuestro trabajo.
Sin querer meter prisa ni nada por el estilo, Juan como va el desarrollo de Bennu, tienes previsto compilar alguna release próximamente? Saludos y gracias por todo tu magnífico trabajo.
pronto
por otro lado, la version windows la genero bomberlink de los ultimos fuentes, la version linux, cualquier linuxero la puede generar, estoy en falta con la gente de wiz.
estoy poniendo unas mejoras, cuando las tenga listas genero paquetes nuevos.
nueva version con m7 corregido y otras cosas mas (vean el log del svn please)
solo subi version windows, los de linux saben como compilar, pronto subire version wiz.
subidas versiones windows, linux y wiz.
por favor, no he podido probarlas por falta de tiempo, a ver quien me hace el favor de probarlas.
aclaro porque ya veo que van a preguntar, son mas chicas porque no tienen simbolos de debug.
Ya están en mi PPA. Luego actualizo la página de decargas.
Time to update r131 ;D
Quote from: josebita on June 21, 2010, 04:29:38 PM
Ya están en mi PPA. Luego actualizo la página de decargas.
gracias! karma para ti!
Bajando la nueva versión, muchas gracias Juan! karma++
Juas, vaya, no me lo esperaba ;D
Espero que esto no haya supuesto un retraso en tu trabajo, Splinter (y sobre todo, no ser el culpable de ello ^^U).
Karma hoy... y karma mañana (o bueno, dentro de una hora, que es cuando me deja... si me acuerdo ^^U).
tu culpa, si, al menos pruebalo, por favor.
^^U
Yujuuuu, ya tenemos modo7 como dios manda :)
http://www.youtube.com/watch?v=1nBg2pk_XFY
Hasta dentro de una hora no te puedo colmar de karmas :P
Todavia siguen aqui en la bolsa los 49 que te faltan por el port definitivo a las Gp2x ;D
Pues le auguro un futuro muy próspero, lejano, pero próspero ;D (mínimo, hasta que termine la carrera).
encontre y corregi el bug en el fade que hacia que si se hace un fade_off + un fade_on sin un frame entremedio el fading se quedara pegado en 1 (y todos los casos donde fading se quedaba pegado)
Pufff, no estaras petando la compatibilidad con juegos antiguos a lo bestia ?!
Por lo que he leido, lo que ha hecho ha sido arreglar eso, no ha cambiado nada, antes fallaba sin un frame en medio, ahora funciona con o sin frame intermedio :)
Ya, pero a los que se me olvido ponerle el while (fading) frame; cuando hice la conversión de Fenix a Bennu por ejemplo, ahora si le ponemos la nueva version de Bennu van a tener fading en esos puntos, y aunque sea correcto no voy a tener el mismo resultado ;D ;D
free, por favor, lee lo que puse, no se cambio nada, solo se corrigio un bug que hacia que los juegos dejen de ir... por favor, lee.
Ya se a lo que te refieres, he tenido ese problema, eso tiene el origen en lo mismo, ocurria si no me he olvidado, al cambiar de proceso, teniendo fade_off al final del primero y fade_on al principio del segundo. El juego se paraba por ejemplo al ponerle el fading/frame para que se visualizará el fade, o sea, si no me equivoco la solución era poner todo al principio del segundo proceso y no repartido entre los 2.
la solucion es que haya un frame entre medio, pero no es correcto que tengas que hacer eso.
este cambio no afectara en nada a tus juegos si ya estan funcionando.
ahora, tambien debo decir que el comportamiento del fade_on y fade_off no es el mismo que en DIV, en DIV todo se paraba hasta que el fade este completo, en Bennu no, y esto es porque no todos los modulos lo permiten parar su ejecucion, pero quizas deberia plantear darle soporte a esto, aunque sea seteando alguna variable global para definir este comportamiento like DIV.
pero bueno, tampoco tiene que ser exactamente igual a DIV, esto no es un clon de DIV, sino que va mucho mas alla.
En este caso me refiero a Fenix (aunque el comportamiento en Fenix creo que era identico a DIV).
si, en un principio si, pero no iba del todo bien, o sea, habia cosas que seguian su marcha, a pesar de que todo deberia estar congelado esperando el fade.
Tengo que mirarlo, pero la versión Linux (PPA) me lanza un segmentation fault con el modo7. Si alguien puede probarlo, a ver si es algún cambio que hice en el código, que windows se lo traga y linux no...
debe ser que no tiene la ultima version compilada... a mi me pasa en la wiz, recordas?
Quote from: josebita on June 21, 2010, 04:29:38 PM
Ya están en mi PPA. Luego actualizo la página de decargas.
Creo que sí se actualizó.
Por cierto, creo que me toca a mi hacer lo mismo con GP2X, con ambas versiones ^^U Así lo puedo probar en mi negrita, aunque tendré que hacer ciertas modificaciones al código para que me funcione :P
por que tendras que hacer modificaciones?
Actualizo a la última versión SVN casi siempre que tengo oportunidad (y hay cambios). Lo mismo con la versión para Mac, aunque éste lo toco menos.
Las versiones de SVN casi siempre son tremendamente estables y lo único que hacen es corregir bugs de las versiones anteriores.
Pues no se, el modo7 "casca" como una r146 o anteriores. Con windows me va bien. A ver qué dice el port de GP2X.
con wiz y con mi version linux tambien va bien, posiblemente sea un tema de compilacion, proba la version que genere aca.
Intentaré recompilar todo de cero, a ver si es eso.
Splinter, sabes que no soy muy amigo de los instaladores ^^U
De todas formas, he probado la versión que compilé ayer para gp2x oficial y también se cae. Sale el primer say que indica la posición inicial del coche, pero se me celga sin decir nada (aun tengo que mirar la salida por el puerto serie).
drumpi, de que instaladores me hablas?
todo lo que se "instala" en el script de linux se deinstala absolutamente con el mismo script.
Nah, lo digo por el .sh de la zona de descargas.
Además, en Linux tengo instalado Bennu mediante el PPA de josebita.
Seguiré mirando pero cuando tengas un ratillo, mira a ver si es que se ha subido mal al svn el código.
el script este deja menos cosas que el .deb que instales por dpkg, apt, aptitude, etc, ya que estos, por mas que desinstales el paquete, te queda en disco a menos que hagas un purge, el script bennu, haces un uninstall y no queda ni rastros.
que lo tengas por el PPA no tiene importancia, podes bloquearlo o retirar el repositorio...
el repositorio esta perfecto, lo acabo de verificar.
pero si no queres ni siquiera probar, segui rompiendote los sesos buscando donde esta el problema.
Okis, lo probaré.
De todas formas, prefiero romperme la cabeza de vez en cuando porque siempre detecto algún nuevo fallo. En este caso, estaba haciendo "cosas raras" con punteros (inicializando un puntero desde una función y pasando los datos de un lado a otro) y temía haber hecho algo mal, no sería la primera vez que windows "se lo traga" sin problemas, y en otros SO pega un pantallazo.
Según mi gp2x, hay un fallo en mi código haciendo esto:
[code language="bennu"]say("COCHES COLOCADOS, CP_Detector creado");
//preparamos el cronómetro
l3_reloj_id=reloj(160-78,0,-20,l3_graficos[3]);
reloj_data.run=false;
fade(100,100,100,3);
while (fading) frame; end
say("hola");[/code]
Lo cual es muy raro, pues me consta que dicho proceso reloj va perfecto en el resto del juego, y hasta el fade. Sigo haciendo pruebas y te comento.
Vale, he probado la versión instalable de la página principal, y con esa funciona perfectamente, sin problemas.
Voy a volver a probar con la PPA a ver si funciona. Estooo... ¿cómo se desinstalaba la versión instalable? ^^U
si corres el script con el parametro --help te tira una ayuda
Si, ya me he dado cuenta.
Ahora el problema es que no me deja instalar la versión del PPA de nuevo. Como me dijiste lo de purgar, lo "desinstalé completamente" y eso me parece que ha debido tocar algo porque ahora me salta con el mensaje "Depende: libssl0.9.8 (>=0.9.8k-1) pero se va a instalar 0.9.8g-10.1ubuntu2.6" y no me deja instalar. He podido hacerlo desde la PPA en versión Intrepid, pero la Karmic no me lo permite :'( (supongo que por lo de la g y la k en la versión).
No se si esto tiene solución, pero los PCs me están tocando demasiado las narices como para liarme a destrozar cosas. Usaré la versión instalable en lugar de la PPA, hasta que sepa cómo arreglarlo.
Drumpi, si me das acceso por SSH a tu ordenador, quizás pueda arreglarte el tema de las dependencias.
Mientras no termine el proyecto, prefiero no trastear demasiado con "cosas complicadas" que me puedan dejar el ordenador (o peor aun, el entorno de programación) inservible durante un tiempo.
De todas maneras, si me ves conectado (o (auto)ausente) por el pidgin, podemos hablar de ello.
revivio mi version de bennu opengl... pense que mi maquina no tenia opengl... pero entre las pruebas que hice deje codigo malo... ya lo corregi...
confirmo que la version binaria de bennu en linux funciona en opensuse, fedora, debian y ubuntu (todas 32 bits probadas), si alguien puede probar en otras versiones de linux y compartir los resultados se ganara su bonito karma.
Linux Mint cuenta para mi cajita de karmas ?
cuenta, pagado!
Pues paga otro, porque en Knoppix tambien funciona :o
pagado!
corregido timing de fps en wiz, ahora se puede setear 60fps y no va a 50.
Me alegro por Bomber (por cierto Bomber mi bici va de maravilla, da gustaco ver una peli mientras se pedala :)).
bien gente, ya tengo port a caanoo, con algunos mejoras añadidas...
funciones
soporte de accelerometros
joy_get_accel(&x,&y,&z)
joy_get_accel(joy,&x,&y,&z)
si se define la variable de enviroment OS_ID, bennu toma esta como el OS_ID que esta corriendo, lo que permite poner los juegos ya creados en Wiz, que corran en Caanoo.
es importante hacer el export de la variable para que lo tome.
se remapearon y mixearon los joysticks de la caanoo (3) para hacer la emulacion del joys de wiz, y se disponen de 2 joys, 1 idem a wiz (sin botones de volumen porque no existen en caanoo) + analogicos, y otro joys, con los botones especificos y analogicos de caanoo.
tambien mejore la jkeys.lib para soporte adecuado de Caanoo.
Genial! Me viene muy bien lo de la aceleración para la Wii.
;)
es la idea, ya darle soporte donde sea posible...
Splinter, diría que se te han olvidado un par de líneas en modules/libjoy/libjoy.h:
[code language="c"]
extern int libjoy_get_accel( int * x, int * y, int * z );
extern int libjoy_get_accel_specific( int joy, int * x, int * y, int * z );
[/code]
PD: Y en el modules/mod_joy/mod_joy.c creo que hay otro pequeño error:
[code language="c"]
static int modjoy_get_accel( INSTANCE * my, int * params )
{
return ( libjoy_get_accel_specific( ( int * ) params[0], ( int * ) params[1], ( int * ) params[2] ) );
}
[/code]
me imagino que debería ser:
[code language="c"]
static int modjoy_get_accel( INSTANCE * my, int * params )
{
return ( libjoy_get_accel( ( int * ) params[0], ( int * ) params[1], ( int * ) params[2] ) );
}
[/code]
si, es correcto, muchas gracias.
nueva version disponible para descarga, se agrega version oficial Caanoo, se agregan funciones de acelerometros, ejemplos de uso de acelerometros, update de los ejemplos pacman y galaxians para usar la jkeys.lib con soporte Caanoo.
se agrega que si existe definida la variable de enviroment OS_ID, bennu informa dicho valor como OS_ID.
se agrega OS_WII con el valor 1000 (como se habia dicho)
se corrigen retornos de funciones joy como ser joy_get_button para que si el boton no existe retorne 0 en vez de -1, es mas facil de esta forma manejar los retornos.
se mejora finalmente el timing en wiz y caanoo, ahora si se pide 60fps da 60fps y no 50 como sucedia al usar SDL para los delay de ajuste de fps.
otras mejoras y fixes que ahora no recuerdo.
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC13(r156)-caanoo.tar.gz
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC13(r156)-installer.sh
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC13(r156)-openwiz.tar.gz
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC13(r156)-win32.exe
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC13(r156)-win32.rar
Mira a ver si te gusta el artículo (http://www.bennugd.org/node/96) que he puesto; le tengo que añadir más enlaces y quizás cambiar la foto por alguna mejor.
Lo digo antes de tirarlo a la basura, que tampoco estoy muy convencido de cómo me ha quedado y a los de GPH hay que tenerles contentos :)
me gusta, claro esta...
bien, estoy viendo el tema de la version android.
android es todo java, y me parece que eso es motivo tambien de la horrible velocidad que da.
como es java, para hacer que bennu corra sobre este bicho tengo que hacer que bennu sea un jni, y no se si necesitare hacer una version monolitica, espero que no, como sea, voy a tener que pensar y diseñar seriamente como encararlo.
creo que ya lo tengo... tendre que hacer un bgdi java, que se limite a cargar la bgdrtm o un wrapper jni que cargara realmente la bgdrtm (las funciones del core) y con eso ya se solucionara el tema.
bueno, de apoco... ahora tengo sueño... :P
Quote from: SplinterGU on August 06, 2010, 11:02:12 AM
nueva version disponible para descarga, se agrega version oficial Caanoo, se agregan funciones de acelerometros, ejemplos de uso de acelerometros, update de los ejemplos pacman y galaxians para usar la jkeys.lib con soporte Caanoo.
se agrega que si existe definida la variable de enviroment OS_ID, bennu informa dicho valor como OS_ID.
se agrega OS_WII con el valor 1000 (como se habia dicho)
se corrigen retornos de funciones joy como ser joy_get_button para que si el boton no existe retorne 0 en vez de -1, es mas facil de esta forma manejar los retornos.
se mejora finalmente el timing en wiz y caanoo, ahora si se pide 60fps da 60fps y no 50 como sucedia al usar SDL para los delay de ajuste de fps.
otras mejoras y fixes que ahora no recuerdo.
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC13(r156)-caanoo.tar.gz
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC13(r156)-installer.sh
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC13(r156)-openwiz.tar.gz
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC13(r156)-win32.exe
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC13(r156)-win32.rar
grandes noticias. lo del joystick ya hacía falta
karma++
y las noticias del bgdi java suenan muy bien, a ver si de ahí podemos probar bennu en otros lugares. ya tendremos la oportunidad de experimentar... saludos :)
pero en java seria solo el lanzador, luego el motor seguiria siendo una .so, como lo es ahora (bgdrtm)
Quote from: SplinterGU on August 06, 2010, 03:20:06 PM
creo que ya lo tengo... tendre que hacer un bgdi java, que se limite a cargar la bgdrtm o un wrapper jni que cargara realmente la bgdrtm (las funciones del core) y con eso ya se solucionara el tema.
bueno, de apoco... ahora tengo sueño... :P
Sí, cuando lo estuve mirando yo también pensé que esa sería la mejor opción, aunque no creo que haga falta binario monolítico; tienes libdl.
si, no hace falta monolitico... mejor...
bueno, para que te free se deje de quejar por todos lados, ya implemente en bennu, rotacion de pantalla, y correccion de aspectratio, ambos seteados por variables globales nuevas, esto solo funciona con scale_resolution, pero nada impide que tengas un scale_resolution a la misma resolucion que el set_mode.
esto es
scale_resolution_orientation = 0 (normal) 1 (rotado)
scale_resolution_apectratio = 0 ( amplia todo) 1 (mantiene el aspect ratio original, centando la imagen en el medio de la pantalla)
tambien corregi un tema con el ultimo cambio de __VERSION__ y COMPILER_VERSION.
Genial, ésto es útil.
eso espero, me llevo como 3 horas, y no dormi... ahora me voy a ir a dormir, estoy subiendo los binarios...
nueva version bennugd, con fix en __VERSION__ y COMPILER_VERSION, que con el ultimo cambio habian dejado de ser defines y eran constantes, ya son nuevamente defines y de tipo string.
y se agregan funciones de rotacion de pantalla y correccion de aspect ratio con el uso de scale_resolution, las nuevas variables son:
scale_resolution_orientation = 0 o 1, siendo 1 rotacion
scale_resolution_aspectratio = 0 o 1, 0 normal, 1 correccion de aspect ratio
aca van los paquetes de todas las versiones oficiales:
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC14(r157)-caanoo.tar.gz
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC14(r157)-installer.sh
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC14(r157)-openwiz.tar.gz
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC14(r157)-win32.exe
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC14(r157)-win32.rar
Holas, locurón de bug:
Si en el GPE, en vez de poner esto
LD_LIBRARY_PATH=../bgd-runtime:$LD_LIBRARY_PATH
pones esto
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../bgd-runtime
Funciona todo menos el joystick. Y sólo en las dos últimas versiones, en la versión previa que me mandaste por mail no ocurría.
ay, ay, si leyeras...
la nueva sdl trabaja diferente, por eso hay que poner como esta en la primer linea que pusiste, ya que la otra apunta a la SDL vieja que aun esta en el firmware (pero que desaparecera) y tiene un manejo diferente de los joys.
Mmmmm, interesante: el orden de las direcciones altera al producto compilado.
es que son los paths que marcan el camino de busqueda de las dll de linux, o sea, las .so
Muchas grácias Splinter :)
Eres mi idolo :)
Justo venia a Internet buscar el ejemplo de la lupa para apañarmelas por código y me llevo esta grata sorpresa.
Karma Thanks.
de nada, te tardaste en aparecer...
por favor, decime luego si quedo bien.
En un rato salgo de internet y me temo que sólo vuelva la proxima semana para comentarlo.
Voy hacer pruebas luego, no se si con estos cambios podré tambien ajustar el tamaño del original (su resolucion) dentro de la resolucion soportada por la Wiz (como lo hace mame).
Grácias.
podras, pero no seas desgraciado, el otro dia me pase despierto toda la noche para tenerte esto listo, al menos probalo y decime que tal te va, y si despues no queres aparecer por 1 mes, no aparezcas, pero no me dejes esperando hasta la semana que viene.
Es que no puedo aparecer antes Splinter, no tengo internet en casa y no puedo hacer 8 kilometros todos los dias y perder unas horas en internet en la tienda.
Te he pedido esto porque por casualidad vine a internet estos dias (pero es algo que ya pedi hace tiempo y no contaba que lo hicieras ahora).
En realidad no estoy de vacaciones, tengo curro en el bar de mis padres que ahora son las fiestas de mi pueblo y hay mucha gente.
Tampoco tengo tiempo para programar, hoy lo miraré por la noche pero no se cuando volvere a tocar código ni a internet. A finales de la semana que viene volveré a Madrid, y ya tendré tiempo de sobra para testear Bennu y pedirte mas cosicas ;D
ok, entonces no hay problema.
La rotación funciona de lujo, pero no consigo que me funcione la correccion de aspecto, igual es que entiendo algo mal...
Como yo lo entiendo, con scale_resolution_aspectratio=1; al poner pantalla completa en un monitor panorámico usando una resolución "clásica" no panorámica, la imagen se debería de corregir automaticamente para que no aparezca "estirada" pero no lo consigo...
En el eek esto lo resolví "a mano" y se puede jugar a pantalla completa en un monitor panorámico sin que se estire la imagen, pero lo hice con scale_resolution "a ojo" xD, y aunque da el pego la imagen se deforma un poquillo.
Aprovecho para compartir con vosotros un truquillo que use para autodetectar el tipo de monitor y ahorrar al usuario que tenga que marcar una opción de corrección de aspecto si/no:
get_desktop_size(&dsx, &dsy);
aspect=dsx/dsy;
aspect debe ser tipo float
Si aspect vale 1.3 es que se esta usando un monitor normal, de lo contrario es que es panorámico (Luego ya en panorámicos creo que hay de dos tipos, 16:9 y 16:10, pero de ese tema ya no se mucho...en todo caso aspect equivaldría a la división de esos nºs: 4/3=1.3, 16/9=1.7 y 16/10=1.6)
podrias poner las lineas que estas usando y decis no funciona?
el aspectratio es con respecto al modo original (al set_mode)
begin
//scale_resolution_orientation = 1;
full_screen=1;
scale_resolution_aspectratio=1;
scale_resolution=08000600;
set_mode(800,600,32,MODE_WAITVSYNC);
Me sale la pantalla igualmente "estirada", no me corrige el aspecto ni parece hacer nada apreciable.
pero eso no es bennu... eso es tu monitor, si pones un 800x600 sin scale_resolution, te saldra estirado igual, porque tu monitor es wide.
lo que tenes que poner es un set_mode 800x600 y un scale_resolution de definicion 16:9, por ejemplo un 1366x768.
Quote from: SplinterGU on August 12, 2010, 09:12:58 PM
pero eso no es bennu... eso es tu monitor, si pones un 800x600 sin scale_resolution, te saldra estirado igual, porque tu monitor es wide.
lo que tenes que poner es un set_mode 800x600 y un scale_resolution de definicion 16:9, por ejemplo un 1366x768.
Uhhh....vale, pero....eso ya es lo que estaba haciendo y de hecho exactamente lo que hice en el Eeek (Versión PC) sin necesidad de esa global nueva...(Solo con scale resolution puedes contrarestar el estiramiento y corregir el aspecto) no entiendo para que sirve entonces, pense que reescalaría la resolución automaticamente a su equivalente panorámico, para no tener que hacer calculos.......
Que no entiendo para que sirve scale_resolution_aspectratio o en que influye exactamente, vaya ???
luego pongo unas capturas
capturas...
normal
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=1441)
scale_resolution=ancho_original/2 + alto_original
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=1443)
scale_resolution=ancho_original/2 + alto_original
scale_resolution_aspectratio=1
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=1445)
con rotacion...
scale_resolution=ancho_original/2 + alto_original
scale_resolution_orientation=1
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=1447)
scale_resolution=ancho_original/2 + alto_original
scale_resolution_orientation=1
scale_resolution_aspectratio=1
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=1449)
Oye, Splinter, sé que la respuesta a la pregunta será obvia, pero ¿por qué la rotación sólo se puede hacer a +90º? ¿Por qué no a 180º, o a 270º que sería lo ideal en WIZ?
Ahora es cuando te me tiras al cuello ^^U
no esta bien la rotacion? ahora lo pruebo...
fallo mio, lo correcto seria poner 4 modos de orientacion...
0, 90, 180 y 270
voy a tener que hacerlo.
listo, agregados 3 modos mas de rotacion
scale_resolution_orientation = <0,1,2,3>
0 normal
1 rota 90 grados
2 rota 180 grados
3 rota 270 grados
ahora creo que es mas flexible.
bueno, luego hago los binarios, ya me quiero ir a dormir.
Buenas. Acabas de hacer justo lo que venia a pedirte, o sea, que se pudiera rotar tambien hacia la derecha :)
Funciona de lujo, no noto diferencia en rendimiento ni en la Wiz (tambien es cierto que esto lo he mirado a ojo y no mirando el fps).
Lo que te pediria era aparte de la rotación, un modo espejado (cabinet, imagen invertida), o sea, que usando un espejo despues la imagen se vea de forma normal (como lo hacen algunas recreativas).
Lo que si he notado es que para corregir la inclinacion en la Wiz, en el scale resolution tuve que cambar los valores del width por los del height y viceversa.
Lo que intento hacer es que pueda poner margenes fuera de pantalla como lo hace mame, o sea, por ejemplo con la pantalla inclinada en la wiz, la resolucion original es de 254, pero como sólo tengo 240, la imagen se encoje en la horizontal (wiz inclinada) y lo que me gustaria es que esos 16 pixels que sobran sobrepasaran 8 pixels en cada lado para fuera de pantalla, de forma a tener los gráficos en su tamaño original aunque las margenes se oculten.
Hay alguna forma de hacerlo ?
Luego por la tarde intentaré pasarme por aqui, y ya os pongo la forma como estoy poniendo la imagen en la wiz.
lo del espejado olvidate por ahora, y lo mismo lo que salga de los margenes, si lo tenes bien configurado, uno de los lados deberia ir al 100% (alto o ancho).
eso es todo lo que puedo hacer por ahora.
Os pongo mis pruebas para Wiz, a ver si me ayudais a poner la configuracion correcta para tener la pantalla inclinada pero que los 16 pixels sobrantes salgan de pantalla sin que la imagen del juego salga de sus dimensiones originales:
1 - Horizontal con juego centrado
scale_resolution = 03200240;
scale_resolution_aspectratio = 1;
set_mode(224, 256, 16);
2 - Horizontal fullscreen (strech)
scale_resolution = 03200240;
set_mode(224, 256, 16);
3 - Rotacion Izquierda (Imagem reduzida en la horizontal porque pasa de 256 a 240)
scale_resolution = 02400320;
scale_resolution_aspectratio = 1;
scale_resolution_orientation = 1;
set_mode(224, 256, 16);
4 - Rotacion Izquierda con fullscreen (strech)
scale_resolution = 02400320;
scale_resolution_aspectratio = 0;
scale_resolution_orientation = 1;
set_mode(224, 256, 16);
La opcion que tengo es la 3, pero como ya comente antes, me gustaria que la horizontal no se ajustase a la pantalla,
y que los 16 pixels sobrantes salieran ocultos por las laterales en lugar de ajustar los 256 pixels en 240.
y de cuanto es el tamaño real de la imagen? o sea, sin contar marcos negros, lo que es imagen.
La imagen es del mismo tamaño que la resolución original, 224 * 256
Ups, perdon ahora me entero, son los 224 que se estan estirando a los 240, o sea, no hay region que quede fuera o tenga que quedar (16 pixels que comentaba), pero es al reves, o sea, el objectivo no es otro que la imagen tambien tenga tiras horizontales, o sea, he mirado como ocurre en Mame con el juego original, y este tiene tiras negras verticales y tambien horizontales en la pantalla de la wiz para respetar la resolucion original, cuando la imagen esta girada 90 grados en las opciones del menu antes de empezar la emulación.
la resolucion original no la tenes, porque significaria que pierdas imagen, la relacion del aspecto la tenes.
si vos queres bandas negras, vas a tener que hacer el set_mode correcto, con las bandas negra ya calculadas.
pero a mi me parece que no tenes que hacer eso, pero hacelo como vos quieras, yo no puedo hacer desde bennu lo que vos pretendes, eso ya es parte de que lo que vos como programador tenes que hacer desde tu codigo.
nueva version, ahora se agrega soporte de 4 modos de scale_resolution_orientation, y la posibilidad de setear todas las variables del scale_resolution desde variables de enviroment, lo que nos permite poder correr un juego de una resolusion determinada en arquitecturas o resoluciones diferentes sin necesidad de recompilar.
version liberada
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC15(r159)-caanoo.tar.gz (http://betatester.bennugd.org/snapshot/bgd-1.0.0RC15(r159)-caanoo.tar.gz)
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC15(r159)-installer.sh (http://betatester.bennugd.org/snapshot/bgd-1.0.0RC15(r159)-installer.sh)
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC15(r159)-openwiz.tar.gz (http://betatester.bennugd.org/snapshot/bgd-1.0.0RC15(r159)-openwiz.tar.gz)
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC15(r159)-win32.exe (http://betatester.bennugd.org/snapshot/bgd-1.0.0RC15(r159)-win32.exe)
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC15(r159)-win32.rar (http://betatester.bennugd.org/snapshot/bgd-1.0.0RC15(r159)-win32.rar)
No te he entendido, si bennu pone las tiras de arriba y abajo al adaptarlo, tambien deberia hacer las tiras verticales (lados), porque esta ajustando la altura de la resolucion original dentro de una resolucion mayor, o sea, de lado deberia hacer lo mismo.
En este momento en la wiz pone tiras negras arriba y abajo, pero me estira la imagen en los lados a la resolucion de la consola, cuando deberia hacer un ajuste similar al aplicado arriba y abajo. Por favor compruebalo con una imagen de la resolucion original 224x256, girandola en la wiz, y verás que tengo razón.
Grácias, te doy otro karma por todo tu trabajo, que lamentablemente ahora mismo no puedo venir a internet muy a menudo.
pues no, no deberia ser como dices.
no, si pone arriba y abajo, como va a poner de costado? no tiene logica.
tiene que mantener la relacion visual.
no, lo probe y funciona perfecto, lo que vos estas pidiendo no es un escalado, sino un centrado.
o sea, el efecto solo funciona con escalado.
el aspecto se mentienen perfecto, lo que esta haciendo es ampliarlo.
si la imagen es 4:3 seguira siendo 4:3, pero ajustado al tamaño de la pantalla.
eso hacelo por soft, o sea, mentene en tu codigo constantes de ancho y alto de la pantalla y trabaja ubicando los objetos en relacion a eso, que imagino ya lo estas haciendo.
yo ya te hice la parte mas complicada.
la version caanoo no soporta ogg, ya que la sdl_mixer no viene compilada con soporte ogg.
sin embargo, despues luchar un poco con los fuentes de la sdl_mixer, mikmod y copiando librerias ogg que tenia en mi SDK, logre que funcione, y ahi descubri algo.
el soporte de musica que tiene la SDL_Mixer es patetico, el echo de drumpi, que en caanoo anda de maravillas se debia a que no tenia sonidos reproduciendo, al ponerle el soporte ogg comenzo a petardear si le daba a la pantalla tactil (aun sin tener mouse en el juego) y lo mismo con el puzsion, en menor medida pero al fin.
tambien probe reducir los ogg hasta 64kbps (que se escucha fantastico), pero sin mejoras de rendimiento.
ahora probe cambiando los .ogg por .mp3, y mi sorpresa fue que la cosa mejoro mucho, sin embargo si dejo el dedo puesto en la pantalla al rato petardea, pero al soltarlo se recupera rapido, yo creo que la mixer y la sdl estan consumiento mucho tiempo en manejar los eventos de sonido.
lo maravilloso es saber que el MP3 funciona perfecto, tanto en caanoo como en pc linux, no probe en otros.
saludos.
Hola. ¿Habría la posibilidad,por reota que fuera, de prescindir de la SDL_Mixer? Existen varias librerías de sonido muy buenas por ahí...
No estas entendiendo splinter, si lo haces con una imagen es lo mismo, o sea, tienes 240 pixels en la Wiz de pantalla para una imagen de 224, y lo que ocurre es que esta se alarga hasta rellenar la pantalla (estamos hablando de la horizontal teniendo la imagen en 90 con la wiz de lado). Y no deberia ser así, deberia tener 2 tiras, cada una de 8 pixels para rellenar la pantalla.
Por favor, prueba el juego Pinball Action con mame en tu wiz, y antes de arrancar pon screen rotate, y veras como lo hace, veras que ajusta en las 4 diagonales la imagen.
De la forma que esta ahora, Bennu sólo lo hace arriba y abajo y deja la pantalla estirada, quedando el juego mal graficamente.
Imagina que podrias poner una resolucion 50x50 en la pantalla de la wiz inclinado 90, veras que quedaria un rectangulo, o sea, dos de los lados se ajustarian hasta el limite de pantalla, y no deberia ser asi, pero si quedar un cuadrado perfecto con tiras negras alrededor.
te entiendo perfectamente, lo que quieres tu es rotar sin escalar y que rellene lo que falta o si sale de la pantalla que salga, el que no me entiendes eres tu.
nah, con scale_resolution_aspectratio, no se extiran ambos lados (alto y ancho) hasta el limite de la pantalla, solo se estira 1 hasta el limite y el otro se ajusta manteniendo la proporcion con el anterior.
lo siento, pero eso que pides no lo hare, eso lo debes hacer tu por soft, que es muy simple, solo tienes que centrar tus cosas en base a 2 variables.
lamento haber trabajado al pedo.
Me alegra que entiendas lo que quiero. Pero yo tampoco estoy pidiendo que lo hagas, pero saber si ya es posible hacerlo con lo que hay.
Si dices que ya es posible pues me alegro, y es sólo esta mi duda nada mas, por otra parte lo pregunto en general, por si alguien lo sabe hacer cambiando las opciones de resolucion que he puesto.
No estoy obligando a nadie y ni mandando a nadie hacer mi trabajo, y si se puede hacer con estas variables de rescalado pues tampoco creo que sea dificil que alguien sepa como hacerlo y que nos enseñe ;D
Porque mis dudas pueden ser las de otro en el futuro y viceversa.
disculpa, puedes hacerlo, lo que tienes que hacer es ubicar tu juego en un set_mode 320x240 o 240x320, segun corresponda, y luego ya puedes usar la rotacion de pantalla, pero tu modo nativo debe ya tener las bandas negras de costado.
nueva funcion al mod_sound
set_music_position( double segundos )
bueno, con respecto al tema de la performance, voy a intentar conseguir los fuentes de la SDL que esta en el SDK de GPH, quizas el problema esta en como maneja los threads de sonido (si es que esta compilada con threads) o los wait que hay que esperan que termine cada chunk de sonido.
necesito esta version porque tiene el manejo de los joys.
Mola, eso vendra bien para devolver la canción en el trozo en el que se estaba reproduciendo, ej. entras a una tienda, suena otra canción, sales y sigue la música donde estaba :)
Ahora que estas tocando el sonido has pensado en añadir alguna función para eco ? Se que se puede hacer por código sin embargo..
O una para decidir por donde empieza y acaba un bucle en una canción ?
Solo sugerencias claro :)
Viene bien para canciones que tienen una intro, y no quieres que se repita desde el principio.
Oye, si viene alguna función para obtener la FFT o para obtener los datos antes de mandarlos a la tarjeta de sonido, se le podrían aplicar miles de efectos: con las muestras se podría conseguir eco, cancelación de ruido, reverberación... y con la FFT el cambio de frecuencia, ecualizador, filtrado de sonido...
Bueno, ya estoy soñando otra vez ;D
Quote from: BoMbErLiNk on August 15, 2010, 12:44:25 PM
Mola, eso vendra bien para devolver la canción en el trozo en el que se estaba reproduciendo, ej. entras a una tienda, suena otra canción, sales y sigue la música donde estaba :)
Ahora que estas tocando el sonido has pensado en añadir alguna función para eco ? Se que se puede hacer por código sin embargo..
O una para decidir por donde empieza y acaba un bucle en una canción ?
Solo sugerencias claro :)
para hacer eso deberias saber donde estas en la reproduccion, pero para saber eso no hay funcion en la mixer.
con respecto al eco, podria fijarme que efectos hay.
Quote from: Drumpi on August 15, 2010, 03:56:56 PM
Oye, si viene alguna función para obtener la FFT o para obtener los datos antes de mandarlos a la tarjeta de sonido, se le podrían aplicar miles de efectos: con las muestras se podría conseguir eco, cancelación de ruido, reverberación... y con la FFT el cambio de frecuencia, ecualizador, filtrado de sonido...
Bueno, ya estoy soñando otra vez ;D
no se que es la fft, pero si hay funciones de pre-proceso, que te permite modificar vos lo que quieras, pero dudo que eso sea performante.
Quote from: SplinterGU on August 15, 2010, 03:58:36 PMpara hacer eso deberias saber donde estas en la reproduccion, pero para saber eso no hay funcion en la mixer.
con respecto al eco, podria fijarme que efectos hay.
Eso es fácil: basta con tener un contador o usar un timer desde el principio de la reproducción.
Respecto a los efectos, la gran mayoría se limitan a versiones del eco, es decir, repetir muestras con mayor o menos retardo, con mayor o menor atenuación... al menos los que se hacen sin procesado.
Quote from: SplinterGU on August 15, 2010, 03:59:39 PMno se que es la fft, pero si hay funciones de pre-proceso, que te permite modificar vos lo que quieras, pero dudo que eso sea performante.
FFT: Fast Fourier Transform, transformada rápida de Fourier, transforma una señal representada por una serie de muestras en la suma de sinusoides que la componen, representado por valores delta que indican frecuencia y amplitud.
No se si te acuerdas de qué iba mi PFC inicialmente, programé la FFT en Bennu tomando datos desde un archivo wav.
Que si es perfomante o no, depende: los DSP pueden manejarla sin problema gracias al manejo de instrucciones SIMD, de la paralelización y de la posibilidad de hacer una suma y multiplicación en un único ciclo. Obviamente la transformada consume ciclos, pero no sé hasta qué punto es necesario hacer la transformada inversa (se puede obtener el valor de la siguiente muestra sumando el resultado de una multiplicación por sinusoide), o la directa (creo que OGG y MP3 comprimen en base a transformar la señal en su FFT y descartando frecuencias inaudibles, enmascaradas, con poca amplitud y tomando sólo una transformada cada x tiempo).
Vamos, la FFT es básico en el tratamiento de audio: puedes sintetizar un instrumento en menos de 5 sinusoides, y símplemente desplazandolos en frecuencia obtener cualquier nota.
Quote from: SplinterGU on August 15, 2010, 03:58:36 PM
con respecto al eco, podria fijarme que efectos hay.
:)
--
set_music_position es dinamico y cambia la cancion en cualquier momento o hay que llamarlo antes del play_song ? Si es lo segundo se me ocurre una idea :)
dinamico...
drumpi, hasta donde recuerdo, si, creo que la mixer lo soporta...
Esto... ¿no funciona load_song con wav?
En Fénix juraría que si que se podía, evitando cargar el wav entero en memoria y haciendo uso de buffer.
Ahora dice: "Couldn't load ./ogg/menu.wav: Module format not recognized" :S
eso no es memoria, es el formato de tu wav.
algo mal esta en el formato que la mixer no lo reconoce, o la sdl_mixer.dll que estas usando.
Eso veo... Veo que en mod_sound no hay ninguna referencia a los formatos, se encarga todo la sdl_mixer!
Vale, my megafault y un FAIL que te cagas: el programica OGGDropXPd convierte los ogg a wav de 48khz :\
¿Y funciona el instalador de Bennu para Windows? :S
Quote from: osk on August 14, 2010, 09:29:59 AM
Hola. ¿Habría la posibilidad,por reota que fuera, de prescindir de la SDL_Mixer? Existen varias librerías de sonido muy buenas por ahí...
Estoooo...¿fao?
he agregado nuevas funciones de collision y mejorado la que ya existia (ahora colisiona bien con mapas de 1x1).
Se agregan las siguiente funciones:
- Collision_Box(p)
- Collision_Circle(p)
funcionan con type y con procesos, como la collision, comparten tambien el contexto en el caso de usar type, por eso tener cuidado con esto y recordarlo, no digan despues que no avise.
estas funciones son mas rapidas que la collision actual, pero no son tan rapidas como un calculo de distancias (quizas al ser en C lo sean), ya que se tiene en cuenta tamaño, angulo, espejado, etc.
para el caso del box, el box se calcula en base a los extremos, o sea, que si hay rotacion, el tamaño del area de colision varia.
para el caso del circle, se promedia el alto y el ancho (tambien del box del grafico rotado o escalado) y esa es el area circular de colision, que puede salir fuera del box del grafico o estar dentro de este, si el grafico no es igual el alto y el ancho.
puede tambien que el centro del grafico (punto de control) no se ajuste a todos los casos que necesitamos, aunque se necesitarian hacer mas pruebas.
Me huele a que esa colision en circulo me va venir de perlas para el pinball action :)
Y las collision box para reducir el uso de recursos.
Lo que no acabo de entender ¿la caja está siempre con los lados paralelos a los bordes de la pantalla? ¿aunque se rote el gráfico?
no, ya lo dije, esta en los bordes, a 90 grados y 180 con respecto a la pantalla, por eso dije que el area de colision varia.
con respecto a los pixelperfect de 1x1, si esta rotado o hay un size, no lo detecta, puedo hacerlo como estaba antes, pero no quiero, quiero resolverlo adecuadamente, vamos a ver si se puede.
por fin, solucionado el tema de los graficos de pixel 1x1, o mejor dicho de ancho 1, el problema era el blitter, espero que esto no traiga nuevamente los problemas de dibujado de lineass raras en las rotaciones.
bien, corregido un tema con el resolution y el collision_circle, tambien ahora solo colisionan procesos del mismo ctype (cosa que debio ser siempre), y tambien colisionan con el mouse, claro.
he hecho pruebas de performance, y la verdad que no hay muchas mejoras, debido a todo el tema que tenemos de rotaciones, sizes, etc.
se ganan unos 20fps en numeros de 230 fps mas o menos, no es algo grandioso.
Preguntaba porque creía que las collision box detectaban la colisión con el cuadrado del gráfico, es decir, también le afectaría la rotación y el escalado, porque de la otra forma se podía hacer por código. Era sólo una duda que tenía.
Mmmm, si eso que dices del bliter es cierto, tendré que volver a probar las rotaciones con gráficos de 1 pixel de ancho, que a un ángulo desaparecían y a otro eran el doble de anchos.
Y oye, 20 de 230 es casi un 10%, yo creo que es un gran avance, eso se va a notar, sobre todo en la negrita.
si, las rotaciones y el size afectan el tamaño del area de colision, la cosa es simple, rotas un grafico y los extremos del grafico (no solo el era pintada, sino que se incluye el area transparente), y por cada extremo trazas rectas y paraleleas de 90° y 180°, con respecto a los ejes x e y de la PANTALLA.
el tema de que no se veia el grafico de 1px de ancho, ya se soluciono, ahora que sea vea segun la rotacion de 1px mas, a simple vista me parece que sigue, pero eso es por los calculos,
yo sigo pensando que no es importante la mejora, si se pudiese evitar todo el tema de las rotaciones, escalado y resolution, este tipo de colisiones seria muy rapido.
quizas se podria implementar un par de funciones que no consideren estos valores, algo asi como un collision_circle_fast y collision_box_fast, que se basen solamente en el alto y ancho del grafico con respecto a su centro, sin chequear rotaciones, escalado ni demas cosas, quizas el resolution no afecta mucho.
tambien quiza estas funciones puedan tener un parametro extra que indique radio de accion de la colision o quizas agregar una variable local que indique radio de accion para casos de colision circular y podria ser alto y ancho para casos box.
no esta mal, y creo que esto ameritaria un modulo de colisiones exclusivos, y para evitar el problema de lo que ya esta hecho (que usa mod_grproc), puedo hacer que mod_grproc cargue automaticamente este nuevo modulo (dependencia), y asi seria transparente para lo que ya actualmente lo use.
lo que tambien afecta mucho es el comparar en cada collision toda la lista de procesos (en el caso del type, si hay muchos de este tipo, o de collision ALL_PROCESS), collision directo a un proceso, supongo que va muy rapido, pero tambien lo ira en el collision normal.
la cosa es que estuve pensando, y no se puede hacer un cache de las colisiones, ya que uno de los procesos que previamente fue chequeado por colision en otro proceso, en el actual proceso pudo haber cambiado sus datos, por ende, no se puede asumir que la info anterior es valida.
No, si yo la collision box me refería a que al rotar el gráfico, los lados también rotaban, vamos, que no siempre son paralelos a los bordes de la pantalla, sino que delimitan los bordes del gráfico (ignorando las transparencias).
La idea de un módulo con diversas colisiones estaría muy bien,y para no romper la compatibilidad podrías dejar las colisiones "básicas" donde están, y crear las nuevas en el módulo aparte, o meter también las antiguas de manera que "tapen" las del mod_grproc.
Hombre, un cache de procesos sería útil con los procesos que permanezcan quietos, es cierto que suelen estar en movimiento pero ¿no hay una variable que los marque como "dirty" para actualizar sus valores o decir que hay que redibujarlo?
También es verdad que una cache come recursos, y si estamos usando colisiones simples por falta de los mismos, estaría interesante tener una variable para activarlas/desactivarlas, igual que hay para el volcado total/parcial de pantalla.
hacer un box que tambien el box rote es ridiculo, seria tan complejo como hacer el pixelperfect o quizas mas.
no, el dirty se chequea en el frame final o cuando un grafico se modifica su contenido, pero eso solo se le setea un flag que indica que debe ser analizado. ademas cambiar el grafico es lo de menos, hay muchas cosas mas que hacen cambiar a lo que se dibuja, coordenadas, angulos, tamaño, etc, y hacer chequeos por todas esas cosas, haria al asunto mas lento, y muchas cosas internas que no tienen sentido discutir.
olvidate drumpi, es mucho mas complicado o elaborado que lo que decis.
Después de un tiempo desconectado, veo que el desarrollo de Bennu sigue imparable, gran trabajo Juan. Ahora mismo actualizo a la ultima versión. Sobra decir que te añado otro karma (no se que haras con tantos!). Saludos!
ja, gracias blostec, estos ultimos cambios que voy mencionando (collision y funcion de la mixer) estan solo en el svn, aun no genere version binaria.
los karmas? disfrutarlos. :D
excelente
(http://3.bp.blogspot.com/_pS7sKjlzwFg/R5yGh1lpuRI/AAAAAAAABN0/v3Vcsg0en7I/s320/MrBurns.gif)
karma up..
Oye, L1nk, ya que estás aquí, ¿Estás ayudando a Splinter con el problema que tiene con la vibración en los mandos para plataformas no-WIZ? si no, échale una mano, por favor :)
BUENO comentame, y publica los binarios de la ultima bennu xfavor que estoy por sacar
el proximo bennupack..
exactamente cual es el problema con los mandos? haber si soy util en algo
tengo que hacer los binarios, en estos dias.
con respecto a los mandos, no hay problemas, solo que quiero dar un soporte de forcefeedback o vibracion, pero necesito pensar en un api que sea portable, me refiero, al mismo set de funciones y tambien a los mismos archivos de efectos.
en caanoo, es basica la informacion, tiene numero de acciones, y por cada accion se define, duracion en milisegundos y fuerza de la vibracion, maximo 120 acciones.
necesito saber como son los demas apis al respecto, y ver si es posible hacer algo normalizado.
http://www.libsdl.org/tmp/SDL-1.3-docs/SDL__haptic_8h.html
http://www.libsdl.org/hardware.php
bajar la version 1.3
http://www.libsdl.org/hg.php
esa misma usa caanoo, haptic... gracias... le echare un ojo.
edit: no me queda claro si haptic es una palabra generica que sirve para referenciar a todo esto de lo tactil o es algun estandard.
haptic es solo para los efectos force feedback , (vibracion ), y fue incluido en la version 1.3
The SDL Haptic subsystem allows you to control haptic (force feedback) devices.
según veo la versión 1.3 tiene soporte multi-monitor que pidieron en otro tema
y otras cosas raras,, la sdl se esta poniendo buena..
la cosa es que no se si esta la 1.3 para todas las plataformas que soporta bennu.
sigo mejorando el sistema de colisiones... pero no me termina de convencer.
con los ultimos cambios en una prueba que me daba ~240fps con el collision normal, con collision box llega a ~284 y con circle ~280.
mejoro bastante, me gustaria meter funciones que para el caso de colisiones circulares te permitan especificar el radio del hotspot y la posicion en base a un punto de control de la colision.
y para el caso de colisiones box, poder decir que no le de bola a las rotaciones, o trabajarlo un poco mas y en base a si no esta rotado, ni escalado, usar funciones mas rapidas.
pero ya el modulo se esta haciendo un poco mas grande, voy a tener que separarlo finalmente.
nueva version bennugd disponible de descarga
bien, solucione el problema del sonido en las caanoo, me habia confundido de sdl_mixer, y puse la que no tenia sonido, pero aun asi hay petardeo con los ogg.
tambien cambie todos los retornos de las funciones load_wav y load_song, como asi tambien otras no importantes que retornaban -1, ahora retornan 0 si no se carga el sonido o en otros casos retorna 0 cuando el valor de retorno no es importante.
se agregan 2 nuevas funciones, o mejor dicho, 2 formas nuevas de usar 2 funciones ya conocidas.
unload_song(&song)
unload_wav(&wav)
estas funciones descargan los elementos pasados y los resetean a 0, asi no hay que preocuparse por ponerlos a 0.
Aparte del seteo de la variable a 0, ¿qué diferencias tienen las nuevas unload_song y unload_wav?
nada, solo eso
Descargando la nueva versión, gracias Juan!
Por cierto, Splinter ¿has probado ya la nueva toolchain o el nuevo SDK liberado por GPH o es el mismo que tenías?
deja vu.
lo mismo me pregunto free.
es el mismo que ya tenia.
gracias.
Quote from: Drumpi on September 02, 2010, 02:31:22 AM
Por cierto, Splinter ¿has probado ya la nueva toolchain o el nuevo SDK liberado por GPH o es el mismo que tenías?
(http://img338.imageshack.us/img338/8766/owned2px4.jpg)
que foto mas horrible xddd
No recuerdo haberlo leido en los dos últimos dias, que es cuando salió la noticia.
Eso sí, es mi segundo owned, y al igual que aquella vez, la foto más horrible no puede ser ¬¬U
Que va, lo hablamos por msg ayer...
Tus neuronas parecen OK, tranquilo ;D
nuevos cambios:
- soporte completo en 32bits de alpha, ahora van bien las funciones map_put, write_in_map, etc. y trabajan segun hacen los flags actuales, blend adictivo y blend substractivo o normal
- se corrige problema de velocidad en caanoo debido al ultimo firmware.
oolee, karma plus plus.
aquellos que puedan compilar la version del svn, necesitaria que lo prueben y me den sus impresiones, diria que lo de 32bits por ahora es experimental.
Deseando probarlo Splinter, gracias y karma up!
Subiendo los paquetes actualizados al PPA. Pronto para lucid y un rato después para karmic y maverick.
gracias joseba, yo voy compilando para windows, wiz y caanoo... ya que hay algunos cambios que afectan a todas las consolas (como el fix en el draw, los chequeos del path y otras cosas)
Nada, nada, hoy reparto karmas como si fueran caramelos :D :D :D
Yo mismo tengo que hacer ports, pero aun no tengo muy claro cómo hacerlo desde Linux, pues no encuentro una toolchain (encuentro SDKs preparados con codeblocks o el devkitpro, y no se si decantarme por ellos). Paciencia.
RC18 (r181) disponible
Snapshot: http://betatester.bennugd.org/snapshot/
Sources: http://bennugd.svn.sourceforge.net/
Gracias Splinter! karma++
Los binarios ya están disponibles para lucid, karmic y maverick.
por favor, agradeceria prueben los 32bits y cuelguen los programas de ejemplos que usaron para probarlos.
gracias.
Una pregunta, teniendo ya las librerias y todo, bajo solamente el interprete?
el paquete incluye todo, tenes que meter todo...
Muchas gracias, Splinter (ya sabía yo que no te podías estar quieto el fin de semana sin internet :D), me viene justo al pelo para actualizarme y comprobar si cierto error es mío o no (que va a ser que no ^^U).
Karma++.
no se de que error hablas.
Nada, olvídalo, como siempre, fallo de concepto.
por favor, si necesitas decir algo, dilo... pregunto porque quizas me perdi un mensaje, porque no entendi de que hablabas.
todos los que han pedido el tema del 32 bits, lo han probado? aun no veo respuestas de test...
agradeceria lo prueben...
En el segundo test, el de fondo semitransparente verde me sale un marco que no se a qué se debe.
gracias! a ver...
falto el map_put con flag a 0
no me parece que esta bien el tema del translucent...
a ver como se veia antes...
bueno, esta mal, muy mal... :(
Ánimo! :D
jeje, ya lo arreglare... tengo que replantear la forma de usar los alphas.
pero tan mal no esta, no todos estan mal.
Y lo del marco verde oscuros sabes a qué se debe?
He añadido el 0 al xput y también una tercera file con la mezcla de imagenes de la segunda al revés, es decir, primero poniendo la esfera y luego añadiéndole un cuadrado semitransparente.
tu grafico debe tener diferente alpha en los bordes.
edit: es eso, tu grafico tiene un borde de 2px de ancho que es 0 absoluto, y los demas pixels tienen alpha diferente a 0.
Ya que estás con los PUT, echa un vistacillo rápido al put_screen y su hermano map_put, porque he intentado poner una mapa de 8 bits en modo 16 bits de pantalla y no ha transformado los colores a los de la paleta (tenía colores vivos en las 7 primeras posiciones, pero al hacer el put se veían en tonos negros).
Pondría ejemplo rápido, pero no me dejan, lo siento :(
Mañana lo mismo te puedo pasar el código con el que trabajo (y sus ficheros), pero no te los puedo preparar.
¿Es normal que no se pueda usar SET_COLORS sin un LOAD_PAL previo en modo 16bits? ¿Y por qué si uso NEW_PAL tengo que usar SET_COLORS(int,int,int,pointer) en lugar de SET_COLORS(int,int,pointer)?
necesito ejemplo.
sin un load_pal o sin un new_pal, es correcto.
la otra pregunta es porque una trabaja con paletas individuales y otra con la del sistema.
.------------
volviendo al tema de los 32bits, funciona perfecto (bueno, a medias), es que ahora el render tambien considera el alpha de la pantalla donde se hace el render y entonces al tener este 0, no dibuja, si en el proceso esfera ponemos flags = b_nocolorkey; vamos a ver que se dibuja todo tal cual era en la anterior version, pero el map_put funciono perfectamente, aunque esto funciona perfecto, ahora van a surgir problemas al dibujar sobre la pantalla. diablos!
Pues te mando el código: es un programa que a partir de un fichero TMF (mi formato de mapas de tiles), genera un FPG de durezas de 8 bits (cada pixel equivale al número del tile en esa posición) usando como paleta un BMP "especial", y después un BMP del propio mapa de tiles para usarlo como textura.
Lo primero es lo de la linea 113 de tmf2mode7.prg, no puedo hacer set_colors (a la paleta del sistema) sin usar load_pal.
Lo importante está entre las líneas 116 y 129: en la línea 122 generamos un mapa de 8 bits, la función se encuentra en tmf_conv.inc. En ese fichero, verás la línea 16 comentada. Si quitas las //, cuando salga por pantalla se verá todo negro (salvo la paleta), pero si lo pegas en el paint y rellenas de blanco, verás un mini cuadrado negro en el centro, que no es realmente negro puro, se puede usar la herramienta de relleno y se notarán los diversos colores.
La línea 17 era una prueba para ver si el mapa estaba bién, como proceso el mapa de 8 bits se muestra con los colores de la paleta.
Y ya, si alguien puede decirme por qué tmf_dur.fpg, a pesar de estar bien creado y de tener bien la paleta (comprobado con editor hexadecimal) lo que debería verse gris se ve negro con el FPGedit viejuno...
si estas en modo 16 bits, no tenes paleta del sistema hasta que hagas un load_pal, como sea, en 16bits, todos los graficos de 8 bits tiene su paleta propia, si queres que usen la del sistema tenes que eliminar la paleta de cada un de los graficos de 8bits.
corregi un nuevo bug, con collision con type mouse, si el grafico del proceso que se quiere testear tiene un tamaño diferente a 100 y supongo que tambien si tiene angle.
no pasaba con las nuevas de collision (box, circle).
esto se debe a que aun se ve que existe el tema que si es de 1px de ancho no pinta bien, no se en que circunstancias, ya que la que dibuja rotado/escalado y la que no son diferentes.
bueno, lo parche, haciendo que el area de colision del mouse sea 2x1, en vez de 1x1, aunque para la comprobaion se testea solo 1x1, asi que no afecta.
en estos dias subo ejecutables, ya que considero este un bug importante.
disculpen las molestias.
finalmente corregido el tema de los 32bits...
( sera cierto? :D )
bueno, svn actualizado, debo binarios.
Nosotros con el Paper podemos hacer buena prueba, es todo 32 bits, incluso efectos bastante raros que mezclan una especie de foco de linterna en 32 bits con un fade_off. En cuanto estén los binarios avisa, sobre probar los write_in_map, map_block_copy, etc. Todavía no te puedo prometer nada pero lo intentaré :P
lo del paper eso que cuando pones un grafico con alpha sobre un blanco total, no va, y esta bien que asi sea, porque ya el fondo esta al maximo del alpha, y ponerle otro del mismo color con mas alpha, no va a hacer que el alpha baje, tenes que cambiar de color o poner en el original un alpha mas bajo.
SplinterGU, mira, he estado hechándole un ojo al asunto del png de 24 bits de profundidad de color por pixel y con un color de pixel RGB a tratar como transparente y he visto que los visores como acdsee o eye of GNOME trabajan bien con el transparente y bennu no los cargaba bien. Así que explorando el código fuente de mod_map y el formato PNG he descubierto que metiendo este código podemos dar soporte a imágenes RGB de 24 bits con un pixel a tratar como transparente (es decir sin usar canales alfa)
else
{
Rshift = 8;
Gshift = 5;
Bshift = 3;
Rmask = 0xF80000 ; // 3
Gmask = 0x00FC00 ; // 2
Bmask = 0x0000F8 ; // 3
for ( n = 0 ; n < height ; n++ )
{
rowpointers[0] = ( void * )row ;
png_read_rows( png_ptr, rowpointers, 0, 1 ) ;
ptr = ( uint16_t* )((( uint8_t * )bitmap->data ) + n * bitmap->pitch );
orig = row ;
for ( x = 0 ; x < width ; x++ )
{
ARRANGE_DWORD( orig );
if (( *orig ) & 0x80000000 )
{
*ptr = (( *orig & Rmask ) >> Rshift ) | (( *orig & Gmask ) >> Gshift ) | (( *orig & Bmask ) >> Bshift ) ;
if ( !*ptr )( *ptr )++ ;
}
else
*ptr = 0 ;
<b> if ((color==PNG_COLOR_TYPE_RGB)&& (info_ptr->pixel_depth=24)&& (info_ptr->valid & PNG_INFO_tRNS)){
uint8_t * ptr8 = (uint8_t *)orig;
if(
(ptr8[0]==info_ptr->trans_values.red) &&
(ptr8[1]==info_ptr->trans_values.green) &&
(ptr8[2]==info_ptr->trans_values.blue)
)
*ptr = 0;
}
</b>
ptr++, orig++ ;
}
}
}
como ejemplo pongo la imagen que nos pasó el muchacho este deetee,
La imagen adjunta si la abres con un visor cualquiera de imágenes verás que tiene fondo transparente, pero
Si la intentas cargar con el mod_map original no carga la información de transparente y es debido a que no es un formato png que estemos acostumbrados a usar no es un png de 32 bits sino un png de 24 bits con tratamiento de un color como transparente.
Con esta modificación a mod_map ya sí trata bien este tipo de pngs.
Si quieres ver las diferencias puedes verlas con el siguiente ejemplo:
import "mod_key";
import "mod_map";
import "mod_screen";
process main()
private
int escape=0;
int square, pic6;
begin
square=new_map(300,220,16);
map_clear(0,square,rgb(0,255,0));
pic6=png_load("A24b.png");
repeat
put(0,square,100,100);
put(0,pic6,100,100);
if(key(_ESC)) escape=1; end
frame;
until(escape);
unload_map(0,pic6);
end
muchas gracias DCelso, karma!
pregunta, aca creo que cometiste un error, cierto?
if ((color==PNG_COLOR_TYPE_RGB)&& (info_ptr->pixel_depth = 24)&& (info_ptr->valid & PNG_INFO_tRNS)){
es ==, si?
:D, sips, que bueno que no probé con otras imágenes, sino me petaría :D.
Menos mal que estás al loro y fijo que tienes ya ideas de como optimizarlo :D.
por ahora queda como lo pusiste.
gracias.
splinter ese arreglo solo funciona para cuando el modo de pantalla es 16 bits, para poder cargar también la información de transparencia de esos PNGS en modo 32 bits hay que poner en la parte de arriba de ese condicional algo parecido.
else if ( depth == 8 && sys_pixel_format->depth != 16 )
{
for ( n = 0 ; n < height ; n++ )
{
rowpointers[0] = ( void * )row ;
png_read_rows( png_ptr, rowpointers, 0, 1 ) ;
ptr32 = ( uint32_t* )((( uint8_t * )bitmap->data ) + n * bitmap->pitch );
orig = row ;
for ( x = 0 ; x < width ; x++ )
{
ARRANGE_DWORD( orig );
*ptr32 = *orig ;
<b> if ((color==PNG_COLOR_TYPE_RGB)&& (info_ptr->pixel_depth==24)&& (info_ptr->valid & PNG_INFO_tRNS)){
uint8_t * ptr8 = (uint8_t *)orig;
if(
(ptr8[0]==info_ptr->trans_values.red) &&
(ptr8[1]==info_ptr->trans_values.green) &&
(ptr8[2]==info_ptr->trans_values.blue)
)
*ptr32 = 0;
}</b>
ptr32++, orig++ ;
}
}
}
Ahora he probado con otras imágenes pa no volverla a cagar :d.
splinter, haciendo probatinas si uso pantalla de 32 bits y creo imágnes de 16 bits, luego al usarlas no van bien los colores, por ejemplo, este ejemplillo me da un cuadrado amarillo en vez de verde
import "mod_key";
import "mod_map";
import "mod_screen";
import "mod_video";
process main()
private
int escape=0;
int square, pic6;
begin
set_mode(320,240,32);
square=new_map(300,220,16);
map_clear(0,square,rgb(0,255,0));
repeat
put(0,square,140,140);
if(key(_ESC)) escape=1; end
frame;
until(escape);
unload_map(0,pic6);
end
No se si es por culpa de los últimos cambios de alphas para soporte 32 bits de las últimas versiones de bennu, ¿Puede ser?
es probable, voy a volver atras tu cambio, ya que me decis no va bien, debo estar seguro que funciona en todos los casos, aunque me imagino porque no va bien, si lo corregis pasame el cambio, pero asegurate que funcione bien...
gracias...
ahora chequeo el otro tema, a mi tambien me da amarillo, voy a revisar por que.
EDIT: Ahhh, claro, es obvio, el RGB esta trabajando sobre 32bits no sobre 16bits.
proba cambiando el set_mode a 16 y luego poner un set_mode a 32, luego del map_clear, no lo probe aun, pero seguro es eso.
EDIT2: es eso.
se agregan nuevas funciones RGB*, sintaxis:
RGB( r, g, b, depth )
RGBA( r, g, b, depth )
RGB_GET( color, &r, &g, &b, depth )
RGBA_GET( color, &r, &g, &b, &a, depth )
GET_RGB( color, &r, &g, &b, depth )
GET_RGBA( color, &r, &g, &b, &a, depth )
enjoy it!
Grande Splinter! Solo una pregunta: que diferencia hay entre get_rgba y rgba_get? me suena a que hacen lo mismo :P
Me imagino que serán sintaxis diferentes para lo mismo.
En cuanto a "depth" me imagino que provoca que se trabaje en ese modo, de forma que se puedan obtener las componentes RGB de 32bpp aunque el modo actual sea de 16bpp, ¿verdad?.
si, son lo mismo.
exacto, ese es el comportamiento...
pero he tenido que cambiar la sintaxis.
ahora si funcionan... el ejemplo de DCelso quedaria asi:
import "mod_key";
import "mod_map";
import "mod_screen";
import "mod_video";
process main()
private
int escape=0;
int square, pic6;
begin
set_mode(320,240,32);
square=new_map(300,220,16);
map_clear(0,square,rgb(0,255,0,16));
repeat
put(0,square,140,140);
if(key(_ESC)) escape=1; end
frame;
until(escape);
unload_map(0,pic6);
end
esto era algo que tenia pendiente desde hace mucho tiempo y me habian pedido varios usuarios, decidi hacerlo.
habia pensando meter funciones separadas segun la profundidad, pero eso complicaria luego hacer los codigos, y no aprovecharse de variables profundidad para obtener resultados, asi que opte por poner un parametro depth.
eso si, esto es para modos mayores a 8bits, estas funciones tambien sirven para 8bits, pero 8bits funciona sobre la paleta del sistema, lamentablemente no lo hace para paletas individuales, pero para eso, estan las funciones de map y creo que hay tambien de pal.
disfrutenlo, me retiro a descansar un rato.
Después de un tiempo sin visitar el foro, bajada la RC18 y actualizando mis proyectos. Como siempre, muchas gracias por tu trabajo Juan, karma up :)
Ese karma para el maestro, gracias :D
Karma++ para Splinter por el trabajo!
me uno.
Para cuando los últimos binarios ?
Espero como loco los de Caanoo, compilados con la version 4 del EABI :)
Por cierto, actualicé hoy la versión de Windows y la de Caanoo, y en Caanoo no me funciona el límite de fps.
Todos ellos van superchutaos xD
Pero y que has actualizado si puede saberse ? :)
PiXeL, tienes la ultima version para Caanoo? y el firm?
RC17 tanto para Caanoo como para Windows, y el firm 1.5
Que es la RC17, Bennu ?
Me pierdo :(
al menos necesitas la RC18.
Mmmm... La RC18 no estaba ayer en la web, no? xD
esta hace tiempo, todavia tengo que compilar una nueva.
Estaba en el directorio de snapshots... He cambiado hoy los enlaces, sorry
quizas deberiamos implementar algun sistema para que yo suba las versiones y aparezcan directamente en el portal, quizas algun panel o una pagina con password que solo yo tenga.
a ver que proponen y se les ocurre (esto es para PiXel y josebita)
Sin problema :)
Es un script facilón en PHP
para los usuarios de linux, en la proxima release se incluira los archivos de autocompletado para el bash... si alguno ya lo quiere ir usando aca los pongo:
/etc/bash_autocompletion.d/bgdc
_bgdc()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case "${prev}" in
-o)
_filedir '@(dcb|DCB|dat|DAT|bin|BIN)'
return 0
;;
-i)
_filedir '()'
return 0
;;
-f)
_filedir '@(*)'
return 0
;;
-l)
return 0
;;
-s)
_filedir '@(*)'
return 0
;;
-D)
return 0
;;
*)
_filedir '@(prg|PRG)'
;;
esac
if [[ ${cur} == -* ]] ; then
COMPREPLY=( $(compgen -W "-d -o -i -a -f -l -s -g -c -D -p -Ca" -- ${cur}) )
return 0
fi
}
complete -F _bgdc bgdc
/etc/bash_autocompletion.d/bgdi
_bgdi()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case "${prev}" in
-i)
_filedir '()'
return 0
;;
*)
_filedir '@(dcb|DCB|dat|DAT|bin|BIN)'
;;
esac
if [[ ${cur} == -* ]] ; then
COMPREPLY=( $(compgen -W "-d -i" -- ${cur}) )
return 0
fi
}
complete -F _bgdi bgdi
cualquier sugerencia es bien recibida.
¡Maravilloso!, gracias.
Hola, soy nuevo en esto, me podeis explicar todo lo que habeis puesto desde hace 2 páginas hacia aca (me gusta 'aca').
En casi todos los sistemas, cuando estás en la consola puedes pulsar la tecla "Tabulador" y la consola rellena los nombre de archivos. P. ej. si haces:
cd /sys<<tabulador>>
la consola rellena hasta
cd /system
Las últimas versiones de Ubuntu han mejorado esto en el sentido de que ahora sólo rellena con los nombres de fichero que pegan con el comando, es decir que si vas a descomprimir un zip desde la consola:
unzip ficher<<tabulador>>
añade texto, pero sólo entre los ficheros que vas a descomprimir, de forma que si existen dos ficheros en ese directorio de nombres "fichero.zip" y "fichero.avi", el sistema sabe que no es probable que quieras pedirle que descomprima un avi y directamente rellena a
unzip fichero.zip
Lo que ha hecho Splinter es lo mismo: con ésto cuando escribas
bgdc <<tabulador>>
el sistema sabrá qué clase de comando puede aceptar cada opción y sólo rellenará con las que tengan sentido.
No sé si me explico :)
RC17 es Release Candidate 17 de Bennu, una forma de nombrar a las versiones.
Muchas grácias, karma por la explication.
Quote from: FreeYourMind on November 16, 2010, 11:37:58 AM
Hola, soy nuevo en esto, me podeis explicar todo lo que habeis puesto desde hace 2 páginas hacia aca (me gusta 'aca').
jajaja, juro que cuando postee sabia que ibas a preguntar...
groso!
muy bien la explicacion josebita.
agrego, pones bgdc y pulsas tab y muestra todos los .prg o directorios que hay donde estas parados, y si pones una de las letras que componen alguno de ellos te autocompleta con el siguiente tab, y puedes ir agregando caracteres y tab hasta obtener lo que quieres, si tienes un solo prg en el directorio con 1 solo tab ya te lo pone, y si pones bgdc -<tab> (o sea, '-' de argumentos, te tira la lista de argumentos posibles).
bueno, esto mismo con el bgdi.
esto mismo deberia funcionar desde msys en windows, aunque no se bien donde iran los archivos, no lo he chequeado.
Splinter: karma up!
(http://www.bytelove.se/images/uploads/Bytelove/retro/1up%20-%20zoom.jpg)
je, la verdad que ya estaba cansado que cada vez que tenia que compilar algo tener que escribir el nombre del prg y lo mismo para el dcb.
:D
Hola.
Ei, no me toméis como un troll, porfa,pero estaba pensando...¿hay algún roadmap respecto los puntos clave que debe tener Bennu?
Estoy pensando en:
-64 bits
-Backend de OpenGL
-Librería de red oficial
...
Hola Osk, perdona mi ignorancia pero ¿qué es un roadmap? (mapa de camino-ruta) es decir ¿sirve para ver que tipo de lenguaje queremos o algo asi?
Creo que se refiere a un TODO, una lista de cositas por hacer.
A Splinter le hemos hecho llegar numerosas sugerencias, pero no hay lista oficial que yo sepa :P
Sí, eso. Una lista de cosas por hacer temporizadas según su urgencia y el tiempo que se prevee en conseguirlo.
Y si abrimos un post para esto? yo creo que es buena idea y de paso lo charlamos entre todos y vemos lo que se puede y lo que no...saludos!
si, hay, aunque las prioridades cambian con las necesidades.
mas que ser rigido a un roadmap, mas bien veo las necesidades de la gente y segun la importancia, tiempo disponible y factibilidad lo voy haciendo.
si tuviera que seguir un roadmap creo que muchos se quedarian sin muchas cosas.
pero el roadmap general existe, si mal no recuerdo, esta en este mismo foro.
agrego, algunas cosas del roadmap no estan publicas, para evitar que otros tomen ideas.
se cambia el MAX_PATH de 260 a 32768, debido a que windows dice que el maximo path puede ser de 32768, ademas de que en la actualidad es comun encontrarse con paths de mas de 260 caracteres.
Para cuando el fix de sonido para Caanoo ?
Queria ver si empezaba a hacer los ports que me quedan, pero hasta que no este arreglado pues tendré que seguir esperando.
este fin de semana intento, pero creo que hay problemas para compilar la mixer... todo es compilacion de la mixer.
por otro lado, podes tambien convertir los sonidos si urge tanto.
el ejemplo que me armaste no tenia los sonidos de ejemplo, asi que voy a perder un buen tiempo buscando sonidos, si me podes pasar un pack completo full estaria agradecido, no me importa si son 100mb o 1gb, mientras este completo.
Que dices !?
El ejemplo que te arme tiene todos los sonidos que salen en el menu y en sus respectivos formatos...
Lo he mirado, entan embebidos en el dcb...
Te los paso de nuevo sueltos...
gracias!
Buenas Noches...
Soy nuevo en este foro, y viendo los avances de esta herramienta de desarrollo de video juegos (Bennu), solo queria felicitarlos por este grandioso proyecto basado en una herramienta que he usado anteriormente (DIV Games Studio), aunque extraño mucho DIV Games Studio...
Saludos...
veo que ya has actualizado la sdl, pero para cuando los muy esperados binarios actuales ?
la de caanoo, la tengo compilada, tengo que hacer lo propio con el resto.
aunque no pude testearla como queria...
SplinterGu, en un windows xp sp3 recien instalado no va el instalador oficial de bennu. Lo ejecutas y se ve por segundos una ventana de msdos y desaparece. He intentado sacar cualquier log posible pero no hay, lo ejecuté desde consola con 1> salida1.txt 2>salida2.txt y nada no saca nada por las salidas, lo intenté ejecutar en modo compatiblidad w95,w98,w2000 y nada, igual.
He visto que el 7zip puede entrar en el .exe y verlo como un zip, he intentado repararlo pero dice que está bien el archivo.
Lo he abierto con el dependency walker y he visto que da un warning: at least one module has an unresolved import due to a missing export function in a delay-load dependent module.
Así que el programa con el que haces los instaladores debe estar mal configurado o depende indirectamente de alguna dll que no tenemos instalada en el sistema y por eso no suelta windows la ventara de error típica de que falta tal dll.
en teoria aparece la ventana de msdos, esta unos segundos, desaparece y por un rato no aparece nada, y luego aparece la ventana del instalador, quizas falte alguna dll si eso no sucede.
comprobado y solucionado... el maldito crosscompiler de windows sobre linux, esta dando problemas que desconozco en el exe generado, ya tengo el exe generado en windows y ahora solo añado los archivos y compilo la parte en bennugd desde linux y funciona ahora de maravilla.
en el proximo release vuelve el instalador...
quizas me gustaria un panel un poco mas chico, de 640x300 o algo mas onda 16:9, si alguien se anima...
gracias.
;D, no me he enterado del proceso que haces, pero me alegra que se haya solucionado el problema :D
el instalador es... pequeño exe con una mochila arriba que contiene un comprimido con la distribucion bennugd y un programa (setup) hecho en bennugd que se encarga de la instalacion... el pequeño exe se encarga de crear las carpetas temporales necesarias para la instalacion, descomprimir bennugd, ejecutar el setup, setear los path del sistema, y luego borrar todas las carpetas temporales.
:D, un poco guarrete eso de crear carpetas temporales, pero eficaz :D.
Los instaladores como innosetup (http://www.jrsoftware.org/isinfo.php) hacen algo parecido pero como el "pequeño exe" no es tan pequeño sino que directamente es el GUI instaldor pues no necesita de archivos temporales, él mismo inserta donde hace falta los archivos comprimidos, modifica las claves del registro necesarias, modifica los archicos .ini necesarios y modifica las variables del sistema necesarias :D. Quizás sería una gran opción para el instalador oficial de bennu en windows, es gratuito.
La ventaja que le veo al tuyo, es que si el "pequeño exe" lo compilas en linux o cualquier otro SO, ya tienes instalador para ese otro SO sin tocar nada mas :D.
Quote from: DCelso on November 28, 2010, 06:26:16 PM
:D, un poco guarrete eso de crear carpetas temporales, pero eficaz :D.
Los instaladores como innosetup (http://www.jrsoftware.org/isinfo.php) hacen algo parecido pero como el "pequeño exe" no es tan pequeño sino que directamente es el GUI instaldor pues no necesita de archivos temporales, él mismo inserta donde hace falta los archivos comprimidos, modifica las claves del registro necesarias, modifica los archicos .ini necesarios y modifica las variables del sistema necesarias :D. Quizás sería una gran opción para el instalador oficial de bennu en windows, es gratuito.
La ventaja que le veo al tuyo, es que si el "pequeño exe" lo compilas en linux o cualquier otro SO, ya tienes instalador para ese otro SO sin tocar nada mas :D.
muchacho, la idea de esto es que el instalador este escrito en BennugD, el pequeño exe solo se encarga de empaquetar todo incluidas las dlls, y no es guarro, es un metodo muy usado, incluso por el innosetup.
Todos los instaladores (o casi) que son 1 solo archivo de instalacion (el innosetup entre ellos) se descompactan en la carpeta %TEMP% y luego ahi ejecutan el instalador real, como lo hace BennuGD.
si no me crees instala algo y mientras lo hace, verifica la carpeta %TEMP% de tu sistema y veras que hace lo mismo.
Sí?, no se, si lo dices tu, lo creo, pero juraría que era una de las ventajas que decía el autor que tenía éste sobre otros.
;)
ya subi los archivos a la pagina, pero falta actualizar el portal que se ve no actualiza automaticamente, asi que no podran ver las descargas por ahora.
entre la novedades:
- se corrigio la colision con el mouse.
- ahora la version caanoo usa la SDL del firmware (hay que probar si se puede usar la mixer del firmware y que suenen los ogg)
- el instalador de windows ya funciona correctamente nuevamente, y hay unas cuantas mejoras, ya no arruina las variables path y no es necesario reiniciar el windows una vez terminada la instalacion, tambien se cambio la forma en que se instalan los archivos, ahora es solo todos los archivos dentro de la carpeta de instalacion, para simplicar todo el tema del instalador y de tantos paths a setear.
- otras cosas que ahora no recuerdo, hay que revisar el log del svn si quieren saber que mas cambios se incluyen.
bueno, esperemos que pixel active las descargas y ya lo podran bajar
saludos.
Listo :D
Sigo viendo la 181 :o
si, eso mismo noté yo, pero en www.bennugd.org en descargas encontrarás la RC19(r182)
ahi quedo...
bien muchachos, difundan la palabra... ha salido nueva version bennugd! :D
Vaya, pero yo quiero la ultima del src, la que arregla el port para Caanoo. Tengo que llamar al de la vara ?
(http://4.bp.blogspot.com/__pH2MZ9R3ok/S37QjmhV5CI/AAAAAAAAAQI/8IWmRHpPsMs/s400/t%C3%ADo+la+vara.JPG)
es la ultima free... vos te drogas?
LOL XD
Quote from: SplinterGU on November 29, 2010, 08:03:57 PM
es la ultima free... vos te drogas?
;D ;D ;D ;D (jajajajajaja ¡me causó risa en serio!)
189???
la ultima es 182.
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=1626)
un error de tipeo al ponerle nombre a las release... pero a ver... si sacamos unos binarios son los ultimos...
gracias por avisar.
ya decía yo que solu hubera una revisión de diferencia entre los dos últimos binarios :D.
Por cierto, va a soportar pronto bennuGD SDL 1.3?
Yo flipo la verdad xDDDD
Llevas semanas actualizando versiones, y es un 'mero' error de tipeo xDDD
Encima como si no importará que ponga 182 en lugar de 189, igual te pasas al Debian 5, o al Windows 3.1 como si nada xDDD
jajaja, tenes razon, no nos crucifiques, es que ahora con el nuevo sistema de subir los archivos me confundi... el sistema se encarga de renombrarlos.
esperemos que pixel los corrija.
probaron el instalador de windows?
y free, la version de caanoo, podrias comentarme como funciona? intentar tambien eliminar la sdl_mixer y probarla?
es que aun no tengo memoria para probar la caanoo.
gracias
Gracias amigos. De momento no he podido probar en Caanoo la nueva version (aunque os machaque pidiendo a gritos la release xDD).
Es finde va ser Bennu a tope, pero esta semana el curro me ocupa todo el tiempo.
sin apuro... gracias!
Chicos, urgencia!!!!
Teneis problemas con la ultima versión compilada de BennuGD para Windows (sólo he probado de momento aqui).
Dice que no encuentra la libreria mod_sound.dll apesar de que existe en el directorio (estoy compilando un juego compilado de antes, con esta nueva version, toda la estrutura es la misma, sólo he puesto las dll's de la nueva version).
Me imagino que es por los cambios de la SDL y de su actualización en el apartado sonoro (por el tema de Caanoo).
Más urgencias!!!!!
He cambiado el runtime en la Caanoo y he probado el juego que ya habia sacado para Caanoo, el Skull (antes tenia el runtime r181 y ahora el r189).
He probado tambien las versiones de Wiz de Geca Blaster 2 y de Art Shot en la Caanoo:
Empiezo por lo bueno:
- Ya funciona el joy tirando de la SDL del firmware
(lo que es bueno, con el mapeo que tenia para Wiz todo funciona igual con Caanoo y no tengo que tocar nada en los joys).
#!/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../bgd-runtime
PATH=$PATH:../bgd-runtime
echo 2 > /proc/cpu/alignment
....
- Lo malo:
- Todos los juegos van a 30% más lentos que antes
(ocurre algo similar a lo que le pasa a Drumpi con el port a Gp2x para el firm oficial)
- La musica sigue sin funcionar bien (tipos de ficheros que te comentaba en el test de sonido)
Tambien es cierto que yo uso el firmware anterior + el fix que pusiste aqui (no he puesto el ultimo todavia y no tenia intenciones de hacerlo).
Es urgente, una pena que casi nadie pruebe en Caanoo, y hasta Splinter lo tiene abandonadillo, he tenido que ser yo a actualizar en openhandhealds....
Pero cuando se enteren que la velocidad va peor, se van a moskear :(
Quote from: FreeYourMind on December 05, 2010, 09:44:35 PM
Chicos, urgencia!!!!
Teneis problemas con la ultima versión compilada de BennuGD para Windows (sólo he probado de momento aqui).
Dice que no encuentra la libreria mod_sound.dll apesar de que existe en el directorio (estoy compilando un juego compilado de antes, con esta nueva version, toda la estrutura es la misma, sólo he puesto las dll's de la nueva version).
Me imagino que es por los cambios de la SDL y de su actualización en el apartado sonoro (por el tema de Caanoo).
usaste el instalador previo borrado de la carpeta de la version anterior?
Quote from: FreeYourMind on December 05, 2010, 10:02:23 PM
Más urgencias!!!!!
He cambiado el runtime en la Caanoo y he probado el juego que ya habia sacado para Caanoo, el Skull (antes tenia el runtime r181 y ahora el r189).
He probado tambien las versiones de Wiz de Geca Blaster 2 y de Art Shot en la Caanoo:
Empiezo por lo bueno:
- Ya funciona el joy tirando de la SDL del firmware
(lo que es bueno, con el mapeo que tenia para Wiz todo funciona igual con Caanoo y no tengo que tocar nada en los joys).
#!/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../bgd-runtime
PATH=$PATH:../bgd-runtime
echo 2 > /proc/cpu/alignment
....
- Lo malo:
- Todos los juegos van a 30% más lentos que antes
(ocurre algo similar a lo que le pasa a Drumpi con el port a Gp2x para el firm oficial)
- La musica sigue sin funcionar bien (tipos de ficheros que te comentaba en el test de sonido)
Tambien es cierto que yo uso el firmware anterior + el fix que pusiste aqui (no he puesto el ultimo todavia y no tenia intenciones de hacerlo).
Es urgente, una pena que casi nadie pruebe en Caanoo, y hasta Splinter lo tiene abandonadillo, he tenido que ser yo a actualizar en openhandhealds....
Pero cuando se enteren que la velocidad va peor, se van a moskear :(
tenes que usar el nuevo firmware...
ya dije que no tengo SD para probar la caanoo, estoy esperando me lleguen las que compre, hasta que no lleguen no podre probar ni arrancar con el port de la dingoo...
ya lo avise hace unas semanas...
No uso instalador, eso es para los lamers, yo uso el rar, yo substituyo todas las dll's por las nuevas (todo bennu).
Me he fijado que ahora en el rar habeis puesto todo sin carpetas...
No he hecho el update de Caanoo, de todas formas falta compilar los dcb's con la 189 para ser si la velocidad se arregla, de todas formas si esto ocurre habra que avisar a los usuarios del firmware antiguo.
De momento me resisto a actualizarlo por miedo a joder la consola.
A ver si Pixel ya lo ha hecho.
Quote from: FreeYourMind on December 05, 2010, 10:30:19 PM
No uso instalador, eso es para los lamers, yo uso el rar, yo substituyo todas las dll's por las nuevas (todo bennu).
Me he fijado que ahora en el rar habeis puesto todo sin carpetas...
No he hecho el update de Caanoo, de todas formas falta compilar los dcb's con la 189 para ser si la velocidad se arregla, de todas formas si esto ocurre habra que avisar a los usuarios del firmware antiguo.
De momento me resisto a actualizarlo por miedo a joder la consola.
A ver si Pixel ya lo ha hecho.
bueno, ahi esta tu problema, necesitas correr el instalador o actualizar la variable path, y borrar los viejos archivos.
con compilar los dcbs no te va a ayudar en nada... necesitas actualizar el firmware o usar la vieja version del runtime, lamentablemente GPH cambio cosas del kernel que requirieron un cambio en los clocks de temporizacion... tanto esto como que hay que usar el nuevo firmware se explico cuando se hizo el cambio...
viejo firmware = viejo runtime
nuevo firmware = nuevo runtime
desconozco si hay forma de conocer la version del kernel, hasta no poder usar la caanoo no podre ver nada del tema...
ahhh... te iba a decir, esta version va mas rapido que la version anterior, pero necesitas el nuevo firmware...
sonidos y demas, como ya te dije cuando subi los binarios, no he podido compilar ni probar la mixer... y tambien te pedi que pruebes con la del firmware eliminando la que esta en el runtime... si algun sonido no funciona en el firm oficial, no puedo hacer nada... todo el soporte de sonido depende de la mixer, no de bennugd... cuando tenga la memoria intentare compilar la mixer con soporte de todos los formatos, pero me parece que no compilan todos los formatos en caanoo.
Hello, yo actualicé ambas consolas sin problemas, la dev y la final, desde cualquier versión xD
Quote from: SplinterGU on December 05, 2010, 11:07:47 PM
Quote from: FreeYourMind on December 05, 2010, 10:30:19 PM
No uso instalador, eso es para los lamers, yo uso el rar, yo substituyo todas las dll's por las nuevas (todo bennu).
Me he fijado que ahora en el rar habeis puesto todo sin carpetas...
No he hecho el update de Caanoo, de todas formas falta compilar los dcb's con la 189 para ser si la velocidad se arregla, de todas formas si esto ocurre habra que avisar a los usuarios del firmware antiguo.
De momento me resisto a actualizarlo por miedo a joder la consola.
A ver si Pixel ya lo ha hecho.
bueno, ahi esta tu problema, necesitas correr el instalador o actualizar la variable path, y borrar los viejos archivos.
con compilar los dcbs no te va a ayudar en nada... necesitas actualizar el firmware o usar la vieja version del runtime, lamentablemente GPH cambio cosas del kernel que requirieron un cambio en los clocks de temporizacion... tanto esto como que hay que usar el nuevo firmware se explico cuando se hizo el cambio...
viejo firmware = viejo runtime
nuevo firmware = nuevo runtime
desconozco si hay forma de conocer la version del kernel, hasta no poder usar la caanoo no podre ver nada del tema...
ahhh... te iba a decir, esta version va mas rapido que la version anterior, pero necesitas el nuevo firmware...
sonidos y demas, como ya te dije cuando subi los binarios, no he podido compilar ni probar la mixer... y tambien te pedi que pruebes con la del firmware eliminando la que esta en el runtime... si algun sonido no funciona en el firm oficial, no puedo hacer nada... todo el soporte de sonido depende de la mixer, no de bennugd... cuando tenga la memoria intentare compilar la mixer con soporte de todos los formatos, pero me parece que no compilan todos los formatos en caanoo.
Te estas liando Splinter, leeme bien, son 2 cosas distintas no las mezcles :)
La version de Windows falla al compilar, no tiene nada que ver con Caanoo, por favor revisalo.
Sobre la Caanoo, me habeis convencido, voy a actualizar al nuevo y espero que todo chute a la perfección, sonido incluido, sino vengo com mi primo de Zumosol xDDD
Por cierto ya que estamos.
Cuales pueden ser los motivos para que el prg no encuentre un modulo de los que se estan importando ?
Me refiero a que el modulo este bien compilado, con el nombre externo correcto, pero que siga saliendo el error de que no lo encuentra (como es el caso del mod_sound) ?
Acabo de compilar un modulo para Caanoo, y acabo de llevar esta desagradable sorpresa, no me localiza el modulo, pero lo he revisado todo, y el nombre esta correcto (al exportar las funciones).
Puede que te falte alguna librería de la que depende mod_sound (la sdl_mixer, o alguna de sus dependencias).
Si que esta, lo he mirado (recuerda que el la version rar de Bennu que me descargué de aqui, supuestamente la teneis completa).
Sobre mi modulo, puede ser una pista (aunque no creo que dependa de ningun modulo externo que me falte).
Ya he actualizado el firmware, ok, el sonido parece que ya chuta al 100%
Sobre la release para Windows, no localiza la mod_sound, porque por algun motivo la SDL_mixer que habeis puesto no la consigue cargar o da error interno, le puse la SDL_mixer antigua, y si pude compilar, pero logicamente ocurrio como la release anterior para Caanoo, donde la mayoria de los sonidos daban error al cargar.
Ya sabeis, hay que revisar la SDL_mixer, ahora mismo a los usuarios que se descarguen vuestra nueva versión no les va funcionar Bennu si usan sonidos.
nop, no estoy mezclando... te he comentado ambas cosas segun corresponde en cada punto.
a ver... si no usas el instalador debes incluir las dlls externas (que no se incluyen en el rar)... has como quieras, pero los paths han cambiado, si no usas el instalador entonces busca la opcion de que funcionen, pero la ultima version funciona bien en windows...
Pero que dll's externas ? Si hasta ahora todo se incluia en el rar (y la SDL_mixer tambien viene en el rar), y si dejais de hacerlo no tiene sentido, ya que deberian venir todas las dependencias (entiendo que estais acostumbrados a Linux, pero en Windows existe la buena practica de portabilidad de poner todo lo necesario con el juego).
Quote from: FreeYourMind on December 06, 2010, 01:17:07 PM
Pero que dll's externas ? Si hasta ahora todo se incluia en el rar (y la SDL_mixer tambien viene en el rar), y si dejais de hacerlo no tiene sentido, ya que deberian venir todas las dependencias (entiendo que estais acostumbrados a Linux, pero en Windows existe la buena practica de portabilidad de poner todo lo necesario con el juego).
diablos no se cuando empece a meter las dlls externas en el rar... bueno, ahi estan...
ya veo, el stripeado de symbolos en la SDL_mixer la ha corrompido... hay que copiar la vieja version de dlls externas...
voy a regenerar esos paquetes...
gracias.
actualizado, gracias!
karma!
Entonces en las descargas del rar 189 ya esta el nuevo ?
ya esta el nuevo, puedes probarlo a ver si ahora te funciona? gracias
Pero que distribuciones has actualizado ? Es que las fechas de los archivos son las mismas en el rar !
Quote from: FreeYourMind on December 06, 2010, 02:20:25 PM
Pero que distribuciones has actualizado ? Es que las fechas de los archivos son las mismas en el rar !
lo probaste?
alguien podria poner los pasos para actualizar a la ultima version ?
si te refieres a windows.
borra el directorio de instalacion de bennugd, entra en propiedades del sistema y ve a variables de entorno y quita todos los paths de bennugd en la variable PATH.
luego de esto, solo corre el nuevo instalador.
te refieres al instalador en tu firma splinter?
este:
http://betatester.bennugd.org/snapshot/bgd-1.0.0RC18(r181)-win32.exe
???
El de la página de descargas de la web, hombre.
a este
http://www.bennugd.org/node/2
gracias...
Lo siento pero hasta que no disponibilizeis la versión en rar no podré probarlo.
es que esto no es la version rar?
http://www.bennugd.org/downloads/bgd-1.0.0RC19(r189)-win32.rar
Si DCElso pero sigue teniendo las dlls antiguas (lo veo por fecha), y apesar de esto, lo volvi a probar, y sigue igual.
mierda, copien las dlls viejas y ya...
Pixel, podrias revisar si subo un archivo con el mismo nombre, si me lo acepta o deja el viejo?
Ya está arreglado.
funcionaba mal?
No lo sé xD
Pero ante la duda, si se sube un fichero nuevo, antes de colocarlo en su sitio borramos el que estuviera xD
Sigue el antiguo, no mirais las fechas de las dll's incluidas ?!
lo voy a volver a subir, pero quiero volver a probarlo antes de hacerlo, y con el ultimo upgrade del debien se me cago la VM, y no me deja desinstalar el puto vmware...
ya esta la version windows, regenerado, y vuelto a testear... ahora si funciona...
mil disculpas.
Actualizando, muchas gracias Juan! karma++
gracias, descargado y probado
antes no funcionaban las colisiones + size!=100 y ahora si me funciona.
saludos, y karma++ para splinter.
Muchisimas gracias por meterle dia a dia y mantener actualizando...Splinter presidente che!!! karma++
(http://www.sosgroso.com.ar/don.jpg)
subido al SVN (aunque necesite mas testing)
- char[] initialization fix
- full arrays copy support added
- glyph_set fix
- better error messages
Como siempre muerto de prisa xDDD
Da igual, alfinal el fix no me sirve de nada, cuando tengo que crear el array en el cuerpo dentro de if's... Pero bueno, me alegro por los fix para los demás usuarios que hagan copias de sus arrays.
muerto de prisa? hace casi 2 semanas que tengo el cambio esperando pruebas, pero tu estas ocupado con otras pruebas y esto realmente es muy importante, porque no solo se tratan de copias de arrays, se trata del manejo de todo tipo de dato, si algo sale mal... bueno, gracias por la ayuda con las pruebas... (ironic mode)
puf, los fix no son para solucionarte la vida a una persona, son para arreglar cosas que funcionan mal...
Yo no puedo estar en mil frentes, por esperar mas una semana tampoco se moria nadie....
Es curioso que digas eso, cuando tenemos que esperar siempre semanas o meses por los binarios, cuando sabes de sobra, que sólo 2 o 3 privilegiados se pueden compilar el codigo, y ni nos los pasan ;D
Ahora mismo corrijes Bennu en la r191 a toda prisa, pero despues por los binarios nos tenemos que tomar 3, 4 semanas trincado los dientes >:(
FreeYourMind, te quejas por quejarte man :\
Y de hecho, esos privilegiados son todos los que puedan instalarse herramientas básicas de complilación, que los Makefiles van muy bien :\
Diselo a mis portatiles, que se quejan siempre de todo cuando intento compilar cosas que me pasais, que supuestamente sólo le tengo que cambiar las rutas....
Quote from: DCelso on April 30, 2008, 04:56:01 PM
Sasto, aplicando las matemáticas escritas de toda la vida también da ese resultado :D.
Bueno se que no viene al caso pero me interesaba leer este hilo entero para enterarme de todo bien...y encotré un bug a DCelso que ya le tenia ganas,en plan sano no te mosquees, no se que matematicas has estudiado tú,pero las que he estudiado yo se aplican como una maquina,multiplicacions y divisiones se ejecutan antes que las sumas y restas.Si te lo enseñaron en la escuela de distinta forma entoces esque tenias un mal profesor de matematicas :P
15+3*5 =30 sea donde sea,de ahi que las matematicas también se use los parentesis.
Yo la verdad Splinter que las pruebas que realice yo con los chars eran muy basicas y parece que iban bien.
Aun asi estas haciendo un trabajo explendido no solo con bennugd windows/linux,ya con todas plataformas en general y es normal que lo quieras dar vida al asunto. Karma++
Quote from: FreeYourMind on December 15, 2010, 03:20:35 PM
Yo no puedo estar en mil frentes, por esperar mas una semana tampoco se moria nadie....
Es curioso que digas eso, cuando tenemos que esperar siempre semanas o meses por los binarios, cuando sabes de sobra, que sólo 2 o 3 privilegiados se pueden compilar el codigo, y ni nos los pasan ;D
Ahora mismo corrijes Bennu en la r191 a toda prisa, pero despues por los binarios nos tenemos que tomar 3, 4 semanas trincado los dientes >:(
me pone triste que me diga eso, porque me da la sensacion que no se entiende lo que representa lo que hago para el proyecto... voy a intentar comentar algunos puntos...
1) "Yo no puedo estar en mil frentes, por esperar mas una semana tampoco se moria nadie...."
el tiempo que le dedico al proyecto es tiempo que tengo libre cada tanto, que le robo al trabajo o a mi familia... cada uno de esos minutos los tengo que aprovechar al maximo, asi que no puedo esperar 2 semanas o 3, porque los cambios se me acumulan y luego algun eventual bug en ellos se hace una tarea imposible de resolver... y ni contar que uso el SVN como backup, no quiero perder nuevamente fuentes...
y demas esta decir que estar en el frente de probar las versiones "customizadas" de Caanoo o Wiz que genera DCelso, existiendo ya versiones oficiales de los mismos... no le veo sentido.
2) "Es curioso que digas eso, cuando tenemos que esperar siempre semanas o meses por los binarios, cuando sabes de sobra, que sólo 2 o 3 privilegiados se pueden compilar el codigo, y ni nos los pasan ;D
Ahora mismo corrijes Bennu en la r191 a toda prisa, pero despues por los binarios nos tenemos que tomar 3, 4 semanas trincado los dientes >:("
a menos que sean bugs criticos, no puedo andar poniendo binarios por cada cambio, por el simple hecho que muchas veces son pocas lineas de codigo y porque no quiero aguantarme a nadie diciendo que saco binarios como chorizos.
tambien te comento, que compilarlos es muy simple una vez con el entorno preparado, y la unica complicacion para preparar los entornos es compilar las librerias externas, que en cualquier caso no se necesitan compilar, se bajan los paquetes compilados y se ponen en el directorio, luego no es ciencia, configura + make, esta explicado muchisimas veces por todos lados en el foro.
ahora si vos empezas a tocar los makefiles, a queres usar el codeblocks, metiendo mano donde no hay que meterla, entonces eso es otra cosa...
tampoco podes compararme con Uds. diciendo que yo les pido pruebas y las necesito rapido, cuando yo soy 1 sola persona y Uds. cientos... una simple prueba, un minimo compromiso... no les estoy exigiendo nada, ni siquiera les exijo dinero a cambio de lo que hago (que una donacion de 1$ a 5$ no me desagrada para nada), una simple mano en hacer unas pruebas para beneficio de todo es lo unico que pido... vamos que creo que no es mucho.
Te entiendo Splinter, pero nunca he despreciado tu trabajo, si hablo así contigo es porque ya tenemos confianza para hacerlo, de lejos cuestiono tu trabajo.
Pero tienes que entender dos cosas tambien, nosotros tambien trabajamos (por lo menos yo y la mayoria de bennuseros), y tambien el tiempo se escasea, si te digo para esperar 2,3 semanas es porque por lo menos yo prefiero tener tiempo de probar y decirte que si funciona, que no probar y decirte que me va bien....
Sobre DCElso, creo que lo que hace por Bennu, es por pasion como la mayoria que estamos, y como tu mismo ya has dicho en ocasiones, hay cosas que motivan y otras no, por ejemplo ya han exisitido posibles cambios sujeridos para Bennu y no los quisiste hacer porque te aburria y no lo veias divertido de hacer, era mas bien una obligación, pues lo mismo ocurre con nosotros que usamos Bennu, ni siempre lo que hacemos nos resulta divertido, pero siempre intentamos ayudar a los demás del foro en sus pruebas.
Tu crees que me resulta divertido estar cambiando mis 2 sd's entre varias consolas de GPH para hacer varias pruebas, donde cada vez que lo hago tengo que cambiar el runtime y otros parametros ? Pues no, aún así lo hago por vosotros, ya que lo haceis tambien por mi.
creo que hay un grave error... nunca dejo de hacer algo en bennugd porque me aburre o porque no lo veo divertido... nada tiene que ver eso con mi trabajo en el proyecto... muchisimas cosas de las que hice, me hubiesen gustado no hacerlas... si hay algo que no hago en bennugd no es porque me aburra o no me resulte divertido, sino que porque no lo creo conveniente para el proyecto... muchas de las sugerencias que hacen al proyecto son para adaptar el lenguaje a sus actuales proyectos, y eso nunca puede ser asi, es el proyecto el que se tiene que adaptar al lenguaje, no al revez.
Quote from: SplinterGU on December 15, 2010, 02:11:41 PM
subido al SVN (aunque necesite mas testing)
- char[] initialization fix
- full arrays copy support added
- glyph_set fix
- better error messages
adelante----->>>> , continuemos ..... (recordad que es navidad!!!)
Gracias +karma
Perdona, Splinter, pero la versión "alpha" para test la pusiste hace como cinco días:
http://forum.bennugd.org/index.php?topic=1869.msg32989#msg32989
Yo aun no he tenido tiempo ni de pensarme en probarlo (y mira que lo tengo fácil, pero modificar los scripts de compilación me da pereza) :D :D :D
Nah, haré una prueba en cuanto pueda con los programas que tengo, con y sin compilación (para testear la compatibilidad de los DCB), aunque nunca hago nada "raro" (ya sabes, C style: todo a mano ;D).
Ya me conoces, soy reacio a los cambios de los programas ^^U
Aun así, muchas gracias por la nueva release :)
Quote from: DjSonyk on December 15, 2010, 03:39:55 PM
Quote from: DCelso on April 30, 2008, 04:56:01 PM
Sasto, aplicando las matemáticas escritas de toda la vida también da ese resultado :D.
Bueno se que no viene al caso pero me interesaba leer este hilo entero para enterarme de todo bien...y encotré un bug a DCelso que ya le tenia ganas,en plan sano no te mosquees, no se que matematicas has estudiado tú,pero las que he estudiado yo se aplican como una maquina,multiplicacions y divisiones se ejecutan antes que las sumas y restas.Si te lo enseñaron en la escuela de distinta forma entoces esque tenias un mal profesor de matematicas :P
15+3*5 =30 sea donde sea,de ahi que las matematicas también se use los parentesis.
Yo la verdad Splinter que las pruebas que realice yo con los chars eran muy basicas y parece que iban bien.
Aun asi estas haciendo un trabajo explendido no solo con bennugd windows/linux,ya con todas plataformas en general y es normal que lo quieras dar vida al asunto. Karma++
¿?, lo siento ni idea de que me hablas. bennu y yo ahí también vemos 30.
Creo que ya se por donde vas, a ver el operador asignación es distinto del operador igual. ¿Es eso a lo que te refieres?
Quote from: Drumpi on December 15, 2010, 07:12:11 PM
Perdona, Splinter, pero la versión "alpha" para test la pusiste hace como cinco días:
http://forum.bennugd.org/index.php?topic=1869.msg32989#msg32989
Yo aun no he tenido tiempo ni de pensarme en probarlo (y mira que lo tengo fácil, pero modificar los scripts de compilación me da pereza) :D :D :D
Nah, haré una prueba en cuanto pueda con los programas que tengo, con y sin compilación (para testear la compatibilidad de los DCB), aunque nunca hago nada "raro" (ya sabes, C style: todo a mano ;D).
Ya me conoces, soy reacio a los cambios de los programas ^^U
Aun así, muchas gracias por la nueva release :)
me perdi, que scripts de compilacion hay que modificar?
Los mios: compilo mediante scripts, lo que me ahorra la instalación de Bennu y me facilita la selección de versión a usar en cada momento :)
con reemplazar los binarios no tenes que modificar ningun script.
- Added 1bpp png support (save/load)
Quote from: SplinterGU on December 15, 2010, 10:42:33 PM
- Added 1bpp png support (save/load)
¡Anda!. Ni sabía que se pudiera hacer una png de 1bpp, gracias ;)
Yo me conformaba con sacar un PNG de 8/16/24 bits, pero mira, no sabía de los PNG de 1 bit. Gracias :)
Ya no sé ni cuantos karmas te he dado en los últimos tres días :D
Quote from: SplinterGU on December 15, 2010, 10:42:33 PM
- Added 1bpp png support (save/load)
Gran trabajo, gracias Juan! :)
OFFTOPIC: Splinter, tus dibujos en blanco y negro todo pixelado al pie de tus posts me son familiares, ¿De qué se trata?
Quote from: Windgate on December 23, 2010, 10:07:43 PM
OFFTOPIC: Splinter, tus dibujos en blanco y negro todo pixelado al pie de tus posts me son familiares, ¿De qué se trata?
:D :D :D
;) ;) ;)
son codigos de barra con mensajes... el que tenia antes tambien lo era, pero de otro tipo.
nuevo avance...
- Multiple sources can be compiled from command line (like #include), for example:
bgdc prg1.prg prg2.prg
this same that compile prg1.prg and do #include "prg2.prg" in prg1.prg
Wow! nice! :D
But I'd rather force the developer to create specific prgs to do that, so it will be more ordered!
Something like this:
wii.prg:
include "game.prg";
include "wiicontrols.prg";
windows.prg:
include "game.prg";
include "windowscontrols.prg";
English in english forum please, 'Advances, Diary of...'
Quote from: Windgate on December 23, 2010, 10:07:43 PM
OFFTOPIC: Splinter, tus dibujos en blanco y negro todo pixelado al pie de tus posts me son familiares, ¿De qué se trata?
http://es.wikipedia.org/wiki/Código_QR (http://es.wikipedia.org/wiki/C%C3%B3digo_QR)
Es el mismo texto que tenía antes, pero ahora en código QR.
En cuanto a la actualización, ya la teneis para Lucid en mi PPA; los paquetes se están copiando para Maverick y para Karmic y deberían estar listos en unos minutos.
esto es parte de un cambio importante que estoy pensando/intentando implementar, creo que algunos ya se estaran imaginando de que va.
Yo personalmente no tengo ni idea, pero ánimo con ello :)
Quote from: SplinterGU on January 21, 2010, 04:09:32 PM
...
------------------------------------------------------------------------
r126 | SplinterGU | 2010-01-15 19:29:46 -0300 (vie 15 de ene de 2010) | 2 lines
- path_find memory leak fix
...
A partir de esta versión ha dejado de funcionar mi ejemplo de path_find, pega un casque tremendo ahora que bloquea la recepción de eventos de ratón y teclado :(.
Fijo que me basaba en algun fallo anterior del path_find, sin saberlo. Tengo que revisar el ejemplo.
Quote from: SplinterGU on December 23, 2010, 10:27:32 PM
nuevo avance...
- Multiple sources can be compiled from command line (like #include), for example:
bgdc prg1.prg prg2.prg
this same that compile prg1.prg and do #include "prg2.prg" in prg1.prg
Sos grande Juan! :)
Yo no termino de entender hacia dónde va esto, pero bueno, ahí está (bueno, sí, para compilar según el SO).
¿En el ejemplo ese, prg2.prg se "incluiría" antes o después del código de prg1.prg? Lo digo por el orden de declaraciones y todo eso.
Por lo que entiendo del ejemplo, en primer lugar se debe indicar el .prg principal y luego los que contienen procesos que se invocan en el primero. De todas formas, supongo que ante la duda se puede seguir compilando con el tradicional #include dentro del .prg principal.
no, no, no tiene nada que ver con multiples operativos, no entiendo que quiso decir PiXeL.
ahora esto es como cualquier compilador, donde uno puede poner varios fuentes y generar un solo objeto binario, por linea de comando.
para modos de comparacion, es como hacer un #include, no prentende en lo mas minimo evitar el #include, por el contrario el uso de #include sera muy usado pronto, o por lo menos eso me gustaria.
Se podría hacer un script que decidiese el segundo prg que usar según el SO, que tuviese funciones con el mismo nombre (en ambos prg secundarios) pero código distinto según si se ejecuta en windows, linux o Wiz (por ejemplo, usando distintos comandos de sistema).
Quote from: Drumpi on December 25, 2010, 02:16:47 AM
Se podría hacer un script que decidiese el segundo prg que usar según el SO, que tuviese funciones con el mismo nombre (en ambos prg secundarios) pero código distinto según si se ejecuta en windows, linux o Wiz (por ejemplo, usando distintos comandos de sistema).
eso lo haces con OS_ID
bien, nuevas funciones, new_fnt o fnt_new.
sintaxis:
FNT_NEW (CHARSET, DEPTH)
FNT_NEW (FILE, GRAPH, CHARSET, WITDH, HEIGHT, FIRST, LAST, FLAGS)
donde CHARSET puede ser:
CHARSET_ISO8859
CHARSET_CP850
donde flags puede ser
NFB_VARIABLEWIDTH
NFB_FIXEDWIDTH
la mas interesante es la ultima, que nos permite a partir de un bitmap crear una fuente en memoria.
un codigo como el siguiente:
import "mod_video";
import "mod_wm";
import "mod_text";
import "mod_map";
import "mod_key";
private
a,b,c;
g;
font, font2;
begin
set_mode(640,480);
g = png_load("font.png");
font = fnt_new(0,g,CHARSET_ISO8859,16,16,0,255,0);
write_int(font,0,0,0,&a);
write_int(font,0,20,0,&b);
write_int(font,0,40,0,&c);
write(font,0,60,0,"hello world!");
write_int(0,320,0,0,&a);
write_int(0,320,20,0,&b);
write_int(0,320,40,0,&c);
write(0,320,60,0,"hello world!");
font2 = fnt_new(0,g,CHARSET_ISO8859,16,16,0,255,1);
write_int(font2,0,100,0,&a);
write_int(font2,0,120,0,&b);
write_int(font2,0,140,0,&c);
write(font2,0,160,0,"hello world!");
while( !key( _ESC ) && !exit_status )
a++;
b--;
c*=2;
if ( c == 0 ) c = 1; end
frame;
end
end
y un bmp como el siguiente:
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=1699)
produce una salida como la siguiente:
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=1701)
tambien se soportan bitmaps verticales de 1 sola fila o de 1 sola columna de fonts.
espero sea de su agrado.
buenísimo, te vas a tapar en karmas xD
¡Eres mi semiDiooooooooos! ;D
¡KARMA!
¡Genial! Gracias.
Impresionante, muchísimas gracias Juan. Karma up!
Fantastico!!! Yo tenia un sistema interno para escribir fuentes a traves de imagenes guardadas en el fpg (fuentes de imagenes), con esto ya veo que no lo voy a necesitar :)
Karma!
me alegro que les haya gustado...
ahora estoy trabajando en un cambio y mejora muy importante... y luego de esto me pongo con el port de dingoo... antes de continuar con el plan de trabajo...
si yo no hago publico el plan de trabajo es porque me gusta sorprenderlos...
Y a nosotros que nos sorprendas :D
fix al sistema, para que ahora permita poner accesos a arrays de structuras sin poner [], solo se podra realizar para arrays de structuras y al primer elemento.
esto es valido
scroll.camera
scroll[0].camera
esto no es valido para acceder al address:
scroll
para acceder al mismo como un puntero, lo correcto es
&scroll
&scroll[0]
¡Uau! Geniales las funciones de los FNT, ahora sí que se pueden personalizar el tema de las fuentes.
¿Los flags de los charsets modifican de alguna manera el orden en el que se leen los caracteres del mapa o se ordenan en el FNT o es sólo para indicarlo en el fichero FNT de salida?
Bueno, karma++... y espero que esto no sea una inocentada :D
...y a la espera de nuevas sorpresas ;D
usa el charset, no es solo en la salida.
- Blitter fix
¿Taducción please?
Según la wiki Blitter es un chip de gráfico dedicado a la transferencia de memoria.
¿Que dices que has arreglado? ;D
es la parte del motor encargada de dibujar en memoria (video o de un mapa)
Me olía algo de eso.
!Muchas gracias Splinter! ¡Ala! ¡Karma!
:)
gracias.
¿Está subido al SVN? Estaba mirando código y creo que me hará falta en un futuro (espero que no muy lejano).
que cosa?
Los cambios de la libblit.
si, drumpi, ya estan.
sip, y la última versión que he compilado para GP2X tb los trae ya. :D
- Optimize memory used for strings in compilation
- Fix max sources files in debug information (before 256, now 4093)
- Fix dcb version detection
- Several improvements in the core
- Better debug info messages
- Compilation warnings now are disabled by default
- New lib system, now can be possible build dcl libraries
Bien, por fin lo tengo... me ha costado un buen trabajo...
el cambio del que hablaba se trata de un nuevo sistema con el cual es posible crear librerias para bennugd a nivel dcb.
esto es, dcbs que aportan funciones escritas en codigo bennugd.
esto nos permite liberar funciones de usuario sin necesidad de liberar codigo, asi sea por seguridad o porque queremos tener todo mas prolijo y ordenado, o simplemente porque no queremos compartir codigo.
si bien estos nuevos archivos .dcl no son mas que .dcb, pero tienen alguna que otra pequeña modificacion para hacer posible esto.
ejemplos de uso:
para crear una libreria, vamos a tomar el ejemplo de key_event.lib.
solo haremos:
bgdc --libmode key_event.lib
esto nos generara un bonito key_event.dcl, el cual luego utilizaremos en nuestros proyectos.
ahora, estos dcl tienen una limitacion, no contienen constantes ni tampoco contienen defines, por ende necesitamos un .h como el siguiente (key_event.h):
#ifndef __KEY_EVENT_LIB
#define __KEY_EVENT_LIB
#define _key_pressed 0
#define _key_down 1
#define _key_up 2
#define _key(k,ev) ((ev==_key_down)?( _key_state[ k ][ _key_use ] && !_key_state[ k ][ _key_use ^ 1 ] ): \
(ev==_key_up )?( !_key_state[ k ][ _key_use ] && _key_state[ k ][ _key_use ^ 1 ] ): \
( _key_state[ k ][ _key_use ]))
#endif
NOTA: no se deben declarar las funciones que existan en la lib si la estamos linkeando, ya que sino dara error. Pero si es una funcion que pensamos usar como externa y no la estamos linkeando en ese momento (generar otra dcl que usara una dcl), si conviene declararla para evitar conversiones raras.
ahora para compilar nuestro programa usando la libreria previamente generada, hacemos:
bgdc -L key_event.dcl key_event_test.prg
esto nos generara nuestro dcb de toda la vida, pero incluyendo todas las funciones de la libreria.
espero que les haya gustado y empiecen a liberar y compartir cosas usando este metodo.
hoy durante el dia prometo generar release binaria.
¡Muchas felicidades, Splinter! ¡Vaya regalazo de año nuevo!.
Voy a subir el paquete actualizado a mi PPA.
Impresionante, gran trabajo Juan. Esperamos los binarios con los brazos abiertos ;D
Gracias juan, espero que no estropee el espirito libre de Bennu, un gran update.
Mmmm, esto podría usarlo para mi motor de tiles, genial. Karma.
Aunque claro, la idea era que se tuviese el código para modificar el proceso tile o realizar mejoras al propio motor según se necesitase ^^U
Quote from: FreeYourMind on January 04, 2011, 11:56:24 AM
Gracias juan, espero que no estropee el espirito libre de Bennu, un gran update.
yo espero que mejore el espiritu colaborativo de muchos que les gustaria colaborar con funciones o engines o lo que sea, pero no lo hacen porque no quieren compartir el codigo...
incluso podria dar paso a comercializar librerias escritas en bennugd, por ejemplo, un gui pago, un motor de tiles, funciones de encripcion, etc.
Quote from: Drumpi on January 04, 2011, 01:46:36 PM
Mmmm, esto podría usarlo para mi motor de tiles, genial. Karma.
Aunque claro, la idea era que se tuviese el código para modificar el proceso tile o realizar mejoras al propio motor según se necesitase ^^U
se pueden mejorar o agregar funciones a una libreria, creando otra nueva que usa la que ya esta cerrada, tipo wrapper.
genial, karma++
vamos a tenerles que hacer algunos cambios a nuestros ides a la hora de compilar... je je
Esto me cae genial para gui_so, donde hay funciones que no me gustaría que fueran modificadas como escanea (una pequeña modificación posiblemente desestabilice el programa)..
saludos
Opino lo mismo ;D
Splinter, genial, karma mas mas, siempre sorprendiéndonos :D, para cuando soporte de clases? :D.
odio las clases... desde lo mas profundo de mi ser...
:o, tonces descartao pa siempre :D
no para siempre, pero no a corto plazo.
nueva version binaria liberada con todos los fix de las ultimas semanas/mes.
:o asi que esto era jojjojo
Muy bien, como dijo prg, ahora toca repensar como hacer las cosas más modulares, de modo de reutilizarlas más fácilmente.
Me gusta, karma++
y karma-- por tu odio a las clases jajajajajaja
noooo, mentira :P
Quote from: FreeYourMind on January 04, 2011, 11:56:24 AM
Gracias juan, espero que no estropee el espirito libre de Bennu, un gran update.
No lo creo, al contrario, siempre puedes pasar el código fuente junto a tus librerías, de hecho lo deja más ordenado: modifícalo bajo tu propio riesgo, pero si quieres el original, ahi estará el .dcl
QuoteNo lo creo, al contrario, siempre puedes pasar el código fuente junto a tus librerías, de hecho lo deja más ordenado: modifícalo bajo tu propio riesgo, pero si quieres el original, ahi estará el .dcl
Estoy completamente de acuerdo.. je je. a descargar y probar
Quote from: SplinterGU on January 04, 2011, 05:43:46 PM
nueva version binaria liberada con todos los fix de las ultimas semanas/mes.
dónde está la versión?
la busqué acá y no veo nada del 2011
http://betatester.bennugd.org/snapshot/?C=M;O=D
pues como las últimas veces, no está en su firma sino en la página principal de bennu, en la que parece ser que nadie entrais :D
http://www.bennugd.org/node/2
¡KARMAAAAAAAAAAAAAAAAAA!
Gracias Splinter por el nuevo binario.
Cada cual se alegra de lo que más le hace falta. ;D
Que conste que yo pienso liberar todo lo que haga. :D
Y las dcl me parece muy buena idea para hacerte tus propias librerias bien ordenaditas.
(Y no sé porque que me huelo que una dcl se puede descompilar). 8)
Quote from: Fede on January 04, 2011, 08:47:13 PM
¡KARMAAAAAAAAAAAAAAAAAA!
Gracias Splinter por el nuevo binario.
Cada cual se alegra de lo que más le hace falta. ;D
Que conste que yo pienso liberar todo lo que haga. :D
Y las dcl me parece muy buena idea para hacerte tus propias librerias bien ordenaditas.
(Y no sé porque que me huelo que una dcl se puede descompilar). 8)
si podes descompilar la dcl, entonces podes descompilar un dcb.
y si es asi, pasa el programa porque yo no logro hacerlo.
Quote from: DCelso on January 04, 2011, 06:57:26 PM
pues como las últimas veces, no está en su firma sino en la página principal de bennu, en la que parece ser que nadie entrais :D
http://www.bennugd.org/node/2
ahh
je je
perdón ::)
Pongo un resumen de los cambios de la version binaria liberada:
- char[] initialization fix
- full arrays copy support added
- glyph_set fix
- better error messages
- Added 1bpp png support (save/load)
- Multiple sources can be compiled from command line (like #include)
- new fonts functions, new_fnt or fnt_new.
syntax:
FNT_NEW (CHARSET, DEPTH)
FNT_NEW (FILE, GRAPH, CHARSET, WITDH, HEIGHT, FIRST, LAST, FLAGS)
where CHARSET can be:
CHARSET_ISO8859
CHARSET_CP850
where flags can be:
NFB_VARIABLEWIDTH
NFB_FIXEDWIDTH
The most sexy function is the last one [ FNT_NEW (FILE, GRAPH, CHARSET, WITDH, HEIGHT, FIRST, LAST, FLAGS) ], this function allow us create font from maps loaded in memory.
- Video blitter crash fix
- Optimize memory used for strings in compilation
- Fix max sources files in debug information (before 256, now 4093)
- Fix dcb version detection
- Several improvements in the core
- Better debug info messages
- Compilation warnings now are disabled by default
- New lib system, now can be possible build dcl libraries.
Ni en sueños decompilareis un dcb xDDD
Quote from: FreeYourMind on January 04, 2011, 11:38:49 PM
Ni en sueños decompilareis un dcb xDDD
no seria posible, porque llevaria mucho trabajo y dependeria de la version del bgdc, y si yo cambio algo en el bgdc, ya el decompilador no serviria, necesitaria upgrade y asi podria ser eternamente.
aun asi, hay cosas que quizas podrian ser dificiles de detectar.
Lo de decompilar el BCD me recuerda a aquella vez que Pixel se puso a trastear en el DCB de Venturer y casi descubre el huevo de pascua que tiene. Encontró uno, pero el que lleva el intérprete me lo guardo para el posible juicio por su uso ilícito :D :D :D
Yo de clases no entiendo mucho: sé que son una serie de funciones públicas y otras privadas para manejar "algo" (ya sea una lista enlazada, una imagen...) y dejarlo encapsulado, de forma que sólo se pueda acceder usando sus propias funciones, lo cual beneficia el orden, la portabilidad y la actualización del código (no sé, como las funciones de acceso a los textos en bennu).
claro que se puede interpretar el dcb y ver que hace, como se puede interpretar un asm... pero de ahi a hacer un decompilador hay un paso gigantesco.
- subida version con fix, que corrije el tema de que las funciones eran consideradas process
Quote from: SplinterGU on January 05, 2011, 01:10:23 AM
- subida version con fix, que corrije el tema de que las funciones eran consideradas process
¿Esto no afecta las librerias y modulos importados verdad?
Justo acabo de subir el binario de mi juego y las librerias de windows a mi mediafire con la version anterior (sin fix), ojalá me salve de recompilar y resubir :D
si no usas dcl no hay problema.
Quote from: FreeYourMind on January 04, 2011, 11:38:49 PM
Ni en sueños decompilareis un dcb xDDD
Nunca digas nunca jamás. ;D
Bajando la nueva release, muchas gracias Juan. karma up!
Señores fede & free: su chat lo he separado a otro tema.
Si quereis hacer un offtopic teneis una sección para ello.
Y no se permite insultar a todas las mujeres del mundo, especialmente las peruanas. Esto va por ti free, ya que varias personas han dado un toque sobre ese mensaje.
Frenad, y hablar de lo que toca aquí. Pa otras cosas MasterC... Offtopic
Quote from: FreeYourMind on January 06, 2011, 10:10:35 AM
Mi último offtopic.
Si me puedo pillar novia, gorda, analfabeta, sin dientes, peruana, y infiel, si, me creo que no la tengo porque no quiero, tienes razón xDDD
Un usuario se ha quejado de que le parece despectiva la forma en la que dices "peruana", Free.
La verdad es que los últimos posts de la conversación que te traes con Fede son un poco chungos y no vienen mucho a cuento. Cortaos un poco, anda.
Vaya, no era mi intención entrad en temas raciales, mis disculpas a los visitantes ocultos que se han sentido ofendidos, pero vamos, es que nos sentimos tan a gusto que a veces nos olvidamos que mas gente nos mira :D
Tema cerrado.
- Subidos un par de fix que afectan al compilador y al runtime
estoy generando los binarios.
subida la nueva version fixeada...
por favor, esparcid la noticia.
Entendido Juan, actualizando mi Bennu, de nuevo muchas gracias. :)
Gente hay que volver a bajar la última version, que el servidor no la actualizaba bien.
justo estaba buscando este hilo...
estoy por subir nueva version caanoo, que corrije el problema de diferentes velocidades entre distintas versiones de firmware.
solo subire version caanoo.
la maldita version dingux no esta queriendo generar las .so
diablos!
¡Animo Splinter!
Yo no tengo dingoo pero estoy loco por pillarme una. ;D
Besitos.
Quote from: SplinterGU on January 09, 2011, 05:27:21 AM
la maldita version dingux no esta queriendo generar las .so
diablos!
Te lo dijé en su día, compila Bennu con su SDK oficial nativo, te va ser mas fácil de lo que piensas,incluso yo consegui compilar cosas para el y encima que si lo logras ya no necesitas versión Dingux ya que funcionará en cualquier Dingoo, y de esta forma, pensando que vas por el camino más fácil, sólo conseguiras rular Bennu en un numero limitado de Dingoo's cuyos dueños han instalado Dingux, pero hay mucha gente que se compra la consola y no tiene ni idea de como ponerle Dingux.
el SDK nativo me parece que no tiene SDL, por lo menos no lo vi... ya del vamos es una mierda conseguir el toolchains, el SDK que encontre nativo y oficial no tiene SDL.
asi que para nada sera facil.
el camino mas facil? puf, muchacho, no se justifica el tiempo que se perdera en el port nativo con algo de lo que no se saca ni 1 centavo.
ademas, no te preocupes que me voy a cargar el sistema de configure en dingux...
si en dingoo nativo existe SDL, y demas libs necesarias, avisame y lo compilo en nativo.
saludos.
Corregidme si me equivoco, pero por lo que lei x ahi parece que las nuevas versiones de la Dingo van a soportar el Dingux en forma standart (no se si eso implique la desaparición del modo nativo). La version SDL para modo nativo tiene todavia algunos problemas y la verdad que no he visto casi entusiasmo x ella, por lo menos en el foro la gente no hace muchas consultas sobre ella. Las mas de las cosas parecen salir para el Dingux y ahora que ha habido un acercamiento entre chinachip y boboo se supone que posteriores versiones del Dingux soportaran lo que x ahora solo hay en modo nativo (Radio y otros).
Pues que se acerquen tambien a Splinter.
Quote from: Transdiv on January 09, 2011, 04:03:31 PM
Corregidme si me equivoco, pero por lo que lei x ahi parece que las nuevas versiones de la Dingo van a soportar el Dingux en forma standart (no se si eso implique la desaparición del modo nativo). La version SDL para modo nativo tiene todavia algunos problemas y la verdad que no he visto casi entusiasmo x ella, por lo menos en el foro la gente no hace muchas consultas sobre ella. Las mas de las cosas parecen salir para el Dingux y ahora que ha habido un acercamiento entre chinachip y boboo se supone que posteriores versiones del Dingux soportaran lo que x ahora solo hay en modo nativo (Radio y otros).
no entendi... el modo nativo en bennugd no existe para dingoo.
En resumen me referia que probablemente te va ser mas facil hacer el BennuGD para el Dingux que para el modo Nativo (a pesar de la joda que significa instalar el Dingux para los usuarios comunes y silvestres).
ah, si, si, eso ya lo teniamos en claro...
Parece ser que el figura de Harteex portó la SDL al FW nativo de la Dingoo...
http://boards.dingoonity.org/dingoo-development/native-now-has-sdl/ (http://boards.dingoonity.org/dingoo-development/native-now-has-sdl/)
Me alegro Splinter de que finalmente consiguieras la Dingoo, no creo que te arrepientas de ello por lo práctica que es y por su precio... aunque creo que fue donada, mejor que mejor :-)
gracias karma!
si, fue donada.
Quote from: MythomizeR on January 10, 2011, 05:12:45 PM
Parece ser que el figura de Harteex portó la SDL al FW nativo de la Dingoo...
http://boards.dingoonity.org/dingoo-development/native-now-has-sdl/ (http://boards.dingoonity.org/dingoo-development/native-now-has-sdl/)
Me alegro Splinter de que finalmente consiguieras la Dingoo, no creo que te arrepientas de ello por lo práctica que es y por su precio... aunque creo que fue donada, mejor que mejor :-)
Si te fijas en las fechas desde el 26 de setiembre no hay ningun comentario sobre el tema. Como que me da la duda que ese port sea muy exitoso y de todos modos por lo que he vuelto a leer, el Dingux remplazara al Nativo (a menos claro que haya un doble boot)
ah, transdiv, no te habia entendido antes, dices que oficialmente reemplazaran al sistema nativo por dingux?
Quote from: SplinterGU on January 10, 2011, 08:46:18 PM
ah, transdiv, no te habia entendido antes, dices que oficialmente reemplazaran al sistema nativo por dingux?
No queda claro si van a coexistir de alguna manera, pero si, El soporte a Dingux sera oficial tanto con Chinachips como con la otra compañia que creaba los falsos dingoos.
www.dingux.com (http://www.dingux.com)
http://boards.dingoonity.org/other-game-systems/a-380!/?PHPSESSID=eisig4dlfv4e4liujnoa4sirg2 (http://boards.dingoonity.org/other-game-systems/a-380!/?PHPSESSID=eisig4dlfv4e4liujnoa4sirg2)
me doy por vencido con la version dingux...
compila todo, pero parece que tengo un sdk de mierda o el dingux que instale no va.
no se, la info de dingux es una recagada, no hay nada claro, todo desparramado por todos lados, el site de dingux es un blog donde no hay secciones how-to ni nada.
si alguien tiene entorno dingux, pediria que por favor intente compilar con la version del svn, que ya esta todo incluido para compilar.
si no hay avances, abandonare esto por unos dias, tengo albañiles en casa haciendome el baño nuevo y obligandome a levantarme a las 8:00am... estoy muerto de sueño...
Quote from: SplinterGU on January 11, 2011, 03:44:53 PM
me doy por vencido con la version dingux...
compila todo, pero parece que tengo un sdk de mierda o el dingux que instale no va.
no se, la info de dingux es una recagada, no hay nada claro, todo desparramado por todos lados, el site de dingux es un blog donde no hay secciones how-to ni nada.
si alguien tiene entorno dingux, pediria que por favor intente compilar con la version del svn, que ya esta todo incluido para compilar.
si no hay avances, abandonare esto por unos dias, tengo albañiles en casa haciendome el baño nuevo y obligandome a levantarme a las 8:00am... estoy muerto de sueño...
Hummm...... Algo de eso escuche; Por eso creo que habia hasta un proyecto opendingux. De todos modos hombre tomate el tiempo que quieras, que total, no te pagamos sueldo para hacer eso. Esperemos que con el soporte mas o menos oficial de las futuras versiones mejoren la documentación.
PD: Lo que si algunos usuarios van a llorar un poquito al escucharte esto.
gracias, lo importante es que compila... y me sirvio para mejorar el sistema de builds general.
olee, algo es algo, por cierto splinter, que va a pasar con mod_ffi?, actualmente no compila ni para atrás, y clarop casi nunca me acuerdo y me desespero hasta que veo ffi por algun lado y digo, olee, a eliminar de la compilación.
Y que modulo es ese con nombre tan raro ?
nu ze, exporta esto:
DLCONSTANT __bgdexport( mod_ffi, constants_def )[] =
{
{ "FFI_FIRST_ABI" , TYPE_DWORD , FFI_FIRST_ABI },
/* ---- Intel x86 Win32 ---------- */
#ifdef _WIN32
{ "FFI_SYSV" , TYPE_DWORD , FFI_SYSV },
{ "FFI_STDCALL" , TYPE_DWORD , FFI_STDCALL },
/* TODO: Add fastcall support for the sake of completeness */
#endif
/* ---- Intel x86 and AMD x86-64 - */
#if !defined(_WIN32) && (defined(__i386__) || defined(__x86_64__))
{ "FFI_SYSV" , TYPE_DWORD , FFI_SYSV },
{ "FFI_UNIX64" , TYPE_DWORD , FFI_UNIX64 }, /* Unix variants all use the same ABI for x86-64 */
#endif
{ "FFI_DEFAULT_ABI" , TYPE_DWORD , FFI_DEFAULT_ABI },
{ "FFI_LAST_ABI" , TYPE_DWORD , FFI_LAST_ABI },
{ NULL , 0 , 0 }
} ;
/* ----------------------------------------------------------------- */
/* Declaracion de funciones */
DLSYSFUNCS __bgdexport( mod_ffi, functions_exports )[] =
{
{ "FFI_DECLARE" , "ISSSS" , TYPE_INT , modffi_declare },
{ "FFI_CALL" , "IPP" , TYPE_INT , modffi_call },
{ 0 , 0 , 0 , 0 }
};
Pero depende de una libffi que no existe, quizas sea un wrapper para esto
http://sourceware.org/libffi/
algo relaccionado con cargar librerías externas
Quote from: DCelso on January 11, 2011, 05:22:50 PM
olee, algo es algo, por cierto splinter, que va a pasar con mod_ffi?, actualmente no compila ni para atrás, y clarop casi nunca me acuerdo y me desespero hasta que veo ffi por algun lado y digo, olee, a eliminar de la compilación.
esta eliminado de la compilacion, posiblemente ese modulo desaparezca para integrarlo directamente al core.
que es eso? pues nada, un modulo que permite hacer llamadas a cualquier dll estandard del operativo.
- se deja de usar openssl para las versiones consolas, y se usa libdes en su reemplazo, que es mucho mas liviana.
Quote from: SplinterGU on January 11, 2011, 07:07:38 PM
- se deja de usar openssl para las versiones consolas, y se usa libdes en su reemplazo, que es mucho mas liviana.
Esto puede provocar que vuelva a funcionarme el compilador de Windows (el cygwin tenía incompatibilidades con openssl) ;D
Lo que no significa que el port para firm oficial vaya a funcionar.
las version pc siguen con openssl, pero es tan facil como modificar el configure para que no lo haga y que compile la libdes.
Muy bien, lo haré para el próximo port de GP2X.
Por cierto, descansa, no te fuerces: si no puede ser, déjalo un par de días y verás cómo te viene la inspiración. Pero mientras tengas obras en casa, procura usar el tiempo libre que tengas en descansar, porque yo sé lo que es eso (obras+trabajo+poco dormir) y no rindes nada.
Sé que no me vas a hacer caso, pero bueno, es mi consejo.
gracias... intento hacerte caso. :)
new version released
Me he bajado la versión RC20f formato RAR de la web y no me vá.
Me dice:
D:\Bennu Mis Progamas\Bennu File Manager\Bennu File Manager: doesn't exist or is
n't version 7 DCB compatible
Presione una tecla para continuar . . .
¿Alguien más la ha probado?
Gracias y saludos.
Para cuando version funcional de Dingoo ?
puede ser que no funcione el empaquetado, ahora lo pruebo...
verificado, el bgdc esta corrupto, ahora lo corrijo, gracias.
fixeado, con la version dingoo estoy trabajando...
Ok. Ya va. :D
joya!
es que semi-automatice un poco mas la compilacion y generacion de instalables... y bueno, habia que depurar algo en los scripts.
empieza a funcionar el port dingux... el bgdc no va, pero el bgdi si... aunque no tengo joys y los timers revientan...
vamos a seguir probando.
se viene la version dingux
Ya tengo una version que empieza a funcionar en bennugd... tengo varios temas por resolver...
1) la SDL crashea al inicializar los TIMERS, no se si ya lo hara por defecto sola esta incializacion o voy a tener fallos
2) no se como mapea las teclas la SDL, por lo menos los cursores y el SELECT van como cursores y ESC... tengo que averiguar el resto.
3) probe el galaxian de wiz/caanoo, funciona bien, salvo el disparo, aun no se que tecla va. y a buena velocidad.
probe tambien una demo que hice de componer una pantalla con 512 procesos o 756, no recuerdo, y si que se pone pesado ahi.
bueno, nada de momento eso...
ahh, me olvide, bgdc no funciona en dingux, pero tampoco me molesta ni me interesa eso...
mas resultados...
- crashean los wav al cargarlos
- no me aparecen los fonts cargados con load_fnt (quizas se lo mismo que le pasa a joseba con los endians)
- el tema de las keys ya las tengo resueltas, el jkeys va fantastico ya.
eso es todo por ahora...
Quote from: SplinterGU on January 23, 2011, 06:28:36 AM
[...]
- no me aparecen los fonts cargados con load_fnt (quizas se lo mismo que le pasa a joseba con los endians)
[...]
DungixDingux es bigendian?
Bueno, si lo solucionas avisa de cómo, a ver si la solución vale para la Wii tb.
no se si es endian... lo voy a tener que verificar.
y para psp.
A mi me escama que un programa bennu que carga un gráfico con un load_png o load_pcs se compile en pc (para obtener el dcb) y al ejecutarlo en psp o wii se vean los colores invertidos.
Y en cambio un programa que usa las funciones new_map,map_clear, RBG para crear un gráfico dinámicamente se compile en pc y al ejecutarlo en psp vaya perfecto, es decir igual.
Parece fallo solo del mod_map y de como inserta la imagen en el sdl_surface, la funcion RGB inserta correctamente cada componente de color en su sitio bueno del sdl_surface.
Una cosilla...
En la última release, la función draw_box() no trabaja correctamente, pues el 2º y el 4º parámetro no trabajan de igual forma...
En concreto, si no recuerdo mal, en el segundo parámetro ('x2' o 'ancho', ahora no recuerdo qué indica, pero creo que es el 'ancho') sí que se incluye el píxel indicado a la hora de pintar, mientras que en el cuarto (el relativo a 'y2' o 'alto'), no...
¿No existe un hilo en concreto para indicar los bugs? para no poner esto aqui...
Quote from: MythomizeR on February 02, 2011, 05:46:49 PM
Una cosilla...
En la última release, la función draw_box() no trabaja correctamente, pues el 2º y el 4º parámetro no trabajan de igual forma...
En concreto, si no recuerdo mal, en el segundo parámetro ('x2' o 'ancho', ahora no recuerdo qué indica, pero creo que es el 'ancho') sí que se incluye el píxel indicado a la hora de pintar, mientras que en el cuarto (el relativo a 'y2' o 'alto'), no...
¿No existe un hilo en concreto para indicar los bugs? para no poner esto aqui...
es correcto, creo que es cosa del blitter
Quote from: MythomizeR on February 02, 2011, 05:46:49 PM
Una cosilla...
En la última release, la función draw_box() no trabaja correctamente, pues el 2º y el 4º parámetro no trabajan de igual forma...
En concreto, si no recuerdo mal, en el segundo parámetro ('x2' o 'ancho', ahora no recuerdo qué indica, pero creo que es el 'ancho') sí que se incluye el píxel indicado a la hora de pintar, mientras que en el cuarto (el relativo a 'y2' o 'alto'), no...
¿No existe un hilo en concreto para indicar los bugs? para no poner esto aqui...
fixeado, era la libdraw... fixee varias funciones... gracias por el aviso. karma.
Todo sea por el crecimiento del Bennu y de la buena comunidad que lo rodea ;-)
Bajando la RC20, como siempre, muchas gracias Juan. karma++
Gracias Splinter por el trabajo que te tomas siempre! karma++ y ++ ++ ...Saludos!
de nada, los 2 ultimos fix todavia no estan reflejados en los binarios.
dingux beta
http://www.fileserver.cc/zu26ddb4c7iq.html
no funcionan los wav... puede que haya algun problema con los timers...
los scripts son iguales a los de wiz o caanoo, salvo que hay que poner export delante de LD_LIBRARY_PATH y de PATH
agradeceria testing.
Yuuyuuuy, son las 6 de la mañana, despues de una noche llena de fiesta y sexo esto el la mejor noticia xDDD
Jua, jua, jua.
¡Y karma para Splinter!
Splinter pasanos un fichero de arranque para el menu dingux y un ejemplo de prueba please.
no hay ejemplos, pueden usar los de caanoo o wiz... para agregar al gmenu, hay que tocar un archivo de configuracion que no me acuerdo el path.
No hay forma....
Los otros juegos de dingux si que van pero Bennu no hay forma que arranque (no llega ni a llamar el bgdi), el error que me da no lo consigo visualizar porque se sale muy rápido de nuevo al menu. Tengo los mismos problemas que tue al probar el anterior port de Bennu a Dingux.
Te paso los scripts del dmenu que es el que utilizo:
En 'local\dmenu\themes\toddler\menu_game.cfg' tengo mi link al juego:
MenuItem Bennu
{
Icon = "res/games/alice.png"
Name = " Bennu"
Executable = "./shootem"
WorkDir = "/usr/local/games/shootem"
}
Despues el juego lo tengo en 'local\games\shootem' y el script de llamada es:
#!/bin/sh
cd `dirname $0`
SDL_NOMOUSE=1 ./bgdi shootem.dcb 1>stdout1.txt 2>stderror2.txt
(Aqui tengo todos los ficheros de bennu en la misma carpeta del juego).
Otra forma que tenia era esta:
#!/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../mipsel-linux
PATH=$PATH:../mipsel-linux
echo 2 > /proc/cpu/alignment
bgdi shootem.dcb
Aqui tengo el runtime en 'local\games\mipsel-linux'
El problema parece que hay algun problema al ejecutar ./shootem, el cual ni llega a ejecutar bennu, pero no se que error es
free, que dije yo al respecto de los PATH y LD_LIBRARY_PATH? (lo mismo para cualquier otra variable)
Quote from: SplinterGU on February 05, 2011, 04:36:19 AM
dingux beta
http://www.fileserver.cc/zu26ddb4c7iq.html
no funcionan los wav... puede que haya algun problema con los timers...
los scripts son iguales a los de wiz o caanoo, salvo que hay que poner export delante de LD_LIBRARY_PATH y de PATH
agradeceria testing.
por mas que tengas todos los archivos en la carpeta del juego, tenes que setear el LD_LIBRARY_PATH con export delante
el "echo 2 > /proc/cpu/alignment" me parece que no va, no me acuerdo
Lo he puesto así a ver si es correcto:
#!/bin/sh
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../mipsel-linux
export PATH=$PATH:../mipsel-linux
bgdi shootem.dcb 1>stdout1.txt 2>stderror2.txt
El error que pone creo que es este:
Read-only file system
Unable to open file system for writing
unable to execute command "./shootem"
O sea como te dijé, no llega ni a ejecutar, lo raro es que si funciona en los demás juegos del menu!!!!
He encontrado esto:
http://boards.dingoonity.org/dingux-general/error-booting-dingux/
Splinter el último binario para todas las plataformas (RC21 - r228) tiene el fix de la fuente del sistema (1px de separación) ?
Hay alguna nueva actualización prevista para este mes o principios del próximo ?
Lo pregunto porque quiero hacerle test de estabilidad, comprobación de memoria, etc a mi juego en breve y quedarme en una versión concreta de Bennu para todas las plataformas.
Puedes poner el script para dingux Splinter y la estrutura de carpetas ? Yo he ultrapasado el problema anterior pero ahora no me pilla el bgdi.
Sobre la compilación de Bennu, el makefile de windows (variables de compilación) que viene en el src, es para compilar la version de Bennu para windows estando en Linux ? Donde puedo descargar el compilador que tienes referenciado en el ? (el gnu-win)
Quote from: FreeYourMind on February 05, 2011, 04:45:21 PM
Lo he puesto así a ver si es correcto:
#!/bin/sh
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../mipsel-linux
export PATH=$PATH:../mipsel-linux
bgdi shootem.dcb 1>stdout1.txt 2>stderror2.txt
El error que pone creo que es este:
Read-only file system
Unable to open file system for writing
unable to execute command "./shootem"
O sea como te dijé, no llega ni a ejecutar, lo raro es que si funciona en los demás juegos del menu!!!!
esta intentando correr en un filesystem de solo lectura, quizas tengas proteccion en le memory, y entonces fallan los >... pero asi deberia funcionar.
Quote from: BoMbErLiNk on February 05, 2011, 08:10:13 PM
Splinter el último binario para todas las plataformas (RC21 - r228) tiene el fix de la fuente del sistema (1px de separación) ?
Hay alguna nueva actualización prevista para este mes o principios del próximo ?
Lo pregunto porque quiero hacerle test de estabilidad, comprobación de memoria, etc a mi juego en breve y quedarme en una versión concreta de Bennu para todas las plataformas.
si, tiene el fix.
en principio, salvo corregir bugs, no tengo pensado nada para este mes.
Quote from: FreeYourMind on February 05, 2011, 04:45:21 PM
Lo he puesto así a ver si es correcto:
#!/bin/sh
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../mipsel-linux
export PATH=$PATH:../mipsel-linux
bgdi shootem.dcb 1>stdout1.txt 2>stderror2.txt
El error que pone creo que es este:
Read-only file system
Unable to open file system for writing
unable to execute command "./shootem"
O sea como te dijé, no llega ni a ejecutar, lo raro es que si funciona en los demás juegos del menu!!!!
lo que mencionas del link es probable pasa si quitas o apagas la consola sin que haya hecho sync de los datos a disco (desconectar de forma segura)... con lo que se corrige pasandole un scandisk a la memoria, o fsck en linux... y tendras que volver a copiar los archivos mal copiados a la memoria...
a mi me ha pasado varias veces en linux.
eso también pasa por no expulsar (o desmontar) debidamente el pendrive, memoria o lo que sea usb . :D
Ya ma pasao mas de una vez con la memory stick de la psp. :D
Sip, saco siempre las tarjetas a lo bruto, pero en windows nunca tuve problema.
Lo que quiero es el script de ejecución tal cual, porque ya no me fio de nada. y respondeme a lo de compilar bennu tb :D
#!/bin/sh
unset OS_ID
## Is important set first bgd-runtime folder
LD_LIBRARY_PATH_BAK=$LD_LIBRARY_PATH
PATH_BAK=$PATH
export LD_LIBRARY_PATH=../bgd-runtime:$LD_LIBRARY_PATH
export PATH=../bgd-runtime:$PATH
### For use Wiz games on Caanoo uncomment the next lines
#OS_ID=8
#export OS_ID
echo 2 > /proc/cpu/alignment
for prg in *.prg; do
name=`basename $prg .prg`
bgdc $prg
bgdi $name
done
sync
LD_LIBRARY_PATH=$LD_LIBRARY_PATH_BAK
PATH=$PATH_BAK
este es el que me funciona a mi...
no entiendo que querias saber del compilador.
Quotesi, tiene el fix.
en principio, salvo corregir bugs, no tengo pensado nada para este mes.
Gracias.
He estado mirando aquí http://www.bennugd.org/downloads/old/, pero no veo la RC17 (r165) o anteriores, hay alguna forma de conseguirlas ?
Me gustaría verificar una cosa de rendimiento sobre Wiz :)
si no esta, no esta... yo fui limpiando mi pc.
Ok, voy a cruzar dedos a ver si alguien ha usado esas librerias en algun proyecto de Wiz..
Puedes pasarte por el msn un momento ? ;D
No cuadra ese script, el nombre de la carpeta que nos pasaste de la distro para Dingux no se corresponde...
Quote from: FreeYourMind on February 07, 2011, 07:14:05 AM
No cuadra ese script, el nombre de la carpeta que nos pasaste de la distro para Dingux no se corresponde...
free, lo que subi es un comprimido con los binarios, no es un paquete de distribucion, avise claramente que es una beta solo binarios, sin scripts ni ejemplos.
renombra la carpeta o modifica el script.
Quote from: BoMbErLiNk on February 07, 2011, 05:12:17 AMHe estado mirando aquí http://www.bennugd.org/downloads/old/, pero no veo la RC17 (r165) o anteriores, hay alguna forma de conseguirlas ?
Me gustaría verificar una cosa de rendimiento sobre Wiz :)
Yo tengo algunas versiones antiguas para windows, esa en concreto no, pero en el disco duro tengo las versiones r106, r110, r131, r147 y r181 (no se si entre las copias de seguridad tendré más), te las puedo comprimir y mandar.
yo te puedo recompilar cualquiera, solo es elegir la versión de SVN, descargar y compilar :D. Lo malo es que no tengo windows, debería de explicarnos Splinter a free y a mí cómo hace la compilacion cruzada para generar binarios windows desde linux :D.
Si no recuerdo haber leido mal, usaba VirtualBox ;D
Gracias Drumpi y Dcelso :)
Yo tengo el entorno para compilar en Windows, pero es la que tengo :)
Estuve toda la mañana buscando la r165 para Wiz y la encontre en " Agressive pong ".
Resulta que voy al limite con la memoria en Wiz y la última versión consume 1MB más que la de agosto, tampoco entiendo como Wiz reserva 24MB de 64MB que tiene, si hubiera algo como polluxset para liberar memoria al entrar en aplicaciones ya seria genial :P
Supongo que usare la de agosto para todas las plataformas (me falta la de linux), por el tema del dcb que son 205MB y para tener una sola descarga con todos los ports :)
Siento tener que dar un poco por saco con otro, diría, pequeño bug...
No se si será un problema general con el operador [code language="bennu" options="singleline"]/=[/code], pero lo cierto es que al ir a hacer [code language="bennu" options="singleline"]x_scale/=2;[/code]
no trabaja bien, mientras que con la versión "desintetizada" [code language="bennu" options="singleline"]x_scale=x_scale/2;[/code], sí...
Seguro que no es novedad, pero bueno.
Quote from: BoMbErLiNk on February 07, 2011, 06:29:34 PM
Gracias Drumpi y Dcelso :)
Yo tengo el entorno para compilar en Windows, pero es la que tengo :)
Estuve toda la mañana buscando la r165 para Wiz y la encontre en " Agressive pong ".
Resulta que voy al limite con la memoria en Wiz y la última versión consume 1MB más que la de agosto, tampoco entiendo como Wiz reserva 24MB de 64MB que tiene, si hubiera algo como polluxset para liberar memoria al entrar en aplicaciones ya seria genial :P
Supongo que usare la de agosto para todas las plataformas (me falta la de linux), por el tema del dcb que son 205MB y para tener una sola descarga con todos los ports :)
Como superaste el problema de los 50 megas de dcb en Wiz ?
Quote from: DCelso on February 07, 2011, 04:56:57 PM
yo te puedo recompilar cualquiera, solo es elegir la versión de SVN, descargar y compilar :D. Lo malo es que no tengo windows, debería de explicarnos Splinter a free y a mí cómo hace la compilacion cruzada para generar binarios windows desde linux :D.
no pide windows, ademas yo no hago compilacion cruzada para compilar la version windows... uso vmware.
Quote from: BoMbErLiNk on February 07, 2011, 06:29:34 PM
Gracias Drumpi y Dcelso :)
Yo tengo el entorno para compilar en Windows, pero es la que tengo :)
Estuve toda la mañana buscando la r165 para Wiz y la encontre en " Agressive pong ".
Resulta que voy al limite con la memoria en Wiz y la última versión consume 1MB más que la de agosto, tampoco entiendo como Wiz reserva 24MB de 64MB que tiene, si hubiera algo como polluxset para liberar memoria al entrar en aplicaciones ya seria genial :P
Supongo que usare la de agosto para todas las plataformas (me falta la de linux), por el tema del dcb que son 205MB y para tener una sola descarga con todos los ports :)
la ultima version (en wiz) no deberia consumir 1mb mas, en pc windows si, pero en los sistemas embebidos no deberia.
Y porque ocurre eso ? Igual tendré que hacer lo mismo, porque en Wiz estoy al limite tb.
Quote from: FreeYourMind on February 07, 2011, 08:38:22 PM
Y porque ocurre eso ? Igual tendré que hacer lo mismo, porque en Wiz estoy al limite tb.
por que ocurre que cosa? lo del mega extra? porque en windows se pueden soportar paths hasta 32kb, y entonces las cadenas que soportaban paths se agrandaron a ese tamaño en windows... creo que ya lo explique cuando comente/corregi el bug que no permitir correr el bgdc en dingux y psp.
Free todavia no he probado el DCB mochila en wiz, solo se lo que ocupará.
Splinter, lo comentaba porque en la última versión no puedo terminar algunas fases siguiendo el mismo procedimiento, la memoria rasca entre 38MB y 40MB, a partir de 39MB se pone a 1fps, lo que seria genial es encontrar algun comando o algo para liberar memoria :)
que recuerde no hay nada que haga incrementar mas memoria en wiz, por lo menos no esa cantidad.
y si vos no alocas memoria, no se que es.
Como dije en el otro foro, existe una zona de memoria llamada "zona alta" que es ligeramente más rápida y que se guarda para OpenGL, si no me he confundido de consola ^^U
Para acceder a ella hay un truco... No sé cómo es, creo que algo de crear un puntero a esa zona de memoria o algo así.
Yo tuve que retrasar la salida del primer juego de Venturer por culpa de un problema similar, porque tenía un FPG enorme que no entraba en la memoria de la GP2X (28MB o mas), y tuve que partirlo. Aun así, habían algunas animaciones a pantalla completa que no pude reducir, y es que de los 32MB que tenía, sólo se podían usar 16MB con cada procesador (y sólo estaba usando 1), a eso le quitas la memoria del sistema, y la de Fenix y se me quedaban en unos ridículos 8MB (a veces 9MB). De ahí salió el tema del motor de scroll tileado ;D
Si no, siempre puedes cambiar la WIZ por una CAANOO que tiene el doble de RAM :D :D :D
realmente no se si es mas rapida, yo no lo aseguraria...
No he dicho nada, hilo equivocado ^^U
pero sí, dicen que es algo más rápida, y se recomienda usar esa si se quiere dar un pequeño empujoncito de rendimiento a los programas más exigentes.
Segun he estado mirando se trata de la libreria warm_2.6.24.ko, para acceder a más memoria y ganar algo de rendimiento.
un .ko es un modulo del kernel, no hay una libreria asociada a esta?
voy a investigar.
Según he entendido funciona en conjunto con unas SDL :
http://dl.openhandhelds.org/cgi-bin/wiz.cgi?0,0,0,0,23,271
Quote2. Supports MMUHACK/wARM Module for more performance.
(If you wanna use this feature, please copy mmuhack.ko or warm_2.6.24.ko on same directory with libSDL-1.2.so.0.
But you don't have to copy it if mmuhack.ko or warm_2.6.24.ko already exists.)
Pero me da que esto deshace los cambios previamente realizados con polluxset, porque da menos rendimiento :P, aunque si es cierto que rasca menos en la carga de recursos, como si hubiera más RAM
es un modulo del kernel, hay que hacer llamadas ioctl para usarlas, por lo que veo del codigo del mame4all, es un modulo que cachea memoria, creo, no estoy seguro, que cachea el area de memoria alta.
por otro lado, el mame4all, tiene un codigo que accede a la memoria alta directamente, haciendo unas funciones de alocacion de memoria a lo bruto, simplemente dando direcciones de memoria alta por bloques y marcandolas en un array interno en el mismo codigo... lo que me hace dudar en que pasaria si otro programa que este corriendo en background hace uso de esta memoria alta o si incluso lanzamos otro programa con exec (por ejemplo de bennugd)... tengo que revisar mejor el codigo, pero en principio diria que esto haria desastres, ya que dichas funciones de alocacion no las controla el kernel sino el programa.
deberia preguntar a chui o franxis.
Quote from: SplinterGU on February 05, 2011, 04:36:19 AM
dingux beta
http://www.fileserver.cc/zu26ddb4c7iq.html
no funcionan los wav... puede que haya algun problema con los timers...
los scripts son iguales a los de wiz o caanoo, salvo que hay que poner export delante de LD_LIBRARY_PATH y de PATH
agradeceria testing.
Me gustaría hacer pruebas con la beta de dingux bennu, pero necesito alguna indicación de cómo lanzar un .dcb con el intérpete (que supongo es el que colgó Splinter en el post que he quoteado) así como si hay que indicar algo más, que creo que sí...
podes hacerlo en windows o linux.
Quote from: SplinterGU on February 08, 2011, 02:48:36 AM
es un modulo del kernel, hay que hacer llamadas ioctl para usarlas, por lo que veo del codigo del mame4all, es un modulo que cachea memoria, creo, no estoy seguro, que cachea el area de memoria alta.
por otro lado, el mame4all, tiene un codigo que accede a la memoria alta directamente, haciendo unas funciones de alocacion de memoria a lo bruto, simplemente dando direcciones de memoria alta por bloques y marcandolas en un array interno en el mismo codigo... lo que me hace dudar en que pasaria si otro programa que este corriendo en background hace uso de esta memoria alta o si incluso lanzamos otro programa con exec (por ejemplo de bennugd)... tengo que revisar mejor el codigo, pero en principio diria que esto haria desastres, ya que dichas funciones de alocacion no las controla el kernel sino el programa.
deberia preguntar a chui o franxis.
A eso era a lo que me refería.
En principio creo que no hay ningún programa en segundo plano, al menos, no recuerdo que haya ninguno desde el firmware. Otra cosa es que se lo haya ejecutado el usuario, y no recuerdo tampoco ningún programa que trabaje en segundo plano... bueno, a lo mejor uno de apagado de pantalla o de capturas de pantalla.
De todas maneras, creo que esa memoria se usaba/reservaba para OpenGL, por lo que sólo la usan programas en búsqueda de memoria extra o algo más de rendimiento.
Vamos, que creo que la usan porque hay un muy bajo índice de riesgo :P
Pero no está de más preguntar.
Por fin he podido probar 4 juegos Bennu en Dingoo con el gmenu.
Todos los juegos se salen al menu despues de cargar los recursos (lo se por el tiempo de carga y porque en 2 de ellos tengo el mensaje loading... en pantalla).
Despues de salir al menu este se congela, la unica forma de que mi dingoo vuelva a resucitar es haciendo reset...
Quote from: Drumpi on February 09, 2011, 12:58:22 AM
Quote from: SplinterGU on February 08, 2011, 02:48:36 AM
es un modulo del kernel, hay que hacer llamadas ioctl para usarlas, por lo que veo del codigo del mame4all, es un modulo que cachea memoria, creo, no estoy seguro, que cachea el area de memoria alta.
por otro lado, el mame4all, tiene un codigo que accede a la memoria alta directamente, haciendo unas funciones de alocacion de memoria a lo bruto, simplemente dando direcciones de memoria alta por bloques y marcandolas en un array interno en el mismo codigo... lo que me hace dudar en que pasaria si otro programa que este corriendo en background hace uso de esta memoria alta o si incluso lanzamos otro programa con exec (por ejemplo de bennugd)... tengo que revisar mejor el codigo, pero en principio diria que esto haria desastres, ya que dichas funciones de alocacion no las controla el kernel sino el programa.
deberia preguntar a chui o franxis.
A eso era a lo que me refería.
En principio creo que no hay ningún programa en segundo plano, al menos, no recuerdo que haya ninguno desde el firmware. Otra cosa es que se lo haya ejecutado el usuario, y no recuerdo tampoco ningún programa que trabaje en segundo plano... bueno, a lo mejor uno de apagado de pantalla o de capturas de pantalla.
De todas maneras, creo que esa memoria se usaba/reservaba para OpenGL, por lo que sólo la usan programas en búsqueda de memoria extra o algo más de rendimiento.
Vamos, que creo que la usan porque hay un muy bajo índice de riesgo :P
Pero no está de más preguntar.
no me referia a que haya uno, sino que podria en un futuro existir uno que corra en background y adios a todo... no me parece una solucion limpia eso que se esta usando.
Quote from: FreeYourMind on February 09, 2011, 10:01:32 PM
Por fin he podido probar 4 juegos Bennu en Dingoo con el gmenu.
Todos los juegos se salen al menu despues de cargar los recursos (lo se por el tiempo de carga y porque en 2 de ellos tengo el mensaje loading... en pantalla).
Despues de salir al menu este se congela, la unica forma de que mi dingoo vuelva a resucitar es haciendo reset...
proba sin sonido... a mi me revienta en la carga de un simple wav.
No uso wav's en ninguno...
Quote from: FreeYourMind on February 10, 2011, 06:57:38 AM
No uso wav's en ninguno...
dije que PRUEBES sin sonido y que A MI (A MI) se me caia al cargar un WAV.
Quote from: SplinterGU on February 10, 2011, 01:03:26 PM
Quote from: FreeYourMind on February 10, 2011, 06:57:38 AM
No uso wav's en ninguno...
dije que PRUEBES sin sonido y que A MI (A MI) se me caia al cargar un WAV.
Eso en mi pueblo es lo que se dice RECALCAR y lo demás es tontería X-D
Bueno, yo también iba a postear -de hecho lo estoy haciendo- para decir que también he hecho rular Dingux Bennu...
He rulao el galaxian del APÁGAME-&-VÁMONOS y OK, aunque claro, nada de sonidos además de que los textos del principio no se visualizan...
También probé una ultraminidemo consistente en dibujar 3 box de 3 colores en pantalla y claro, también OK, :-)
Además probé otra mini demo que carga un .ogg reproduciéndolo en background mientras se producen 3 efectos básicos sobre un graph -traslación, rotación y escalamiento- y no llega ni siquiera a visualizar nada en pantalla saliéndose al frontend del gmenu2x y, finalmente, quedándose bloqueado... pero ya supongo yo que se deberá al ya conocido problema actual con los timers, pues supongo que la reproducción de .ogg y demás se apoya en ello, y/o a la carga de alguno/s de los recursos...
En cuanto a rendimiento, no he tenío más tiempo para probar... gran trabajo y gracias Splinter ;-)
Seguiré probándolo luego...
Quote from: MythomizeR on February 10, 2011, 01:54:42 PM
Quote from: SplinterGU on February 10, 2011, 01:03:26 PM
Quote from: FreeYourMind on February 10, 2011, 06:57:38 AM
No uso wav's en ninguno...
dije que PRUEBES sin sonido y que A MI (A MI) se me caia al cargar un WAV.
Eso en mi pueblo es lo que se dice RECALCAR y lo demás es tontería X-D
Bueno, yo también iba a postear -de hecho lo estoy haciendo- para decir que también he hecho rular Dingux Bennu...
He rulao el galaxian del APÁGAME-&-VÁMONOS y OK, aunque claro, nada de sonidos además de que los textos del principio no se visualizan...
También probé una ultraminidemo consistente en dibujar 3 box de 3 colores en pantalla y claro, también OK, :-)
Además probé otra mini demo que carga un .ogg reproduciéndolo en background mientras se producen 3 efectos básicos sobre un graph -traslación, rotación y escalamiento- y no llega ni siquiera a visualizar nada en pantalla saliéndose al frontend del gmenu2x y, finalmente, quedándose bloqueado... pero ya supongo yo que se deberá al ya conocido problema actual con los timers, pues supongo que la reproducción de .ogg y demás se apoya en ello, y/o a la carga de alguno/s de los recursos...
En cuanto a rendimiento, no he tenío más tiempo para probar... gran trabajo y gracias Splinter ;-)
Seguiré probándolo luego...
gracias... si, no se si sera la falta de inicializacion de los timers (que quizas se inician solos junto a otro sistema SDL) o a que la mixer quizas no va.
Quote from: SplinterGU on February 10, 2011, 03:14:20 AM
no me referia a que haya uno, sino que podria en un futuro existir uno que corra en background y adios a todo... no me parece una solucion limpia eso que se esta usando.
Como si al programar en microcontroladores existiesen "soluciones límpias" ;D
Cuando los recursos escasean y se necesita optimizar todo lo posible, el libro de estilo tiene vacaciones indefinidas :D
Como es el mapeo en la Dingoo Splinter ?
He visto que la cruceta si va, pero no los botones 'L' y 'R'.
Quote from: Drumpi on February 11, 2011, 02:08:27 PM
Quote from: SplinterGU on February 10, 2011, 03:14:20 AM
no me referia a que haya uno, sino que podria en un futuro existir uno que corra en background y adios a todo... no me parece una solucion limpia eso que se esta usando.
Como si al programar en microcontroladores existiesen "soluciones límpias" ;D
Cuando los recursos escasean y se necesita optimizar todo lo posible, el libro de estilo tiene vacaciones indefinidas :D
no estoy de acuerdo, las soluciones limpias no dependen de en que o para que se programe
Quote from: FreeYourMind on February 11, 2011, 02:49:12 PM
Como es el mapeo en la Dingoo Splinter ?
He visto que la cruceta si va, pero no los botones 'L' y 'R'.
no se te ocurrio probar los ejemplos del paquete wiz o caanoo, ni tampoco ver el jkeys.lib que hay en ellos, especificamente en la funcion jkeys_set_default_keys(), cierto?
Cierto, mi unica prueba fue probar una demo ya compilada para Wiz, no he recompilado nada, preguntaba por si el mapeo de estos botones es distinto a los de Wiz.
si, fijate el fuente, ahi tenes el mapeo.
Quote from: SplinterGU on January 04, 2011, 07:41:26 AM
Bien, por fin lo tengo... me ha costado un buen trabajo...
el cambio del que hablaba se trata de un nuevo sistema con el cual es posible crear librerias para bennugd a nivel dcb.
esto es, dcbs que aportan funciones escritas en codigo bennugd.
esto nos permite liberar funciones de usuario sin necesidad de liberar codigo, asi sea por seguridad o porque queremos tener todo mas prolijo y ordenado, o simplemente porque no queremos compartir codigo.
si bien estos nuevos archivos .dcl no son mas que .dcb, pero tienen alguna que otra pequeña modificacion para hacer posible esto.
ejemplos de uso:
para crear una libreria, vamos a tomar el ejemplo de key_event.lib.
solo haremos:
bgdc --libmode key_event.lib
esto nos generara un bonito key_event.dcl, el cual luego utilizaremos en nuestros proyectos.
ahora, estos dcl tienen una limitacion, no contienen constantes ni tampoco contienen defines, por ende necesitamos un .h como el siguiente (key_event.h):
#ifndef __KEY_EVENT_LIB
#define __KEY_EVENT_LIB
#define _key_pressed 0
#define _key_down 1
#define _key_up 2
#define _key(k,ev) ((ev==_key_down)?( _key_state[ k ][ _key_use ] && !_key_state[ k ][ _key_use ^ 1 ] ): \
(ev==_key_up )?( !_key_state[ k ][ _key_use ] && _key_state[ k ][ _key_use ^ 1 ] ): \
( _key_state[ k ][ _key_use ]))
#endif
NOTA: no se deben declarar las funciones que existan en la lib si la estamos linkeando, ya que sino dara error. Pero si es una funcion que pensamos usar como externa y no la estamos linkeando en ese momento (generar otra dcl que usara una dcl), si conviene declararla para evitar conversiones raras.
ahora para compilar nuestro programa usando la libreria previamente generada, hacemos:
bgdc -L key_event.dcl key_event_test.prg
esto nos generara nuestro dcb de toda la vida, pero incluyendo todas las funciones de la libreria.
espero que les haya gustado y empiecen a liberar y compartir cosas usando este metodo.
Bueno, esta feature hace años que la solicité y descubrí ayer que recientemente ha sido implementada...
Porque según he leido, se pueden crear dcbs (dcls) a partir de código -funciones- escritas en BennuGD, el problema, es que si bien logro compilar la librería generándose tal archivo con extensión .dcl, lo cierto es que a la hora de crear el dcb con ésta adherida estoy obteniendo un error como de que en la línea 2 aparece "DCL" o "DCB" y que no lo encuentra, no recuerdo ahora exactamente el mensaje que me lanza el compilador, pero siempre es el mismo error...
Otra cosa, ¿el archivo de cabecera .h que contiene las constantes y #defines es solo necesario para librerías escritas con código original c, o tambien lo es para las escritas en Bennu? supongo que sea lo segundo, aunque espero que no...
SplinterGU, se agradecería que pusieras un ejemplo explícito sobre esto, a través de una librería escrita en código Bennu, aparte del ejemplo que ya has puesto donde se emplea en su lugar una dll escrita originalmente en c...
Nada más, aprovecho para saludaros X-D
anda a inicio y ahi pone dcl, vas a encontrar al menos 3 ejemplos.
podrias describir los pasos que hiciste y poner los codigos que has usado...
no se que codigo C mencionas, pero el .h es para el codigo bennugd, no hay nada de C en esto, salvo lo que hice en el motor para soportarlo.
Vale, aclarado lo del archivo .h...
Pero no encuentro los al menos 3 ejemplos que dices, solamente he encontrado el post que quotée y alguno más sin relevancia... y tras hacer una busqueda en el foro entero... porque con inicio supongo que te refieres al principio de este hilo, o quizás del foro...
Bueno voy a seguir buscando...
arriba de todo, hay unos cuantos botones, dicen "inicio", "ayuda", "buscar", etc... primero inicio, y luego buscar, sino el buscador parece que busca en la seccion que estas.
mira, hay varios ejemplos, el gui de (prg?), un efecto que puse yo, y hay otro que no recuerdo ahora, pero ayer me acordaba.
Ok, ahora sí muestra más resultados (antes buscaba con el Search de arriba a la derecha), voy a mirarlo más tranquilamente, gracias...
estos cambios aun no estan en el SVN, pero ya los tengo probados, los tengo que emprolijar.
- ahora si se compila un ejecutable con mochila, y este se pone en una carpeta del PATH del sistema, el ejecutable funciona.
- si un ejecutable se llama desde otra carpeta, se abren los recursos contenidos en la carpeta del ejecutable sin problema.
esto nos permite hacer ejecutables con tools que nos pueden servir para cualquier cosa, por ejemplo, yo hice un show_fpg con mochila, y lo puse en una carpeta del path, y ahora lo puedo usar como una utilidad del sistema para ver los fpg desde cualquier lugar.
tengo aun que arreglar unas cuantas cosas mas...
ya es posible poner las dlls en carpetas separadas, pero con las siguientes restricciones:
- bgdrtm debe estar en la carpeta del ejecutable, en el caso de linux tambien debe estar en LD_LIBRARY_PATH (o ld.conf*) el path donde se haya la libreria.
- las dlls/so se pueden poner en las siguientes subcarpetas donde se encuentre el bgdi que se ejecuta: "runtime", "modules", "mod", "mods", "lib", "libs", "extensions", "plugins"
se puede usar 1 o varias de estas subcarpetas.
- ahora se agrega el path del binario en el path interno donde se abren los archivos de recursos del juego (incluido el dcb)
en un rato subo las modificaciones, no hare release binaria de momento, pero el que quiere compilar y probarla ahi lo tendra disponible.
me falta testear la version windows, y consolas, solo probe la version linux.
¡Excelente, Splinter! :D Con esto ya no tengo ningún motivo para seguir usando MoleBox. :P
Muchísimas gracias, karma++.
Espero los binarios para Windows para empezar a probarlo. :)
de nada... pronto los subire, quiero probarlos antes... a menos que los que ya tienen el entorno de compilacion quieran bajarlo, compilarlo y compartirlo, yo no me voy a ofender.
Qué groso Splinter, karma up :D
Otro karma más por aquí ;D
- al escribir una funcion ya no es posible usar por nombre de parametros nombres diferentes a los declarados previamente.
- tampoco se puede declarar 2 veces una misma funcion/proceso.
entonces no se va a permitir la sobrecarga de funciones ? es decir dos funciones con el mismo nombre pero con distinto tipo y o número de argumentos.
Quote from: DCelso on March 11, 2011, 02:38:53 PM
entonces no se va a permitir la sobrecarga de funciones ? es decir dos funciones con el mismo nombre pero con distinto tipo y o número de argumentos.
yo nunca dije eso... por ahora no se soportaron, y por ahora no se soportan... yo se en el futuro que pasara al respecto... por ahora no se soportan...
Quote from: DCelso on March 11, 2011, 02:38:53 PM
entonces no se va a permitir la sobrecarga de funciones ? es decir dos funciones con el mismo nombre pero con distinto tipo y o número de argumentos.
Entiendo que se refiera a que el prototipo de la función ha de ser el mismo cuando la declaras con declare y cuando la vas a escribir.
Quote from: josebita on March 11, 2011, 02:51:07 PM
Quote from: DCelso on March 11, 2011, 02:38:53 PM
entonces no se va a permitir la sobrecarga de funciones ? es decir dos funciones con el mismo nombre pero con distinto tipo y o número de argumentos.
Entiendo que se refiera a que el prototipo de la función ha de ser el mismo cuando la declaras con declare y cuando la vas a escribir.
Sí, eso lo entendí y lo veo correcto. Mi pregunta vino acerca de no dejar crear dos funciones o procesos con el mismo nombre, al hacer esto evitas poder hacer la sobrecarga de funciones, y splinter me respondió muy correctamente :D.
splinter, tus ultimos cambios me han hecho modificar otra cosa para la versión estática en el main del bgdc.
#ifdef __STATIC__
extern char * appexename;
extern char * appexepath;
extern char * appexefullpath;
#else
char * appexename = NULL;
char * appexepath = NULL;
char * appexefullpath = NULL;
#endif
Nada, tenlo en cuenta para tu versión monolítica :d.
cuando haga la version monolitica oficial, sera muy diferente a la version oficial, en realidad necesita reorganizar la version oficial... y quedara mas parecida a Fenix.
pero si, claro, gracias lo tendre en cuenta.
- Fix mouse with scale_resolution*
- Add constants for scale_resolution*
/* Scale resolution orientation */
#define SRO_NORMAL 0
#define SRO_LEFT 1
#define SRO_DOWN 2
#define SRO_RIGHT 3
/* Scale resolution aspectratio */
#define SRA_STRETCH 0
#define SRA_PRESERVE 1
estuvo duro esto del mouse... probalo bien... yo me canse de probarlo, creo que hice todas las pruebas posibles, pero nunca se sabe... puede que haya quedado algun bug...
Quote from: SplinterGU on March 12, 2011, 06:36:49 AM
- Fix mouse with scale_resolution*
- Add constants for scale_resolution*
/* Scale resolution orientation */
#define SRO_NORMAL 0
#define SRO_LEFT 1
#define SRO_DOWN 2
#define SRO_RIGHT 3
/* Scale resolution aspectratio */
#define SRA_STRETCH 0
#define SRA_PRESERVE 1
Genial, muchas gracias. Cuando llegue a casa lo pruebo en el eek y, si va bien, intento liberar el eek para iOS hoy (si tengo tiempo, digo, porque tengo una versión de la SDL_mixer sin soporte para mikmod y las músicas en el juego aún no suenan...).
¿SDL_mixer usa mikmod? no lo parece, en GP2X va más lento, y en general, va muy limitado (vamos, creo haber leido que la mikmod tenía soporte para comandos de bucles, o para silenciar canales, por poner algunos ejemplos).
- Fix problems with cmdline args
- Only mod* can be moved in a optional folder
- Fix add files in list
----
bien, probado en windows el tema de las carpetas para las dlls, solo se pueden mover las dlls mod_*, todas las demas deben estar junto al bgdi o ejecutable del juego, esto es por un tema de que son enlazadas por el compilador C, y no se buscan desde bennugd.
como sea, son unas cuantas dlls menos... otra opcion es poner en el PATH donde estan las dlls, y ahi se ponen donde se quiera, pero eso ya pierde la gracia del cambio.
opciones hay.
Splinter ya que has estado arreglando el tema mochila.
En windows no he probado mucho todavía, pero en Wiz si que he podido probar.
La Wiz carga un DCB de 404MB correctamente, pero se come aleatoriamente la carga de FPGs, a veces los carga a veces no, supongo que son todos los archivos afectados y no solo fpg, recuerdo que esto pasaba en windows en las primeras versiones.
SORR esta cerquita cerquita ;D
yo no recuerdo que pasara... memoria?
No se si éste sitio sea el mas lógico para comentarlo, pero la versión 1.0.0rc20-svn20110314 me da el siguiente problema:
# bgdc hola.prg
*** buffer overflow detected ***: bgdc terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x50)[0x2f7390]
/lib/tls/i686/cmov/libc.so.6(+0xe12ca)[0x2f62ca]
/lib/tls/i686/cmov/libc.so.6(+0xe19e8)[0x2f69e8]
bgdc[0x806b0f9]
bgdc[0x804953e]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x22bbd6]
bgdc[0x80493a1]
======= Memory map: ========
00200000-00213000 r-xp 00000000 08:07 782034 /lib/libz.so.1.2.3.3
00213000-00214000 r--p 00012000 08:07 782034 /lib/libz.so.1.2.3.3
00214000-00215000 rw-p 00013000 08:07 782034 /lib/libz.so.1.2.3.3
00215000-00368000 r-xp 00000000 08:07 786130 /lib/tls/i686/cmov/libc-2.11.1.so
00368000-00369000 ---p 00153000 08:07 786130 /lib/tls/i686/cmov/libc-2.11.1.so
00369000-0036b000 r--p 00153000 08:07 786130 /lib/tls/i686/cmov/libc-2.11.1.so
0036b000-0036c000 rw-p 00155000 08:07 786130 /lib/tls/i686/cmov/libc-2.11.1.so
0036c000-0036f000 rw-p 00000000 00:00 0
00883000-0089e000 r-xp 00000000 08:07 821200 /lib/ld-2.11.1.so
0089e000-0089f000 r--p 0001a000 08:07 821200 /lib/ld-2.11.1.so
0089f000-008a0000 rw-p 0001b000 08:07 821200 /lib/ld-2.11.1.so
00c92000-00caf000 r-xp 00000000 08:07 781919 /lib/libgcc_s.so.1
00caf000-00cb0000 r--p 0001c000 08:07 781919 /lib/libgcc_s.so.1
00cb0000-00cb1000 rw-p 0001d000 08:07 781919 /lib/libgcc_s.so.1
00cdd000-00e15000 r-xp 00000000 08:07 821323 /lib/i686/cmov/libcrypto.so.0.9.8
00e15000-00e1d000 r--p 00137000 08:07 821323 /lib/i686/cmov/libcrypto.so.0.9.8
00e1d000-00e2b000 rw-p 0013f000 08:07 821323 /lib/i686/cmov/libcrypto.so.0.9.8
00e2b000-00e2f000 rw-p 00000000 00:00 0
00ecf000-00ed0000 r-xp 00000000 00:00 0 [vdso]
00f5e000-00f60000 r-xp 00000000 08:07 792413 /lib/tls/i686/cmov/libdl-2.11.1.so
00f60000-00f61000 r--p 00001000 08:07 792413 /lib/tls/i686/cmov/libdl-2.11.1.so
00f61000-00f62000 rw-p 00002000 08:07 792413 /lib/tls/i686/cmov/libdl-2.11.1.so
08048000-08071000 r-xp 00000000 08:07 271163 /usr/bin/bgdc
08071000-08072000 r--p 00028000 08:07 271163 /usr/bin/bgdc
08072000-08088000 rw-p 00029000 08:07 271163 /usr/bin/bgdc
08088000-081a1000 rw-p 00000000 00:00 0
09648000-09669000 rw-p 00000000 00:00 0 [heap]
b7738000-b773a000 rw-p 00000000 00:00 0
b7753000-b7755000 rw-p 00000000 00:00 0
bf95a000-bf96f000 rw-p 00000000 00:00 0 [stack]
Abortado
Quote from: SplinterGU on March 16, 2011, 02:09:45 AM
yo no recuerdo que pasara... memoria?
Yo reporte ese bug y verifique que funcionaba correctamente cuando hiciste el parche, de la mochila de Windows quiero decir.
En Wiz pasa ahora exactamente lo mismo, los fpgs de carga inmediata fallan aleatoriamente, los fpgs de carga y representación más tardía no, puedo hacer ejemplos de dcbs mochila más pequeños, pero no va a ser lo mismo..
Quote from: Kloppix on March 16, 2011, 08:53:32 AM
No se si éste sitio sea el mas lógico para comentarlo, pero la versión 1.0.0rc20-svn20110314 me da el siguiente problema:
# bgdc hola.prg
*** buffer overflow detected ***: bgdc terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x50)[0x2f7390]
/lib/tls/i686/cmov/libc.so.6(+0xe12ca)[0x2f62ca]
/lib/tls/i686/cmov/libc.so.6(+0xe19e8)[0x2f69e8]
bgdc[0x806b0f9]
bgdc[0x804953e]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x22bbd6]
bgdc[0x80493a1]
======= Memory map: ========
00200000-00213000 r-xp 00000000 08:07 782034 /lib/libz.so.1.2.3.3
00213000-00214000 r--p 00012000 08:07 782034 /lib/libz.so.1.2.3.3
00214000-00215000 rw-p 00013000 08:07 782034 /lib/libz.so.1.2.3.3
00215000-00368000 r-xp 00000000 08:07 786130 /lib/tls/i686/cmov/libc-2.11.1.so
00368000-00369000 ---p 00153000 08:07 786130 /lib/tls/i686/cmov/libc-2.11.1.so
00369000-0036b000 r--p 00153000 08:07 786130 /lib/tls/i686/cmov/libc-2.11.1.so
0036b000-0036c000 rw-p 00155000 08:07 786130 /lib/tls/i686/cmov/libc-2.11.1.so
0036c000-0036f000 rw-p 00000000 00:00 0
00883000-0089e000 r-xp 00000000 08:07 821200 /lib/ld-2.11.1.so
0089e000-0089f000 r--p 0001a000 08:07 821200 /lib/ld-2.11.1.so
0089f000-008a0000 rw-p 0001b000 08:07 821200 /lib/ld-2.11.1.so
00c92000-00caf000 r-xp 00000000 08:07 781919 /lib/libgcc_s.so.1
00caf000-00cb0000 r--p 0001c000 08:07 781919 /lib/libgcc_s.so.1
00cb0000-00cb1000 rw-p 0001d000 08:07 781919 /lib/libgcc_s.so.1
00cdd000-00e15000 r-xp 00000000 08:07 821323 /lib/i686/cmov/libcrypto.so.0.9.8
00e15000-00e1d000 r--p 00137000 08:07 821323 /lib/i686/cmov/libcrypto.so.0.9.8
00e1d000-00e2b000 rw-p 0013f000 08:07 821323 /lib/i686/cmov/libcrypto.so.0.9.8
00e2b000-00e2f000 rw-p 00000000 00:00 0
00ecf000-00ed0000 r-xp 00000000 00:00 0 [vdso]
00f5e000-00f60000 r-xp 00000000 08:07 792413 /lib/tls/i686/cmov/libdl-2.11.1.so
00f60000-00f61000 r--p 00001000 08:07 792413 /lib/tls/i686/cmov/libdl-2.11.1.so
00f61000-00f62000 rw-p 00002000 08:07 792413 /lib/tls/i686/cmov/libdl-2.11.1.so
08048000-08071000 r-xp 00000000 08:07 271163 /usr/bin/bgdc
08071000-08072000 r--p 00028000 08:07 271163 /usr/bin/bgdc
08072000-08088000 rw-p 00029000 08:07 271163 /usr/bin/bgdc
08088000-081a1000 rw-p 00000000 00:00 0
09648000-09669000 rw-p 00000000 00:00 0 [heap]
b7738000-b773a000 rw-p 00000000 00:00 0
b7753000-b7755000 rw-p 00000000 00:00 0
bf95a000-bf96f000 rw-p 00000000 00:00 0 [stack]
Abortado
Me imagino que es desde mi PPA. Pásame el código para ver si lo puedo replicar y/o arreglar.
Quote from: josebita on March 17, 2011, 12:28:01 PM
Me imagino que es desde mi PPA. Pásame el código para ver si lo puedo replicar y/o arreglar.
El error no es con un código en específico, es con todos. De hecho...
process main()
begin
end
...da el mismo problema.
Josebita, quiero aprovechar para preguntarte cuál es la mejor manera para tener moddesc junto a tu PPA.
Quote from: BoMbErLiNk on March 16, 2011, 04:51:48 PM
Quote from: SplinterGU on March 16, 2011, 02:09:45 AM
yo no recuerdo que pasara... memoria?
Yo reporte ese bug y verifique que funcionaba correctamente cuando hiciste el parche, de la mochila de Windows quiero decir.
En Wiz pasa ahora exactamente lo mismo, los fpgs de carga inmediata fallan aleatoriamente, los fpgs de carga y representación más tardía no, puedo hacer ejemplos de dcbs mochila más pequeños, pero no va a ser lo mismo..
si logras hacerlo con algun ejemplo, chico o no... te lo agradezco.
Ok, en un rato te cuento, primero voy a probar que tal va la Wii :)
Ya he visto el bug de la carga de fpgs de la mochila.
Si en el mismo proceso y mismo frame que vas a usar FILE haces también el LOAD_FPG, puede que file no se actualice en ese frame sino en el siguiente, por tanto ese proceso no se visualiza pero si lo haran otros que se llamen más tarde.
Orden :
Quotefichero=load_fpg("fpg.fpg");
file=fichero;
graph=1;
No solo pasa en Wiz, lo he visto en Windows también, aunque en mucho menor medida, solo 1 vez en una partida completa.
Espero que tenga solución :)
no hay ninguna operacion retardada en eso que decis... no tiene sentido, quizas tenes otro proceso o parte de la logica donde se modifica file en ese frame.
cargas y frames no tienen relacion, y mucho menos valores asignados a las variables... a menos que uses las load_fpg de background, esas que llevan un 2do parametro, pero me parece que no es el caso.
Ok, te lo pongo mejor :
QuoteIF (fichero>-1) unload_fpg(fichero); fichero=-1; END
fichero=load_fpg("fpg.fpg");
file=fichero;
graph=1;
La mochila me falla exclusivamente en procesos que hagan esto y no en todas las condiciones.
Quieres que haga un ejemplo y te lo pase ?
por favor... muchas gracias por adelantado.
enviame tambien el codigo de ese ejemplo.
Aquí tienes el ejemplo :
http://bombergames.net/mochila.zip
Es un problema grave, se me ha colgado el sistema operativo, mucho cuidado con el ejemplo xD
Al principio no conseguia reproducir el fallo con un mini ejemplo porque debe estar sonando música de fondo cargada como load_song (ogg), en conjunto con el código que te mando hacen un boom importante.
Cosas que pasan :
El fpg puede o no visualizarse
La canción puede o no resetearse (sin que exista código para ello)
Si la aplicación muere, que lo acaba haciendo, puede dejar al sistema operativo KO.
En el ejemplo simplemente pulsas o mantienes ENTER, se va cargando de forma ciclica un fpg dentro de la mochila.
No he comprobado si esto es solo exclusivo de la mochila, pero se que SDL_mixer da problemas desde hace mucho tiempo, con la oficial que lleva Bennu de hecho puede petarte en un simple load_song tras haber escuchado varias canciones de forma completamente aleatoria, pero siempre en el inicio de la canción, hace tiempo cambie a una SDL_mixer concreta que soluciona este problema, que es la que lleva el zip que te mando, sin embargo aquí también termina cayendo.
Espero que sirva de ayuda :P
gracias, lo revisare...
Quote from: BoMbErLiNk on March 22, 2011, 04:04:02 AM
Aquí tienes el ejemplo :
http://bombergames.net/mochila.zip
Es un problema grave, se me ha colgado el sistema operativo, mucho cuidado con el ejemplo xD
Al principio no conseguia reproducir el fallo con un mini ejemplo porque debe estar sonando música de fondo cargada como load_song (ogg), en conjunto con el código que te mando hacen un boom importante.
Cosas que pasan :
El fpg puede o no visualizarse
La canción puede o no resetearse (sin que exista código para ello)
Si la aplicación muere, que lo acaba haciendo, puede dejar al sistema operativo KO.
En el ejemplo simplemente pulsas o mantienes ENTER, se va cargando de forma ciclica un fpg dentro de la mochila.
No he comprobado si esto es solo exclusivo de la mochila, pero se que SDL_mixer da problemas desde hace mucho tiempo, con la oficial que lleva Bennu de hecho puede petarte en un simple load_song tras haber escuchado varias canciones de forma completamente aleatoria, pero siempre en el inicio de la canción, hace tiempo cambie a una SDL_mixer concreta que soluciona este problema, que es la que lleva el zip que te mando, sin embargo aquí también termina cayendo.
Espero que sirva de ayuda :P
necesito el prg de esto, si no me das el prg, no puedo hacer nada.
No hombre, esta todo dentro del zip.
mochila.prg se llama, tambien te he puesto la carpeta data comprimida, para que puedes descomprimirla y compilar una nueva mochila en caso de que quieras recompilar el código en modo debug.
Te has equivocado, el prg es de un juego extenso xDDD
Quote from: BoMbErLiNk on March 22, 2011, 05:44:20 AM
No hombre, esta todo dentro del zip.
mochila.prg se llama, tambien te he puesto la carpeta data comprimida, para que puedes descomprimirla y compilar una nueva mochila en caso de que quieras recompilar el código en modo debug.
tienes razon, se me escapo, disculpa.
bien, el problema no es en la mochila o en el asignar el load_fpg a una variable y luego asignarla a file, y que lo cargue en un frame u otro... cuando lei que reportaste eso, me recordo a los reportes de los operadores de sistema cuando te reportan una caida de un sistema o servidor y te dicen, "si es dia martes y pasa por la calle una ambulancia con la sirena sonando y encima te pica la oreja izquierda, entonces ahi se te cae el servidor"
bien, con las pruebas, vi que incluso este codigo da problema...
PROGRAM mochila;
import "mod_video";
import "mod_sound";
import "mod_key";
import "mod_joy";
import "mod_string";
import "mod_math";
import "mod_proc";
import "mod_grproc";
import "mod_text";
import "mod_map";
import "mod_time";
import "mod_timers";
import "mod_file";
import "mod_wm";
import "mod_rand";
import "mod_screen";
import "mod_dir";
import "mod_effects";
import "mod_draw";
import "mod_say";
GLOBAL
animacion;
musica;
startup=1;
posicion=1;
BEGIN
set_mode(320,240,16);
set_fps(60,0);
x=160;
y=120;
musica=load_song("data/00.ogg");
play_song(musica,-1);
LOOP
IF (key(_esc)) exit(); END
IF (posicion<50) posicion++; ELSE posicion=1; END
unload_fpg(file);
file=load_fpg("data/galsia"+posicion+".fpg");
graph=1;
FRAME;
END
END
por lo que vi tambien es que si quitas el load_song/play_song funciona sin problema... voy a probar poniendo los sonidos fuera de la mochila a ver que pasa.
efectivamente es cuando el sonido se encuentra en la mochila... por lo menos ogg y este en concreto...
voy a revisar el tema de las operaciones fake de archivos y como recorre la libogg/mixer el archivo
Vale, si es por la música no me importa dejarla fuera de momento :D
En los primeros mensajes me tenia confudido el tema, ya te digo, no me salia el ejemplo hasta que cai en lo de la música. ;)
PD: Splinter sería posible que los fpg se metieran comprimidos en la mochila ?
Vas a inundar de capas el juego:
Ficheros encriptados con password, dentro de fpg's comprimidos, los cuales dentro de mochila, la cual dentro de un exe, el cual dentro de un rar xDDDDD
no se pueden poner recursos comprimidos en la mochila, por limitaciones de la libreria de compresion.
quizas te convenga solo meter los recursos graficos en la mochila y dejar los sonidos fuera.
realmente no entiendo porque crashea, revise las librerias de files que son las que podrian dar el problema y parecen estar todas bien, pero evidentemente algun manejo de archivos requiere la mixer que aca falla.
aun no logro detectar el problema, viene por el sonido, pero no se por que.
El crash es solo con la música por streaming no ? El ogg, los wav deberian ser seguros al cargarse en memoria no ?
Más o menos es lo que me quedo claro ayer en todos los tests que hice, quizas deberia probar a reproducir un wav de forma continua a ver que pasa.
--
Free XDD
Que va, no estan encriptados con password, estan "ensuciados" mejor dicho ;D
el ogg en cuestion es el que provoca el crash, pero solo en la mochila, quizas alguna operacion este fallando... deberia meter log en cada operacion que se hace y ver que pide y que provoca el crash...
voy a intentar por ahi.
Ok, sobre un tema relacionado y si te sirve de ayuda, la única SDL_mixer que he encontrado estable durante todos estos meses es la que incluyo en el zip.
Se trata de :
SDL_mixer-devel-1.2.11-VC.zip (http://www.libsdl.org/projects/SDL_mixer)
Tengo verificado que es estable, lo deje 24horas reproduciendo musica de una lista gigante.
Sobre las otras sdl_mixer, probe la oficial y me petaba, sin mochila, al reproducir música simplemente con play_song y de forma muy aleatoria, puede petarte al reproducir la 4 canción de una lista, la 50, etc.. y todo sin tener carga de fpgs por medio, simplemente un programa que reproduzca oggs, he probado todas estas :
1.2.8
1.2.9
1.2.10
1.2.11 (SDL_mixer-1.2.11-win32.zip, de las 2 dlls 1.2.11 esta no estable)
Todas petan, justo cuando haces play_song, lo digo por si quizas hubiera un problema relacionado con alguna función de reproducción, en Wiz me pasa algo parecido con el sonido, pero en lugar de petar, la aplicación se pone a 1fps, con el sonido como atascado, o Wii que da como resultado codedumps.
ya se cual es el error... todavia no le encontre solucion, pero el problema es que todos los archivos virtuales usan el mismo file pointer de C, y la mixer usa un thread para reproducir la musica, por ende, modifica la posicion del FILE * cuando necesita leer nueva data, y si justo en ese momento otra parte del programa esta leyendo ese archivo, entonces lee cualquier porqueria.
vamos a ver como lo corrijo.
gracias bomber
Quote from: SplinterGU on March 22, 2011, 08:28:57 PM
ya se cual es el error... todavia no le encontre solucion, pero el problema es que todos los archivos virtuales usan el mismo file pointer de C, y la mixer usa un thread para reproducir la musica, por ende, modifica la posicion del FILE * cuando necesita leer nueva data, y si justo en ese momento otra parte del programa esta leyendo ese archivo, entonces lee cualquier porqueria.
vamos a ver como lo corrijo.
gracias bomber
¿Puede ser por eso que esté fallando la reproducción de OGG en Wii?.
podria ser, si tenes 2 veces el archivo abierto o si usas mochila.
duplique los handles, pero igual sigo teniendo problemas, tarda mas en caer, pero cae... a ver si no estoy haciendo algo mal.
bomber... ya esta solucionado, actualiza el repo y generate los ejecutables.
hice un parche feo para mi gusto pero que funciona.
queria hacerlo mas prolijo duplicando handles y/o fds, pero lamentablemente parece que comparten el puntero de posicion, asi que solamente pude hacerlo reabriendo el dcb tantas veces sea necesario.
Gracias ahora lo pruebo :)
gracias a vos por el reporte y el sample... karma++
Ey, he hecho el svn up y el ./build-win32.sh
Pero no me genera el bgdc.exe, el bgdi.exe ni el libbgdrtm.dll, te pongo el error :
Quotedcbr.c:209: error: conflicting types for 'dcb_load_from'
../include/bgdrtm.h:74: error: previous declaration of 'dcb_load_from' was here
dcbr.c:209: error: conflicting types for 'dcb_load_from'
../include/bgdrtm.h:74: error: previous declaration of 'dcb_load_from' was here
make[2]: *** [libbgdrtm_la-dcbr.lo] Error 1
make[2]: Leaving directory `/c/msys/1.0/opt/bennugd/core/bgdrtm/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/c/msys/1.0/opt/bennugd/core/bgdrtm'
make: *** [all-recursive] Error 1
vamos a chequear, creia que lo habia cambiado...
lo raro es que aca me compilo, vamos de nuevo.
prueba ahora...
Splinter, he probado ambas versiones.
Bennu sigue petando con la SDL_mixer oficial que compilas (creo que es la 1.2.8 ), no en el ejemplo de la mochila, si cargando y reproduciendo simples play_song, no he podido finalizar ni una partida completa.
La SDL_mixer-devel-1.2.11-VC.zip, que es la que yo uso para evitar los crashes con play_song, paradojicamente, muere en el ejemplo de la mochila, pero NO muere nunca con play_song fuera de una mochila.
Me da la impresión de que sigue habiendo algo en play_song / load_song, porque no es normal que peten todas las sdl_mixer excepto una y que esta condicionalmente si muere donde la oficial no.
--
La mochila en Wiz ya funciona bien, los archivos de Bennu pesan más, supongo que no estan pasados por strip, me esperare a la nueva release :)
no estan pasados por strip...
entonces, solo peta la version windows con play_song no en mochila? eso si es bien raro, porque sin la mochila, todo el manejo lo hace la SDL_mixer, voy a chequear nuevamente, a ver que pasa en estos casos.
no veo nada raro, si el archivo no esta comprimido con zlib, no deberia petar.
como lo de la mochila, mandame un ejemplo donde crashee y lo debugueo...
acabo de probar con el sample que me pasaste, poniendo en el loop, load_song, play_song, stop_song, unload_song y se ejecutaron 5000 veces sin crashear, tambien lo hice quitando el stop_song y tampoco crashea, tambien le quite el unload_song, y luego de un rato empieza a tirar "Play song called with invalid handle", pero no crashea.
ahora voy a probar tambien cargando y descargando el fpg, a ver que pasa.
3500 veces loop, carga y descarga de sonidos y de fpg... agregue ahora animacion de graficos aunque sean de diferentes fpg, y no crashea en lo mas minimo.
espero tu ejemplo para debuguear el tema.
saludos.
Recordar que uno usa Linux y el otro Windows...
Además has probado de cargar 2 oggs a la vez ?
Cargar 2 oggs, reproducir el primero (y esperar a que termine, play song a 0), is_playing_song en el primero, aunque ya no suene parar el primero, descargar el primero, reproducir el segundo (este con -1), parar el segundo manualmente, descargar el segundo, cargar los dos de nuevo, o mejor, cargar a otros 2 ogg diferentes, etc etc
Quote from: FreeYourMind on March 23, 2011, 03:02:44 PM
Recordar que uno usa Linux y el otro Windows...
estaria bueno que recuerdes acotar acertadamente...
obviamente estamos probando sobre las mismas plataformas (windows, aunque para descartar un bug general, hice las pruebas en ambas plataformas)
Quote from: BoMbErLiNk on March 23, 2011, 06:17:25 PM
Además has probado de cargar 2 oggs a la vez ?
Cargar 2 oggs, reproducir el primero (y esperar a que termine, play song a 0), is_playing_song en el primero, aunque ya no suene parar el primero, descargar el primero, reproducir el segundo (este con -1), parar el segundo manualmente, descargar el segundo, cargar los dos de nuevo, o mejor, cargar a otros 2 ogg diferentes, etc etc
mejor pasame el ejemplo con la prueba que quieras que haga.
Vale, recuerdo que a Josebita le pase un ejemplo similar en el post de Wii, mirare si es el mismo código, sino te monto uno nuevo.
muchas gracias bomber!
lo espero.
Jarl no puedo aislar el problema en un ejemplo porque no peta fuera, he cogido el proceso que uso en el juego, que se llama MELODIA y gestiona todo lo relacionado con la reproducción de un OGG, la carga, la reproducción y la descarga.
He creado un pequeño ejemplo, con solo ese proceso, le hice un test de estres y lo deje toda la noche funcionando, pero no ha petado.
Sin embargo, dentro del juego, hago ese mismo test, que hablamos de basicamente este código :
IF (key(_space))
cual=rand(1,75);
melodia(cual,cual,0,0,0,0,0,0);
END
Y no dura más de un minuto. :P
Quizas pisa algo en memoria que no esta en el test, podría sacar algun log del debug, pero creo que tienes que mandarme archivos que vengan con debug especifico para lo que buscas no ?
--
También he mirado y creo que ya te comente que hago la repetición de un OGG manualmente, esto es debido a que todavía, cuando un ogg se repite usando -1 puede empezar a sonar con glitches (es decir cuando llega al final de la canción y se vuelve a repetir), esto lo probe no hace mucho tiempo, quizas en agosto 2010 y ese bug seguia presente.
antes de una version con debug, necesito saber donde cae...
compila con -g y ejecuta con -d y captura el log de eso... y veamos que instruccion es la ultima en ejecutarse.
has la prueba 2 o 3 veces y vemos...
necesito las ultimas 300 lineas de ese log.
estuve trabajando con la version dingux y el problema del crash esta en la funcion MIX_OpenAudio, o sea, que el error es mas basico, no puede abrir el dispositivo de audio...
sigo investigando...
y probaste con un ejemplo básico de sdl a secas? a ver si es culpa de sdl mixer.
no, aun no lo probe, me tome un respiro, me canse de hacer pruebas.
Ok, voy a hacer el log.txt
Primero he intentado por consola, porque solo tengo 5GB de disco libre, me he ido, he vuelto a la hora y aún seguia eso haciendo calculos en el startup inicial :D
Estaría genial poder activar y desactivar el log, así me iba al sitio en cuestión directamente.
Ahora te cuento.
Efectivamente, muere en
play_song :
Quote
[ 193] 00000092 00000000 PRIVATE 0
029C7B28
[ 195] 00000084 00000000 PUSH 0
029C7B28 00000000
[ 197] 00000047 LETNP
[ 198] 000000FF 0000605C ------ sorr.prg:24668 -> IF (file_exists("mod/"+bucle+".ogg")) ruta2="mod/"+bucle+".ogg"; ELSE IF (file_exists("mod/music/"+bucle+".ogg")) ruta2="mod/music/"+bucle+".ogg"; END END
[ 200] 00000384 00000228 STRING PUSH 552
00000228
[ 202] 00000097 00000004 GET_PRIVATE 4
00000228 0000002D
[ 204] 000000C4 00000000 INT2STR 0
00000228 00000476
[ 206] 00000325 STRING ADD
00000477
[ 207] 00000384 000000A7 STRING PUSH 167
00000477 000000A7
[ 209] 00000325 STRING ADD
00000478
[ 210] 0000008A 0000011E SYSCALL FILE_EXISTS (286)
00000000
[ 212] 0000009C 000000E7 JFALSE 231
[ 231] 000000FF 0000605C ------ sorr.prg:24668 -> IF (file_exists("mod/"+bucle+".ogg")) ruta2="mod/"+bucle+".ogg"; ELSE IF (file_exists("mod/music/"+bucle+".ogg")) ruta2="mod/music/"+bucle+".ogg"; END END
[ 233] 00000384 0000022A STRING PUSH 554
0000022A
[ 235] 00000097 00000004 GET_PRIVATE 4
0000022A 0000002D
[ 237] 000000C4 00000000 INT2STR 0
0000022A 00000479
[ 239] 00000325 STRING ADD
0000047A
[ 240] 00000384 000000A7 STRING PUSH 167
0000047A 000000A7
[ 242] 00000325 STRING ADD
0000047B
[ 243] 0000008A 0000011E SYSCALL FILE_EXISTS (286)
00000001
[ 245] 0000009C 00000106 JFALSE 262
[ 247] 000000FF 0000605C ------ sorr.prg:24668 -> IF (file_exists("mod/"+bucle+".ogg")) ruta2="mod/"+bucle+".ogg"; ELSE IF (file_exists("mod/music/"+bucle+".ogg")) ruta2="mod/music/"+bucle+".ogg"; END END
[ 249] 00000392 0000003C STRING PRIVATE 60
029C7B64
[ 251] 00000384 0000022A STRING PUSH 554
029C7B64 0000022A
[ 253] 00000097 00000004 GET_PRIVATE 4
029C7B64 0000022A 0000002D
[ 255] 000000C4 00000000 INT2STR 0
029C7B64 0000022A 0000047C
[ 257] 00000325 STRING ADD
029C7B64 0000047D
[ 258] 00000384 000000A7 STRING PUSH 167
029C7B64 0000047D 000000A7
[ 260] 00000325 STRING ADD
029C7B64 0000047E
[ 261] 00000347 STRING LETNP
[ 262] 0000009B 00000185 JUMP 389
[ 389] 000000FF 00006063 ------ sorr.prg:24675 -> IF (cambia==0)
[ 391] 00000097 0000001C GET_PRIVATE 28
00000000
[ 393] 00000084 00000000 PUSH 0
00000000 00000000
[ 395] 0000002D EQ
00000001
[ 396] 0000009C 00000342 JFALSE 834
[ 398] 000000FF 00006064 ------ sorr.prg:24676 -> stop_song();
[ 400] 0000008C 00000010 SYSPROC STOP_SONG (16)
[ 402] 000000FF 00006065 ------ sorr.prg:24677 -> IF (jukebox_tipo==1) una_vez=1; jukebox_pos=0; signal(type jukebox,s_kill); signal(type letra_nombre4,s_kill); END
[ 404] 00000097 00000018 GET_PRIVATE 24
00000000
[ 406] 00000084 00000001 PUSH 1
00000000 00000001
[ 408] 0000002D EQ
00000000
[ 409] 0000009C 000001B9 JFALSE 441
[ 441] 000000FF 00006066 ------ sorr.prg:24678 -> IF (jukebox_tipo==2) una_vez=1; jukebox_pos=1; signal(type jukebox,s_kill); END
[ 443] 00000097 00000018 GET_PRIVATE 24
00000000
[ 445] 00000084 00000002 PUSH 2
00000000 00000002
[ 447] 0000002D EQ
00000000
[ 448] 0000009C 000001D8 JFALSE 472
[ 472] 000000FF 00006068 ------ sorr.prg:24680 -> IF (trozo_cancion>0) unload_song(trozo_cancion); trozo_cancion=0; END
[ 474] 00000099 00008198 GET_GLOBAL 33176
01057D80
[ 476] 00000084 00000000 PUSH 0
01057D80 00000000
[ 478] 0000002F GT
00000001
[ 479] 0000009C 000001EE JFALSE 494
[ 481] 000000FF 00006068 ------ sorr.prg:24680 -> IF (trozo_cancion>0) unload_song(trozo_cancion); trozo_cancion=0; END
[ 483] 00000099 00008198 GET_GLOBAL 33176
01057D80
[ 485] 0000008C 0000000F SYSPROC UNLOAD_SONG (15)
[ 487] 000000FF 00006068 ------ sorr.prg:24680 -> IF (trozo_cancion>0) unload_song(trozo_cancion); trozo_cancion=0; END
[ 489] 00000094 00008198 GLOBAL 33176
00A22318
[ 491] 00000084 00000000 PUSH 0
00A22318 00000000
[ 493] 00000047 LETNP
[ 494] 000000FF 00006069 ------ sorr.prg:24681 -> IF (cancion_cargada>0) unload_song(cancion_cargada); cancion_cargada=0; END
[ 496] 00000099 00008194 GET_GLOBAL 33172
00C44B20
[ 498] 00000084 00000000 PUSH 0
00C44B20 00000000
[ 500] 0000002F GT
00000001
[ 501] 0000009C 00000204 JFALSE 516
[ 503] 000000FF 00006069 ------ sorr.prg:24681 -> IF (cancion_cargada>0) unload_song(cancion_cargada); cancion_cargada=0; END
[ 505] 00000099 00008194 GET_GLOBAL 33172
00C44B20
[ 507] 0000008C 0000000F SYSPROC UNLOAD_SONG (15)
[ 509] 000000FF 00006069 ------ sorr.prg:24681 -> IF (cancion_cargada>0) unload_song(cancion_cargada); cancion_cargada=0; END
[ 511] 00000094 00008194 GLOBAL 33172
00A22314
[ 513] 00000084 00000000 PUSH 0
00A22314 00000000
[ 515] 00000047 LETNP
[ 516] 000000FF 0000606B ------ sorr.prg:24683 -> IF (bucle==80) ruta2="mod/games/"+ruta_sormaker+"/script/"+nombre_fase+".ogg"; END
[ 518] 00000097 00000004 GET_PRIVATE 4
0000002D
[ 520] 00000084 00000050 PUSH 80
0000002D 00000050
[ 522] 0000002D EQ
00000000
[ 523] 0000009C 00000220 JFALSE 544
[ 544] 000000FF 0000606E ------ sorr.prg:24686 -> IF (modo_sormaker==0)
[ 546] 00000099 00006DF0 GET_GLOBAL 28144
00000000
[ 548] 00000084 00000000 PUSH 0
00000000 00000000
[ 550] 0000002D EQ
00000001
[ 551] 0000009C 000002C1 JFALSE 705
[ 553] 000000FF 0000606F ------ sorr.prg:24687 -> IF (bucle==43 AND inicio==0)
[ 555] 00000097 00000004 GET_PRIVATE 4
0000002D
[ 557] 00000084 0000002B PUSH 43
0000002D 0000002B
[ 559] 0000002D EQ
00000000
[ 560] 0000009E 00000238 JTFALSE 568
00000000
[ 568] 0000009C 00000269 JFALSE 617
[ 617] 000000FF 00006073 ------ sorr.prg:24691 -> IF (bucle==11 OR bucle==26 OR bucle==32 OR bucle==49 OR bucle==65 OR bucle==66) repetir=0; musica_LOOP=2; END
[ 619] 00000097 00000004 GET_PRIVATE 4
0000002D
[ 621] 00000084 0000000B PUSH 11
0000002D 0000000B
[ 623] 0000002D EQ
00000000
[ 624] 0000009E 00000277 JTFALSE 631
00000000
[ 631] 00000097 00000004 GET_PRIVATE 4
00000000 0000002D
[ 633] 00000084 0000001A PUSH 26
00000000 0000002D 0000001A
[ 635] 0000002D EQ
00000000 00000000
[ 636] 0000002B OR
00000000
[ 637] 0000009E 00000284 JTFALSE 644
00000000
[ 644] 00000097 00000004 GET_PRIVATE 4
00000000 0000002D
[ 646] 00000084 00000020 PUSH 32
00000000 0000002D 00000020
[ 648] 0000002D EQ
00000000 00000000
[ 649] 0000002B OR
00000000
[ 650] 0000009E 00000291 JTFALSE 657
00000000
[ 657] 00000097 00000004 GET_PRIVATE 4
00000000 0000002D
[ 659] 00000084 00000031 PUSH 49
00000000 0000002D 00000031
[ 661] 0000002D EQ
00000000 00000000
[ 662] 0000002B OR
00000000
[ 663] 0000009E 0000029E JTFALSE 670
00000000
[ 670] 00000097 00000004 GET_PRIVATE 4
00000000 0000002D
[ 672] 00000084 00000041 PUSH 65
00000000 0000002D 00000041
[ 674] 0000002D EQ
00000000 00000000
[ 675] 0000002B OR
00000000
[ 676] 0000009E 000002AB JTFALSE 683
00000000
[ 683] 00000097 00000004 GET_PRIVATE 4
00000000 0000002D
[ 685] 00000084 00000042 PUSH 66
00000000 0000002D 00000042
[ 687] 0000002D EQ
00000000 00000000
[ 688] 0000002B OR
00000000
[ 689] 0000009C 000002C1 JFALSE 705
[ 705] 000000FF 00006076 ------ sorr.prg:24694 -> IF (bucle==65 OR bucle==66) repetir=0; musica_LOOP=2; END
[ 707] 00000097 00000004 GET_PRIVATE 4
0000002D
[ 709] 00000084 00000041 PUSH 65
0000002D 00000041
[ 711] 0000002D EQ
00000000
[ 712] 0000009E 000002CF JTFALSE 719
00000000
[ 719] 00000097 00000004 GET_PRIVATE 4
00000000 0000002D
[ 721] 00000084 00000042 PUSH 66
00000000 0000002D 00000042
[ 723] 0000002D EQ
00000000 00000000
[ 724] 0000002B OR
00000000
[ 725] 0000009C 000002E5 JFALSE 741
[ 741] 000000FF 00006078 ------ sorr.prg:24696 -> IF (bucle==80) repetir=0; musica_loop=2; END
[ 743] 00000097 00000004 GET_PRIVATE 4
0000002D
[ 745] 00000084 00000050 PUSH 80
0000002D 00000050
[ 747] 0000002D EQ
00000000
[ 748] 0000009C 000002FC JFALSE 764
[ 764] 000000FF 0000607B ------ sorr.prg:24699 -> IF (inicio>0)
[ 766] 00000097 00000000 GET_PRIVATE 0
00000000
[ 768] 00000084 00000000 PUSH 0
00000000 00000000
[ 770] 0000002F GT
00000000
[ 771] 0000009C 00000321 JFALSE 801
[ 801] 000000FF 00006080 ------ sorr.prg:24704 -> IF (bucle>0)
[ 803] 00000097 00000004 GET_PRIVATE 4
0000002D
[ 805] 00000084 00000000 PUSH 0
0000002D 00000000
[ 807] 0000002F GT
00000001
[ 808] 0000009C 00000342 JFALSE 834
[ 810] 000000FF 00006081 ------ sorr.prg:24705 -> cancion_cargada = load_song(ruta2);
[ 812] 00000094 00008194 GLOBAL 33172
00A22314
[ 814] 00000397 0000003C STRING GET_PRIVATE 60
00A22314 0000047E
[ 816] 0000008A 0000000D SYSCALL LOAD_SONG (13)
00A22314 00C44B20
[ 818] 00000047 LETNP
[ 819] 000000FF 00006082 ------ sorr.prg:24706 -> play_song(cancion_cargada,0);
[ 821] 00000099 00008194 GET_GLOBAL 33172
00C44B20
[ 823] 00000084 00000000 PUSH 0
00C44B20 00000000
[ 825] 0000008C 0000000E SYSPROC PLAY_SONG (14)
Te pongo el código fuente en el sitio concreto que apunta el debug :
QuotePROCESS melodia(inicio,bucle,fade_cancion,cambia);
PRIVATE
volumen;
repetir=-1;
STRING ruta1;
STRING ruta2;
BEGIN
priority=130;
set_song_volume(vol);
tiempo_baja_volumen=vol;
// SI QUIERE MANTENER CANCION PERO NO HAY
IF (cambia!=0)
IF (is_playing_song()<1 AND guarda_cancion!=bucle) cambia=0; END
guarda_cancion=bucle;
END
// REMAPEA RUTAS
musica_LOOP=1;
IF (fade_cancion==1) volumen=vol; END
IF (file_exists("mod/"+inicio+"a.ogg")) ruta1="mod/"+inicio+"a.ogg"; ELSE inicio=0; END
IF (file_exists("mod/"+bucle+".ogg")) ruta2="mod/"+bucle+".ogg"; ELSE bucle=0; END
// CARGA RECURSOS
IF (cambia==0)
stop_song();
IF (trozo_cancion>0) unload_song(trozo_cancion); trozo_cancion=0; END
IF (cancion_cargada>0) unload_song(cancion_cargada); cancion_cargada=0; END
IF (inicio>0)
trozo_cancion = load_song(ruta1);
cancion_cargada = load_song(ruta2); //Wii, no cargar 2
play_song(trozo_cancion,0);
ELSE
IF (bucle>0)
cancion_cargada = load_song(ruta2);
play_song(cancion_cargada,0); // AQUI MUERE
musica_LOOP=0;
END
END
END
IF (inicio==0 AND bucle==0) musica_LOOP=-1; END
LOOP
// LOOP DE CANCION CON INTRO
IF (musica_LOOP==1 OR musica_LOOP==2)
IF (is_playing_song()<1)
IF (musica_LOOP==2) musica_LOOP=0; END
stop_song();
IF (trozo_cancion>0) unload_song(trozo_cancion); trozo_cancion=0; END
play_song(cancion_cargada,0);
END
END
// LOOP DE CANCION SIN INTRO
IF (musica_LOOP==0 AND repetir==-1)
IF (is_playing_song()<1 AND cancion_cargada>0)
stop_song();
play_song(cancion_cargada,0);
END
END
FRAME;
END
END
Mis ojos han brillado por un momento!!! ;D ;D
estamos fritos, si cae ahi, porque si cae ahi, luego de haber sonado varios songs es algun problema de la mixer...
para estar seguros, baja nuevamente los ultimos fuentes, compila y prueba nuevamente, porque he corregido una situacion de error que no se liberaba un handle, y por ende puede que a la larga de problemas.
asi descartamos que no sea eso.
He actualizado, sigue petando.
Has pensado en compilar con otra sdl_mixer en lugar de la 1.2.8 ?
por favor, pasame una version para poder ejecutarla en linux... a ver si es problema de la version de SDL o de windows...
pasamelo por mail, como siempre.
O pasate por el msn si puedes, he conseguido aislarlo bastante del código y será más rápido. :)
umn,oleee, si se soluciona ese problema puede que de rebote se solucionen mis problemas de cuelgues de sonido de la psp.
Recompilaré por si la última versión de svn me quita algún problema en psp :D.
pues no, es un tema de dlls vorbisfile, vorbis-0 y ogg.
puse las que tengo en mi entorno y funciona.
solucionado el problema de la mixer en windows...
maldita version oficial, y sus dlls vorbis, vorbisfile y ogg...
ya salio andando, usando la mixer oficial (porque la mia le falta compilar con soporte de varios formatos de sonidos y si empiezo a probar 1 por 1, no termino mas) y mis vorbis/ogg... y sale de maravillas.
ni bien me confirmen que no hay ningun problema, subo las nuevas versiones de todas las plataformas oficialmente soportadas (menos dingux, porque aun esta verde por el tema de la mixer)
Quote from: SplinterGU on March 25, 2011, 04:11:33 AM
solucionado el problema de la mixer en windows...
maldita version oficial, y sus dlls vorbis, vorbisfile y ogg...
ya salio andando, usando la mixer oficial (porque la mia le falta compilar con soporte de varios formatos de sonidos y si empiezo a probar 1 por 1, no termino mas) y mis vorbis/ogg... y sale de maravillas.
ni bien me confirmen que no hay ningun problema, subo las nuevas versiones de todas las plataformas oficialmente soportadas (menos dingux, porque aun esta verde por el tema de la mixer)
No entendí, ¿tienes tu propia mixer de que?
no, la SDL_mixer oficial, pero las dlls que usa la SDL_mixer, compiladas propias, las oficiales crashean.
En Windows me va bien esta versión Splinter, tengo que hacerle aún más rodaje, entre hoy y mañana, pero en principio el test aquel no lo cruje con la sdl_mixer que tu añades o la mia, creo que tu ya probaste el test de estres y de la mochila también.
En la Wiz me es imposible hacer una partida completa, creo que la memoria RAM disponible varia de una partida a otra o que no esta descargando bien los recursos, a la maquina le duele mucho el cambio de OGGs, se congela, se pone a 3fps de forma temporal, hace cosas raras con el sonido, si desactivo la música me dura más desde luego, supongo que todo esto es en parte porque el juego entra muy justo en Wiz (no uso la música dentro de la mochila), pero me extraña que una misma fase en una sesión la cargue 4 veces y en otra solo pueda 2, haciendo el mismo recorrido, asegurandome de que la gestión de memoria es correcta, por lo menos en Windows.
supongo que sera cuestion de memoria... pone en algun lugar visible el retorno de la funcion mem_free()... a ver que pasa.
Probare a jugar una partida completa sin música en Wiz, luego te cuento.
Has hecho cambios en set_fps desde agosto 2010 ?
Me comentan que hay caidas de rendimiento en esta versión concreta del lenguaje y en la que tienes subida en la web, cosa que no pasaba en la de agosto 2010, son caidas temporales y que no tienen que ver con la carga de instrucciones / procesos en pantalla, simplemente pasan de vez en cuando, durante varios segundos y se marchan, especialmente despues de cambios en set_fps a lo largo de la ejecución, como puede ser ponerlo a 24fps y luego a 60fps.
nop, los ultimos cambios de FPS los testeamos juntos.
Pude acabar una partida completa en la Wiz, sin música, es el OGG el problema.
Voy a ver si le hago algun test..
por que no probas con otro tipo de audio? por ejemplo, pasando los sonidos a wav o mp3? con esto podrias ver si el tema es de la vorbis u ogg o algun tema general de la sdl_mixer.
ya te digo que en wiz tienen la version 1.2.6 de la sdl_mixer.
Quote from: Kloppix on March 16, 2011, 08:53:32 AM
No se si éste sitio sea el mas lógico para comentarlo, pero la versión 1.0.0rc20-svn20110314 me da el siguiente problema:
# bgdc hola.prg
*** buffer overflow detected ***: bgdc terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x50)[0x2f7390]
/lib/tls/i686/cmov/libc.so.6(+0xe12ca)[0x2f62ca]
/lib/tls/i686/cmov/libc.so.6(+0xe19e8)[0x2f69e8]
bgdc[0x806b0f9]
bgdc[0x804953e]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x22bbd6]
bgdc[0x80493a1]
======= Memory map: ========
00200000-00213000 r-xp 00000000 08:07 782034 /lib/libz.so.1.2.3.3
00213000-00214000 r--p 00012000 08:07 782034 /lib/libz.so.1.2.3.3
00214000-00215000 rw-p 00013000 08:07 782034 /lib/libz.so.1.2.3.3
00215000-00368000 r-xp 00000000 08:07 786130 /lib/tls/i686/cmov/libc-2.11.1.so
00368000-00369000 ---p 00153000 08:07 786130 /lib/tls/i686/cmov/libc-2.11.1.so
00369000-0036b000 r--p 00153000 08:07 786130 /lib/tls/i686/cmov/libc-2.11.1.so
0036b000-0036c000 rw-p 00155000 08:07 786130 /lib/tls/i686/cmov/libc-2.11.1.so
0036c000-0036f000 rw-p 00000000 00:00 0
00883000-0089e000 r-xp 00000000 08:07 821200 /lib/ld-2.11.1.so
0089e000-0089f000 r--p 0001a000 08:07 821200 /lib/ld-2.11.1.so
0089f000-008a0000 rw-p 0001b000 08:07 821200 /lib/ld-2.11.1.so
00c92000-00caf000 r-xp 00000000 08:07 781919 /lib/libgcc_s.so.1
00caf000-00cb0000 r--p 0001c000 08:07 781919 /lib/libgcc_s.so.1
00cb0000-00cb1000 rw-p 0001d000 08:07 781919 /lib/libgcc_s.so.1
00cdd000-00e15000 r-xp 00000000 08:07 821323 /lib/i686/cmov/libcrypto.so.0.9.8
00e15000-00e1d000 r--p 00137000 08:07 821323 /lib/i686/cmov/libcrypto.so.0.9.8
00e1d000-00e2b000 rw-p 0013f000 08:07 821323 /lib/i686/cmov/libcrypto.so.0.9.8
00e2b000-00e2f000 rw-p 00000000 00:00 0
00ecf000-00ed0000 r-xp 00000000 00:00 0 [vdso]
00f5e000-00f60000 r-xp 00000000 08:07 792413 /lib/tls/i686/cmov/libdl-2.11.1.so
00f60000-00f61000 r--p 00001000 08:07 792413 /lib/tls/i686/cmov/libdl-2.11.1.so
00f61000-00f62000 rw-p 00002000 08:07 792413 /lib/tls/i686/cmov/libdl-2.11.1.so
08048000-08071000 r-xp 00000000 08:07 271163 /usr/bin/bgdc
08071000-08072000 r--p 00028000 08:07 271163 /usr/bin/bgdc
08072000-08088000 rw-p 00029000 08:07 271163 /usr/bin/bgdc
08088000-081a1000 rw-p 00000000 00:00 0
09648000-09669000 rw-p 00000000 00:00 0 [heap]
b7738000-b773a000 rw-p 00000000 00:00 0
b7753000-b7755000 rw-p 00000000 00:00 0
bf95a000-bf96f000 rw-p 00000000 00:00 0 [stack]
Abortado
En una instalación limpia de Ubuntu Natty puedo replicar el problema, más o menos. ¿Qué versión de Ubuntu usas?. ¡Ah! y moddesc no lo he subido nunca, pero lo intentaré subir en los próximos días.
nueva mejora
- ahora el scroll no crashea si se elimina alguno de los graficos del scroll
el scroll sigue activo, pero no se dibuja ni se procesa, si se setea un nuevo grafico con el mismo id con que se inicio el scroll en el mismo file, entonces se vuelve a procesar el scroll.
pregunta..
estaba mirando el entorno de programacion de dreamcast
y como se compila bennu para tener un solo ejecutable... sin dlls
en el cvs esta el make para llevarme una idea, de como empacar todo?
no se puede compilar en un solo ejecutable por ahora...
dreamcast no soporta dlls?
Quote from: SplinterGU on March 31, 2011, 10:44:10 AM
no se puede compilar en un solo ejecutable por ahora...
dreamcast no soporta dlls?
ni idea , hay poca info. mirare..
cuando reciba la dreamcast que me va a enviar Fuseki, me voy a tener que meter con eso.
perfecto , encontre algo de pronto te pueda servir...
un port de fenix que no es de chui, es de otra gente que inclusive le metio soporte de dlls
hay que mirarloo..
http://webcache.googleusercontent.com/search?q=cache:_WQA--FyOykJ:www.dc-swat.ru/page/fenix/+Fenix_dll_sdk_v1.0.tar.bz2&cd=1&hl=es&ct=clnk&gl=co&source=www.google.com.co (http://webcache.googleusercontent.com/search?q=cache:_WQA--FyOykJ:www.dc-swat.ru/page/fenix/+Fenix_dll_sdk_v1.0.tar.bz2&cd=1&hl=es&ct=clnk&gl=co&source=www.google.com.co)
pero si soporta dlls entonces no creo haya nada raro, a menos que no soporte dlls nativas y sea un hack.
gracias, el makefile creo que puede resultar muy util.
lastima que no estan los fuentes de fenix... pero bueno, no importa, algo es algo.
Y si no, se puede probar con la versión monolítica que hay, la no oficial que se está usando en Wii y PSP ¿no?
pues creo que son ligeramente distintas. :D, no se hasta qué punto usó josebita mi formato monolítico :D.
voy a pedirle a los autores el codigo de fenix .. ese..
Splinter, en cuanto al crash (éste (http://forum.bennugd.org/index.php?topic=102.msg38910#msg38910)) veo que se produce en la llamada a realpath en core/include/files_st.h.
Para esa llamada en linux, el valor de __MAX_PATH es 260. Si aumento ese límite, el crash desaparece.
Me imagino que redujiste el límite para las plataformas pequeñitas, pero ¿no sería posible diferenciar linux pequeños y grandes?.
PD: ¿Esto sólo ocurre en Ubuntu?. ¿No te ocurre en Debian?.
a mi no me pasa, pero podria ser causa de caida en varios linux... no se, voy a cambiarlo e intentar.
no se si esto no afecta a los dcb tambien... chequeaste eso?
He probado el firewhip y el eek y no me han dado mayor problema.
los que ya estaban compilados? o los recompilaste?
Los ya compilados, claro. Lo otro es trampa :)
excelente, gracias.
Splinter, exite algun problema con la función glob cuando hay empaquetado y se quiere hacer glob fuera de él ?
la funcion glob solo trabaja fuera del empaquetado.
nueva version
bgd-1.0.0RC22(r243)
Gran trabajo Juan, bajando la nueva release. Muchas gracias! karma up :D
Karma pa Splinter, que hace tiempo que no le doy ninguno. ;D
XCLNT
Que ha cambiado con la opciones de mochila -s? en windows se me crea el ejecutable correctamente compilando con las opciones -a y -s para que me cree el ejecutable con el contenido añadido en él. El caso es que, aunque el tamaño del exe indica que si se ha incluido, al ejecutarlo da error. Si pongo el contenido que había añadido al exe en la carpeta, entonces si funciona. mmmm no se si me he explicado bien :-[
Karma para Splinter! Como siempre, gracias!
Quote from: blostec on April 12, 2011, 10:31:53 AM
Que ha cambiado con la opciones de mochila -s? en windows se me crea el ejecutable correctamente compilando con las opciones -a y -s para que me cree el ejecutable con el contenido añadido en él. El caso es que, aunque el tamaño del exe indica que si se ha incluido, al ejecutarlo da error. Si pongo el contenido que había añadido al exe en la carpeta, entonces si funciona. mmmm no se si me he explicado bien :-[
a mi no me ha pasado eso.
comenta paso a paso como lo compilas, si usas un script copia el script, etc, y comenta paso a paso como lo ejecutas, si por linea de comando o haciendo click desde el navegador, desde que directorio, donde estan las dlls y demas.
Ok te cuento:
compilo desde linea de comandos desde el directorio de BennuGD donde también tengo los archivos campo.prg y campo.fpg así:
bgdc -a -s bgdi.exe campo.prg
el caso es que compila y genera el ejecutable correctamente y al iniciarlo funciona correctamente. Pero cuando borro el archivo campo.fpg que se supone que esta añadido en el .exe, da error.
-Con campo.fpg en el directorio:
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=1866)
funciona correctamente
-Cuando quito el archivo campo.fpg que ya no debe estar allí, da error:
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=1868)
Adjunto el ejemplo campo en un rar. Lo he probado con diversos ejemplos y en todos falla. El caso es que eso mismo si funciona con la RC21 y anteriores.
lo chequeare, gracias.
efectivamente falla en windows, estoy viendo donde es el tema.
gracias.
Gracias a ti por tu atención, saludos!
ya tengo el fix de la mochila, y otros fix mas que tienen que ver con esto mismo.
estoy compilando la version windows, hare una prueba mas y en estos dias la subo, no digo hoy ni mañana... pero si actualizare el svn.
Creo recordar que eso ocurria en el juego de Futublog de la crap combo, se me habia olvidado relatar el problema
olvide anunciar que ya subi nueva version fixeada.
ahora es posible crear aplicaciones que si las ponemos en el path (junto a sus recursos, grafico, sonidos, etc), se pueden correr como cualquier otra aplicacion estandard.
Gracias, a ver si esta noche actualizo el PPA y mi versión monolítica.
Gracias Juan, ahora la bajo y la pruebo. Saludos acompañados de karma :P
Gracias por tu trabajo Splinter! ( k++) Lo que quiero que me despejes una duda, ahora por lo que entiendo entonces, se puede tener todo un programa en un .exe y listo? sin necesidad de librerías junto con este .exe?
no, las librerias son otra cosa... igual puedes poner las libs en otro directorio mientras este en el path.
Gracias Splinter. Un karmita por aquí también. ;D
Version nueva, Karma nuevo :)
Por cierto, Splinter ¿te funciona bien el Drajon Lol: devolución, extreme edition (vamos, el juego de drajon lol de la última crap compo) en WIZ? A mi me sale con los colores distorsionados y no sé si es del set mode o qué, pero en otros juegos no me pasa (y sí, cargo la paleta).
Quote from: Drumpi on April 19, 2011, 12:31:33 PM
Version nueva, Karma nuevo :)
Por cierto, Splinter ¿te funciona bien el Drajon Lol: devolución, extreme edition (vamos, el juego de drajon lol de la última crap compo) en WIZ? A mi me sale con los colores distorsionados y no sé si es del set mode o qué, pero en otros juegos no me pasa (y sí, cargo la paleta).
no lo probe, de donde lo bajo?
Desconozco si hay una versión mas nueva, pero creo que se refiere a este:
http://drumpi.se32.com/games/drajon_lol4.zip (http://drumpi.se32.com/games/drajon_lol4.zip)
Topic donde se habla de los problemas en wiz: http://forum.bennugd.org/index.php?topic=1718.msg31557#msg31557 (http://forum.bennugd.org/index.php?topic=1718.msg31557#msg31557)
Minipunto y punto para blostec.
karma por ahorrarme la búsqueda (este fin de semana he estado fuera de boda, así que las pilas están bajo mínimos ^^U).
splinter, como complicas el uso de bennu en linux, joe, ahora resulta que necesito openssl 1.0.0 y libssl1.0.0 y resulta que no están en la versión de debian squeezy. Menos mal que los encontré en la versión experimental de debian y me he arrumbao los .deb que si no... :D
yo no complico nada, son los upgrade de los linux los que lo hacen... lo siento.
:D, no lo sientas, el avance es el avance :D.
Yo tengo el mismo problema :(
yo uso la version testing.
acabo de implementar m7 en 16 y 32bits, con ciertas limitaciones, tanto el grafico indoor, como el outdoor deben ser de la misma profundidad del modo de video, y tambien por ahora (por hoy) no hay flag translucent en 32bits.
aun no lo probe, pero bueno, la implementacion la tengo, ni bien la tenga probada y con la transparencia en los 32bits la subo al svn.
bueno, en 8bpp sigue funcionando, necesito hacerme los graficos a 16bits y a 32bits para probar.
karma (por hoy) tambien :)
probado m7 en 16 y en 32bits... funciona perfect... ahora solo resta meter transparencias en 32bits.
ou, yeah!!
(http://img822.imageshack.us/img822/4408/vlcsnap2011022401h59m39.jpg)
OHHH YEEAAAHH!
bien, free, ya tenes soporte 16bpp y 32bpp en el modo7.
1 punto menos de los pendientes.
unica limitacion, modo de video, grafico indoor y grafico outdoor, deben tener la misma profundidad de colores, luego los procesos pueden ser cualquier profundidad, obviamente con las mismas restricciones que el 2d comun.
ya esta el repositorio actualizado, asi que pueden generar sus versiones de ejecutables, yo aun no actualizare los binarios, voy a poner unos cambios mas.
Quote from: SplinterGU on June 16, 2011, 01:21:30 AM
ya tenes soporte 16bpp y 32bpp en el modo7.
joder bennu lleva años luz a sus competidores...
Quote from: l1nk3rn3l on June 16, 2011, 04:26:44 AM
Quote from: SplinterGU on June 16, 2011, 01:21:30 AM
ya tenes soporte 16bpp y 32bpp en el modo7.
joder bennu lleva años luz a sus competidores...
No será al revés?
Ya era hora de que Bennu tuviera mode_7 a 32 bits, y ahún así es sin transparencia..
Vale, a la espera de los binarios para ver esos colores moviendose xD
Voy a atreverme a compilar la version Pandora ya que tengo el makefile de stuckie xD
quien dijo que no tiene transparencias? ya dije que si las tiene.
free, puedes bajarte los fuentes del svn y ahi tambien tienes los makes para generar la version windows o linux, linux te sera mas facil me parece.
Ya, pero despues de las experiencias del pasado ya solo creo que conseguiré compilar la de Pandora xD
ok, para el resto de los binarios vas a tener que esperar un buen tiempo, hasta que no descargue la lista de pendientes creo que no liberare ejecutables oficiales.
No te preocupes, en realidad lo que mas me urge es la lib de eventos para Wiz / Caanoo (nos gusta pedir hehehe)
pero si no te va la jkeys, dudo que te pueda servir la lib de eventos.
vas a tener que adaptar la logica a tu modificacion.
Es esa la idea, puedo usar solo la parte de los eventos, cuando necesite evento uso la tuya, en los otros casos la mia. Tendré que probar si tus eventos van en mis caanoo's.
Pues nada, aprovechamos la coyuntura para darle a Splinter uno de sus merecidísimos karmas :D
Y bueno, ya con tiempo se le pedirán más cosas, de momento, hay pruebas en standby antes de poder decir nada más ;D
fix collision with some flags, now only this mask is used for collision flag ( B_HMIRROR | B_VMIRROR )
se corrije collision con algunos flags, ahora solo se usa la mascara formada por ( B_HMIRROR | B_VMIRROR ) para el flag en la collision.
Quote from: SplinterGU on June 19, 2011, 02:21:26 AM
fix collision with some flags, now only this mask is used for collision flag ( B_HMIRROR | B_VMIRROR )
se corrije collision con algunos flags, ahora solo se usa la mascara formada por ( B_HMIRROR | B_VMIRROR ) para el flag en la collision.
Acabo de actualizar el PPA con el último código.
buenisimo Josebita, gracias :D
Quote from: josebita on June 20, 2011, 12:29:11 AM
Quote from: SplinterGU on June 19, 2011, 02:21:26 AM
fix collision with some flags, now only this mask is used for collision flag ( B_HMIRROR | B_VMIRROR )
se corrije collision con algunos flags, ahora solo se usa la mascara formada por ( B_HMIRROR | B_VMIRROR ) para el flag en la collision.
Acabo de actualizar el PPA con el último código.
gracias! karma!
- Remove sound in dingux (this versions works nice!)
- Add new function FFLUSH(file handle)
- Fix fseek (file_seek) function, now return values like C. (wiki need fix)
fucking problem in gcc-4.6, now don't support --as-needed, we must use
CC=gcc-4.5 ./build-std-unix.sh
for compile bennugd in linux
gcc-4.5 or other compatible
- Fix error in makefile with gcc 4.6 (--as-needed)
- add accessed and statechg into fileinfo struct,
created is not available in unix/linux,
status change is not available in windows
Jurl? ¿en cristiano? ¿o son cambios internos?
Aprovecho para darte uno d elos karmas que te debo por la nueva versión... en SVN :D
internos y externos... para las opendir y readdir.
Acabo de bajarme la última versión RC y (aunque he estado algunos meses sin seguir mucho) he visto que ahora todos archivos se encuentran en la misma carpeta, cuando antes se dividían en subcarpetas (/bin, /externals, /libs y /modules). Supongo que el cambio ha sido en pro de la facilidad de montar los proyectos, cosa que agradezco. Aún así le veo un "pero": la carpeta del ejecutable se llena de dlls. ¿Se podrían meter en subcarpetas para así tener sólo el ejecutable (por limpieza)? ¿Cómo? ¿Hay algún modo de saber exactamente, sin hacerlo manualmente, qué librerías, módulos... necesito en mi proyecto? Hasta ahora yo lo he hecho a lo fácil, copiar todo a la carpeta del ejecutable. (Creo que esto sería tema para un tutorial)
Un saludo
tenes carpetas especiales para hacer eso, que podes llamar plugins, modules, dlls, mod, y algunas mas, busca en este hilo y vas a encontrar la lista.
¿Podrías ser un poco más específico? Es un hilo de ciento y pico páginas...
en este mismo hilo, en buscar, pone "plugins" y dale enter, el 2do resultado esta la solucion
Quote from: SplinterGU on March 09, 2011, 03:52:54 AM
ya es posible poner las dlls en carpetas separadas, pero con las siguientes restricciones:
- bgdrtm debe estar en la carpeta del ejecutable, en el caso de linux tambien debe estar en LD_LIBRARY_PATH (o ld.conf*) el path donde se haya la libreria.
- las dlls/so se pueden poner en las siguientes subcarpetas donde se encuentre el bgdi que se ejecuta: "runtime", "modules", "mod", "mods", "lib", "libs", "extensions", "plugins"
se puede usar 1 o varias de estas subcarpetas.
- ahora se agrega el path del binario en el path interno donde se abren los archivos de recursos del juego (incluido el dcb)
en un rato subo las modificaciones, no hare release binaria de momento, pero el que quiere compilar y probarla ahi lo tendra disponible.
me falta testear la version windows, y consolas, solo probe la version linux.
Supongo que te refieres a esto. Aunque no lo he entendido bien, esto exactamente:
Quoteahora se agrega el path del binario en el path interno donde se abren los archivos de recursos del juego (incluido el dcb)
Gracias de antemano
podes crear cualquiera de las siguientes subcarpetas y meter las dlls ahi
"runtime", "modules", "mod", "mods", "lib", "libs", "extensions", "plugins"
Quote from: SplinterGU on July 11, 2011, 10:02:31 PM
podes crear cualquiera de las siguientes subcarpetas y meter las dlls ahi
"runtime", "modules", "mod", "mods", "lib", "libs", "extensions", "plugins"
He hecho algunas pruebas, pero tengo que hacer lo de siempre, meter todas las dll en la misma carpeta que el ejecutable.
Los pasos que seguí fueron estos:
1-. Crear una carpeta "libs". Meter ahí todos los dll excepto libbgdrtm.dll.
2-. Meto libbgdrtm.dll en la misma carpeta que ele ejecutable y me pide libeay32.dll para que funcione.
3-. Meto libeay32.dll y al ejecutar me dice: "Could not load library."
4-. Así que sólo logro que funcione metiendo todo en el mismo sitio.
creo que ya se explico, pero lo voy a repetir, no viene demas... (si alguien lo documenta en la wiki o en algun lugar seria grandioso)
estas carpetas solo se pueden usar para las librerias que carga bennugd, aquellas que se linkean deben estar en la carpeta del binario... para no perder mucho tiempo viendo que va en que y que no, yo recomiendo poner todas las .lib y las dlls externas (SDL, eay, crypt, etc) en la carpeta del binario y todos los mod_* donde quieren (de las carpetas mencionadas)
Pues sigo intentando y no lo consigo:
Si pongo cualquier mod_* necesario del juego en las carpetas mencionadas, me da este error: "a:0: error: a: file not found ( token error: EOF )."
¿Hay que compilar el prg de alguna otra manera? Yo, normalmente, compilo con bgdc -C a nombre_del_juego.prg
Gracias por la paciencia!
no, no deberias meter nada...
si revisas el hilo, vas a ver que alguien tambien tuvo la misma inquietud y la resolvio como yo digo.
perdon, las carpetas son estas
"modules",
"mod",
"mods",
"extensions",
"plugins",
"data",
Voy por la pág. 67 y hasta ahora nada de lo que estaba preguntando, pero mucho de lo que no leí en su tiempo. Eso sí, tiene tela tener un hilo con tantas págs.!
De todo esto, y relacionado con fbmx, sería interesante tener en el moddesc.exe, algunos parámetros para sacar sólamente nombres de funciones, funciones con sus parámetros, lista de variables...
por ejemplo
moddesc -func mod_scroll.dll
así, el cde completion help de fbmx podría añadir funciones, vars, ... de otros módulos que no fuesen oficiales, o sólo cargar los que aparezcan en los import.
Un saludo
esta buena la idea... le agregare esos features...
bueno, me he tomado 10 minutos y he implementado scroll y modo7 sobre mapas, con lo cual ahora se va a poder hacer zoom en los scroll, rotaciones, deformaciones (size_x, size_y), y todo lo que se les ocurra.
me falta algo importante, testearlo... :D
y no me he olvidado de generar los binarios, estoy armando mi entorno de compilacion windows, asi que apenas lo tenga listo, subo los binarios, pero no va a pasar de este fin de semana.
Grande Splinter!!! Karma y despues te vuelvo a dar mas, excelente feature! Un abrazo!
Quote from: SplinterGU on July 22, 2011, 04:41:30 PM
bueno, me he tomado 10 minutos y he implementado scroll y modo7 sobre mapas, con lo cual ahora se va a poder hacer zoom en los scroll, rotaciones, deformaciones (size_x, size_y), y todo lo que se les ocurra.
me falta algo importante, testearlo... :D
y no me he olvidado de generar los binarios, estoy armando mi entorno de compilacion windows, asi que apenas lo tenga listo, subo los binarios, pero no va a pasar de este fin de semana.
NOOOOOOO!!! plz ponete un ejemplo de como deberia ser el codigo!!!
simplemente se agregan 2 parametros opcionales a los comandos start_scroll y mode7_start, que son, file y graph donde se hara el render.
simplemente eso, y con eso ya ese scroll y todos los procesos dentro del scroll se dibujan en ese mapa.
las regiones pasan a ser regiones del mapa, o sea, el mapa pasa a ser la pantalla para el scroll o modo7.
¡YES!
Quote from: SplinterGU on July 22, 2011, 05:14:25 PM
simplemente se agregan 2 parametros opcionales a los comandos start_scroll y mode7_start, que son, file y graph donde se hara el render.
simplemente eso, y con eso ya ese scroll y todos los procesos dentro del scroll se dibujan en ese mapa.
las regiones pasan a ser regiones del mapa, o sea, el mapa pasa a ser la pantalla para el scroll o modo7.
o sea que despues para mostrarlo, hay que hacer un proceso que use ese mapa como graph , correcto?
Quote from: SplinterGU on July 19, 2011, 04:47:40 PM
esta buena la idea... le agregare esos features...
¡Gracias!
Punto 1: Genial, felicidades, Splinter, te has ganado karmas adicionales (de momento, uno, cuando me acuerde, más :D).
Punto 2: La parte técnica. Supongo que el rendimiento será algo menor, al tener que ejecutar el blitter dos veces para mostrar la imagen (uno para dibujar sobre el gráfico y otro para dibujar en la pantalla) ¿Llega a los niveles de PUT o se queda en algo intermedio?.
Sí, me estuve mirando las funciones del blitter (muy por encima) ¿lo de la dificultad para realizar los cambios que te dije lo decías por la cantidad de funciones que hay? (parece que hay un bliter para cualquier combinación de profundidades de color) ¿o por otra cosa?
Punto 3: Bueno, con esto conseguimos rotaciones en los modos7 (que vendrá de lujo cuando tenga que usar los giroscopios de CAANOO para girar en el Sonic Drift), y quiero hacer una prueba conceptual para comprobar qué tal se ve (como funcione a una velocidad decente FLIPO).
La verdad, es detestable lo que Erkosone pone, llega a un nivel de fanatismo innecesario, rayando lo anormal y actuando de "agente encubierto" para trollear en esta página. La verdad una conducta DETESTABLE y que me da vergüenza ajena.
por favor, evitemos el conflicto y los comentarios al respecto, en verdad lo agradezco.
saludos y gracias.
edit: disculpas de la edicion masiva de posts que hice.
Ok, disculpa Splinter, es que me hacen calentar
Bien, bien y Rebien!!, sobre el horizonte se ve asomar bennuGD 1.0, ya va quedando menos. Karma up para SplinterGU por todo su trabajo.
Quote from: SplinterGU on July 22, 2011, 04:41:30 PM
bueno, me he tomado 10 minutos y he implementado scroll y modo7 sobre mapas, con lo cual ahora se va a poder hacer zoom en los scroll, rotaciones, deformaciones (size_x, size_y), y todo lo que se les ocurra.
me falta algo importante, testearlo... :D
y no me he olvidado de generar los binarios, estoy armando mi entorno de compilacion windows, asi que apenas lo tenga listo, subo los binarios, pero no va a pasar de este fin de semana.
loool acabo de leer esto xDD esto soluciona de un plumazo lo de hacer zoom en un scroll q yo queria no? lo q tengo en el apartado de mesa de ayuda no? xDDD Karmazo!
Siguiendo con los avances de Bennu, os comento:
En la pandora, me habia fijado que el juego 'Operation Fenix', el cual porte y que es touchscreen, el cursor a veces se volvia loco y se desaliñaba al jugar.
Pues bien, en los foros Gp2x hablan del problema, parece ser que es un problema del SDL al ocultar el cursor, Splinter si puedes hechale un ojo a este articulo que dice como resolver el problema en las llamadas al SDL, de momento parece que no ha afectado mas ports de bennu, pero si es sencillo de resolver internamente, pues cuanto antes se haga el fix mejor, para evitar problemas en el futuro:
http://blogs.distant-earth.com/wp/?p=293
eso solo pasa con Pandora? yo no mantengo el port Pandora, deberias meter ese fix en dicho port.
maldito mingw nuevo, me esta dando miles de problemas para compilar, ahora la nueva libpng cambio toda la forma de acceder a la info de los png, y yo no dan mas acceso a las estructuras internas, ahora hay que usar funciones, por un tema de seguridad que encontraron.
maldicion, tengo que tocar por todos lados, la version windows se esta complicando un poco.
Tengo que mirar a ver si con eclipse se puede compilar, nunca lo he usado para autotools... bueno, sí, pero para la BeagleBoard y sin tener ni idea de lo que hacía ^^U
ya esta solucionado el tema de la png, ahora estoy recompilando todo en windows, tarda demasiado.
Quote from: SplinterGU on July 23, 2011, 09:03:24 PM
[...]ahora la nueva libpng cambio toda la forma de acceder a la info de los png[...]
Lleva dando warnings de Deprecated APIs como dos años, hombre... :)
que warnings, ya directamente con la 1.5.4 no compila... ademas no es por las funciones, sino por los accesos a estructuras, ya la png_info no es accesible al usuario directamente, ese es el mas grave problema, despues no hay ningun problema de deprecated...
tuve que dejar de usar openssl en win32, y volver a usar la lib des.
la compilacion con el nuevo mingw/gcc demoro el atemorizante tiempo de 1:20hs.
me olvide mencionar que modifique la moddesc con los cambios que pidio izaburre.
probe el scroll sobre mapas en windows y linux, me da la impresion que en windows en una VM va mas rapido que linux nativo, pero bueno, quizas es solo una impresion que me dio.
va de lujo.
ahora estoy armando los paquetes para subirlos al servidor, que va a incluir el m7 en 32 y 16 bits.
subidas las nuevas versiones incluido dingux.
por favor, prueben bien la version windows, que han cambiado las dlls y el compilador.
recuerden, para el scroll y m7 sobre map, solo se agregan 2 parametros a scroll_start y mode7_start (y sus alias), van al final y son, file, graph (del target o destino).
tambien me comentan luego que tal va el m7 en 16 y 32 bits, la unica limitacion que tiene el m7, es que los graficos de piso, cielo, etc, tienen que ir a la misma profundidad de colores que el modo de video, los graficos pueden tener diferente profundidad (menor o igual al modo actual de video)
Quote from: SplinterGU on July 24, 2011, 04:28:49 AM
me olvide mencionar que modifique la moddesc con los cambios que pidio izaburre.
(...)
izaburre!!! Jajaja, cómo os cuesta mi apellido :P
Usage: moddesc.exe [options] modulename
-e On fenix, only report exported functions
-L only report locals
-G only report globals
-T only report types
-C only report constants
-H only report hooks
-C only report callbacks
-D only report modules/libs dependencies
-l only report locals dependencies
-g only report globals dependencies
-h This help
He estado probando un poco las funciones que pedí. De primeras veo que hay un parámetro para dos cosas diferentes: -C para constantes y para los callbacks. Supongo que los callbacks deberían ser -c. Otra cosa que he visto es que no hay un parámetro que vale para sacar una lista limpia de las funciones. Sólo he logrado con -e, pero con ello también sale todo lo demás.
Gracias por el aporte!
Quote from: SplinterGU on July 24, 2011, 04:54:09 AM
subidas las nuevas versiones incluido dingux.
por favor, prueben bien la version windows, que han cambiado las dlls y el compilador.
recuerden, para el scroll y m7 sobre map, solo se agregan 2 parametros a scroll_start y mode7_start (y sus alias), van al final y son, file, graph (del target o destino).
tambien me comentan luego que tal va el m7 en 16 y 32 bits, la unica limitacion que tiene el m7, es que los graficos de piso, cielo, etc, tienen que ir a la misma profundidad de colores que el modo de video, los graficos pueden tener diferente profundidad (menor o igual al modo actual de video)
Buenisimo!! de donde se bajan! como quedan entonces la sfunciones nuevas?
habria que actualizar la Wiki ahora asi despes no nos olvidamos :P
Quote from: izubiaurre on July 24, 2011, 09:55:57 AM
Usage: moddesc.exe [options] modulename
-e On fenix, only report exported functions
-L only report locals
-G only report globals
-T only report types
-C only report constants
-H only report hooks
-C only report callbacks
-D only report modules/libs dependencies
-l only report locals dependencies
-g only report globals dependencies
-h This help
He estado probando un poco las funciones que pedí. De primeras veo que hay un parámetro para dos cosas diferentes: -C para constantes y para los callbacks. Supongo que los callbacks deberían ser -c. Otra cosa que he visto es que no hay un parámetro que vale para sacar una lista limpia de las funciones. Sólo he logrado con -e, pero con ello también sale todo lo demás.
Gracias por el aporte!
me quedo mal el help, diablos!
los parametros son estos:
Quote
-e On fenix, only report exported functions
-F only report funcions
-L only report locals
-G only report globals
-T only report types
-C only report constants
-H only report hooks/callbacks
-D only report modules/libs dependencies
-l only report locals dependencies
-g only report globals dependencies
-h This help
Quote from: JaViS on July 24, 2011, 03:15:26 PM
Quote from: SplinterGU on July 24, 2011, 04:54:09 AM
subidas las nuevas versiones incluido dingux.
por favor, prueben bien la version windows, que han cambiado las dlls y el compilador.
recuerden, para el scroll y m7 sobre map, solo se agregan 2 parametros a scroll_start y mode7_start (y sus alias), van al final y son, file, graph (del target o destino).
tambien me comentan luego que tal va el m7 en 16 y 32 bits, la unica limitacion que tiene el m7, es que los graficos de piso, cielo, etc, tienen que ir a la misma profundidad de colores que el modo de video, los graficos pueden tener diferente profundidad (menor o igual al modo actual de video)
Buenisimo!! de donde se bajan! como quedan entonces la sfunciones nuevas?
habria que actualizar la Wiki ahora asi despes no nos olvidamos :P
se bajan de la pagina principal.
las nuevas funciones son con 2 parametros mas al final (siguen estando las viejas).
una cosa a tener en cuenta es que esto solo dibuja sobre mapas lo que pertenece al scroll o al m7, si usan funciones de write u otras, procesos por fuera del scroll o m7, obviamente no se dibujan en el mapa.
Una prueba rápida de esta versión r256 desde mi winXP64, usando el juego de carreras de Sonic (aka el nivel 3 de SBTime de forma independiente):
-Me dice que no se encuentra libpng-3.dll. He copiado y renombrado la libpng15-15.dll y se ha ejecutado el juego, pero se ha quedado con la pantalla en negro. Mismo resultado si la copio de la versión anterior. Tampoco si uso las tres libpng*.dll que había en mi versión anterior.
-He copiado las librerías de SDL y demás externals de la r228, y por error no copié la ogg.dll, pero el juego funciona pero sin sonido y dando mensajes de error por la consola. Al añadir la ogg.dll de nuevo vinieron los cuelgues.
-Instalación límpia, añado libpng1.dll, libpng12-0.dll y libpng-3.dll de la r228 y borro la libogg-0.dll: el juego arranca (tras un aviso de que no se encuentra la libogg-0.dll) pero de nuevo sin sonido y con los errores de consola.
-Parece que el modo7 va un poco más rápido que antes (apenas unos 2 ó 3 frames más), pero sólo se ve un único modo7: los pisos superiores (modos 7 a más altura sobre la misma región) no se ven, y los inferiores son tapados por el color negro (no hay transparencia para el color 0 de la paleta, recuerdo que uso aun el modo 8bits de color).
Si necesitas el "juego" para probar, me lo dices, Splinter. A ver si luego puedo probar con Linux.
porque posiblemente tengas alguna dll que no va, yo lo probe y no me dio problemas, pero quizas no cargue algun modulo que tu si, que pedia la png-3, podrias decirme que modulo te dice que falta al libpng-3?
gracias.
pasame el juego, pero te comento, si usas png, puede que haya problemas con la nueva dll y si estas usando la vieja dll png, pues claro que va a ir mal.
yo volvere a probar todo, la compilacion en windows tarda 1 hora 20, frente al minuto o 2 que tarda en linux, una locura.
si cambias las dlls, vas a obtener cuelgues.
parece que lo empaquete mal...
La mod_map, pero sí que está. La que no está es la libpng-3.dll.
Sin embargo con las librerías antiguas, salvo la de música OGG, sí que funciona.
De todas formas, te paso el "juego" por correo, tampoco quiero mostrarlo para que no me pidan más ^^U.
anoche reemplace accidentalmente la que usa la png correcta, pero como hice un clean ya no la tengo, y ahora me falla el configure, tengo que corregir alguna cosa en mi entorno y vuelvo a recompilar y subir.
es correcto drumpi, meti un bug ayer con los cambios de ultimo momento en el m7, ya lo corregi.
que complicado se puso el entorno de windows... me volvi loco buscando porque no se dibujaban los graficos en los fpg, encima que la compilacion tarda al rededor de 1:20hs, me volvio loco... al final era la maldita zlib, no se si la tenia mal compilada o no se, pero incluso la de la vieja distro no abre los fpg comprimidos, por eso en la vieja distro habia 2, una zlib.dll y una zlib1.dll, la que se usaba era la zlib1.dll, y esa va de maravilla.
el sonido, parece que no va... no se, tengo que terminar de recompilar todo, quizas se deba tambien a la zlib que compilo estaticamente, o no tengo idea cual sea el problema...
lamentablemente se me acabo el fin de semana, espero poder terminar de probar hoy y subirlas, sino tendran que esperar a cuando tenga un tiempo libre, quizas el proximo fin de semana, aunque puede que este dificil.
si va el sonido... tenia la VM en mute... :D
acabo de encontrar lindo bug en el core... los arrays multidimension se definen mal, hace cosas raras, se toma el ultimo parametro como dimension para casi todas las dimensiones.
arreglado el bug...
ya me voy a ir a dormir, pero voy a dejar compilando la version windows.
¿Qué magnitud tiene ese pedazo de error? xD
¿Quieres decir que no reservaba bien la memoria cuando yo hacía int matriz[8][6]; ?
Sólo en la última versión. Supongo que era el error que me comentaba Splinter por correo en el "juego" que le mandé.
Por mi parte, no hay prisa, esta semana me voy de vacaciones (si me dejan), que ya hay ganas después de casi dos años sin, y encadenando un proyecto con otro (y encima, gratis :S).
reserva si, pero [6][6], no se desde cuando es ese error... pero me suena que desde hace mucho... lo raro es que nadie se quejo, o nadie prueba, o nadie usa matrices o ven los bugs y se los guardan.
ya estan subiendo las nuevas versiones...
tambien corregi el error en la mod_sound, y bueno... disculpas por la version con tantos bugs.
Quote from: Drumpi on July 25, 2011, 01:22:12 PM
Sólo en la última versión. Supongo que era el error que me comentaba Splinter por correo en el "juego" que le mandé.
Por mi parte, no hay prisa, esta semana me voy de vacaciones (si me dejan), que ya hay ganas después de casi dos años sin, y encadenando un proyecto con otro (y encima, gratis :S).
yo no recuerdo haber tocado las lineas de codigo donde estaba el error... pero puede que me equivoque, ya estoy viejo y me olvido las cosas... como sea, ya esta solucionado.
ya salgo, que tengo medico... saludos.
Quote from: SplinterGU on July 25, 2011, 01:23:12 PM
reserva si, pero [6][6], no se desde cuando es ese error... pero me suena que desde hace mucho... lo raro es que nadie se quejo, o nadie prueba, o nadie usa matrices o ven los bugs y se los guardan.
Lo que me pasa a mi con las matrices multidimencionales es que me olvide de como se usaban y en la ayuda no hay ejemplos.
El tema de los arrays puede tener que ver con los problemas que tuve en su momento con mi karaoke. Le voy a echar un ojo a ver si con el nuevo código funciona.
Quote from: SplinterGU on July 22, 2011, 04:41:30 PM
bueno, me he tomado 10 minutos y he implementado scroll y modo7 sobre mapas, con lo cual ahora se va a poder hacer zoom en los scroll, rotaciones, deformaciones (size_x, size_y), y todo lo que se les ocurra.
me falta algo importante, testearlo... :D
y no me he olvidado de generar los binarios, estoy armando mi entorno de compilacion windows, asi que apenas lo tenga listo, subo los binarios, pero no va a pasar de este fin de semana.
O _ O
Y va de lujo!!! Genial!! Gran trabajo! Karmazo obvio :P
Asi y todo sigue quedando un fallo de sonido, no van las músicas de formato modular...noseque de que no puede cargar la mikmod.dll me dice...
Ya sé que es ser un poco vago pero, me podríais poner un pequeño ejemplo/vídeo de la nueva capacidad funcionando para la portada de la web?
Quote from: La momia que fuma on July 25, 2011, 06:29:17 PM
Quote from: SplinterGU on July 22, 2011, 04:41:30 PM
bueno, me he tomado 10 minutos y he implementado scroll y modo7 sobre mapas, con lo cual ahora se va a poder hacer zoom en los scroll, rotaciones, deformaciones (size_x, size_y), y todo lo que se les ocurra.
me falta algo importante, testearlo... :D
y no me he olvidado de generar los binarios, estoy armando mi entorno de compilacion windows, asi que apenas lo tenga listo, subo los binarios, pero no va a pasar de este fin de semana.
O _ O
Y va de lujo!!! Genial!! Gran trabajo! Karmazo obvio :P
Asi y todo sigue quedando un fallo de sonido, no van las músicas de formato modular...noseque de que no puede cargar la mikmod.dll me dice...
Ah ¿pero ya ha salido el fix? Pues nada, a ver si le puedo echar un vistazo, pero no lo creo (ahora mismo debería estar cerca de la mar salada, cenando a la luz de una bombilla bajo un manto de estrellas... y no enganchado como un friki a intelné ;D).
EDIT: Vale, ahora sí, ninguna pega, del tirón. Funciona como en la versión original, lo poco que he podido probar, a una velocidad muy similar. Ahora tengo que hacer pruebas sobre un mapa y después pasar al plato fuerte, jias, jias, jias.
Aprovecho que paso por aquí para comentarte algunas cosillas Splinter :
Hace tiempo me reportaron que los timer (alguno de ellos) no funcionan en esta configuración :
Windows 7 Ultimate SP1 x64 (64 bits)
Es lo mismo que te comente con Wiz, algunos contadores que usan timer no se mueven.
Parece que el filtro scanline es 100%, en emuladores se suelen usar más los scanlines al 25% o al 50% de transparencia, se me quejaron de que el resultado quedaba " demasiado oscuro " y que tenian que tocar el brillo del monitor.
Así que al final habia problemas con los arrays, que provocaban algun cuelgue ?
Tambien aprovecho que paso por aqui para ver alguna demo con las nuevas features porque no me entero de na ;D
la sdl_mixer carga muchos formatos dinamicamente, hay que ver de buscar las dlls adecuadas, o tambien probar con una SDL_mixer compilada con mas cosas, la que estan usando ahora es la que se baja de los binarios compilados oficiales, 1.2.11 creo que es, la ultima.
Quote from: josebita on July 25, 2011, 07:07:25 PM
Ya sé que es ser un poco vago pero, me podríais poner un pequeño ejemplo/vídeo de la nueva capacidad funcionando para la portada de la web?
me pides mucho... no tengo nada como para subir, sino demos de otros modificadas, y no da para poner...
Quote from: BoMbErLiNk on July 25, 2011, 08:15:08 PM
Aprovecho que paso por aquí para comentarte algunas cosillas Splinter :
Hace tiempo me reportaron que los timer (alguno de ellos) no funcionan en esta configuración :
Windows 7 Ultimate SP1 x64 (64 bits)
Es lo mismo que te comente con Wiz, algunos contadores que usan timer no se mueven.
Parece que el filtro scanline es 100%, en emuladores se suelen usar más los scanlines al 25% o al 50% de transparencia, se me quejaron de que el resultado quedaba " demasiado oscuro " y que tenian que tocar el brillo del monitor.
Así que al final habia problemas con los arrays, que provocaban algun cuelgue ?
- lo de los timers no se que decir, no deberian fallar, no tiene que ver con windows ni nada, si tienes un ejemplo, lo vere.
- el filtro es el que se soporta, son basicos. pero anotare de ver dar soporte mas adelante de otros.
- no, no, los arrays no daban cuelgues, simplemente podias tener un acceso fuera de rango al compilar o si usabas variables para indexar, pues si, ahi si podrias obtener cuelgues.
bueno, ahora se puede hacer algun after-burner en m7, con el horizonte rotando.
Una demo please, no se usar lo nuevo xD
prueba el m7 en 16 y 32 que tanto esperabas... dile a sik tambien que lo pruebe a ver que tal le va ahora.
intentare buscar una demo.
Voy a hacer una demo tambien.
Quote from: FreeYourMind on July 25, 2011, 09:52:09 PM
Una demo please, no se usar lo nuevo xD
Básicamente lo que Splinter ha implementado es poder hacer scrolls y animaciones tipo modo7 pero confinadas en un gráfico en particular, de forma que ahora puedes mezclar esa clase de efectos con las funciones normales. Imagina un juego de peleas en el que al fondo, en un monitor grande, se ve una carrera de coches tipo mario kart.
Si no lo he entendido mal, vamos :)
Empezamos mal, el moddesc no funciona, se queda congelao....
Veo que es el parametro -i del script que ha desaparecido!
Quote from: FreeYourMind on July 25, 2011, 10:13:40 PM
Empezamos mal, el moddesc no funciona, se queda congelao....
Veo que es el parametro -i del script que ha desaparecido!
Era un parámetro un tanto tonto en bennu...
Quote from: josebita on July 25, 2011, 10:19:22 PM
Quote from: FreeYourMind on July 25, 2011, 10:13:40 PM
Empezamos mal, el moddesc no funciona, se queda congelao....
Veo que es el parametro -i del script que ha desaparecido!
Era un parámetro un tanto tonto en bennu...
exacto, era un parametro tonto, por eso volo...
free, no se queda colgado... funciona bien.
joseba, entendiste a la perfeccion para eso tambien serviria... tambien sirve para hacer zoom de la pantalla del juego que este dentro de un scroll, o podriamos hacer girar un horizonte (y todo el modo7) si estuvieramos haciendo un "simulador" de vuelo en m7...
hacer un video es imposible, va, lo hice, pero al correr el xvidcap para capturar el video, los frames caen un monton, y mas caen los frames en el video final.
Quote from: SplinterGU on July 25, 2011, 10:43:51 PM
hacer un video es imposible, va, lo hice, pero al correr el xvidcap para capturar el video, los frames caen un monton, y mas caen los frames en el video final.
Ok, pondré una descripción, entonces.
Primera prueba a 32bpp, dista mucho de lo que quiero ver....
Como se puede hacer que se repitan las texturas usadas en el modo 7 en lugar de extenderla toda por la region ?
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=2064)
Definición brutal :)
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=2066)
ahora te paso un video, pero si alguien hace uno mejor, se agradecera.
Quote from: FreeYourMind on July 25, 2011, 11:08:26 PM
Definición brutal :)
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=2066)
esto es una autorespuesta a tu anterior pregunta?
A 1280x800, 32bpp, fullscreen
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=2068)
Splinter, lo que quiero es saber como definir la dimension xz del modo 7 y usar texturas peq
1280x800!!!??? sos un asesino!!!
ahi el rendimiento debe ser desastroso.
Splinter, lo que quiero es saber como definir la dimension xz del modo 7 y usar texturas pequeñas que la completen repitiendose, en lugar que la textura se estire toda por la region definida...
Es para mejorar la calidad del suelo.
Quiero calidad absoluta en definición de imagen, es un test
ya te digo...
mientras pongo el video, es patetico, pero bueno, muestra lo que hace
http://www.megaupload.com/?d=ULN53ISL
8) genial , excelente trabajo ... karmaaaa
esta chulo, pon el prg para que puedamos probar el rendimiento
free, tu pregunta para que se repita, lo hace automatico, lo que pasa es que cada pixel del suelo representa un area grande.
dale altura a tu camara, y mira el suelo...
vamos que no es mas que agregar 2 parametros al final del scroll.
y luego usas el mapa en cualquier cosa que quieras.
no me entero yo de lo del zoom en el scroll ... los parametros son file y grafico donde se pinta el scroll? entonces ya no se pinta en una region? no me entero xDD a ver si me actualizo la version de bennu y hago pruebas pero de momento no lo entiendo xDD con q funciones se hace zoom? y se rota? xD
es lo mas simple que hay... no hay funciones ni variables extrañas... la idea es que el impacto en lo que hay que aprender sea minimo.
aca pongo un ejemplo...
teclas
1,2 (cambia fondo del scroll)
q,w (rota scroll)
a,s (zoom scroll)
z,x (size_x scroll)
c,v (size_y scroll)
luego le dejo a uds experimentar con flags (transparencias, alphas, etc)
Quote from: SplinterGU on July 25, 2011, 11:24:05 PM
ya te digo...
mientras pongo el video, es patetico, pero bueno, muestra lo que hace
http://www.megaupload.com/?d=ULN53ISL
Gracias.
¿No sería mejor una función aparte que fuese tipo "start_scroll_to_map(parametros de siempre)" y que devuelva un graph id?
Lo digo pa seguir con los métodos de siempre.
No habia dicho nada, pero Splinter estaba rompiendo la retrocompatibilidad de forma tan pancha, eso tiene mas sentido.
Quote from: SplinterGU on July 25, 2011, 11:44:24 PM
free, tu pregunta para que se repita, lo hace automatico, lo que pasa es que cada pixel del suelo representa un area grande.
dale altura a tu camara, y mira el suelo...
No entiendo, dices mayor m7[1].height ? No consigo que se repita la textura...
Quote from: FreeYourMind on July 26, 2011, 08:19:23 AM
No habia dicho nada, pero Splinter estaba rompiendo la retrocompatibilidad de forma tan pancha, eso tiene mas sentido.
Entiendo que las funciones anteriores siguen valiendo sin problemas, se habrán creado nuevas que aceptan esos parámetros.
Quote from: josebita on July 26, 2011, 10:02:00 AM
Quote from: FreeYourMind on July 26, 2011, 08:19:23 AM
No habia dicho nada, pero Splinter estaba rompiendo la retrocompatibilidad de forma tan pancha, eso tiene mas sentido.
Entiendo que las funciones anteriores siguen valiendo sin problemas, se habrán creado nuevas que aceptan esos parámetros.
No es tan bestia xD
Puedes usar la función con los parámetros de siempre (obligatorios) y si quieres puedes añadir los opcionales nuevos xD
Quote from: FreeYourMind on July 26, 2011, 08:19:23 AM
No habia dicho nada, pero Splinter estaba rompiendo la retrocompatibilidad de forma tan pancha, eso tiene mas sentido.
no rompi ninguna retrocompatibilidad.
Quote from: FreeYourMind on July 26, 2011, 09:35:04 AM
Quote from: SplinterGU on July 25, 2011, 11:44:24 PM
free, tu pregunta para que se repita, lo hace automatico, lo que pasa es que cada pixel del suelo representa un area grande.
dale altura a tu camara, y mira el suelo...
No entiendo, dices mayor m7[1].height ? No consigo que se repita la textura...
pasame tu ejemplo, y te lo adapto y te muestro.
Quote from: josebita on July 26, 2011, 10:02:00 AM
Quote from: FreeYourMind on July 26, 2011, 08:19:23 AM
No habia dicho nada, pero Splinter estaba rompiendo la retrocompatibilidad de forma tan pancha, eso tiene mas sentido.
Entiendo que las funciones anteriores siguen valiendo sin problemas, se habrán creado nuevas que aceptan esos parámetros.
Quote from: PiXeL on July 26, 2011, 10:33:35 AM
Quote from: josebita on July 26, 2011, 10:02:00 AM
Quote from: FreeYourMind on July 26, 2011, 08:19:23 AM
No habia dicho nada, pero Splinter estaba rompiendo la retrocompatibilidad de forma tan pancha, eso tiene mas sentido.
Entiendo que las funciones anteriores siguen valiendo sin problemas, se habrán creado nuevas que aceptan esos parámetros.
No es tan bestia xD
Puedes usar la función con los parámetros de siempre (obligatorios) y si quieres puedes añadir los opcionales nuevos xD
exacto, lo entendieron todos menos Free... y que raro, siempre lanzando esos comentarios sin antes leer adecuadamente, puse la palabra "opcional" varias veces... :)
PiXeL, con respecto a tu pregunta para que devuelva ya el mapa, no lo hice porque eso imposibilitaria que se escriban varios scrolls en el mismo mapa (en regiones diferentes, por ejemplo) o hacer un mode7, en el mismo mapa que un scroll (en otra region por ejemplo)
program test_mode7;
import "mod_wm"
import "mod_video"
import "mod_key"
import "mod_scroll"
import "mod_timers"
import "mod_time"
import "mod_text"
import "mod_string"
import "mod_mouse"
import "mod_map"
import "mod_proc"
import "mod_sound"
import "mod_file"
import "mod_rand"
import "mod_screen"
import "mod_grproc"
import "mod_draw"
import "mod_math"
import "mod_m7"
import "mod_say"
GLOBAL
int graficos1;
int color;
BEGIN
//scale_mode=scale_nofilter;
full_screen = true;
set_mode(1280, 800, 32);
set_fps(50,0);
graficos1=load_fpg("Modo732.fpg");
say(itoa(graficos1));
start_mode7(1,graficos1,1,0,0,64);
//start_mode7(2,graficos1,3,0,0,64);
//m7.color=rgb(0,128,255);
m7[1].color=15;
m7[1].camera=id;
m7[1].height=119; //A cierta altura del fondo
m7[1].distance=64;//23;//12; //23; //A cierta distancia del fondo original
m7[1].focus=1024;//256; //128;
/*m7[2].color=15;
m7[2].camera=id;
m7[2].height=-6; //A cierta altura del fondo
m7[2].distance=12; //23; //A cierta distancia del fondo original
m7[2].focus=1024; //256; //128;
m7[2].z=m7[1].z-1;*/
ctype=c_m7;
//cflags=1;
resolution=100;
while (!key(_esc))
color=map_get_pixel(graficos1,2,x/resolution,y/resolution);
if (key(_up)) x+=500; end
if (key(_down)) x-=500; end
if (key(_left)) y-=500; end
if (key(_right)) y+=500; end
if (key(_c_minus) && m7[1].height>9)
m7[1].height--;
m7[2].height--;
end
if (key(_c_plus))
m7[1].height++;
m7[2].height++;
end
if (key(_w)) advance(100); end
if (key(_s)) advance(-100); end
if (key(_a)) angle+=2000; end
if (key(_d)) angle-=2000; end
if (key(_f1)) m7[1].focus--; end
if (key(_f2)) m7[1].focus++; end
if (key(_z)) m7[1].distance--; end
if (key(_x)) m7[1].distance++; end
if (key(_c)) m7[2].height--; end
if (key(_v)) m7[2].height++; end
IF (key(_esc)) exit("", 0);END
frame;
end
stop_mode7(1);
//stop_mode7(2);
let_me_alone();
END
Para que se repita un mapa, siempre se puede usar el gráfico exterior:
Un Modo7 puede usar dos mapas, uno que es el que se ve, que suele ser el nivel. Por fuera de ese gráfico se puede dejar transparente (color 0), poner un color liso (a elegir de la paleta... o con RGB en modos de video superiores), o bien un segundo mapa... que por cierto, tengo que probar porque me parece que sólo admite un único tamaño (8x8, si es más grande se recorta) y encima se dibujaba escalado, no lo sé.
Se puede usar este grafico exterior para que se repita... o aprovechar la nueva feature:
Si haces un scroll con un mapa que se repita cíclicamente, lo puedes dibujar sobre un mapa, ¡y usarlo en el modo7! Es más, puedes usar un scroll y utilizarlo como mapa del modo7, por lo que no necesitas mover un mapa de 2048 pixels de largo: con uno de 256 puedes representar los niveles tan largos como quieras (y no hacer virguerías como las mías en el TBM).
¿Qué tal juegos de plataformas para jugar dos en una WIZ, cada uno a un lado de la consola? Rotas el mapa del jugador1 -90º y el del jugador 2 90º y listo (ni cambios de coordenadas, ni rotaciones de gráficos...).
Y estas sólo son algunas ideas. Ya tengo previsto que en el PilotWing para CAANOO la pantalla rote con la consola (bueno, depende del rendimiento que le saque a la cosa ^^U).
Aun así, creo que Pixel tiene razón en parte: debería ser una función nueva, porque no entiendo cómo encaja "region" en la llamada... pero bueno, sería quitar una variable y añadir 2, por lo que se permite la sobrecarga (y tampoco cuesta nada poner un 0 en el parámetro region, pero no sé si eso es "elegante").
Sólo por curiosidad ¿Hay una razón de peso para que existan limitaciones en el número de scrolls y modos7, aparte del número de estructuras en memoria?
muchacho... pixel no dijo nada de la region... que es lo complicado de entender con la region? la region es siempre sobre el target... el target normalmente es la pantalla, ahora el target es el mapa que se usa para renderear el scroll/m7... o sea, que las regiones son regiones dentro del mapa... como es logica y como tiene sentido.
la razon, entre tantas cosas, es no romper la retrocompatibilidad que tanto le molesta a free... (y que obviamente yo no estoy de acuerdo en romper) demas esta decir, que la cantidad de scrolls y modo7 que tiene es exagerada.
Aqui el fpg del ejemplo (cambia el grafico al 2 para que veas la pintura en movimiento de las anteriores imagenes, definición brutal xD)
http://dl.dropbox.com/u/33372657/Modo732.fpg
Quote from: FreeYourMind on July 26, 2011, 12:58:35 PM
program test_mode7;
import "mod_wm"
import "mod_video"
import "mod_key"
import "mod_scroll"
import "mod_timers"
import "mod_time"
import "mod_text"
import "mod_string"
import "mod_mouse"
import "mod_map"
import "mod_proc"
import "mod_sound"
import "mod_file"
import "mod_rand"
import "mod_screen"
import "mod_grproc"
import "mod_draw"
import "mod_math"
import "mod_m7"
import "mod_say"
GLOBAL
int graficos1;
int color;
BEGIN
//scale_mode=scale_nofilter;
full_screen = true;
set_mode(1280, 800, 32);
set_fps(50,0);
graficos1=load_fpg("Modo732.fpg");
say(itoa(graficos1));
start_mode7(1,graficos1,1,0,0,64);
//start_mode7(2,graficos1,3,0,0,64);
//m7.color=rgb(0,128,255);
m7[1].color=15;
m7[1].camera=id;
m7[1].height=119; //A cierta altura del fondo
m7[1].distance=64;//23;//12; //23; //A cierta distancia del fondo original
m7[1].focus=1024;//256; //128;
/*m7[2].color=15;
m7[2].camera=id;
m7[2].height=-6; //A cierta altura del fondo
m7[2].distance=12; //23; //A cierta distancia del fondo original
m7[2].focus=1024; //256; //128;
m7[2].z=m7[1].z-1;*/
ctype=c_m7;
//cflags=1;
resolution=100;
while (!key(_esc))
color=map_get_pixel(graficos1,2,x/resolution,y/resolution);
if (key(_up)) x+=500; end
if (key(_down)) x-=500; end
if (key(_left)) y-=500; end
if (key(_right)) y+=500; end
if (key(_c_minus) && m7[1].height>9)
m7[1].height--;
m7[2].height--;
end
if (key(_c_plus))
m7[1].height++;
m7[2].height++;
end
if (key(_w)) advance(100); end
if (key(_s)) advance(-100); end
if (key(_a)) angle+=2000; end
if (key(_d)) angle-=2000; end
if (key(_f1)) m7[1].focus--; end
if (key(_f2)) m7[1].focus++; end
if (key(_z)) m7[1].distance--; end
if (key(_x)) m7[1].distance++; end
if (key(_c)) m7[2].height--; end
if (key(_v)) m7[2].height++; end
IF (key(_esc)) exit("", 0);END
frame;
end
stop_mode7(1);
//stop_mode7(2);
let_me_alone();
END
free, ejemplo con recursos, como el que subi yo cuando me lo pediste.
Quote from: FreeYourMind on July 26, 2011, 01:06:34 PM
Aqui el fpg del ejemplo (cambia el grafico al 2 para que veas la pintura en movimiento de las anteriores imagenes, definición brutal xD)
http://dl.dropbox.com/u/33372657/Modo732.fpg
ahora si, gracias.
Quote from: Drumpi on July 26, 2011, 12:59:01 PM
Para que se repita un mapa, siempre se puede usar el gráfico exterior:
Un Modo7 puede usar dos mapas, uno que es el que se ve, que suele ser el nivel. Por fuera de ese gráfico se puede dejar transparente (color 0), poner un color liso (a elegir de la paleta... o con RGB en modos de video superiores), o bien un segundo mapa... que por cierto, tengo que probar porque me parece que sólo admite un único tamaño (8x8, si es más grande se recorta) y encima se dibujaba escalado, no lo sé.
Se puede usar este grafico exterior para que se repita... o aprovechar la nueva feature:
Si haces un scroll con un mapa que se repita cíclicamente, lo puedes dibujar sobre un mapa, ¡y usarlo en el modo7! Es más, puedes usar un scroll y utilizarlo como mapa del modo7, por lo que no necesitas mover un mapa de 2048 pixels de largo: con uno de 256 puedes representar los niveles tan largos como quieras (y no hacer virguerías como las mías en el TBM).
¿Qué tal juegos de plataformas para jugar dos en una WIZ, cada uno a un lado de la consola? Rotas el mapa del jugador1 -90º y el del jugador 2 90º y listo (ni cambios de coordenadas, ni rotaciones de gráficos...).
Y estas sólo son algunas ideas. Ya tengo previsto que en el PilotWing para CAANOO la pantalla rote con la consola (bueno, depende del rendimiento que le saque a la cosa ^^U).
Aun así, creo que Pixel tiene razón en parte: debería ser una función nueva, porque no entiendo cómo encaja "region" en la llamada... pero bueno, sería quitar una variable y añadir 2, por lo que se permite la sobrecarga (y tampoco cuesta nada poner un 0 en el parámetro region, pero no sé si eso es "elegante").
Sólo por curiosidad ¿Hay una razón de peso para que existan limitaciones en el número de scrolls y modos7, aparte del número de estructuras en memoria?
drumpi, demas esta decir que podes jugar con el ejemplo que puse para ver como trabaja la region dentro del mapa.
free, a vos te funciona el ejemplo que acabas de subir, a mi me da un hermoso "segment violation"... diablos!
maldito 1280x800! que chistoso que sos...
como dice drumpi, repite mapas de cualquier tamaño...
cambia la linea de start_scroll por esta
start_mode7(1,graficos1,1,1,0,64);
ahora, lo que no me queda muy claro en base a que dibuja el indoor... ya que si lo pones a 0, deja un hueco en medio... de que dimensiones? ni idea, parece que la dimension del grafico de fondo.
el m7 de div funcionaba igual?
start_scroll !? me lo dices a mi, no hay scroll en el ejemplo...
ya entendi, si es 0, el parametro del indoor, parece que dibuja la pantalla (que esta vacia), si le pongo un grafico inexistente o si pongo -1, entonces solo dibuja el piso completo.
creo que esto es un bug, voy a revisar el codigo.
pero si pones la linea siguiente
start_mode7(1,graficos1,-1,1,0,64);
vas a obtener lo que preguntabas
me confundi, quise decir start_mode7, como podras ver puse start_mode7 en la linea que tenias que cambiar.
era un bug, quedaba curioso si pones un grafico de fondo, pero evidentemente es un bug feo... ya lo acabo de corregir... no voy a generar version nueva por esto, por ahora usen -1 si no quieren que un grafico aparezca.
creo que por esto es que el color que mencionaba drumpi de fondo no aparecia.
Ya estoy contento gracias, con algo mas de curro y buena elección se van a conseguir paisajes de ensueño xD
(http://forum.bennugd.org/index.php?action=dlattach;topic=102.0;attach=2071)
ahora si funciona el color de fondo si no hay grafico... antes tambien funcionaba, pero el no hay grafico era -1.
como dije, por ahora no genero ejecutables nuevo, es un bug menor.
homme .. creo q ya voy entendiendo lo de dibujar el scroll/modo7 en un mapa xD la verdad esq se pueden hacer virguerias con eso xD. Pero aumentar el size de ese mapa ... no es a lo que yo me refería con un zoom en un scroll .. aunq se puede aprovechar xDD
entonces no se a que te referias, los que pidieron zoom en el scroll era para emular lo que hacian las consolas, donde hacian zoom del juego...
pero bueno, siento no haber sido de ayuda... habra que currarselo con tiles...
Okis, de acuerdo con lo de la retrocompatibilidad. Y sí, más o menos se entiende lo de las regiones, si las trasladamos de coordenadas de pantalla a coordenadas del mapa, pero no sabía que se podían especificar valores de región fuera de pantalla.
Lo que yo me refería con el mapa exterior es que en algunas pruebas que hice, los mapas exteriores de 16x16 sólo representaban los primeros 8x8 pixels antes de repetir, pero aun no estoy seguro de ser un fallo mío o no. Cuestión de probar en el ThunderBlade Maker con tiles de distintos tamaños (es más, creo que si se carga el mapa 01 se puede ver que los cuadrados exteriores del juego son más grandes que los de dentro del mapa, pese a usar el mismo FPG y mapa).
Aparte de eso, en teoría, 10 scrolls sí pueden ser suficientes (hablamos de 20 planos de scroll) pero si nos metemos en juegos a pantalla partida...
Por ejemplo, crear un efecto como el de los fondos de Sonic, que usan varios planos de scroll para conseguir ese efecto de profundidad, es fácil para un jugador: 4 scrolls = 8 planos. Pero si tenemos 2 jugadores necesitamos 8 scrolls, y a partir de ahí hay que sacrificar recursos o planteárselo de otra forma (ojo, que se puede hacer).
Y en modo7... Vale, soy el único que se plantea juegos de plataformas o de carreras con varios niveles de altura, pero como tenga que hacer un juego para 4 jugadores me puedo ir olvidando de recorridos de más de dos plantas, o que tengan más que suelo y techo. Pero bueno, eso es cosa mía ^^U
Era simple curiosidad. Según veo en el código, basta con recompilar cambiando el valor de una constante para tener más, para un juego específico no sería difícil crear un módulo personalizado (a no ser que se me haya pasado por alto algún otro valor por ahí que controle el máximo de M7 disponibles, que es por lo que preguntaba).
tienes razon, se me escapo eso... las regiones no pueden ser mas grandes que la pantalla, diablos! tengo que pensar como resolverlo.
se me ocurre que tal vez las regiones se puedan definir de cualquier tamaño, solo se limitarian al momento de usarlas... pero quisiera pensar de que forma impactaria esto, si afectaria en algo o no... bueno, por ahora se limite al tamaño de region maximo igual al de la pantalla.
lo del tamaño del mapa de outdoor, aceptó mas grandes que lo que decis, creo que puede llegar hasta 64x64, aunque no lo se.
la cantidad de scrolls, puedes recompilar el codigo y tener tu propio modulo con la cantidad que quieras.
bien, creo que en principio no habra problemas de quitar el limite de region al limite de pantalla... o sobrecargar la funcion y si existe 2 parametros extra, definira el limite del mapa donde va a funcionar...
actualmente la out_region se ve afectada, si sobrecargo la funcion, no deberiamos tener problemas si solo la usamos para los mapas que la creamos, si solo quito el limite de la region al tamano de pantalla, entonces podriamos tener problemas con la out_Region, en el sentido de que posiblemente no estemos detectando correctamente la region.
esto de scroll/m7 sobre maps, obviamente hace que no se pueden hacer colisiones con mouse en scroll o m7 dentro de un mapa.
escucho comentarios, sugerencias, insultos, etc.
No digo que no acepte mapas exteriores al modo7 más grandes de 8x8, sino que de los 64x64 que acepta, dibuja sólo 8x8 (la esquina superior derecha). Como digo, no tengo pruebas que lo demuestren, pero recuérdamelo a partir del lunes.
Cierto que el tema de las regiones es más peliagudo de lo que parecía en principio. Soluciones, ahora mismo, no se me ocurren.
Lo más que llego a pensar es que, al igual que existen valores reservados para ID de mapas de los FPG con ID==0, y que aquellos >=1000 corresponden a mapas cargados sin FILE asociado, se tengan las 10 regiones definidas para coordenadas de pantalla, y añadir un tipo de región especial para su uso en mapas, con valores superiores a 10 (por ejemplo, a partir de 1000).
Esto también serviría para las funciones MAP_XPUT, que también usaban regiones de dibujado (y, al menos, usando la región 0, ignoraba las coordenadas de pantalla), pero claro, habría que definir un tipo de estructura interna nuevo (supongo) y control sobre si se usan las regiones de pantalla o las "libres". Lo de limitarlas o no ya sería cosa del Designer Supremo (ejem :D).
También ayudaría por el tema de las regiones del scroll en el que el proceso "camara" se puede mover sin desplazarlo.
Respecto a collision, eso ya no sé cómo funciona. En mi cabeza tenía la imagen de que se calculaba en función de las coordenadas, tanto de los gráficos como de cada uno de los pixels, y estar en un scroll o no sólo influía en el desplazamiento respecto a los gráficos con CTYPE=C_SCREEN. Vamos, que daba igual dónde se dibujase. Pero si me dices que no se pueden hacer, tu sabes mejor que nadie por qué.
Eso sí, nunca entendí las colisiones en modo7: por lo general, los choques entre procesos debían hacerse por proximidad, ya que estos no se dibujan en el "suelo", sino de pie.
Los insultos los dejaremos para otra ocasión ;D
PD: todo esto son ideas al aire. Si te sirven de inspiración, bien, si no pues nada, y si no se entiende, por favor, recordadme que no hable bajo los efectos de la "borrachera nocturna" ;D
Quote from: Drumpi on July 27, 2011, 12:36:08 AM
No digo que no acepte mapas exteriores al modo7 más grandes de 8x8, sino que de los 64x64 que acepta, dibuja sólo 8x8 (la esquina superior derecha). Como digo, no tengo pruebas que lo demuestren, pero recuérdamelo a partir del lunes.
Cierto que el tema de las regiones es más peliagudo de lo que parecía en principio. Soluciones, ahora mismo, no se me ocurren.
Lo más que llego a pensar es que, al igual que existen valores reservados para ID de mapas de los FPG con ID==0, y que aquellos >=1000 corresponden a mapas cargados sin FILE asociado, se tengan las 10 regiones definidas para coordenadas de pantalla, y añadir un tipo de región especial para su uso en mapas, con valores superiores a 10 (por ejemplo, a partir de 1000).
Esto también serviría para las funciones MAP_XPUT, que también usaban regiones de dibujado (y, al menos, usando la región 0, ignoraba las coordenadas de pantalla), pero claro, habría que definir un tipo de estructura interna nuevo (supongo) y control sobre si se usan las regiones de pantalla o las "libres". Lo de limitarlas o no ya sería cosa del Designer Supremo (ejem :D).
También ayudaría por el tema de las regiones del scroll en el que el proceso "camara" se puede mover sin desplazarlo.
Respecto a collision, eso ya no sé cómo funciona. En mi cabeza tenía la imagen de que se calculaba en función de las coordenadas, tanto de los gráficos como de cada uno de los pixels, y estar en un scroll o no sólo influía en el desplazamiento respecto a los gráficos con CTYPE=C_SCREEN. Vamos, que daba igual dónde se dibujase. Pero si me dices que no se pueden hacer, tu sabes mejor que nadie por qué.
Eso sí, nunca entendí las colisiones en modo7: por lo general, los choques entre procesos debían hacerse por proximidad, ya que estos no se dibujan en el "suelo", sino de pie.
Los insultos los dejaremos para otra ocasión ;D
PD: todo esto son ideas al aire. Si te sirven de inspiración, bien, si no pues nada, y si no se entiende, por favor, recordadme que no hable bajo los efectos de la "borrachera nocturna" ;D
drumpi, te estoy diciendo que probamos con mapas mas grandes que eso, y no dibuja solo 8x8, dibuja mapas grandes a la perfeccion, pero creo que los recorta a 64 maximo... proba el ejemplo de free.
con respecto al m7 creo que no hay colisiones sobre m7... tampoco le veo sentido.
gracias por tus comentarios.
ya lo solucione, la region puede definirse de cualquier tamaño, no deberia molestar ni dar problemas, ya que las regiones no deberian autoajustarse internamente, sino que deberian ser lo que el usuario define.
funciona muy bien.
subiendo version release candidate 26 revision 262... (esto de release candidate ya parece chiste...)
:D
Oye, Splinter.
Desde que hiciste los cambios a lo de los arrays y arreglé otro bug en mi código mi karaoke no se cuelga.
No sé si la soluciónvino por tu fix o por el mío, pero gracias ;)
Tengo miedo algo funcione distinto en los arrays, miraré a lupa a ver si todo sigue funcionando igual :D
Quote from: josebita on July 31, 2011, 10:10:45 AM
Oye, Splinter.
Desde que hiciste los cambios a lo de los arrays y arreglé otro bug en mi código mi karaoke no se cuelga.
No sé si la soluciónvino por tu fix o por el mío, pero gracias ;)
;)
Quote from: FreeYourMind on July 31, 2011, 10:26:11 AM
Tengo miedo algo funcione distinto en los arrays, miraré a lupa a ver si todo sigue funcionando igual :D
si tienes miedo porque las cosas funcionan bien, estamos en un problema... :D
subida la version con el fix de las mochilas, gracias free.
mod_effects 32bits!
el alpha en 32 bits es el mismo alpha de la fuente, no se hace ningun efecto sobre el mismo.
ahora los efectos son mejores, premitiendo hacer effects sobre mapas de 16 o 32, en cualquier modo de video (antes para ser un effect correcto, el modo de video tenia que coincidir con la profundidad del mapa)
Quote from: SplinterGU on August 07, 2011, 04:25:47 AM
mod_effects 32bits!
el alpha en 32 bits es el mismo alpha de la fuente, no se hace ningun efecto sobre el mismo.
ahora los efectos son mejores, premitiendo hacer effects sobre mapas de 16 o 32, en cualquier modo de video (antes para ser un effect correcto, el modo de video tenia que coincidir con la profundidad del mapa)
buenisimo!!! :D
Excelente Splinter! karma! Gracias!
Ah que bien, lo del alpha en 32 bits produjo problemas en Paper, no se veian las transparencias así que puse fondos opacos.
Karma Splinter!
no entiendo, ahora te dio problemas?
No, fue al principio de Paper cuando dio problemas con las transparencias http://forum.bennugd.org/index.php?topic=1756.0 (http://forum.bennugd.org/index.php?topic=1756.0) y era por lo de los 32bits, ahora con el cambio que hiciste podre modificar las imagenes
de nuevo y volver a poner las transparencias sin que de problemas.
Así que gracias! lo esperaba hace un tiempo.
¿Alpha 32 bits ya en funcionamiento? Se ha cumplido uno de los objetivos más ambiciosos, Karma para Splinter :D
el alpha 32 hace mucho que esta, lo que no esta son las blendop.
Che Splinter y esta planeando implementar las blendop en 32 bits? por curiosidad nomas te pregunto
estaba pensando en eso justamente hoy... la cosa es que no puede ser como esta implementado ahora, no pueden hacerse tablas, ya que serian de 4GB cada 1... cosa imposible, deberian ser procesadas en runtime, lo que significa un considerable consumo de memoria, pero tambien estamos hablando de 32bits, y para mover 32bits ya hay que tener algun equipo medianamente bueno, las consolas portatiles de baja potencia no tienen 32bts (wiz/caanoo/dingux/etc)
estoy haciendo pruebas y cambios en el engine, con el famoso ejemplo de las pelotas rebotando, con 1000 pelotas, dando antes un resultado de 68-70 fps, ahora da unos 98-100fps... 32 bits...
Optimización de processos ?
Ostras eso es sin duda la mejor de las mejores noticias, si los procesos no pesaran tanto :)
nop, no es optimizacion de procesos... :D
Quote from: SplinterGU on September 02, 2011, 11:07:45 PM
estoy haciendo pruebas y cambios en el engine, con el famoso ejemplo de las pelotas rebotando, con 1000 pelotas, dando antes un resultado de 68-70 fps, ahora da unos 98-100fps... 32 bits...
¿Puedes dar algún detalle de los cambios?.
yo he hecho pruebas en la psp asi creando procesos en cantidades masivas xD... he creado un codigo q lo que hace es crear un cuadrado, cada cuadrado hace un new_map (de entre 20x20 y 50x50 creo) y se lo pone de grafico coloreandolo con color aleatorio, y despues en cada fotograma se mueve un poco. El programa empieza a 90fps y a cada segundo se van creando cuadrados nuevos.... cuando llega a 500 cuadrados la PSP se pone a 30fps xDDDDD Pobrecita ... debe estar llorando xD
Quote from: josebita on September 02, 2011, 11:23:50 PM
Quote from: SplinterGU on September 02, 2011, 11:07:45 PM
estoy haciendo pruebas y cambios en el engine, con el famoso ejemplo de las pelotas rebotando, con 1000 pelotas, dando antes un resultado de 68-70 fps, ahora da unos 98-100fps... 32 bits...
¿Puedes dar algún detalle de los cambios?.
tamaño de las dirty... a la mitad, y 4 veces la cantidad de regiones (principalmente... hay otro cambio mas, pero el importante es ese...)
Ni idea de lo q es eso xDD pero si mejora el rendimiento , bienvenido sea xD
Buenas Splinter GU...
Ya empecé a realizar las pruebas del Modo7 en BennuGD...
Me bajé la última release en tu página (r263)...
Hice una prueba ejecutando el programa TUTORIAL7 que viene en DIV2, y me sale la pantalla en negro, solo me aparece el texto "Utilice los cursores para mover la cámara".
Todavía veo fallos...
[code language="bennu"]
//----------------------------------------------------------------------
// Program: Tutorial 7
// Author: Daniel Navarro
// Date: 20/09/97
//----------------------------------------------------------------------
PROGRAM Tutorial_7;
IMPORT "mod_m7"
IMPORT "mod_video"
IMPORT "mod_key"
IMPORT "mod_proc"
IMPORT "mod_text"
IMPORT "mod_map"
IMPORT "mod_screen"
IMPORT "mod_grproc"
IMPORT "mod_math"
GLOBAL
// Tables with graphics' codes in 16 different positions
// Chair's codes
chair[]=16,100,101,101,103,104,105,106,107,
108,109,110,111,112,113,114,115;
// Trunk's codes
trunk[]=16,200,201,202,203,204,205,206,207,
208,209,210,211,212,213,214,215;
// Table's codes
table[]=16,300,301,302,303,304,305,306,307,300,301,302,303,304,305,306,307;
// Hunger's codes
hunger[]=16,400,401,402,403,400,401,402,403,400,401,402,403,400,401,402,403;
// Chest's codes
chest[]=16,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515;
// Couch's codes
couch[]=16,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615;
BEGIN
// Sets video mode
set_mode(m640x480);
// Loads the requiered graphics' file
load_fpg("FPG\tutorial\tutor7.fpg");
// Fades the screen on
fade_on();
m7.camera=id; // Forces camera to follow this process (main process)
m7.height=512; // Camera's height
m7.distance=640; // Camera distance to the observation point
// Initiates mode7, or dejected plane
start_mode7(0,0,1,0,0,128);
// Writes an informative message
write(0,320,0,1,"Use cursor keys to move camera");
// Creates table type objects
object(&table,128,128,0,600);
object(&table,600,440,0,600);
object(&table,600,340,0,600);
// Creates chair type objects
object(&chair,64,64,-pi/2,400);
object(&chair,192,64,-pi/2,400);
object(&chair,64,192,pi/2,400);
object(&chair,192,192,pi/2,400);
// Creates chest type objects
object(&chest,32,384,0,600);
object(&chest,384,32,-pi/2,600);
// Creates trunk type objects
object(&trunk,64,440,pi/2,800);
object(&trunk,128,440,pi/2,800);
object(&trunk,384,440,pi/2,800);
// Creates hunger type objects
object(&hunger,192,440,0,600);
// Creates couch type objects
object(&couch,512,32,-pi/2,400);
object(&couch,600,128,-pi,400);
// Sets coordinates for this process, which is the camera's
x=320; y=240;
LOOP
// If cursor keys are pressed, camera's angle variates (it moves)
if (key(_right)) angle-=pi/8; END
if (key(_left)) angle+=pi/8; END
FRAME;
END
END
//----------------------------------------------------------------------
// Process object
// Visualizes all objects
// Entries: xgraph = Pointer to the graphics' table of object
// x,y = Coordinates
// angle = Object's angle
// size = Object's size, on percentage
//----------------------------------------------------------------------
PROCESS object(xgraph,x,y,angle,size)
BEGIN
z=-16; // Chooses a depth
ctype=c_m7; // Introduces the process within mode 7
LOOP
FRAME; // Shows the graphic
END
END
[/code]
Saludos...
puedes poner el fpg?
http://www.megaupload.com/?d=E92Y2EDG
el modo de video tiene que coincidir con el de los graficos y si estas en linux (unix) el nombre del archivo tiene que coincidir mayusculas/minusculas.
proba esto
//----------------------------------------------------------------------
// Program: Tutorial 7
// Author: Daniel Navarro
// Date: 20/09/97
//----------------------------------------------------------------------
PROGRAM Tutorial_7;
IMPORT "mod_m7"
IMPORT "mod_video"
IMPORT "mod_key"
IMPORT "mod_proc"
IMPORT "mod_text"
IMPORT "mod_map"
IMPORT "mod_screen"
IMPORT "mod_grproc"
IMPORT "mod_math"
import "mod_say"
GLOBAL
// Tables with graphics' codes in 16 different positions
// Chair's codes
chair[]=16,100,101,101,103,104,105,106,107,
108,109,110,111,112,113,114,115;
// Trunk's codes
trunk[]=16,200,201,202,203,204,205,206,207,
208,209,210,211,212,213,214,215;
// Table's codes
table[]=16,300,301,302,303,304,305,306,307,300,301,302,303,304,305,306,307;
// Hunger's codes
hunger[]=16,400,401,402,403,400,401,402,403,400,401,402,403,400,401,402,403;
// Chest's codes
chest[]=16,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515;
// Couch's codes
couch[]=16,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615;
BEGIN
// Sets video mode
set_mode(640,480,8);
// Loads the requiered graphics' file
file=load_fpg("TUTOR7.FPG");
// Fades the screen on
fade_on();
// Initiates mode7, or dejected plane
start_mode7(0,file,1,0,0,64);
m7.camera=id; // Forces camera to follow this process (main process)
m7.height=10; // Camera's height
m7.distance=0; // Camera distance to the observation point
m7.focus=1024;
// Writes an informative message
write(0,320,0,1,"Use cursor keys to move camera");
// Creates table type objects
object(&table,128,128,0,600);
object(&table,600,440,0,600);
object(&table,600,340,0,600);
// Creates chair type objects
object(&chair,64,64,-pi/2,400);
object(&chair,192,64,-pi/2,400);
object(&chair,64,192,pi/2,400);
object(&chair,192,192,pi/2,400);
// Creates chest type objects
object(&chest,32,384,0,600);
object(&chest,384,32,-pi/2,600);
// Creates trunk type objects
object(&trunk,64,440,pi/2,800);
object(&trunk,128,440,pi/2,800);
object(&trunk,384,440,pi/2,800);
// Creates hunger type objects
object(&hunger,192,440,0,600);
// Creates couch type objects
object(&couch,512,32,-pi/2,400);
object(&couch,600,128,-pi,400);
// Sets coordinates for this process, which is the camera's
x=320; y=240;
LOOP
// If cursor keys are pressed, camera's angle variates (it moves)
if (key(_up)) advance(10); end
if (key(_down)) advance(-10); end
if (key(_left)) angle+=1000; end
if (key(_right)) angle-=1000; end
if (key(_z)) m7[0].distance--; end
if (key(_x)) m7[0].distance++; end
if (key(_c)) m7[0].height--; end
if (key(_v)) m7[0].height++; end
IF (key(_esc)) exit("", 0);END
FRAME;
END
END
//----------------------------------------------------------------------
// Process object
// Visualizes all objects
// Entries: xgraph = Pointer to the graphics' table of object
// x,y = Coordinates
// angle = Object's angle
// size = Object's size, on percentage
//----------------------------------------------------------------------
PROCESS object(xgraph,x,y,angle0,size)
BEGIN
z=-16; // Chooses a depth
ctype=c_m7; // Introduces the process within mode 7
height = 0;
LOOP
angle = angle0 - m7[0].camera.angle;
FRAME; // Shows the graphic
END
END
edito, el ejemplo estaba mal y no entendia porque no iba... los seteos del m7, deben hacerse despues del start_m7, ya que el start_m7 resetea algunas variables, para asegurarse de que se hace un m7 correcto.
Quote from: SplinterGU on September 03, 2011, 12:59:31 AM
edito, el ejemplo estaba mal y no entendia porque no iba... los seteos del m7, deben hacerse despues del start_m7, ya que el start_m7 resetea algunas variables, para asegurarse de que se hace un m7 correcto.
En esa parte te equivocas, toda la información que definas de la estructura m7 se puede definir antes o después de llamar a start_m7. Además los procesos están ubicados mal tanto en posición como en tamaño, al momento de hacer rotación, los gráficos x cambian de manera incorrecta.
Te doy un consejo...
No cambies el ejemplo que está en DIV....
El ejemplo está escrito de manera correcta, no entiendo el por qué tienes que cambiar el valor del ángulo a otro valor. La idea es que el programa debe ejecutarse correctamente tal y como está.
En cuanto a la ruta, el \ y / se tiene que manejarse internamente si se está usando otros sistemas operativos, no entiendo el por qué se tiene que poner en la ruta principal.
Por ahora eso es todo...
Quote from: edgardo30 on September 03, 2011, 01:09:40 AM
Quote from: SplinterGU on September 03, 2011, 12:59:31 AM
edito, el ejemplo estaba mal y no entendia porque no iba... los seteos del m7, deben hacerse despues del start_m7, ya que el start_m7 resetea algunas variables, para asegurarse de que se hace un m7 correcto.
En esa parte te equivocas, toda la información que definas de la estructura m7 se puede definir antes o después de llamar a start_m7. Además los procesos están ubicados mal tanto en posición como en tamaño, al momento de hacer rotación, los gráficos x cambian de manera incorrecta.
en bennugd tienes que definirlos despues del start_m7...
con respecto a la rotacion de los objetos, fue algo que puse yo en el prg, para que roten segun rotes la vista... tampoco es perfecto, no lo pense demasiado, simplemente hice una resta de angulos (aunque creo que va bien).
como ya dije, el modo7 de BennuGD no es 100% compatible con el de DIV2, por eso lo cambie.
el path se maneja internamente, pero tienes que tener el directorio FPG\tutorial\ y yo no lo tenia, me resulto mas comodo borrar el path que crearlo... pero si es importante que si usas unix/linux respetes las mayusculas y minusculas...
repito, BennuGD no es ni pretende ser 100% compatible con DIV/DIV2.
nueva modificacion... ya los dirty trabajan con cualquier resolucion, no solo con resoluciones divisibles por 8 ni 16.
Quote from: SplinterGU on September 03, 2011, 01:34:23 AM
nueva modificacion... ya los dirty trabajan con cualquier resolucion, no solo con resoluciones divisibles por 8 ni 16.
¡Genial!
Quote from: edgardo30 on September 03, 2011, 01:17:18 AM
Te doy un consejo...
No cambies el ejemplo que está en DIV....
El ejemplo está escrito de manera correcta, no entiendo el por qué tienes que cambiar el valor del ángulo a otro valor. La idea es que el programa debe ejecutarse correctamente tal y como está.
En cuanto a la ruta, el \ y / se tiene que manejarse internamente si se está usando otros sistemas operativos, no entiendo el por qué se tiene que poner en la ruta principal.
Por ahora eso es todo...
:)
Hombre, el ejemplo de DIV estaba bien escrito en DIV, bennu es diferente en algunas cosas y DIV ya no es el referente para Bennu.
En cuanto a las rutas.... es windows el que lo hace "mal". Creo que Bennu convierte los "\" en "/" en caso de necesidad pero aún así usa siempre las barras de directorio "/" (aunque estés en windows) y verás cómo no tienes problemas. Y lo que te dice Splinter, en general deberías suponer que "Fichero.fpg" no es lo mismo que "fichero.fpg" porque en muchos sistemas no lo es.
Si lo haces así, luego te resultará mucho más fácil portar tus juegos a nuevas plataformas.
Quote from: josebita on September 03, 2011, 12:47:59 PM
Quote from: edgardo30 on September 03, 2011, 01:17:18 AM
Te doy un consejo...
No cambies el ejemplo que está en DIV....
El ejemplo está escrito de manera correcta, no entiendo el por qué tienes que cambiar el valor del ángulo a otro valor. La idea es que el programa debe ejecutarse correctamente tal y como está.
En cuanto a la ruta, el \ y / se tiene que manejarse internamente si se está usando otros sistemas operativos, no entiendo el por qué se tiene que poner en la ruta principal.
Por ahora eso es todo...
:)
Hombre, el ejemplo de DIV estaba bien escrito en DIV, bennu es diferente en algunas cosas y DIV ya no es el referente para Bennu.
En cuanto a las rutas.... es windows el que lo hace "mal". Creo que Bennu convierte los "\" en "/" en caso de necesidad pero aún así usa siempre las barras de directorio "/" (aunque estés en windows) y verás cómo no tienes problemas. Y lo que te dice Splinter, en general deberías suponer que "Fichero.fpg" no es lo mismo que "fichero.fpg" porque en muchos sistemas no lo es.
Si lo haces así, luego te resultará mucho más fácil portar tus juegos a nuevas plataformas.
PD: Splinter, no dejes de actualizar el post inglés, que les viene muy bien para enterarse. Aunque sea una notita corta traducida con google :)
en el svn lo pongo en ingles... pero lo hare, muchas gracias joseba...
joseba, ya subi los cambios, me gustaria saber como se comporta en otros equipos/resoluciones/sistemas... en mi linux he consiguido una mejora de rendimiento... si podrias probar...
ahh, tambien ahora los scripts de compilacion (se que no los usas), compilan sin hacer configure ni clean a menos que se le pase el argumento release.
Intentaré probarlo cuando tenga un rato a ver qué sale.
Quote from: SplinterGU on September 03, 2011, 01:31:10 AM
el path se maneja internamente, pero tienes que tener el directorio FPG\tutorial\ y yo no lo tenia, me resulto mas comodo borrar el path que crearlo... pero si es importante que si usas unix/linux respetes las mayusculas y minusculas...
repito, BennuGD no es ni pretende ser 100% compatible con DIV/DIV2.
Esta parte la entiendo perfectamente, yo solo decía que el SIZE no se calcula como debe de ser. Todos los objetos tienen el mismo tamaño y eso no es correcto.
Lo otro que vi raro es la forma como la cámara rota el escenario, pregunta, ¿Ustedes toman como punto central el punto de control 0 en el Mapa que carga el suelo?. Pienso que la cámara debe rotar en 3ra persona, y no en primera persona.
Por cierto el os_id de la pandora ya esta en el codigo oficial ?
Quote from: edgardo30 on September 03, 2011, 02:15:53 PM
Quote from: SplinterGU on September 03, 2011, 01:31:10 AM
el path se maneja internamente, pero tienes que tener el directorio FPG\tutorial\ y yo no lo tenia, me resulto mas comodo borrar el path que crearlo... pero si es importante que si usas unix/linux respetes las mayusculas y minusculas...
repito, BennuGD no es ni pretende ser 100% compatible con DIV/DIV2.
Esta parte la entiendo perfectamente, yo solo decía que el SIZE no se calcula como debe de ser. Todos los objetos tienen el mismo tamaño y eso no es correcto.
Lo otro que vi raro es la forma como la cámara rota el escenario, pregunta, ¿Ustedes toman como punto central el punto de control 0 en el Mapa que carga el suelo?. Pienso que la cámara debe rotar en 3ra persona, y no en primera persona.
x, y, son el centro, distancia y altura definen desde donde se ve... (eso creo)... por eso si ponemos distancia 0, rota en la camara.
Quote from: FreeYourMind on September 03, 2011, 02:17:58 PM
Por cierto el os_id de la pandora ya esta en el codigo oficial ?
creo que si, usa moddesc.
Quote from: josebita on September 03, 2011, 01:37:57 PM
Intentaré probarlo cuando tenga un rato a ver qué sale.
gracias...
Yo he estado esta tarde haciendo mis pruebas con el modo7.
Creía que estaba con la r263, pero me he fijado que el script de compilación andaba usando la 253 ^^U
Pero bueno, el resultado ha sido muy bueno mientras no he hecho "cosas raras".
Primero he cogido el minijuego de SBTime en modo7 que estaba separando para otro juego y lo he probado con la versión más moderna. Para el que no lo recuerde, se trata de un circuito de carreras usando 3 modo7 a tres alturas distintas, con mapas gigantes (casi 3MB cada uno), y un scroll de fondo. De momento sin cambios en velocidad.
Luego lo dibujé en un mapa, sin problemas.
Lo siguiente era probar la "pantalla partida". Así que generé 3 modo7 más y otro scroll, e hice que se dibujasen en mapas independientes. Yo no he notado bajada de frames apreciables en mi ordenador, aunque tampoco estaba intentando ponerlo a tope.
Lo he puesto a pantalla partida horizontalmente (con size_y a 50), a un cuarto de pantalla e incluso superpuestos con flag transparente y ni se ha inmutado el ordenador. Todo ha funcionado como debía... salvo los colores.
Así que hice una conversión a 16bits de todo (modo gráfico, mapas sobre los que se dibujaba, y qué susto hasta que me di cuenta que me faltó cambiar los FPGs ^^U). Sin pegas ninguna, todo funcionaba como tenía que ir.
La pega vino cuando después de todo eso hice la "cosa rara". No se si Splinter se acordará del efecto visual que le pasé por privado hace un par de meses (prefiero no decir aun de qué se trata), pero he intentado usarlo con el modo7 :D
El ordenador no me ha dado más de 10FPS, y el efecto no es muy allá, en parte por la resolución de trabajo (320x240 + SCALE_NOFILTER), en parte por el tamaño de los pixels en el modo7 y en parte por la falta de precisión en los cálculos (no me quejo del modo7, simplemente es que este efecto exige ser pixel perfect).
Mientras no uso este efecto, el ordenador tira a los 50FPS programados.
Eso sí, lo he probado al final con la r263 y va igual :D
Conclusiones:
-De momento, no hay nada roto en el modo7.
-El dibujado en mapas funciona bien y no parece resentirse demasiado. Habría que hacer las pruebas en WIZ y máquinas menos potentes para dar un veredicto.
-Definitivamente, necesito pasar este efecto a una DLL si no quiero que Drumpi salga del ordenador a darme una colleja ;D
Así que aprovecho para decirle "buen trabajo" a Splinter y darle un karma.
gracias Drumpi!
Splinter, hay algun motivo por el que GLOB no me funcione correctamente en un pc concreto ?
Tengo un eeepc que usa Windows XP SP3 y se niega a rellenar cualquier tipo de información de cualquier archivo o carpeta existente, siempre da resultado vacio.
no deberia, menos segun la pc... podria ser por el operativo, pero la pc... no lo creo.
pon un ejemplo, para descartar cualquier otra cosa.
El test que he hecho no era más que un par de lineas, un glob a una carpeta existente y luego tratar de mostrarlo con write o say, pero no salia nada.
En otro pc, me sale ".", luego "..", luego el nombre de la primera carpeta.
"more input..."
si tenias permisos sobre la carpeta, la verdad que no se me ocurre que puede ser.
- add build compile script for mingw32 cross on linux
- change all sdk now on /opt
Bien :)
Nos libraremos de la VM de Windows para las nightlies!
Podrias compilar la ultima version ni que sea solo en Wiz/Caanoo ?
Necesito ver si gano rendimiento en los procesos en relacion a la r263, ya que se consta que has mejorado el rendimiento.
Juan, usando la herramienta describe para listar las funciones, he visto que que existen mod_math.dll y mod_mathi.dll. Hasta ahora no me había fijado. Supongo que math a secas será para floats y mathi para integers, ¿me equivoco? pero viendo la salida de las funciones, veo que por ejemplo la función Abs() es float para ambas librerías.
Module name: mod_math.dll
Functions:
FLOAT ABS(FLOAT)
FLOAT POW(FLOAT, FLOAT)
FLOAT SQRT(FLOAT)
FLOAT COS(FLOAT)
FLOAT SIN(FLOAT)
FLOAT TAN(FLOAT)
FLOAT ACOS(FLOAT)
FLOAT ASIN(FLOAT)
FLOAT ATAN(FLOAT)
FLOAT ATAN2(FLOAT, FLOAT)
INT ISINF(FLOAT)
INT ISNAN(FLOAT)
INT FINITE(FLOAT)
INT FGET_ANGLE(INTEGER, INTEGER, INTEGER, INTEGER)
INT FGET_DIST(INTEGER, INTEGER, INTEGER, INTEGER)
INT NEAR_ANGLE(INTEGER, INTEGER, INTEGER)
INT GET_DISTX(INTEGER, INTEGER)
INT GET_DISTY(INTEGER, INTEGER)
Module name: mod_mathi.dll
Functions:
FLOAT ABS(FLOAT)
FLOAT POW(FLOAT, FLOAT)
FLOAT SQRT(FLOAT)
FLOAT COS(INTEGER)
FLOAT SIN(INTEGER)
FLOAT TAN(INTEGER)
FLOAT ACOS(INTEGER)
FLOAT ASIN(INTEGER)
FLOAT ATAN(INTEGER)
FLOAT ATAN2(INTEGER, INTEGER)
INT ISINF(FLOAT)
INT ISNAN(FLOAT)
INT FINITE(FLOAT)
INT FGET_ANGLE(INTEGER, INTEGER, INTEGER, INTEGER)
INT FGET_DIST(INTEGER, INTEGER, INTEGER, INTEGER)
INT NEAR_ANGLE(INTEGER, INTEGER, INTEGER)
INT GET_DISTX(INTEGER, INTEGER)
INT GET_DISTY(INTEGER, INTEGER)
¿No habrá algo mal?
Un saludo
no hay nada mal... un modulo es reemplazo del otro... uno maneja floats y otro integers...
mod_mathi, es lo mismo que mod_math, solo que la funciones trigonometricas retornan enteros en milesimas, o sea, el valor de la mod_math * 1000.
Alguien puede compilar la ultima version para wiz y caanoo please
se agregan warnings sobre conversiones implicitas en las asignaciones, para evitar situaciones donde suponemos que una funcion nos retorna un tipo de dato y en realidad esta retornando otro, o si asignamos una variable de un tipo a otro y deseamos saber si se esta haciendo una conversion de tipos.
Quote from: FreeYourMind on September 26, 2011, 11:37:40 AM
Alguien puede compilar la ultima version para wiz y caanoo please
este fin de semana te prometo que genero paquetes nuevos de todo.
nuevas versiones disponibles para descarga!
free ya probaste esta version?
esta version incluye:
------------------------------------------------------------------------
r264 | SplinterGU | 2011-08-07 01:22:18 -0300 (dom 07 de ago de 2011) | 2 lines
- mod_effects 32bits
------------------------------------------------------------------------
r265 | SplinterGU | 2011-08-07 01:36:59 -0300 (dom 07 de ago de 2011) | 2 lines
- fix rgb in texts
------------------------------------------------------------------------
r266 | SplinterGU | 2011-09-02 23:43:09 -0300 (vie 02 de sep de 2011) | 5 lines
- Fix problem with dirty and non-standards resolutions
- Add more dirty rects for get more performance
- Minor fix in render
------------------------------------------------------------------------
r267 | SplinterGU | 2011-09-11 13:24:11 -0300 (dom 11 de sep de 2011) | 2 lines
- fix for WII
------------------------------------------------------------------------
r268 | SplinterGU | 2011-09-12 21:08:38 -0300 (lun 12 de sep de 2011) | 3 lines
- Add build for cross compiling from windows
- Change all sdk, now on /opt
------------------------------------------------------------------------
r269 | SplinterGU | 2011-09-15 10:13:42 -0300 (jue 15 de sep de 2011) | 2 lines
- des fix in windows
------------------------------------------------------------------------
r270 | SplinterGU | 2011-10-29 04:57:43 -0300 (sáb 29 de oct de 2011) | 2 lines
- Warning on implicit conversion in assignament
La estoy probando en wiz y pc de momento, la verdad es que no noto diferencia en rendimiento, pero me faltaria probar las 2 versiones en paralelo para confirmarlo. Aunque posiblemente vaya alguns fps mas rapido, tendria que mirarlo a lupa.
Gracias por el port.
gracias! joya! :D
Quote from: FreeYourMind on October 29, 2011, 05:55:57 PM
La estoy probando en wiz y pc de momento, la verdad es que no noto diferencia en rendimiento, pero me faltaria probar las 2 versiones en paralelo para confirmarlo. Aunque posiblemente vaya alguns fps mas rapido, tendria que mirarlo a lupa.
Gracias por el port.
la mejora de rendimiento depende del juego... en el ejemplo que probe obtuve una buena diferencia...
Estoy compilando para Pandora, no he tocao nada de path's ni movidas, ahora me da este error:
### Building 3rd party software ###
/root/Geca/BennuGD_Pandora2/pandora-toolchain/arm-angstrom-linux-gnueabi/../bin/arm-angstrom-linux-gnueabi-gcc -DTARGET_PANDORA -mcpu=arm926ej-s -mtune=arm926ej-s -O3 -DARM -D_ARM_ASSEM_ -I/root/Geca/BennuGD_Pandora2/pandora-toolchain/arm-angstrom-linux-gnueabi/include -I/root/Geca/BennuGD_Pandora2/pandora-toolchain/arm-angstrom-linux-gnueabi/include/libxml2 -I/root/Geca/BennuGD_Pandora2/pandora-toolchain/arm-angstrom-linux-gnueabi/usr/include/SDL -DRAND -fPIC -c -o cbc_cksm.o cbc_cksm.c
make: /root/Geca/BennuGD_Pandora2/pandora-toolchain/arm-angstrom-linux-gnueabi/../bin/arm-angstrom-linux-gnueabi-gcc: No se encontró el programa
make: *** [cbc_cksm.o] Error 127
*** ABORT ***
Esto esta todo muy raro, ahora ya no tengo el error.
Por partes, la version anterior me compila bien, esta la cual tengo en otra carpeta, pero con las rutas modificadas, me da este error:
### Building BennuGD Core ###
./build-pandora.sh: 82: ./configure: Permission denied
*** ABORT ***
Ni como root se resuelve el tema de los permisos...
Quote from: FreeYourMind on October 30, 2011, 03:46:39 PM
Esto esta todo muy raro, ahora ya no tengo el error.
Por partes, la version anterior me compila bien, esta la cual tengo en otra carpeta, pero con las rutas modificadas, me da este error:
### Building BennuGD Core ###
./build-pandora.sh: 82: ./configure: Permission denied
*** ABORT ***
Ni como root se resuelve el tema de los permisos...
chmod a+x configure
Quote from: FreeYourMind on October 30, 2011, 03:26:14 PM
Estoy compilando para Pandora, no he tocao nada de path's ni movidas, ahora me da este error:
### Building 3rd party software ###
/root/Geca/BennuGD_Pandora2/pandora-toolchain/arm-angstrom-linux-gnueabi/../bin/arm-angstrom-linux-gnueabi-gcc -DTARGET_PANDORA -mcpu=arm926ej-s -mtune=arm926ej-s -O3 -DARM -D_ARM_ASSEM_ -I/root/Geca/BennuGD_Pandora2/pandora-toolchain/arm-angstrom-linux-gnueabi/include -I/root/Geca/BennuGD_Pandora2/pandora-toolchain/arm-angstrom-linux-gnueabi/include/libxml2 -I/root/Geca/BennuGD_Pandora2/pandora-toolchain/arm-angstrom-linux-gnueabi/usr/include/SDL -DRAND -fPIC -c -o cbc_cksm.o cbc_cksm.c
make: /root/Geca/BennuGD_Pandora2/pandora-toolchain/arm-angstrom-linux-gnueabi/../bin/arm-angstrom-linux-gnueabi-gcc: No se encontró el programa
make: *** [cbc_cksm.o] Error 127
*** ABORT ***
ya te he comentado que no hay soporte tecnico oficial pandora... cuando te pedi un zip con el SDK ya configurado me invitaste a que busque y baje el instalador o no se que... asi que pase de la version pandora...
O sea no puedo ni preguntar dudas que tenga para hacer mi port ?
Pues vale....
Te vuelvo a repetir, el SDK lo configure como tu me dijiste, es paradojico que te tenga que yo enseñar ahora lo que tu me enseñaste a mi...
Las rutas estan en el makefile que has puesto y todo, y todo lo que yo he hecho lo he comentado en el hilo....
Quieres que te pase 1 giga de SDK por el aire no ? Ya me gustaria tener un servidor y fibra optica para enviar gigas como quien regala caramelos...
Ya la he compilado, gracias
jejeje, si puedes preguntar, claro... disculpa...
es que lleva bastante tiempo hacer lo que yo te dije que hagas, por ende, te pedi que por favor empaquetes tu SDK asi configurado y me lo pases...
1gb el SDK de pandora? ??? !!!!! imposible, si todos los otros SDK (caanoo, wiz, dingux) juntos comprimidos son 230mb en total... imposible lo que dices.
Versión nueva, karma extra. Poco a poco voy dejando a deber menos karmas a Splinter :D :D :D
gracias! yo te voy a dar unos karmas... que hace tiempo no te doy y te los mereces...
Karmas por tocar las pelotas! ;D
¿Ha habido algún cambio en la salida del compilador desde la version r263? Antes si había algún error de compilación, en el FBMX, te saltaba el aviso y te llevaba a la línea; ahora, sale un olesto error que no te ayuda en nada. Pienso que algo se habrá cambiado en la salida.
es problable... mejore los mensajes, pero no recuerdo en que version...
fijate en el svn, el log...
Las pruebas que he hecho desde la consola, me dan la misma salida (excepto que ahora aparecen algunos warnings).
¿puede ser que hayas cambiado la salida de pantalla a log, o de log a pantalla?
no, no ha cambiado eso...
Quote- Add new functions
WRITE*(fontid, x, y, z, alignm, ...)
SET_TEXT_COLOR(textid, color)
GET_TEXT_COLOR(textid)
MOVE_TEXT(textid, x, y, z)
- compiler improved, now can possible mix overload functions with V++
and others params, but it must get diffent params count, pe.:
"IIIIV++"
and
"IIIIIV++"
and
"IIIIIII"
necesito que por favor, todos aquellos que tengan posibilidad de compilar de los fuentes, prueben bien esta version, ya que hubo cambios importantes en el codigo... en la forma en que el compilador parsea los fuentes... ahora se precalcula la cantidad de parametros de cada funcion, y luego se busca la que corresponde (hablo de funciones de dlls o del core interna), y para hacer esto se hace rollback de los punteros dentro del tokenizador y tambien del codigo dcb que se va generando mientras parsea.
desde ya, gracias.
code sample
import "mod_text";
import "mod_mouse";
import "mod_key";
import "mod_video";
import "mod_rand";
import "mod_map";
private
txt[10];
counter;
tz;
begin
set_mode(640,480,32);
txt[0]=write_int(0,10,10,10,0,&counter);
txt[1]=write_int(0,10,20,-5,0,&tz);
txt[2]=write(0,10,10,0,0,"hello world");
set_text_color(txt[1], rgb(255,0,0));
while(!key(_ESC))
counter++;
move_text(txt[2], mouse.x, mouse.y, tz );
set_text_color(txt[0], rand(0101010h, 0ffffffh));
if ( key( _DOWN ) ) tz--; end
if ( key( _UP ) ) tz++; end
frame;
end
end
usen el mouse para mover el "hello world" y UP y DOWN para cambiar la Z del mismo, y muevanlo sobre los otros 2 textos que estan en diferentes Z.
He estado mirando un poco los cambios por encima y yo diría que a mi versión monolítica no tendría que afectarle. Aún así intentaré asegurarme.
Y en un rato trataré de subir el nuevo código a mi PPA.
No lo he entendido bien, yo tengo varios proyectos para iOS, que necesitas exactamente? compilar y ver si hay algún error en ejecución en los programas generados?
Creo que los templates que tengo son los que ya están compilados, pero si me pasais alguno nuevo pruebo los proyectos que tengo y te digo si veo algo raro.
joseba, no deberias tener problema en meter estos cambios en tu version monolitica, diria que en antes de subirlo al PPA, lo pruebes con algunos cuantos codigos, si son grandes mejor.
si, Erkosone, la idea es compilar los proyectos que tengan y probarlo, obviamente necesitan una version compilada de los ejecutables.
gracias a ambos.
el ejemplo que he puesto, ademas de cambiar las Z de los textos, cambian los colores de uno de los textos como si fuera un cartel luminoso multicolor, muchos se ahorrarian algunos efectos de este estilo.
Iba a probar esto en iOS pero ya en windows no me compila, me dice que error en el número de parámetros de write_int()
El compilador que tengo suelta por consola 1.0.0, tengo que descargar algo mas nuevo para hacer el test?
Quote from: Erkosone on February 25, 2012, 05:10:40 PM
Iba a probar esto en iOS pero ya en windows no me compila, me dice que error en el número de parámetros de write_int()
El compilador que tengo suelta por consola 1.0.0, tengo que descargar algo mas nuevo para hacer el test?
necesitarás compilarte una nueva versión binaria del código, primero.
splinter, hay alguna forma de saber la versión de cada binario por medio de consola?
solo fecha de compilacion... tendria que agregar el numero de revision o algo...
Estaría bien con un
bgdc.exe -ver
estaba pensando en algun similar.
- mejora en el render de mapas con size_x y size_y pequeños.
- new internal lib for background load
- fix bgload fpg & others
- add new backgound load functions
LOAD_MAP(filename, &id)
LOAD_PNG(filename, &id)
LOAD_PCX(filename, &id)
LOAD_SONG(filename, &id)
LOAD_WAV(filename, &id)
LOAD_PAL(filename, &id)
LOAD_FNT(filename, &id)
LOAD_BDF(filename, &id)
MAP_LOAD(filename, &id)
PNG_LOAD(filename, &id)
PCX_LOAD(filename, &id)
SONG_LOAD(filename, &id)
WAV_LOAD(filename, &id)
PAL_LOAD(filename, &id)
FNT_LOAD(filename, &id)
BDF_LOAD(filename, &id)
¿Por qué el id se tiene que pasar como puntero? :?
¿No se podría hacer como siempre, pero con un parámetro extra que indique que se debe hacer en background y saber si ha acabado de cargar revisando el id?
Quote from: PiXeL on February 28, 2012, 11:16:15 PM
¿Por qué el id se tiene que pasar como puntero? :?
¿No se podría hacer como siempre, pero con un parámetro extra que indique que se debe hacer en background y saber si ha acabado de cargar revisando el id?
y yo te pregunto, si no le pasas un puntero, como te enteras en que id lo termina cargando? e incluso, como te enteras cuando termina de cargarlo?
por otro lado, nunca fue un parametro extra para indicar que es background, siempre ese parametro extra fue un puntero.
y no se pasa el id, se recibe el id.
lo que preguntas por que no hace, es exactamente lo que hace...
tu le pasas un puntero y cuando la funcion termina la carga, en ese puntero deja el id de lo que cargo.
mientras lo va cargando vale -2, si da error -1.
Entiendo, es lógico.
Es que vengo de un mundo mu bonito en el que los punteros los usan los hackers xD
Quote from: SplinterGU on February 28, 2012, 11:37:45 PM
lo que preguntas por que no hace, es exactamente lo que hace...
tu le pasas un puntero y cuando la funcion termina la carga, en ese puntero deja el id de lo que cargo.
mientras lo va cargando vale -2, si da error -1.
A ver si lo he entendido... supongamos q cargo un fpg. Y lo quiero hacer asincronicamente porq es un fpg gordote. Lo hago asi??
idFpg = load_fpg("archivo_gordo.fpg", &idArchivoGordo);
while(idArchivoGordo==-2)
say("Archivo Gordo cargandose ....");
frame;
end
if(idArchivoGordo==-1)
say("Error gordisimo!!!, salvese quien pueda");
elseif
say("Archivo Gordo cargado!!!");
end
file=idFpg;
graph = 7;
supongamos q he definido mas arriba como globales idArchivoGordo, y idFpg (q es el indicador q usaré en los procesos en su variable file).
Voy bien encaminado para usar estas funciones de esta manera?
no, no...
load_fpg("archivo_gordo.fpg", &idFpg);
while(idFpg==-2)
say("Archivo Gordo cargandose ....");
frame;
end
if(idFpg==-1)
say("Error gordisimo!!!, salvese quien pueda");
exit(); // o return
end
say("Archivo Gordo cargado!!!");
file=idFpg;
graph = 7;
o
load_fpg("archivo_gordo.fpg", &file);
while(file==-2)
say("Archivo Gordo cargandose ....");
frame;
end
if(file==-1)
say("Error gordisimo!!!, salvese quien pueda");
exit(); // o return
end
say("Archivo Gordo cargado!!!");
graph = 7;
Ah vale... q el puntero apunta al identificador del archivo .. ok .. creia q era una especie de variable de control .. oki
es las 2 cosas.
Splinter .. la version de windows de bennu que esta el la web es la última que incorpora estos cambios?
no, hay que tirar de los fuentes aun...
quiero meter algunas cosas nuevas mas antes de sacar un binario, pero ahora en estos dias me tengo que ordenar un poco...
- now if set_mode fail return -1, else return 0
- several bug fix in pal system functions
- fix font cp850 charset use.
Get revision (version) number of the compiler and the interpreter?
pending... in list...
r282 liberada!
por favor, pruebenla en windows, que use un nuevo cross y no se como ira.
ya le quite el RC, me parece que ya no tiene sentido que siga siendo una Release Candidate.
Probandoooo
Deberias de hacer una lista con las cosas que has metido en la version xDD asi no se donde hacer las pruebas mas fastidiosas xD
Gracias Splinter! Me uno a Keoh en la petición de los cambios que has implementado, porque sino no sé de qué informarte una vez que la pruebe... (karmazo!! y te debo un par eh!)
puf, hay una lista de cambios, si revisan el hilo desde el anuncio de release a release, ahi estan los cambios
desde la pagina 117 a la actual, son anunciados los cambios.
excelente .. karma
a que se refiere esto - several bug fix in pal system functions
perdon, PAL = PALETTE
Perdona Splin, por cierto, un placer verte...
Es la versión final del nuevo binario, se puede descarga y actualizar? No tiene fallos?
Lo de más arriba, es la nueva forma de poner escepciones en el set_mode? habéis añadido un sistema fail? y otra cosa.... Lo de la carga, no termino de comprenderlo del todo. El parametro opcional de load_fpg sólo admite un puntero a direción de memoria? Si es así, antes, imagino que habrá que definir dicho puntero, ¿no? Y tras definirlo, supongamos que es file... Una variable local predefinida se puede redefinir como puntero? Y si es así, a quién debe apuntar?
la puedes bajar, no tiene fallos detectados.
la excepcion la controlas tu ahora con el retorno, debes chequear el valor de retono de dicha funcion para saber si pudo o no establecer el modo de video.
con respecto a la carga, veo que tienes una confusion total con los punteros... es el puntero de la variable donde guardara el identificador una vez cargado el recurso... no tienes que convertir ninguna variable a puntero y tampoco apuntar a nada con ningun puntero, solo pones la direccion de memoria de la variable, usando el operador &.
por ejemplo,
&file
dejara el identificador en la variable file, el poner & delante es para referenciar la direccion/puntero de/a la variable.
Quote from: SplinterGU on March 25, 2012, 04:45:49 PM
la puedes bajar, no tiene fallos detectados.
la excepcion la controlas tu ahora con el retorno, debes chequear el valor de retono de dicha funcion para saber si pudo o no establecer el modo de video.
con respecto a la carga, veo que tienes una confusion total con los punteros... es el puntero de la variable donde guardara el identificador una vez cargado el recurso... no tienes que convertir ninguna variable a puntero y tampoco apuntar a nada con ningun puntero, solo pones la direccion de memoria de la variable, usando el operador &.
por ejemplo,
&file
dejara el identificador en la variable file, el poner & delante es para referenciar la direccion/puntero de/a la variable.
Ya me di cuenta, la propia función "asigna" en memoria a File lo que haya cargado, por eso no aparece ninguna variable que guarde el valor retornado... comprendo. Es que, al no ver ninguna variable que recogiera nada, por eso me confundía. Sabía que el andpersan referenciaba a direcciones de memoria, pero claro, una vez guardadas, no que las pudiera tambien asignar, ¿comprendes?
edito: por cierto, karma++ por la actualización :)
clarificando, el & no modifica el valor de "file" (usando de ejemplo file), sino que referencia/apunta al area de memoria donde "file" almacena su valor, entonces teniendo ese puntero, ya puedes usarlo para rellenar el valor de file.
Splinter .. me pasa una cosa rarisima. Estoy peleandome con el motor de tiles de drumpi, y estoy haciendo pruebas y tal .. y me ocurre que de cada 10 veces que ejecuto el juego, bennu crashea 6 veces xD .. no me da error ni nada .. solo windows dice q bgdi ha dejado de funcionar. Y por la resolucion de la pantallita a la que tengo el juego, parece ser que hay veces q cruje en un sitio y otas veces cruje en otro sitio.
La cosa es que otras veces funciona. Y siempre me crashea si importo el "mod_screen", aunque no use ninguna funcion de ese modulo. Te adjuto el jueguecillo prueba para q veas si te pasas tambien
Solo lo he probado con la version de bennu para windows.
correlo con debug...
compilas con -g y desde la consola, corres con -d... y fijate donde crashea.
Vaya festival de texto q sale por la consola xDDDD q locura xDD
:D
lo importante es ver donde termina.
Splinter ... hoy me esta crasheando mucho al cargar un Fpg .. la cosa esq hay veces q lo carga .. xDD
Esto es lo que me sale por consola despues de la fiesta de texto xD, es lo ultimo q sale
0225C2BC
[ 296] 000000B3 00000001
POSTINC 1
00000AEF
[ 298] 00000005
POP
[ 299] 0000009B 00000117
JUMP 279
[ 279] 000000FF 00200044
------ tscroll_guardarYcargar.prg:68 -> for(cont;cont<(cantidadTile
s+1);cont++)
[ 281] 00000097 00000014
GET_PRIVATE 20
00000AF0
[ 283] 00000097 0000002C
GET_PRIVATE 44
00000AF0 00000AF0
[ 285] 00000090 00000001
INDEX 1
00000AF0 00000AF1
[ 287] 00000030
LT
00000001
[ 288] 0000009C 0000014B
JFALSE 331
[ 290] 0000009B 0000012D
JUMP 301
[ 301] 000000FF 00200046
------ tscroll_guardarYcargar.prg:70 -> elementoXML = xml_nexteleme
nt(elementoXML);
[ 303] 00000092 0000000C
PRIVATE 12
0225C2B4
[ 305] 00000097 0000000C
GET_PRIVATE 12
0225C2B4 0598C418
[ 307] 0000008A 000000D2
SYSCALL XML_NEXTELEMENT (210)
0225C2B4 00000000
[ 309] 00000047
LETNP
[ 310] 000000FF 00200047
------ tscroll_guardarYcargar.prg:71 -> xml_attributei(elementoXML,
"val",&[xml_mapa].b_mapa[cont]);
[ 312] 00000097 0000000C
GET_PRIVATE 12
00000000
[ 314] 00000384 00000020 STRING
PUSH 32
00000000 00000020
[ 316] 00000097 00000004
GET_PRIVATE 4
00000000 00000020 0096116C
[ 318] 00000090 0000002A
INDEX 42
00000000 00000020 00961196
[ 320] 00000016
PTR
00000000 00000020 059953B0
[ 321] 00000097 00000014
GET_PRIVATE 20
00000000 00000020 059953B0 00000AF0
[ 323] 00000091 00000001
ARRAY 1
00000000 00000020 05995EA0
[ 325] 0000008C 000000CE
SYSPROC XML_ATTRIBUTEI (206)
[ 327] 000000FF 00200049
------ tscroll_guardarYcargar.prg:73 -> end
[ 329] 0000009B 00000124
JUMP 292
[ 292] 000000FF 00200044
------ tscroll_guardarYcargar.prg:68 -> for(cont;cont<(cantidadTile
s+1);cont++)
[ 294] 00000092 00000014
PRIVATE 20
0225C2BC
[ 296] 000000B3 00000001
POSTINC 1
00000AF0
[ 298] 00000005
POP
[ 299] 0000009B 00000117
JUMP 279
[ 279] 000000FF 00200044
------ tscroll_guardarYcargar.prg:68 -> for(cont;cont<(cantidadTile
s+1);cont++)
[ 281] 00000097 00000014
GET_PRIVATE 20
00000AF1
[ 283] 00000097 0000002C
GET_PRIVATE 44
00000AF1 00000AF0
[ 285] 00000090 00000001
INDEX 1
00000AF1 00000AF1
[ 287] 00000030
LT
00000000
[ 288] 0000009C 0000014B
JFALSE 331
[ 331] 000000FF 0020004A
------ tscroll_guardarYcargar.prg:74 -> cargado_correcto=true;
[ 333] 00000092 00000010
PRIVATE 16
0225C2B8
[ 335] 00000084 00000001
PUSH 1
0225C2B8 00000001
[ 337] 00000047
LETNP
[ 338] 000000FF 0020004B
------ tscroll_guardarYcargar.prg:75 -> xml_close(id_lvlXML);
[ 340] 00000097 00000008
GET_PRIVATE 8
058C4120
[ 342] 0000008C 000000CB
SYSPROC XML_CLOSE (203)
[ 344] 000000FF 0020004D
------ tscroll_guardarYcargar.prg:77 -> return cargado_correcto;
[ 346] 00000097 00000010
GET_PRIVATE 16
00000001
[ 348] 00000001
RETURN
00000001
[ 8] 0000009C 00000010
JFALSE 16
[ 10] 000000FF 0000002C
------ prueba.prg:44 -> say("Cargado");
[ 12] 00000384 00000030 STRING
PUSH 48
00000030
[ 14] 0000008C 0000000B
SYSPROC SAY (11)
Cargado
[ 16] 000000FF 00000032
------ prueba.prg:50 -> set_mode(2240,320,32);
[ 18] 00000084 000008C0
PUSH 2240
000008C0
[ 20] 00000084 00000140
PUSH 320
000008C0 00000140
[ 22] 00000084 00000020
PUSH 32
000008C0 00000140 00000020
[ 24] 0000008C 00000006
SYSPROC SET_MODE (6)
[ 26] 000000FF 00000034
------ prueba.prg:52 -> retGraficoTileado(&mapeado);
[ 28] 00000094 0000010C
GLOBAL 268
0096116C
[ 30] 0000008B 00000003
PROCESS RETGRAFICOTILEADO (3)
***** INSTANCE RETGRAFICOTILEADO(65538) ENTRY StackBase=0595C3B0 StackPTR=0595C3
B4
[ 0] 000000FF 00300015
------ lvlToPng.prg:21 -> ncolumnas = [lvlMap].columnas;
[ 2] 00000092 00000004
PRIVATE 4
02291F64
[ 4] 00000097 00000000
GET_PRIVATE 0
02291F64 0096116C
[ 6] 00000090 00000008
INDEX 8
02291F64 00961174
[ 8] 00000016
PTR
02291F64 0000008C
[ 9] 00000047
LETNP
[ 10] 000000FF 00300016
------ lvlToPng.prg:22 -> nfilas = [lvlMap].filas;
[ 12] 00000092 00000008
PRIVATE 8
02291F68
[ 14] 00000097 00000000
GET_PRIVATE 0
02291F68 0096116C
[ 16] 00000090 00000004
INDEX 4
02291F68 00961170
[ 18] 00000016
PTR
02291F68 00000014
[ 19] 00000047
LETNP
[ 20] 000000FF 00300017
------ lvlToPng.prg:23 -> sizetile = 16;
[ 22] 00000092 0000000C
PRIVATE 12
02291F6C
[ 24] 00000084 00000010
PUSH 16
02291F6C 00000010
[ 26] 00000047
LETNP
[ 27] 000000FF 00300019
------ lvlToPng.prg:25 -> file=load_fpg([lvlMap].fpg);
[ 29] 00000093 00000040
LOCAL 64
058C40B0
[ 31] 00000097 00000000
GET_PRIVATE 0
058C40B0 0096116C
[ 33] 00000390 00000020 STRING
INDEX 32
058C40B0 0096118C
[ 35] 00000316 STRING
PTR
058C40B0 00000043
[ 36] 0000008A 000000B3
SYSCALL LOAD_FPG (179)
C:\Users\Paco\Ubuntu One\Bennu\Pruebas\MotorTiles\Keoh>bgdc -g prueba.prg
agrega un say de esto lvlMap y luego otro say de esto [lvlMap].fpg
antes del load_fpg
podes correrlo sin debug.
Splinter cuando llamas a la función 'sysproc_init' tanto en el compilador como interprete que haces realmente ? Estas creando algun objeto o que ? Porque esa funcion esta vacia pero veo que en el momento que se llama se crea la ventana SDL_app.
esa funcion no esta vacia, es una de las funciones mas importantes... se encarga de cargar todos los modulos e inicializarlos, por eso, se crea la ventana del juego (si incluis el modulo de video).
Me puedes explicar un poco como funciona o de que funciones tira cuando se ejecuta, porque igual necesito pasar toda esa parte a C# y no se por donde cojer las orejas del gato, ya que usandola directamente tengo un problema de intento de escritura en memoria protegida.
Es que me siento un inutil lamer programando la verdad....
Tu dices que la función no esta vacia, pero yo miro el código en el fichero systub.c y sólo veo esto:
void sysproc_init( void )
{
}
O sea, ni con lupa veo nada ahí xD
eso en el compilador, en el interprete tenes que mirar los fuentes de la bgdrtm...
Tienes razon, ha sido un problema al buscar con el notepad++, no he dado con la linea donde estaba la funcion en el interprete.
Una pregunta, la funcion esa se incluye directamente en el EXE del interprete o esta en la DLL
libbgdrtm.dll ?
Porque yo estaba usando la incluida en libgdrtm.dll, y si esta en el EXE no me queda otra que pasarla toda a C#
esta en la dll...
como es el asunto? las dlls no las pasas?
La idea es pasar solo lo minimo, de momento no paso ninguna.
Pues no deberia petar al usarla, la ventana se llega a crear pero peta despues...
Una pregunta, esa funcion utiliza alguna estructura inicializada antes ? Podria petar si la estoy llamando y esta usa estructuras que ya deberian tener valores antes de su llamada. En este caso tendria que pasar la funcion toda a C# ya que no podria pasarle estos valores internamente al llamarla.
sinceramente no se, ni entiendo que estas haciendo...
bennugd no es un ejecutable, es una dll, bennugd es el bgdrtm.dll.
si no necesitas pasar ninguna dll, entonces no tenes mucho que hacer, solo llamar a la bgdrtm como lo hace el bgdi.c
disculpa, pero no entiendo que estas haciendo.
Es eso que estoy haciendo, pero mi bgdi esta en c# y llama a modulos c++ de Bennu.
De momento es que chute, despues es cambiar la funcion de carga de modulos para que cargue tambien modulos de c#, pero en eso ya no tendré problemas. Lo que pasa es que no puedo debuggear modulos importados en otro lenguaje ajeno a .net, con lo cual la información de errores al usarlos es minima
Bueno, sólo para tu información, te puedo dar una explicación logica de porque no puedo usar la función de C en C# en este caso en particular.
Porque antes usas la funcion 'dcb_load' la que rellena la estrucuctura dcb que se guarda en memoria en tu aplicación C, la cual es despues de nuevo usada en 'sysproc_init', pues en C# tengo esta limitación, que no puedo acceder a la estrucutra dcb ya rellena en dcb_load, porque es interna a tu modulo, con lo cual all llamar sysproc_init esta estrucutra va tener valores null, por eso peta.
Es una limitación, si una funcion de un modulo externo rellena variables internas, estas como es lógico no se podran acceder externamente. Con lo cual no me queda otra que pasar ambas funciones a C# y rellenar mi propria estrucuctura dcb creada en C#
estas confundido...
el ejecutable no llena ningun dcb, el dcb se llena en la bgdrtm, lo que pasa es que seguiste el fuente y no te fijaste como estaba organizado a nivel binario... y ahi esta tu problema...
el bgdi no hace nada, es una cascara que llama a las funciones de la dll... solo recoge los parametros y se los pasa a la dll.
el problema es que si pasas a C# las cosas, tenes que pasar todo, no le veo la gracia que tengas el bgdi en C# y el resto en dll C.
sino vas a tener que hacer algo para pasarme un area de memoria de un lenguaje a otro, pero me parece que te vas a complicar mucho.
Veo que no me has entendido.... Me da igual donde se llene en tu codigo C, tu tendrás siempre la estructura en memoria, y yo sencillamente no podré tenerla porque la operacion se hace en tu dll....
Enfin, que tampoco importa, ya me he currado esa parte en C# y ahora mismo ya estoy leyendo el dcb en C# y guardando los valores en la estructura...
yo si te he entendido bien...
el dcb debe ser cargado en memoria del bgdrtm, porque sino el interprete no podra accederla, a menos que la hagas visible.
@Splinter ¿Hay alguna razón práctica para que las SDL de mac se incluyan como <SDL/SDL.h> en lugar de SDL.h?
Es que me obligan a hacer alguna chapucilla con los proyectos de Xcode para iOS y todavía no me he cruzado con nada donde haga falta. sdl-config en OSX me devuelve:
imac:monolithic joseba$ sdl-config --cflags
-I/opt/local/include/SDL -D_GNU_SOURCE=1 -D_THREAD_SAFE
Perdón por repostear, pero es que trabajando un poco en el port a iOS me he dado cuenta que modules/librender/scaler_scale_2x.c (que entiendo que es GPL) tiene la cabecera zlib, lo cual técnicamente está feo...
no hace falta recordarlo, esta en la lista de pendientes para reemplazo o eliminacion de los modos escalados, por culpa de la licencia.
si, la razon es que en algun momento se requeria que se incluya asi...
pero ahora mismo no deberias tener problema con los nuevos configures, si tenes todos los productos apropiadamente instalados.
Quote from: SplinterGU on April 04, 2012, 04:42:35 AM
si, la razon es que en algun momento se requeria que se incluya asi...
pero ahora mismo no deberias tener problema con los nuevos configures, si tenes todos los productos apropiadamente instalados.
Es que para iOS es un lío compilar con configures y uso el IDE...
Quote from: SplinterGU on April 04, 2012, 04:41:22 AM
no hace falta recordarlo, esta en la lista de pendientes para reemplazo o eliminacion de los modos escalados, por culpa de la licencia.
Aunque tampoco es estrictamente necesario quitarlo: yo lo he metido dentro de un
#ifdef WITH_GPL_CODE
Y por defecto no compilo ese código en iOS, pero sí en Android.
Lo único que si el código se compila con ese código quedará licenciado bajo la GPL y por tanto no se podrá mezclar con librerías propietarias (en mi código).
En el caso del código oficial, de hecho, yo diría que sólo quedaría bajo GPL una parte de los módulos de Bennu...
Es una complicación adicional, pero otras librerías como ffmpeg lo hacen y no pasa nada.
Quote from: josebita on April 04, 2012, 07:40:28 AM
Quote from: SplinterGU on April 04, 2012, 04:42:35 AM
si, la razon es que en algun momento se requeria que se incluya asi...
pero ahora mismo no deberias tener problema con los nuevos configures, si tenes todos los productos apropiadamente instalados.
Es que para iOS es un lío compilar con configures y uso el IDE...
ahora el configure esta limpio, y no puedo incluir paths que no salgan del pkgconfig, porque sino luego tengo problemas con los ports.
si iOS tiene un cross, cosa que imagino, no creo sea lio que te lo configures adecuadamente para usarlo con los configure... sino te tocara tener unos makefile.ios, que no cambiaran, salvo rara vez.
Quote from: SplinterGU on April 04, 2012, 10:38:50 AM
ahora el configure esta limpio, y no puedo incluir paths que no salgan del pkgconfig, porque sino luego tengo problemas con los ports.
si iOS tiene un cross, cosa que imagino, no creo sea lio que te lo configures adecuadamente para usarlo con los configure... sino te tocara tener unos makefile.ios, que no cambiaran, salvo rara vez.
Si a eso me refiero, a que dejes la parte de cabecera de SDL para Mac (e iOS) igual que el resto de sistemas:
#include <SDL.h>
en lugar de:
#ifdef TARGET_MAC
#include <SDL/SDL.h>
#else
#include <SDL.h>
#endif
Ya que esta segunda opción ni siquiera funciona por defecto usando una configuración estándar.
En todo caso, los scripts de configure no funcionan tal cual están en OSX: hay que parchearlos un poco así que tampoco debería suponer ningún problema.
ah, si, si, claro... te habia entendido que decias que cambie SDL.h por SDL/SDL.h.
si, claro, puedo cambiarlo.
Igual no me he expresado bien. Mil gracias :)
ya esta joseba, fixeado!
gracias!
Quote from: josebita on April 04, 2012, 09:49:55 PM
Igual no me he expresado bien. Mil gracias :)
no, tu lo has dicho bien, yo me confundi... gracias.
Quote from: SplinterGU on April 04, 2012, 09:52:14 PM
ya esta joseba, fixeado!
gracias!
Ya lo veo, actualizando...
Quote from: Phreak on August 01, 2008, 01:14:40 AM
El IDE va encaminado, pero le falta mucho...
Si hay alguien interesado en ayudar muyy bienvenido sea...
El codigo esta muy prolijo y comentado, no creo que sea dificil de entender.
Cualquier cosa mi mail: gal_head@hotmail.com
Saludos
Black Pearl IDESigue vivo ? Alguien tiene el ultimo src ? Phreak no da señales de vida...
bien, quiero comentar que estoy trabajando en una version monolitica oficial, que los fuentes necesarios, asi como los makefiles se generaran por medio de scripts, asi no es necesario tener headers adicionales, ni codigo duplicado en los headers, ni tener que tocar los fuentes de la version oficial modular, solo se agregaran un par de funciones nuevas, muy pocas, creo que alrededor de 5. y simplemente con agregar un modulo nuevo a el makefile.am de modules, ya se lo incorporara a la version monolitica.
pero me surgen algunas preguntas (para joseba o quien quiera colaborar y conozca el sistema monolitico) con respecto a la actual version monolitica, mas que nada curiosidad y quizas ver si se puede aprovechar algo de lo que ya esta hecho, empiezo a tirar:
- en la version monolitica se incluyen todas las librerias/funciones sin importar lo que se defina por medio de "import" o archivos ".imp", cierto?
- los dcb compilados en la version monolitica, sirven para la version modular? y a la inversa?
- vi que no se hacen las inicializaciones desde el codigo de las librerias, sino que esta todo hardcode donde se "cargan" los modulos, y esto me parece que es por el tema de las dependencias.
creo que son esas preguntas por ahora.
Quote from: SplinterGU on April 18, 2012, 04:53:19 AM
bien, quiero comentar que estoy trabajando en una version monolitica oficial, que los fuentes necesarios, asi como los makefiles se generaran por medio de scripts, asi no es necesario tener headers adicionales, ni codigo duplicado en los headers, ni tener que tocar los fuentes de la version oficial modular, solo se agregaran un par de funciones nuevas, muy pocas, creo que alrededor de 5. y simplemente con agregar un modulo nuevo a el makefile.am de modules, ya se lo incorporara a la version monolitica.
pero me surgen algunas preguntas (para joseba o quien quiera colaborar y conozca el sistema monolitico) con respecto a la actual version monolitica, mas que nada curiosidad y quizas ver si se puede aprovechar algo de lo que ya esta hecho, empiezo a tirar:
- en la version monolitica se incluyen todas las librerias/funciones sin importar lo que se defina por medio de "import" o archivos ".imp", cierto?
- los dcb compilados en la version monolitica, sirven para la version modular? y a la inversa?
- vi que no se hacen las inicializaciones desde el codigo de las librerias, sino que esta todo hardcode donde se "cargan" los modulos, y esto me parece que es por el tema de las dependencias.
creo que son esas preguntas por ahora.
¡Genial!. En cuanto esté lista, cambio mis ports a la versión oficial y me ahorro trabajo :)
Resecto a las preguntas:
* En el binario que distribuyo van todas las librerías oficiales y algunas no oficiales (mod_chipmunk, mod_curl y alguna más), sí.
* Los DCBs son completamente compatibles entre mi fork de bennu y la versión oficial, siempre que no se importe alguna librería que no esté disponible en la versión monolítica, claro.
* La tercera cuestión no la acabo de entender... Las inicializaciones se siguen haciendo desde las propias librerías:
http://code.google.com/p/bennugd-monolithic/source/browse/trunk/modules/libsdlhandler/libsdlhandler.c#56
Cuando lo tengas medio-tirando, dímelo e intentamos rehacer el port a la Wii con el código monolítico oficial :)
ya veo que estaba viendo una version monolitica vieja...
en fin, actualizare y vere nuevamente.
ya veo la ultima version, es bastante parecido a lo que estoy haciendo... pero estoy usando menos estructuras...
cuidado con esto
#include <mod_math_symbols.h>
#ifndef NO_MODMATHI
# include <mod_mathi_symbols.h>
#endif
si usas modmathi, no deberias usar modmath... no pueden convivir juntas.
Quote from: SplinterGU on April 18, 2012, 01:42:13 PM
ya veo la ultima version, es bastante parecido a lo que estoy haciendo... pero estoy usando menos estructuras...
cuidado con esto
#include <mod_math_symbols.h>
#ifndef NO_MODMATHI
# include <mod_mathi_symbols.h>
#endif
si usas modmathi, no deberias usar modmath... no pueden convivir juntas.
ya, casi seguro que tengo cuidado con eso en los defines de los proyectos de compilación.
no, ahi no esta cuidado, deberia ser...
#ifdef NO_MODMATHI
# include <mod_math_symbols.h>
#else
# include <mod_mathi_symbols.h>
#endif
o algo similar metido en un #if/#else/#endif... no pueden compilarse juntas en la version monolitica, porque ambas exportan las mismas funciones, con los mismos parametros, aunque cambian el tipo, por la conversion automatica, estos tipos entran en conflicto (llegado el caso que habilites el MATHI)
Esto quiere decir que algunas de las versiones no oficiales monoliticas, pasaran a ser oficiales??
posiblemente, con trabajo o con ayuda para meter los cambios necesarios.
bennu seguira conquistando el mundo, y ahora de manera oficial! :D
Quote from: SplinterGU on April 18, 2012, 08:58:28 PM
no, ahi no esta cuidado, deberia ser...
#ifdef NO_MODMATHI
# include <mod_math_symbols.h>
#else
# include <mod_mathi_symbols.h>
#endif
o algo similar metido en un #if/#else/#endif... no pueden compilarse juntas en la version monolitica, porque ambas exportan las mismas funciones, con los mismos parametros, aunque cambian el tipo, por la conversion automatica, estos tipos entran en conflicto (llegado el caso que habilites el MATHI)
Tienes toda la razón del mundo, arreglado :)
Quote from: Rein (K´)ah Al-Ghul on April 19, 2012, 01:37:25 AM
Esto quiere decir que algunas de las versiones no oficiales monoliticas, pasaran a ser oficiales??
Y las que no se incluyan podrán pasar de ser un proyecto por su cuenta a un conjunto de parches con unas decenas de líneas de código.
seguramente sea la 2da opcion que menciona josebita... la idea es simplificar un poco la generacion de la version monolitica de forma oficial.
Una pregunta ahora q se comenta sobre eso. Tengo una duda. Las librerias que hagamos tienen que estar hechas SOLO en C?? O pueden ser en C++, pero tenemos que hacer el mod y "apantallar" el C++ para q se use como C. No se si me explico xDDD
bueno, ya tengo generada una version monolitica de 577kb
splinter@splinter-portatil:~/bennugd> ls -la bgdi-monolith
-rwxr-xr-x 1 splinter users 590816 Apr 20 01:02 bgdi-monolith
funciona a la perfeccion (testee con un dcb hecho con una version normal del bgdc)
al final los cambios se limitaron a una version modificada de la loadlib.h y un nuevo archivo .h que se genera con un shell script.
creo que solo hare la version monolitica del bgdi, para compilar, habra que usar una version de pc o alguna que tenga bgdc.
quedan pendiente generar los binarios por medio de makefiles, actualmente estoy usando un shell script (a modo de test), pero quiero ver la posiblidad de usar un makefile, y si es posible con configure y demas.
Quote from: SplinterGU on April 20, 2012, 04:30:12 AM
bueno, ya tengo generada una version monolitica de 577kb
splinter@splinter-portatil:~/bennugd> ls -la bgdi-monolith
-rwxr-xr-x 1 splinter users 590816 Apr 20 01:02 bgdi-monolith
funciona a la perfeccion (testee con un dcb hecho con una version normal del bgdc)
al final los cambios se limitaron a una version modificada de la loadlib.h y un nuevo archivo .h que se genera con un shell script.
creo que solo hare la version monolitica del bgdi, para compilar, habra que usar una version de pc o alguna que tenga bgdc.
quedan pendiente generar los binarios por medio de makefiles, actualmente estoy usando un shell script (a modo de test), pero quiero ver la posiblidad de usar un makefile, y si es posible con configure y demas.
genial, me gustaría hacer un par de sugerencias:
Hasta que no estén solucionados los bugs de endianess y similares, hará falta un bgdc monolítico para arquitecturas con endianess distinto del de x86 o los dcbs no funcionarán en Wii y similares.
Y no estaría mal que no tiraras ese script, que para iOS compilo con un IDE y no con autotools, así que me vendrán bien para que la gente pueda compilar directamente desde el IDE sin necesidad de ejecutar las autotools a mano antes.
no hay problemas con generar tambien el bgdc...
el script no lo tiraria, seguramente no genere autotools, sino que el script cumpla la funcion de autotools... no se, aun tengo que estudiarlo un poco mas para darle la vuelta ideal.
pero los scripts no son fijos, son dimanicos... o sea, que segun lo que tengas en tus carpetas del proyecto se generan los scripts de compilacion y los archivos faltantes... digamos que el script es una suerte de preprocesador.
Buenas gente.
Sony ha sacado una Suite que sirve para desarrollar para Psvita Y Android,y publicar en la Playstation Store,de momento esta en la fase de beta abierta,mas adelante se tendra que pagar 99$ al año.
No se si serviria para un futuro ¿port de bennu?,Bueno yo voi a descargarlo a ver como es,Aqui os dejo el enlace de la noticia.
Saludos!
http://www.elotrolado.net/noticia_disponible-en-beta-abierta-el-sdk-de-playstation-suite_20501 (http://www.elotrolado.net/noticia_disponible-en-beta-abierta-el-sdk-de-playstation-suite_20501)
gracias goku jr.
De nada ;) incluso lei en loa foros de elotrolado,que alguien esta portando un emulador de nes con exito,y tambien e visto en youtube un juego de android rulando en la vita.
Enviado desde mi HTC Desire HD A9191 usando Tapatalk
bueno, tengo el bgdi ya que se genera staticamente... pero me surge un serio problema para generar el bgdc... por problema de simbolos/funciones repetidas... ya estaba probando con un parser de C que me estaba armando, pero es una locura.
asi que tendre que tirar todo, y reescribir todos los modulos con una nueva filosofia, similar a la que tiene joseba en su version monolitica, donde requerira que los simbolos de exportacion esten en headers especiales, los simbolos y los #defines y enum que usen dichas estructuras (solo por constants_def)... pero igualmente manteniendo una parte dinamica, para no tener que tanto el bgdc como el bgdi tomen dinamicamente los modulos a incorporar y no tener que estar generando codigo especial para eso.
otro cambio que inclui, es que ahora los modulos pueden llamarse mod_X o libmod_X, se generaran a partir de ahora como libmod_X, pero podran tambien usarse la vieja nomemclatura... a nivel codigo bennugd, no cambia nada... se sigue necesitando usar import "mod_X".
pero q vas a reescribir todo? xD hazlo ya en c++ xDDDDD
desde cero no... reescribir quiero decir que tendre que tocar todos los modulos y reestructurarlos...
ni loco uso C++...
odio toda la filosofia de objetos, herencias y demas, ni hablar de la carga extra del C++...
los verdaderos hombres trabajan en C y usan el vi... :)
Quote from: SplinterGU on May 01, 2012, 01:57:26 PM
odio toda la filosofia de objetos, herencias y demas, ni hablar de la carga extra del C++...
los verdaderos hombres trabajan en C y usan el vi... :)
jajaja tu cuando eras chico en el colegio escribías en ensamblador o q? xD y la profesora te suspendio por decir q 1 + 1 = 10
Quote from: SplinterGU on May 01, 2012, 01:57:26 PM
odio toda la filosofia de objetos, herencias y demas, ni hablar de la carga extra del C++...
los verdaderos hombres trabajan en C y usan el vi... :)
Nunca voy a estar de acuerdo con vos en esto. Realmente no entiendo porque pensas asi.
Mi opinion es que los objetos permiten escribir código mucho mas facil de extender y mantener. Es lo que mas extraño en Bennu. Odio tener que estar repitiendo codigo todo el tiempo.
Quote from: JaViS on May 02, 2012, 01:01:30 AM
Quote from: SplinterGU on May 01, 2012, 01:57:26 PM
odio toda la filosofia de objetos, herencias y demas, ni hablar de la carga extra del C++...
los verdaderos hombres trabajan en C y usan el vi... :)
Nunca voy a estar de acuerdo con vos en esto. Realmente no entiendo porque pensas asi.
Mi opinion es que los objetos permiten escribir código mucho mas facil de extender y mantener. Es lo que mas extraño en Bennu. Odio tener que estar repitiendo codigo todo el tiempo.
No era que los verdaderos hombres escribian sus propios controladores de disco?? :P
A fin de cuentas el compilador transforma todo a procedural, en codigo maquina no existen los objetos...
Me pregunto cuanta diferencia de performance entre una aplicacion que haga lo mismo en C y una en C++ (con objetos claro)
despues de todo es cuestion de gustos...
Quote from: KeoH on May 02, 2012, 12:20:19 AM
Quote from: SplinterGU on May 01, 2012, 01:57:26 PM
odio toda la filosofia de objetos, herencias y demas, ni hablar de la carga extra del C++...
los verdaderos hombres trabajan en C y usan el vi... :)
jajaja tu cuando eras chico en el colegio escribías en ensamblador o q? xD y la profesora te suspendio por decir q 1 + 1 = 10
si programaba en ensamblador y mis profesores de computacion me miraban como un guro, recuerdo una vez que mi profesora de matematicas me decia que no se podia hacer un programa que graficara una funcion matematica escrita por un input... y yo le discutia que si, hasta que le dije, si lo hago me pone un diez... resultado, me saque un diez.
despues esa misma profesora me hizo llevar estadisticas por no tener la carpeta completa, y en los examenes de diciembre (aca cuando no aprobas una materia tenes 2 oportunidades de salvar, una es en diciembre y otra en marzo, esto es cuando terminan las clases y antes de empezar... por lo menos asi era antes) me aprobo la materia con 10. cosa imposible cuando te llevas una materia, pero se notaba que me queria molestar y hacerme ir los dias que ya no va nadie.
yo era de tener muchos diez, porque no iba a clases ni hacia trabajos practicos ni examenes (solo entregaba algun juego o algun algoritmo que hacia en la escuela, para demostrar todo lo que sabia), como ya conte mas de una vez, me la pasaba en el laboratorio... y entonces los profesores (de materias referentes a computacion) por lo general, me aprobaban con el basico para aprobar, que era un 7, quizas alguno que otro me ponia mas nota.
demas esta decir, que para los profesores era un alivio no tenerme en clases, ya que me la pasaba criticandolos, y cuestionandoles todo, y en algunos casos los ponia en aprietos o les demostraba que estaban equivocados, ya era un cabroncete troll de chico.
Quote from: JaViS on May 02, 2012, 01:01:30 AM
Quote from: SplinterGU on May 01, 2012, 01:57:26 PM
odio toda la filosofia de objetos, herencias y demas, ni hablar de la carga extra del C++...
los verdaderos hombres trabajan en C y usan el vi... :)
Nunca voy a estar de acuerdo con vos en esto. Realmente no entiendo porque pensas asi.
Mi opinion es que los objetos permiten escribir código mucho mas facil de extender y mantener. Es lo que mas extraño en Bennu. Odio tener que estar repitiendo codigo todo el tiempo.
es que no necesitas repetir el codigo, puedes usar defines o funciones... ademas, yo no diseñe bennugd, bennugd es derivado de fenix, fenix es derivado de div, el lenguaje esta diseñado asi, sin objetos.
Quote from: Rein (K´)ah Al-Ghul on May 02, 2012, 01:28:32 AM
Quote from: JaViS on May 02, 2012, 01:01:30 AM
Quote from: SplinterGU on May 01, 2012, 01:57:26 PM
odio toda la filosofia de objetos, herencias y demas, ni hablar de la carga extra del C++...
los verdaderos hombres trabajan en C y usan el vi... :)
Nunca voy a estar de acuerdo con vos en esto. Realmente no entiendo porque pensas asi.
Mi opinion es que los objetos permiten escribir código mucho mas facil de extender y mantener. Es lo que mas extraño en Bennu. Odio tener que estar repitiendo codigo todo el tiempo.
No era que los verdaderos hombres escribian sus propios controladores de disco?? :P
A fin de cuentas el compilador transforma todo a procedural, en codigo maquina no existen los objetos...
Me pregunto cuanta diferencia de performance entre una aplicacion que haga lo mismo en C y una en C++ (con objetos claro)
despues de todo es cuestion de gustos...
es que no me gusta no tener el control de lo que se hace... por lo menos no saber lo que hay debajo o que se hagan cosas que yo no quiero porque el lenguaje es asi...
Quote
es que no necesitas repetir el codigo, puedes usar defines o funciones... ademas, yo no diseñe bennugd, bennugd es derivado de fenix, fenix es derivado de div, el lenguaje esta diseñado asi, sin objetos.
Pos.... tal vez ya llego la hora de descartar el pasado Div y hacer tu propio lenguaje de programación ;D ;D ;D ;D ;D
Quote from: Transdiv on May 02, 2012, 08:19:12 AM
Quote
es que no necesitas repetir el codigo, puedes usar defines o funciones... ademas, yo no diseñe bennugd, bennugd es derivado de fenix, fenix es derivado de div, el lenguaje esta diseñado asi, sin objetos.
Pos.... tal vez ya llego la hora de descartar el pasado Div y hacer tu propio lenguaje de programación ;D ;D ;D ;D ;D
Apoyo la idea .. carguemonos la retrocompatibilidad si es necesario xD. La verdad esque yo echo de menos en Bennu algo de herencia y ¿polimorfismo? (era polimorfismo? xD )
Metele metodos a los procesos Splinter xD q ya son algo parecido a los objetos xD
Yo creo q para q Spliner haga algo con objetos hay q decirle "A que no tienes webos de .... " xDD
Quote from: KeoH on May 02, 2012, 09:26:13 AM
Yo creo q para q Spliner haga algo con objetos hay q decirle "A que no tienes webos de .... " xDD
si piensas eso, vas por mal camino, yo odio las competencias y los desafios... si alguien intenta de esa forma obtener algo de mi, va muerto, va a lograr todo lo contrario.
Quote from: SplinterGU on May 02, 2012, 12:32:04 PM
Quote from: KeoH on May 02, 2012, 09:26:13 AM
Yo creo q para q Spliner haga algo con objetos hay q decirle "A que no tienes webos de .... " xDD
si piensas eso, vas por mal camino, yo odio las competencias y los desafios... si alguien intenta de esa forma obtener algo de mi, va muerto, va a lograr todo lo contrario.
Totalmente,
yo creo que para tener un Bennu o un DivLike orientado a objetos hay que arremangarse y hacerlo. Yo tengo una idea de posible SINTAXIS que es compatible con la actual. Es decir, que los juegos no OOP serían compatibles con el nuevo compilador. El tema es que no se nada de nada como para hacerlo, pero la idea esta XD
realmente seria el compilador, el codigo dcb y el interprete deberian mantenerse como estan.
pero de hacer esto nuevo, deberia reescribir el compilador usando herramientas para eso, como lex y yacc.
bueno, yo pienso que si se puede hacer a bennu aun mejor y mas potente debería intentarse, aunque yo lo único que puedo hacer es apoyo moral xD
yo ya voy a escribir por aca lo q tengo en mente para la sintaxis asi discutimos si es posible :D
Quote from: JaViS on May 02, 2012, 06:52:10 PM
yo ya voy a escribir por aca lo q tengo en mente para la sintaxis asi discutimos si es posible :D
ponlo en sugerencias ahí :)
Quote from: SplinterGU on May 02, 2012, 02:45:14 PM
realmente seria el compilador, el codigo dcb y el interprete deberian mantenerse como estan.
pero de hacer esto nuevo, deberia reescribir el compilador usando herramientas para eso, como lex y yacc.
supongamos que el compilador existe
el nuevo compilador, crearia dcb compatibles con el viejo interprete, verdad??
es decir el nuevo compilador y el viejo generarian dcb que puedan ser ejecutados por el mismo interprete... ?
seria como una rama nueva de bennugd...
deberian generar el mismo dcb...
hace tiempo que tengo en mente realizar un nuevo compilador.
Finalmente me hice un tiempito para escribir lo que tenia en mente:
http://forum.bennugd.org/index.php?topic=3068.0 (http://forum.bennugd.org/index.php?topic=3068.0)
por dios... estoy desde hoy con los cambios de la version estatica (monolitica) y hace horas que no paro de escribir, y no termino mas, cuanto mas escribo mas me falta... ya me hice 24 modulos/libs, me faltan 25... puf, no termino mas...
al final, tuve que usar algo similar a lo que hizo joseba, porque de otra forma se hacia complejo generar el bgdc... pero igual tendra una parte que se generar en momento de compilacion.
Quote from: SplinterGU on May 05, 2012, 02:55:49 AM
por dios... estoy desde hoy con los cambios de la version estatica (monolitica) y hace horas que no paro de escribir, y no termino mas, cuanto mas escribo mas me falta... ya me hice 24 modulos/libs, me faltan 25... puf, no termino mas...
al final, tuve que usar algo similar a lo que hizo joseba, porque de otra forma se hacia complejo generar el bgdc... pero igual tendra una parte que se generar en momento de compilacion.
tomatelo con calma Splinter
Trabajas como una rata :P
:P
jeje
Quote from: SplinterGU on May 05, 2012, 02:55:49 AM
por dios... estoy desde hoy con los cambios de la version estatica (monolitica) y hace horas que no paro de escribir, y no termino mas, cuanto mas escribo mas me falta... ya me hice 24 modulos/libs, me faltan 25... puf, no termino mas...
al final, tuve que usar algo similar a lo que hizo joseba, porque de otra forma se hacia complejo generar el bgdc... pero igual tendra una parte que se generar en momento de compilacion.
jeje. Yo cuando me puse con la arquitectura actual (la tercera iteración de la arquitectura monolítica de mi rama) y una vez tenía la idea de cómo lo quería hacer me puse en modo automático dos o tres tardes enteras sin parar :)
En cuanto lo tengas avisa y me pongo con mis ports.
jajaja, me faltan 5 modulos... calculo que habre estado 5 horas tocando modulos y despues tengo que cambiar los scripts de compilacion...
ya tengo el engendro funcionando...
voy a revisarlo un poco mas... emprolijarlo otro poco... y hacer el commit pertinente.
subiendo version statica (monolitica)...
me queda pendiente modificar los scripts de generacion de cross, pero quiero hacerlo de forma prolija usando el script de build, asi no tener que tocar todos los scripts cada vez.
la compilacion estatica se hace con un script llamado build-static.sh, que genera los archivos necesarios y luego corre el configure y el make, aunque en un orden diferente a la compilacion de la version modular.
Genial!
Mañana le echo un ojo.
Animo con ese código .. y descansa la vista de vez en cuando xD
Splinter, probé el script de compilación estática en Mac y no va. No fui capaz de arreglarlo en el rato que estuve intentándolo. El problema viene de que los scripts están escritos para las binutils GNU y Mac usa las BSD (que son peores).
Intentaré parchear el script para que vaya con las binutils BSD pero dado que las de GNU también se pueden instalar en Mac si se me complica demasiado, pues tiro con esas.
Sólo por dar un poco de feedback :)
Voy a probar en Ubuntu, a ver qué tal.
[Edito] En Ubuntu 12.04 se genera el fichero de cabecera pero yo diría que se genera mal:
Quote/*
*
* include/fake_dl.h generated by bgd-monolith.sh
*
* Copyright © 2006-2012 SplinterGU (Fenix/Bennugd)
*
* This file is part of Bennu - Game Development
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*
*/
#ifndef __FAKE_DL_H
-e #define __FAKE_DL_H
-e #include <bgddl.h>
[...]
#ifndef __BGDC__
-e /* ---------- globals_fixup ---------- */
[...]
-e /* ---------- locals_fixup ---------- */
[...]
-e /* ---------- functions_exports ---------- */
[...]
-e /* ---------- module_initialize ---------- */
[...]
-e /* ---------- module_finalize ---------- */
[...]
-e /* ---------- instance_create_hook ---------- */
extern void librender_instance_create_hook( INSTANCE * );
-e /* ---------- instance_destroy_hook ---------- */
extern void librender_instance_destroy_hook( INSTANCE * );
-e /* ---------- instance_pre_execute_hook ---------- */
-e /* ---------- instance_pos_execute_hook ---------- */
-e /* ---------- process_exec_hook ---------- */
[...]
-e /* ---------- handler_hooks ---------- */
[...]
-e /* ---------- modules_dependency ---------- */
[...]
Sobran todos los "-e", claro, pero ni idea de por qué "echo -e" desde la consola me va bien y desde el script no...
en la consola usas bash o sh o algun otro?
por otro lado, muestra que errores te da... gracias por el feedback.
edit: igual quitare todos los -e, para hacerlo mas generico.
Quote from: SplinterGU on May 07, 2012, 10:43:53 PM
en la consola usas bash o sh o algun otro?
por otro lado, muestra que errores te da... gracias por el feedback.
edit: igual quitare todos los -e, para hacerlo mas generico.
En la consola uso bash tanto en Ubuntu como en Mac.
No te he puesto el error del Mac porque lo tengo en la habitación y está mi novia durmiendo y no quisiera molestar pero yo si no recuerdo mal era un error en la línea que dice:
SCOPE=$(tail -n $(expr $(wc -l $MODULES_PATH/Makefile.am|cut -f1 -d\ ) - $(grep -n SUBDIRS $MODULES_PATH/Makefile.am | cut -f1 -d: )) $MODULES_PATH/Makefile.am | sed 's/\\//g' | grep -v mathi)
en make-fakedl.sh.
A ver si investigo un poco más y te puedo dar algún dato más concreto. Ya te digo que esta manía de Apple de usar las binutils de BSD es un tanto molesta a veces.
PD: Ahora que lo veo, ¿por qué en el primer cut no pones?
cut -f1 -d " "
En lugar de:
cut -f1 -d\
¿No es más sencillo?. Es sólo un comentario sin poder probarlo en el Mac, pero me huelo que igual viene de ahí el problema....
proba ahora...
Quote from: josebita on May 08, 2012, 12:02:59 AM
No te he puesto el error del Mac porque lo tengo en la habitación y está mi novia durmiendo y no quisiera molestar
Ah, pero que tenes un leon de novia? XD
Quote from: SplinterGU on May 08, 2012, 02:00:54 AM
proba ahora...
Mejor: la cabecera parece generarse correctamente (Ubuntu).
Lo que estoy viendo es que el script del configure no me detecta correctamente la arquitectura (creo).
Me dice:
QuoteYour machine: x86_64 linux-gnu
De forma que no cabe en ninguna de las arquitecturas predefinidas en el configure.in (¿no?). Quizás habría que cambiar la línea 37 por algo como:
i*86|x86_64)
Parece ir mejor aunque me sigue dando problemas de dependencias con la libcrypto de 32 bits, pero eso ya es cosa de mi instalación.
Quote from: JaViS on May 08, 2012, 12:29:14 PM
Quote from: josebita on May 08, 2012, 12:02:59 AM
No te he puesto el error del Mac porque lo tengo en la habitación y está mi novia durmiendo y no quisiera molestar
Ah, pero que tenes un leon de novia? XD
Más o menos, sí... :P
Quote from: JaViS on May 08, 2012, 12:29:14 PM
Quote from: josebita on May 08, 2012, 12:02:59 AM
No te he puesto el error del Mac porque lo tengo en la habitación y está mi novia durmiendo y no quisiera molestar
Ah, pero que tenes un leon de novia? XD
jojojojo...
Quote from: josebita on May 08, 2012, 01:59:02 PM
Quote from: SplinterGU on May 08, 2012, 02:00:54 AM
proba ahora...
Mejor: la cabecera parece generarse correctamente (Ubuntu).
Lo que estoy viendo es que el script del configure no me detecta correctamente la arquitectura (creo).
Me dice:
QuoteYour machine: x86_64 linux-gnu
De forma que no cabe en ninguna de las arquitecturas predefinidas en el configure.in (¿no?). Quizás habría que cambiar la línea 37 por algo como:
i*86|x86_64)
Parece ir mejor aunque me sigue dando problemas de dependencias con la libcrypto de 32 bits, pero eso ya es cosa de mi instalación.Quote from: JaViS on May 08, 2012, 12:29:14 PM
Quote from: josebita on May 08, 2012, 12:02:59 AM
No te he puesto el error del Mac porque lo tengo en la habitación y está mi novia durmiendo y no quisiera molestar
Ah, pero que tenes un leon de novia? XD
Más o menos, sí... :P
la compilacion no va en 64bits... necesitas un chroot de un ubuntu32... no me digas que tu ppa lo compilas en 64 bits...
aca te paso el fake_dl.h, para que compares como deberia quedar.
Quote from: SplinterGU on May 08, 2012, 03:27:59 PM
Quote from: JaViS on May 08, 2012, 12:29:14 PM
Quote from: josebita on May 08, 2012, 12:02:59 AM
No te he puesto el error del Mac porque lo tengo en la habitación y está mi novia durmiendo y no quisiera molestar
Ah, pero que tenes un leon de novia? XD
jojojojo...
Quote from: josebita on May 08, 2012, 01:59:02 PM
Quote from: SplinterGU on May 08, 2012, 02:00:54 AM
proba ahora...
Mejor: la cabecera parece generarse correctamente (Ubuntu).
Lo que estoy viendo es que el script del configure no me detecta correctamente la arquitectura (creo).
Me dice:
QuoteYour machine: x86_64 linux-gnu
De forma que no cabe en ninguna de las arquitecturas predefinidas en el configure.in (¿no?). Quizás habría que cambiar la línea 37 por algo como:
i*86|x86_64)
Parece ir mejor aunque me sigue dando problemas de dependencias con la libcrypto de 32 bits, pero eso ya es cosa de mi instalación.Quote from: JaViS on May 08, 2012, 12:29:14 PM
Quote from: josebita on May 08, 2012, 12:02:59 AM
No te he puesto el error del Mac porque lo tengo en la habitación y está mi novia durmiendo y no quisiera molestar
Ah, pero que tenes un leon de novia? XD
Más o menos, sí... :P
la compilacion no va en 64bits... necesitas un chroot de un ubuntu32... no me digas que tu ppa lo compilas en 64 bits...
aca te paso el fake_dl.h, para que compares como deberia quedar.
La compilación se hace en los servidores de canonical (launchpad): yo sólo le digo que quiero que sea para i386 (o lo que sea) y launchpad se busca la vida.
[Edit] Intentaré, entonces, compilar nativamente en 32 bits.
por favor, confirmame que genera el fake_dl.h correctamente...
por otro lado, mas alla de 64 o 32 bits, podriamos agregar eso que sugeriste, pero igual no serviria de mucho ya que no soporta 64bits...
por otro lado, no creo que a nadie le interese, me estoy instalando solaris 10 (intel) en una maquina virtual por cuestiones de trabajo, quizas pruebe compilarlo ahi tambien.
Quote from: SplinterGU on May 08, 2012, 04:04:43 PMme estoy instalando solaris 10 (intel) en una maquina virtual por cuestiones de trabajo, quizas pruebe compilarlo ahi tambien.
quizas para montar un servidor en BennuGD para juegos multiplayer :P
Solaris, lengo ganas de probarlo desde hace tiempo, pero aun no domino bien linux...
Pues no, bien no se me crea el fichero (adjunto lo que se me crea a mí en Ubuntu 12.04).
Aquí la salida de la consola de make-fakedl.sh:
e8540@L2ZCVP4J:core$ ./make-fakedl.sh
./make-fakedl.sh: 142: ./make-fakedl.sh: data+=
/* -------------------- libgrbase -------------------- */
__fake_dl[0].dlname = "libgrbase";
#ifdef __BGDC__
__fake_dl[0].constants_def = NULL;
__fake_dl[0].types_def = NULL;
__fake_dl[0].globals_def = &libgrbase_globals_def;
__fake_dl[0].locals_def = NULL;
__fake_dl[0].globals_fixup = NULL;
__fake_dl[0].locals_fixup = NULL;
#else
__fake_dl[0].constants_def = NULL;
__fake_dl[0].types_def = NULL;
__fake_dl[0].globals_def = NULL;
__fake_dl[0].locals_def = NULL;
__fake_dl[0].globals_fixup = libgrbase_globals_fixup;
__fake_dl[0].locals_fixup = NULL;
#endif
__fake_dl[0].functions_exports = NULL;
#ifdef __BGDC__
__fake_dl[0].module_initialize = NULL;
__fake_dl[0].module_finalize = NULL;
__fake_dl[0].instance_create_hook = NULL;
__fake_dl[0].instance_destroy_hook = NULL;
__fake_dl[0].instance_pre_execute_hook = NULL;
__fake_dl[0].instance_pos_execute_hook = NULL;
__fake_dl[0].process_exec_hook = NULL;
__fake_dl[0].handler_hooks = NULL;
#else
__fake_dl[0].module_initialize = libgrbase_module_initialize;
__fake_dl[0].module_finalize = NULL;
__fake_dl[0].instance_create_hook = NULL;
__fake_dl[0].instance_destroy_hook = NULL;
__fake_dl[0].instance_pre_execute_hook = NULL;
__fake_dl[0].instance_pos_execute_hook = NULL;
__fake_dl[0].process_exec_hook = NULL;
__fake_dl[0].handler_hooks = NULL;
#endif
__fake_dl[0].modules_dependency = NULL;
: not found
./make-fakedl.sh: 142: ./make-fakedl.sh: data+=
/* -------------------- libvideo -------------------- */
__fake_dl[127].dlname = "libvideo";
#ifdef __BGDC__
__fake_dl[127].constants_def = libvideo_constants_def;
__fake_dl[127].types_def = NULL;
__fake_dl[127].globals_def = &libvideo_globals_def;
__fake_dl[127].locals_def = NULL;
__fake_dl[127].globals_fixup = NULL;
__fake_dl[127].locals_fixup = NULL;
#else
__fake_dl[127].constants_def = NULL;
__fake_dl[127].types_def = NULL;
__fake_dl[127].globals_def = NULL;
__fake_dl[127].locals_def = NULL;
__fake_dl[127].globals_fixup = libvideo_globals_fixup;
__fake_dl[127].locals_fixup = NULL;
#endif
__fake_dl[127].functions_exports = NULL;
#ifdef __BGDC__
__fake_dl[127].module_initialize = NULL;
__fake_dl[127].module_finalize = NULL;
__fake_dl[127].instance_create_hook = NULL;
__fake_dl[127].instance_destroy_hook = NULL;
__fake_dl[127].instance_pre_execute_hook = NULL;
__fake_dl[127].instance_pos_execute_hook = NULL;
__fake_dl[127].process_exec_hook = NULL;
__fake_dl[127].handler_hooks = NULL;
#else
__fake_dl[127].module_initialize = libvideo_module_initialize;
__fake_dl[127].module_finalize = libvideo_module_finalize;
__fake_dl[127].instance_create_hook = NULL;
__fake_dl[127].instance_destroy_hook = NULL;
__fake_dl[127].instance_pre_execute_hook = NULL;
__fake_dl[127].instance_pos_execute_hook = NULL;
__fake_dl[127].process_exec_hook = NULL;
__fake_dl[127].handler_hooks = NULL;
#endif
__fake_dl[127].modules_dependency = libvideo_modules_dependency;
: not found
./make-fakedl.sh: 142: ./make-fakedl.sh: data+=
/* -------------------- libblit -------------------- */
__fake_dl[127].dlname = "libblit";
#ifdef __BGDC__
__fake_dl[127].constants_def = libblit_constants_def;
__fake_dl[127].types_def = NULL;
__fake_dl[127].globals_def = NULL;
__fake_dl[127].locals_def = NULL;
__fake_dl[127].globals_fixup = NULL;
__fake_dl[127].locals_fixup = NULL;
#else
__fake_dl[127].constants_def = NULL;
__fake_dl[127].types_def = NULL;
__fake_dl[127].globals_def = NULL;
__fake_dl[127].locals_def = NULL;
__fake_dl[127].globals_fixup = NULL;
__fake_dl[127].locals_fixup = NULL;
#endif
__fake_dl[127].functions_exports = NULL;
#ifdef __BGDC__
__fake_dl[127].module_initialize = NULL;
__fake_dl[127].module_finalize = NULL;
__fake_dl[127].instance_create_hook = NULL;
__fake_dl[127].instance_destroy_hook = NULL;
__fake_dl[127].instance_pre_execute_hook = NULL;
__fake_dl[127].instance_pos_execute_hook = NULL;
__fake_dl[127].process_exec_hook = NULL;
__fake_dl[127].handler_hooks = NULL;
#else
__fake_dl[127].module_initialize = NULL;
__fake_dl[127].module_finalize = NULL;
__fake_dl[127].instance_create_hook = NULL;
__fake_dl[127].instance_destroy_hook = NULL;
__fake_dl[127].instance_pre_execute_hook = NULL;
__fake_dl[127].instance_pos_execute_hook = NULL;
__fake_dl[127].process_exec_hook = NULL;
__fake_dl[127].handler_hooks = NULL;
#endif
__fake_dl[127].modules_dependency = NULL;
: not found
./make-fakedl.sh: 142: ./make-fakedl.sh: data+=
/* -------------------- librender -------------------- */
__fake_dl[127].dlname = "librender";
#ifdef __BGDC__
__fake_dl[127].constants_def = librender_constants_def;
__fake_dl[127].types_def = NULL;
__fake_dl[127].globals_def = &librender_globals_def;
__fake_dl[127].locals_def = &librender_locals_def;
__fake_dl[127].globals_fixup = NULL;
__fake_dl[127].locals_fixup = NULL;
#else
__fake_dl[127].constants_def = NULL;
__fake_dl[127].types_def = NULL;
__fake_dl[127].globals_def = NULL;
__fake_dl[127].locals_def = NULL;
__fake_dl[127].globals_fixup = librender_globals_fixup;
__fake_dl[127].locals_fixup = librender_locals_fixup;
#endif
__fake_dl[127].functions_exports = NULL;
#ifdef __BGDC__
__fake_dl[127].module_initialize = NULL;
__fake_dl[127].module_finalize = NULL;
__fake_dl[127].instance_create_hook = NULL;
__fake_dl[127].instance_destroy_hook = NULL;
__fake_dl[127].instance_pre_execute_hook = NULL;
__fake_dl[127].instance_pos_execute_hook = NULL;
__fake_dl[127].process_exec_hook = NULL;
__fake_dl[127].handler_hooks = NULL;
#else
__fake_dl[127].module_initialize = librender_module_initialize;
__fake_dl[127].module_finalize = librender_module_finalize;
__fake_dl[127].instance_create_hook = librender_instance_create_hook;
__fake_dl[127].instance_destroy_hook = librender_instance_destroy_hook;
__fake_dl[127].instance_pre_execute_hook = NULL;
__fake_dl[127].instance_pos_execute_hook = NULL;
__fake_dl[127].process_exec_hook = NULL;
__fake_dl[127].handler_hooks = librender_handler_hooks;
#endif
__fake_dl[127].modules_dependency = librender_modules_dependency;
: not found
./make-fakedl.sh: 142: ./make-fakedl.sh: data+=
/* -------------------- libdraw -------------------- */
__fake_dl[127].dlname = "libdraw";
#ifdef __BGDC__
__fake_dl[127].constants_def = NULL;
__fake_dl[127].types_def = NULL;
__fake_dl[127].globals_def = NULL;
__fake_dl[127].locals_def = NULL;
__fake_dl[127].globals_fixup = NULL;
__fake_dl[127].locals_fixup = NULL;
#else
__fake_dl[127].constants_def = NULL;
__fake_dl[127].types_def = NULL;
__fake_dl[127].globals_def = NULL;
__fake_dl[127].locals_def = NULL;
__fake_dl[127].globals_fixup = NULL;
__fake_dl[127].locals_fixup = NULL;
#endif
__fake_dl[127].functions_exports = NULL;
#ifdef __BGDC__
__fake_dl[127].module_initialize = NULL;
__fake_dl[127].module_finalize = NULL;
__fake_dl[127].instance_create_hook = NULL;
__fake_dl[127].instance_destroy_hook = NULL;
__fake_dl[127].instance_pre_execute_hook = NULL;
__fake_dl[127].instance_pos_execute_hook = NULL;
__fake_dl[127].process_exec_hook = NULL;
__fake_dl[127].handler_hooks = NULL;
#else
__fake_dl[127].module_initialize = NULL;
__fake_dl[127].module_finalize = NULL;
__fake_dl[127].instance_create_hook = NULL;
__fake_dl[127].instance_destroy_hook = NULL;
__fake_dl[127].instance_pre_execute_hook = NULL;
__fake_dl[127].instance_pos_execute_hook = NULL;
__fake_dl[127].process_exec_hook = NULL;
__fake_dl[127].handler_hooks = NULL;
#endif
__fake_dl[127].modules_dependency = NULL;
: not found
./make-fakedl.sh: 142: ./make-fakedl.sh: data+=
/* -------------------- libfont -------------------- */
__fake_dl[127].dlname = "libfont";
#ifdef __BGDC__
__fake_dl[127].constants_def = NULL;
__fake_dl[127].types_def = NULL;
__fake_dl[127].globals_def = NULL;
__fake_dl[127].locals_def = NULL;
__fake_dl[127].globals_fixup = NULL;
__fake_dl[127].locals_fixup = NULL;
#else
__fake_dl[127].constants_def = NULL;
__fake_dl[127].types_def = NULL;
__fake_dl[127].globals_def = NULL;
__fake_dl[127].locals_def = NULL;
__fake_dl[127].globals_fixup = NULL;
__fake_dl[127].locals_fixup = NULL;
#endif
__fake_dl[127].functions_exports = NULL;
#ifdef __BGDC__
__fake_dl[127].module_initialize = NULL;
__fake_dl[127].module_finalize = NULL;
__fake_dl[127].instance_create_hook = NULL;
__fake_dl[127].instance_destroy_hook = NULL;
__fake_dl[127].instance_pre_execute_hook = NULL;
__fake_dl[127].instance_pos_execute_hook = NULL;
__fake_dl[127].process_exec_hook = NULL;
__fake_dl[127].handler_hooks = NULL;
#else
__fake_dl[127].module_initialize = libfont_module_initialize;
__fake_dl[127].module_finalize = NULL;
__fake_dl[127].instance_create_hook = NULL;
__fake_dl[127].instance_destroy_hook = NULL;
__fake_dl[127].instance_pre_execute_hook = NULL;
__fake_dl[127].instance_pos_execute_hook = NULL;
__fake_dl[127].process_exec_hook = NULL;
__fake_dl[127].handler_hooks = NULL;
#endif
__fake_dl[127].modules_dependency = libfont_modules_dependency;
: not found
[...El foro no me deja postear la salida completa pero viene siendo lo mismo para cada módulo/librería...]
./make-fakedl.sh: 142: ./make-fakedl.sh: data+=
/* -------------------- mod_m7 -------------------- */
__fake_dl[127].dlname = "mod_m7";
#ifdef __BGDC__
__fake_dl[127].constants_def = mod_m7_constants_def;
__fake_dl[127].types_def = NULL;
__fake_dl[127].globals_def = &mod_m7_globals_def;
__fake_dl[127].locals_def = &mod_m7_locals_def;
__fake_dl[127].globals_fixup = NULL;
__fake_dl[127].locals_fixup = NULL;
#else
__fake_dl[127].constants_def = NULL;
__fake_dl[127].types_def = NULL;
__fake_dl[127].globals_def = NULL;
__fake_dl[127].locals_def = NULL;
__fake_dl[127].globals_fixup = mod_m7_globals_fixup;
__fake_dl[127].locals_fixup = mod_m7_locals_fixup;
#endif
__fake_dl[127].functions_exports = mod_m7_functions_exports;
#ifdef __BGDC__
__fake_dl[127].module_initialize = NULL;
__fake_dl[127].module_finalize = NULL;
__fake_dl[127].instance_create_hook = NULL;
__fake_dl[127].instance_destroy_hook = NULL;
__fake_dl[127].instance_pre_execute_hook = NULL;
__fake_dl[127].instance_pos_execute_hook = NULL;
__fake_dl[127].process_exec_hook = NULL;
__fake_dl[127].handler_hooks = NULL;
#else
__fake_dl[127].module_initialize = mod_m7_module_initialize;
__fake_dl[127].module_finalize = NULL;
__fake_dl[127].instance_create_hook = NULL;
__fake_dl[127].instance_destroy_hook = NULL;
__fake_dl[127].instance_pre_execute_hook = NULL;
__fake_dl[127].instance_pos_execute_hook = NULL;
__fake_dl[127].process_exec_hook = NULL;
__fake_dl[127].handler_hooks = NULL;
#endif
__fake_dl[127].modules_dependency = mod_m7_modules_dependency;
: not found
e8540@L2ZCVP4J:core$
Como ves, el índice se mantiene siempre en 127. ¿Alguna idea de por qué?. Yo diría que no he hecho nada raro con mi sistema, pero vete a saber...
¡Amigo Mío! (Sólo Tú Encuentras Leña (http://www.youtube.com/watch?v=xcm9mmGOFJw))
Es que el script está escrito en bash, no en sh. Cambiando el intérprete la cabecera sale idéntica a la tuya.
jeje... se ve que en mi sistema el sh debe ser un link al bash...
bueno, lo cambio por bash... aunque no se que tan portable sera...
por favor, decime si pudiste generar una version statica de bennugd con la version oficial... y como lo ves para meter tus cambios...
lo que intente hacer con el script es tener que evitar generar a mano los archivos para poder importar los simbolos al compilador y al runtime, y genera dicho archivo en base al makefile.am de modules y al contenido de los directorios, que deben tener un archivo *_exports.h donde iran los exports para el compilador (bgdc).
en el script hay un hack para evitar compilar la mathi, ya que es incompatible con la math.
Quote from: SplinterGU on May 08, 2012, 10:55:17 PM
jeje... se ve que en mi sistema el sh debe ser un link al bash...
bueno, lo cambio por bash... aunque no se que tan portable sera...
Típicamente sh ha sido un enlace a bash. Hace tiempo lo cambiaron en Ubuntu para que apuntara a una shell más rápida y de vez en cuando pasan estas cosas :) Creo que en Debian andan discutiendo hace tiempo la posibilidad de cambiar, también.
Quote from: SplinterGU on May 08, 2012, 11:13:53 PM
por favor, decime si pudiste generar una version statica de bennugd con la version oficial... y como lo ves para meter tus cambios...
lo que intente hacer con el script es tener que evitar generar a mano los archivos para poder importar los simbolos al compilador y al runtime, y genera dicho archivo en base al makefile.am de modules y al contenido de los directorios, que deben tener un archivo *_exports.h donde iran los exports para el compilador (bgdc).
en el script hay un hack para evitar compilar la mathi, ya que es incompatible con la math.
Te lo intento asegurar esta tarde.
La arquitectura, por lo que veo, es similar en concepto a la mía. Dado que ya puedo generar las cabeceras estáticas en Linux si te parece intento generar un parche sobre la versión oficial del SVN para Wii en estos días. Además así podrás probarlo en tu Wii :)
yo uso opensuse, desde hace un tiempo.
si, me gustaria tener ese parche, aunque aun me falta tener el entorno de compilacion wii.
Quote from: SplinterGU on May 09, 2012, 12:42:18 PM
yo uso opensuse, desde hace un tiempo.
Ah, ok.
Ya que estamos, ¿podrías cambiar los permisos de los configures del core y de los módulos para que se bajen con permiso de ejecución?. Es que se bajan sin ellos y el script de compilación falla.
El bgdc parece compilar sin problemas. El bgdrtm compila bien pero no se compila el código de los módulos dentro, sólo los ficheros propios de la bgdrtm.
El problema viene porque en Ubuntu no parece haber un script de pkg-config para SDL_mixer de forma que el configure de los módulos fallla; para que funcione he cambiado el script build-static.sh para que sea:
cd ../modules
SDL_mixer_CFLAGS="$(sdl-config --cflags)" SDL_mixer_LIBS="$(sdl-config --libs) -lSDL_mixer" ./configure --enable-static
make
cd ..
Con eso parece compilarse sin mayores problemas.
Quote from: SplinterGU on May 09, 2012, 12:42:18 PM
si, me gustaria tener ese parche, aunque aun me falta tener el entorno de compilacion wii.
Si quieres puedo intentar enviártelo, también.
[Edit] ¡Pixbros funcionando en bennugd monolítico!
Quote from: josebita on May 09, 2012, 06:20:08 PM
Quote from: SplinterGU on May 09, 2012, 12:42:18 PM
yo uso opensuse, desde hace un tiempo.
Ah, ok.
Ya que estamos, ¿podrías cambiar los permisos de los configures del core y de los módulos para que se bajen con permiso de ejecución?. Es que se bajan sin ellos y el script de compilación falla.
esta demas decir que tengo los permisos puestos, sino no compilaria; pero lamento decir que SVN no mantiene los permisos en el repositorio, SVN solo maneja archivos y contenidos, no attributos de los mismos.
Quote from: josebita on May 09, 2012, 06:20:08 PMEl bgdc parece compilar sin problemas. El bgdrtm compila bien pero no se compila el código de los módulos dentro, sólo los ficheros propios de la bgdrtm.
claro, se compilan los modulos en .a (librerias estaticas), luego se enlazan estaticamente al bgdrtm.
necesitas que todos los modulos generen sus respectivas librerias estaticas.
Quote from: josebita on May 09, 2012, 06:20:08 PM
El problema viene porque en Ubuntu no parece haber un script de pkg-config para SDL_mixer de forma que el configure de los módulos fallla; para que funcione he cambiado el script build-static.sh para que sea:
cd ../modules
SDL_mixer_CFLAGS="$(sdl-config --cflags)" SDL_mixer_LIBS="$(sdl-config --libs) -lSDL_mixer" ./configure --enable-static
make
cd ..
Con eso parece compilarse sin mayores problemas.
se requiere actualizar o generar los .m4 necesarios, yo necesite generar en algunas plataformas a mano, porque los empaquetados estan mal, podria meter eso, pero preferiria no hacerlo.
Quote from: josebita on May 09, 2012, 06:20:08 PM
Quote from: SplinterGU on May 09, 2012, 12:42:18 PM
si, me gustaria tener ese parche, aunque aun me falta tener el entorno de compilacion wii.
Si quieres puedo intentar enviártelo, también.
[Edit] ¡Pixbros funcionando en bennugd monolítico!
te agradeceria muchisimo si me pasas el entorno para compilar wii.
gracias por probar la version monolitica.
resulta facil ahora que lo tenes configurado meter nuevos modulos? como lo ves a nivel general?
Ok, de todas formas la variable de entorno se puede meter a mano antes de llamar al compilador.
El tema de añadir nuevos módulos parece fácil, sí (bastante más que con mi versión). Si no lo he entendido mal, sólo tengo que meter el módulo (preparado para compilar en la forma tradicional) en la carpeta modules, sacar los .o y recompilar con el script, ¿no?
si, claro, agregarlo en el makefile.am y todo lo que sigue para compilar de la forma habitual.
Ok. Usas un sistema de 64 bits, ¿verdad?
uso sistema de 32bits... simplemente para evitarme el rollo de no poder generar correctamente versiones de bennugd, de otra forma tendria ya desde hace rato un sistema de 64bits.
Quote from: SplinterGU on May 10, 2012, 07:59:48 PM
uso sistema de 32bits... simplemente para evitarme el rollo de no poder generar correctamente versiones de bennugd, de otra forma tendria ya desde hace rato un sistema de 64bits.
a ver si te monto el entorno y te lo paso.
gracias!
esto es en lo que estoy trabajando actualmente
http://www.youtube.com/watch?v=TJCuNJp0mBs&feature=youtu.be
aun es una prueba de concepto, queda muchas cosas por pulir y luego hacerlo un modulo bennugd... esta totalmente desoptimizado, y hecho completamente desde un prg... la velocidad es excelente pese a todo lo comentado...
pero bueno, estoy trabajando en ello.
Que buena pinta .. se ve que los desniveles son suaves xD ¿se podrá poner a mayor resolucion y a 32 b de color?
esta a 32bits de color...
claro que se puede a mas resolucion.
Tiene buena pinta.
640x480x32 60 fps
http://www.youtube.com/watch?v=dM3bKtDVTiI&feature=youtu.be
pruebas con altura de la camara
http://youtu.be/3M73G2PvMU0
lo que veo es que la subida a youtube no le hace justicia a los videos, que son realmente de una calidad muy superior.
Quote from: SplinterGU on June 27, 2012, 07:48:25 PM
pruebas con altura de la camara
http://youtu.be/3M73G2PvMU0 (http://youtu.be/3M73G2PvMU0)
Coche volador!! xDDDD
Tiene realmente muy buena pinta.
Quote from: KeoH on June 27, 2012, 09:51:05 PM
Quote from: SplinterGU on June 27, 2012, 07:48:25 PM
pruebas con altura de la camara
http://youtu.be/3M73G2PvMU0 (http://youtu.be/3M73G2PvMU0)
Coche volador!! xDDDD
Ahora sólo falta un sprite de un Delorean ;D
flipante ;D ,puede dar mucho de si hacer un juego tipo outrun.Con sus desniveles de bajadas y subidas donde se aprecia en el primer video.
Esto tiene una pinta excelente.
SplinterGU, he estado mirando tu versión estática o monolítica, es igual a la mía salvo un par de detalles que la tuya creo que mejora :D, ¿por cierto como se quitan módulos en tu versión monolítica? A priori leyendo el make-fakedl no lo veo sencillo. :'(
simplemente, borra la entrada del modulo que quieras eliminar del makefile.am en el directorio modulos.
si, las version oficial es muy parecida a las otras ramas... parecidas en parte (tampoco hay muchas opciones), pero no iguales...
si usas la version oficial, luego dime como te va con ella.
corregi varias cosas en el blitter... encontre el maldito bug que hacia que se rompan los graficos cuando se usaba un size muy chico y el grafico era chico... ironicamente era un filtro para evitar distorsiones por falta de precision... y algun otro tema mas en el blitter...
tambien encontre el problema de precision del centro que si gira 360* se nota un saltito en la rotacion, pero si lo corrijo se me rompe la textura o el grafico (no se que realmente) dejando una linea vertical sin pintar en medio del grafico, en diferentes posiciones segun el angulo... y otro que al pasar de 100% a 99% el grafico parece mas ancho... pero eso no estoy seguro, quizas es un efecto visual...
ahh, y corregi los size_x, size_y y size que se comian 1 pixel cada 100% del grafico, o sea, 200% = 2pixels... 300% = 3 pixels... y asi...
para los que no pueden esperar la nueva release....
http://www37.zippyshare.com/v/58152737/file.html
los demas (no windows) a tirar de los fuentes...
disculpas a todos los que el fix de size_* les genere incompatibilidades en sus codigos...
edit: fixeado, maldito update del compilador que me arruino los sdl.pc... en fin, creo que la ultima version windows que saque no era la ultima.
por favor, necesito que no emparchen sus codigos para corregir bugs de bennu, sino reporten los bugs que vean...
puede que haya algun que otro error en el nuevo render... no puede probarlo mucho.
Hola Splinter, estos días he estado a tope de trabajo y no he atendido demasiado a los foros, que es exactamente lo que cambia de esta nueva versión, tengo algunos proyectos en bennu y podría probar a compilarlos haber si todo va bien.
Ey, veo que has añadido la constante OS_ANDROID.
Por cierto, te debía los comandos de compilación en Android, te los adjunto.
hace meses dijó que pondria la constante de Pandora, ni me voy a molestar en mirar porque apuesto que no esta :(
Quote from: josebita on August 29, 2012, 08:31:08 PM
Ey, veo que has añadido la constante OS_ANDROID.
Por cierto, te debía los comandos de compilación en Android, te los adjunto.
gracias!
Quote from: FreeYourMind on August 29, 2012, 08:42:24 PM
hace meses dijó que pondria la constante de Pandora, ni me voy a molestar en mirar porque apuesto que no esta :(
le prometo tantas cosas a tanta gente, complazco a pocos y defraudo constantemente a muchos... lo siento, no doy a vasto.
Splinter revisando un poco el tema este del rendimiento, me estoy dando cuando de que al hacer set_mode cuando hay puesto un scale_resolution bennu no comprueba si realmente hace falta el escalado.
Me explico: si alguien pone el valor de scale_resolution a un valor dinámico calculado por código (porque lo está poniendo a la resolución nativa de android, p.ej.) y resulta que esa resolución es justo la de diseño del juego (a la que hace set_mode) y no hay rotación, en ppio. el escalado sería innecesario y haría el código más lento al tener que escalar cada frame sin necesidad.
¿No sería mejor añadir a gr_set_mode() una comprobación para ver si el escalado es necesario?. Sería algo del tipo:
use_scale = 0;
if(scale_resolution_orientation || surface_width != width && surface_height != height)
use_scale = 1;
Quizás eso obligaría a definir una variable global en g_video.h que dijera si se está haciendo escalado o no, porque ahora todo el código que he visto hace:
if (scale_resolution) {} else {}
claro, esa variable para indicar que esta seteado el escalado, se llama scale_resolution... :P
pero si, no se hace desde el codigo C, se podria hacer desde codigo bennugd... me parece.
Quote from: FreeYourMind on August 29, 2012, 08:42:24 PM
hace meses dijó que pondria la constante de Pandora, ni me voy a molestar en mirar porque apuesto que no esta :(
A que si le regalas una Pandora si la pone ;D
lo que quiero decir es que reseteando scale_resolution a 0, ya estaria.
obviamente con los chequeos pertinentes para detectar el modo actual y demas.
Quote from: SplinterGU on August 29, 2012, 11:10:04 PM
lo que quiero decir es que reseteando scale_resolution a 0, ya estaria.
obviamente con los chequeos pertinentes para detectar el modo actual y demas.
Pues también es verdad...
lo pondre, aunque creo que esto lo pense cuando hice esta feature, y por algun motivo lo deje asi...
que porqueria de memoria.
Quote from: SplinterGU on August 29, 2012, 11:25:25 PM
que porqueria de memoria.
Para el cumpleaños una agendita :D
Quote from: josebita on August 29, 2012, 11:53:37 PM
Quote from: SplinterGU on August 29, 2012, 11:25:25 PM
que porqueria de memoria.
Para el cumpleaños una agendita :D
buena idea... la primer cosa que anotaria seria:
"recuerda que puedes usar la agendita..." oh, wait... si me olvido de usarla no podre leer el recordatorio de usarla... diablos!
Quote from: josebita on August 29, 2012, 08:31:08 PM
Ey, veo que has añadido la constante OS_ANDROID.
A veces creo que Splinter añade mejoras y no lo comenta a propósito. Asi existe la posibilidad de que alguien pida algo ya implementado y de la sensación de que se agregó a los 5 minutos de la propuesta ;D
es que android no esta completo... o sea, que esa parte aun no es usable...
Quote from: SplinterGU on August 30, 2012, 03:25:05 PM
es que android no esta completo... o sea, que esa parte aun no es usable...
Pero el valor 1003 es definitivo? Pregunto porque ya lo puse en la Wiki :-\ . Si es asi lo que haré es poner "under development" mientras tanto.
1003, si
Quote from: SplinterGU on August 29, 2012, 01:28:50 PM
para los que no pueden esperar la nueva release....
http://www37.zippyshare.com/v/58152737/file.html (http://www37.zippyshare.com/v/58152737/file.html)
los demas (no windows) a tirar de los fuentes...
disculpas a todos los que el fix de size_* les genere incompatibilidades en sus codigos...
edit: fixeado, maldito update del compilador que me arruino los sdl.pc... en fin, creo que la ultima version windows que saque no era la ultima.
Le hemos probado y en algunos test no se ve nada
aqui con esto...
// --------------------------------------------------------------------------
// Bennu Tests 2000 José Luis Cebrián
// --------------------------------------------------------------------------
#ifndef __VERSION__
import "mod_sdlevthandler";
import "mod_pathfind";
#else
import "mod_blendop";
import "mod_text";
import "mod_grproc";
import "mod_video";
import "mod_map";
import "mod_screen";
import "mod_path";
import "mod_rand";
import "mod_say";
import "mod_mouse";
import "mod_scroll";
import "mod_math";
#endif
import "mod_m7";
import "mod_proc";
import "mod_key";
import "mod_draw";
import "mod_timers";
import "mod_sound";
#define SCR_DEPTH 16
GLOBAL option ;
PROCESS Menu()
PRIVATE i, c, map ;
BEGIN
set_mode(320,200,SCR_DEPTH);
load_fpg ("../../media/test.fpg") ;
set_fps (0, 0) ;
write (0, 160, 4, 1, "Bennu tests") ;
write (0, 160, 14, 1, "Select your option") ;
write (0, 60, 50, 0, "1. Basic sprite drawing") ;
write (0, 60, 60, 0, "2. Blending operations") ;
write (0, 60, 70, 0, "3. Primitive drawing") ;
write (0, 60, 80, 0, "4. Scroll interactive test") ;
write (0, 60, 90, 0, "5. Mode 7 interactive test") ;
write (0, 60, 100, 0, "6. Path-finding interactive test") ;
write (0, 60, 110, 0, "7. Sound test") ;
write (0, 60, 150, 0, "0. Exit") ;
map = new_map (320, 200, 8) ;
map_clear (0, map, 0) ;
option = 0 ;
REPEAT
IF key(_1): option = 1; END
IF key(_2): option = 2; END
IF key(_3): option = 3; END
IF key(_4): option = 4; END
IF key(_5): option = 5; END
IF key(_6): option = 6; END
IF key(_7): option = 7; END
IF key(_0): BREAK; END
c = rgb (rand(32,128), rand(32,64), rand(32,64)) ;
x = timer[0]/5 % 100;
IF (x > 50) x = 100-x; END
xput (0, map, 160, 100, timer[0]*-50, 200+x, 4, 0) ;
FROM i = 0 TO 100;
map_put_pixel (0, map, rand(0,320), rand(0, 200), c) ;
map_put_pixel (0, map, rand(0,320), rand(0, 200), 1) ;
END
FRAME ;
UNTIL option != 0;
unload_map(0, map) ;
END
PROCESS Header(string title)
private
w, h;
BEGIN
delete_text (0) ;
w = graphic_info(0, 0, G_WIDTH) ;
h = graphic_info(0, 0, G_HEIGHT) ;
write (0, w/2, 4, 1, title) ;
write (0, w/2-15, 15, 2, "FPS:") ;
write_int (0, w/2+10, 15, 0, &fps) ;
write (0, w/2-15, 25, 2, "Speed %:") ;
write_int (0, w/2+10, 25, 0, &speed_gauge) ;
write (0, w/2, h-20, 1, "Press ESC to continue") ;
END
// ----------------------------------------------------------------------
// Simple sprite drawing
// ----------------------------------------------------------------------
PROCESS FallingObjects()
BEGIN
set_mode (320, 200, SCR_DEPTH);
put_screen (0, 1);
Header ("400 sprites") ;
FROM x = 0 TO 400; FallingObject(100, 100, 0, 0); END
WHILE !key(_ESC); FRAME; END;
signal (TYPE FallingObject, S_KILL) ;
WHILE key(_ESC); FRAME; END;
Header ("100 rotating sprites") ;
FROM x = 0 TO 100; FallingObject(101, 100, 0, rand(500,1000)); END
WHILE !key(_ESC): FRAME; END
signal (TYPE FallingObject, S_KILL) ;
WHILE key(_ESC): FRAME; END;
Header ("100 sprites with transparency") ;
FROM x = 0 TO 100; FallingObject(100, 100, 4, 0); END
WHILE !key(_ESC): FRAME; END
signal (TYPE FallingObject, S_KILL) ;
WHILE key(_ESC): FRAME; END;
Header ("100 scaled up sprites") ;
FROM x = 0 TO 100; FallingObject(100, 120, 0, 0); END
WHILE !key(_ESC): FRAME; END
END
PROCESS FallingObject(graph, size, flags, angleinc)
PRIVATE xspeed, yspeed, inispeed ;
BEGIN
z = rand (-5, 125) ;
x = rand (15, 305) ;
y = - rand (20, 100) ;
xspeed = rand (-10, 10) ;
yspeed = rand (-4, 0) ;
inispeed = rand (10, 15) ;
angle = rand (0, 50 * angleinc) ;
LOOP
alpha = timer[0];
x += xspeed ;
IF (x > 305 || x < 15) xspeed = -xspeed; END
y += yspeed++ ;
IF (yspeed < -14) yspeed = -14; END
IF (y > 180)
yspeed = -inispeed ;
IF (inispeed > 1)
inispeed--;
ELSE
inispeed = 15;
END
END
IF (out_region(ID, 0)) y = -rand(20, 100) ; inispeed = 15 ; END
angle += angleinc ;
FRAME ;
END
END
// ----------------------------------------------------------------------
// Blendop tests
// ----------------------------------------------------------------------
PROCESS BlendedObject (x, y, string text, string text2, int flags, blendop)
BEGIN
write (0, x, y+32, 4, text) ;
write (0, x, y+40, 4, text2) ;
angle = 1000 ;
size = 150 ;
graph = 101 ;
LOOP
angle += 2000 ;
FRAME ;
END
END
PROCESS BlendedObjects()
BEGIN
// graph_mode = mode_16bits ;
set_mode (320, 200, SCR_DEPTH);
put_screen (0, 1) ;
Header ("Blit flags") ;
BlendedObject (60, 65, "Normal", "", 0, 0) ;
BlendedObject (160, 65, "H-Mirror", "", 1, 0) ;
BlendedObject (260, 65, "V-Mirror", "", 2, 0) ;
BlendedObject (60, 135, "Normal", "Transparency", 4, 0) ;
BlendedObject (160, 135, "H-Mirror", "Transparency", 5, 0) ;
BlendedObject (260, 135, "No key", "", 128, 0) ;
WHILE !key(_ESC); FRAME; END;
scan_code = 0 ;
signal (TYPE BlendedObject, S_KILL) ;
Header ("Blending operations") ;
blendop = blendop_new() ;
blendop_translucency (blendop, 0.70) ;
BlendedObject (60, 65, "Transparency", "(70%)", 0, blendop) ;
blendop = blendop_new() ;
blendop_grayscale (blendop, 1) ;
BlendedObject (160, 65, "Grayscale", "(Luminance)", 0, blendop) ;
blendop = blendop_new() ;
blendop_intensity (blendop, 2.00) ;
BlendedObject (260, 65, "Lighting", "(50%)", 0, blendop) ;
blendop = blendop_new() ;
blendop_tint (blendop, 0.50, 255, 0, 0) ;
BlendedObject (60, 135, "Red tint", "(50%)", 0, blendop) ;
blendop = blendop_new() ;
blendop_intensity (blendop, 0.75) ;
BlendedObject (160, 135, "Darkening", "(25%)", 0, blendop) ;
blendop = blendop_new() ;
blendop_grayscale (blendop, 1) ;
blendop_intensity (blendop, 3.0) ;
blendop_swap (blendop);
BlendedObject (260, 135, "Inverted", "(Grayscale)", 0, blendop) ;
WHILE key(_ESC); FRAME; END;
WHILE !key(_ESC); FRAME; END;
fade_off() ; while (fading); frame; end;
set_mode (320, 200, SCR_DEPTH);
END
// ----------------------------------------------------------------------
// Primitive drawing
// ----------------------------------------------------------------------
PROCESS PrimitiveTests()
PRIVATE
map, color, i ;
word POINTER ptr ;
BEGIN
// load_fpg ("test.fpg") ;
set_mode (320, 200, SCR_DEPTH);
put_screen (0, 1) ;
Header ("Primitive drawing") ;
graph = new_map (400, 400, 8) ;
set_center (0, graph, 200, 200) ;
drawing_map (0, graph) ;
x = 160 ; y = 100 ; flags = 4 ;
REPEAT
drawing_color (rgb (rand(0,255), rand(0,255), rand(0,255))) ;
draw_fcircle (rand(0,399), rand(0,399), rand(0,25)) ;
draw_rect (rand(0,399), rand(0,399), rand(0,399), rand(0,399)) ;
draw_line (rand(0,399), rand(0,399), rand(0,399), rand(0,399)) ;
draw_circle (rand(0,399), rand(0,399), rand(0,100)) ;
FRAME ;
angle += 1000 ;
UNTIL scan_code;
unload_map (0, graph) ;
END
// ----------------------------------------------------------------------
// Scrolling
// ----------------------------------------------------------------------
PROCESS ScrollTest()
BEGIN
set_mode(640,480,SCR_DEPTH);
define_region (1, 0, 0, 320, 240) ;
define_region (2, 0, 240, 320, 240) ;
define_region (3, 320, 0, 320, 240) ;
define_region (4, 320, 240, 320, 240) ;
define_region (5, 80, 80, 160, 80) ;
start_scroll(0, 0, 200, 1, 1, 15);
start_scroll(1, 0, 200, 1, 2, 15);
start_scroll(2, 0, 200, 1, 3, 15);
start_scroll(3, 0, 200, 1, 4, 15);
scroll[0].camera = ScrollSphere (160, 100, 100) ;
scroll[1].camera = ScrollTriangle (scroll[0].camera, 0) ;
scroll[2].camera = ScrollTriangle (scroll[0].camera, 120000) ;
scroll[3].camera = ScrollTriangle (scroll[0].camera, 240000) ;
/*
scroll[0].ratio = 400 ;
scroll[1].ratio = 800 ;
scroll[2].ratio = 50 ;
scroll[3].ratio = 2000 ;
*/
scroll[0].region1 = 5 ;
scroll[0].region2 = 1 ;
scroll[0].ratio = 100 ;
scroll[1].ratio = 100 ;
scroll[2].ratio = 100 ;
scroll[3].ratio = 100 ;
scroll[0].speed = 3 ;
scroll[1].speed = 3 ;
scroll[2].speed = 3 ;
scroll[3].speed = 3 ;
scroll[0].flags1 = B_TRANSLUCENT ;
scroll[1].flags1 = B_TRANSLUCENT ;
scroll[2].flags1 = B_TRANSLUCENT ;
scroll[3].flags1 = B_TRANSLUCENT ;
scroll[0].flags2 = B_NOCOLORKEY | B_HMIRROR;
scroll[1].flags2 = B_NOCOLORKEY | B_HMIRROR;
scroll[2].flags2 = B_NOCOLORKEY | B_HMIRROR;
scroll[3].flags2 = B_NOCOLORKEY | B_HMIRROR;
Header ("Scroll test") ;
REPEAT: FRAME; UNTIL key(_esc);
fade_off() ; while (fading); frame; end;
stop_scroll(0) ;
stop_scroll(1) ;
stop_scroll(2) ;
stop_scroll(3) ;
set_mode(320,200,SCR_DEPTH);
END
PROCESS ScrollSphere (x, y, graph)
BEGIN
priority = 101 ;
ctype = c_scroll;
LOOP
IF (key(_right)) x += 4 ; END
IF (key(_left)) x -= 4 ; END
IF (key(_down)) y += 4 ; END
IF (key(_up)) y -= 4 ; END
IF (key(_space)) x = y = 0 ; END
FRAME;
END
END
PROCESS ScrollTriangle (follow, angle)
BEGIN
priority = 100 ;
graph = 102 ;
ctype = c_scroll ;
LOOP
x = follow.x + get_distx (angle, 40) ;
y = follow.y + get_disty (angle, 40) ;
angle += 185000 ;
FRAME ;
angle -= 180000 ;
END
END
// ----------------------------------------------------------------------
// Mode 7
// ----------------------------------------------------------------------
PROCESS Mode7Test()
PRIVATE
a, b ;
BEGIN
set_mode(320,200,8);
put_screen (0, 1) ;
Header ("Mode 7 - Press cursor keys, Q, W, A, Z") ;
start_mode7 (0, 0, 1, 0, 0, 64) ;
start_mode7 (1, 0, 0, 200, 0, 64) ;
m7[0].distance = 0 ;
m7[0].camera = id ;
m7[0].height = 90 ;
m7[1].distance = 0 ;
m7[1].camera = id ;
m7[1].height = 80 ;
m7[1].flags = 4 ;
resolution = 100 ;
FROM a = 0 TO 64 Step 16;
FROM b = 0 TO 64 Step 16;
Mode7Object (a, b, 100) ;
END
END
FRAME;
LOOP
m7[0].z = m7[0].height ;
m7[1].z = m7[1].height ;
IF (m7.height < 0)
m7[0].z = -m7[0].height ;
m7[1].z = -m7[1].height ;
END
IF (key(_up)) advance(200) ; END
IF (key(_down)) advance(-200) ; END
IF (key(_left)) angle += 2000 ; END
IF (key(_right)) angle -= 2000 ;END
IF (key(_a)) m7.height+=2 ; m7[1].height+=2 ; END
IF (key(_z)) m7.height-=2 ; m7[1].height-=2 ; END
IF (key(_q)) xadvance(angle+90000, 200) ; END
IF (key(_w)) xadvance(angle-90000, 200) ; END
scan_code = 0 ;
FRAME ;
IF key(_esc): BREAK; END
END
fade_off() ; while (fading); frame; end;
stop_mode7(1) ;
stop_mode7(0) ;
set_mode(320,200,SCR_DEPTH);
END
PROCESS Mode7Object (x, y, graph)
PRIVATE
speed = -1 ;
BEGIN
ctype = c_m7 ;
cnumber = 1 ;
height = rand (0, 16) ;
resolution = 4 ;
x *= 4 ; y *= 4 ;
LOOP
IF height > 0 && speed > -8: speed-- ; END
height += speed ;
IF (height < 0)
height = 0 ;
speed = rand(5, 15) ;
END
FRAME;
END
END
// ----------------------------------------------------------------------
// Path-finding
// ----------------------------------------------------------------------
CONST
width1 = 64 ;
height1 = 32 ;
GLOBAL
int graphic ;
int title ;
int wall_color ;
int start_color ;
int end_color ;
int color_ruta ;
int last_x, last_y ;
int start_x, start_y ;
int end_x, end_y ;
PROCESS ClearRoute ()
PRIVATE
byte POINTER ptr ;
int pitch ;
BEGIN
ptr = map_buffer (0, graphic) ;
pitch = graphic_info(0, graphic, G_PITCH) ;
FROM y = 0 TO HEIGHT1;
ptr = map_buffer(0,graphic) ;
ptr += pitch * y ;
FROM x = 0 TO WIDTH1;
IF [ptr] == color_ruta: [ptr] = 0; END
ptr++ ;
END
END
END
PROCESS Reset()
BEGIN
drawing_color (0) ;
draw_box (0, 0, WIDTH1, HEIGHT1) ;
drawing_color (wall_color) ;
draw_rect (0, 0, WIDTH1, HEIGHT1) ;
start_x = WIDTH1/4 ;
end_x = WIDTH1*3/4 ;
start_y = HEIGHT1/2 ;
end_y = HEIGHT1/2 ;
map_put_pixel (0, graphic, start_x, start_y, start_color) ;
map_put_pixel (0, graphic, end_x, end_y, end_color) ;
END
PROCESS PathFinding()
BEGIN
mouse.graph = 200 ;
graphic = new_map (WIDTH1, HEIGHT1, 8) ;
wall_color = rgb (196, 196, 196) ;
start_color = rgb (255, 0, 0) ;
end_color = rgb (0, 0, 255) ;
color_ruta = rgb (128, 64, 128) ;
drawing_map (0, graphic) ;
Reset() ;
title = write (0, 160, 4, 1, "Path finding") ;
write (0, 160, 180, 1, "Draw walls with the mouse") ;
write (0, 160, 190, 1, "(S) start (E) end (R) reset (SPACE) go") ;
last_x = mouse.x / 4 ;
last_y = mouse.y / 4 ;
WHILE !key(_esc):
clear_screen() ;
xput (0, graphic, 160, 100, 0, 400, 0, 0) ;
x = mouse.x / 4 - (40-WIDTH1/2);
y = mouse.y / 4 - (25-HEIGHT1/2);
IF mouse.left:
drawing_color (wall_color) ;
draw_line (x, y, last_x, last_y) ;
map_put_pixel (0, graphic, x, y, wall_color) ;
END
IF mouse.right:
drawing_color (0) ;
draw_line (x, y, last_x, last_y) ;
map_put_pixel (0, graphic, x, y, 0) ;
END
IF key(_s):
ClearRoute() ;
map_put_pixel (0, graphic, start_x, start_y, 0) ;
start_x = x ; start_y = y ;
map_put_pixel (0, graphic, x, y, start_color) ;
END
IF key(_r):
Reset() ;
END
IF key(_e):
ClearRoute() ;
map_put_pixel (0, graphic, end_x, end_y, 0) ;
end_x = x ; end_y = y ;
map_put_pixel (0, graphic, x, y, end_color) ;
END
IF key(_space):
FRAME ;
ClearRoute() ;
IF !path_find(0, graphic, start_x, start_y, end_x, end_y, PF_NODIAG):
delete_text(title) ;
title = write (0, 160, 6, 1, "The path is blocked") ;
ELSE:
FRAME ;
clear_screen() ;
delete_text(title) ;
title = write (0, 160, 6, 1, "Path found in " + (speed_gauge*60/100) + " ms") ;
set_fps (0, 0) ;
WHILE path_getxy(&x, &y):
map_put_pixel (0, graphic, x, y, color_ruta) ;
xput (0, graphic, 160, 100, 0, 400, 128, 0) ;
FRAME ;
END
set_fps (0, 0) ;
map_put_pixel (0, graphic, start_x, start_y, start_color) ;
map_put_pixel (0, graphic, end_x, end_y, end_color) ;
END
WHILE key(_space): FRAME; END
END
IF key(_esc): BREAK; END
last_x = x ;
last_y = y ;
FRAME ;
END
unload_map (0, graphic) ;
fade_off() ; while (fading); frame; end;
END
// ------------------------------------------------------------------------
// Sound test
// ------------------------------------------------------------------------
PROCESS SoundTest()
PRIVATE
int pat, pos, vol, time, md ;
BEGIN
header ("Sound test") ;
md = load_song("../../media/game.s3m") ;
play_song (md,-1) ;
vol = 128 ;
WHILE is_playing_song() AND scan_code != _esc:
FRAME ;
END
WHILE is_playing_song() AND vol > 0:
FRAME ;
set_song_volume ( vol -= 2) ;
END
stop_song() ;
unload_song(md) ;
END
// ----------------------------------------------------------------------
PRIVATE proc ;
BEGIN
FULL_SCREEN = FALSE ;
LOOP
proc = Menu() ;
WHILE exists(proc): FRAME; END
fade_off() ; while (fading); frame; end;
put_screen(0, 1) ;
delete_text(0) ;
fade_on() ; while (fading); frame; end;
IF option == 0: BREAK; END
SWITCH (option)
CASE 1: proc = FallingObjects(); END
CASE 2: proc = BlendedObjects(); END
CASE 3: proc = PrimitiveTests(); END
CASE 4: proc = ScrollTest(); END
CASE 5: proc = Mode7Test(); END
CASE 6: proc = PathFinding(); END
CASE 7: proc = SoundTest(); END
END
WHILE exists(proc): FRAME; END
fade_off() ; while (fading); frame; end;
let_me_alone() ;
clear_screen() ;
delete_text(0) ;
fade_on() ;
END
END
yo tambien lo note...
acabo de probar, no se porque han dejado de funcionar los recursos comprimidos... y no es de esta ultima version, parece que sucede en la anterior tambien... que a decir verdad, creo que la anterior que libere en windows no era la correcta, el instalador/empaquetador no estaba copiando los ejecutables...
tengo que revisar que cambios meti en la ultima version...
si descomprimes el fpg, funciona.
joseba, creo que estoy empezando a tener los problemas que tenes vos (o tenias) con los recursos comprimidos, pero me esta pasando en linux (y creo que en windows tambien) con la ultima version (de supongo la zlib)...
podrias probar tocando en el fuente files.c donde esta la funcion file_read el bloque de zlib y cambiarlo por esto?
#ifndef NO_ZLIB
if ( fp->type == F_GZFILE )
{
int result = gzread( fp->gz, buffer, len ) ;
fp->error = ( result < len );
int gerr=0;
char * err = gzerror( fp->gz, &gerr);
printf( "%s:%d (%s) %d %d %d %d %s\n", __FILE__, __LINE__, __FUNCTION__, result, len, fp->error, gerr, err ); fflush( stdout );
if ( result < 0 ) result = 0;
return result ;
}
#endif
y decirme, que te retorna en los casos que falla, a mi me da "XXXX: incorrect data check"
te adjunto uno de los fpg que me da error (algunos otros fpg van bien)
desde ya, gracias.
Quote from: SplinterGU on September 08, 2012, 10:26:08 PM
joseba, creo que estoy empezando a tener los problemas que tenes vos (o tenias) con los recursos comprimidos, pero me esta pasando en linux (y creo que en windows tambien) con la ultima version (de supongo la zlib)...
podrias probar tocando en el fuente files.c donde esta la funcion file_read el bloque de zlib y cambiarlo por esto?
#ifndef NO_ZLIB
if ( fp->type == F_GZFILE )
{
int result = gzread( fp->gz, buffer, len ) ;
fp->error = ( result < len );
int gerr=0;
char * err = gzerror( fp->gz, &gerr);
printf( "%s:%d (%s) %d %d %d %d %s\n", __FILE__, __LINE__, __FUNCTION__, result, len, fp->error, gerr, err ); fflush( stdout );
if ( result < 0 ) result = 0;
return result ;
}
#endif
y decirme, que te retorna en los casos que falla, a mi me da "XXXX: incorrect data check"
te adjunto uno de los fpg que me da error (algunos otros fpg van bien)
desde ya, gracias.
Imagino que el error te lo da tras un load_fpg, sin más, ¿no?.
He tenido dos problemas distintos:
* En la Wii directamente no funcionaba cargar recursos comprimidos en gzip
* En Android el problema es que los recursos se leen de un fichero comprimidos en zip (el apk) con una capa de abstracción y el código de lectura de ficheros asume que lo que te da la primera capa de abstracción -la que lee del APK- es un FILE * al recurso cuando en realidad en un FILE * al gzip y claro, las rutinas de lectura de recursos no lo entienden.
Imagino que el problema se parece más al primero, ¿no?
el primero claro, pero como si algo hubiese cambiado en la gzip o un bug anterior o un bug actual, el archivo si lo quiero abrir con gzip del sistema da error, ahora si lo abro con doublecmd (un clon de totalcmd para linux, lo abre y el fpg esta en perfecto estado, obtengo el descomprimido sin problemas)
Quote from: SplinterGU on September 11, 2012, 10:27:39 AM
el primero claro, pero como si algo hubiese cambiado en la gzip o un bug anterior o un bug actual, el archivo si lo quiero abrir con gzip del sistema da error, ahora si lo abro con doublecmd (un clon de totalcmd para linux, lo abre y el fpg esta en perfecto estado, obtengo el descomprimido sin problemas)
Voy a intentar probarlo, pero necesitaré tiempo: estoy saturado de cosas que hacer. Si ves que se me pasa, dame un toque porque quizás sea que se me haya olvidado.
no importa, mientras, a comerla, a recomprimir los fpg o descomprimirlos... sino hay que empaquetar con otra libz y hacer un wrapper para usarla...
un tema.
se agregan nuevas funciones para manejo de rgb y paleta (paleta solo find_color)... en realidad son las mismas de siempre, pero ahora se les puede decir sobre que mapa o paleta trabajar... estas funciones son (se agregan a las ya existentes):
rgb(file,map,r,g,b)
rgba(file,map,r,g,b,a)
get_rgb(file,map,color,&r,&g,&b)
get_rgba(file,map,color,&r,&g,&b,&a)
rgb_get(file,map,color,&r,&g,&b)
rgba_get(file,map,color,&r,&g,&b,&a)
find_color(file,map,r,g,b)
color_find(file,map,r,g,b)
find_color(pal,r,g,b)
color_find(pal,r,g,b)
ahora las funciones *rgb* tambien trabajan con 8 bits, asi que no es necesaria la funcion find_color o color_find (aunque es un poquito mas rapida)
tambien se mantiene por compatibilidad, que si el mapa es de 16bits y el color encontrado es 0, retorna 1
internamente, he tocado, cambiado de nombre varias funciones y tambien he eliminado algunas otras... todo en pro al mantenimiento del codigo.
aquellos que tiran de los fuentes, cualquier sugerencia o comportamiento extraño con feedback sera bien recibido...
saludos.
Splinter .. no entiendo el funcionamiento de algunas de esas funciones. Supongo que las color_find lo q hacen es devolver true/false si encuentran en un mapa un color dado .. pero las de get_rgb?? o las de rgb al que le pasas un mapa? para q? si se supone q rgb (y rgba) te devolvian un codigo de color. No se como se usarian, explicanos un pequeño ejemplo (sin codigo ni nada), solo para entender el funcionamiento / utilidad. Gracias.
no, color_find es como el rgb, pero para 8bits y busca el color mas aproximado dentro de la paleta.
rgb dados los componentes rgb devuelve el color asociado
get_rgb, dado el color, devuelve los componentes.
por que un mapa? porque dependendiendo del mapa es el rgb dado, no es lo mismo, un rgb de un mapa de 32 que de uno de 16, o que uno de 8 (que es el color mas proximo al color que se pide)
siempre fue un problema trabajar con los rgb si se mezclan mapas o si los mapas no tienen la misma profundidad que el escritorio y ni que decir si trabajamos con paletas diferentes a la del sistema.
seguramente no se entendio nada, pero ahi fue la explicacion.
nueva release con todos estos ultimos cambios... y tambien se corrigieron todos los paquetes de todas las plataformas que se venian generando mal...
desinstalar todas las versiones anteriores... (manualmente si es necesario) y reinstalar de cero esta nueva.
DEBUG
- new debug log format
- new debug levels
- debug console now allow several SHOW
- new debug console commands
- add new instructions for define/activate debug level:
TRACE(debug_level)
0 - disable
1 - only show source lines
2 - source lines + opcodes
3 - source lines + opcodes + stack dump
- disable stdout buffering
Splint, la ultima version para Windows es esta http://www.bennugd.org/downloads/bgd-1.0.0-r298-win32.exe o toca compilarla desde el repositorio?
Salu2
TD
es la ultima sin los cambios de hoy...
Oh, me olvide...
- reduccion del stack de procesos de 16k a 4kb...
incluso creo que es muy grande...
Quote from: SplinterGU on October 08, 2012, 05:14:22 AM
Oh, me olvide...
- reduccion del stack de procesos de 16k a 4kb...
incluso creo que es muy grande...
Y eso q es ? xDDD
menor numero de procesos posibles me imagino
no, no son numeros de proceso, sino stack... es un area de datos donde se guardan los parametros de entrada y salida a las funciones, en el caso de bennugd, cada proceso tiene un stack.
en un rato subo fix de un bug que introduje en la ultima version... que producia un memory leak con funciones que hacian uso de rgb/rgba
actualizo nuevamente la version windows, faltaba la libpng15-15.dll, no hace falta bajar de nuevo el paquete solo agregar la libreria, pero si quieren bajar el paquete nuevamente y ya esta.
Descargada la última versión rc300, muchas gracias Juan por seguir mejorando este magnífico lenguaje. Karma up!
de nada!
- a instance only can receive a signal is not DEAD or KILLED (fix)
- add env var VIDEO_FULLSCREEN
- add support set_video with width=0 and height=0
por favor, joseba, prueba con estos nuevos fuentes, a ver si se soluciona el problema de la version android.
le puse soporte de 0,0, y unos cuantos chequeos mas en consecuencia.
lo de 0,0, tambien funciona en SDL1.2, tambien esta depth, para meter, pero tengo que pensar un poquito como meterlo bien, ya que no soportamos 24bits y eso puede ser un problema... la otra opcion es pensar en darle soporte 24bits... (que le tengo ganas desde hace tiempo).
Estoy añadiendo tus cambios a mi rama, a ver si mejora el asunto.
Una cosa: ya que estás tocando cosas de la paleta, ¿podrías incluir los parches de DCelso para BGR?. Son necesarios para que el modo de 32 bits funciones en iOS y en Mac, además de en la PSP.
Mil gracias.
tengo que revisarlos, creo que no los inclui porque se podia hacer de otra forma.
corregido el paquete para wiz de la r300, faltaba la iconv.
Quote from: SplinterGU on October 30, 2012, 09:53:02 PM
tengo que revisarlos, creo que no los inclui porque se podia hacer de otra forma.
Ok, si lo haces avisa porque me resulta útil.
La próxima versión del código que suba irá compilada contra la versión monolítica oficial.
Una vez eso funcione pasaré a utilizar la versión modular en Android, si no aparecen problemas.
Me gustaría saber de qué estáis hablando xD
Quote from: PiXeL on October 30, 2012, 10:54:22 PM
Me gustaría saber de qué estáis hablando xD
Los parches BGR es porque en iOS, Mac y PSP los colores se representan al revés que en las plataformas "normales". Es decir, en PC el color FF0000 es rojo puro mientras que en iOS es azul puro.
Splinter, te voy anotando algunas cosas que voy viendo (iré actualizando la lista según vaya sacando cosas):
- librender/g_instance.h: No incluye la cabecera bgddl.h ni g_bitmap.h necesaria dado que las declaraciones de las funciones usan INSTANCE.
- librender/g_fade.c o librender/librender.g: No incluye g_video.h (usa screen y scale_screen).
- librender/g_fade.c: falta include a dlvaracc.h tras el include a librender.h
Quote from: josebita on October 30, 2012, 11:00:34 PM
Quote from: PiXeL on October 30, 2012, 10:54:22 PM
Me gustaría saber de qué estáis hablando xD
Los parches BGR es porque en iOS, Mac y PSP los colores se representan al revés que en las plataformas "normales". Es decir, en PC el color FF0000 es rojo puro mientras que en iOS es azul puro.
Eso ya lo sabía. Lo que no sé de qué habláis es lo de set_video y demás. Además decís que eso ayudará al port de Android, ¿por? ¿No es lo mismo que scale_mode?
Quote from: PiXeL on October 30, 2012, 11:03:51 PM
Quote from: josebita on October 30, 2012, 11:00:34 PM
Quote from: PiXeL on October 30, 2012, 10:54:22 PM
Me gustaría saber de qué estáis hablando xD
Los parches BGR es porque en iOS, Mac y PSP los colores se representan al revés que en las plataformas "normales". Es decir, en PC el color FF0000 es rojo puro mientras que en iOS es azul puro.
Eso ya lo sabía. Lo que no sé de qué habláis es lo de set_video y demás. Además decís que eso ayudará al port de Android, ¿por? ¿No es lo mismo que scale_mode?
Puede ser que el problema de que sólo aparezca una banda negra (en lugar de dos) y de que la posición del mouse esté mal porque no estoy poniendo bien ciertas variables internas al hacer set_mode con 0x0...
Pues definitivamente no tengo ni idea de qué estáis hablando xD
Eso no me ha ocurrido aún, por suerte. Supongo que será porque siempre lo escalo todo.
Quote from: PiXeL on October 30, 2012, 11:12:01 PM
Pues definitivamente no tengo ni idea de qué estáis hablando xD
Eso no me ha ocurrido aún, por suerte. Supongo que será porque siempre lo escalo todo.
Le pasa a Javis con el Monkey vs Robots. Ocurre cuando se usa SRA_PRESERVE.
Quote from: josebita on October 30, 2012, 11:00:34 PM
Quote from: PiXeL on October 30, 2012, 10:54:22 PM
Me gustaría saber de qué estáis hablando xD
Los parches BGR es porque en iOS, Mac y PSP los colores se representan al revés que en las plataformas "normales". Es decir, en PC el color FF0000 es rojo puro mientras que en iOS es azul puro.
Splinter, te voy anotando algunas cosas que voy viendo (iré actualizando la lista según vaya sacando cosas):
- librender/g_instance.h: No incluye la cabecera bgddl.h ni g_bitmap.h necesaria dado que las declaraciones de las funciones usan INSTANCE.
gracias, lo vere.
por lo que vi, javis usa, scale_resolution y el set_mode ambos a 0, y creo que eso ademas de lo otro anda mal.
por eso en el codigo de ahora puse unos cuantos cambios mas.
listo, joseba, ya los agregue...
ahora realmente no puedo meterme con el tema de los RGB-BGR
Quote from: SplinterGU on October 30, 2012, 11:46:28 PM
listo, joseba, ya los agregue...
ahora realmente no puedo meterme con el tema de los RGB-BGR
Ok, gracias.
He añadido alguna cosa más a la lista, pero casi te aviso cuando la lista esté completa.
Splinter, si te sirve para debuguear, te paso el codigo del Monkey vs Robots.
Quote from: JaViS on October 31, 2012, 12:32:55 AM
Splinter, si te sirve para debuguear, te paso el codigo del Monkey vs Robots.
en principio no hace falta... te lo agradezco, pero mantenlo bajo llave.
igual el problema esta en el port de android (y supongo que en iOS tambien) ya que en PC funciona de maravillas.
gracias.
vale venir a recordarte por aca la version sin instalador para linux? o quedaria mal que lo haga? :D
cual es el problema con el instalador actual? no recuerdo.
tail -n +165 bgd-1.0.0-r300-installer.sh > bgd-1.0.0-r300-installer.tar.gz
pero me encantaria saber cual es el problema con el instalador actual? no pisa archivos del sistema, y tiene todo organizadito en una carpeta propia...
con eso consigo sacarle el instalador?! :O :O
eeee no, problema creo que ninguno. solamente que para hacer versiones "portables" de los juegos como con windows sería mas facil tener un paquete ya listo, sin instalador.
bueno, tambien lo puedes copiar de la carpeta de instalacion...
pero vale, ahora recuerdo, si, con eso le quitas el instalador.
el instalador no es mas que un tar.gz con un script delante.
Quote from: SplinterGU on October 07, 2012, 06:41:36 AM
DEBUG
- new debug log format
- new debug levels
- debug console now allow several SHOW
- new debug console commands
- add new instructions for define/activate debug level:
TRACE(debug_level)
0 - disable
1 - only show source lines
2 - source lines + opcodes
3 - source lines + opcodes + stack dump
- disable stdout buffering
Perdon por el volver a un tema viejo. pero te acordás cuales son esos comandos nuevos?
Otra cosa... puedo hacer que la consola de debug (dentro de bennu) imprima info en un txt o en la consola del sistema?
Es que la lista de procesos no me entra completa en 320x240.
Gracias!
usa los cursores para scrolear la consola.
tienes f1 para el help dentro de la consola y ver los nuevos comandos.
no, no se puede sacar la salida a la consola o a un archivo .txt... no por el momento.
Quote from: SplinterGU on October 31, 2012, 08:54:50 PM
usa los cursores para scrolear la consola.
tienes f1 para el help dentro de la consola y ver los nuevos comandos.
buenisimo, muuuchas graciasss!
CTRL + cursores para mover, no lo sabia! :)
de nada...
tienes F1 para el help, y luego a medida que vas presionando las teclas SHIFT, CONTROL o ALT la barra de abajo va cambiando para mostrarte la combinaciones de teclas posibles (teclas de funcion) que puedes usar.
perdon yo tambien por la pregunta, pero, como se sacaba la consola?
alt+c
necesitas compilar con debug y con el modulo de debug.
- se corrije problema con default: al inicio de la linea (sin identar)
- se corrije problema de centrado de pantalla cuando se usa scale_resolution + keep_aspectratio + 16bits (en vertical)
- avoid create maps with w < 1 || h < 1
- default video mode is actual desktop resolution
r307 released!
perdona que te diga pero si he leido bien menuda cagada, o sea si no seteas el video te va salir una ventana que ocupa toda tu area del desktop...
si, y que problema tienes con eso? siempre deberias hacer un set_mode, no es bueno asumir una resolucion default.
necesito si o si hacerlo asi, para que el modo de video 0,0 funcione luego... sino, no funciona.
si por defecto sigue teniendo fullscreen_mode = false en realidad no afecta nada, afectaria si el fullscreen pasa a estar a true por defecto...
y para que quieres el set_mode 0,0 ?
si, por defecto full_screen esta a false...
se necesita para poder usar resolucion nativa de tu escritorio, o en dispositivos tu resolucion actual... para pasarlo a fullscreen con toda la resolucion, solo deberias hacer set_mode(0,0) con full_screen activado, y listo.
Entonces esto dejaria casi inutiles las funciones del mod_wm que sacaban el tamaño del escritorio nop? xD
en absoluto, esas siguen funcionando lo mas bien.
Si .. funcionar funciona ... pero no aportan nada xD no se si me explico.
como que no?
no en todas las plataformas puedes hacer uno de las funciones de ventana/escritorio, porque en algunos no tienes ni escritorio o simplemente no esta implementado, con esto lo haces a nivel SDL... pero eso no quita que quieras usar estas funciones sin ir a modo completo o definir la resolucion desde un script usando las variables de enviroment directamente y evitar que se ponga en 0,0.
que no le veamos utilidad no significa que no la tenga.
- se corrige crash usando png de 8 bits, grayscale...
es una correccion temporal, porque hay un codigo que creo puso DCelso, que no se porque lo puso, ya que sin ese codigo funciona todo igual (lo que funcionaba, y tambien funciona lo que crasheaba por ese codigo entre otros cambios, que era asumir que todos los grayscale eran de 1bpp)... pero imagino que por algo lo puso... le mande un mail a ver que me responde.
Hola.
Veo que usando scale_resolution_orientation (por ejemplo con valor 1 para girar la pantalla hacia la izquierda) y si uso desúes un filtro scale_mode = SCALE_HQ2X la pantalla vuelve a su orientación original y si deshabilito el filtro usando scale_mode = SCALE_NONE la variable scale_resolution_orientation que tenia a 1 vuelve afectar la pantalla. Esto es un bug o si usas el filtro la orientación de pantalla no funciona ?
Gracias.
me parece que esto ya lo preguntaste, si no lo hiciste tu, igual ya se explico muchas veces que los filtros no funcionan con el scale_resolution.
no es un bug, es una limitacion.
Si, tienes rázon ahora me acuerdo xD La diferencia es que la otra vez no estaba rotando la pantalla y se me olvido por eso xD
jeje... ya me parecia raro...
Por cierto y si no usaramos scale_resolution y tuvieramos una variable llamada por ejemplo screen_orientation en lugar de scale_resolution_orientation (que funciona con el scale), no podriamos rotar la imagen y poder tambien aplicarle filtros ?
Quote from: FreeYourMind on November 24, 2012, 04:09:15 PM
Por cierto y si no usaramos scale_resolution y tuvieramos una variable llamada por ejemplo screen_orientation en lugar de scale_resolution_orientation (que funciona con el scale), no podriamos rotar la imagen y poder tambien aplicarle filtros ?
recuerdame cuales son los motivos por lo que los filtros con el escalado no estan implementado... y obtendras tu respuesta.
no lo se, me imagino por los calculos que le haces a la imagen
basicamente
splinter, no veo ningún correo tuyo,¿ a donde me lo mandaste?
Yo no hice ningún código para los png de 1 bit, o al menos no recuerdo, lo que sí que hicimos una vez fue dar soporte para unos png de 8 bits que traían transparencia y no funcionaban antes del parche,
si, pero si no me equivoco, ahi tambien incluiste para bitmaps en escala de grises que eran de 1 bit... te digo porque me parece que en el codigo decia DCelso...
pero bueno, si tu no has sido, no pasa nada... ya nos enteraremos si algo falla...
Buenas, por fin he decidido pasarme de la r270 a la r307, de momento estoy probando si todo funciona igual, pero ya me he llevado una pequeña sorpresa.
Creo que por los cambios del set_mode(0, 0); que has hecho, ahora al iniciar el juego y al crear la ventana crea 2 tamaños de ventana en lugar de una, primero saca una pantalla a maxima resolucion permitida y despues la ajusta a la que tienes definida en el juego, lo que es incomodo y no queda bien.
siempre fue asi free... siempre se crea la ventana inicial y luego se ajusta a la que tu haces, por eso lo primero que debes hacer es tomar tu el control...
con la anterior version no ocurre, o si ocurre la primera ventana no se queda tanto tiempo y puede que ni siempre la llegues a ver (yo no la veia ya te digo), te lo digo en serio.
y lo curioso es que el printscreen no la consigue pillar (se ve pero la captura ya te pone la ventana ajustada), pero se queda un par de segundos visible...
bueno, me rectifico, si sale, pero es de 320x240 (creo) con lo cual no asusta al usuario, pero ahora te sale una ventana gigante y eso no mola xD
Hay forma de tomar yo el control como dices ? como se hace ? porque yo hago el scale al principio..
Quote from: FreeYourMind on November 25, 2012, 05:45:00 PM
bueno, me rectifico, si sale, pero es de 320x240 (creo) con lo cual no asusta al usuario, pero ahora te sale una ventana gigante y eso no mola xD
Hay forma de tomar yo el control como dices ? como se hace ? porque yo hago el scale al principio..
claro, sale en 320x240, pero siempre salia...
si, claro que puedes... puedes poner la primer orden el set_mode y con eso sera menor el tiempo... aunque si es aplicacion ventana seguro quedara feo.
otra opcion es usar las variables de enviroment VIDEO_HEIGHT, VIDEO_WIDTH y VIDEO_DEPTH y listo...
puedes poner ejemplo de esto ultimo ?
estoy haciendo un set normal en ventana
script, debes hacer un script para lanzar tu juego u otro programa que lance tu programa... podria ser un programa hecho en bennugd sin modulo de video, solo con el modulo system... que setee las variables y lance a tu programa...
ejemplo por favor
setenv(...)
exec(...)
ejemplo, o quieres que te haga el codigo?
diablos, no tengo agregada setenv!
en serio, yo creo que a veces me preguntas solo por molestar... porque no me puedes decir que no sabes hacer un script, ya hablamos 800 veces de lo mismo, y te he dicho 800 veces que te leas un curso de operador basico de pc (y tu has sugerido 800 veces a otros hacer diversos cursos):
bat
set VIDEO_WIDTH=800
set VIDEO_HEIGHT=600
set VIDEO_DEPTH=32
bgdi mijuego
sh
VIDEO_WIDTH=800
VIDEO_HEIGHT=600
VIDEO_DEPTH=32
bgdi mijuego
no funciona en un bat... tienes razón no se hacer que tu script funcione, eso es cierto...
jajaja, como que no funciona?
que error te da?
PD: Prueba ahora
lol, te puedo decir que se me ocurrio antes de leerte ponerle el set y lo hice funcionar, pero hay algo raro, he puesto:
set VIDEO_WITDH=320
set VIDEO_HEIGHT=240
set VIDEO_DEPTH=16
y el width no me sale a 320, parece que sale 4 o 5 veces mas! en cambio el height si funciona bien...
flipo, jamas pensé que se pudieran setear variables internas de un programa antes de llamarlo...
error de tipeo, perdon, ya lo corregi...
es width
me apuesto a que tienes un error en bennu que el width en lugar de pillar el valor que le pasas, obtiene el width de tu desktop!
edito, ahahhahaha, pues claro, si no lo reconoce es normal que haga la chapuza para el width que iba hacer de igual modo xDD
sobre lo de setear valores en el script pensaba que sólo se podia en linux, ahora entiendo porque le cambiabas tan a gusto el os_id antes de llamar el dcb
funciona perfecto, ya te explique que estaba mal escrito...
Quote from: FreeYourMind on November 25, 2012, 09:27:25 PM
sobre lo de setear valores en el script pensaba que sólo se podia en linux, ahora entiendo porque le cambiabas tan a gusto el os_id antes de llamar el dcb
y eso que lo explique cientos de veces... :D
no todas las variables se pueden cambiar... solo algunas que yo puse...
me alegra que lo hayas entendido al fin... :D
oye, lo podia ver en tu codigo, pero como haces que se puedan setear externamente ? public export o algo al definirlas ?
Se me ha ocurrido que seria genial poder definirlas tambien en el prg, variables que pudieran ser seteadas tambien externamente para nuestro juego.
no, no puedes...
hombre, usa getenv para obtener variables de entorno desde tu prg.
que se puediera acceder a las del prg seria brutal (sólo a las que queremos que así sea logicamente, sino todos ponian vidas infinitas)
en fin...
http://php.net/manual/es/function.getenv.php
http://www.cplusplus.com/reference/cstdlib/getenv/
http://c.conclase.net/librerias/?ansifun=getenv
http://pubs.opengroup.org/onlinepubs/009696799/functions/getenv.html
PD: disculpa mi falta de paciencia...
PD2: tu creas/defines la variable de entorno que quieras en la linea de comandos o un script y luego desde tu prg la obtienes y la asignas a la variable local/global/privada que quieras... eso si, no puedes setear una variable desde una consola o un script y pretender obtenerlo desde otra consola o script... son variables de entorno, se definen en el entorno que estes... si estas en una consola tu entorno es tu consola, si estas en un script tu entorno es el script, si quieres que sea global, debes tocar otras cosas, como variables de entorno en propiedades de windows. (en unix puede ser en el .profile o tambien hay otros metodos)
por favor, lee algo de operacion basica de pc, no te lo tomes como un insulto o algo malo, uno no nace sabiendo... pero esto de las variables de enviroment es algo demasiado basico...
no me habré explicado bien.... enfin no te molesto más....
PD: por cierto estaba mirando eso que pones del getenv, porque queria hacer unos experimentos mañana con este tema en el curro, auqnue no es lo mismo que la pregunta que te hacia ...
entiendo que lo que preguntaste (o mejor dicho, entendiste que hacia esto) era directamente modificar desde entorno variables del prg... eso no esta permitido...
puedes tomar desde tu prg variables de entorno y asignarlas a las variables que tu quieras o directamente usar los valores sin asignarlos a ningun lado.
PD: y por eso toda la explicacion y links que te puse.
por cierto tienes un error en el moddesc.exe, le cambiaste los nombres a los modulos no se porque, le pusiste libmod a todos los mod, y ahora el moddesc no te saca las fuciones de los modulos si no los renombras de nuevo
es cierto, no esta actualizado... gracias
si puedes que considere cualquier nombre terminado en .dll o .so (y si no es un modulo de bennu que lo ingnoré como ya hacia antes)
creo tener en claro lo que debe hacer... gracias... ;)
Quote from: FreeYourMind on November 25, 2012, 10:20:22 PM
por cierto tienes un error en el moddesc.exe, le cambiaste los nombres a los modulos no se porque, le pusiste libmod a todos los mod, y ahora el moddesc no te saca las fuciones de los modulos si no los renombras de nuevo
ARRRGGG!!! Diablos he caido!!!
funciona a la perfeccion, y he perdido 2 horas revisando, tenia mi version linux de moddesc a 64bits (se estaba generando en 64bits) y no funcionaba por eso...
hombre, moddesc funciona perfecto...
no tienes que poner lib delante del nombre del modulo, solamente el nombre del modulo.
por ejemplo,
moddesc mod_say
interesante, que otras variables se pueden setear?
ya fueron descriptas en este hilo...
Quote
- Now you can overwrite scale_resolution, scale_resolution_aspectratio and scale_resolution_orientation from enviroment vars
- if OS_ID enviroment var is defined BennuGD use it as global OS_ID
- libvideo, add VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_DEPTH environment vars to change initial video mode
gracias
funcionará el tuyo, el de windows no...
@echo off
echo BENNU FUNCTIONS > function-list.txt
echo --------------- >> function-list.txt
for %%i in (lib*.dll) do echo %%i && moddesc %%i >> function-list.txt && echo ------------------------------------------------------- >> function-list.txt
for %%i in (mod*.dll) do echo %%i && moddesc %%i >> function-list.txt && echo -------------------------------------------------------
que parte de no ponerle lib delante del nombre del modulo no entiendes? con ese for le estas poniendo lib delante.
vamos que he sido claro cuando lo dije.
y tus modulos no tienen lib delante ? mira pruebalo si quieres, voy a pasar de reportar cosas que veo
a ver free... no se trata que dejes de reportar... se trata que ya dije que no puedes poner moddesc libmod_video sino que tienes que poner moddesc mod_video... lo que haces con el for (que lo supieras si me hicieras caso una vez y vieras un curso basico de scripting o al menos comandos DOS) es obtener la lista de archivos del directorio en cuestion y los archivos son lib*... (y ahora vuelvo al principio) que como dije, no puedes hacer moddesc libmod_video (por ejemplo), tienes que hacer moddesc mod_video... o quitas el lib de los resultados devueltos por el for (que no se como se haria en command de windows, pero sí usando msys o algun bash) te va a funcionar ese for.
en linux creo que todas las librerias tienen que llevar prefijo lib* , pero aunque se llamen por ej libmod_video.so libsound.so libSDL.so, su nombre realmente seria sin lib* (en ej anteriores seria mod_video.so sound.so SDL.so), por eso no se podria llamar por el moddesc como dices Free, porque su nombre realmente es sin lib* , el prefijo lib* es simplemente para mejor clasificacion y porque el sistema no las encontraria si pones sin lib* .
alex, antes en linux la version windows era sin lib delante, para los modulos, pero tenia que crear unos links simbolicos para remediar el problema... y eso le daba algunos problemas a josebita, asi que decidi eliminar esos links y crear directamente los modulos como libmod_*... pero el modulo (a nivel logico e interno) sigue siendo sin lib delante.
Tengo un bug:
Esta línea:
cd(directorio_actual);
Provoca este fallo:
error: Incorrect number of parameters. Function: CD MinParams: 0. ( token error: "(" ).
claro...
es correcto...
cd es directorio actual... sin parametros...
Durante muchos años no ha sido así. CD se podía utilizar para recuperar el directorio actual o para cambiar de directorio:
http://wiki.bennugd.org/index.php?title=Cd
Y estoy hablando de código de Josebita del año 2003 xD
Cámbialo por chdir. Si no me equivoco debería funcionar.
Lo he hecho. Ahora estoy peleándome para conseguir exportar a Android correctamente... FUUU xD
chdir es para cambiar de directorio.
Sí, claro. cd te da tu directorio y chdir cambia. Si no recuerdo mal siempre se ha desaconsejado utilizar CD para cambiar de directorio.
Si lo usé, quizás no debería haberlo hecho...
cd no cambia, eso pasa... solo retorna...
quizas deberia tambien dar soporte para que cambie...
para la proxima version se incluye
CD(dir) como alias de CHDIR(dir)
esta nueva CD(...) no retorna el path actual... para el path actual hay que llamar a CD() sin parametros
Splinter .. esto esta muy parado jajaja
muy cierto!
Mientras que funcione lo que hay, me basta y me sobra jaja
Quote from: PiXeL on December 01, 2012, 12:26:51 AM
Durante muchos años no ha sido así. CD se podía utilizar para recuperar el directorio actual o para cambiar de directorio:
http://wiki.bennugd.org/index.php?title=Cd (http://wiki.bennugd.org/index.php?title=Cd)
Y estoy hablando de código de Josebita del año 2003 xD
Esto en fenix era así, no se si bennu cambió la lógica alguna vez (que parece que no), pero CD venía de Current Directory, y ChDir de Change Directory. Por lo que nunca CD pudo cambiar de directorio.
Quote from: i:func.c
....
static int
fxi_cd(INSTANCE * my, int * params) {
char *d = dir_current() ;
int r = string_new(d) ;
string_use(r) ;
if (d)
free(d) ;
return r ;
}
static int
fxi_chdir(INSTANCE * my, int * params) {
const char *d = string_get(params[0]) ;
int r = dir_change(d) ;
return r ;
}
...
por cierto, ¿como va lo del fallo del blitter?
¿Se volvió a atrás en el código para dejarlo como antes? eso que propuso SpliterGu de hacer, para que funcionase lo que funcionaba hasta ahora, hasta que se reconstruyera del todo otra vez esta parte.
No sé si estoy 100% bien enterado, pero informo de lo que sé:
El fallo del blitter sigue estando ahí. SplinterGU tiene información del código concreto que provocaba que se colgase, pero aún no se han solucionado algunas imperfecciones de renderizado.
Y si no recuerdo mal, Splinter revirtió los binarios de la página web a una versión estable de hace un año.
Si supieramos a partir de que version se estropeo nos facilitaria mucho las cosas la verdad xD
Yo antes de irme, ya se detectó en qué versión estaba el cambio que producía que algunos juegos dejasen de funcionar, y splintergu quedó en revertirlos en el trunk de svn hasta que tuviera más tiempo para rehacer esa parte. Lo que no sé es si llegó a hacerlo, y eso es lo que preguntaba ;)-
OFFTOPIC: Perdonadme que no esté tan activo como antes en "esta nuestra comunidad", uff estoy liadisimo en el curro y el poco tiempo que saco lo dedico a dota 2, un juegazo.
el problema que revertir soluciona aparentemente el crash, pero sigue dibujando mal.
la version que estuvimos trabajando con prg tiene tambien un dibujado imperfecto, pero es mejor que la del trunk, asi que tengo que limpiar esta version un poco, probarla un poco mas y subirla... pero sigue siendo imperfecta, aunque en principio no crashea.
Quote from: DCelso on June 30, 2013, 09:58:46 AM
Quote from: PiXeL on December 01, 2012, 12:26:51 AM
Durante muchos años no ha sido así. CD se podía utilizar para recuperar el directorio actual o para cambiar de directorio:
http://wiki.bennugd.org/index.php?title=Cd (http://wiki.bennugd.org/index.php?title=Cd)
Y estoy hablando de código de Josebita del año 2003 xD
Esto en fenix era así, no se si bennu cambió la lógica alguna vez (que parece que no), pero CD venía de Current Directory, y ChDir de Change Directory. Por lo que nunca CD pudo cambiar de directorio.
Quote from: i:func.c
....
static int
fxi_cd(INSTANCE * my, int * params) {
char *d = dir_current() ;
int r = string_new(d) ;
string_use(r) ;
if (d)
free(d) ;
return r ;
}
static int
fxi_chdir(INSTANCE * my, int * params) {
const char *d = string_get(params[0]) ;
int r = dir_change(d) ;
return r ;
}
...
DCelso, estan ambas
cd(dir)
y
cd()
una hace dir change, y la otra retorna el current.
Si quieres que te testée una versión nueva, ya sabes que tengo una buena pila de proyectos para ello :)
Quote from: SplinterGU on June 30, 2013, 08:33:01 PM
Quote from: DCelso on June 30, 2013, 09:58:46 AM
Quote from: PiXeL on December 01, 2012, 12:26:51 AM
Durante muchos años no ha sido así. CD se podía utilizar para recuperar el directorio actual o para cambiar de directorio:
http://wiki.bennugd.org/index.php?title=Cd (http://wiki.bennugd.org/index.php?title=Cd)
Y estoy hablando de código de Josebita del año 2003 xD
Esto en fenix era así, no se si bennu cambió la lógica alguna vez (que parece que no), pero CD venía de Current Directory, y ChDir de Change Directory. Por lo que nunca CD pudo cambiar de directorio.
Quote from: i:func.c
....
static int
fxi_cd(INSTANCE * my, int * params) {
char *d = dir_current() ;
int r = string_new(d) ;
string_use(r) ;
if (d)
free(d) ;
return r ;
}
static int
fxi_chdir(INSTANCE * my, int * params) {
const char *d = string_get(params[0]) ;
int r = dir_change(d) ;
return r ;
}
...
DCelso, estan ambas
cd(dir)
y
cd()
una hace dir change, y la otra retorna el current.
Ahora sí, :D, pero antes no. ;).
Umn, me interesa eso del nuevo cambio, cuando subas a svn avisa plis, a ver si eso soluciona el problema de psp
he agregado un patch temporal para evitar los crash, no es final, porque aun sigue dibujando mal, si se usa size y rotaciones.
me ha costado hacer el commit, porque sourceforge migro, e hizo un tremendo lio con los repositorios, en un momento perdi todo lo que tenia, por suerte solo se habian borrado los fuentes sin cambios.
mmm... posiblemente me he olvidado agregar nuevos fuentes, asi que pido que si alguno intenta compilar, me avise como le va.
Splinter, desde las versiones de 2011 hasta la última estable se tocaron las funciones load y save ?
Me he encontrado con algo extraño, en el offset 44 posición 8 se escribe el valor 193 (C1) que no esta en ninguna parte del código, luego amplie la struct y sospechosamente volvio a aparecer otro 193, pero en otro lado, esta vez en el offset 448.
Nose si es solo coincidencia, no lo hace de primeras ni mucho menos, por lo que es muy difícil de trazar esto.
Quote from: BoMbErLiNk on August 31, 2014, 06:22:02 PM
Splinter, desde las versiones de 2011 hasta la última estable se tocaron las funciones load y save ?
Me he encontrado con algo extraño, en el offset 44 posición 8 se escribe el valor 193 (C1) que no esta en ninguna parte del código, luego amplie la struct y sospechosamente volvio a aparecer otro 193, pero en otro lado, esta vez en el offset 448.
Nose si es solo coincidencia, no lo hace de primeras ni mucho menos, por lo que es muy difícil de trazar esto.
hola, podrias ser un poco mas especifico? save/load de que? fpg? map? estructura de datos? que estructura de datos?
Si, estructura de datos, conectate cuando puedas y te comento con más detalle. ;)
ok, por la noche me conecto.
Hola,
Me estoy leyendo el hilo porque estoy buscando algo que creo esta implementado pero no lo encuentro en el codigo y estoy navegando por este hilo para ver la noticia de cuando lo implemente (si es que lo hice).
Y estoy viendo las respuesta en general que he dado, mas bien la incorrecta forma de hacerlo... puf, que insoportable he sido... imagino que el foro esta repleto de lo mismo...
Asi que siento necesidad de pedir disculpas a todos los afectados por todos los modos inadecuados en que he respondido algunas veces...
Por lo general vivo revolucionado, y nervioso, y no me doy cuenta que descargo ese nerviosismo en mis respuestas o la forma de hacerlo... asi que si alguna vez respondo de forma inadecuada, por favor, haganmelo saber...
Muchas gracias a todos.
SplinterGU
Quote from: SplinterGU on September 17, 2014, 03:20:34 AM
Y estoy viendo las respuesta en general que he dado, mas bien la incorrecta forma de hacerlo... puf, que insoportable he sido... imagino que el foro esta repleto de lo mismo...
Asi que siento necesidad de pedir disculpas a todos los afectados por todos los modos inadecuados en que he respondido algunas veces...
Por lo general vivo revolucionado, y nervioso, y no me doy cuenta que descargo ese nerviosismo en mis respuestas o la forma de hacerlo... asi que si alguna vez respondo de forma inadecuada, por favor, haganmelo saber...
No sé si seré uno de esos afectados, pero no te preocupes por el pasado. Simplemente, intenta vivir más relajado :)
Te lo digo yo, que también he tenido en ocasiones mis "arranques" y en ocasiones es mejor desconectar, que pase un poco el tiempo y mirarlo todo con perspectiva.
Un saludo y mucho ánimo!
:)
simplemente me dio una mala espina releerme... je, no se si lo habre leido a la apurada o que... ni me acuerdo de por que cada contestacion, pero no me gusto leerla... vi que quizas podia causar malestar...
gracias por tu respuesta...
la idea es siempre ir mejorando... y bueno, ese es el plan...
y a darle a bennugd 2... :D
Eres nuestro Linus Torvalds particular jajaja :-*
no sera mucho? gracias por la confianza... :)
Hola.
Hace tiempo splinter hablaba de errores en el blitter o algo, cosa que nunca se me quedo clara ni en que versiones esto se miró.
No se si esta relacionado con los cambios hechos a posteriori para arreglar el tema, pero he encontrado un error usando scale_y.
En la consola GCW Zero hay dos ports, el oficial compilado de la ultima version del repo (r325) y una que saque yo mas vieja y que es la que uso en mis juegos en windows al compilar (r270).
Pues bien usando la r325 cuando cambias el tamaño de un grafico con size_y, se nota un pequeño error grafico en la parte inferior del grafico al modificarse, como una raya que se percibe en toda la area horizontal del grafico.
Esto con la r270 no ocurre, no se a partir de que version esto puede fallar.
hola, el tema que no falla ahi ese scale_y que estas usando, pero luego falla en otros valores...
Lo unico que quiero saber es a partir de que revision exacta esto ocurre ? gracias
meti un nuevo commit de un bug que introduje experimentando con el blitter que hacia que se inviertan las rotaciones y se me escapo un commit, por suerte tenia un .bak que restaure... :D
ayer retome despues de siglos sin tocar bennugd y me dedique a meterle soporte a graficos mas grandes que el tamaño maximo de una textura... ya funciona, con soporte de escalado y rotacion...
no se cuanto tiempo, porque no puede darle el ritmo que le daba antes, pero un par de modificaciones mas y creo que puedo sacar alguna preview... al momento tengo binarios linux, que son los que uso de prueba.
quisiera saber quien esta dispuesto a probar bennugd2 (solo version linux al momento), asi me va diciendo que cosas faltan, como va funcionando, y depurando de todo un poco.
basicamente esta version es con acceleracion por GPU, se quitaron algunas cosas y se agrego alguna que otra mas...
quiero agregar, esta es una version muy beta, porque estoy decidido a sacar bennugd2 en 64bits... no se si mantener las 2, o solo 64bits, o dejar una version 32bits con agregado de datos 64bits...
pero primero quiero tener el producto funcional y despues sacar 64bits... con los nuevos tipos de datos y demas.
excelentes noticias... ;D
si hay version windows la probamos con gusto..
Por supuesto que suena mas que interesante, pero mas arriba mencionas que le agregaste algunas cosas y le sacaste otras, podrias especificar que podemos esperar, para saber que podemos probar?
tendria que armar una lista de cosas...
Quote from: SplinterGU on May 01, 2016, 03:54:36 AM
tendria que armar una lista de cosas...
Y dale viteh
A mi me gustaría poder ayudarte, pero entre que estoy a plena máquina con el editor de tiles, que nunca conseguí hacer funcionar Bennu en mi Kubuntu, y que ando con una versión desfasada (la 12.04), no sé hasta qué punto podría ayudar ^^U Ya me falta tiempo para mis cosas.
Quizás con una versión "portable" (ya sabes que a mi los instaladores me dan repelús :P) pueda darle alguna pasada con el Echo, SBTime (la fase de los modo7 con mapas gigantes podría servir para alguna prueba) y alguna chorradilla que tengo por ahí, y si falla, buscar cual es la función problemática, pero poco más.
hola drumpi,
actualmente no tengo instaladores, y estoy con ubuntu (kde), pero la 16.04LTS.
por otro lado bennugd2 no va a tener modo 7.
ahora mismo estoy reescribiendo todo, va, haciendo pruebas, tenia todo el motor, pero convirtiendo todos los graficos a texturas de 32bits... estoy intentando soportar texturas de varias profundidades, pero parece que si no uso 32bits, pierdo el colorkey, por lo que no tengo zonas transparentes... no estoy seguro si es una limitacion de SDL2/opengl, o algo estoy haciendo mal...
por el momento estoy probando e investigando, a ver si me puedo evitar hacer algunas conversiones... por otro lado, no se si este metodo, evito conversiones, pero pierdo luego en performance en convertir mapas en operaciones mas frecuentes...
excelente trabajo splinter..!!!
hay un ejemplo de modo 7 super completo usando todos las bpp (8/16/32)
haber si alguien se anima a portarlo a bennu... y tendriamos un modo7 decente... y con 32bpp
https://github.com/gustavosbarreto/mario-kart
esta en allegro que creo que se parece a SDL la api
;D
Grande SplinterGU, excelente noticia que sigas con Bennugd2. Cuando tengas versión Windows estaré encantado de testearla. Ahora que la he retomado, habrá versión Wiz? ;D
Gracias a ambos.
Bueno, al final me puse a reescribir todo (previo backup) porque me volvi loco para meterle transparencias por GPU a los graficos de 16 bits (texturas 565), y resulta que tras tanto probar e investigar, me di cuenta que el modo 565, no permite colorkey, el menos en mi GPU y a traves de SDL... asi que no me quedo otra que recuperar el backup y seguir trabajando con la conversion de texturas a 32bits...
y estos dias estuve sobrecargado de problemas y trabajo, asi que no pude seguir con esto... mientras iba escribiendo este mensaje, se me vinieron un monton de ideas a la cabeza sobre este tema, que creo podre cerrar en breve, al menos esta parte del uso de memoria y conversion inteligente (automatica) de profundidad de mapas y/o conversion a texturas segun corresponda.
Hola Juan, me gustaría hacerte una sugerencia a ver que te parece.
Sabiendo que ahora estas en pleno proceso de reescritura de buena parte de BennuGD2 y lógicamente a corto plazo no habrá una release, creo que seria interesante que publicaras la versión definitiva de BennuGD 1.0. Me explico, yo sigo usando la última release que publicaste la r307 (22-11-2012), pero he visto que en el repositorio esta la r330. Dado el nuevo rumbo que supone BennuGD2 y los cambios que tendrá respecto a la actual versión, creo que seria interesante disponer de la release final de BennuGD 1.0, que a su vez cuando salga la 2.0 serviría a modo de legacy.
Como he dicho es solo una sugerencia, por mi parte si he de seguir usando la r307 no hay problema.
Saludos!
podria ser, aunque no se que tan estable es el repositorio
sigo trabajando... bueno... comento algunos cambios..
ahora fade es:
fade( porcentaje, tiempo milisegundos )
fade_on( milisegundos )
fade_off( milisegundos )
asi como existe modulacion de alpha, se agrega modulacion de color.
ahora alpha no se pasa mas por medio de los flags, porque en algunos eran por flags y en otros casos habian variables locales, se normalizo.
ahora se puede especificar el file del background en los scrolls, tambien se eliminan las funciones *put que no especifican el file destino.
las rgb* ahora son 32 bits exclusivamente, asi como las get/put pixels.
esto lo tenia guardo pero lo voy a tirar, bennugd2 soporta sprites sheets como librerias de mapas, el unico limite es el tamaño de la textura maxima.
se eliminan las set_color globales, ahora se definen por variables de modulacion componentes de color, lo mismo el alpha, salvo para textos creados por medio de write*, esos se les permite modificar por text.
scroll sobre mapas es accelerado y permite cualquier tamaño de graph e back (segun memoria, claro esta), lo cual significa que se pueden rotar los scrolls y hacerles zoom, desde GPU.
no se, me estoy olvidando un monton de cosas... pero bueno, voy a tener que crear algun documento, creo que pronto podre sacar una version alpha o beta...
TODO muy interesante :)
Mola mola mola :D
Va a haber cosas que echaré de menos en Bennu2 (al menos, mientras no se implementen), pero da igual, para eso tenemos Bennu1 :D
Todo lo que sea mejorar, es bienvenido :)
A ver ahora cómo lo portamos a la lavadora LOL
PD: Parece que vuelve a haber actividad en el foro. Por cada avance que publica uno, provoca que otro publique el suyo :P
gracias!
drumpi, que cosas vas extrañar? (a ver si estan o no implementadas, porque al final implemente mas cosas de las que pensaba)
PD: por otro lado, esto no es una rivalidad, por favor, no intenten generar rivalidad donde no hay con esos comentarios... aca no hay rivalidad de nada, a mi me alegra mucho (y me enorgullece) que exista PixTudio y cualquier otro fork de BennuGD...
Rivalidad ninguna, este es el mejor ambiente posible :)
De hecho, como parten de una base parecida, tanto PixTudio como BennuGD2 pueden aprovechar mejoras que implemente uno u otro.
Por otro lado, tengo planes de dar soporte también a BennuGD (1 y 2) en PixTudio Project Manager
Gracias PiXeL, eso seria genial!
Quote from: PiXeL on May 16, 2016, 12:52:44 PM
Rivalidad ninguna, este es el mejor ambiente posible :)
De hecho, como parten de una base parecida, tanto PixTudio como BennuGD2 pueden aprovechar mejoras que implemente uno u otro.
Por otro lado, tengo planes de dar soporte también a BennuGD (1 y 2) en PixTudio Project Manager
Eso es bueno, yo con Div GO tampoco veo que haya rivalidad con ningún div-like, esto nos beneficia a todos. :D
asi es AmakaSt
¿Rivalidad? Creo que me has entendido mal :D
Me refería a que, por ejemplo, por cada cosa que publico del editor de mapa de tiles, aparece Momia con algo de gameplay de su demo de Spiderman, tu de Bennu2, Josebita o Pixel de PixTudio, Amaka de DivGo o Ulthar con su creador de aventuras, y eso genera que otro hable de su respectivo proyecto, y otro post y otro :D :D :D
¿Que qué voy a echar de menos? Todavía no hay nada seguro, pero para empezar tanto BennuGD2 como Pixtudio se van a centrar en los 32bits de color, y aun tengo aparcado FenixLand, que iba a ser un juego en el que quería usar la paleta de color para provocar transiciones suaves entre el día y la noche, algo imposible en 16 o 32 bits sin recurrir a complejos efectos de iluminación y cambios de gráficos.
O los cambios de color en el prota en función del poder que esté usando.
Por no hablar de los juegos que sigo haciendo para GP2X y Wiz, para los que no hay SDL2 portado (aunque estén en desuso, me las sigo llevando de vacaciones, y siempre cae una partidita a algún juego mío o a algo que haya hecho alguien y no tengo en las otras).
Pero digo que no es nada seguro porque debería centrarme ya en producir cosas para PC, y según los planes, la próxima revisión del Echo va a incluir efectos que sólo se podrán ejecutar en la potencia extra de un ordenador (la Wiz se me queda pequeña, si no consigo arreglar el último motor de scroll tileado).
es bueno aclarar... gracias...
ahora la transcision de dia a noche la vas a poder hacer mucho mas simple ahora, con la modulacion de colores. cambios de color algo se puede hacer.
con respecto a todo lugar donde no esta portado sdl2, pues ahi si lo extrañaras... al menos por el momento, luego quizas se requiera solo opengl...
exacto algunas plataformas no soportan SDL2 asi que toca dejar
alguna version aparte(deprecated/unsupported) SDL1 para el que quiera tomarla y portarla a la plataforma X
;D
bien, me he vuelto loco hoy con la screen_get(), pensaba que no capturaba por mas que intente mil codigos diferentes... y finalmente era que me habia olvidado que ahora los cpoints no son necesarios definirlos a nivel codigo C, colo lo era en bennugd y fenix, donde se les ponia un centro X e Y con un valor alto, ahora simplemente se centran al medio si no existen cpoints, los cpoints son cpoints y no valores inventados. asi que estaba dibujando el grafico fuera de pantalla. ( hasta que me di cuenta.. :D )
en fin, ya hay screen_get()! pero es infinitamente lento el get del render de video, de un proceso de 1600fps, si estoy capturando constantemente pasa a 135fps, esta bien que tengo una intel y que me sobran fps, pero igual la caida de rendimiento es terrible. tengo que agregar que la operacion esta usando la menor cantidad de operaciones posibles, y capturando solo cuando se pide de pantalla... estuve cureoseando un poco el codigo de SDL, lo que toca de opengl, y la verdad que parece que SDL hace una cantidad tremenda de conversiones sobre los datos graficos... no se si son realmente necesarias todas, pero bueno, las hace...
en fin, creo que mañana me pondre a trabajar en el cross para windows, a ver si puedo generar un binario para testear...
espero no asustarlos como quedo el lenguage, de todo lo que recorte, el nombre de funciones compatibles que elimine, y el cambio de algunas funciones... por ejemplo, todas las que eran *TEXT*, pasan a ser WRITE_*, salvo TEXT_WIDTH y TEXT_HEIGHT.
tampoco se si tome la mejor decision, pero al menos estan (casi todas) agrupadas por categoria.
otra duda que tengo es si meter las screen_put, screen_xput, etc... creo que no son necesarias, pueden hacerse un proceso "fondo" para eso, cuando se necesite...
en fin, mientras sigo avanzando...
Hasta donde yo sé, las SCREEN_PUT, PUT, etc estaban por dos razones (tu que te has leido el código deberías saberlo mejor que yo):
- Las operaciones sobre el fondo de pantalla son más rápidas que sobre los graphs. No me preguntes cómo, pero creo que era algo sobre dibujar sobre el render frente dibujar sobre una SDL_surface y posteriormente las funciones de render.
- Para los novatos, PUT_SCREEN es tremendamente claro: cojo un gráfico y lo pongo de fondo de pantalla. Más que MAP_PUT, que tienes que saber que el fondo es el file 0 - graph 0.
es 1 proceso, no hace mucha diferencia, porque solo es cuando se necesita...
pero tampoco complica mucho agregarlo... asi que lo voy a agregar.
las map_put, solo deje 2, map_put y map_xput (con mas funcionalidad de la que ya existia)
nueva estructura de archivos bennugd (librerias/modulos)
bajo nivel:
libbggfx
libbginput
libbgload
libsdlhandler
usuarios:
libmod_gfx
libmod_input
libmod_misc
libmod_sound
el background ahora se maneja por variables, tipo GRAPH, y tiene todas las caracteristicas de los mismos, escalado, rotacion, modulacion de color, mirror, etc.
ahora estoy trabajando en las colisiones, las colisiones pixel perfect desaparecen... ahora van a se podra definir en cada proceso el tipo de colision, si circular o rectangular, con lo que se comprobaran colisiones de formas circulares contra formas rectangulares, rectangulares contra rectangulares y circulares contra circulares, tambien se tendra en cuenta rotaciones y escalados (que venia faltando en la rectangular)
¿Y por qué desaparecen las colisiones pixel perfect?
Quote from: SplinterGU on May 26, 2016, 03:03:49 PM
ahora estoy trabajando en las colisiones, las colisiones pixel perfect desaparecen... ahora van a se podra definir en cada proceso el tipo de colision, si circular o rectangular, con lo que se comprobaran colisiones de formas circulares contra formas rectangulares, rectangulares contra rectangulares y circulares contra circulares, tambien se tendra en cuenta rotaciones y escalados (que venia faltando en la rectangular)
Seguro que hay una buena razon para esto, pero no puedo evitar lamentar la perdida de una de las mejores features de BennuGD y DIV en general.
Quisiera pedirte que consideres la posibilidad de incluir colisiones elípticas y rectangulares. Cuadradas y Circulares a veces se quedan cortas.
Quote from: Drumpi on May 26, 2016, 04:45:09 PM
¿Y por qué desaparecen las colisiones pixel perfect?
porque bennugd2 es GPU, no tiene render por software, bajar texturas del render (que es donde hay rotaciones y escalado nativo) es pesadisimo, entonces no habra pixel perfect.
Quote from: JaViS on May 26, 2016, 05:12:42 PM
Quote from: SplinterGU on May 26, 2016, 03:03:49 PM
ahora estoy trabajando en las colisiones, las colisiones pixel perfect desaparecen... ahora van a se podra definir en cada proceso el tipo de colision, si circular o rectangular, con lo que se comprobaran colisiones de formas circulares contra formas rectangulares, rectangulares contra rectangulares y circulares contra circulares, tambien se tendra en cuenta rotaciones y escalados (que venia faltando en la rectangular)
Seguro que hay una buena razon para esto, pero no puedo evitar lamentar la perdida de una de las mejores features de BennuGD y DIV en general.
Quisiera pedirte que consideres la posibilidad de incluir colisiones elípticas y rectangulares. Cuadradas y Circulares a veces se quedan cortas.
elipticas se me complican las matematicas, desconozco si hay una forma matematica de hacerlo posible (considerando rotaciones y escalado), de haberla, si alguien puede aportar ayuda al respecto, sera bienvenida... con respecto a la colision box, obviamente las rectangulares estan incluidas.
La otra opcion que pienso agregar (no creo en la primera version) es multiples formas de colision por grafico, esto es 2 circulos 1 rectangulo o 5 rectangulos, etc...
Ok, no había caido en lo del espacio de memoria de GPU (la falta de costumbre ^^U).
Lo que habría que mirar, sin embargo, es que si estamos en una GPU, debería ser factible comprobar colisiones triangulares u otras formas geométricas, al fin y al cabo, se diseñaron para eso, para agilizar el cálculo de colisiones de polígonos (es lo que se usa en los motores de físicas). Tener funciones de colisión con lineas, hexágonos (que no son más que 6 triángulos) o similares puede ser el sustituto perfecto. Tengo que buscarte un buen tutorial de físicas de colisión 2D en Unity para que los veas, Splinter, te puede dar ideas... si es que se puede llevar a cabo.
Es más, lo mismo ni siquiera tienes que hacer tú los cálculos para las box y los círculos de colisión :P
Quote from: SplinterGU on May 26, 2016, 07:25:06 PM
Quote from: Drumpi on May 26, 2016, 04:45:09 PM
¿Y por qué desaparecen las colisiones pixel perfect?
porque bennugd2 es GPU, no tiene render por software, bajar texturas del render (que es donde hay rotaciones y escalado nativo) es pesadisimo, entonces no habra pixel perfect.
Creo que éste es el exacto motivo por el cual Joseba decidió tener copia de los mapas en RAM y en VRAM. Aunque, si es sólo para colisiones pixel perfect, creo que se podría guardar una copia de los fpgs en 1bpp para comprobar colisiones.
Por otro lado, ¿y map_get_pixel? ¿Funcionaría con GPU?
yo tambien tengo copias de los mapas en memoria, map_get_pixel trabaja sobre memoria, pero sin render por software, ya que no hay rotaciones ni escalados necesarios esta funcion, se leen directo.
por otro lado, funcionaria con gpu, pero lento.
las condiciones triangulares que plantea drumpi, me suenan ser un poco costosas en cpu, por lo poco que vi por ahi, creo que se necesitaria un mesh (malla) para eso, voy a analizar que tan factible es hacer estos calculos por GPU.
Hay librerias Boost Y PTHREAD compatibles con windows ,linux, android, macos
si deseas te colaboramos en el codigo que sea lento... o en que te podemos ayudar seria un placer...
pthread la uso, estoy mas pensando en opencl... pero bueno, estoy investigando sobre colisiones complejas, digamos que circulares y rectangulares (estas ultimas no rotadas) son simples, pero cuando mezclamos circulares con rectangulares y rotadas o rectangulares con rectangulares rotadas la cosa se complica un poco... tengo ideas para resolverlo de forma matematica, por medio de un par de formulas, evitando bucles y cosas apañadas, pero quiero leer un poco mas a ver si encuentro algo mejor ya hecho... pero apuntando a opencl podria hacer colisiones con poligonos irregulares... creo que hacer lo tipico en colisiones 3D sobre 2D optimizado por GPU, donde puedo procesar muchas comprobaciones en paralelo (quizas incluso el chequeo de collision contra todos los procesos en 1 solo paso) y no tener que iterar desde el proceso principal, sino hacerlo directo en el GPU... creo que el rendimiento seria asombroso... no lo se, todo es teoria por ahora...
claro que toda ayuda es agradecida... si tienen alguna experiencia en eso (opencl, o algoritmos de collision, no pixel perfect, sino en cuanto a poligonos irregulares) bienvenido sea...
;D
yo creo que lo mas optimo seria incluir una librería
como box2d o chipmink que ya vienen aceleradas por hardware...
para no reinventar la rueda...
p
Quote from: l1nk3rn3l on May 27, 2016, 04:27:18 PM
;D
yo creo que lo mas optimo seria incluir una librería
como box2d o chipmink que ya vienen aceleradas por hardware...
para no reinventar la rueda...
podria ser tranquilamente, voy a echarle un ojo a eso... gracias!
Yo se que por ahi ya cansa el topic, pero realmente estoy lamentando la perdida de soporte a graficos de 8 bits y el manejo de paletas. El pallete swap, rotation, etc es algo muy util y que ya pocos engines conservan.
No hay forma de implementarlo de alguna manera compatible con en nuevo engine?
JaViS, lo más parecido a eso en OpenGL es utilizar "color tints".
http://gamedev.stackexchange.com/questions/43294/creating-a-retro-style-palette-swapping-effect-in-opengl
La otra opción sería absurda, porque requeriría actualizar todos los mapas en memoria en cada color swap que hicieras.
Quote from: JaViS on June 01, 2016, 01:22:07 PM
Yo se que por ahi ya cansa el topic, pero realmente estoy lamentando la perdida de soporte a graficos de 8 bits y el manejo de paletas. El pallete swap, rotation, etc es algo muy util y que ya pocos engines conservan.
No hay forma de implementarlo de alguna manera compatible con en nuevo engine?
te entiendo, y lo intente, pero no se permiten texturas con colores indexadas, al menos en mi tarjeta de video... lo mismo que las transparencias en mapas de 16bits (todo quizas porque el renderer es de 32bits, no probe con renderers de otras profundidades)
ahora estoy leyendo un poco sobre librerias fisica, por ahora la decision que tengo es integrar un motor de fisica a bennugd, posiblemente chipmunk..
Quote from: panreyes on June 01, 2016, 01:36:49 PM
JaViS, lo más parecido a eso en OpenGL es utilizar "color tints".
http://gamedev.stackexchange.com/questions/43294/creating-a-retro-style-palette-swapping-effect-in-opengl (http://gamedev.stackexchange.com/questions/43294/creating-a-retro-style-palette-swapping-effect-in-opengl)
La otra opción sería absurda, porque requeriría actualizar todos los mapas en memoria en cada color swap que hicieras.
ahh, o sea, haces el grafico en 50 shades of gray y despues le chantas tinturas?
Es una forma...
Mmmm, o lo que dice de "paletted texture" parece interesante: crear un shader que lea un pixel del gráfico, por ejemplo, el valor del color azul (ya que cada componente es de 8 bits), y lea de una tabla de 256 posiciones un color RGBA, y se pinte en dicha posición. Si se puede aplicar un shader a un gráfico concreto, podría ser la solución.
Para los que no lo sepan: un shader es una pequeña función que se ejecuta en la tarjeta gráfica, y que sirve para aplicar efectos gráficos exclusivamente, en lo que se llama post-proceso (la fase después de hacer los cálculos con la CPU y antes de dibujar en pantalla... Lo que en BennuGD pasa justo después del frame y antes de comenzar a ejecutar de nuevo el código).
Podría servir: se carga un MAP de 8 bits en una SDL_surface o lo que use OpenGL de 32 bits, aunque sólo le estemos dando valor a la componente alpha del pixel RGBA, cuando está en la gráfica se le aplica un shader con la tabla de valores de la paleta y listo. Lo que ya no sé es cómo de difícil sería de implementar, el cómo pasar la información de la paleta al shader (no haría falta al revés, si mantenemos una copia de la paleta en RAM, eso ocupa poco y es común a los gráficos). No es óptimo en memoria, pero no nos dejan mucho margen de maniobra... a menos que se hagan auténticas locuras (que cada pixel de un mapa de la gráfica en 32bits contenga la información de 4 pixels de un .map 8bits...).
Debería irme a la cama.
todavia no probe nada shaders
bien, voy a aparcar un momento el tema de las fisicas... voy a concentrarme en meter multiprocesamiento en el core (para paralelizar la ejecucion de procesos) y en bennugd 64bits, agregando tambien nuevos datos 64bits.
creo que esto es mas importante ahora que luego tener que cambiar todos los modulos que tengo escritos.
espero con la multitarea lograr aun mejor performance.
Quote from: SplinterGU on June 07, 2016, 03:32:18 PM
bien, voy a aparcar un momento el tema de las fisicas... voy a concentrarme en meter multiprocesamiento en el core (para paralelizar la ejecucion de procesos) y en bennugd 64bits, agregando tambien nuevos datos 64bits.
creo que esto es mas importante ahora que luego tener que cambiar todos los modulos que tengo escritos.
espero con la multitarea lograr aun mejor performance.
Eso va a ser un cambio realmente importante :D
Pues mucho ánimo con la tarea.
Si ves que no todo se puede paralelizar, pues te centras en lo qe sí se pueda, y poco a poco se irá mejorando. Si de momento se puede paralelizar la ejecución de los procesos, dejando el render final como un único hilo, pues se hace, mejor tener un 50% de ejecución paralela y otro 50% de secuencial que todo secuencial, o todo paralelo si Bennu2 se retrasa hasta 2025 :P
Ah, y mucha suerte con los tipos de 64 bits, no queremos que pase como con Fenix 084 ;)
Desde aquí todo mi apoyo :)
gracias a ambos... espero sea un cambio importante...
Quote from: Drumpi on June 07, 2016, 05:10:37 PM
Pues mucho ánimo con la tarea.
Si ves que no todo se puede paralelizar, pues te centras en lo qe sí se pueda, y poco a poco se irá mejorando. Si de momento se puede paralelizar la ejecución de los procesos, dejando el render final como un único hilo, pues se hace, mejor tener un 50% de ejecución paralela y otro 50% de secuencial que todo secuencial, o todo paralelo si Bennu2 se retrasa hasta 2025 :P
Ah, y mucha suerte con los tipos de 64 bits, no queremos que pase como con Fenix 084 ;)
Desde aquí todo mi apoyo :)
algunas cosas se pueden paralelizar y otras no, por cuestiones logicas y otras que escapan a bennugd.
que paso con fenix 084?
Hasta donde me explicó Slainte, la versión 0.84 de Fenix sufrió grandes cambios de limpieza de código, añadieron nuevas funcionalidades, optimizaron mucho código y se hizo algo con los tipos de variables. Creo recordar que se añadieron los FLOAT como nuevo tipo, y eso provocó muchas inestabilidades y bugs, y la versión 0.84 pasó a ser conocida como la más inestable de todas (al menos, por mi parte).
Gran parte de los fallos se corrigieron en una versión 0.84 de SVN no oficial, y en una posterior 0.84b, que aunque más estable, introdujo un par de errores aparte. Aquella fue la última oficial por parte del Fenix Team, el resto ya lo sabes tu mejor que nadie porque fue la que cogiste tu.
Creo que la 0.84 fue también la que introdujo el curioso bug de la variable local que no se podía usar, porque nunca se modificaba. Se "resolvía" creando una variable local que llamábamos "antibug", que no se usaba nunca.
por suerte, al momento, esto no esta pasando...
y al momento, hay grandes cambios estructurales...
bueno, news...
tras pasar varios dias tocando a fondo el core, debo decir que:
- se agregan nuevos tipos de datos: int64, qword, long (alias de int64), bool (alias de int64) y double.
- la vm ahora es 64bits.
- los binarios ahora son 64bits (aca debo comentar que luego voy a tener que darle una vuelta a todo el motor otra vez para poder generar binarios de 32bits con soporte de estos nuevos tipos de datos 64bits. Por que? Porque ahora el motor espera que los punteros sean 64bits, y en 32bits los punteros son 32bits, por lo que podria tener algun problema si no controlo adecuadamente esto.)
- pase a cmake (despues de perder unas cuantas horas peleando con autotools [autotools 10 - Splinter 0])
me queda generar la bgdtrm + bgdi + modulos (estan a medias)
quiero tambien mencionar que encontre una buena cantidad de bugs en los casteos de datos, corregi una parte (quizas todos), me falta testeo, pero hasta que no tenga el interprete no puedo probar.
toque bastante, asi que bennugd quedo un poco cambiado, no en estructura, pero hay cambios por todos lados.
ahhh, una contra a esto, es que posiblemente ahora que la vm es de 64bits, el binarios 32bits (quizas, quizas no), pierda un poquito de performance.
Evolución :)
La duda que me queda es... ¿bool es alias de int64? xD
¿Bool no viene de Boolean (true|false)?
una cosa es lo que ocupa su definicion, otra cosa son los valores que toma
Aún así, me resulta gracioso xD
Son 64 bits, de los cuales 63 no sirven para nada.
la unidad de la vm siempre fue el tamaño de la palabra, hasta ahora fue 32bits, ahora es 64bits... por que esto? hay muchas razones para hacerlo asi, pero la principal es por performance.
puedo tranquilamente cambiar bool que sea un alias de byte, pero eso no cambia que internamente en la VM ocupe 64bits, simplemente a nivel usuario (en estructuras y cuando se usa para salvar/cargar) ocupa 1 byte, pero cuando se mueve dentro del motor ocupa 64bits (todos los datos ocupan al menos 64bits)
de hecho lo voy a cambiar.
¡Qué interesante!
Gracias por tenernos informados :)
¿Todas las variables ocupaban 32bits antes? ¿Y ahora 64? Pensaba que se agrupaban las variables del mismo tipo para ahorrar memoria (por ejemplo, si se declaraban 3 bytes seguidos, entre los tres ocupaban un int32)... o al menos en las structs tenía entendido que era así (creo que lo leí en el manual de DIV).
Es que si antes también ocupaban 32bits todas las variables (salvo strings, claro), me ahorro en el Echo tanto tipo diferente de datos y de tratar de tenerlos agrupados declarándolas a la vez, y las pongo todas en int y ya no tengo las pegas que tenía con el port de Wii LOL.
Me voy a ver la conferencia de M$ en el E3
Quote from: Drumpi on June 13, 2016, 03:33:34 PM
¿Todas las variables ocupaban 32bits antes? ¿Y ahora 64? Pensaba que se agrupaban las variables del mismo tipo para ahorrar memoria (por ejemplo, si se declaraban 3 bytes seguidos, entre los tres ocupaban un int32)... o al menos en las structs tenía entendido que era así (creo que lo leí en el manual de DIV).
Es que si antes también ocupaban 32bits todas las variables (salvo strings, claro), me ahorro en el Echo tanto tipo diferente de datos y de tratar de tenerlos agrupados declarándolas a la vez, y las pongo todas en int y ya no tengo las pegas que tenía con el port de Wii LOL.
Me voy a ver la conferencia de M$ en el E3
si no estan en structs no estan agrupadas... estan alineadas, para mejor performance.
...
OK, entonces iré revisando el código con eso en mente.
bennugd2-64bits rulando! (por el momento linux64 solamente, tengo que ver como armar el cmake cross para compilar en principio w64)
necesito algun servidor git popular o serio, gratis, y que permita proyectos privados, quiero mantenerlo el proyecto en privado hasta tener una version release.
necesito tambien ayuda con programas de ejemplos, inicialmente quiero testear el compilador, todos los tipos de datos, arrays, structs, sizes, conversiones de un tipo a otro, todos los tipos de calculos basicos (suma, resta, division, multiplicacion, modulo, incremento, decremento [pre y pos], etc) entre todos los tipos de datos, uso de punteros (lectura y escritura), salida a pantalla a traves de say es suficiente en esta parte.
si alguno se ofrece, sera muy agradecido, la idea es hacer un set de programas de test e incluirlos con el producto.
Quote from: SplinterGU on June 21, 2016, 03:27:15 PM
necesito algun servidor git popular o serio, gratis, y que permita proyectos privados, quiero mantenerlo el proyecto en privado hasta tener una version release.
bitbucket
Quote from: JaViS on June 21, 2016, 03:50:31 PM
Quote from: SplinterGU on June 21, 2016, 03:27:15 PM
necesito algun servidor git popular o serio, gratis, y que permita proyectos privados, quiero mantenerlo el proyecto en privado hasta tener una version release.
bitbucket
voy a probarlo, gracias!
Bitbucket funciona muy bien. Si luego quieres visibilidad yo optaria por github cuando el repp ya no sea privado.
ya subi a bitbucket sin ningun problema, muy rapido.
si, pense en github, segun entiendo lo bueno de git es que despues puedo pasarlo a otro servidor y mantengo el historial y demas.
gracias
Yo empecé fenixlib como una carpeta dentro de Smart Fpg Editor en bitbucket... de esa carpeta hice un repositorio en Bitbucket y de ese repositorio lo pasé a github y el historial de los commits se mantuvo todo.
Y todo esto sin demasiada experiencia en git cuando lo hice, bastó informarse un poco...
creo que llegué tarde, pero GitLab (https://gitlab.com) ofrece repos gratis privados, ademas de un monton monton de otras cosillas (integracion continua, builds automatizados, compatibiliad con docker, hosting de pagina web del proyecto, etc, etc, etc).
nunca es tarde... lo revisare luego para la release final...
gracias a ambos!
Yo iba a proponer un repo en GitHub, tengo una cuenta que permite repos privados, solo tendría que darte acceso al repo.
gracias, por ahora ya tengo un privado, y luego pasare a publico.
he incorporado algunas novedades, como ser declaraciones de variables privadas dentro del codigo de la funcion, o globales fuera, sin necesidad de poner global...end, ni private...end.
ahora todas las variables deben tener un tipo declarado, ya no se permiten mas declarar variables sin tipo (quizas esto lo cambie, no se).
aca pongo un ejemplo tonto
import "libmod_misc";
import "libmod_gfx";
import "libmod_sound";
import "libmod_input";
char * pchar;
char p[]="lalala";
begin
say(pchar);
say(p);
int var1 = 10;
say( var1 );
end
donde pchar y p, son variables globales, y var1, es una privada.
NOTA: Se mantiene la vieja forma global... end, private...end, pero son opcionales.
(por momentos tengo la sensacion que estoy destruyendo el lenguaje)
Me parece adecuado obligar a declarar el tipo de variable. Es una mala practica no hacerlo y puede dar lugar luego a fallos...
splinter no estropees bennu porfa
Hombre, es lo que hacen todos los lenguajes, y hay mucha gente que se ha acomodado a declarar variables por necesidad o porque sólo afectan a parte del código (es muy común en java crear una variable exclusivamente para un bucle for).
Pero también es verdad que es una muy buena práctica el declarar todas las variables al principio del procedimiento/proceso/función, porque así sabes que siempre te van a estar ocupando memoria mientras siga ejecutándose, y lo tienes todo bien localizado.
No veo mal el cambio mientras se mantenga el modelo habitual, para poder seguir definiendo variables locales y públicas, o poder definirlas desde otros ficheros mediante includes. Para mi es importante poder dividir las globales en diversos ficheros .h para saber que corresponden a sus respectivos ficheros .inc y mantener las cosas separadas.
Quote from: SplinterGU on June 29, 2016, 04:05:29 AM
he incorporado algunas novedades, como ser declaraciones de variables privadas dentro del codigo de la funcion, o globales fuera, sin necesidad de poner global...end, ni private...end.
ahora todas las variables deben tener un tipo declarado, ya no se permiten mas declarar variables sin tipo (quizas esto lo cambie, no se).
aca pongo un ejemplo tonto
import "libmod_misc";
import "libmod_gfx";
import "libmod_sound";
import "libmod_input";
char * pchar;
char p[]="lalala";
begin
say(pchar);
say(p);
int var1 = 10;
say( var1 );
end
donde pchar y p, son variables globales, y var1, es una privada.
NOTA: Se mantiene la vieja forma global... end, private...end, pero son opcionales.
Me gusta, tiene mas sentido que la forma anterior. Ademas es mas comodo, siempre me dio PAJA tener que volver hasta la zona de declaracion para poder usar una nueva variable.
Lo que si me rompe tremebundamente las pelotas, y te lo digo asi sin tapujos y de frente, son los IMPORT. No podes hacer que se incluyan solos dependiendo de que funciones se usan?
P.D: ya que estamos modificando el lenguaje, para cuando herencia? ya escribi una vez como se podia implementar de forma basica y me ignoraron completamente, hace falta!
Herencia no sé, pero sobrecarga de funciones podría ser interesante :D :D :D
¿Concretamente qué es lo que querías de la herencia? ¿Algo relacionado con la orientación a objetos?
herencia ya no se, lo de los autoimports podria ser, tendria que pensar un metodo para hacerlo prolijamente y que soporte librerias de usuario.
la otra opcion es hacer un solo core o un interprete estatico y a la mierd* con los modulos
el binario realmente no seria tan grande, creo que seria de menos de 1mb... pero seria retroceder.
por otro lado, esos imports, son todos los imports que tiene bennugd2, no hay mas, solo los inclui porque estaba probando que no me falte ninguna declaracion sin el tipo de dato especificado.
en el ejemplo, solo "libmod_misc" es necesario.
EDIT: Ah, tambien ahora se pueden escribir los numeros hexa como en C. (por ejemplo, 0x1234) (se preserva la forma anterior)
Quote from: Drumpi on June 29, 2016, 02:21:07 PM
Herencia no sé, pero sobrecarga de funciones podría ser interesante :D :D :D
¿Concretamente qué es lo que querías de la herencia? ¿Algo relacionado con la orientación a objetos?
Esto fue lo que propuse hace 4 años. Creo que si se toman el tiempo en leerlo (tampoco es tan largo) y de entender los ejemplos, van a entender cuales son las claras ventajas de contar con algo como esto : http://javis.calepin.co/propuesta-de-sintaxis-para-oop-en-bennugd.html
con respecto a la herencia, no es que te haya ignorado, es que quizas es un poco complejo implementar eso desde C, y meteria demasiada carga.
igual, si tenes el link donde lo propusiste, por favor, compartilo nuevamente
Quote from: SplinterGU on June 29, 2016, 02:32:35 PM
con respecto a la herencia, no es que te haya ignorado, es que quizas es un poco complejo implementar eso desde C, y meteria demasiada carga.
igual, si tenes el link donde lo propusiste, por favor, compartilo nuevamente
acabo de ponerlo un post atras: http://javis.calepin.co/propuesta-de-sintaxis-para-oop-en-bennugd.html
Yo creo que como esta bennu, implementar lo que propongo no es mucho mas. No estoy hablando de implementar objetos a nivel C, si no de implementar un par de features a los procesos de siempre, que estan haciendo falta de OOP.
Si lo pensas bien, los procesos ya son objetos, tienen un scope de codigo y variables propios, solo hay que implementar herencia y metodos.
si, lo vi, disculpa que postee mientras escribias.
no se si es tan simple, lo vere.
Sin leerme el código, no sé qué tan complicado sería de implementar.
Si hay que implementarlo, habría que hacerlo con todas las consecuencias, es decir, pasaríamos de un lenguaje procedural a un lenguaje procedural orientado a objetos, y es un cambio bastante fuerte. Es un cambio de paradigma.
Es que a mi se me ocurre no ser tan extremista. No le he dado tantas vueltas como Javis, y no debería decir nada sin haberlo hecho, pero creo que sería más útil tener unos procesos determinados como si fueran clases (en lugar de ser process una superclase), con sus propias variables/propiedades/atributos que serían sus variables públicas, y unas funciones exclusivamente que funcionen con ese proceso.
A ver si logro explicarme:
process string_class ()
local
string_node pointer lista_strings;
begin
lista_strings = null;
loop frame; end
onexit
id.vaciar_lista();
end
function string_class.add (string cadena)
begin
if (lista_string == null)
string_node nueva = alloc(sizeof string_node);
nueva.cadena = cadena;
nueva.sig = null;
lista_string = nueva;
else
(...)
end
end
function string_class.vaciar_lista ()
(...)
end
No sé si se entiende: creamos un proceso, donde su BEGIN es su constructor (coincido con Javis) pero hay que seguir manteniendo el proceso vivo mediante un bucle; y el onexit es el destructor.
Luego tenemos las funciones que pertenecen a ese "objeto" string_class, que pueden hacer uso de sus variables privadas y publicas (las privadas no se pueden ver desde otros procesos, las públicas sí), y que se podrían llamar mediante el ID del proceso, punto, y la función que le pertenece.
Seguiría siendo más o menos lo que se tiene, pero no llega al extremo de tener un lenguaje orientado a objetos (process no sería un superobjeto, son los propios procesos los objetos). Incluso ayudaría a entender el concepto actual de variables públicas, y probablemente ayudaría a su implementación y uso interno.
Pero eso es lo malo, que es una orientación a objetos "a medias", y eso significa que hay que aprender cómo funciona y las diferencias con otros lenguajes... y que tampoco le he dado tantas vueltas como Javis :D
Lo mismo terminamos con BennuGD2 y BennuGD2++ :D :D :D
Drumpi, lo que propones es exactamento lo mismo que yo propongo, yo voy un paso mas y además agrego herencia. Pero esa es mi idea de como funcionarian los procesos con metodos.
no es tan simple implementar todo esto, y toda orientacion a objetos representa overhead.
ni hablar de la propuesta de TYPE, podriamos tener extends sobre extends sobre extends, infinitas veces, lo que complicaria el TYPE e implicaria no solo mantener datos extra, sino que cada vez que se usa TYPE hacer un barrido terrible en la lista de procesos, navegando por cada tipo hasta llegar al tipo BASE o SEMI-BASE, incluso se podrian mantener tablas para optimizar esto, pero a costo de consumo de memoria y performance.
clases con herencia con diferentes parametros, tambien es bastante complejo.
yo creo que si lo que quieres es ahorrar escribir private, publico o local repitiendo codigo, te conviene usar #define
el cambio propuesto no es tan simple como 1 solo paso, romperia compatibilidad con el sistema actual.
podria llegar a implementar poder poner punto en el nombre de la funcion o proceso, aunque pueda dar conflicto con las variables locales o privadas o publicas de un proceso. tambien podria intentar implementar sobrecarga de funciones, aunque la autoconversion de parametros podria generar severos conflictos.
la pregunta es, todo esto es realmente necesario?
esto es interesante, http://crypto.stanford.edu/~blynn/c/object.html
JaViS, para hacer lo que planteas, creo que seria mejor rehacer el compilador completamente, no en C sino en algun pseudo-lenguaje para hacer compiladores. Y creo que seria mucho trabajo, aun tengo muchas cosas criticas por resolver en el runtime, como ser el tema de las colisiones y/o fisica. no es que te haya ignorado completamente, porque esto mismo ya lo habia leido tiempo atras, pero me parece que son mas los problemas que un OOP traeria al lenguaje que las ventajas. incluso meter overhead al motor cuando muchas veces estamos devanandonos los sesos intentando rascar un par de frames.
quizas algo se me ocurra para acercar un poco a lo que vos queres.
Yo creo que hoy en dia el problema de Bennu en performance no esta en el procesamiento, si no en el renderizado, no me imagino una implementacion de Type restando frames, realmente, pero bueno todo es relativo.
Por otro lado, si no nos ponemos de acuerdo en las ventajas del OOP medio que no hay lugar para una discusion. Habiando usado lenguajes orientados y no orientados a objetos, creo que puedo opinar que es algo que ni se deberia discutir a esta altura, todos los lenguajes evolucionan naturalmente a la orientacion a objetos y las implementaciones son cada vez mas elegantes. Bennu es lenguaje muy interesante, porque de entrada tiene una estructura de codigo muy parecida a los objetos y que queda a medio camino, por lo cual seria hasta muy apropiado llevarlo al siguiente nivel.
Ademas, estamos discutiendo si mejorar la performance de Bennu o si aprovechar para actualizarlo y volverlo competente frente a las alternativas.
Por ahi te cuesta reconocerlo, yo se que tu opinion personal es que OOP no es necesario, -esta bien-, estrictamente hablando, se puede hacer lo mismo con o sin OOP, pero no puedo evitar pensar que pensas asi por falta de experiencia trabajando con lenguajes modernos, OOP tiene muchas ventajas practicas.
Edit: independientemente de mi opinion, sos vos el que lo esta haciendo, no hay lugar para ningun tipo de reclamo, y no quiero que te lo tomes asi, yo insisto porque creo que vale la pena, pero bueno, no creas que lo hago desde una posicion de comodo pidiendo huevadas, entiendo perfectamente el trabajo que requiere y no espero que hagas todo lo que te piden. Con que lo hayas considerado me basta, se que la sugerencia la di.
Hombre, yo entiendo la postura de Splinter, y también es verdad que hay MUCHÍSIMA gente que opina que la OOP es el peor cáncer que asola los lenguajes de programación :D
Tiene sus ventajas y sus inconvenientes, y a estas alturas podría tener más inconvenientes que ventajas, más que nada, por lo dicho: estamos cambiando el paradigma de programación, y además a algo totalmente nuevo, porque creo que no hay ningún lenguaje procedural orientado a objetos (al menos, que yo sepa, tampoco soy un experto), y menos si hablamos de la pseudoconcurrencia de los DIV-like.
Y cambiar el paradigma es cambiar el compilador y parte del intérprete, y aquí volvemos a la idea de BennuGD2 y BennuGD2++.
A mi me gusta la OOP, me parece ordenada y elegante, aunque no uso todas sus cualidades.
Pero en bennu no sé si es buena idea. Se supone que es un lenguaje sencillo para novatos, y siempre hemos tratado de mantenerlo simple. Aun me cuesta entender lo de las variables públicas, porque parecen puestas como un parche (con eso de que el tipo de variable debe declararse con el nombre del proceso y demás) y quizás sea lo más parecido a una OO del código (por eso decía lo de usarlas como objetos, pero nunca hablé de usar herencia, es en lo que no coincido con Javis).
Y hay más cosas que se deben acelerar en Bennu, aparte del renderizado, y es poder aprovechar el paralelismo de ejecución en las CPU multicore, eso le daría al menos un empujón del 25% de velocidad.
Realmente no puedo ponerme de lado de ninguno, en parte por mi cerebro simétrico, en parte porque no soy un erudito de los lenguajes, ni conozco la estructura interna de Bennu. Quizás me incline más en intentar mantener lo que tenemos y que funcione, que en darle un giro radical. Como mucho implementar objetos sólo para usar las variables privadas y públicas de los procesos, o más bien, funciones que "hereden" sólo las variables privadas y públicas de un determinado tipo de proceso, nada más (que no hereden ni código, ni tipo, ni constructores, ni destructores...).
Y oye, que si la sobrecarga es un problema, seguiré llamando a mis procesos mi_proceso1(a), mi_proceso2(a,b,c), etc, etc :D
Quote from: Drumpi on June 29, 2016, 08:10:38 PMes verdad que hay MUCHÍSIMA gente que opina que la OOP es el peor cáncer que asola los lenguajes de programación :D
Quizas con C++ y Java, pero se evolucionó mucho desde entonces
Quote from: Drumpi on June 29, 2016, 08:10:38 PM
pero nunca hablé de usar herencia, es en lo que no coincido con Javis).
[/size]
Para mi es la parte mas interesante, porque es donde mas ahorras codigo.
Quote from: JaViS on June 29, 2016, 05:24:39 PM
Yo creo que hoy en dia el problema de Bennu en performance no esta en el procesamiento, si no en el renderizado, no me imagino una implementacion de Type restando frames, realmente, pero bueno todo es relativo.
Por otro lado, si no nos ponemos de acuerdo en las ventajas del OOP medio que no hay lugar para una discusion. Habiando usado lenguajes orientados y no orientados a objetos, creo que puedo opinar que es algo que ni se deberia discutir a esta altura, todos los lenguajes evolucionan naturalmente a la orientacion a objetos y las implementaciones son cada vez mas elegantes. Bennu es lenguaje muy interesante, porque de entrada tiene una estructura de codigo muy parecida a los objetos y que queda a medio camino, por lo cual seria hasta muy apropiado llevarlo al siguiente nivel.
Ademas, estamos discutiendo si mejorar la performance de Bennu o si aprovechar para actualizarlo y volverlo competente frente a las alternativas.
Por ahi te cuesta reconocerlo, yo se que tu opinion personal es que OOP no es necesario, -esta bien-, estrictamente hablando, se puede hacer lo mismo con o sin OOP, pero no puedo evitar pensar que pensas asi por falta de experiencia trabajando con lenguajes modernos, OOP tiene muchas ventajas practicas.
Edit: independientemente de mi opinion, sos vos el que lo esta haciendo, no hay lugar para ningun tipo de reclamo, y no quiero que te lo tomes asi, yo insisto porque creo que vale la pena, pero bueno, no creas que lo hago desde una posicion de comodo pidiendo huevadas, entiendo perfectamente el trabajo que requiere y no espero que hagas todo lo que te piden. Con que lo hayas considerado me basta, se que la sugerencia la di.
por favor, no me malinterpretes, es claro que no me gusta la OOP, puedo argumentar muchas cosas por las que no me gustan, y en cuanto a experiencia en OOP, actualmente es lo que uso laboralmente, uso varios lenguajes OOP, que me desagradan totalmente, pero en fin... no queda otra.
por otro lado es cierto que no le veo ahora mismo la ventaja, porque se pueden hacer cosas similares pero con mas control, el tema principal es que cambia bastante el paradigma, como bien dijo drumpi, y yo creo que necesita un cambio importante en el compilador, y para meter esfuerzo en tal cambio, creo que seria mejor hacer un compilador completamente nuevo, y ahi es donde caigo en un EXTASIS PAJAL, si tengo que iniciar de cero, sin dudas debere hibernar un buen tiempo para tomar energias y ganas para iniciar algo de cero.
ahora estoy un poco entusiasmado con bennugd2, repasando todo, mejorando muchas cosas, cambiando otras e incorporando nuevas.
quizas con el motor version 2 completo, me pueda poner a experimentar estas cosas para no aburrirme.
pero quiero que no interpretes como que te ignoro o como un NO rotundo, quizas algo de lo que se plantea se pueda implementar, quizas poder implementar algo con DECLARE o algo asi, donde se pueda definir una funcion modelo con sus variables privadas y argumentos, evitando esa complejidad del TYPE (evitando ese TYPE <base> y que traiga todos los derivados), evitar los constructores y destructores, como el cambio de parametros.
lo que digo es:
DECLARE INT A(INT X)
BEGIN
PRIVATE
P;
LOCAL
N;
PUBLIC
M;
END
PROCESS B CLONE A
BEGIN
...code..
END
donde TYPE A no retornaria nada, pero TYPE B retornaria todos los procesos creados B
quizas algo de eso si se podria llegar a implementar.
PROTOTYPE
e incluso tal vez un codigo inicial en el declare, pero esto no estoy 100% que tan simple pueda resultar.
Quote from: Drumpi on June 29, 2016, 08:10:38 PM
Hombre, yo entiendo la postura de Splinter, y también es verdad que hay MUCHÍSIMA gente que opina que la OOP es el peor cáncer que asola los lenguajes de programación :D
Tiene sus ventajas y sus inconvenientes, y a estas alturas podría tener más inconvenientes que ventajas, más que nada, por lo dicho: estamos cambiando el paradigma de programación, y además a algo totalmente nuevo, porque creo que no hay ningún lenguaje procedural orientado a objetos (al menos, que yo sepa, tampoco soy un experto), y menos si hablamos de la pseudoconcurrencia de los DIV-like.
Y cambiar el paradigma es cambiar el compilador y parte del intérprete, y aquí volvemos a la idea de BennuGD2 y BennuGD2++.
A mi me gusta la OOP, me parece ordenada y elegante, aunque no uso todas sus cualidades.
Pero en bennu no sé si es buena idea. Se supone que es un lenguaje sencillo para novatos, y siempre hemos tratado de mantenerlo simple. Aun me cuesta entender lo de las variables públicas, porque parecen puestas como un parche (con eso de que el tipo de variable debe declararse con el nombre del proceso y demás) y quizás sea lo más parecido a una OO del código (por eso decía lo de usarlas como objetos, pero nunca hablé de usar herencia, es en lo que no coincido con Javis).
Y hay más cosas que se deben acelerar en Bennu, aparte del renderizado, y es poder aprovechar el paralelismo de ejecución en las CPU multicore, eso le daría al menos un empujón del 25% de velocidad.
Realmente no puedo ponerme de lado de ninguno, en parte por mi cerebro simétrico, en parte porque no soy un erudito de los lenguajes, ni conozco la estructura interna de Bennu. Quizás me incline más en intentar mantener lo que tenemos y que funcione, que en darle un giro radical. Como mucho implementar objetos sólo para usar las variables privadas y públicas de los procesos, o más bien, funciones que "hereden" sólo las variables privadas y públicas de un determinado tipo de proceso, nada más (que no hereden ni código, ni tipo, ni constructores, ni destructores...).
Y oye, que si la sobrecarga es un problema, seguiré llamando a mis procesos mi_proceso1(a), mi_proceso2(a,b,c), etc, etc :D
estoy repensando el tema de las publicas, para hacerlo mas simple, incluso la sintaxis del declare no me agrada mucho.
tambien por momentos tengo una terrible tentacion del lenguaje un like C, pero luego pienso que si hago eso, en lugar de programar en bennugd2 es mejor programar en C, que seria lo atractivo que me haria programar en bennu en lugar de C?
con respecto a ese 25% creo que lo alcance con pasar el motor a 64bits, probe con el motor en 64bits ese sample que se habia puesto de performance de unos 1000 cuadrados rebotando en pantalla, y en la prueba de 32bits me daba unos ~140fps, ahora en 64bits me da ~187fps.
Quote from: SplinterGU on June 29, 2016, 09:18:43 PM
con respecto a ese 25% creo que lo alcance con pasar el motor a 64bits, probe con el motor en 64bits ese sample que se habia puesto de performance de unos 1000 cuadrados rebotando en pantalla, y en la prueba de 32bits me daba unos ~140fps, ahora en 64bits me da ~187fps.
Que buenas noticias :D
Anda ¿Y eso? ¿Sólo con pasarlo a 64bits? ¿Cómo es posible? ¿El compilador hace uso de instrucciones de ejecución simultánea o algo así? :D
Javis: No sé qué evoluciones ha habido. Desde luego yo programo muy cómodo en Java, no me importa su OOP (lo que no me gusta del lenguaje son las 40 capas que hay debajo, más el intérprete, mas el SO, más... o que no se tenga control alguno del uso de memoria y al final siempre se depende del recolector de basura).
Y he usado herencia y he ahorrado código, pero es algo que rara vez he necesitado programando en DIV, Fenix o Bennu, y si va a dar tantos problemas de implementación, pues no es algo que me quite el sueño, se repite código y ya está: el código de ejecución no es lo que más memoria consume.
Pero son opiniones mías, no os dejeis influir por ellas, vosotros sabeis más que yo de programación.
Javis, ¿Y por qué esa manía de escribir cosas que no se pueden leer? :D :D :D
en procesadores 64 bits el acceso a direcciones alineas a 64bits es mucho mas rapido que a 32bits, y segun esta prueba, parece ser bastante mas rapido...
Eso díselo a los de RARE, que usaron la N64 en modo 32 bits para ganar velocidad en algunos de sus juegos :D :D :D (verídico).
Quote from: Drumpi on July 01, 2016, 12:30:40 AM
Eso díselo a los de RARE, que usaron la N64 en modo 32 bits para ganar velocidad en algunos de sus juegos :D :D :D (verídico).
porque seguramente tenian muchas conversiones de 32 a 64 y viceversa, o corrian en procesadores de 32bits.
en la version 64bits que estoy cocinando, tengo todos los puntos donde se usan mucho procesamiento (runtime, funciones, bytecode bennugd, etc) a 64bits, asi mismo todas las librerias de uso general, con lo que se gana mucho de performance.
el procesador (si es de 64bits) accede mas rapido a datos en memoria alineados a 64bits.
pero bueno, digamos que este rendimiento no es solamente por lo que yo toque de codigo, tambien todas las librerias incluso la SDL ahora son 64bits.
Me parece muy interesante el debate sobre incorporar PPO a Bennu2 y, leyendo lo que ponéis, ambas partes tenéis razón. Considero PPO extremadamente útil para la programación y en videojuegos mas todavía, pero, implementarlo en un lenguaje que nativamente no tiene PPO, como es C, lo veo complicado. Yo buscaría soluciones intermedias.
Como bien dice Splinter, es posible implementarlo cualquier cosa de otra manera, pero el problema es la eficiencia de memoria.
Hace tiempo puse un post donde explicaba una manera de realizar "herencia" pero de variables publicas (http://forum.bennugd.org/index.php?topic=3992.msg64504#msg64504). Resumidamente, se trababa de crear un proceso ficticio con las variables publicas necesarias, y luego declarar los procesos que quieren que las hereden como ese tipo. Para Bennu2 iría un poco mas allá y permitiría poder declarar código dentro de ese proceso ficticio que se ejecutaría en los procesos de ese tipo. Una opción sería implementarlo como las rutinas locales que ya existen, un salto de código al código del proceso padre y luego continuar con el posible codigo extendido del proceso hijo. (no entender padre/hijo como la relacion de Bennu si no como clase y proceso heredado). Evidentemente el código que se ejecute de la clase, debería usar las variables del proceso que lo llama.
De esta manera podríamos definir comportamientos básicos y heredar y crear en arbol comportamientos mas complejos (clase spirte->entidad hereda de sprite->enemigo hereda de entidad->etc..) y sólo añadir el codigo que los caracteriza.
De todas maneras y como conclusión final, todo es mejorable pero ahora mismo, no me veo limitado por Bennu en cuanto a funcionalidad. Me centraría en mejorar el rendimiento y dejaría esto como opcional.
Quote from: SplinterGU on July 01, 2016, 01:10:34 AM
Quote from: Drumpi on July 01, 2016, 12:30:40 AM
Eso díselo a los de RARE, que usaron la N64 en modo 32 bits para ganar velocidad en algunos de sus juegos :D :D :D (verídico).
porque seguramente tenian muchas conversiones de 32 a 64 y viceversa, o corrian en procesadores de 32bits.
No, RARE trabajaba en exclusiva para N64 en aquella época, igual que hizo en NES, SNES y parte de la vida de GC hasta que fue comprada por M$.
Lo que pasaba en aquel entonces es que N64 usaba uno de los primeros procesadores de 64bits, y aun hay debates de si N64 era realmente una CPU de 64 bits o de 32bits (mis conclusiones, de momento, apuntan a una CPU de 32bits en cuestión de registros y demás, pero con bus de direcciones de 64 bits, pero no me hagas mucho caso).
Ahora aquí es al revés, estábamos intentando trabajar a 32bits en máquinas de 64bits, y la conversión es lo que reducía el rendimiento (aparte de todas las mejoras que traen los modos 64bits para acelerar la ejecución).
De todas formas, lo de RARE te lo decía en broma :P
Quote from: Drumpi on July 01, 2016, 12:03:19 PM
Quote from: SplinterGU on July 01, 2016, 01:10:34 AM
Quote from: Drumpi on July 01, 2016, 12:30:40 AM
Eso díselo a los de RARE, que usaron la N64 en modo 32 bits para ganar velocidad en algunos de sus juegos :D :D :D (verídico).
porque seguramente tenian muchas conversiones de 32 a 64 y viceversa, o corrian en procesadores de 32bits.
No, RARE trabajaba en exclusiva para N64 en aquella época, igual que hizo en NES, SNES y parte de la vida de GC hasta que fue comprada por M$.
Lo que pasaba en aquel entonces es que N64 usaba uno de los primeros procesadores de 64bits, y aun hay debates de si N64 era realmente una CPU de 64 bits o de 32bits (mis conclusiones, de momento, apuntan a una CPU de 32bits en cuestión de registros y demás, pero con bus de direcciones de 64 bits, pero no me hagas mucho caso).
Ahora aquí es al revés, estábamos intentando trabajar a 32bits en máquinas de 64bits, y la conversión es lo que reducía el rendimiento (aparte de todas las mejoras que traen los modos 64bits para acelerar la ejecución).
De todas formas, lo de RARE te lo decía en broma :P
RARE! me bloquee completamente, olvide quien era RARE, y pense que te referias a algun emulador... dios mio, que mal estoy...
Haré gala del topicazo de mi tierra ("los sevillanos son unos exageraos"), y te diré que probablemente yo esté peor que tu :D
que les va pareciendo esta sintaxis
import "libmod_misc";
int alto = 12345;
int po()
begin
public int va = 123;
int b;
while(1)
frame;
end
end
po pid;
begin
string var2, var_string;
int id1, id2, id3;
po po1;
po1 = po();
say(po1.va);
let_me_alone();
end
para los curiosos eso genera
Quote
BGDC 2.0.0 (Jul 11 2016 21:13:28)
Bennu Game Development Compiler
Copyright (c) 2006-2016 SplinterGU (Fenix/BennuGD)
Copyright (c) 2002-2006 Fenix Team (Fenix)
Copyright (c) 1999-2002 José Luis Cebrián Pagüe (Fenix)
---- Global variables
[0000:0007] INT ARGC
[0008:0271] ARRAY [33] OF STRING ARGV
[0272:0279] INT OS_ID
[0280:0359] STRUCT FILEINFO:
[0000:0007] + STRING PATH
[0008:0015] + STRING NAME
[0016:0023] + INT DIRECTORY
[0024:0031] + INT HIDDEN
[0032:0039] + INT READONLY
[0040:0047] + INT SIZE
[0048:0055] + STRING CREATED
[0056:0063] + STRING MODIFIED
[0064:0071] + STRING ACCESSED
[0072:0359] + STRING STATECHG
[0360:0487] ARRAY [16] OF STRING REGEX_REG
[0488:0567] ARRAY [10] OF INT TIMER
[0568:0575] INT ALTO
[0576:0583] INT PID
---- Local variables
[0000:0007] INT ID
[0008:0047] STRUCT RESERVED:
[0000:0007] + INT PROCESS_TYPE
[0008:0015] + INT FRAME_PERCENT
[0016:0023] + INT STATUS
[0024:0031] + INT SAVED_STATUS
[0032:0047] + INT SAVED_PRIORITY
[0048:0055] INT FATHER
[0056:0063] INT SON
[0064:0071] INT SMALLBRO
[0072:0079] INT BIGBRO
[0080:0087] INT PRIORITY
[0088:0119] STRUCT __PROCCESS_RESERVED:
[0000:0007] + INT TYPE_SCAN
[0008:0015] + INT ID_SCAN
[0016:0023] + INT CONTEXT
[0024:0119] + QWORD SIGNAL_ACTION
---------- Process 0 (MAIN)
---- Private variables
[0000:0007] STRING VAR2
[0008:0015] STRING VAR_STRING
[0016:0023] INT ID1
[0024:0031] INT ID2
[0032:0039] INT ID3
[0040:0047] INT PO1
00000000000000FF 0000000000000015 string_cat.prg:21
0000000000000092 0000000000000028 PRIVATE 40
0000000000000089 0000000000000001 CALL PO (1)
0000000000000048 LETNP
00000000000000FF 0000000000000017 string_cat.prg:23
0000000000000097 0000000000000028 GET_PRIVATE 40
00000000000000FD 0000000000000000 GET_REMOTE_PUBLIC 0
00000000000000C4 0000000000000000 INT2STR 0
000000000000008C 0000000000000063 SYSPROC SAY (99)
00000000000000FF 0000000000000019 string_cat.prg:25
000000000000008C 0000000000000058 SYSPROC LET_ME_ALONE (88)
0000000000000000 END
22:
---------- Process 1 (PO)
---- Private variables
[0000:0007] INT B
---- Public variables
[0000:0007] INT VA
0000000000000084 000000000000007B PUSH 123
Start 1:
2:
00000000000000FF 0000000000000009 string_cat.prg:9
0000000000000084 0000000000000001 PUSH 1
000000000000009C 0000000000000011 JFLASE 17
00000000000000FF 000000000000000A string_cat.prg:10
0000000000000084 0000000000000064 PUSH 100
0000000000000002 FRAME
00000000000000FF 000000000000000B string_cat.prg:11
000000000000009B 0000000000000002 JUMP 2
End 1:
17:
0000000000000000 END
18:
recorte la parte final del log porque el post solo permite 20000 caracteres
definitivamente voy a retrasar un poco la salida de bennugd2, adios SDL2 para los el render... voy a usar openGL... por que?
aca paso numeros
Quote
*** BennuGD2 con SDL2 ***
max texture size: 8192 x 8192
frames=197 time=11068 fps=17.79906
*** C puro con SDL2 ***
Width of graph.bmp: 27
Height of graph.bmp: 33
frames=242 time=8890 fps=27.221597
*** C puro con OpenGL ***
Width of graph.bmp: 27
Height of graph.bmp: 33
frames=360 time=7865 fps=45.772409
resultado de 10000 (10 mil) procesos con grafico de 27x33, rebotando por una ventana de 640x480 32bits.
maldito SDL2! casi duplica el costo de renderear...
demas esta explicar el motivo de por que quiero pasarlo, ni hablar que puedo de esta forma emplear con opengl trucos, aprovechando nuevas caracteristicas de bennugd para mejorar la performance de rendereado...
ademas, de que segun mis viejos test (el primer ejemplo opengl fue con ese test que hice inicialmente), podia manejar texturas de todas las profundidades (al menos las mas importantes)... (tengo que revisarlo bien, a ver si tenia algun problema o no...)
Splinter, el único problema que le veo a que utilices Open GL directamente es que si luego quieres dar soporte a Vulcan, OpenGLES o DirectX, tendrás que hacerlo manualmente, ¿me equivoco?
SDL2 no renderizaba con OpenGL y Direct3D? ???
Quote from: panreyes on July 12, 2016, 06:35:59 AM
Splinter, el único problema que le veo a que utilices Open GL directamente es que si luego quieres dar soporte a Vulcan, OpenGLES o DirectX, tendrás que hacerlo manualmente, ¿me equivoco?
si, asi es... pero eso no me da miedo... a Vulkan lo tengo en la mira...
Quote from: AmakaSt on July 12, 2016, 08:40:31 AM
SDL2 no renderizaba con OpenGL y Direct3D? ???
si, pero no muy eficientemente.
y con mucho overhead.
el tema es que la arquitectura de SDL2 impide hacer algunas optimizaciones en el uso de opengl.
Quote from: SplinterGU on July 12, 2016, 12:37:21 AM
que les va pareciendo esta sintaxis
import "libmod_misc";
int alto = 12345;
int po()
begin
public int va = 123;
int b;
while(1)
frame;
end
end
po pid;
begin
string var2, var_string;
int id1, id2, id3;
po po1;
po1 = po();
say(po1.va);
let_me_alone();
end
¿Entonces ahí po() es un proceso? Lo digo porque no tiene return y usa frame ¿O finalmente no va a haber distinción entre funciones y procesos? porque a mi me ha resultado muy útil en el último proyecto el tener un proceso esperando una función que había llamado a otros procesos, por aquello de que detiene su ejecución y espera un valor (es lo más parecido a envío de mensajes entre procesos que he visto :)).
Aparte de eso, prefiero no opinar si se va a prescindir de los icónicos "process" o "function", ya sabes que a mi hay ciertos cambios que no me gustan hasta que ha pasado un tiempo y me he acostumbrado.
Respecto a OpenGL vs SDL, para el usuario final va a ser transparente, así que realmente la decisión depende de lo que te sea más cómodo. Si con OpenGL tienes más velocidad, acceso a más profundidades de mapa, más control del sistema, y no supone una pega con las librerías que quieres usar ni con portarlo a diferentes plataformas, entonces usa OpenGL.
¿Algunas de las alternativas te permite ejecutar código en la tarjeta gráfica? Lo digo por aquello que te daba problemas de modificar mapas y demás una vez estaban en la VRAM, y poder aplicar filtros de postprocesado. Y si podemos programar shaders, para modificar los maps en la RAM de la gráfica o el buffer de video justo antes del volcado para, yo que sé, aplicar efecto blur, hacer un croma, modificar los colores para los daltónicos... pues estaría genial :D
po() es un proceso
aparentemente siempre estuvo esa forma de declarar procesos, uno puede no poner la palabra PROCESS delante e incluso tampoco un tipo de dato al proceso
por ejemplo
po()
begin
end
es igual que
process po()
begin
end
el int que agregue es porque estoy probando el compilador
por otro lado, no se pierde PROCESS / FUNCTION, eso sigue estando
pueden probar este ejemplo en la actual bennugd
po()
begin
end
begin
po();
end
Quote from: SplinterGU on July 12, 2016, 04:01:22 AM
definitivamente voy a retrasar un poco la salida de bennugd2, adios SDL2 para los el render... voy a usar openGL... por que?
aca paso numeros
Quote
*** BennuGD2 con SDL2 ***
max texture size: 8192 x 8192
frames=197 time=11068 fps=17.79906
*** C puro con SDL2 ***
Width of graph.bmp: 27
Height of graph.bmp: 33
frames=242 time=8890 fps=27.221597
*** C puro con OpenGL ***
Width of graph.bmp: 27
Height of graph.bmp: 33
frames=360 time=7865 fps=45.772409
resultado de 10000 (10 mil) procesos con grafico de 27x33, rebotando por una ventana de 640x480 32bits.
maldito SDL2! casi duplica el costo de renderear...
demas esta explicar el motivo de por que quiero pasarlo, ni hablar que puedo de esta forma emplear con opengl trucos, aprovechando nuevas caracteristicas de bennugd para mejorar la performance de rendereado...
ademas, de que segun mis viejos test (el primer ejemplo opengl fue con ese test que hice inicialmente), podia manejar texturas de todas las profundidades (al menos las mas importantes)... (tengo que revisarlo bien, a ver si tenia algun problema o no...)
prueba con pixstudio de esto me da
$ ./pxtp lesson6
DEPRECATION WARNING: Setting the bit depth in set_mode is no longer valid
frames=197 time=18471 fps=10.665367
me pregunto por que diablos tal diferencia? quizas los 64bits? ahora mismo usamos SDL2, pero no de la misma forma... mmm... maldicion, creo que voy a tener que intentar hacer un binario 32bits del actual bennugd2.
me gustaria ver hasta donde podemos optimizar el motor... en fin...
Y solo por curiosidad.. cuales son los resultados con el Bennu actual?
Quote from: JaViS on July 13, 2016, 01:43:05 PM
Y solo por curiosidad.. cuales son los resultados con el Bennu actual?
buena pregunta... a ver...
BennuGD (ultima version)
frames=175 time=21539 fps=8.124797
Parece que OpenGL vale la pena. Que desventaja tiene a SDL?
Quote from: JaViS on July 13, 2016, 02:59:47 PM
Parece que OpenGL vale la pena. Que desventaja tiene a SDL?
podria decir que la desventaja es que para soportar otra cosa que no sea opengl habria que hacer el port.
pero por otro lado hay muchas cosas que se pueden hacer usando directamente opengl que no se pueden hacer con sdl2.
En es caso habria que abstraer el modulo de renderizado de modo que puedan existir uno en SDL y uno en OpenGL y que sea facil switchear desde el lenguaje
Quote from: JaViS on July 13, 2016, 03:26:18 PM
En es caso habria que abstraer el modulo de renderizado de modo que puedan existir uno en SDL y uno en OpenGL y que sea facil switchear desde el lenguaje
actualmente el render SDL esta fijo a openggl, asi que es lo mismo, aunque una version a otro render con SDL2 seria relativamente simple.
Ah, o sea, que la capa de SDL a openGL es la lerda, yo pensaba que era todo por software
Una pregunta un poco perdida.. la nueva versión de Bennu será 2D o también hay planes de hacer algo complejo en 3D, con soporte para modelos .obj, etc?
Quote from: JaViS on July 13, 2016, 05:29:37 PM
Ah, o sea, que la capa de SDL a openGL es la lerda, yo pensaba que era todo por software
hay varias cosas... la capa SDL tiene una carga extra importante, y por otro lado, la forma o diseño de como se manejan las texturas y el render hacen que no se puedan usar ciertas optimizaciones GPU... que permitiran ganar un buena cantidad de frames haciendo ciertos trucos que se pueden aprovechar "indirectamente" por nuevas features bennugd.
Quote from: BoMbErLiNk on July 13, 2016, 06:57:04 PM
Una pregunta un poco perdida.. la nueva versión de Bennu será 2D o también hay planes de hacer algo complejo en 3D, con soporte para modelos .obj, etc?
no lo tengo planeado, pero si lo tengo pensado... muy probable...
Más que .obj, lo que habría que mirar sería fbx, que parece que se está convirtiendo en el estandar (Blender, Unity3D, las herramientas de adobe...).
Lo que yo no entiendo es una cosa: SDL está portado a casi cualquier cosa y usa OpenGL, sin embargo, OpenGL no está portado, y en muchos casos es incompatible con la plataforma ???
A mi me gustaría también poder cambiar a mano entre un motor u otro, de hecho, esa era la filosofía inicial de Bennu, pero nunca hubo alternativas ^^U Lo que no voy a pedir a Splinter es que se curre ambos motores cuando ni siquiera sabemos hasta qué punto se va a completar la primera beta de BennuGD2.
Por cierto ¿ya es jueves? ¡¡¡¡¡FELICIDADES, MAESE ASTILLA!!!!!
se va a completar, se va a completar! no llevo tanto trabajado inutilmente...
te acordaste! gracias!
Gracias, pero el mérito es del chivato que tenemos en la parte inferior del foro ^^U
Quote from: Drumpi on July 15, 2016, 01:06:23 AM
Gracias, pero el mérito es del chivato que tenemos en la parte inferior del foro ^^U
jaja! igual fuiste el unico por estos lares... gracias!
r338 liberada!
Habrá un ChangeLog para saber que se Corrigió/Añadió?
me corrijo, era 338... diablos que no veo nada... ahora veo el changelog
bugfixs
r336 | splintergu | 2016-10-26 15:40:26 -0300 (mié 26 de oct de 2016) | 1 línea
- fix bitmap analyze for 32 bits maps
------------------------------------------------------------------------
r337 | splintergu | 2017-03-07 00:55:20 -0300 (mar 07 de mar de 2017) | 2 líneas
- fix build linux
- fix problem with put_screen
Hola Splinter, acabo de bajar la r339 que aun estaba con la r335. Llevo un tiempo apartado del foro, es bueno ver que aun sigues con el desarrollo, muchas gracias por tu esfuerzo y dedicación. Saludos!
Enhorabuena gracias por las mejoras como siempre..
el post es de marzo pero a veces no hay tiempo para leerse todo el foro
;D
de nada! tampoco hice un gran anuncio.
gracias.
Splinter podrías poner el Changelog de la r339 para ver que los cambios. Muchas gracias, a ver si esta semana puedo dedicarle tiempo y rescatar mi viejo proyecto que ya sería hora ;D
bug detectado, cambios en el svn.
- fix crash with use of ternary operator in some conditions.
- add NOP mnemonic
el bug afecta a todos los productos derivados (incluso fenix) (no podemos ser menos que Intel, asi que teniamos que detectar un bug viejo)
el tema esta cuando se tiene una expresion con una suma o resta y luego un operador ternario, aca pongo unos ejemplos, y una nota cuales crashean.
res = ( var2 != 3 ) ? 5 : 2 ;
res = var1 + ( ( 1 != 3 ) ? 5 : 2 );
res = var1 * ( ( var2 != 3 ) ? 5 : 2 );
res = ( ( var2 != 3 ) ? 5 : 2 ) + var1;
res = var1 + ( ( var2 != 3 ) ? 5 : 2 ); // crash
res = var1 + ( ( var2 != 3 ) ? var4 : var3 );
res = var1 + ( ( var2 != 3 ) ? 1 : var3 );
res = var1 + ( ( var2 != 3 ) ? var3 : 1 ); // crash
res = var1 + ( ( var2 != 3 ) ? 1 : ( ( var2 != 3 ) ? 1 : var3 ) );
la condicion del error es cuando se cumple la condicion y el elemento else es un valor constante.
el compilador estaba haciendo una optimizacion que no correspondia.
ejemplo de test completo
PROGRAM crash;
#if __BGD__ == 2
import "mod_misc";
#else
import "mod_say";
#endif
PRIVATE
int var1 = 100;
int var2 = 1;
int var3 = 99;
int var4 = 66;
int res;
BEGIN
// res = ( var2 != 3 ) ? 5 : 2 ;
// res = var1 + ( ( 1 != 3 ) ? 5 : 2 );
// res = var1 * ( ( var2 != 3 ) ? 5 : 2 );
// res = ( ( var2 != 3 ) ? 5 : 2 ) + var1;
res = var1 + ( ( var2 != 3 ) ? 5 : 2 ); // crash
// res = var1 + ( ( var2 != 3 ) ? var4 : var3 );
// res = var1 + ( ( var2 != 3 ) ? 1 : var3 );
res = var1 + ( ( var2 != 3 ) ? var3 : 1 ); // crash
// res = var1 + ( ( var2 != 3 ) ? 1 : ( ( var2 != 3 ) ? 1 : var3 ) );
say(res);
end
Olé, enhorabuena :)
gracias! en el svn pueden ver el cambio para fixear PixTudio
que genio, buenisimo!
Claro, como casi nadie usa esos operadores, pues al final pasan desapercibidos :D
Enhorabuena por el fix, Splinter!!
En serio ¿Alguien usa de forma frecuente los operandos ternarios? ¿Merece la pena su uso?
Quote from: Drumpi on January 08, 2018, 12:30:53 AM
Claro, como casi nadie usa esos operadores, pues al final pasan desapercibidos :D
Enhorabuena por el fix, Splinter!!
En serio ¿Alguien usa de forma frecuente los operandos ternarios? ¿Merece la pena su uso?
yo los uso mucho... :P
Quote from: SplinterGU on January 08, 2018, 01:09:27 AM
Quote from: Drumpi on January 08, 2018, 12:30:53 AM
Claro, como casi nadie usa esos operadores, pues al final pasan desapercibidos :D
Enhorabuena por el fix, Splinter!!
En serio ¿Alguien usa de forma frecuente los operandos ternarios? ¿Merece la pena su uso?
yo los uso mucho... :P
me too!!
¿Y el mnemónico NOP para qué está implementado? En teoría es un operando sin ninguna función, ¿cierto?
Quote from: warrior_rockk on January 08, 2018, 07:52:43 AM
Quote from: SplinterGU on January 08, 2018, 01:09:27 AM
Quote from: Drumpi on January 08, 2018, 12:30:53 AM
Claro, como casi nadie usa esos operadores, pues al final pasan desapercibidos :D
Enhorabuena por el fix, Splinter!!
En serio ¿Alguien usa de forma frecuente los operandos ternarios? ¿Merece la pena su uso?
yo los uso mucho... :P
me too!!
¿Y el mnemónico NOP para qué está implementado? En teoría es un operando sin ninguna función, ¿cierto?
eso mismo, no hace nada...
y me sirvio para evitar el bug...
;)
bien, he encontrado nuevos bugs en bennugd... precisamente el interprete no ejecuta bien en orden los procesos cuando se cambian las prioridades o se eliminan procesos, en algunos casos hay procesos que se ejecutan mas de 1 vez por frame y en otros casos hay procesos que no se ejecutan en ese frame... esto ya lo tengo corregido... pero estoy trabajando en el modo debug, ya que el debugger tampoco ejecuta los procesos en el orden que lo hace en modo de ejecucion normal, no solo que no lo hace sino que tambien tiene problemas del tipo mencionado anteriormente (algunos procesos no se ejecutan por frame o se ejecutan varias veces)
el debugger esta un poco mas complejo, ya que se rompe la recursividad de las llamadas a la funcion principal del interpreter y por eso los errores... estoy intentando resolverlo, pero son tantas variantes que se complica, quizas la solucion termine en agregar nuevos callbacks y reemplazar en el modulo de debug los callbacks que usa ahora... quizas proporcionar algunos especificos para el render y los inputs... o reusar de una manera que no de problemas los que ya existen... pero posiblemente algunos nuevos tenga que agregar...
Quotese ejecutan mas de 1 vez por frame
Muy interesante, es un efecto que he podido observar con la libreria de eventos que mencioné la vez pasada, pero no lo reporté como bug porque no estaba seguro de entender bien cual era el funcionamiento correcto de cambiarle la prioridad a un proceso que se ejecuta solo un frame.
En mi caso, el proceso se ejecutaba dos frames en lugar de uno.
Estoy ansioso por obtener todos estos bugfixes (incluyendo el problemina de #define que me unica TYPE con la palabra siguiente) asi puedo optimizar mi codigo.
Saludos!
el del #define no lo tengo en lista, creo que ya estaba solucionado, proba con las ultima version oficial, a ver si se soluciona... en la pagina de descargas...