Initial commit

This commit is contained in:
2026-02-02 04:50:13 +01:00
commit 5b11698731
22592 changed files with 7677434 additions and 0 deletions

View File

@@ -0,0 +1,71 @@
ScummVM-Switch README
==============================================================================
Installation
============
- The latest daily version of ScummVM for Switch is [here](https://buildbot.scummvm.org/snapshots/master/switch-master-latest.zip) (needs to be unzipped).
- Copy the scummvm folder to your SD card into the folder /switch/ so that you have a folder `/switch/scummvm` with `scummvm.nro` and other folders inside.
- Launch ScummVM using your favorite method to launch homebrew on the Switch
Notes
=====
- This README may be outdated, for more up-to-date instructions and notes see
the Switch Port Wiki: https://wiki.scummvm.org/index.php/Nintendo_Switch
Building the source code
========================
This port of ScummVM to the Switch is based on SDL2. It uses the open source SDK provided by devkitPro.
To build ScummVM for Switch:
- Obtain the ScummVM source code (https://github.com/scummvm/scummvm)
- Install the development tools for Switch following the official instructions (https://devkitpro.org/wiki/Getting_Started)
- Install libraries via
```
sudo dkp-pacman -S \
switch-sdl2 \
switch-libmad \
switch-libogg \
switch-libvorbis \
switch-flac \
switch-libtheora \
switch-libpng \
switch-libjpeg-turbo \
switch-zlib \
switch-freetype \
switch-sdl2_net \
switch-curl \
switch-libtimidity \
switch-pkg-config
```
- Optional: To enable fluidsynth support, download and install the unofficial fluidsynth-lite switch port via
```
git clone https://github.com/rsn8887/fluidsynth-lite
cd fluidsynth-lite
make -f Makefile.nx
make -f Makefile.nx install
```
- Create a subdirectory somewhere outside the source folder for your ScummVM build and cd into it
- Execute the command
```
../scummvm/configure --host=switch
```
- Execute the command
```
make scummvm_switch.zip
```
Port Authors
============
cpasjuste
rsn8887
Thanks
======
[devkitPro](https://devkitpro.org devkitPro) and [Switchbrew](https://switchbrew.org/) teams

View File

@@ -0,0 +1,56 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include <switch.h>
#include "common/scummsys.h"
#include "backends/platform/sdl/switch/switch.h"
#include "backends/plugins/sdl/sdl-provider.h"
#include "base/main.h"
int main(int argc, char *argv[]) {
socketInitializeDefault();
#ifdef __SWITCH_DEBUG__
nxlinkStdio();
#endif
// Create our OSystem instance
g_system = new OSystem_Switch();
assert(g_system);
// Pre initialize the backend
g_system->init();
#ifdef DYNAMIC_MODULES
PluginManager::instance().addPluginProvider(new SDLPluginProvider());
#endif
// Invoke the actual ScummVM main entry point:
int res = scummvm_main(argc, argv);
// Free OSystem
g_system->destroy();
socketExit();
return res;
}

View File

@@ -0,0 +1,171 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#define FORBIDDEN_SYMBOL_EXCEPTION_printf
#include <switch.h>
#include "common/scummsys.h"
#include "common/config-manager.h"
#include "common/translation.h"
#include "backends/platform/sdl/switch/switch.h"
#include "backends/events/switchsdl/switchsdl-events.h"
#include "backends/saves/posix/posix-saves.h"
#include "backends/fs/posix-drives/posix-drives-fs-factory.h"
#include "backends/fs/posix-drives/posix-drives-fs.h"
#include "backends/keymapper/hardware-input.h"
static const Common::HardwareInputTableEntry switchJoystickButtons[] = {
{ "JOY_A", Common::JOYSTICK_BUTTON_A, _s("B") },
{ "JOY_B", Common::JOYSTICK_BUTTON_B, _s("A") },
{ "JOY_X", Common::JOYSTICK_BUTTON_X, _s("Y") },
{ "JOY_Y", Common::JOYSTICK_BUTTON_Y, _s("X") },
{ "JOY_BACK", Common::JOYSTICK_BUTTON_BACK, _s("Minus") },
{ "JOY_START", Common::JOYSTICK_BUTTON_START, _s("Plus") },
{ "JOY_GUIDE", Common::JOYSTICK_BUTTON_START, _s("Plus") },
{ "JOY_LEFT_STICK", Common::JOYSTICK_BUTTON_LEFT_STICK, _s("L3") },
{ "JOY_RIGHT_STICK", Common::JOYSTICK_BUTTON_RIGHT_STICK, _s("R3") },
{ "JOY_LEFT_SHOULDER", Common::JOYSTICK_BUTTON_LEFT_SHOULDER, _s("L") },
{ "JOY_RIGHT_SHOULDER", Common::JOYSTICK_BUTTON_RIGHT_SHOULDER, _s("R") },
{ "JOY_UP", Common::JOYSTICK_BUTTON_DPAD_UP, _s("D-pad Up") },
{ "JOY_DOWN", Common::JOYSTICK_BUTTON_DPAD_DOWN, _s("D-pad Down") },
{ "JOY_LEFT", Common::JOYSTICK_BUTTON_DPAD_LEFT, _s("D-pad Left") },
{ "JOY_RIGHT", Common::JOYSTICK_BUTTON_DPAD_RIGHT, _s("D-pad Right") },
{ nullptr, 0, nullptr }
};
static const Common::AxisTableEntry switchJoystickAxes[] = {
{ "JOY_LEFT_TRIGGER", Common::JOYSTICK_AXIS_LEFT_TRIGGER, Common::kAxisTypeHalf, _s("ZL") },
{ "JOY_RIGHT_TRIGGER", Common::JOYSTICK_AXIS_RIGHT_TRIGGER, Common::kAxisTypeHalf, _s("ZR") },
{ "JOY_LEFT_STICK_X", Common::JOYSTICK_AXIS_LEFT_STICK_X, Common::kAxisTypeFull, _s("Left Stick X") },
{ "JOY_LEFT_STICK_Y", Common::JOYSTICK_AXIS_LEFT_STICK_Y, Common::kAxisTypeFull, _s("Left Stick Y") },
{ "JOY_RIGHT_STICK_X", Common::JOYSTICK_AXIS_RIGHT_STICK_X, Common::kAxisTypeFull, _s("Right Stick X") },
{ "JOY_RIGHT_STICK_Y", Common::JOYSTICK_AXIS_RIGHT_STICK_Y, Common::kAxisTypeFull, _s("Right Stick Y") },
{ nullptr, 0, Common::kAxisTypeFull, nullptr }
};
void OSystem_Switch::init() {
DrivesPOSIXFilesystemFactory *fsFactory = new DrivesPOSIXFilesystemFactory();
fsFactory->addDrive("sdmc:");
fsFactory->configureBuffering(DrivePOSIXFilesystemNode::kBufferingModeScummVM, 2048);
_fsFactory = fsFactory;
// Invoke parent implementation of this method
OSystem_SDL::init();
}
void OSystem_Switch::initBackend() {
ConfMan.registerDefault("fullscreen", true);
ConfMan.registerDefault("aspect_ratio", false);
ConfMan.registerDefault("gfx_mode", "2x");
ConfMan.registerDefault("filtering", true);
ConfMan.registerDefault("output_rate", 48000);
ConfMan.registerDefault("touchpad_mouse_mode", false);
ConfMan.setBool("fullscreen", true);
ConfMan.setInt("joystick_num", 0);
if (!ConfMan.hasKey("aspect_ratio")) {
ConfMan.setBool("aspect_ratio", false);
}
if (!ConfMan.hasKey("gfx_mode")) {
ConfMan.set("gfx_mode", "2x");
}
if (!ConfMan.hasKey("filtering")) {
ConfMan.setBool("filtering", true);
}
if (!ConfMan.hasKey("output_rate")) {
ConfMan.setInt("output_rate", 48000);
}
if (!ConfMan.hasKey("touchpad_mouse_mode")) {
ConfMan.setBool("touchpad_mouse_mode", false);
}
// Create the savefile manager
if (_savefileManager == 0) {
_savefileManager = new DefaultSaveFileManager("./saves");
}
// Event source
if (_eventSource == 0) {
_eventSource = new SwitchEventSource();
}
// Invoke parent implementation of this method
OSystem_SDL::initBackend();
}
bool OSystem_Switch::hasFeature(Feature f) {
if (f == kFeatureFullscreenMode)
return false;
return (f == kFeatureTouchpadMode ||
OSystem_SDL::hasFeature(f));
}
void OSystem_Switch::logMessage(LogMessageType::Type type, const char *message) {
printf("%s\n", message);
}
Common::Path OSystem_Switch::getDefaultLogFileName() {
return "scummvm.log";
}
Common::HardwareInputSet *OSystem_Switch::getHardwareInputSet() {
using namespace Common;
CompositeHardwareInputSet *inputSet = new CompositeHardwareInputSet();
// Users may use USB / bluetooth mice and keyboards
inputSet->addHardwareInputSet(new MouseHardwareInputSet(defaultMouseButtons));
inputSet->addHardwareInputSet(new KeyboardHardwareInputSet(defaultKeys, defaultModifiers));
inputSet->addHardwareInputSet(new JoystickHardwareInputSet(switchJoystickButtons, switchJoystickAxes));
return inputSet;
}
Common::String OSystem_Switch::getSystemLanguage() const {
u64 lang;
SetLanguage langcode;
setInitialize();
setGetSystemLanguage(&lang);
setMakeLanguage(lang, &langcode);
switch (langcode) {
case SetLanguage_JA: return "ja_JP";
case SetLanguage_ENUS: return "en_US";
case SetLanguage_FR: return "fr_FR";
case SetLanguage_FRCA: return "fr_FR";
case SetLanguage_DE: return "de_DE";
case SetLanguage_IT: return "it_IT";
case SetLanguage_ES: return "es_ES";
case SetLanguage_ZHCN: return "zh_CN";
case SetLanguage_KO: return "ko_KR";
case SetLanguage_NL: return "nl_NL";
case SetLanguage_PT: return "pt_PT";
case SetLanguage_RU: return "ru_RU";
case SetLanguage_ZHTW: return "zh_HK";
default: return "en_US";
}
}

View File

@@ -0,0 +1,41 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef PLATFORM_SDL_SWITCH_H
#define PLATFORM_SDL_SWITCH_H
#include "backends/platform/sdl/sdl.h"
class OSystem_Switch : public OSystem_SDL {
public:
void init() override;
void initBackend() override;
bool hasFeature(Feature f) override;
void logMessage(LogMessageType::Type type, const char *message) override;
Common::HardwareInputSet *getHardwareInputSet() override;
virtual Common::String getSystemLanguage() const;
protected:
Common::Path getDefaultLogFileName() override;
};
#endif

View File

@@ -0,0 +1,35 @@
scummvm.nro: $(EXECUTABLE)
mkdir -p ./switch_release/scummvm/data
mkdir -p ./switch_release/scummvm/doc
nacptool --create "ScummVM" "ScummVM Team" "$(VERSION)" ./switch_release/scummvm.nacp
elf2nro $(EXECUTABLE) ./switch_release/scummvm/scummvm.nro --icon=$(srcdir)/dists/switch/icon.jpg --nacp=./switch_release/scummvm.nacp
switch_release: scummvm.nro
rm -f ./switch_release/scummvm.nacp
cp $(DIST_FILES_THEMES) ./switch_release/scummvm/data
ifdef DIST_FILES_ENGINEDATA
cp $(DIST_FILES_ENGINEDATA) ./switch_release/scummvm/data
endif
ifdef DIST_FILES_ENGINEDATA_BIG
cp $(DIST_FILES_ENGINEDATA_BIG) ./switch_release/scummvm/data
endif
ifdef DIST_FILES_SOUNDFONTS
cp $(DIST_FILES_SOUNDFONTS) ./switch_release/scummvm/data
endif
ifdef DIST_FILES_NETWORKING
cp $(DIST_FILES_NETWORKING) ./switch_release/scummvm/data
endif
ifdef DIST_FILES_VKEYBD
cp $(DIST_FILES_VKEYBD) ./switch_release/scummvm/data
endif
ifdef DIST_FILES_SHADERS
mkdir -p ./switch_release/scummvm/data/shaders
cp $(DIST_FILES_SHADERS) ./switch_release/scummvm/data/shaders
endif
cp $(DIST_FILES_DOCS) ./switch_release/scummvm/doc/
cp $(srcdir)/backends/platform/sdl/switch/README.SWITCH ./switch_release/scummvm/doc/
scummvm_switch.zip: switch_release
cd ./switch_release && zip -r ../scummvm_switch.zip . && cd ..
.PHONY: scummvm.nro switch_release scummvm_switch.zip