- add option to ignore/use flags applied to Skyscraeper from within this module and
- hide flags controlling menuitems and their helptexts when option is set to ignore flags
- remember platform selection after gathering and reset platform selection after generatiing gamelist(s)
- add option to edit local platform extensions (peas_local.json) and web API platform id (platforms_idmap_local.csv) files
- adjust return codes: 0 Skyscraper success, 1+2 Skyscraper error, 3 user ctrl-c (module and Skyscraper), 4 scraping did not start (module only return value)
- fixed default selection when re-entering submenu
- display matching help when an item without helptext is selected
- update help texts and adjustment of dialog sizes
- provide brief helptexts where applicable instead of longer ones
- refactored boolean operators in if-statements
- added missing help texts for scraping modules: IGDB and MobyGames
- display matching dialog when Skyscraper was interrupted with Ctrl+C (from Skyscraper 3.21 onwards)
- remember platform selection between gathering data and generating game list
- less clutter in platform selection dialog and menuitem separation
- remeditate various shellcheck issues
- some wording updates
Do also rely on configured systems in EmulationStation config in addition
to the platform discovery in `~/RetroPie/roms/` to have a strict set of
available platforms.
`fcitx-libs-dev` is for Fcitx 4. On Debian 12, Debian 13, and Ubuntu 24.04+, the default input method is `fcitx5`.
In Debian package rules, `fcitx-libs-dev` conflicts with `fcitx5`. When installing SDL2 dependencies on Debian 12+, APT will remove `fcitx5`. Also, official Debian 12+ packages for SDL2 no longer use `fcitx-libs-dev`.
Both `p7zip` and `p7zip-full` are replaced by `7zip` in recent (Trixie) Debian and Ubuntu (26.04).
Map the packages in our helper since they're used in more than one place.
Ubuntu 26.04 no longer ships the p7zip package; it was replaced by 7zip.
Use __os_ubuntu_ver to select the correct package name on Ubuntu 26.04+,
keeping p7zip on all older distributions.
Co-authored-by: Claude Sonnet 4.6
Due to a recent upstream change in the `Makefile`, the SFML custom installed libs on RPI systems are not found by `pkg-config` and since `pkg-config` throws an error, the build fails due to missing include files and missing library names/paths.
To fix this, run the install steps for the `sfml-pi` library in order for the `.pc` files needed by `pkg-config` to be generated and then reference them during the `attractmode` build through the `PKG_CONFIG_PATH` env var.
Since the API keys have been revoked in Feb 2026 by TheGamesDB.Net site, replace the default key used by `scraper` with a new one.
New keys have a limit of 1000 scrapes per month, per user (individual IP address).
* Fixed the build errors caused by the `kjk/lzmadec` project being removed from Github.
The `vendor` folder contains a locally mirror of the module, but the `go` version we used ignores the vendored dependencies folder.
Bumping the `go` version fixes the build by using the local version of the package.
* Refactored the module to remove the `golang` module.
Since the `go` installation is needed _just_ for building (the result is a statically linked `scraper` binary), we don't need to have an entire installation kept outside the build step. Given the current lack of changes in the upstream project, I think it's better we provide a binary for installation instead of a source install + local `go` install. Thus:
- adopt the `golang` installation function into `scraper` as `_golang_scraper`, installing it in the build folder during a source installation.
- remove the `golang` module and add an update hook to remove its installation folder
- use `GOMODCACHE` and `GOPATH` so that `go` cache folders for packages download and build are not saved under `/root`.
In order to shorten the `go` commands, I used a subshell to be able to `export` the vars needed and keep them local.
The main version update is v0.10, which containes a lot of work done over the years to that included internal refactoring, broader device support, fixes for kernel and userspace changes. It also dual-licenses the module (GPL2 or GPL3) to make it compatible with the Linux kernel. New version also includes virtual mouse support, but it's deemed experimental and it's not enabled by default.
Since the new version doesn't work on older (< 5.12) kernels, in order to keep compatibility with Buster systems we install the last v0.9.8 version.
Along with the new version (v0.10), add an additional change in behavior through the module parameter `disable_shift_mode`. The parameter changes how the guide/home/Xbox button is reported - instead of behaving like a keypress, it emits a `BTN_MENU` event so it behaves like a button. This may have impact on existing button mappings, since it adds a new button to the list.
* Trixie needs the CFLAGS for pointer conversion checks to be relaxed
* Buster had an error with the WirinPi version detection which resulted in the wrong WiringPi `.deb` being installed
* Added `libconfuse-dev` as dependency, to avoid compiling the older vendored library included. The older version doesn't compile on Trixie without specifying the `--build` parameter for `configure`.
The mapping script tries to do a natural mapping for:
* face buttons (A,B,X,Y)
* start
* shoulder buttons
* dpad
* left analog controller
If the `hotkey_enable` button is set, add button combinations for:
* exit (+ Start)
* menu toggle (+ X)
* load state (+ Left Shoulder)
* save state (+ Right Shoulder)
* next save slot (+ Right, wraps at the 9th save state slot)
* previous save slot (+ Left, wraps at 0)
On Trixie, the 'fluidsynth' service starts automatically after the package is installed. On a RPI using ALSA, this will lock the HDMI audio output device since the HDMI card doesn't supports the DMIX plugin. This breaks audio for users that don't rely on a sound server (PulseAudio/Pipewire) since other programs started laster on will not be able to open the audio output device.
Note that even if the 'fluidsynth' package is not installed explicitely, it's a hard dependency for the accompanying `-dev` library package (explicitely added in Debian as a result of the CMake file included in the `-dev` package). So if the user installs a package needing the Fluidsynth libraries, the 'fluidsynth' package gets installed and thus the user service starts automatically.
The upstream Debian package will have this changed in Forky [1], so for now prevent the user service starting automatically by manually masking the user service.
[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1110912
* Switched to a different upstream repository, a fork of the previous project which is still actively maintained.
* Use `systemd` to start the controller driver, instead of starting it from `rc.local`.
Other minor modifications:
* changed the configuration dialog so that enable/disable is shown depending on the existing state
* removed the `configure` function since it's empty now
* added the `remove` function to delete the systemd service unit file upon module removal
Amend the disable/enable options for PipeWire and make sure we mask the `.service` units also. If we don't, then the script thinks PulseAudio user service is enabled, but since the actual service is stopped, we cannot configure the audio.
Discovered the error while testing the settings on Trixie.
* various: don't depend on 'libraspberrypi'
Remove the dependency on `libraspberrypi` packages for new RaspiOS Bookworm installations, since they're not useful anymore.
To do this, make the installation/usage in various scriptmodules depend on the `dispmanx` system flag instead of the `rpi` system flag. `dispmanx` is not set/used on RaspiOS Bookworm/Bullseye, but will still be set/used on Buster as before for Pi 0-4 platforms.
* raspbiantools: replace sdl1 package on upgrades when not needed
Our custom SDL1 package is not needed on non-Dipmanx platforms, but due to the previously installation flag ('rpi') could still be installed and depend on `libraspberrypi` (which is deprecated). So on `rpi` systems where `dispmanx` is not available and thus our package is not needed, replace the installed package with the version from the upstream repository. This should happen when an update + system packages is used.
The runcommand launch info screen will stay 'resident' under the emulator/port/etc. launched. While most of the time is not visible, it can show up when the launched program doesn't start full screen.
Based on the feedback from @protocultor:
- add the correct Hat mapping value ('h' and not 'hat')
- don't add automatically direction signs for axis mappings since they're only necessary in certain configurations.
However the info from the ES file is not enough to determine those configurations, though they seem to be an exception rather than the norm.
One case where the signs are needed seems to be when the D-Pad is mapped using axis, so that was left implemented.
New version needs WiringPi, but not the original version that got discontinued. There's an active fork of WiringPi which also provides `.deb` files, so check whether this new version is installed first before compiling locally a static version and using it.
Other modifications:
* modified the installation/build to use `$md_build` and handle the installation ourselves, instead of using the upstream `make` targets. This means the driver is copied to `/opt/retropie` (just like `xboxdrv`) instead of being located in `/usr/local`.
* added a `systemd` unit file to start the driver and don't rely on the upstream `rc.d` service scripts.
Added the ability for `runcommand` to load the SDL2 gamecontroller mappings created from the EmulationStation mappings and expose them as a SDL2 hint. Since the user may already have a mechanism to set the hint (from `.bashrc`/`.profile` or perhaps as part of the on-start scripts), don't overwrite the SDL2 hint if exists.
NB: since 2.0.22 the file containing the mappings can be set through the `SDL_HINT_GAMECONTROLLERCONFIG_FILE`, but to accomodate older SDL2 version, we're using `SDL_HINT_GAMECONTROLLERCONFIG` as a hint, which contains the actual mapping strings separated by newlines.
Added an input configuration script which will produce a SDL(2) gamecontroller mapping ([1]) based on the user's choices in the EmulationStation input configuration. The result of the mapping is saved in `/opt/retropie/configs/all/sdl2_gamecontrollerdb.txt`, which can be referenced by `runcommand` to load the mappings through SDL hints ([2] or [3]).
Since we're not trying to overwrite the existing built-in mappings, I've added a query method which needs `python3-sdl2` as dependency.
The mapping produced should follow the user's choices as far as inputs are concerned. The only 'outlier' is the 'hotkey enable' button, which is mapped to the 'Guide' SDL gamepad button IF its value is different than the _Select_ input. This way the extra button present on various gamepads (Xbox/PS) or a dedicated button chosen by the user can be mapped separately.
Ref:
[1] https://wiki.libsdl.org/SDL2/SDL_GameControllerAddMapping
[2] https://wiki.libsdl.org/SDL2/SDL_HINT_GAMECONTROLLERCONFIG
[3] https://wiki.libsdl.org/SDL2/SDL_HINT_GAMECONTROLLERCONFIG_FILE