Iniciar sesión

Ver la versión completa : Juegos SDL



chui
04/08/2003, 00:15
Unos se van de vacaciones y otros vuelven. Las mias han sido cortas pero productivas. He terminado la beta1 de la librerias SDL SDL_image y SDL_mixer.
Para probarlas he portado 3 juegos:

-DCIRCUS (http://sdl-gp32.sourceforge.net/dcircus.html): Clon de Atari Circus.
-DEFEND (http://sdl-gp32.sourceforge.net/defend.html): Clon de Defender.
-VECTOR (http://sdl-gp32.sourceforge.net/vector.html): Clon de Asteroids.

Con SDL se portan los juegos como churros, Vector lo porte en una tarde y aun le añadi alguna que otra cosa.

Las librarias las podeis encontrar en
SDL for GP32 (http://sdl-gp32.sourceforge.net).

Si quereis descargaros los juegos directamente:
DCIRCUS (http://prdownloads.sourceforge.net/sdl-gp32/gp32-dcircus-beta1.zip?download)
DEFEND (http://prdownloads.sourceforge.net/sdl-gp32/gp32-defend-beta1.zip?download)
VECTOR (http://prdownloads.sourceforge.net/sdl-gp32/gp32-vector-beta1.zip?download)

A600
04/08/2003, 01:07
¡Muchas gracias!

Ahora estoy muy liado pero en cuenta pueda voy a probar esas 'peazo' de librerías con el sarien.

Hokutoy
04/08/2003, 11:39
Buen trabajo!!!
Una pregunta... usando esas librerías ke has portado se podrían portar teoricamente todos los juegos ( oa lgunos muy guapos ke he visto) que aparecen en Games de la pagina de SDL?

Si es así, sería la ostia... hay muy buenos juegos... como este:
http://adonthell.linuxgames.com/screenshot/the_gate.jpg

chui
04/08/2003, 12:35
¡En teoria se podria portar absolutamente todo!
Es impresionante la lista de librarias, demos y juegos disponibles en la Web de SDL (http://www.libsdl.org).
Otro tema es que dichos juegos necesiten mas memoria que 8Mb o utilice algo del sistema donde se compila normalmente. Pero siempre se podria hacer un apaño.

Hokutoy
04/08/2003, 14:31
Ok THX!!!
Entonces estamos hablando de uno de los projectos mas impresionantes para la GP32!!! Buen trabajo.

Se pueda o no :p, te dejaré una lista de whishlist de posibles conversiones (siempre fijandome en limitación de Ram y sourcecode) para que si un día te animas (o alguien que pa algo las has releseado) quiere intentar el port.
Realmente hay juegos muy interesantes.
Byes!!!

Newblade
04/08/2003, 15:34
Pero con esto sólo se pueden portar juegos freeware, ¿no?

chui
04/08/2003, 16:53
Hombre, hay juegos comerciales, el problema de estos es pedir el codigo fuente para portarlo.
Loki tiene varios juegazos Linux comerciales para SDL con OpenGL... la hostia.

Resumiendo, SDL sirve para hacer juegos multiplataforma. Lleva bastante tiempo en marcha por lo que hay muchos juegos ya desarrollados, la gran mayoria con licencia GPL (libre).

La gran ventaja de SDL es que puedes compilar para tu PC (Windows o Linux) para ir avanzando rapidamente y luego compilar para GP32 sin muchos problemas.

A600
05/08/2003, 17:51
@chui, a ver si me puedes echar una mano porque estoy desesperado:

El caso es que todo compila bien y el sonido se inicializa bien (message_box("OK"); ) pero la función fill_audio nunca se ejecuta (a.callback = fill_audio; ) y por tanto, no suena nada.

¿Alguna sugerencia?


#include "SDL_audio.h"
#include "sarien.h"
#include "sound.h"

static int sdl_init_sound (SINT16 *);
static void sdl_close_sound (void);
static SINT16 *buffer;

static struct sound_driver sound_sdl = {
"SDL sound output",
sdl_init_sound,
sdl_close_sound,
};


/* SDL wants its buffer to be filled completely and we generate sound
* in smaller chunks. So we fill SDL's buffer and keep the remaining
* sound in the mixer buffer to be used in the next call.
*/
static void fill_audio (void *udata, UINT8 *stream, int len)
{
Uint32 p;
static Uint32 n = 0, s = 0;

message_box("FONA");
/* _D (("(%p, %p, %d)", udata, stream, len)); */
memcpy (stream, (UINT8 *)buffer + s, p = n);
for (n = 0, len -= p; n < len; p += n, len -= n)
{
play_sound ();
n = mix_sound () << 1;
memcpy (stream + p, buffer, n);
}
play_sound ();

n = mix_sound () << 1;
memcpy (stream + p, buffer, s = len);
n -= s;
}


void __init_sound ()
{
snd = &sound_sdl;
}


static int sdl_init_sound (SINT16 *b)
{
SDL_AudioSpec a;
report ("SDL sound driver written by claudio@helllabs.org.\n");

buffer = b;

a.freq = 22050;
a.format = (AUDIO_S16);
a.channels = 1;
a.samples = 2048;
a.callback = fill_audio;
a.userdata = NULL;

if (SDL_OpenAudio (&a, NULL) < 0)
{

report ("%s\n", SDL_GetError());
return -1;
message_box("ERROR");
}

SDL_PauseAudio (0);

report ("SDL sound initialized.\n");
message_box("OK");

return 0;
}


static void sdl_close_sound ()
{
SDL_CloseAudio();
}

chui
05/08/2003, 20:21
Veo algunas cosas un tanto raras:

1.- Ejecutas message_box dentro del callback. El callback se ejecuta por timer, por lo tanto debe ser una funcion lo mas corta posible.

2.- Channels = 1. No testeado!

3.- Size samples = 2048. Muy grande. Prueba 256 o 512.

4.- Creo que necesitas SDL_UnlockAudio.


Te dejo aqui un proyectillo que suena un wav (gp:\gpmm\ding.wav).
Miralo a ver si te funciona.
Si quieres podemos quedar en #gp32dev si no te ha servido de ayuda.
Suerte!

A600
05/08/2003, 20:30
Escrito originalmente por chui
Veo algunas cosas un tanto raras:

1.- Ejecutas message_box dentro del callback. El callback se ejecuta por timer, por lo tanto debe ser una funcion lo mas corta posible.

2.- Channels = 1. No testeado!

3.- Size samples = 2048. Muy grande. Prueba 256 o 512.

4.- Creo que necesitas SDL_UnlockAudio.


Te dejo aqui un proyectillo que suena un wav (gp:\gpmm\ding.wav).
Miralo a ver si te funciona.
Si quieres podemos quedar en #gp32dev si no te ha servido de ayuda.
Suerte!

Gracias. Le echaré un vistazo más tarde. Lo de el message_box dentro del callback lo puse para ver si se ejecutaba la función, pero como el message_box(es una función del sarien que muestra un texto en pantalla) no aparece es de suponer que la función no se ejecuta, ¿no?

Perdona, pero es que mis conocimientos de C son más que penosos :)

mortimor
05/08/2003, 21:13
Nota para A600 :: Es posible que no salga nada en pantalla a causa del buffer de E/S en C, ¿¿¿que funcion de salida utiliza el Sarien??? puede que requiera otras llamadas posteriores. Si la utilizas del mismo modo en otras partes del codigo y funciona, no dudes de la funcion y olvida lo que he dicho.

Nota para Chui: ¿Seria posible intentar portar MPlayer 0.9 a la GP32?? ¿¿Que modulos de SDL seria necesario portar para conseguirlo????

A600
05/08/2003, 21:54
Escrito originalmente por mortimor
Nota para A600 :: Es posible que no salga nada en pantalla a causa del buffer de E/S en C, ¿¿¿que funcion de salida utiliza el Sarien??? puede que requiera otras llamadas posteriores. Si la utilizas del mismo modo en otras partes del codigo y funciona, no dudes de la funcion y olvida lo que he dicho.


La función message_box funciona sin problemas. (si te fijas en la función sdl_init_sound uso el message_box("OK"); y éste aparece sin problemas.

chui
06/08/2003, 01:29
A600-> Ten cuidado con la funcion message box. Lo que te comentaba antes: tiene que haber codigo que se ejecute en un breve espacio de tiempo ya que podria causar overflow en el timer. Generalmente las funciones de visualizacion son costosas. Lo mas propio es sumar uno a una variable global y mirar en el programa principal si cambia. Esto se hace en el ejemplo que postee con anterioridad.

Mortimor-> Claro que es posible portar parte del mplayer, por ejemplo un simple skin con XVID+MP3. Es monstruoso y el codigo es para perderse 100 veces. De momento estoy a ver si suenan los mp3 y los ogg con SDL mixer, que no es poco. Lo suyo seria convencer a la peña de MPLAYER para que creen una version ultralite con un par de decodecs. Tambien esta la posibilidad de portar el que ya existe para Pocket-PC de Linux como la Sharp Zaurus.

Tengo un problema con los MID. ¿alguien tiene o sabe de algun ejemplo? Yo he visto que existe una aplicacion para pasarlos midi a sbg para tocarlos con GPSDK pero a mi no me suena nada. No estaria de mas tener el codigo fuente de la conversion para poder tocar MIDI directamente con SDL mixer.

A600
06/08/2003, 01:46
Estoy casi seguro de que la función fill_audio no se ejecuta nunca porque he colocado la intrucción GpAppExit(); (reset) al principio de la función y la consola no se resetea. De todos modos voy a ver si consigo compilar el ejemplo que posteaste modificando el makefile porque con el devkitavd no se compila el muy jodido :D

chui
06/08/2003, 02:00
Logicamente, esta para SDK de linux.
Por cierto, ¿Puedes contarme que tal tira SDL con devkitavd? ¿Puedes intentar compilar alguno de los tres juegos que he portado? Me seria de gran ayuda.


Otra cosa, ¿NADIE HA PROBADO LOS JUEGOS?


Escrito originalmente por A600
Estoy casi seguro de que la función fill_audio no se ejecuta nunca porque he colocado la intrucción GpAppExit(); (reset) al principio de la función y la consola no se resetea. De todos modos voy a ver si consigo compilar el ejemplo que posteaste modificando el makefile porque con el devkitavd no se compila el muy jodido :D

A600
06/08/2003, 02:12
Pues el SDL tirar, tira con el devkitadv ya que el Sarien compila sin errores. Por eso me gustaría compilar el ejemplo para ver si funciona o no. En cuanto me haya aclarado con el makefile intentaré compilar los juegos que has portado.

Los juegos los he probado y están chulos, sobretodo el vector aunque el sonido petardea de vez en cuando. También estuve mirando en libsdl.org algún juego para portar pero lo chungo es encontrar alguno con una resolución de 320x240 ya que la mayor parte de los que miré usan resoluciones mayores.

Y sobre portar el Abuse ¿cómo se podría controlar con el pad de la GP32 el ratón y el teclado al mismo tiempo?

chui
06/08/2003, 02:16
Los juegos que yo he portado no estaban 320x240. Ya me gustaria. Hay esta el curro principal.

El sonido pertadea de vez en cuando. Overclockando la cpu a 133Mhz no lo hace. Asi es la vida. Vere si puedo hacer algo para el petardeo.

El abuse tiene mal apaño. Ya le he dado vueltas al asunto y no se me ocurre nada para controlar el raton.

¿ALGUNA IDEA POR PARTE DE ALGUIEN?

A600
06/08/2003, 02:27
Los juegos que yo he portado no estaban 320x240. Ya me gustaria. Hay esta el curro principal.

Pues entonces sí que te lo has currado! :)


Abuse: se podría controlar el ratón con el pad y el movimiento a izda y dcha con los botones de arriba pero me parece que la gente se iba a hacer la picha un lío :D

chui
06/08/2003, 12:47
¿Te funciono el ejemplo?
¿Pudiste rular con el devkitadv?


Escrito originalmente por A600


Pues entonces sí que te lo has currado! :)


Abuse: se podría controlar el ratón con el pad y el movimiento a izda y dcha con los botones de arriba pero me parece que la gente se iba a hacer la picha un lío :D

A600
06/08/2003, 18:44
Escrito originalmente por chui
¿Te funciono el ejemplo?
¿Pudiste rular con el devkitadv?


Pues llevo dos horas intentando compilarlo pero no hay cojones. A ver si alguien más lo intenta porque yo estoy desespearoo.

chui
07/08/2003, 12:46
No te preocupes, estoy intentando montarme el entorno de programacion para win. De momento estoy instalando cygwin.

A ver si te puedo ayudar. :)

chui
07/08/2003, 16:31
He logrado compilar el ejemplo desde windows.
El ejemplo que te pase estaba mal (creo).
Una paranoia poner cygwin+arm-gcc. He tenido que hacer una ñapa y copiar libgcc.a de linux... y tira.
Te dejo aqui lo que a mi me compila.

A600
07/08/2003, 17:12
¿Podrías postear el libgcc.a de Linux?
¿Has usado el devkitadv?

chui
07/08/2003, 18:05
Estoy haciendo un tutorial para crear desde cero un entorno de programacion GP32-SDL usando windoze.

Te dejo aqui el html y el libgcc.a (puntos del 9 al 14 del manual html) que tienes que sustituir dentro de /usr/lib/gcc-lib/arm-elf/3.3/ en el entorno de programación cygwin del manual.

Aun si te faltan ficheros (puntos del 27 al 30) que los puedes encontrar AQUI (http://didaho1.free.fr/cross/dists/unstable/devel/binary-i386/tarball/task-cross-gp32_tarball.tar.gz). En ese fichero comprimido tienes que extraer todos los ficheros de /usr/arm-thumb-elf/lib/ dentro de tu entorno de programacion en /usr/arm-elf/lib.

Suerte.

Molsu
07/08/2003, 18:42
Escrito originalmente por chui
(...)Otra cosa, ¿NADIE HA PROBADO LOS JUEGOS?



Siento meterme por aquí enmedio, pero es que tenía que decirlo, SÍ QUE HE PROBADO LOS JUEGOS!!, y SON UN VICIO!:D , el sonido aún no es nítido pero el CIRCUS ha ganado un montón con la musiquita y el "Chof!" cada vez que espachurro al payaso contra el suelo, el DEFEND de la nave y los pingüinos también es muy bueno (con su musiquita techno:cool: ), y el vector no está mal...eso, que gracias a Chui y a todos los que os esforzáis por el trabajo hecho, y ánimo a A600 por ese Sarien mejorado!

A600
07/08/2003, 19:14
Esta noche me pondré a ver si lo consigo o si me rompo los cuernos en el intento :)

Mañana me llega la XBOX y voy a estar muy liado el fin de semana :D

chui
07/08/2003, 20:43
Suerte y no te vicies mucho con la X-BOX.

En unos dias publicare en la web de SDL for GP32 tutoriales para que la gente pueda trabajar sin problemas.