07 de noviembre de 2012
   Publicado por: m.rr

¿Nunca has querido descubrir como crearon LuaHM7, LuaDEV o LuaPGE? Pues ahora con este tutorial ¡sabrás como! Para hacer este tutorial me he basado en uno de va2ron1 de la comunidad de SceneBeta. Así que todos los créditos van para él. Bueno, manos a la obra, para empezar necesitas:

newbotondetalles [Tutorial] Creando tu propio Lua Player

Vale, una vez tengamos todo listo pasamos a  ver el código que debe tener cualquier LuaPlayer:

Main.c

Como los desarrolladores sabréis es el código principal del programa, más adelante está el Makefile. Sin más rodeos aquí está el código:

// Lua Player para PSPStation

#include
#include
#include
#include
#include
#include

#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"

/* Definimos*/
PSP_MODULE_INFO(“LUATEST”, 0, 1, 1);

PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

/* Definir printf, para escribir en pantalla*/
#define printf pspDebugScreenPrintf

int exit_callback(void)
{
sceKernelExitGame();

return 0;
}

int CallbackThread(SceSize args, void *argp)
{
int cbid;

cbid = sceKernelCreateCallback(“Exit Callback”, (void *) exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);

sceKernelSleepThreadCB();

return 0;
}

/* Preparar el callback*/
int SetupCallbacks(void)
{
int thid = 0;

thid = sceKernelCreateThread(“update_thread”, CallbackThread, 0×11, 0xFA0, 0, 0);
if(thid >= 0)
{
sceKernelStartThread(thid, 0, 0);
}

return thid;
}

int lua_ctrlRead(lua_State *L)
{
int argc = lua_gettop(L);
if (argc != 0) return luaL_error(L, “wrong number of arguments”);

SceCtrlData pad;
sceCtrlReadBufferPositive(&pad, 1);

// push return value (multiple return values are possible)
lua_pushnumber(L, (int)pad.Buttons);

// number of returned arguments
return 1;
}

#define CHECK_CTRL(name, bit)
int name(lua_State *L)
{
int argc = lua_gettop(L);
if (argc != 1) return luaL_error(L, “wrong number of arguments”);

/* get first argument as int */
int argument = luaL_checkint(L, 1);

/* push result */
lua_pushboolean(L, (argument & bit) == bit);
return 1;
}

CHECK_CTRL(lua_isCtrlSelect, PSP_CTRL_SELECT)
CHECK_CTRL(lua_isCtrlStart, PSP_CTRL_START)
CHECK_CTRL(lua_isCtrlUp, PSP_CTRL_UP)
CHECK_CTRL(lua_isCtrlRight, PSP_CTRL_RIGHT)
CHECK_CTRL(lua_isCtrlDown, PSP_CTRL_DOWN)
CHECK_CTRL(lua_isCtrlLeft, PSP_CTRL_LEFT)
CHECK_CTRL(lua_isCtrlLTrigger, PSP_CTRL_LTRIGGER)
CHECK_CTRL(lua_isCtrlRTrigger, PSP_CTRL_RTRIGGER)
CHECK_CTRL(lua_isCtrlTriangle, PSP_CTRL_TRIANGLE)
CHECK_CTRL(lua_isCtrlCircle, PSP_CTRL_CIRCLE)
CHECK_CTRL(lua_isCtrlCross, PSP_CTRL_CROSS)
CHECK_CTRL(lua_isCtrlSquare, PSP_CTRL_SQUARE)
CHECK_CTRL(lua_isCtrlHome, PSP_CTRL_HOME)
CHECK_CTRL(lua_isCtrlHold, PSP_CTRL_HOLD)

int lua_waitVblankStart(lua_State *L)
{
if (lua_gettop(L) != 0) return luaL_error(L, “wrong number of arguments”);
sceDisplayWaitVblankStart();
return 0;
}

// print all arguments, converted to strings
int lua_print(lua_State *L)
{
int argc = lua_gettop(L);
int n;
for (n=1; n <= argc; n++) printf(“%sn”, lua_tostring(L, n));
return 0;
}

int main(int argc, char** argv)
{
pspDebugScreenInit();
SetupCallbacks();

const char* scriptName = “script.lua”;
char* scriptFilename = (char*) malloc(strlen(argv[0]) + strlen(scriptName));
strcpy(scriptFilename, argv[0]);
char* end = strrchr(scriptFilename, ‘/’);
end++;
*end = 0;
strcat(scriptFilename, scriptName);

// Iniciar Lua y las librerias
lua_State *L = lua_open();
luaL_openlibs(L);

// Poner nombre a las funciones
lua_register(L, “ctrlRead”, lua_ctrlRead);
lua_register(L, “isCtrlSelect”, lua_isCtrlSelect);
lua_register(L, “isCtrlStart”, lua_isCtrlStart);
lua_register(L, “isCtrlUp”, lua_isCtrlUp);
lua_register(L, “isCtrlRight”, lua_isCtrlRight);
lua_register(L, “isCtrlDown”, lua_isCtrlDown);
lua_register(L, “isCtrlLeft”, lua_isCtrlLeft);
lua_register(L, “isCtrlUp”, lua_isCtrlUp);
lua_register(L, “isCtrlLTrigger”, lua_isCtrlLTrigger);
lua_register(L, “isCtrlRTrigger”, lua_isCtrlRTrigger);
lua_register(L, “isCtrlTriangle”, lua_isCtrlTriangle);
lua_register(L, “isCtrlCircle”, lua_isCtrlCircle);
lua_register(L, “isCtrlCross”, lua_isCtrlCross);
lua_register(L, “isCtrlSquare”, lua_isCtrlSquare);
lua_register(L, “isCtrlHome”, lua_isCtrlHome);
lua_register(L, “isCtrlHold”, lua_isCtrlHold);
lua_register(L, “print”, lua_print);
lua_register(L, “waitVblankStart”, lua_waitVblankStart);

// Carga el script
int status = luaL_loadfile(L, scriptFilename);

// call script
if (status == 0) status = lua_pcall(L, 0, LUA_MULTRET, 0);

if (status != 0) {
printf(“error: %sn”, lua_tostring(L, -1));
lua_pop(L, 1);
}

// Un poco de limpieza
lua_close(L);
free(scriptFilename);

sceKernelExitGame();

 

return 0;
}

Hasta aquí, el código principal, hemos definido los controles y algunas funciones principales. Ya solo nos queda el Makefile. Es el siguiente:
TARGET = luatest
OBJS = main.o

INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBDIR =
LIBS = -llua -lm
LDFLAGS =

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Lua test program

 

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

Pues ya está ya lo tenéis, ¡vuestro propio Lua Player! Cualquier duda coméntala aquí.

twitter [Tutorial] Creando tu propio Lua Player0facebook [Tutorial] Creando tu propio Lua Player0google [Tutorial] Creando tu propio Lua Player0linkedin [Tutorial] Creando tu propio Lua Player0tumblr [Tutorial] Creando tu propio Lua Playerpinterest [Tutorial] Creando tu propio Lua Player0email [Tutorial] Creando tu propio Lua Player
The following two tabs change content below.


¿Usarás el TN-V4 de Total_Noob en tu PS Vita?


Ver resultados
Loading ... Loading ...
  • Síguenos en: Facebook Twitter Google Plus | Contacto | Colabora en PSNeo.com | Staff | Publicidad | Condiciones de Uso | Mapa | Subir Arriba © 2008 - 2013 PSNeo.com