1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-11 23:54:09 +02:00

PSV system language detection, fix mutex creation, livearea stuff

This commit is contained in:
XProger
2021-02-15 15:41:59 +03:00
parent aef5d32a4c
commit a523ed83c6
7 changed files with 95 additions and 25 deletions

View File

@@ -17,8 +17,8 @@ set(VITA_APP_NAME "OpenLara")
set(VITA_TITLEID "OPENLARA1") set(VITA_TITLEID "OPENLARA1")
set(VITA_VERSION "01.00") set(VITA_VERSION "01.00")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O3 -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O3 -std=c++11")
set(VITA_MKSFOEX_FLAGS "${VITA_MKSFOEX_FLAGS} -d PARENTAL_LEVEL=1") set(VITA_MKSFOEX_FLAGS "${VITA_MKSFOEX_FLAGS} -d PARENTAL_LEVEL=1")
include_directories( include_directories(
@@ -44,6 +44,7 @@ target_link_libraries(OpenLara
SceCtrl_stub SceCtrl_stub
SceAudio_stub SceAudio_stub
SceTouch_stub SceTouch_stub
SceAppUtil_stub
) )

View File

@@ -0,0 +1,3 @@
make
curl --ftp-method nocwd -T OpenLara.self ftp://192.168.1.59:1337/ux0:/app/OPENLARA1/eboot.bin
echo launch OPENLARA1 | ./nc.exe 192.168.1.59 1338

View File

@@ -11,27 +11,39 @@
#include <psp2/kernel/threadmgr.h> #include <psp2/kernel/threadmgr.h>
#include <psp2/power.h> #include <psp2/power.h>
#include <psp2/touch.h> #include <psp2/touch.h>
#include <psp2/apputil.h>
#include <psp2/system_param.h>
#include <malloc.h> #include <malloc.h>
#include "game.h" #include "game.h"
// multi-threading // multi-threading
void* osMutexInit() { void* osMutexInit()
SceUID *mutex = new SceUID(); {
*mutex = sceKernelCreateMutex(NULL, 0, 0, NULL); SceUID mutex = sceKernelCreateMutex(NULL, SCE_KERNEL_MUTEX_ATTR_RECURSIVE, 0, NULL);
if (mutex < 0)
{
return NULL;
}
SceUID* obj = new SceUID();
*obj = mutex;
return obj;
} }
void osMutexFree(void *obj) { void osMutexFree(void *obj)
{
sceKernelDeleteMutex(*(SceUID*)obj); sceKernelDeleteMutex(*(SceUID*)obj);
delete (SceUID*)obj; delete (SceUID*)obj;
} }
void osMutexLock(void *obj) { void osMutexLock(void *obj)
{
sceKernelLockMutex(*(SceUID*)obj, 1, NULL); sceKernelLockMutex(*(SceUID*)obj, 1, NULL);
} }
void osMutexUnlock(void *obj) { void osMutexUnlock(void *obj)
{
sceKernelUnlockMutex(*(SceUID*)obj, 1); sceKernelUnlockMutex(*(SceUID*)obj, 1);
} }
@@ -39,28 +51,33 @@ void osMutexUnlock(void *obj) {
int osStartTime = 0; int osStartTime = 0;
int osTimerFreq; int osTimerFreq;
int osGetTimeMS() { int osGetTimeMS()
{
SceRtcTick current; SceRtcTick current;
sceRtcGetCurrentTick(&current); sceRtcGetCurrentTick(&current);
return int(current.tick * 1000 / osTimerFreq - osStartTime); return int(current.tick * 1000 / osTimerFreq - osStartTime);
} }
// input // input
bool osJoyReady(int index) { bool osJoyReady(int index)
{
return index == 0; return index == 0;
} }
void osJoyVibrate(int index, float L, float R) { void osJoyVibrate(int index, float L, float R)
{
// //
} }
void inputInit() { void inputInit()
{
sceCtrlSetSamplingMode(SCE_CTRL_MODE_ANALOG); sceCtrlSetSamplingMode(SCE_CTRL_MODE_ANALOG);
sceTouchSetSamplingState(SCE_TOUCH_PORT_FRONT, SCE_TOUCH_SAMPLING_STATE_START); sceTouchSetSamplingState(SCE_TOUCH_PORT_FRONT, SCE_TOUCH_SAMPLING_STATE_START);
sceTouchEnableTouchForce(SCE_TOUCH_PORT_FRONT); sceTouchEnableTouchForce(SCE_TOUCH_PORT_FRONT);
} }
void inputUpdate() { void inputUpdate()
{
// gamepad // gamepad
SceCtrlData pad; SceCtrlData pad;
sceCtrlReadBufferPositive(0, &pad, 1); sceCtrlReadBufferPositive(0, &pad, 1);
@@ -91,9 +108,12 @@ void inputUpdate() {
bool touchState[COUNT(Input::touch)]; bool touchState[COUNT(Input::touch)];
for (int i = 0; i < COUNT(Input::touch); i++) for (int i = 0; i < COUNT(Input::touch); i++)
{
touchState[i] = Input::down[ikTouchA + i]; touchState[i] = Input::down[ikTouchA + i];
}
for (int i = 0; i < touch.reportNum; i++) { for (int i = 0; i < touch.reportNum; i++)
{
SceTouchReport &t = touch.report[i]; SceTouchReport &t = touch.report[i];
InputKey key = Input::getTouch(t.id); InputKey key = Input::getTouch(t.id);
@@ -106,9 +126,13 @@ void inputUpdate() {
} }
for (int i = 0; i < COUNT(Input::touch); i++) for (int i = 0; i < COUNT(Input::touch); i++)
{
if (touchState[i]) if (touchState[i])
{
Input::setDown(InputKey(ikTouchA + i), false); Input::setDown(InputKey(ikTouchA + i), false);
} }
}
}
bool sndTerm; bool sndTerm;
int sndPort; int sndPort;
@@ -119,8 +143,10 @@ Sound::Frame *sndBuffer;
#define SND_FRAMES 2048 #define SND_FRAMES 2048
int sndPrepThread(SceSize args, void *argp) { int sndPrepThread(SceSize args, void *argp)
while (!sndTerm) { {
while (!sndTerm)
{
sceKernelWaitSema(sndSema, 1, NULL); sceKernelWaitSema(sndSema, 1, NULL);
sndPartIndex ^= 1; sndPartIndex ^= 1;
Sound::Frame *part = sndBuffer + SND_FRAMES * sndPartIndex; Sound::Frame *part = sndBuffer + SND_FRAMES * sndPartIndex;
@@ -129,8 +155,10 @@ int sndPrepThread(SceSize args, void *argp) {
return 0; return 0;
} }
int sndOutThread(SceSize args, void *argp) { int sndOutThread(SceSize args, void *argp)
while (!sndTerm) { {
while (!sndTerm)
{
Sound::Frame *part = sndBuffer + SND_FRAMES * sndPartIndex; Sound::Frame *part = sndBuffer + SND_FRAMES * sndPartIndex;
sceKernelSignalSema(sndSema, 1); sceKernelSignalSema(sndSema, 1);
sceAudioOutOutput(sndPort, part); sceAudioOutOutput(sndPort, part);
@@ -138,7 +166,8 @@ int sndOutThread(SceSize args, void *argp) {
return 0; return 0;
} }
void sndInit() { void sndInit()
{
sndTerm = false; sndTerm = false;
sndPartIndex = 0; sndPartIndex = 0;
@@ -158,7 +187,8 @@ void sndInit() {
sceKernelStartThread(sndOutTID, 0, NULL); sceKernelStartThread(sndOutTID, 0, NULL);
} }
void sndFree() { void sndFree()
{
sndTerm = true; sndTerm = true;
sceKernelSignalSema(sndSema, 1); sceKernelSignalSema(sndSema, 1);
@@ -173,8 +203,35 @@ void sndFree() {
free(sndBuffer); free(sndBuffer);
} }
int checkLanguage()
{
int id;
sceAppUtilSystemParamGetInt(SCE_SYSTEM_PARAM_ID_LANG, &id);
int main() { int str = STR_LANG_EN;
switch (id)
{
case SCE_SYSTEM_PARAM_LANG_ENGLISH_US :
case SCE_SYSTEM_PARAM_LANG_ENGLISH_GB : str = STR_LANG_EN; break;
case SCE_SYSTEM_PARAM_LANG_FRENCH : str = STR_LANG_FR; break;
case SCE_SYSTEM_PARAM_LANG_GERMAN : str = STR_LANG_DE; break;
case SCE_SYSTEM_PARAM_LANG_SPANISH : str = STR_LANG_ES; break;
case SCE_SYSTEM_PARAM_LANG_ITALIAN : str = STR_LANG_IT; break;
case SCE_SYSTEM_PARAM_LANG_POLISH : str = STR_LANG_PL; break;
case SCE_SYSTEM_PARAM_LANG_PORTUGUESE_PT :
case SCE_SYSTEM_PARAM_LANG_PORTUGUESE_BR : str = STR_LANG_PT; break;
case SCE_SYSTEM_PARAM_LANG_RUSSIAN : str = STR_LANG_RU; break;
case SCE_SYSTEM_PARAM_LANG_JAPANESE : str = STR_LANG_JA; break;
case SCE_SYSTEM_PARAM_LANG_FINNISH : str = STR_LANG_FI; break;
case SCE_SYSTEM_PARAM_LANG_CHINESE_T :
case SCE_SYSTEM_PARAM_LANG_CHINESE_S : str = STR_LANG_CN; break;
case SCE_SYSTEM_PARAM_LANG_SWEDISH : str = STR_LANG_SV; break;
}
return str - STR_LANG_EN;
}
int main()
{
psvDebugScreenInit(); psvDebugScreenInit();
scePowerSetArmClockFrequency(444); scePowerSetArmClockFrequency(444);
@@ -182,25 +239,34 @@ int main() {
scePowerSetGpuClockFrequency(222); scePowerSetGpuClockFrequency(222);
scePowerSetGpuXbarClockFrequency(166); scePowerSetGpuXbarClockFrequency(166);
{
SceAppUtilInitParam initParam = {};
SceAppUtilBootParam bootParam = {};
sceAppUtilInit(&initParam, &bootParam);
}
cacheDir[0] = saveDir[0] = contentDir[0] = 0; cacheDir[0] = saveDir[0] = contentDir[0] = 0;
strcpy(cacheDir, "ux0:data/OpenLara/"); strcpy(cacheDir, "ux0:data/OpenLara/");
strcpy(saveDir, "ux0:data/OpenLara/"); strcpy(saveDir, "ux0:data/OpenLara/");
strcpy(contentDir, "ux0:data/OpenLara/"); strcpy(contentDir, "ux0:data/OpenLara/");
Core::defLang = checkLanguage();
sndInit(); sndInit();
inputInit(); inputInit();
osTimerFreq = sceRtcGetTickResolution(); osTimerFreq = sceRtcGetTickResolution();
osStartTime = Core::getTime(); osStartTime = osGetTimeMS();
Game::init();//"PSXDATA/LEVEL2.PSX"); Game::init();
// sceRazorGpuCaptureSetTrigger(100, "ux0:data/OpenLara/capture.sgx");
while (!Core::isQuit) { while (!Core::isQuit) {
inputUpdate(); inputUpdate();
if (Input::joy[0].down[jkStart]) if (Input::joy[0].down[jkStart])
{
Core::quit(); Core::quit();
}
Game::update(); Game::update();
Game::render(); Game::render();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 896 B

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 924 B

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<livearea style="a1" format-ver="01.00" content-rev="1"> <livearea style="a5" format-ver="01.00" content-rev="1">
<livearea-background> <livearea-background>
<image>bg.png</image> <image>bg.png</image>
</livearea-background> </livearea-background>