diff --git a/source/core/system/director.cpp b/source/core/system/director.cpp index 44c7989..b34488a 100644 --- a/source/core/system/director.cpp +++ b/source/core/system/director.cpp @@ -48,6 +48,16 @@ Director::Director(int argc, const char *argv[]) { // Inicializa las opciones del programa (defaults + dispositivos d'entrada) Options::init(); + // Obtén la ruta del directori on viu l'executable (acabada amb '/'). + // SDL_GetBasePath és independent del CWD i evita el `argv[0]` poc fiable. +#ifdef __EMSCRIPTEN__ + // En Emscripten els assets viuen a l'arrel del MEMFS — no hi ha ruta real. + executablePath = ""; +#else + const char *base_path = SDL_GetBasePath(); + executablePath = (base_path != nullptr) ? base_path : ""; +#endif + // Comprueba los parametros del programa (pot activar console) checkProgramArguments(argc, argv); @@ -81,7 +91,12 @@ Director::Director(int argc, const char *argv[]) { #else const bool enable_fallback = true; #endif - if (!ResourceHelper::initializeResourceSystem("resources.pack", enable_fallback)) { +#ifdef MACOS_BUNDLE + const std::string pack_path = executablePath + "../Resources/resources.pack"; +#else + const std::string pack_path = executablePath + "resources.pack"; +#endif + if (!ResourceHelper::initializeResourceSystem(pack_path, enable_fallback)) { std::cerr << "Fatal: resource system init failed (missing resources.pack?)" << std::endl; exit(EXIT_FAILURE); } @@ -435,10 +450,6 @@ bool Director::setFileList() { // Comprueba los parametros del programa void Director::checkProgramArguments(int argc, const char *argv[]) { - // Establece la ruta del programa - executablePath = argv[0]; - - // Comprueba el resto de parametros for (int i = 1; i < argc; ++i) { if (strcmp(argv[i], "--console") == 0) { Options::settings.console = true;