Como programar para PSP (Stars2)(y III)

Bueno, con este post llegamos a la tercera entrega de estos mini ejemplos de programación para PSP, en esta entrega seguimos con las estrellas, pero en lugar de moverlas arriba, abajo, derecha e izquierda, hacemos una vista frontal que es mucha más espectacular ;-), en una imagen no se puede apreciar el movimiento pero visto en movimiento queda un efecto muy chulo.

Han cambiado varias cosas de la versión anterior, he quitado el "mtrand" y lo he substituido por un función que me encontré por ahí para los números aleatorios que es mucho más sencilla. He añadido la función "pgPutPixel" aunque en este ejemplo no se usa.

Y la gran novedad son los "CallBacks" de salida y apagado, en los ejemplos anteriores si querías salir del programa tenías que hacer un apagado a saco o quitar la batería por que el programa no hacia caso a las peticiones de la consola y en este ejemplo he añadido los "CallBacks" que siempre deberían estar presentes.

En el "startup.s" tenemos que añadir:
STUB_START   "LoadExecForUser",0x40010000,0x20005
STUB_FUNC   0x5572A5F,sceKernelExitGame
STUB_FUNC   0x4AC57943,SetExitCallback
STUB_END

STUB_START   "scePower",0x40010000,0x10005
STUB_FUNC   0x4B7766E,PowerSetCallback
STUB_END

STUB_START   "ThreadManForUser",0x40010000,0x000B0005
STUB_FUNC   0x446D8DE6,sceKernelCreateThread
STUB_FUNC   0xF475845D,sceKernelStartThread
STUB_FUNC   0xAA73C935,sceKernelExitThread
STUB_FUNC   0x9ACE131E,sceKernelSleepThread
STUB_FUNC   0x55C20A00,sceKernelCreateEventFlag
STUB_FUNC   0xEF9E4C70,sceKernelDeleteEventFlag
STUB_FUNC   0x1FB15A32,sceKernelSetEventFlag
STUB_FUNC   0x812346E4,sceKernelClearEventFlag
STUB_FUNC   0x402FCF22,sceKernelWaitEventFlag
STUB_FUNC   0x82826F70,KernelPollCallbacks
STUB_FUNC   0xE81CAF8F,sceKernelCreateCallback
STUB_FUNC   0x278C0DF5,sceKernelWaitThreadEnd
STUB_FUNC   0x9FA03CD3,sceKernelDeleteThread
STUB_END


Y en nuestro programa los tenemos que implementar más o menos así:
/*
* Procedimiento que se llamara cuando la consola quiera salir del juego,
* por ejemplo cuando le damos al menu HOME y SALIR
*/
int exit_callback(void)
{
   sceKernelExitGame();
   return 0;
}

/*
* Procedimiento que se llamara cuando se apague la consola, se puede saber si es por
* falta de bateria o por que el usuario la apaga, pero como en nuestro caso nos da
* igual pues simplemente no hacemos nada.
*/
void power_callback(int unknown, int pwrflags)
{
}

/*
* Este Thread crea los "CallBacks" necesarios para la salida y la bateria
*/
int CallbackThread(void *arg)
{
   int cbid;
   cbid = sceKernelCreateCallback("Exit Callback", exit_callback);
   SetExitCallback(cbid);
   cbid = sceKernelCreateCallback("Power Callback", power_callback);
   PowerSetCallback(0, cbid);
   KernelPollCallbacks();
}

/*
* Este procedimiento crea un thread apuntando hacia la funcion anterior "CallbackThread",
* a esta funcion hay que llamarla desde el "main" por ejemplo.
*/
int SetupCallbacks(void)
{
   int thid = 0;
   thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
   sceKernelStartThread(thid, 0, 0);
   return thid;
}


Bueno, os dejo una imagen:
Imagen

Y el código fuente:
http://www.siirlabs.com/psp/pspstars2.tar.gz
No has pensado en poner todos estos tutos en una pagina web tuya o algo asi? porque aqui pasan rapido al olvido [angelito] o a lo mejor no lo he visto...

He probado la version 0.9b del pspe con el Cross office y ya no rula (la 0.8 si) a ti te pasa lo mismo? EDITADO: no habia puesto el sdl.dll

He estado mirando la web oficial y no he visto ningun enlace al codigo fuente...
NOTA: los ejecutables de la carpeta bin no me van a mi, tengo que usar los mios propios. Me piden la libreria libstdc++.so.6 y son diferentes en tamaño, supongo que no valen las compilaciones de un pc para otro
gracias por todos estos trabajos para hacer mas facilita la introdución a peña que quiere meterse en esto
yo postee en el #II pero bueno, ya que se reflota este (que por cierto no lo habia visto xD), yo tambien voy a dar las gracias. nunca habia programado nada que se pareciese a un juego y bueno... la primera vez en mi vida que hago un pong xD

ahora tengo un personaje del Garou MotW (Rock) que responde perfectamente para dar puñetazo fuerte o flojo, andar o estar quieto, tal y como lo haria en el juego, sin ningun problema en las animaciones. Mostraria el codigo, pero como vas un poco tanteando el terreno, creo que es mas probable que lie mas que ayude. de todas formas, quiza le de un repaso y lo ponga un poco en orden, por si me da por postear el codigo.
justin, ese codigo, q ruleeeeeeeeeeeeeeeeee
Buenas, estoy intentando introducirme en la programación con la psp y estoy teniendo algún que otro problema.

1º Error al incluir el math.h tanto con el psptoolchain como con el
ps2toolchain.

/usr/local/pspdev/psp/lib/gcc/psp/4.0.0/include/math.h:53: error: parse error be ore numeric constant
/usr/local/pspdev/psp/lib/gcc/psp/4.0.0/include/math.h:53: error: 'rgb2col' declared as function returning a function
/usr/local/pspdev/psp/lib/gcc/psp/4.0.0/include/math.h:53: error: conflicting types for 'rgb2col'

2º Se pueden incluir funciones como cos, sin o se tiene que recurrir a tablas.

3º ¿Porque al utilizar la psptoolchain he tenido que hacer modificaciones en el startup.s, renombrandolo a startup.S y dentro cambiar $v0 por $2.

Si estaría bien crear un hilo, con los problemas que estamos teniendo, avances etc.

Gracias.
Yo no he tenido ningun problema de ningun tipo en la compilacion, te has bajado los mismos paquetes que yo? He puesto la lista en algun hilo del stars...
7 respuestas