diff --git a/CMakeLists.txt b/CMakeLists.txt index b5f0cc1..685a66d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,6 @@ include(FindPackageHandleStandardArgs) option(STEAM "Build for Steam" OFF) option(DEBUG "Debug mode" ON) option(NATIVE "Use native instructions(for local use only)" OFF) -option(MODLOADER "Build with modloader" ON) #Configuration set(CMAKE_DISABLE_IN_SOURCE_BUILD TRUE) @@ -158,10 +157,8 @@ elseif(BSD) list(APPEND MAIN_SOURCE src/xdg-user-dir-lookup.c) list(APPEND MAIN_HEADERS src/xdg-user-dir-lookup.h) set(STEAM OFF) - set(MODLOADER OFF) elseif(EMSCRIPTEN) set(STEAM OFF) - set(MODLOADER OFF) set(CMAKE_EXECUTABLE_SUFFIX ".html" CACHE INTERNAL "") elseif(APPLE) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND cmake -P "${CMAKE_SOURCE_DIR}/patches/mac/CompleteBundle.cmake" VERBATIM) @@ -367,11 +364,9 @@ find_package(Ruby 3.0 REQUIRED COMPONENTS Development) pkg_check_modules(VORBISFILE REQUIRED vorbisfile) find_package_handle_standard_args(pixman-1 DEFAULT_MSG PIXMAN_LIBRARY PIXMAN_INCLUDE_DIR) mark_as_advanced(PIXMAN_INCLUDE_DIR PIXMAN_LIBRARY) -if(MODLOADER) - find_package(OpenSSL CONFIG REQUIRED COMPONENTS Crypto) - pkg_check_modules(SIGC2 REQUIRED sigc++-2.0) - pkg_check_modules(LIBZIP REQUIRED libzip) -endif() +find_package(OpenSSL CONFIG REQUIRED COMPONENTS Crypto) +pkg_check_modules(SIGC2 REQUIRED sigc++-2.0) +pkg_check_modules(LIBZIP REQUIRED libzip) target_compile_definitions(${PROJECT_NAME} PRIVATE ${DEFINES}) target_include_directories(${PROJECT_NAME} PRIVATE src include ${PIXMAN_INCLUDE_DIR} ${SIGC2_INCLUDE_DIRS} @@ -384,12 +379,8 @@ physfs ${PIXMAN_LIBRARY} ${SIGC2_LIBRARIES} ${PLATFORM_LIBRARIES} ${Ruby_LIBRARIES} Boost::boost Boost::chrono ${Boost_LIBRARIES} ${VORBISFILE_LIBRARIES} ZLIB::ZLIB ${PLATFORM_LIBS}) -if(MODLOADER) - target_include_directories(${PROJECT_NAME} PRIVATE ${LIBZIP_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) - target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBZIP_LIBRARIES} OpenSSL::Crypto) -else() - -endif() +target_include_directories(${PROJECT_NAME} PRIVATE ${LIBZIP_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) +target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBZIP_LIBRARIES} OpenSSL::Crypto) if(STEAM) add_subdirectory(steamshim_parent) diff --git a/PORTING.md b/PORTING.md index b7eac1f..fda9b3d 100644 --- a/PORTING.md +++ b/PORTING.md @@ -12,11 +12,11 @@ | Solaris/OpenSolaris | 1% | В работе | | RedoxOS | 0% | Не хватает библеотек | | Android | 4% | В работе | -| PS Vita | 0% | В работе | +| PS Vita | 1% | В работе | | PSP | 1% | В работе | | Emspritein(web) | 11% | Нет хватает библеотек
 \* Нужно написать порт библеотеки libsigc++2
(А лучше 3 и переписать движок)
 \* Проблемы с компиляцией и зависимостями | -| HaikuOS | 0% | В работе | -| DOS | 0.2% | Не в работе | +| HaikuOS | 1% | В работе | +| DOS | 1% | Не в работе | | Ubuntu Touch | 61% | Будет почти готово тогда когда Linux порт будет доведён до ума | | Аврора ОС | 0% | Возможно, но пока не в работе | | ChromeOS/ChromiumOS | 0.4% | Неизвестное | diff --git a/src/define.h b/src/define.h index cc02cd8..f5d01bb 100644 --- a/src/define.h +++ b/src/define.h @@ -1,5 +1,70 @@ -#if defined(__linux__) || defined(__sun) || defined(__APPLE__) || \ - defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \ - defined(__GNU__) || defined(__hurd__) || defined(__DragonFly__) - #define unix_like 1 +#include + +#if defined(SDL_PLATFORM_AIX) || defined(SDL_PLATFORM_BSDI) || defined(SDL_PLATFORM_FREEBSD) || \ + defined(SDL_PLATFORM_HPUX) || defined(SDL_PLATFORM_HURD) || defined(SDL_PLATFORM_IRIX) || \ + defined(SDL_PLATFORM_LINUX) || defined(SDL_PLATFORM_MACOS) || defined(SDL_PLATFORM_NETBSD) || \ + defined(SDL_PLATFORM_OPENBSD) || defined(SDL_PLATFORM_SOLARIS) || defined(SDL_PLATFORM_UNIX) || \ + defined(SDL_PLATFORM_APPLE) || defined(SDL_PLATFORM_OSF) + #define unix_like 1 #endif + +#if defined(SDL_PLATFORM_DOS) + #define dos 1 +#endif + +#if defined(SDL_WINAPI_FAMILY_PHONE) || defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK) + #define windows 1 +#endif + +#if defined(SDL_PLATFORM_XBOXSERIES) || defined(SDL_PLATFORM_XBOXONE) + #define xbox 1 +#endif + +#if SDL_PLATFORM_3DS + #define 3ds 1 +#endif + +#if SDL_PLATFORM_ANDROID + #define android 1 +#endif + +#if defined(SDL_PLATFORM_APPLE) || defined(SDL_PLATFORM_TVOS) || defined(SDL_PLATFORM_VISIONOS) + #define apple 1 +#endif + +#if SDL_PLATFORM_EMSCRIPTEN + #define web 1 +#endif + +#if SDL_PLATFORM_HAIKU + #define haiku 1 +#endif + +#if SDL_PLATFORM_IOS + #define ios 1 +#endif + +#if defined(SDL_PLATFORM_OS2) + #define os2 1 +#endif + +#if SDL_PLATFORM_PS2 + #define ps2 1 +#endif + +#if SDL_PLATFORM_PSP + #define psp 1 +#endif + +#if SDL_PLATFORM_QNXNTO + #define qnx 1 +#endif + +#if SDL_PLATFORM_VITA + #define vita 1 +#endif + +#if SDL_PLATFORM_RISCOS + #define riscos 1 +#endif + diff --git a/src/eventthread.cpp b/src/eventthread.cpp index c93221c..9b913fb 100644 --- a/src/eventthread.cpp +++ b/src/eventthread.cpp @@ -32,19 +32,16 @@ #include #include #include +#include #include "sharedstate.h" #include "graphics.h" #include "al-util.h" #include "debugwriter.h" - #include "oneshot.h" -#include - #include #include - #include typedef void (ALC_APIENTRY *LPALCDEVICEPAUSESOFT) (ALCdevice *device); @@ -106,9 +103,7 @@ bool EventThread::allocUserEvents(){ } EventThread::EventThread() - : fullscreen(false), - showCursor(true) -{} + : fullscreen(false), showCursor(true){} void EventThread::process(RGSSThreadData &rtData){ SDL_Event event; @@ -128,7 +123,7 @@ void EventThread::process(RGSSThreadData &rtData){ fps.displayCounter = 0; fps.acc = 0; fps.accDiv = 0; - + if (rtData.config.printFPS) fps.sendUpdates.set(); @@ -157,7 +152,7 @@ void EventThread::process(RGSSThreadData &rtData){ jId = ids[i]; } - printf("Gamepad connected: %s", SDL_GetGamepadName(gc)); + Debug() << "Gamepad connected: " << SDL_GetGamepadName(gc); if (i > 0) { SDL_CloseGamepad(gamepd); @@ -269,7 +264,10 @@ void EventThread::process(RGSSThreadData &rtData){ /* Now process the rest */ switch (event.type){ - case SDL_EVENT_QUIT : + case SDL_EVENT_LOW_MEMORY: + rb_gc(); + break; + case SDL_EVENT_QUIT: if (rtData.allowExit) { terminate = true; Debug() << "[EventThread::process] EventThread termination requested"; diff --git a/src/main.cpp b/src/main.cpp index c111aeb..e10e8ab 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -66,6 +66,12 @@ #include "gamecontrollerdb.txt.xxd" #endif +#ifdef ps2 + #ifdef DEBUG + SDL_PS2_SKIP_IOP_RESET(); + #endif +#endif + static void rgssThreadError(RGSSThreadData *rtData, const std::string &msg){ rtData->rgssErrorMsg = msg; rtData->ethread->requestTerminate(); @@ -215,26 +221,31 @@ static void setGamePathInRegistry() { //TODO handle this for Linux/Mac } int main(int argc, char *argv[]){ + #if dos + __djgpp_nearptr_enable(); + #endif + SecurityManagerInit(); startTime = boost::chrono::high_resolution_clock::now(); loadLanguageMetadata(); //there will be a segfault on fclose if I don't move it here SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, "0"); - SDL_SetHint(SDL_HINT_APP_ID, "OneshotSunshine"); - SDL_SetHint(SDL_HINT_APP_NAME, "Oneshot: Sunshine"); - SDL_SetHint(SDL_HINT_AUDIO_DEVICE_STREAM_NAME, "Oneshot: sunshine"); - SDL_SetHint(SDL_HINT_AUDIO_DEVICE_STREAM_ROLE, "Game"); + SDL_SetAppMetadata("Oneshot: Sunshine", "0.1.1", "com.catwindowteam.sunshine"); //X11 work on *BSD,Solaris too! #if unix_like SDL_SetHint(SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR, "0"); #if SDL_VERSION_ATLEAST(3, 4, 10) SDL_SetHint(SDL_HINT_VIDEO_X11_ENABLE_XSYNC_EXT, "1"); #endif - #elif defined(WIN32) + #elif windows SDL_SetHint(SDL_HINT_WINDOWS_RAW_KEYBOARD, "1"); - #elif __ANDROID__ + #elif android SDL_SetHint(SDL_HINT_ANDROID_ALLOW_PERSISTENT_FOLDER_ACCESS, "1"); - #elif defined(__DJGPP__) || defined(__DOS__) || defined(__MSDOS__) + #elif vita + SDL_SetHint(SDL_HINT_VITA_RESOLUTION, "1080"); + #elif ps2 + SFL_SetHint(SDL_HINT_PS2_GS_MODE, "NTSC"); + #elif dos SDL_SetHint(SDL_HINT_DOS_ALLOW_DIRECT_FRAMEBUFFER, "1"); #endif /* initialize SDL first */ @@ -273,7 +284,7 @@ int main(int argc, char *argv[]){ /* now we load the config */ Config conf; conf.read(argc, argv); - #if defined WIN32 + #if windows if(conf.Windows_AllocConsole == true){ AllocConsole(); freopen("CONOUT$", "w", stdout);