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,50 @@
Build instructions
==================
Running Linux on an x86/amd64 machine:
1. Download and install the desired toolchain (https://github.com/OpenDingux/buildroot/releases) in /opt/
For example, for gcw0:
curl -L https://github.com/OpenDingux/buildroot/releases/download/od-2022.09.22/opendingux-gcw0-toolchain.2022-09-22.tar.xz -o gcw0-toolchain.tar.xz && \
sudo mkdir -p /opt/gcw0-toolchain && sudo chown -R "${USER}:" /opt/gcw0-toolchain && \
tar -C /opt -xf gcw0-toolchain.tar.xz && \
cd /opt/gcw0-toolchain && \
./relocate-sdk.sh
2. git clone the ScummVM repository
3. Run 'backends/platform/sdl/opendingux/build_odbeta.sh x'
where x=gcw0|lepus|rs90
the rs90 build applies to the rg99
Or if you want a dual opk with one launcher capable of starting games directly
for e.g. simplemenu integration :
'backends/platform/sdl/opendingux/build_odbeta.sh x dualopk'
4. Copy the resulting file scummvm_$(target).opk or scummvm_$(target)_dual.opk to your device
Game Auto-Detection (dualopk only)
==================================
1) add a blank text file 'detect.svm' alongside your individual game folders, for example:
---------------
| - roms/scummvm/
| - detect.svm
| - Game Folder/
| - game files
------------------
2) load ScummVM, navigate to and select 'detect.svm'
- the loading screen will show while the script runs
- this may take longer if you have many games
- .svm files will be generated for each of your games
3) load one of the .svm files to start your game directly
Troubleshooting
===============
In case you need to submit a bugreport, you may find the log file at the
following path:
~/.scummvm/scummvm.log
The log file is being overwritten at every ScummVM run.

View File

@@ -0,0 +1,39 @@
[ScummVM-Opendingux README]
Controls
========
Left Stick - Mouse
Left Stick+R - Slow Mouse
A - Left mouse click
B - Right mouse click
Y - Escape
L - Game Menu (F5)
Start - Global Menu
Select - Virtual Keyboard
Dpad - Keypad Cursor Keys
On devices that have no stick, d-pad is mouse, cursor keys are not binded
Game Auto-Detection (dualopk only)
==================================
1) add a blank text file 'detect.svm' alongside your individual game folders, for example:
---------------
| - roms/scummvm/
| - detect.svm
| - Game Folder/
| - game files
------------------
2) load ScummVM, navigate to and select 'detect.svm'
- the loading screen will show while the script runs
- this may take longer if you have many games
- .svm files will be generated for each of your games
3) load one of the .svm files to start your game directly
Troubleshooting
===============
In case you need to submit a bugreport, you may find the log file at the
following path:
~/.scummvm/scummvm.log
The log file is being overwritten at every ScummVM run.

View File

@@ -0,0 +1,38 @@
#!/bin/bash
set -e
target=$1
if [ "$2" = "dualopk" ]; then
dualopk="dualopk=yes"
else
dualopk=
fi
case $target in
gcw0)
libc=uclibc
;;
lepus | rs90)
libc=musl
;;
*)
echo "please provide a valid target for the build: gcw0, lepus or rs90"
exit 1
;;
esac
TOOLCHAIN=/opt/$target-toolchain
SYSROOT=$TOOLCHAIN/mipsel-$target-linux-$libc
export PATH=$TOOLCHAIN/usr/bin:$SYSROOT/usr/include:$TOOLCHAIN/bin:$PATH
export CXX=mipsel-linux-g++
./configure --host=opendingux-$target --enable-release --disable-detection-full --default-dynamic --enable-plugins
make -j12 od-make-opk $dualopk
ls -lh scummvm_$target*.opk

View File

@@ -0,0 +1,44 @@
/* 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 "backends/platform/sdl/opendingux/opendingux.h"
#include "backends/plugins/sdl/sdl-provider.h"
#include "base/main.h"
int main(int argc, char* argv[]) {
g_system = new OSystem_SDL_Opendingux();
assert(g_system);
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();
return res;
}

View File

@@ -0,0 +1,217 @@
/* 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_system
#include "common/scummsys.h"
#include "common/config-manager.h"
#include "common/translation.h"
#include "backends/graphics/opendingux/opendingux-graphics.h"
#include "backends/platform/sdl/opendingux/opendingux.h"
#include "backends/fs/posix/posix-fs-factory.h"
#include "backends/fs/posix/posix-fs.h"
#include "backends/saves/default/default-saves.h"
#include "backends/keymapper/action.h"
#include "backends/keymapper/keymapper-defaults.h"
#include "backends/keymapper/hardware-input.h"
#include "backends/keymapper/keymap.h"
#include "backends/keymapper/keymapper.h"
#define SCUMM_DIR "~/.scummvm"
#define CONFIG_FILE "~/.scummvmrc"
#define SAVE_PATH "~/.scummvm/saves"
#define LOG_FILE "~/.scummvm/scummvm.log"
#define JOYSTICK_DIR "/sys/devices/platform/joystick"
static const Common::KeyTableEntry odKeyboardButtons[] = {
// I18N: Hardware key
{ "JOY_A", Common::KEYCODE_LCTRL, _s("A") },
// I18N: Hardware key
{ "JOY_B", Common::KEYCODE_LALT, _s("B") },
// I18N: Hardware key
{ "JOY_X", Common::KEYCODE_SPACE, _s("X") },
// I18N: Hardware key
{ "JOY_Y", Common::KEYCODE_LSHIFT, _s("Y") },
// I18N: Hardware key
{ "JOY_BACK", Common::KEYCODE_ESCAPE, _s("Select") },
// I18N: Hardware key
{ "JOY_START", Common::KEYCODE_RETURN, _s("Start") },
// I18N: Hardware key
{ "JOY_LEFT_SHOULDER", Common::KEYCODE_TAB, _s("L") },
// I18N: Hardware key
{ "JOY_RIGHT_SHOULDER", Common::KEYCODE_BACKSPACE, _s("R") },
{ "JOY_UP", Common::KEYCODE_UP, _s("D-pad Up") },
{ "JOY_DOWN", Common::KEYCODE_DOWN, _s("D-pad Down") },
{ "JOY_LEFT", Common::KEYCODE_LEFT, _s("D-pad Left") },
{ "JOY_RIGHT", Common::KEYCODE_RIGHT, _s("D-pad Right") },
{nullptr, Common::KEYCODE_INVALID, nullptr }
};
static const Common::HardwareInputTableEntry odJoystickButtons[] = {
// I18N: Hardware key
{ "JOY_LEFT_TRIGGER", Common::JOYSTICK_BUTTON_LEFT_STICK, _s("L3") },
{ nullptr, 0, nullptr }
};
static const Common::AxisTableEntry odJoystickAxes[] = {
{ "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") },
{ nullptr, 0, Common::kAxisTypeFull, nullptr }
};
Common::KeymapperDefaultBindings *OSystem_SDL_Opendingux::getKeymapperDefaultBindings() {
Common::KeymapperDefaultBindings *keymapperDefaultBindings = new Common::KeymapperDefaultBindings();
if (!Posix::assureDirectoryExists(JOYSTICK_DIR)) {
keymapperDefaultBindings->setDefaultBinding(Common::kGlobalKeymapName, "VMOUSEUP", "JOY_UP");
keymapperDefaultBindings->setDefaultBinding(Common::kGlobalKeymapName, "VMOUSEDOWN", "JOY_DOWN");
keymapperDefaultBindings->setDefaultBinding(Common::kGlobalKeymapName, "VMOUSELEFT", "JOY_LEFT");
keymapperDefaultBindings->setDefaultBinding(Common::kGlobalKeymapName, "VMOUSERIGHT", "JOY_RIGHT");
keymapperDefaultBindings->setDefaultBinding(Common::kGuiKeymapName, "UP", "");
keymapperDefaultBindings->setDefaultBinding(Common::kGuiKeymapName, "DOWN", "");
keymapperDefaultBindings->setDefaultBinding(Common::kGuiKeymapName, "LEFT", "");
keymapperDefaultBindings->setDefaultBinding(Common::kGuiKeymapName, "RIGHT", "");
keymapperDefaultBindings->setDefaultBinding("engine-default", "UP", "");
keymapperDefaultBindings->setDefaultBinding("engine-default", "DOWN", "");
keymapperDefaultBindings->setDefaultBinding("engine-default", "LEFT", "");
keymapperDefaultBindings->setDefaultBinding("engine-default", "RIGHT", "");
}
return keymapperDefaultBindings;
}
void OSystem_SDL_Opendingux::init() {
_fsFactory = new POSIXFilesystemFactory();
if (!Posix::assureDirectoryExists(SCUMM_DIR)) {
system("mkdir " SCUMM_DIR);
}
// Invoke parent implementation of this method
OSystem_SDL::init();
}
void OSystem_SDL_Opendingux::initBackend() {
#ifdef RS90
ConfMan.registerDefault("fullscreen", false);
#else
ConfMan.registerDefault("fullscreen", true);
#endif
ConfMan.registerDefault("aspect_ratio", true);
ConfMan.registerDefault("themepath", Common::Path("./themes"));
ConfMan.registerDefault("extrapath", Common::Path("./engine-data"));
ConfMan.registerDefault("gui_theme", "builtin");
ConfMan.registerDefault("scale_factor", "1");
ConfMan.setBool("fullscreen", true);
ConfMan.setInt("joystick_num", 0);
if (!ConfMan.hasKey("aspect_ratio")) {
ConfMan.setBool("aspect_ratio", true);
}
if (!ConfMan.hasKey("themepath")) {
ConfMan.setPath("themepath", "./themes");
}
if (!ConfMan.hasKey("extrapath")) {
ConfMan.setPath("extrapath", "./engine-data");
}
if (!ConfMan.hasKey("savepath")) {
ConfMan.setPath("savepath", SAVE_PATH);
}
if (!ConfMan.hasKey("gui_theme")) {
ConfMan.set("gui_theme", "builtin");
}
if (!ConfMan.hasKey("scale_factor")) {
ConfMan.set("scale_factor", "1");
}
if (!ConfMan.hasKey("opl_driver")) {
ConfMan.set("opl_driver", "db");
}
if (!ConfMan.hasKey("kbdmouse_speed")) {
ConfMan.setInt("kbdmouse_speed", 2);
}
#ifdef LEPUS
if (!ConfMan.hasKey("output_rate")) {
ConfMan.set("output_rate", "22050");
}
#elif RS90
if (!ConfMan.hasKey("output_rate")) {
ConfMan.set("output_rate", "11025");
}
#endif
// Create the savefile manager
if (_savefileManager == nullptr) {
_savefileManager = new DefaultSaveFileManager(SAVE_PATH);
}
if (!_eventSource)
_eventSource = new SdlEventSource();
if (!_graphicsManager)
_graphicsManager = new OpenDinguxGraphicsManager(_eventSource, _window);
OSystem_SDL::initBackend();
}
Common::Path OSystem_SDL_Opendingux::getDefaultConfigFileName() {
return CONFIG_FILE;
}
Common::Path OSystem_SDL_Opendingux::getDefaultLogFileName() {
return LOG_FILE;
}
bool OSystem_SDL_Opendingux::hasFeature(Feature f) {
switch (f) {
case kFeatureFullscreenMode:
case kFeatureAspectRatioCorrection:
return false;
case kFeatureKbdMouseSpeed:
return true;
default:
return OSystem_SDL::hasFeature(f);
}
}
void OSystem_SDL_Opendingux::setFeatureState(Feature f, bool enable) {
OSystem_SDL::setFeatureState(f, enable);
}
bool OSystem_SDL_Opendingux::getFeatureState(Feature f) {
return OSystem_SDL::getFeatureState(f);
}
Common::HardwareInputSet *OSystem_SDL_Opendingux::getHardwareInputSet() {
using namespace Common;
CompositeHardwareInputSet *inputSet = new CompositeHardwareInputSet();
// Users may use USB mice - keyboards currently not possible with SDL1 as it conflicts with gpios
inputSet->addHardwareInputSet(new MouseHardwareInputSet(defaultMouseButtons));
//inputSet->addHardwareInputSet(new KeyboardHardwareInputSet(defaultKeys, defaultModifiers));
inputSet->addHardwareInputSet(new KeyboardHardwareInputSet(odKeyboardButtons, defaultModifiers));
inputSet->addHardwareInputSet(new JoystickHardwareInputSet(odJoystickButtons, odJoystickAxes));
return inputSet;
}

View File

@@ -0,0 +1,42 @@
/* 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_OPENDINGUX_H
#define PLATFORM_SDL_OPENDINGUX_H
#include "backends/platform/sdl/sdl.h"
class OSystem_SDL_Opendingux : public OSystem_SDL {
public:
void init() override;
void initBackend() override;
bool hasFeature(Feature f) override;
void setFeatureState(Feature f, bool enable) override;
bool getFeatureState(Feature f) override;
Common::HardwareInputSet *getHardwareInputSet() override;
Common::KeymapperDefaultBindings *getKeymapperDefaultBindings() override;
protected:
Common::Path getDefaultConfigFileName() override;
Common::Path getDefaultLogFileName() override;
};
#endif

View File

@@ -0,0 +1,55 @@
OD_EXE_STRIPPED := scummvm_stripped$(EXEEXT)
bundle = od-opk
OPKNAME = $(OPENDINGUX_TARGET)
all: $(OD_EXE_STRIPPED)
$(OD_EXE_STRIPPED): $(EXECUTABLE)
$(STRIP) $< -o $@
$(bundle): all
$(MKDIR) $(bundle)
$(CP) $(DIST_FILES_DOCS) $(bundle)/
ifneq ($(OPENDINGUX_TARGET), rs90)
$(MKDIR) $(bundle)/themes
$(CP) $(DIST_FILES_THEMES) $(bundle)/themes/
endif
ifdef DIST_FILES_ENGINEDATA
$(MKDIR) $(bundle)/engine-data
$(CP) $(DIST_FILES_ENGINEDATA) $(bundle)/engine-data/
endif
ifdef DIST_FILES_NETWORKING
$(CP) $(DIST_FILES_NETWORKING) $(bundle)/
endif
ifdef DIST_FILES_VKEYBD
$(CP) $(DIST_FILES_VKEYBD) $(bundle)/
endif
ifdef DYNAMIC_MODULES
$(MKDIR) $(bundle)/plugins
$(CP) $(PLUGINS) $(bundle)/plugins/
endif
$(CP) $(EXECUTABLE) $(bundle)/scummvm
$(CP) $(srcdir)/dists/opendingux/scummvm.png $(bundle)/
$(CP) $(srcdir)/dists/opendingux/startUI.$(OPENDINGUX_TARGET).desktop $(bundle)/
ifdef dualopk
$(CP) $(srcdir)/dists/opendingux/startGame.$(OPENDINGUX_TARGET).desktop $(bundle)/
$(CP) $(srcdir)/dists/opendingux/scummvm.sh $(bundle)/
endif
$(CP) $(srcdir)/backends/platform/sdl/opendingux/README.OPENDINGUX $(bundle)/README.man.txt
echo >> $(bundle)/README.man.txt
echo '[General README]' >> $(bundle)/README.man.txt
echo >> $(bundle)/README.man.txt
cat $(srcdir)/README.md | sed -e 's/\[/⟦/g' -e 's/\]/⟧/g' -e '/^1\.1)/,$$ s/^[0-9][0-9]*\.[0-9][0-9]*.*/\[&\]/' >> $(bundle)/README.man.txt
od-make-opk: $(bundle)
$(STRIP) $(bundle)/scummvm
ifdef dualopk
$(srcdir)/dists/opendingux/make-opk.sh -d $(bundle) -o scummvm_$(OPKNAME)_dual
else
$(srcdir)/dists/opendingux/make-opk.sh -d $(bundle) -o scummvm_$(OPKNAME)
endif