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(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)

View file

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

View file

@ -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 <SDL3/SDL_platform_defines.h>
#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

View file

@ -32,19 +32,16 @@
#include <SDL3/SDL_thread.h>
#include <SDL3/SDL_touch.h>
#include <SDL3/SDL_rect.h>
#include <SDL3/SDL_stdinc.h>
#include "sharedstate.h"
#include "graphics.h"
#include "al-util.h"
#include "debugwriter.h"
#include "oneshot.h"
#include <SDL3/SDL_stdinc.h>
#include <cstdio>
#include <map>
#include <iostream>
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";

View file

@ -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);