Porting patchea for DOS, Android, PS Vita, PS2 and other

This commit is contained in:
whitecum1488 2026-07-19 01:51:24 +03:00
parent 999176c19b
commit 9a4646f2bd
5 changed files with 104 additions and 39 deletions

View File

@ -6,7 +6,6 @@ include(FindPackageHandleStandardArgs)
option(STEAM "Build for Steam" OFF) option(STEAM "Build for Steam" OFF)
option(DEBUG "Debug mode" ON) option(DEBUG "Debug mode" ON)
option(NATIVE "Use native instructions(for local use only)" OFF) option(NATIVE "Use native instructions(for local use only)" OFF)
option(MODLOADER "Build with modloader" ON)
#Configuration #Configuration
set(CMAKE_DISABLE_IN_SOURCE_BUILD TRUE) 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_SOURCE src/xdg-user-dir-lookup.c)
list(APPEND MAIN_HEADERS src/xdg-user-dir-lookup.h) list(APPEND MAIN_HEADERS src/xdg-user-dir-lookup.h)
set(STEAM OFF) set(STEAM OFF)
set(MODLOADER OFF)
elseif(EMSCRIPTEN) elseif(EMSCRIPTEN)
set(STEAM OFF) set(STEAM OFF)
set(MODLOADER OFF)
set(CMAKE_EXECUTABLE_SUFFIX ".html" CACHE INTERNAL "") set(CMAKE_EXECUTABLE_SUFFIX ".html" CACHE INTERNAL "")
elseif(APPLE) elseif(APPLE)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND cmake -P "${CMAKE_SOURCE_DIR}/patches/mac/CompleteBundle.cmake" VERBATIM) 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) pkg_check_modules(VORBISFILE REQUIRED vorbisfile)
find_package_handle_standard_args(pixman-1 DEFAULT_MSG PIXMAN_LIBRARY PIXMAN_INCLUDE_DIR) find_package_handle_standard_args(pixman-1 DEFAULT_MSG PIXMAN_LIBRARY PIXMAN_INCLUDE_DIR)
mark_as_advanced(PIXMAN_INCLUDE_DIR PIXMAN_LIBRARY) mark_as_advanced(PIXMAN_INCLUDE_DIR PIXMAN_LIBRARY)
if(MODLOADER) find_package(OpenSSL CONFIG REQUIRED COMPONENTS Crypto)
find_package(OpenSSL CONFIG REQUIRED COMPONENTS Crypto) pkg_check_modules(SIGC2 REQUIRED sigc++-2.0)
pkg_check_modules(SIGC2 REQUIRED sigc++-2.0) pkg_check_modules(LIBZIP REQUIRED libzip)
pkg_check_modules(LIBZIP REQUIRED libzip)
endif()
target_compile_definitions(${PROJECT_NAME} PRIVATE ${DEFINES}) target_compile_definitions(${PROJECT_NAME} PRIVATE ${DEFINES})
target_include_directories(${PROJECT_NAME} PRIVATE src include ${PIXMAN_INCLUDE_DIR} ${SIGC2_INCLUDE_DIRS} 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} ${Ruby_LIBRARIES} Boost::boost Boost::chrono ${Boost_LIBRARIES}
${VORBISFILE_LIBRARIES} ZLIB::ZLIB ${PLATFORM_LIBS}) ${VORBISFILE_LIBRARIES} ZLIB::ZLIB ${PLATFORM_LIBS})
if(MODLOADER) target_include_directories(${PROJECT_NAME} PRIVATE ${LIBZIP_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR})
target_include_directories(${PROJECT_NAME} PRIVATE ${LIBZIP_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR}) target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBZIP_LIBRARIES} OpenSSL::Crypto)
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBZIP_LIBRARIES} OpenSSL::Crypto)
else()
endif()
if(STEAM) if(STEAM)
add_subdirectory(steamshim_parent) add_subdirectory(steamshim_parent)

View File

@ -12,11 +12,11 @@
| Solaris/OpenSolaris | 1% | В работе | | Solaris/OpenSolaris | 1% | В работе |
| RedoxOS | 0% | Не хватает библеотек | | RedoxOS | 0% | Не хватает библеотек |
| Android | 4% | В работе | | Android | 4% | В работе |
| PS Vita | 0% | В работе | | PS Vita | 1% | В работе |
| PSP | 1% | В работе | | PSP | 1% | В работе |
| Emspritein(web) | 11% | Нет хватает библеотек<br>&nbsp;\* Нужно написать порт библеотеки libsigc++2<br>(А лучше 3 и переписать движок)<br>&nbsp;\* Проблемы с компиляцией и зависимостями | | Emspritein(web) | 11% | Нет хватает библеотек<br>&nbsp;\* Нужно написать порт библеотеки libsigc++2<br>(А лучше 3 и переписать движок)<br>&nbsp;\* Проблемы с компиляцией и зависимостями |
| HaikuOS | 0% | В работе | | HaikuOS | 1% | В работе |
| DOS | 0.2% | Не в работе | | DOS | 1% | Не в работе |
| Ubuntu Touch | 61% | Будет почти готово тогда когда Linux порт будет доведён до ума | | Ubuntu Touch | 61% | Будет почти готово тогда когда Linux порт будет доведён до ума |
| Аврора ОС | 0% | Возможно, но пока не в работе | | Аврора ОС | 0% | Возможно, но пока не в работе |
| ChromeOS/ChromiumOS | 0.4% | Неизвестное | | ChromeOS/ChromiumOS | 0.4% | Неизвестное |

View File

@ -1,5 +1,70 @@
#if defined(__linux__) || defined(__sun) || defined(__APPLE__) || \ #include <SDL3/SDL_platform_defines.h>
defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \
defined(__GNU__) || defined(__hurd__) || defined(__DragonFly__) #if defined(SDL_PLATFORM_AIX) || defined(SDL_PLATFORM_BSDI) || defined(SDL_PLATFORM_FREEBSD) || \
#define unix_like 1 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 #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

View File

@ -32,19 +32,16 @@
#include <SDL3/SDL_thread.h> #include <SDL3/SDL_thread.h>
#include <SDL3/SDL_touch.h> #include <SDL3/SDL_touch.h>
#include <SDL3/SDL_rect.h> #include <SDL3/SDL_rect.h>
#include <SDL3/SDL_stdinc.h>
#include "sharedstate.h" #include "sharedstate.h"
#include "graphics.h" #include "graphics.h"
#include "al-util.h" #include "al-util.h"
#include "debugwriter.h" #include "debugwriter.h"
#include "oneshot.h" #include "oneshot.h"
#include <SDL3/SDL_stdinc.h>
#include <cstdio> #include <cstdio>
#include <map> #include <map>
#include <iostream> #include <iostream>
typedef void (ALC_APIENTRY *LPALCDEVICEPAUSESOFT) (ALCdevice *device); typedef void (ALC_APIENTRY *LPALCDEVICEPAUSESOFT) (ALCdevice *device);
@ -106,9 +103,7 @@ bool EventThread::allocUserEvents(){
} }
EventThread::EventThread() EventThread::EventThread()
: fullscreen(false), : fullscreen(false), showCursor(true){}
showCursor(true)
{}
void EventThread::process(RGSSThreadData &rtData){ void EventThread::process(RGSSThreadData &rtData){
SDL_Event event; SDL_Event event;
@ -157,7 +152,7 @@ void EventThread::process(RGSSThreadData &rtData){
jId = ids[i]; jId = ids[i];
} }
printf("Gamepad connected: %s", SDL_GetGamepadName(gc)); Debug() << "Gamepad connected: " << SDL_GetGamepadName(gc);
if (i > 0) { if (i > 0) {
SDL_CloseGamepad(gamepd); SDL_CloseGamepad(gamepd);
@ -269,7 +264,10 @@ void EventThread::process(RGSSThreadData &rtData){
/* Now process the rest */ /* Now process the rest */
switch (event.type){ switch (event.type){
case SDL_EVENT_QUIT : case SDL_EVENT_LOW_MEMORY:
rb_gc();
break;
case SDL_EVENT_QUIT:
if (rtData.allowExit) { if (rtData.allowExit) {
terminate = true; terminate = true;
Debug() << "[EventThread::process] EventThread termination requested"; Debug() << "[EventThread::process] EventThread termination requested";

View File

@ -66,6 +66,12 @@
#include "gamecontrollerdb.txt.xxd" #include "gamecontrollerdb.txt.xxd"
#endif #endif
#ifdef ps2
#ifdef DEBUG
SDL_PS2_SKIP_IOP_RESET();
#endif
#endif
static void rgssThreadError(RGSSThreadData *rtData, const std::string &msg){ static void rgssThreadError(RGSSThreadData *rtData, const std::string &msg){
rtData->rgssErrorMsg = msg; rtData->rgssErrorMsg = msg;
rtData->ethread->requestTerminate(); rtData->ethread->requestTerminate();
@ -215,26 +221,31 @@ static void setGamePathInRegistry() {
//TODO handle this for Linux/Mac //TODO handle this for Linux/Mac
} }
int main(int argc, char *argv[]){ int main(int argc, char *argv[]){
#if dos
__djgpp_nearptr_enable();
#endif
SecurityManagerInit(); SecurityManagerInit();
startTime = boost::chrono::high_resolution_clock::now(); startTime = boost::chrono::high_resolution_clock::now();
loadLanguageMetadata(); //there will be a segfault on fclose if I don't move it here 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_VIDEO_MINIMIZE_ON_FOCUS_LOSS, "0");
SDL_SetHint(SDL_HINT_APP_ID, "OneshotSunshine"); SDL_SetAppMetadata("Oneshot: Sunshine", "0.1.1", "com.catwindowteam.sunshine");
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");
//X11 work on *BSD,Solaris too! //X11 work on *BSD,Solaris too!
#if unix_like #if unix_like
SDL_SetHint(SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR, "0"); SDL_SetHint(SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR, "0");
#if SDL_VERSION_ATLEAST(3, 4, 10) #if SDL_VERSION_ATLEAST(3, 4, 10)
SDL_SetHint(SDL_HINT_VIDEO_X11_ENABLE_XSYNC_EXT, "1"); SDL_SetHint(SDL_HINT_VIDEO_X11_ENABLE_XSYNC_EXT, "1");
#endif #endif
#elif defined(WIN32) #elif windows
SDL_SetHint(SDL_HINT_WINDOWS_RAW_KEYBOARD, "1"); SDL_SetHint(SDL_HINT_WINDOWS_RAW_KEYBOARD, "1");
#elif __ANDROID__ #elif android
SDL_SetHint(SDL_HINT_ANDROID_ALLOW_PERSISTENT_FOLDER_ACCESS, "1"); 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"); SDL_SetHint(SDL_HINT_DOS_ALLOW_DIRECT_FRAMEBUFFER, "1");
#endif #endif
/* initialize SDL first */ /* initialize SDL first */
@ -273,7 +284,7 @@ int main(int argc, char *argv[]){
/* now we load the config */ /* now we load the config */
Config conf; Config conf;
conf.read(argc, argv); conf.read(argc, argv);
#if defined WIN32 #if windows
if(conf.Windows_AllocConsole == true){ if(conf.Windows_AllocConsole == true){
AllocConsole(); AllocConsole();
freopen("CONOUT$", "w", stdout); freopen("CONOUT$", "w", stdout);