Skip to content

Commit

Permalink
Make possible to exit from games from their own Exit buttons.
Browse files Browse the repository at this point in the history
  • Loading branch information
Rinnegatamante committed Apr 22, 2022
1 parent 5d0b21a commit 26e4dcc
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
4 changes: 1 addition & 3 deletions loader/gamepad.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ extern uint8_t forceWinMode;

int (*CreateDsMap)(int a1, char *type, int a3, int a4, char *desc, char *type2, double id, int a8);
void (*CreateAsynEventWithDSMap)(int dsMap, int a2);
extern void (*Function_Add)(const char *name, intptr_t func, int argc, char ret);

typedef enum GamepadButtonState {
GAMEPAD_BUTTON_STATE_UP = -1,
Expand Down Expand Up @@ -361,9 +362,6 @@ void patch_gamepad() {
CreateAsynEventWithDSMap = (void *)so_symbol(&yoyoloader_mod, "_Z24CreateAsynEventWithDSMapii");
GamePadCheck(1);

void (*Function_Add)(const char *name, intptr_t func, int argc, char ret) = (void *)so_symbol(&yoyoloader_mod, "_Z12Function_AddPKcPFvR6RValueP9CInstanceS4_iPS1_Eib");
if (Function_Add == NULL)
Function_Add = (void *)so_symbol(&yoyoloader_mod, "_Z12Function_AddPcPFvR6RValueP9CInstanceS3_iPS0_Eib");
Function_Add("gamepad_is_supported", (intptr_t)gamepad_is_supported, 0, 1);
Function_Add("gamepad_get_device_count", (intptr_t)gamepad_get_device_count, 0, 1);
Function_Add("gamepad_is_connected", (intptr_t)gamepad_is_connected, 1, 1);
Expand Down
18 changes: 18 additions & 0 deletions loader/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ int post_index = 0;
int get_active = 0;
int get_index = 0;

void (*Function_Add)(const char *name, intptr_t func, int argc, char ret);

double jni_double = 0.0f;

char data_path[256];
Expand Down Expand Up @@ -1758,6 +1760,15 @@ void GetByteArrayRegion(void *env, void *array, int start, int len, void *buf) {

int GetIntField(void *env, void *obj, int fieldID) { return 0; }

static void game_end()
{
#ifdef STANDALONE_MODE
sceKernelExitProcess(0);
#else
sceAppMgrLoadExec("app0:eboot.bin", NULL, NULL);
#endif
}

int main(int argc, char **argv)
{
#if 0
Expand Down Expand Up @@ -1900,6 +1911,13 @@ int main(int argc, char **argv)
so_flush_caches(&yoyoloader_mod);
so_initialize(&yoyoloader_mod);
patch_runner_post_init();

Function_Add = (void *)so_symbol(&yoyoloader_mod, "_Z12Function_AddPKcPFvR6RValueP9CInstanceS4_iPS1_Eib");
if (Function_Add == NULL)
Function_Add = (void *)so_symbol(&yoyoloader_mod, "_Z12Function_AddPcPFvR6RValueP9CInstanceS3_iPS0_Eib");

Function_Add("game_end", game_end, 1, 1);

patch_gamepad();
so_flush_caches(&yoyoloader_mod);

Expand Down

0 comments on commit 26e4dcc

Please sign in to comment.