Initial commit
This commit is contained in:
71
backends/platform/sdl/switch/README.SWITCH
Normal file
71
backends/platform/sdl/switch/README.SWITCH
Normal 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
|
||||
56
backends/platform/sdl/switch/switch-main.cpp
Normal file
56
backends/platform/sdl/switch/switch-main.cpp
Normal 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;
|
||||
}
|
||||
171
backends/platform/sdl/switch/switch.cpp
Normal file
171
backends/platform/sdl/switch/switch.cpp
Normal 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";
|
||||
}
|
||||
}
|
||||
41
backends/platform/sdl/switch/switch.h
Normal file
41
backends/platform/sdl/switch/switch.h
Normal 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
|
||||
|
||||
35
backends/platform/sdl/switch/switch.mk
Normal file
35
backends/platform/sdl/switch/switch.mk
Normal 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
|
||||
Reference in New Issue
Block a user