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:
Y el código fuente:
http://www.siirlabs.com/psp/pspstars2.tar.gz