diff --git a/engine/client/sys_morphos.c b/engine/client/sys_morphos.c index 4b34e420f..185c5ed5a 100755 --- a/engine/client/sys_morphos.c +++ b/engine/client/sys_morphos.c @@ -205,25 +205,35 @@ void *Sys_GetGameAPI(void *parms) void (*q2_so_deinit)(void); void *(*GetGameAPI)(void *); void *ret; + char *searchpath; + char path[256]; - gamefile = dlopen("gameppc.so", RTLD_NOW); - if (gamefile) + searchpath = 0; + + while((searchpath = COM_NextPath(searchpath))) { - q2_so_init = dlsym(gamefile, "q2_so_init"); - q2_so_deinit = dlsym(gamefile, "q2_so_deinit"); - if (q2_so_init && q2_so_init()) - { - GetGameAPI = dlsym(gamefile, "GetGameAPI"); - if (GetGameAPI && (ret = GetGameAPI(parms))) - { - return ret; - } - if (q2_so_deinit) - q2_so_deinit(); + snprintf(path, sizeof(path), "%s%sgameppc.so", searchpath[0]!='.'?searchpath:"", searchpath[0]&&searchpath[0]!='.'?"/":""); + + gamefile = dlopen(path, RTLD_NOW); + if (gamefile) + { + q2_so_init = dlsym(gamefile, "q2_so_init"); + q2_so_deinit = dlsym(gamefile, "q2_so_deinit"); + if (q2_so_init && q2_so_init()) + { + GetGameAPI = dlsym(gamefile, "GetGameAPI"); + if (GetGameAPI && (ret = GetGameAPI(parms))) + { + return ret; + } + + if (q2_so_deinit) + q2_so_deinit(); + } + dlclose(gamefile); + gamefile = 0; } - dlclose(gamefile); - gamefile = 0; } return 0;