BennuGD PSP

Started by DCelso, January 12, 2011, 12:01:56 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

ok, acias de todos modos, probaré con ese tb,
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

cagoen, mismo resultado que 2.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

para mi no van por ahi los tiros.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

ya te digo, por otro lado, estoy intentando aislar el problema del sonido y tengo este test

....
...
Begin
id_text_key=write_var(0,10,10,0,text_key);
write_var(0,40,40,0,id_song);
while (!keyjoy(_esc))
if(keyjoy(_a))
text_key="a";
while (keyjoy(_a)) frame;end
id_song=load_song( "Sound/BossCourage.xm" );
end
if(keyjoy(_s))
text_key="s";
while (keyjoy(_s)) frame;end
play_song(id_song,-1);
end
if(keyjoy(_z))
text_key="z";
while (keyjoy(_z)) frame;end
stop_song();
end
if(keyjoy(_x))
text_key="x";
while (keyjoy(_x)) frame;end
unload_song(id_song);
end
if(keyjoy(_q))
text_key="q";
while (keyjoy(_q)) frame;end
set_song_volume(50);
end
if(keyjoy(_w))
text_key="w";
while (keyjoy(_w)) frame;end
set_song_volume(100);
end
frame;
end
end
...
...

funciona tanto en pc como en psp, pero una cosa, no se puede hacer esta combinacion ni en pc ni en psp
a, s, x, s.
es decir: load_song,play_song, stop_song, play_song.

Perdonad mi desconocimiento, pero como es que no puedo volver a hacer play? casca que da gusto dice que no sabe qué tipo de archivo es (Can't play unknown music type), y resulta que lo estuvo tocando antes :D, (¿fallo de bennu?)

Tengo que hacer un unload otra vez el load y tocar el play para que vuelva a escucharse.


Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

codigo bennugd..

/* --------------------------------------------------------------------------- */
/*
*  FUNCTION : play_song
*
*  Play a MOD/OGG
*
*  PARAMS:
*      mod pointer
*      number of loops (-1 infinite loops)
*
*  RETURN VALUE:
*
* -1 if there is any error
*
*/

static int play_song( int id, int loops )
{
    if ( audio_initialized && id )
    {
        int result = Mix_PlayMusic(( Mix_Music * )id, loops );
        if ( result == -1 ) fprintf( stderr, "%s", Mix_GetError() );
        return result;
    }

    fprintf( stderr, "Play song called with invalid handle" );
    return( -1 );
}


/* --------------------------------------------------------------------------- */
/*
*  FUNCTION : stop_song
*
*  Stop the play of a mod
*
*  PARAMS:
*
*  no params
*
*  RETURN VALUE:
*
* -1 if there is any error
*
*/

static int stop_song( void )
{
    if ( audio_initialized ) Mix_HaltMusic();
    return ( 0 ) ;
}

/* ------------------ */
/* Sonido MOD y OGG   */
/* ------------------ */

/* --------------------------------------------------------------------------- */
/*
*  FUNCTION : load_song
*
*  Load a MOD/OGG from a file
*
*  PARAMS:
*      file name
*
*  RETURN VALUE:
*
*  mod pointer
*
*/

static int load_song( const char * filename )
{
    Mix_Music *music = NULL;
    file      *fp;

    if ( !audio_initialized && sound_init() ) return ( 0 );

    if ( !( fp = file_open( filename, "rb0" ) ) ) return ( 0 );

    if ( !( music = Mix_LoadMUS_RW( SDL_RWFromBGDFP( fp ) ) ) )
    {
        file_close( fp );
        fprintf( stderr, "Couldn't load %s: %s\n", filename, SDL_GetError() );
        return( 0 );
    }

    return (( int )music );
}

* --------------------------------------------------------------------------- */
/*
*  FUNCTION : unload_song
*
*  Play a MOD
*
*  PARAMS:
*
*  mod id
*
*  RETURN VALUE:
*
* -1 if there is any error
*
*/

static int unload_song( int id )
{
    if ( audio_initialized && id )
    {
        if ( Mix_PlayingMusic() ) Mix_HaltMusic();
        Mix_FreeMusic(( Mix_Music * )id );
    }
    return ( 0 ) ;
}

/* --------------------------------------------------------------------------- */
/*
*  FUNCTION : modsound_unload_song
*
*  Frees the resources from a MOD and unloads it
*
*  PARAMS:
*      mod id;
*
*  RETURN VALUE:
*
*  -1 if there is any error
*  0 if all goes ok
*
*/

static int modsound_unload_song( INSTANCE * my, int * params )
{
    if ( params[0] == -1 ) return ( -1 );
    return( unload_song( params[0] ) );
}
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

si ves o piensas que ahi hay aun bug, por favor, no dudes en comunicarmelo.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

umn, lo veo perfecto :D, es más fue fallo mío, hacía el play después del unload en vez de después del stop. sooorrryy ;'(
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

bueno, mejor que sea un problema humano de testing... sino estamos en un grave problema.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

XCelso, lo del color del fondo está en el fichero game.inc, lineas 270, 297, 308, 333 y 483, según el nivel que estés probando. Es la parte donde se ejecutan los niveles y todo eso.
Eso está pendiente de ser reescrito porque me parece poco claro y muy poco modular ^^U Espero que para la versión 1.2 esté lista.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

DCelso

SplinterGU, estoy adoptando el mismo test de sonido a c/SDL, ya me funciona en PC voy a compilarlo para psp a ver si falla también para descartar que sea cosa de como gestiona bennu la sdl mixer, ya que el test de sonido hecho en bennu va perfecto en PC y en cambio en PSP al darle al play suena la canción y aleatoriamente se bloquea al poco tiempo la psp y nunca es en el mismo segundo.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

#206
el problema es que no se entiende que bennugd no gestiona el sonido... perdon, pero es algo que explique cientos de veces a mucha gente... el modulo de sonido de bennugd solo es un wrapper a la mixer... solo se hacen algunos chequeos de punteros nulos y esas csoas, pero nada mas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

Sip, puede que alguna comprobación esté mal y no la veamos, como ha pasado alguna que otra vez. Iba a ser el siguiente paso que iba a realizar, si va en la psp el codigo c/SDL tal cual lo tengo, intentar hacer que el código bennu, concretamente tu wrapper haga exactamente lo mismo (con mismas comprobaciones) que mi código a ver si sigue cascando.

O bien puede que sea de la gestión de hilos, semáforos o mutex, por eso es por lo que quiero hacer ejemplos que siempre se bloqueen en el mismo sitio porque siendo aleatorios es casi imposible detectar el problema :D.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

bennugd no tiene hilos, semaforos o mutex...

un simple ejemplo no sirve si no esta en un loop, como decis vos, pasa despues de un tiempo.

como sea, yo no veo ningun error, si vos lo ves, maravilloso.

suerte con eso, avisame.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

Pues entonces de la gestión de prioridades de los procesos y la parada de frames, porque es la única parte pseudoaleatoria que se me ocurre que dé problemas aleatoriamente. Quizas mientras está sonando la música (que por narizes sdl tiene que pasarla a un hilo o similar para dejar ejecutar código del programa mientras suena) se haga una comprobación usando un puntero o algo que acceda a un dato desalineado y haga cascar a la psp.

Parece que la psp tiene la limitación de que solo puede acceder a posiciones múltiplo de 16 bits por lo tanto, no dejándote acceder a los segundos 8 bits de una palabra de manera independiente.

Estoy indagando de si se puede crear un parche o algo al firmware para que lo permita aunque haga el acceso más lento, para así probar definitivamente que es eso, pero no encuentro información al respecto, habría que hablar con algún experto de homebrew para psp pero no localizo a ningún friki español que me pueda ayudar :D.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/