diff --git a/ANDROID-DEV.md b/ANDROID-DEV.md index ea9e5304c..5dfdb1719 100644 --- a/ANDROID-DEV.md +++ b/ANDROID-DEV.md @@ -1,6 +1,6 @@ # ES-DE Frontend (development version) - Android documentation -This document contains information specific to the Android release, for more general ES-DE documentation refer to the [User guide](USERGUIDE.md) as well as the general [FAQ](FAQ.md). +This document contains information specific to the Android release, for more general ES-DE documentation refer to the [User guide](USERGUIDE-DEV.md) as well as the general [FAQ](FAQ.md). It's also generally recommended to read the [Frequently Asked Questions (FAQ) for Android](FAQ-ANDROID.md) document prior to diving into the information in this document. @@ -31,7 +31,7 @@ If you need to re-run the configurator for some reason then the easiest way is t By default the touch input overlay will be enabled which makes it possible to use ES-DE without a controller or physical keyboard by overlaying virtual buttons on top of the ES-DE interface. If you are using a device which has a built-in controller you may however want to disable this feature. That is done via the _Enable touch overlay_ option in the _Input device settings_ menu on the main menu. Just be aware that disabling this option on a device where you have no other input method than touch will lock you out of the application. -If you accidentally disable the touch overlay you can force the configurator to run as explained in the previous section above, this will always reset the touch overlay setting. Another option would of course be to temporarily plug in a controller or keyboard to enable the setting via its menu entry. A third option would be to manually edit the es_settings.xml file in the ES-DE application data directory. The setting you are after is named _InputTouchOverlay_ which should be changed from _false_ to _true_. +If you accidentally disable the touch overlay you can force the configurator to run as explained in the previous section above, this will reset the touch overlay setting as long as you have at least pressed the _Begin setup_ button. Another option would of course be to temporarily plug in a controller or keyboard to enable the setting via its menu entry. A third option would be to manually edit the es_settings.xml file in the ES-DE application data directory. The setting you are after is named _InputTouchOverlay_ which should be changed from _false_ to _true_. Apart from this there are numerous options for the touch overlay, like the ability to change its size, opacity and fade-out time. Setting the fade-out to zero will make it permanently visible. See the [User guide](USERGUIDE-DEV.md) for a complete reference of all app settings and features. @@ -55,14 +55,13 @@ Some emulators like RetroArch are still using an older storage access method and The following emulators are configured for FileProvider access: * 2600.emu +* DroidArcadia * FPseNG (still needs scoped storage to be setup in emulator) * FPse (still needs scoped storage to be setup in emulator) * GBA.emu * GBC.emu * Lynx.emu * MD.emu (genesis, mastersystem, megadrive, megadrivejp) -* MAME4droid 2024 -* MAME4droid * NES.emu * NGP.emu * PCE.emu (pcengine, supergrafx and tg16 systems) @@ -156,16 +155,37 @@ This is obviously a non-portable collection. You can relocate as many systems as you want, you just need to place them all within the systemList tag pairs in ES-DE/custom_systems/es_systems.xml. -## Issues with the Ayn Odin 2 +## Launching native Android apps and games -There is one serious issue that seems to be specific to the Ayn Odin 2, and that is that a number of standalone emulators can't be launched. When attempting to run such an emulator an error popup with the game name followed by "ERROR CODE -1" is displayed. The affected emulators are ColEm, fMSX, iNES, MasterGear, My Boy!, My OldBoy!, Redream and Speccy. +As of ES-DE 3.0.2 there is experimental support for launching native Android apps and games from inside ES-DE. For the time being it does however require that you use a separate app to import your apps and games into ES-DE. But following this initial setup launching native apps and games works just like launching games for any other system. -There are also some issues with sound quality on the Odin 2, such as large fluctuations in volume where some sounds are quite loud and some are quite silent. There are also some strange aliasing effects when playing samples rapidly. +First head to this GitHub repository and download the ES Applauncher APK:\ +https://github.com/schattenphoenix/es_applauncher/releases + +Many thanks to Alex Pferdmenges for developing this app! + +After installing the APK on your device and giving it the necessary permissions you'll see a list of your apps and you can classify the ones you want as games, and you can disable the ones you want to skip via the _Game_ and _Disable_ checkboxes on the right side of the screen. You can also choose to extract the icons for these apps and store them into one of the media folders inside the ES-DE/downloaded_media directory. The _Media dir_ dropdown at the top of the screen lets you select the media type. It's generally recommended to use _screenshots_ or _covers_ or you can skip this step altogether as most of these icons are pretty low resolution anyway. + +To populate the _androidapps_ and _androidgames_ system directories press the save icon in the upper right corner of the screen and select your ROMs directory from the selector interface. For example this could be _ROMs_ directly on internal storage, or on your SD card. Just press the _Use this folder_ button and the directories and files will be generated for you. Now you can start ES-DE and launch these apps and games directly. + +Note that it seems like ES Applauncher has issues working correctly on some Android 10 devices. + +It's also possible to scrape Android apps and games using ScreenScraper, but at the time of writing the amount of entries in their database is somehow limited. It's therefore encouraged to participate in improving this situation by contributing metadata and media to their database, this will benefit everyone in the long run. + +A built-in import tool for native Android apps and games is also planned for a future ES-DE release. + +## Running ES-DE as the Android home app + +To run ES-DE as the home app (launcher) you'll select it accordingly from the Apps section of the Android Settings app. When in this mode the ability to quit the app is completely disabled as it doesn't make sense to exit the home app. Therefore the _Quit ES-DE_ entry on the main menu is removed and the _Back button/back swipe exits app_ option in the _Other settings_ menu and its corresponding functionality is disabled. + +Apart from this it works as you'd expect, ES-DE will start automatically when rebooting the device and pressing the home button will return to ES-DE regardless of which app you have running. + +If the operating system runs out of memory when a game is running it will kill ES-DE even if it's set as home app. If this happens ES-DE will reload whenever you return from the game or if you press the home button. This is simply how Android works. + +It's generally a very good idea to import your native Android apps into ES-DE prior to setting it as the home app, this way you can easily access things like the Settings app. Note however that even if you somehow lock yourself out of the system by setting ES-DE as the home app and not having any native apps added you can still always access the Settings app via the Android notification shade. On most devices you access this by swiping down from the top of the screen. After swiping down, just select the cogwheel icon to start the Settings app. From there you can change the home app to something else than ES-DE, should you need to. ## Known ES-DE problems -In addition to the issues specific to the Ayn Odin 2 there are a couple of other problems that will hopefully be resolved in the near future: - * Poor performance/low frame rate after startup on some devices, which seems to happen randomly and is usually resolved by itself within 10 to 30 seconds. * The Android soft keyboard causes rendering issues when navigating using a controller or physical keyboard, as such the ES-DE built-in keyboard is enabled by default for the time being. For testing purposes the Android soft keyboard can be enabled via the _Enable virtual keyboard_ option in the _UI settings_ menu. If only using touch input the issue is not present. This problem is believed to be caused by a bug in the SDL library so it probably needs to be resolved there. * Using a mounted USB storage device for the ES-DE and/or ROMs directories will lead to the configurator exiting after finishing the setup instead of launching ES-DE. Restarting ES-DE manually will lead to a successful startup. If the option to create the system directories was selected in the configurator then this will have to be executed again from inside ES-DE. Note that using a mounted USB storage device leads to a very crippled setup anyway, as for example RetroArch can't read any games from such devices (i.e. from the /mnt/media_rw/ directory tree). Only emulators supporting scoped storage will be usable in such a setup. @@ -176,9 +196,10 @@ Below are specific instructions and considerations for all supported emulators. ### RetroArch -The RetroArch release from the Google Play store is problematic. It does not contain all emulator cores and a number of people have reported issues launching games from ES-DE (apparently it doesn't work at all on some devices). For these reasons it's strongly recommended to use the 64-bit release from the RetroArch website instead, or to install it from the Amazon Appstore or the F-Droid store. +The RetroArch release from the Google Play store is problematic. It does not contain all emulator cores and a number of people have reported issues launching games from ES-DE (apparently it doesn't work at all on some devices). For these reasons it's strongly recommended to use the 64-bit release from the RetroArch website instead, or to install it from the Samsung Galaxy Store, Amazon Appstore or the F-Droid store. https://retroarch.com \ +https://galaxystore.samsung.com/detail/com.retroarch \ https://www.amazon.com/dp/B09753XRVF \ https://f-droid.org/en/packages/com.retroarch @@ -194,8 +215,9 @@ https://github.com/Trixarian/NetherSX2-patch ### Citra -The Citra emulator is no longer in active development and it's unclear where it can be obtained and whether it will be worked on in the future. The Citra MMJ fork is still available for download from their GitHub site. +The original Citra emulator project is no longer alive, but there is a fork that should work as a drop-in replacement. The Citra MMJ fork is also a viable alternative. Both of these emulators are available for download from their GitHub sites. +https://github.com/PabloMK7/citra/releases \ https://github.com/weihuoya/citra/releases ### ColEm @@ -213,7 +235,7 @@ The Play store version is somehow up to date and could be used, otherwise the F- https://play.google.com/store/apps/details?id=org.dolphinemu.dolphinemu \ https://f-droid.org/en/packages/org.dolphinemu.dolphinemu \ -https://dolphin-emu.org/download/ +https://dolphin-emu.org/download ### Dolphin MMJR and MMJR2 @@ -229,6 +251,12 @@ This emulator can be installed from the Play store as a paid app. Note that it d https://play.google.com/store/apps/details?id=com.dsemu.drastic +### DroidArcadia + +This emulator can be downloaded directly from their website. + +http://amigan.1emu.net/releases + ### DuckStation The Play store version of this emulator is getting frequent updates and is therefore recommended. @@ -296,10 +324,26 @@ This emulator can be installed from the Play store. https://play.google.com/store/apps/details?id=com.fms.ines.free +### IrataJaguar + +This Atari Jaguar emulator can be downloaded from their website. Just be aware that it's very old and has not been updated for modern Android releases, so it may be finicky on some devices or it may not work at all. + +After installing the emulator, open it and go to the settings tab, then choose "Select ISO and BIOS directory" and navigate to the ROMs/atarijaguar folder. It seems like you also need to start the game from inside the emulator before you can run it from ES-DE. Starting a game will create a savestate file. If you now exit the emulator and run the game from ES-DE you'll see a list of savestate files, just select the correct one to start the game. + +http://www.arts-union.ru/node/23 + +### Lime3DS + +This emulator which is forked from Citra can be downloaded from their GitHub site. + +https://github.com/Lime3DS/Lime3DS/releases + ### MAME4droid 2024 and MAME4droid These emulators can be installed from the Play store. It's strongly recommended to go for the _MAME4droid 2024_ version as this is updated with a recent MAME release while the older _MAME4droid_ is using an ancient MAME release. +Note that for MAME4droid 2024 there's an exception when it comes to setting up the ROM path. Instead of selecting each separate system directory (as is done on most other standalone emulators) you must select the root of the ROMs directory tree. To change the ROM path open _Settings_ in MAME4droid 2024, then select _General_ and then _Change ROMs path_. After restarting the emulator choose _External storage_ and then the ROMs directory which contains all your ES-DE system directories. If you instead choose a specific system directory like ROMs/arcade or ROMs/neogeo then only that specific system will work when launching games from ES-DE. + https://play.google.com/store/apps/details?id=com.seleuco.mame4d2024 \ https://play.google.com/store/apps/details?id=com.seleuco.mame4droid @@ -331,7 +375,7 @@ https://github.com/mupen64plus-ae/mupen64plus-ae/actions ### My Boy! and My OldBoy! -These emulators can be installed from the Play store as paid apps. There are also free/Lite versions availble for these emulators but they have not been updated in years and don't run on modern devices. As such they are not supported by ES-DE. +These emulators can be installed from the Play store as paid apps. There are also free/Lite versions available for these emulators but they have not been updated in years and don't run on modern devices. As such they are not supported by ES-DE. https://play.google.com/store/apps/details?id=com.fastemulator.gba \ https://play.google.com/store/apps/details?id=com.fastemulator.gbc @@ -359,9 +403,13 @@ https://github.com/wheremyfoodat/Panda3DS/releases ### Pizza Boy GBA and Pizza Boy GBC -The Pizza Boy GBA and Pizza Boy GBC emulators used to be available on the Play store but have since been taken down. There used to be Basic (free) versions and Pro (paid) versions. It's unclear what the status is for these emulators and if they are still in active development. It's also unclear where they can be downloaded. +The Pizza Boy GBA and Pizza Boy GBC emulators can be installed from the Play store. There are Basic (free) versions and Pro (paid) versions available. +As of writing this, the Basic version of the GBA emulator does not seem to be able to launch games from ES-DE, but the Pro version is working fine. Both the Basic and Pro versions of the GBC emulator are working correctly. -As of writing this, the latest available Basic version of the GBA emulator does not seem to be able to launch games from ES-DE, but the Pro version is working fine. Both the Basic and Pro versions of the GBC emulator are working correctly. +https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboygba \ +https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboygbapro \ +https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboy \ +https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboypro ### Play! @@ -400,6 +448,12 @@ This emulator can be installed for free from the Play store and can later be upg https://play.google.com/store/apps/details?id=io.recompiled.redream +### ScummVM + +ScummVM can be installed from the Play store. There are also daily builds available on their GitHub site. Such a build may be required to be able to launch games from ES-DE until the Play store version has been updated. + +https://play.google.com/store/apps/details?id=org.scummvm.scummvm\ +https://buildbot.scummvm.org/#/dailybuilds ### Skyline @@ -416,6 +470,14 @@ Although this emulator supports both the Sinclar ZX Spectrum and MGT SAM Coupé https://play.google.com/store/apps/details?id=com.fms.speccy \ https://play.google.com/store/apps/details?id=com.fms.speccy.deluxe +### Visual Pinball + +Although Visual Pinball is working fine on Android it's not possible to properly integrate it with a frontend, you'll instead need to install your tables inside the app and create dummy .vpinball files for your games in ROMs/vpinball and after launching a table from ES-DE you need to manually start it from inside the Visual Pinball GUI. There are more detailed setup instructions in the Visual Pinball section of the User guide. + +You can download Visual Pinball from their GitHub automatic build system. + +https://github.com/vpinball/vpinball/actions + ### Vita3K This PlayStation Vita emulator can be downloaded from their GitHub site. Refer to the User guide for detailed game setup instructions. @@ -424,9 +486,8 @@ https://github.com/Vita3K/Vita3K-Android/releases ### Yaba Sanshiro 2 -This emulator can be installed from the Play store, there is a paid Pro version as well. At the time of writing only the Pro version works when launching games from ES-DE. Also note that .bin/.cue files can't be launched for the time being, only .chd files seem to work. This needs to be fixed in the emulator so nothing can be done in ES-DE to work around that limitation. +This emulator can be installed from the Play store. Note that only the paid Pro version supports game launching from ES-DE. Also note that .bin/.cue files can't be launched for the time being, only .chd files seem to work. This needs to be fixed in the emulator so nothing can be done in ES-DE to work around that limitation. -https://play.google.com/store/apps/details?id=org.devmiyax.yabasanshioro2 \ https://play.google.com/store/apps/details?id=org.devmiyax.yabasanshioro2.pro ## Device compatibility @@ -436,16 +497,18 @@ This is clearly not a complete list of Android devices, but rather those we know | Manufacturer | Model | Android release | Supported | Known issues | Comment | | :----------- | :---------------------- | :-------------- | :-------- | :------------------ | :------------------------- | | Abxylute | One | 12 | Yes | None | | +| Alldocube | iPlay50 mini Pro | 13 | Yes | None | | | Anbernic | RG353V | 11 | Yes | None | | | Anbernic | RG405M | 12 | Yes | None | Limited RAM capacity for this device makes it unsuitable for demanding themes and large game collections | | Anbernic | RG405V | 12 | Yes | None | Limited RAM capacity for this device makes it unsuitable for demanding themes and large game collections | | Anbernic | RG505 | 12 | Yes | None | Limited RAM capacity for this device makes it unsuitable for demanding themes and large game collections | | Anbernic | RG556 | 13 | Yes | None | | | Anbernic | RG ARC | 12 | Yes | None | LineageOS | -| Ayaneo | Pocket Air | 12 | Yes | None | | +| AYANEO | Pocket Air | 12 | Yes | None | | +| AYANEO | Pocket S | 13 | Yes | None | | | Ayn | Odin (Base/Pro) | 10 | Yes | None | | | Ayn | Odin Lite | 11 | Yes | None | | -| Ayn | Odin 2 (Base/Pro/Max) | 13 | Yes | Can't launch some emulators,
Minor audio issues | Bugs in the firmware/OS image | +| Ayn | Odin 2 (Base/Pro/Max) | 13 | Yes | Minor audio issues | | | Google | Pixel 2 XL | 11 | Yes | None | | | Google | Pixel 3 XL | 12 | Yes | None | | | Google | Pixel 4a | 13 | Yes | None | | @@ -465,6 +528,7 @@ This is clearly not a complete list of Android devices, but rather those we know | Huawei | MatePad 11 (2021) | 13 | Yes | None | | | Infinix | Zero 30 5G | 13 | Yes | None | | | Kinhank | G1 | 11 | No | Unable to install | Possibly 32-bit operating system? | +| Kinhank | Super Console X5 Pro | 12 (TV) | No | Fails at configurator/onboarding | Seems to run a custom 64-bit Android TV OS | | Lenovo | Legion Y700 (2022) | 12 | Yes | None | | | Lenovo | Legion Y700 (2023) | 13 | Yes | None | | | Lenovo | Xiaoxin Pad Pro 2021 | 11 | Yes | None | | @@ -549,93 +613,95 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | System name | Full name | Default emulator | Alternative emulators | Needs BIOS | Recommended game setup | | :-------------------- | :--------------------------------------------- | :-------------------------------- | :-------------------------------- | :----------- | :----------------------------------- | | 3do | 3DO Interactive Multiplayer | Opera | Real3DOPlayer **(Standalone)** | Yes | | -| adam | Coleco Adam | ColEm **(Standalone)** | | No | | +| adam | Coleco Adam | MAME4droid 2024 [Diskette] **(Standalone)** | MAME4droid 2024 [Tape] **(Standalone)**,
MAME4droid 2024 [Cartridge] **(Standalone)**,
MAME4droid 2024 [Software list] **(Standalone)**,
ColEm **(Standalone)** | Yes for MAME4droid 2024 | | | ags | Adventure Game Studio Game Engine | _Placeholder_ | | | | | amiga | Commodore Amiga | PUAE | PUAE 2021 | Yes | | | amiga1200 | Commodore Amiga 1200 | PUAE | PUAE 2021 | Yes | | | amiga600 | Commodore Amiga 600 | PUAE | PUAE 2021 | Yes | | | amigacd32 | Commodore Amiga CD32 | PUAE | PUAE 2021 | Yes | | -| amstradcpc | Amstrad CPC | Caprice32 | CrocoDS | No | Single archive or disk file | +| amstradcpc | Amstrad CPC | Caprice32 | CrocoDS,
MAME4droid 2024 **(Standalone)** | Yes for MAME4droid 2024 | Single archive or disk file | | android | Google Android | _Placeholder_ | | | | -| apple2 | Apple II | _Placeholder_ | | | | -| apple2gs | Apple IIGS | _Placeholder_ | | | | -| arcade | Arcade | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
NEO.emu **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
Geolith,
Flycast,
Flycast **(Standalone)** | Depends | | -| arcadia | Emerson Arcadia 2001 | _Placeholder_ | | | | -| archimedes | Acorn Archimedes | _Placeholder_ | | | | +| androidapps | Android Apps | _Native apps_ | | No | | +| androidgames | Android Games | _Native apps_ | | No | | +| apple2 | Apple II | MAME4droid 2024 **(Standalone)** | | Yes | See the specific _Apple II_ section in the user guide | +| apple2gs | Apple IIGS | MAME4droid 2024 **(Standalone)** | | Yes | See the specific _Apple IIGS_ section in the user guide | +| arcade | Arcade | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
NEO.emu **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
Geolith,
Flycast,
Flycast **(Standalone)** | Depends | See the specific _Arcade and Neo Geo_ section in the user guide | +| arcadia | Emerson Arcadia 2001 | DroidArcadia **(Standalone**) | MAME4droid 2024 **(Standalone)** | No | Single archive or ROM file | +| archimedes | Acorn Archimedes | MAME4droid 2024 [Model A440/1] **(Standalone)** | MAME4droid 2024 [Model A3000] **(Standalone)**,
MAME4droid 2024 [Model A310] **(Standalone)**,
MAME4droid 2024 [Model A540] **(Standalone)** | Yes | | | arduboy | Arduboy Miniature Game System | Arduous | | No | Single archive or .hex file | -| astrocde | Bally Astrocade | _Placeholder_ | | | | +| astrocde | Bally Astrocade | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file | | atari2600 | Atari 2600 | Stella | Stella 2014,
2600.emu **(Standalone)** | No | Single archive or ROM file | | atari5200 | Atari 5200 | a5200 | Atari800 | Yes | Single archive or ROM file | -| atari7800 | Atari 7800 ProSystem | ProSystem | | Yes | Single archive or ROM file | +| atari7800 | Atari 7800 ProSystem | ProSystem | MAME4droid 2024 **(Standalone)** | Yes | Single archive or ROM file | | atari800 | Atari 800 | Atari800 | | Yes | | -| atarijaguar | Atari Jaguar | Virtual Jaguar | | No | | +| atarijaguar | Atari Jaguar | Virtual Jaguar | IrataJaguar **(Standalone)**,
MAME4droid 2024 **(Standalone)** | Yes for MAME4droid 2024 | Single archive or ROM file | | atarijaguarcd | Atari Jaguar CD | _Placeholder_ | | | | | atarilynx | Atari Lynx | Handy | Beetle Lynx,
Lynx.emu **(Standalone)** | No | Single archive or ROM file | | atarist | Atari ST [also STE and Falcon] | Hatari | | Yes | Single archive or image file for single-diskette games, .m3u playlist for multi-diskette games | | atarixe | Atari XE | Atari800 | | Yes | | | atomiswave | Sammy Corporation Atomiswave | Flycast | Flycast **(Standalone)** | Depends | Single archive file | -| bbcmicro | Acorn Computers BBC Micro | _Placeholder_ | | | | +| bbcmicro | Acorn Computers BBC Micro | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or diskette image file | | c64 | Commodore 64 | VICE x64sc Accurate | VICE x64 Fast,
VICE x64 SuperCPU,
VICE x128,
C64.emu **(Standalone)** | No | Single archive or image file for tape, cartridge or single-diskette games, .m3u playlist for multi-diskette games | -| cdimono1 | Philips CD-i | SAME CDi | | Yes | Single .bin/.cue pair | +| cdimono1 | Philips CD-i | SAME CDi | MAME4droid 2024 **(Standalone)** | Yes | Single .bin/.cue pair | | cdtv | Commodore CDTV | PUAE | PUAE 2021 | Yes | | | chailove | ChaiLove Game Engine | ChaiLove | | | | -| channelf | Fairchild Channel F | FreeChaF | | Yes | Single archive or ROM file | -| coco | Tandy Color Computer | _Placeholder_ | | | | +| channelf | Fairchild Channel F | FreeChaF | MAME4droid 2024 **(Standalone)** | Yes | Single archive or ROM file | +| coco | Tandy Color Computer | MAME4droid 2024 [Cartridge] **(Standalone)** | MAME4droid 2024 [Tape] **(Standalone)** | Yes | See the specific _Tandy Color Computer_ section in the user guide | | colecovision | Coleco ColecoVision | blueMSX | Gearcoleco,
MSX.emu **(Standalone)**,
ColEm **(Standalone)** | Yes | Single archive or ROM file | -| consolearcade | Console Arcade Systems | _Placeholder_ | | | | +| consolearcade | Console Arcade Systems | MAME - Current | MAME4droid 2024 **(Standalone)**,
Flycast,
Flycast **(Standalone)**,
Play! **(Standalone)** | Depends | See the specific _Console Arcade Systems_ section in the user guide | | cps | Capcom Play System | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
FB Alpha 2012 CPS-1,
FB Alpha 2012 CPS-2,
FB Alpha 2012 CPS-3 | Depends | | | cps1 | Capcom Play System I | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
FB Alpha 2012 CPS-1 | Depends | | | cps2 | Capcom Play System II | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
FB Alpha 2012,
FB Alpha 2012 CPS-2 | Depends | | | cps3 | Capcom Play System III | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
FB Alpha 2012,
FB Alpha 2012 CPS-3 | Depends | | -| crvision | VTech CreatiVision | _Placeholder_ | | | | -| daphne | Daphne Arcade LaserDisc Emulator | DirkSimple | | No | | +| crvision | VTech CreatiVision | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file | +| daphne | Daphne Arcade LaserDisc Emulator | MAME4droid 2024 **(Standalone)** | DirkSimple | Depends | See the specific _LaserDisc Games_ section in the user guide | | desktop | Desktop Applications | _Placeholder_ | | | | | doom | Doom | PrBoom | | No | | | dos | DOS (PC) | DOSBox-Pure | DOSBox-Core,
DOSBox-SVN | No | | | dragon32 | Dragon Data Dragon 32 | _Placeholder_ | | | | | dreamcast | Sega Dreamcast | Flycast | Flycast **(Standalone)**,
Redream **(Standalone)** | No | In separate folder interpreted as a file, with .m3u playlist if multi-disc game | | easyrpg | EasyRPG Game Engine | EasyRPG | | No | | -| electron | Acorn Electron | _Placeholder_ | | | | -| emulators | Emulators | _Placeholder_ | | | | +| electron | Acorn Electron | MAME4droid 2024 [Tape] **(Standalone)** | MAME4droid 2024 [Diskette DFS] **(Standalone)**,
MAME4droid 2024 [Diskette ADFS] **(Standalone)** | Yes | Single archive, or single tape or diskette image file | +| emulators | Emulators | _Native apps_ | | No | | | epic | Epic Games Store | _Placeholder_ | | | | | famicom | Nintendo Family Computer | Mesen | Nestopia UE,
FCEUmm,
QuickNES,
NES.emu **(Standalone)**,
iNES **(Standalone)**,
Nesoid **(Standalone)** | No | Single archive or ROM file | | fba | FinalBurn Alpha | FB Alpha 2012 | FB Alpha 2012 Neo Geo,
FB Alpha 2012 CPS-1,
FB Alpha 2012 CPS-2,
FB Alpha 2012 CPS-3 | Yes | | | fbneo | FinalBurn Neo | FinalBurn Neo | | Yes | | | fds | Nintendo Famicom Disk System | Mesen | Nestopia UE,
FCEUmm,
NES.emu **(Standalone)**,
iNES **(Standalone)**,
Nesoid **(Standalone)** | Yes | Single archive or ROM file | | flash | Adobe Flash | Ruffle **(Standalone)** | | No | Single .swf file | -| fm7 | Fujitsu FM-7 | _Placeholder_ | | | | -| fmtowns | Fujitsu FM Towns | _Placeholder_ | | | | +| fm7 | Fujitsu FM-7 | MAME4droid 2024 [FM-7 Diskette] **(Standalone)** | MAME4droid 2024 [FM-7 Tape] **(Standalone)**,
MAME4droid 2024 [FM-7 Software list] **(Standalone)**,
MAME4droid 2024 [FM77AV Diskette] **(Standalone)**,
MAME4droid 2024 [FM77AV Tape] **(Standalone)**,
MAME4droid 2024 [FM77AV Software list] **(Standalone)** | Yes | For tape files you need to manually start the cassette player from the MAME menu after the "load" command, as well as entering the "run" command after loading is complete | +| fmtowns | Fujitsu FM Towns | MAME4droid 2024 **(Standalone)** | | Yes | See the specific _Fujitsu FM Towns_ section in the user guide | | fpinball | Future Pinball | _Placeholder_ | | | | -| gamate | Bit Corporation Gamate | _Placeholder_ | | | | -| gameandwatch | Nintendo Game and Watch | Multi (MESS) | MAME4droid 2024 **(Standalone)**,
Handheld Electronic (GW) | No | Single archive or ROM file | -| gamecom | Tiger Electronics Game.com | _Placeholder_ | | | | +| gamate | Bit Corporation Gamate | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file | +| gameandwatch | Nintendo Game and Watch | Multi (MESS) | MAME4droid 2024 Local Artwork **(Standalone)**,
MAME4droid 2024 **(Standalone)**,
Handheld Electronic (GW) | No | See the specific _LCD handheld games_ section in the user guide | +| gamecom | Tiger Electronics Game.com | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file | | gamegear | Sega Game Gear | Genesis Plus GX | Genesis Plus GX Wide,
Gearsystem,
SMS Plus GX,
PicoDrive,
MasterGear **(Standalone)** | No | Single archive or ROM file | | gb | Nintendo Game Boy | Gambatte | SameBoy,
Gearboy,
TGB Dual,
DoubleCherryGB,
Mesen-S,
bsnes,
mGBA,
VBA-M,
GBC.emu **(Standalone)**,
My OldBoy! **(Standalone**),
Pizza Boy GBC **(Standalone)** | No | Single archive or ROM file | | gba | Nintendo Game Boy Advance | mGBA | VBA-M,
VBA Next,
gpSP,
GBA.emu **(Standalone)**,
My Boy! **(Standalone)**,
Pizza Boy GBA **(Standalone)** | No | Single archive or ROM file | | gbc | Nintendo Game Boy Color | Gambatte | SameBoy,
Gearboy,
TGB Dual,
DoubleCherryGB,
Mesen-S,
bsnes,
mGBA,
VBA-M,
GBC.emu **(Standalone)**,
My OldBoy! **(Standalone**),
Pizza Boy GBC **(Standalone)** | No | Single archive or ROM file | | gc | Nintendo GameCube | Dolphin | Dolphin **(Standalone)**,
Dolphin MMJR **(Standalone)**,
Dolphin MMJR2 **(Standalone)** | No | Disc image file for single-disc games, .m3u playlist for multi-disc games | | genesis | Sega Genesis | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
MD.emu **(Standalone)** | No | Single archive or ROM file | -| gmaster | Hartung Game Master | _Placeholder_ | | | | -| gx4000 | Amstrad GX4000 | Caprice32 | CrocoDS | No | Single archive or ROM file | -| intellivision | Mattel Electronics Intellivision | FreeIntv | | Yes | Single archive or ROM file | +| gmaster | Hartung Game Master | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file | +| gx4000 | Amstrad GX4000 | Caprice32 | CrocoDS,
MAME4droid 2024 **(Standalone)** | No | Single archive or ROM file | +| intellivision | Mattel Electronics Intellivision | FreeIntv | MAME4droid 2024 **(Standalone)** | Yes | Single archive or ROM file | | j2me | Java 2 Micro Edition (J2ME) | SquirrelJME | | No | Single .jar file | | kodi | Kodi Home Theatre Software | _Placeholder_ | | | | -| laserdisc | LaserDisc Games | DirkSimple | | No | | -| lcdgames | LCD Handheld Games | Multi (MESS) | MAME4droid 2024 **(Standalone)**,
Handheld Electronic (GW) | No | Single archive or ROM file | +| laserdisc | LaserDisc Games | MAME4droid 2024 **(Standalone)** | DirkSimple | Depends | See the specific _LaserDisc Games_ section in the user guide | +| lcdgames | LCD Handheld Games | Multi (MESS) | MAME4droid 2024 Local Artwork **(Standalone)**,
MAME4droid 2024 **(Standalone)**,
Handheld Electronic (GW) | No | See the specific _LCD handheld games_ section in the user guide | | lowresnx | LowRes NX Fantasy Console | LowRes NX | | No | Single ROM file | | lutris | Lutris Open Gaming Platform | _Placeholder_ | | | | | lutro | Lutro Game Engine | Lutro | | | | -| macintosh | Apple Macintosh | _Placeholder_ | | | | -| mame | Multiple Arcade Machine Emulator | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
NEO.emu **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
Geolith,
Flycast,
Flycast **(Standalone)** | Depends | | +| macintosh | Apple Macintosh | MAME4droid 2024 Mac SE Bootable **(Standalone)** | MAME4droid 2024 Mac SE Boot Disk **(Standalone)**,
MAME4droid 2024 Mac Plus Bootable **(Standalone)**,
MAME4droid 2024 Mac Plus Boot Disk **(Standalone)** | Yes | See the specific _Apple Macintosh_ section in the user guide | +| mame | Multiple Arcade Machine Emulator | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
NEO.emu **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
Geolith,
Flycast,
Flycast **(Standalone)** | Depends | See the specific _Arcade and Neo Geo_ section in the user guide | | mame-advmame | AdvanceMAME | _Placeholder_ | | | | | mastersystem | Sega Master System | Genesis Plus GX | Genesis Plus GX Wide,
SMS Plus GX,
Gearsystem,
PicoDrive,
MD.emu **(Standalone)**,
MasterGear **(Standalone)** | No | Single archive or ROM file | | megacd | Sega Mega-CD | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
MD.emu **(Standalone)** | Yes | | | megacdjp | Sega Mega-CD [Japan] | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
MD.emu **(Standalone)** | Yes | | | megadrive | Sega Mega Drive | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
MD.emu **(Standalone)** | No | Single archive or ROM file | | megadrivejp | Sega Mega Drive [Japan] | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
MD.emu **(Standalone)** | No | Single archive or ROM file | -| megaduck | Creatronic Mega Duck | SameDuck | | No | Single archive or ROM file | -| mess | Multi Emulator Super System | Multi (MESS) | | | | -| model2 | Sega Model 2 | MAME - Current | | Yes | | +| megaduck | Creatronic Mega Duck | SameDuck | MAME4droid 2024 **(Standalone)** | No | Single archive or ROM file | +| mess | Multi Emulator Super System | Multi (MESS) | | Depends | | +| model2 | Sega Model 2 | MAME - Current | MAME4droid 2024 **(Standalone)** | Yes | See the specific _Arcade and Neo Geo_ section in the user guide | | model3 | Sega Model 3 | _Placeholder_ | | | | | moto | Thomson MO/TO Series | Theodore | | | | | msx | MSX | blueMSX | fMSX,
fMSX **(Standalone)**,
MSX.emu **(Standalone)** | Yes except for fMSX standalone | | @@ -647,20 +713,20 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | naomi | Sega NAOMI | Flycast | Flycast **(Standalone)** | Yes | Single archive file + .chd file in subdirectory if GD-ROM game | | naomi2 | Sega NAOMI 2 | Flycast | Flycast **(Standalone)** | Yes | Single archive file + .chd file in subdirectory if GD-ROM game | | naomigd | Sega NAOMI GD-ROM | Flycast | Flycast **(Standalone)** | Yes | Single archive file + .chd file in subdirectory if GD-ROM game | -| n3ds | Nintendo 3DS | Citra | Citra **(Standalone)**,
Citra Canary **(Standalone)**,
Citra MMJ **(Standalone)**,
Panda3DS **(Standalone)** | No | Single ROM file | +| n3ds | Nintendo 3DS | Citra | Citra **(Standalone)**,
Citra Canary **(Standalone)**,
Citra MMJ **(Standalone)**,
Lime3DS **(Standalone)**,
Panda3DS **(Standalone)** | No | Single ROM file | | n64 | Nintendo 64 | Mupen64Plus-Next | M64Plus FZ **(Standalone)**,
Mupen64Plus AE **(Standalone)**,
ParaLLEl N64 | No | Single archive or ROM file | | n64dd | Nintendo 64DD | Mupen64Plus-Next | M64Plus FZ **(Standalone)**,
Mupen64Plus AE **(Standalone)**,
ParaLLEl N64 | Yes | | -| nds | Nintendo DS | melonDS DS | melonDS **(Standalone)**,
melonDS Nightly **(Standalone)**,
DeSmuME,
DeSmuME 2015,
DraStic **(Standalone)** | No | Single archive or ROM file | -| neogeo | SNK Neo Geo | FinalBurn Neo | Geolith,
NEO.emu **(Standalone)**,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)** | Yes | Single archive or ROM file | -| neogeocd | SNK Neo Geo CD | NeoCD | FinalBurn Neo | Yes | | -| neogeocdjp | SNK Neo Geo CD [Japan] | NeoCD | FinalBurn Neo | Yes | | +| nds | Nintendo DS | melonDS DS | melonDS,
melonDS **(Standalone)**,
melonDS Nightly **(Standalone)**,
DeSmuME,
DeSmuME 2015,
DraStic **(Standalone)** | No | Single archive or ROM file | +| neogeo | SNK Neo Geo | FinalBurn Neo | Geolith,
NEO.emu **(Standalone)**,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)** | Yes | See the specific _Arcade and Neo Geo_ section in the user guide | +| neogeocd | SNK Neo Geo CD | NeoCD | FinalBurn Neo,
MAME4droid 2024 **(Standalone)** | Yes | .chd (NeoCD and MAME4droid 2024 only) or .cue file | +| neogeocdjp | SNK Neo Geo CD [Japan] | NeoCD | FinalBurn Neo,
MAME4droid 2024 **(Standalone)** | Yes | .chd (NeoCD and MAME4droid 2024 only) or .cue file | | nes | Nintendo Entertainment System | Mesen | Nestopia UE,
FCEUmm,
QuickNES,
NES.emu **(Standalone)**,
iNES **(Standalone)**,
Nesoid **(Standalone)** | No | Single archive or ROM file | | ngage | Nokia N-Gage | EKA2L1 **(Standalone)** | | Yes | See the specific _Symbian and Nokia N-Gage_ section in the User guide | | ngp | SNK Neo Geo Pocket | Beetle NeoPop | RACE,
NGP.emu **(Standalone)** | No | Single archive or ROM file | | ngpc | SNK Neo Geo Pocket Color | Beetle NeoPop | RACE,
NGP.emu **(Standalone)** | No | Single archive or ROM file | -| odyssey2 | Magnavox Odyssey 2 | O2EM | | Yes | Single archive or ROM file | +| odyssey2 | Magnavox Odyssey 2 | O2EM | MAME4droid 2024 **(Standalone)** | Yes | Single archive or ROM file | | openbor | OpenBOR Game Engine | OpenBOR **(Standalone)** | | No | See the specific _OpenBOR_ section in the User guide | -| oric | Tangerine Computer Systems Oric | _Placeholder_ | | | | +| oric | Tangerine Computer Systems Oric | MAME4droid 2024 **(Standalone)** | | Yes | See the specific _Tangerine Computer Systems Oric_ section in the user guide | | palm | Palm OS | Mu | | | | | pc | IBM PC | DOSBox-Pure | DOSBox-Core,
DOSBox-SVN | No | | | pc88 | NEC PC-8800 Series | QUASI88 | | Yes | | @@ -679,14 +745,14 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | psp | Sony PlayStation Portable | PPSSPP | PPSSPP **(Standalone)** | No | Single disc image file | | psvita | Sony PlayStation Vita | Vita3K **(Standalone)** | | Yes | See the specific _Sony PlayStation Vita_ section in the User guide | | psx | Sony PlayStation | Beetle PSX | Beetle PSX HW,
PCSX ReARMed,
SwanStation,
DuckStation **(Standalone)**,
ePSXe **(Standalone)**,
FPseNG **(Standalone)**,
FPse **(Standalone)** | Yes | .chd file for single-disc games, .m3u playlist for multi-disc games | -| pv1000 | Casio PV-1000 | _Placeholder_ | | | | +| pv1000 | Casio PV-1000 | MAME4droid 2024 **(Standalone)** | | No | Single archive or ROM file | | quake | Quake | TyrQuake | vitaQuake 2,
vitaQuake 2 [Rogue],
vitaQuake 2 [Xatrix],
vitaQuake 2 [Zaero] | No | | | samcoupe | MGT SAM Coupé | Speccy **(Standalone)** | | No | Single archive or ROM file | | satellaview | Nintendo Satellaview | Snes9x - Current | Snes9x 2010,
Snes9x 2005 Plus,
Snes9x EX+ **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
Mesen-S | | | | saturn | Sega Saturn | Beetle Saturn | YabaSanshiro,
Yaba Sanshiro 2 **(Standalone)**,
Yabause,
Saturn.emu **(Standalone)** | Yes | .chd file for single-disc games, .m3u playlist for multi-disc games | | saturnjp | Sega Saturn [Japan] | Beetle Saturn | YabaSanshiro,
Yaba Sanshiro 2 **(Standalone)**,
Yabause,
Saturn.emu **(Standalone)** | Yes | .chd file for single-disc games, .m3u playlist for multi-disc games | -| scummvm | ScummVM Game Engine | ScummVM | | No | | -| scv | Epoch Super Cassette Vision | _Placeholder_ | | | | +| scummvm | ScummVM Game Engine | ScummVM | ScummVM **(Standalone)** | No | See the specific _ScummVM_ section in the user guide | +| scv | Epoch Super Cassette Vision | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file | | sega32x | Sega Mega Drive 32X | PicoDrive | | No | Single archive or ROM file | | sega32xjp | Sega Super 32X [Japan] | PicoDrive | | No | Single archive or ROM file | | sega32xna | Sega Genesis 32X [North America] | PicoDrive | | No | Single archive or ROM file | @@ -702,26 +768,26 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | stv | Sega Titan Video Game System | MAME - Current | MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)** | Yes | Single archive file | | sufami | Bandai SuFami Turbo | Snes9x - Current | Snes9x 2010,
Snes9x 2005 Plus,
Snes9x EX+ **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy | | | | supergrafx | NEC SuperGrafx | Beetle SuperGrafx | Beetle PCE,
PCE.emu **(Standalone)** | No | Single archive or ROM file | -| supervision | Watara Supervision | Potator | | No | Single archive or ROM file | -| supracan | Funtech Super A'Can | _Placeholder_ | | | | +| supervision | Watara Supervision | Potator | MAME4droid 2024 **(Standalone)** | No | Single archive or ROM file | +| supracan | Funtech Super A'Can | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file. You need a supracan.zip archive that contains a valid internal_68k.bin file and an empty file named umc6650.bin | | switch | Nintendo Switch | Skyline **(Standalone)** | | Yes | | | symbian | Symbian | EKA2L1 **(Standalone)** | | Yes | See the specific _Symbian and Nokia N-Gage_ section in the User guide | | tanodragon | Tano Dragon | _Placeholder_ | | | | | tg16 | NEC TurboGrafx-16 | Beetle PCE | Beetle PCE FAST,
Beetle SuperGrafx,
PCE.emu **(Standalone)** | No | Single archive or ROM file | | tg-cd | NEC TurboGrafx-CD | Beetle PCE | Beetle PCE FAST,
Beetle SuperGrafx,
PCE.emu **(Standalone)** | Yes | | -| ti99 | Texas Instruments TI-99 | _Placeholder_ | | | | +| ti99 | Texas Instruments TI-99 | MAME4droid 2024 **(Standalone)** | | Yes | See the specific _Texas Instruments TI-99_ section in the user guide | | tic80 | TIC-80 Fantasy Computer | TIC-80 | | No | Single .tic file | | to8 | Thomson TO8 | Theodore | | | | | triforce | Namco-Sega-Nintendo Triforce | _Placeholder_ | | | | | trs-80 | Tandy TRS-80 | _Placeholder_ | | | | | type-x | Taito Type X | _Placeholder_ | | | | | uzebox | Uzebox Open Source Console | Uzem | | | | -| vectrex | GCE Vectrex | vecx | | No | Single archive or ROM file | +| vectrex | GCE Vectrex | vecx | MAME4droid 2024 **(Standalone)** | Yes for MAME4droid 2024 | Single archive or ROM file | | vic20 | Commodore VIC-20 | VICE xvic | | No | Single archive or tape, cartridge or diskette image file | -| videopac | Philips Videopac G7000 | O2EM | | Yes | Single archive or ROM file | +| videopac | Philips Videopac G7000 | O2EM | MAME4droid 2024 **(Standalone)** | Yes | Single archive or ROM file | | virtualboy | Nintendo Virtual Boy | Beetle VB | | No | | -| vpinball | Visual Pinball | _Placeholder_ | | | | -| vsmile | VTech V.Smile | _Placeholder_ | | | | +| vpinball | Visual Pinball | Visual Pinball **(Standalone)** | | No | See the specific _Visual Pinball_ section in the user guide | +| vsmile | VTech V.Smile | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file | | wasm4 | WASM-4 Fantasy Console | WASM-4 | | No | Single .wasm file | | wii | Nintendo Wii | Dolphin | Dolphin **(Standalone)**,
Dolphin MMJR **(Standalone)**,
Dolphin MMJR2 **(Standalone)** | No | | | wiiu | Nintendo Wii U | _Placeholder_ | | | | @@ -730,11 +796,11 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | windows9x | Microsoft Windows 9x | DOSBox-Pure | | No | | | wonderswan | Bandai WonderSwan | Beetle Cygne | Swan.emu **(Standalone)** | No | Single archive or ROM file | | wonderswancolor | Bandai WonderSwan Color | Beetle Cygne | Swan.emu **(Standalone)** | No | Single archive or ROM file | -| x1 | Sharp X1 | X Millennium | | No | Single archive or diskette/tape file | -| x68000 | Sharp X68000 | PX68k | | Yes | | +| x1 | Sharp X1 | X Millennium | MAME4droid 2024 [Diskette] **(Standalone)**,
MAME4droid 2024 [Tape] **(Standalone)** | Yes for MAME4droid 2024 | Single archive or diskette/tape file | +| x68000 | Sharp X68000 | PX68k | MAME4droid 2024 **(Standalone)** | Yes | | | xbox | Microsoft Xbox | _Placeholder_ | | | | | xbox360 | Microsoft Xbox 360 | _Placeholder_ | | | | -| zmachine | Infocom Z-machine | _Placeholder_ | | | | +| zmachine | Infocom Z-machine | MojoZork | | No | | | zx81 | Sinclair ZX81 | EightyOne | | | | | zxnext | Sinclair ZX Spectrum Next | _Placeholder_ | | | | | zxspectrum | Sinclair ZX Spectrum | Fuse | Speccy **(Standalone)** | No | Single archive or ROM file | diff --git a/ANDROID.md b/ANDROID.md index 1bc3e4c6c..61e3b1244 100644 --- a/ANDROID.md +++ b/ANDROID.md @@ -31,9 +31,9 @@ If you need to re-run the configurator for some reason then the easiest way is t By default the touch input overlay will be enabled which makes it possible to use ES-DE without a controller or physical keyboard by overlaying virtual buttons on top of the ES-DE interface. If you are using a device which has a built-in controller you may however want to disable this feature. That is done via the _Enable touch overlay_ option in the _Input device settings_ menu on the main menu. Just be aware that disabling this option on a device where you have no other input method than touch will lock you out of the application. -If you accidentally disable the touch overlay you can force the configurator to run as explained in the previous section above, this will always reset the touch overlay setting. Another option would of course be to temporarily plug in a controller or keyboard to enable the setting via its menu entry. A third option would be to manually edit the es_settings.xml file in the ES-DE application data directory. The setting you are after is named _InputTouchOverlay_ which should be changed from _false_ to _true_. +If you accidentally disable the touch overlay you can force the configurator to run as explained in the previous section above, this will reset the touch overlay setting as long as you have at least pressed the _Begin setup_ button. Another option would of course be to temporarily plug in a controller or keyboard to enable the setting via its menu entry. A third option would be to manually edit the es_settings.xml file in the ES-DE application data directory. The setting you are after is named _InputTouchOverlay_ which should be changed from _false_ to _true_. -Apart from this there are numerous options for the touch overlay, like the ability to change its size, opacity and fade-out time. Setting the fade-out to zero will make it permanently visible. See the [User guide](USERGUIDE-DEV.md) for a complete reference of all app settings and features. +Apart from this there are numerous options for the touch overlay, like the ability to change its size, opacity and fade-out time. Setting the fade-out to zero will make it permanently visible. See the [User guide](USERGUIDE.md) for a complete reference of all app settings and features. ## Retention of files and data @@ -55,14 +55,13 @@ Some emulators like RetroArch are still using an older storage access method and The following emulators are configured for FileProvider access: * 2600.emu +* DroidArcadia * FPseNG (still needs scoped storage to be setup in emulator) * FPse (still needs scoped storage to be setup in emulator) * GBA.emu * GBC.emu * Lynx.emu -* MD.emu -* MAME4droid 2024 -* MAME4droid +* MD.emu (genesis, mastersystem, megadrive, megadrivejp) * NES.emu * NGP.emu * PCE.emu (pcengine, supergrafx and tg16 systems) @@ -156,16 +155,37 @@ This is obviously a non-portable collection. You can relocate as many systems as you want, you just need to place them all within the systemList tag pairs in ES-DE/custom_systems/es_systems.xml. -## Issues with the Ayn Odin 2 +## Launching native Android apps and games -There is one serious issue that seems to be specific to the Ayn Odin 2, and that is that a number of standalone emulators can't be launched. When attempting to run such an emulator an error popup with the game name followed by "ERROR CODE -1" is displayed. The affected emulators are ColEm, fMSX, iNES, MasterGear, My Boy!, My OldBoy!, Redream and Speccy. +As of ES-DE 3.0.2 there is experimental support for launching native Android apps and games from inside ES-DE. For the time being it does however require that you use a separate app to import your apps and games into ES-DE. But following this initial setup launching native apps and games works just like launching games for any other system. -There are also some issues with sound quality on the Odin 2, such as large fluctuations in volume where some sounds are quite loud and some are quite silent. There are also some strange aliasing effects when playing samples rapidly. +First head to this GitHub repository and download the ES Applauncher APK:\ +https://github.com/schattenphoenix/es_applauncher/releases + +Many thanks to Alex Pferdmenges for developing this app! + +After installing the APK on your device and giving it the necessary permissions you'll see a list of your apps and you can classify the ones you want as games, and you can disable the ones you want to skip via the _Game_ and _Disable_ checkboxes on the right side of the screen. You can also choose to extract the icons for these apps and store them into one of the media folders inside the ES-DE/downloaded_media directory. The _Media dir_ dropdown at the top of the screen lets you select the media type. It's generally recommended to use _screenshots_ or _covers_ or you can skip this step altogether as most of these icons are pretty low resolution anyway. + +To populate the _androidapps_ and _androidgames_ system directories press the save icon in the upper right corner of the screen and select your ROMs directory from the selector interface. For example this could be _ROMs_ directly on internal storage, or on your SD card. Just press the _Use this folder_ button and the directories and files will be generated for you. Now you can start ES-DE and launch these apps and games directly. + +Note that it seems like ES Applauncher has issues working correctly on some Android 10 devices. + +It's also possible to scrape Android apps and games using ScreenScraper, but at the time of writing the amount of entries in their database is somehow limited. It's therefore encouraged to participate in improving this situation by contributing metadata and media to their database, this will benefit everyone in the long run. + +A built-in import tool for native Android apps and games is also planned for a future ES-DE release. + +## Running ES-DE as the Android home app + +To run ES-DE as the home app (launcher) you'll select it accordingly from the Apps section of the Android Settings app. When in this mode the ability to quit the app is completely disabled as it doesn't make sense to exit the home app. Therefore the _Quit ES-DE_ entry on the main menu is removed and the _Back button/back swipe exits app_ option in the _Other settings_ menu and its corresponding functionality is disabled. + +Apart from this it works as you'd expect, ES-DE will start automatically when rebooting the device and pressing the home button will return to ES-DE regardless of which app you have running. + +If the operating system runs out of memory when a game is running it will kill ES-DE even if it's set as home app. If this happens ES-DE will reload whenever you return from the game or if you press the home button. This is simply how Android works. + +It's generally a very good idea to import your native Android apps into ES-DE prior to setting it as the home app, this way you can easily access things like the Settings app. Note however that even if you somehow lock yourself out of the system by setting ES-DE as the home app and not having any native apps added you can still always access the Settings app via the Android notification shade. On most devices you access this by swiping down from the top of the screen. After swiping down, just select the cogwheel icon to start the Settings app. From there you can change the home app to something else than ES-DE, should you need to. ## Known ES-DE problems -In addition to the issues specific to the Ayn Odin 2 there are a couple of other problems that will hopefully be resolved in the near future: - * Poor performance/low frame rate after startup on some devices, which seems to happen randomly and is usually resolved by itself within 10 to 30 seconds. * The Android soft keyboard causes rendering issues when navigating using a controller or physical keyboard, as such the ES-DE built-in keyboard is enabled by default for the time being. For testing purposes the Android soft keyboard can be enabled via the _Enable virtual keyboard_ option in the _UI settings_ menu. If only using touch input the issue is not present. This problem is believed to be caused by a bug in the SDL library so it probably needs to be resolved there. * Using a mounted USB storage device for the ES-DE and/or ROMs directories will lead to the configurator exiting after finishing the setup instead of launching ES-DE. Restarting ES-DE manually will lead to a successful startup. If the option to create the system directories was selected in the configurator then this will have to be executed again from inside ES-DE. Note that using a mounted USB storage device leads to a very crippled setup anyway, as for example RetroArch can't read any games from such devices (i.e. from the /mnt/media_rw/ directory tree). Only emulators supporting scoped storage will be usable in such a setup. @@ -176,9 +196,10 @@ Below are specific instructions and considerations for all supported emulators. ### RetroArch -The RetroArch release from the Google Play store is problematic. It does not contain all emulator cores and a number of people have reported issues launching games from ES-DE (apparently it doesn't work at all on some devices). For these reasons it's strongly recommended to use the 64-bit release from the RetroArch website instead, or to install it from the Amazon Appstore or the F-Droid store. +The RetroArch release from the Google Play store is problematic. It does not contain all emulator cores and a number of people have reported issues launching games from ES-DE (apparently it doesn't work at all on some devices). For these reasons it's strongly recommended to use the 64-bit release from the RetroArch website instead, or to install it from the Samsung Galaxy Store, Amazon Appstore or the F-Droid store. https://retroarch.com \ +https://galaxystore.samsung.com/detail/com.retroarch \ https://www.amazon.com/dp/B09753XRVF \ https://f-droid.org/en/packages/com.retroarch @@ -194,8 +215,9 @@ https://github.com/Trixarian/NetherSX2-patch ### Citra -The Citra emulator is no longer in active development and it's unclear where it can be obtained and whether it will be worked on in the future. The Citra MMJ fork is still available for download from their GitHub site. +The original Citra emulator project is no longer alive, but there is a fork that should work as a drop-in replacement. The Citra MMJ fork is also a viable alternative. Both of these emulators are available for download from their GitHub sites. +https://github.com/PabloMK7/citra/releases \ https://github.com/weihuoya/citra/releases ### ColEm @@ -213,7 +235,7 @@ The Play store version is somehow up to date and could be used, otherwise the F- https://play.google.com/store/apps/details?id=org.dolphinemu.dolphinemu \ https://f-droid.org/en/packages/org.dolphinemu.dolphinemu \ -https://dolphin-emu.org/download/ +https://dolphin-emu.org/download ### Dolphin MMJR and MMJR2 @@ -229,6 +251,12 @@ This emulator can be installed from the Play store as a paid app. Note that it d https://play.google.com/store/apps/details?id=com.dsemu.drastic +### DroidArcadia + +This emulator can be downloaded directly from their website. + +http://amigan.1emu.net/releases + ### DuckStation The Play store version of this emulator is getting frequent updates and is therefore recommended. @@ -296,10 +324,26 @@ This emulator can be installed from the Play store. https://play.google.com/store/apps/details?id=com.fms.ines.free +### IrataJaguar + +This Atari Jaguar emulator can be downloaded from their website. Just be aware that it's very old and has not been updated for modern Android releases, so it may be finicky on some devices or it may not work at all. + +After installing the emulator, open it and go to the settings tab, then choose "Select ISO and BIOS directory" and navigate to the ROMs/atarijaguar folder. It seems like you also need to start the game from inside the emulator before you can run it from ES-DE. Starting a game will create a savestate file. If you now exit the emulator and run the game from ES-DE you'll see a list of savestate files, just select the correct one to start the game. + +http://www.arts-union.ru/node/23 + +### Lime3DS + +This emulator which is forked from Citra can be downloaded from their GitHub site. + +https://github.com/Lime3DS/Lime3DS/releases + ### MAME4droid 2024 and MAME4droid These emulators can be installed from the Play store. It's strongly recommended to go for the _MAME4droid 2024_ version as this is updated with a recent MAME release while the older _MAME4droid_ is using an ancient MAME release. +Note that for MAME4droid 2024 there's an exception when it comes to setting up the ROM path. Instead of selecting each separate system directory (as is done on most other standalone emulators) you must select the root of the ROMs directory tree. To change the ROM path open _Settings_ in MAME4droid 2024, then select _General_ and then _Change ROMs path_. After restarting the emulator choose _External storage_ and then the ROMs directory which contains all your ES-DE system directories. If you instead choose a specific system directory like ROMs/arcade or ROMs/neogeo then only that specific system will work when launching games from ES-DE. + https://play.google.com/store/apps/details?id=com.seleuco.mame4d2024 \ https://play.google.com/store/apps/details?id=com.seleuco.mame4droid @@ -331,7 +375,7 @@ https://github.com/mupen64plus-ae/mupen64plus-ae/actions ### My Boy! and My OldBoy! -These emulators can be installed from the Play store as paid apps. There are also free/Lite versions availble for these emulators but they have not been updated in years and don't run on modern devices. As such they are not supported by ES-DE. +These emulators can be installed from the Play store as paid apps. There are also free/Lite versions available for these emulators but they have not been updated in years and don't run on modern devices. As such they are not supported by ES-DE. https://play.google.com/store/apps/details?id=com.fastemulator.gba \ https://play.google.com/store/apps/details?id=com.fastemulator.gbc @@ -345,7 +389,7 @@ https://github.com/proninyaroslav/nesoid/releases ### OpenBOR -Although OpenBOR is working fine on Android it's not possible to properly integrate it with a frontend, you'll instead need to install your game PAKs into the `/sdcard/OpenBOR/Paks` directory and create dummy .openbor files for your games in `ROMs/openbor` and after launching a game from ES-DE you need to manually start it from inside the OpenBOR GUI. There are more detailed setup instructions in the _OpenBOR_ section of the [User guide](USERGUIDE-DEV.md#openbor). +Although OpenBOR is working fine on Android it's not possible to properly integrate it with a frontend, you'll instead need to install your game PAKs into the `/sdcard/OpenBOR/Paks` directory and create dummy .openbor files for your games in `ROMs/openbor` and after launching a game from ES-DE you need to manually start it from inside the OpenBOR GUI. There are more detailed setup instructions in the _OpenBOR_ section of the [User guide](USERGUIDE.md#openbor). You can download OpenBOR from their GitHub site, the version named _OpenBOR v3.0 Build 6391_ has for example been proven to work well. @@ -359,9 +403,13 @@ https://github.com/wheremyfoodat/Panda3DS/releases ### Pizza Boy GBA and Pizza Boy GBC -The Pizza Boy GBA and Pizza Boy GBC emulators used to be available on the Play store but have since been taken down. There used to be Basic (free) versions and Pro (paid) versions. It's unclear what the status is for these emulators and if they are still in active development. It's also unclear where they can be downloaded. +The Pizza Boy GBA and Pizza Boy GBC emulators can be installed from the Play store. There are Basic (free) versions and Pro (paid) versions available. +As of writing this, the Basic version of the GBA emulator does not seem to be able to launch games from ES-DE, but the Pro version is working fine. Both the Basic and Pro versions of the GBC emulator are working correctly. -As of writing this, the latest available Basic version of the GBA emulator does not seem to be able to launch games from ES-DE, but the Pro version is working fine. Both the Basic and Pro versions of the GBC emulator are working correctly. +https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboygba \ +https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboygbapro \ +https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboy \ +https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboypro ### Play! @@ -400,6 +448,12 @@ This emulator can be installed for free from the Play store and can later be upg https://play.google.com/store/apps/details?id=io.recompiled.redream +### ScummVM + +ScummVM can be installed from the Play store. There are also daily builds available on their GitHub site. Such a build may be required to be able to launch games from ES-DE until the Play store version has been updated. + +https://play.google.com/store/apps/details?id=org.scummvm.scummvm\ +https://buildbot.scummvm.org/#/dailybuilds ### Skyline @@ -416,12 +470,26 @@ Although this emulator supports both the Sinclar ZX Spectrum and MGT SAM Coupé https://play.google.com/store/apps/details?id=com.fms.speccy \ https://play.google.com/store/apps/details?id=com.fms.speccy.deluxe +### Visual Pinball + +Although Visual Pinball is working fine on Android it's not possible to properly integrate it with a frontend, you'll instead need to install your tables inside the app and create dummy .vpinball files for your games in ROMs/vpinball and after launching a table from ES-DE you need to manually start it from inside the Visual Pinball GUI. There are more detailed setup instructions in the Visual Pinball section of the User guide. + +You can download Visual Pinball from their GitHub automatic build system. + +https://github.com/vpinball/vpinball/actions + ### Vita3K This PlayStation Vita emulator can be downloaded from their GitHub site. Refer to the User guide for detailed game setup instructions. https://github.com/Vita3K/Vita3K-Android/releases +### Yaba Sanshiro 2 + +This emulator can be installed from the Play store. Note that only the paid Pro version supports game launching from ES-DE. Also note that .bin/.cue files can't be launched for the time being, only .chd files seem to work. This needs to be fixed in the emulator so nothing can be done in ES-DE to work around that limitation. + +https://play.google.com/store/apps/details?id=org.devmiyax.yabasanshioro2.pro + ## Device compatibility This is clearly not a complete list of Android devices, but rather those we know have been tested with ES-DE and for which there is a known status. @@ -429,16 +497,18 @@ This is clearly not a complete list of Android devices, but rather those we know | Manufacturer | Model | Android release | Supported | Known issues | Comment | | :----------- | :---------------------- | :-------------- | :-------- | :------------------ | :------------------------- | | Abxylute | One | 12 | Yes | None | | +| Alldocube | iPlay50 mini Pro | 13 | Yes | None | | | Anbernic | RG353V | 11 | Yes | None | | | Anbernic | RG405M | 12 | Yes | None | Limited RAM capacity for this device makes it unsuitable for demanding themes and large game collections | | Anbernic | RG405V | 12 | Yes | None | Limited RAM capacity for this device makes it unsuitable for demanding themes and large game collections | | Anbernic | RG505 | 12 | Yes | None | Limited RAM capacity for this device makes it unsuitable for demanding themes and large game collections | | Anbernic | RG556 | 13 | Yes | None | | | Anbernic | RG ARC | 12 | Yes | None | LineageOS | -| Ayaneo | Pocket Air | 12 | Yes | None | | +| AYANEO | Pocket Air | 12 | Yes | None | | +| AYANEO | Pocket S | 13 | Yes | None | | | Ayn | Odin (Base/Pro) | 10 | Yes | None | | | Ayn | Odin Lite | 11 | Yes | None | | -| Ayn | Odin 2 (Base/Pro/Max) | 13 | Yes | Can't launch some emulators,
Minor audio issues | Bugs in the firmware/OS image | +| Ayn | Odin 2 (Base/Pro/Max) | 13 | Yes | Minor audio issues | | | Google | Pixel 2 XL | 11 | Yes | None | | | Google | Pixel 3 XL | 12 | Yes | None | | | Google | Pixel 4a | 13 | Yes | None | | @@ -458,6 +528,7 @@ This is clearly not a complete list of Android devices, but rather those we know | Huawei | MatePad 11 (2021) | 13 | Yes | None | | | Infinix | Zero 30 5G | 13 | Yes | None | | | Kinhank | G1 | 11 | No | Unable to install | Possibly 32-bit operating system? | +| Kinhank | Super Console X5 Pro | 12 (TV) | No | Fails at configurator/onboarding | Seems to run a custom 64-bit Android TV OS | | Lenovo | Legion Y700 (2022) | 12 | Yes | None | | | Lenovo | Legion Y700 (2023) | 13 | Yes | None | | | Lenovo | Xiaoxin Pad Pro 2021 | 11 | Yes | None | | @@ -542,93 +613,95 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | System name | Full name | Default emulator | Alternative emulators | Needs BIOS | Recommended game setup | | :-------------------- | :--------------------------------------------- | :-------------------------------- | :-------------------------------- | :----------- | :----------------------------------- | | 3do | 3DO Interactive Multiplayer | Opera | Real3DOPlayer **(Standalone)** | Yes | | -| adam | Coleco Adam | ColEm **(Standalone)** | | No | | +| adam | Coleco Adam | MAME4droid 2024 [Diskette] **(Standalone)** | MAME4droid 2024 [Tape] **(Standalone)**,
MAME4droid 2024 [Cartridge] **(Standalone)**,
MAME4droid 2024 [Software list] **(Standalone)**,
ColEm **(Standalone)** | Yes for MAME4droid 2024 | | | ags | Adventure Game Studio Game Engine | _Placeholder_ | | | | | amiga | Commodore Amiga | PUAE | PUAE 2021 | Yes | | | amiga1200 | Commodore Amiga 1200 | PUAE | PUAE 2021 | Yes | | | amiga600 | Commodore Amiga 600 | PUAE | PUAE 2021 | Yes | | | amigacd32 | Commodore Amiga CD32 | PUAE | PUAE 2021 | Yes | | -| amstradcpc | Amstrad CPC | Caprice32 | CrocoDS | No | Single archive or disk file | +| amstradcpc | Amstrad CPC | Caprice32 | CrocoDS,
MAME4droid 2024 **(Standalone)** | Yes for MAME4droid 2024 | Single archive or disk file | | android | Google Android | _Placeholder_ | | | | -| apple2 | Apple II | _Placeholder_ | | | | -| apple2gs | Apple IIGS | _Placeholder_ | | | | -| arcade | Arcade | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
NEO.emu **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
Geolith,
Flycast,
Flycast **(Standalone)** | Depends | | -| arcadia | Emerson Arcadia 2001 | _Placeholder_ | | | | -| archimedes | Acorn Archimedes | _Placeholder_ | | | | +| androidapps | Android Apps | _Native apps_ | | No | | +| androidgames | Android Games | _Native apps_ | | No | | +| apple2 | Apple II | MAME4droid 2024 **(Standalone)** | | Yes | See the specific _Apple II_ section in the user guide | +| apple2gs | Apple IIGS | MAME4droid 2024 **(Standalone)** | | Yes | See the specific _Apple IIGS_ section in the user guide | +| arcade | Arcade | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
NEO.emu **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
Geolith,
Flycast,
Flycast **(Standalone)** | Depends | See the specific _Arcade and Neo Geo_ section in the user guide | +| arcadia | Emerson Arcadia 2001 | DroidArcadia **(Standalone**) | MAME4droid 2024 **(Standalone)** | No | Single archive or ROM file | +| archimedes | Acorn Archimedes | MAME4droid 2024 [Model A440/1] **(Standalone)** | MAME4droid 2024 [Model A3000] **(Standalone)**,
MAME4droid 2024 [Model A310] **(Standalone)**,
MAME4droid 2024 [Model A540] **(Standalone)** | Yes | | | arduboy | Arduboy Miniature Game System | Arduous | | No | Single archive or .hex file | -| astrocde | Bally Astrocade | _Placeholder_ | | | | +| astrocde | Bally Astrocade | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file | | atari2600 | Atari 2600 | Stella | Stella 2014,
2600.emu **(Standalone)** | No | Single archive or ROM file | | atari5200 | Atari 5200 | a5200 | Atari800 | Yes | Single archive or ROM file | -| atari7800 | Atari 7800 ProSystem | ProSystem | | Yes | Single archive or ROM file | +| atari7800 | Atari 7800 ProSystem | ProSystem | MAME4droid 2024 **(Standalone)** | Yes | Single archive or ROM file | | atari800 | Atari 800 | Atari800 | | Yes | | -| atarijaguar | Atari Jaguar | Virtual Jaguar | | No | | +| atarijaguar | Atari Jaguar | Virtual Jaguar | IrataJaguar **(Standalone)**,
MAME4droid 2024 **(Standalone)** | Yes for MAME4droid 2024 | Single archive or ROM file | | atarijaguarcd | Atari Jaguar CD | _Placeholder_ | | | | | atarilynx | Atari Lynx | Handy | Beetle Lynx,
Lynx.emu **(Standalone)** | No | Single archive or ROM file | | atarist | Atari ST [also STE and Falcon] | Hatari | | Yes | Single archive or image file for single-diskette games, .m3u playlist for multi-diskette games | | atarixe | Atari XE | Atari800 | | Yes | | | atomiswave | Sammy Corporation Atomiswave | Flycast | Flycast **(Standalone)** | Depends | Single archive file | -| bbcmicro | Acorn Computers BBC Micro | _Placeholder_ | | | | +| bbcmicro | Acorn Computers BBC Micro | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or diskette image file | | c64 | Commodore 64 | VICE x64sc Accurate | VICE x64 Fast,
VICE x64 SuperCPU,
VICE x128,
C64.emu **(Standalone)** | No | Single archive or image file for tape, cartridge or single-diskette games, .m3u playlist for multi-diskette games | -| cdimono1 | Philips CD-i | SAME CDi | | Yes | Single .bin/.cue pair | +| cdimono1 | Philips CD-i | SAME CDi | MAME4droid 2024 **(Standalone)** | Yes | Single .bin/.cue pair | | cdtv | Commodore CDTV | PUAE | PUAE 2021 | Yes | | | chailove | ChaiLove Game Engine | ChaiLove | | | | -| channelf | Fairchild Channel F | FreeChaF | | Yes | Single archive or ROM file | -| coco | Tandy Color Computer | _Placeholder_ | | | | +| channelf | Fairchild Channel F | FreeChaF | MAME4droid 2024 **(Standalone)** | Yes | Single archive or ROM file | +| coco | Tandy Color Computer | MAME4droid 2024 [Cartridge] **(Standalone)** | MAME4droid 2024 [Tape] **(Standalone)** | Yes | See the specific _Tandy Color Computer_ section in the user guide | | colecovision | Coleco ColecoVision | blueMSX | Gearcoleco,
MSX.emu **(Standalone)**,
ColEm **(Standalone)** | Yes | Single archive or ROM file | -| consolearcade | Console Arcade Systems | _Placeholder_ | | | | -| cps | Capcom Play System | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
FB Alpha 2012 CPS-1,
FB Alpha 2012 CPS-2,
FB Alpha 2012 CPS-3 | Depends | | -| cps1 | Capcom Play System I | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
FB Alpha 2012 CPS-1 | Depends | | -| cps2 | Capcom Play System II | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
FB Alpha 2012,
FB Alpha 2012 CPS-2 | Depends | | -| cps3 | Capcom Play System III | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
FB Alpha 2012,
FB Alpha 2012 CPS-3 | Depends | | -| crvision | VTech CreatiVision | _Placeholder_ | | | | -| daphne | Daphne Arcade LaserDisc Emulator | DirkSimple | | No | | +| consolearcade | Console Arcade Systems | MAME - Current | MAME4droid 2024 **(Standalone)**,
Flycast,
Flycast **(Standalone)**,
Play! **(Standalone)** | Depends | See the specific _Console Arcade Systems_ section in the user guide | +| cps | Capcom Play System | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
FB Alpha 2012 CPS-1,
FB Alpha 2012 CPS-2,
FB Alpha 2012 CPS-3 | Depends | | +| cps1 | Capcom Play System I | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
FB Alpha 2012 CPS-1 | Depends | | +| cps2 | Capcom Play System II | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
FB Alpha 2012,
FB Alpha 2012 CPS-2 | Depends | | +| cps3 | Capcom Play System III | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
FB Alpha 2012,
FB Alpha 2012 CPS-3 | Depends | | +| crvision | VTech CreatiVision | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file | +| daphne | Daphne Arcade LaserDisc Emulator | MAME4droid 2024 **(Standalone)** | DirkSimple | Depends | See the specific _LaserDisc Games_ section in the user guide | | desktop | Desktop Applications | _Placeholder_ | | | | | doom | Doom | PrBoom | | No | | | dos | DOS (PC) | DOSBox-Pure | DOSBox-Core,
DOSBox-SVN | No | | | dragon32 | Dragon Data Dragon 32 | _Placeholder_ | | | | | dreamcast | Sega Dreamcast | Flycast | Flycast **(Standalone)**,
Redream **(Standalone)** | No | In separate folder interpreted as a file, with .m3u playlist if multi-disc game | | easyrpg | EasyRPG Game Engine | EasyRPG | | No | | -| electron | Acorn Electron | _Placeholder_ | | | | -| emulators | Emulators | _Placeholder_ | | | | +| electron | Acorn Electron | MAME4droid 2024 [Tape] **(Standalone)** | MAME4droid 2024 [Diskette DFS] **(Standalone)**,
MAME4droid 2024 [Diskette ADFS] **(Standalone)** | Yes | Single archive, or single tape or diskette image file | +| emulators | Emulators | _Native apps_ | | No | | | epic | Epic Games Store | _Placeholder_ | | | | | famicom | Nintendo Family Computer | Mesen | Nestopia UE,
FCEUmm,
QuickNES,
NES.emu **(Standalone)**,
iNES **(Standalone)**,
Nesoid **(Standalone)** | No | Single archive or ROM file | | fba | FinalBurn Alpha | FB Alpha 2012 | FB Alpha 2012 Neo Geo,
FB Alpha 2012 CPS-1,
FB Alpha 2012 CPS-2,
FB Alpha 2012 CPS-3 | Yes | | | fbneo | FinalBurn Neo | FinalBurn Neo | | Yes | | | fds | Nintendo Famicom Disk System | Mesen | Nestopia UE,
FCEUmm,
NES.emu **(Standalone)**,
iNES **(Standalone)**,
Nesoid **(Standalone)** | Yes | Single archive or ROM file | | flash | Adobe Flash | Ruffle **(Standalone)** | | No | Single .swf file | -| fm7 | Fujitsu FM-7 | _Placeholder_ | | | | -| fmtowns | Fujitsu FM Towns | _Placeholder_ | | | | +| fm7 | Fujitsu FM-7 | MAME4droid 2024 [FM-7 Diskette] **(Standalone)** | MAME4droid 2024 [FM-7 Tape] **(Standalone)**,
MAME4droid 2024 [FM-7 Software list] **(Standalone)**,
MAME4droid 2024 [FM77AV Diskette] **(Standalone)**,
MAME4droid 2024 [FM77AV Tape] **(Standalone)**,
MAME4droid 2024 [FM77AV Software list] **(Standalone)** | Yes | For tape files you need to manually start the cassette player from the MAME menu after the "load" command, as well as entering the "run" command after loading is complete | +| fmtowns | Fujitsu FM Towns | MAME4droid 2024 **(Standalone)** | | Yes | See the specific _Fujitsu FM Towns_ section in the user guide | | fpinball | Future Pinball | _Placeholder_ | | | | -| gamate | Bit Corporation Gamate | _Placeholder_ | | | | -| gameandwatch | Nintendo Game and Watch | Multi (MESS) | MAME4droid 2024 **(Standalone)**,
Handheld Electronic (GW) | No | Single archive or ROM file | -| gamecom | Tiger Electronics Game.com | _Placeholder_ | | | | +| gamate | Bit Corporation Gamate | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file | +| gameandwatch | Nintendo Game and Watch | Multi (MESS) | MAME4droid 2024 Local Artwork **(Standalone)**,
MAME4droid 2024 **(Standalone)**,
Handheld Electronic (GW) | No | See the specific _LCD handheld games_ section in the user guide | +| gamecom | Tiger Electronics Game.com | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file | | gamegear | Sega Game Gear | Genesis Plus GX | Genesis Plus GX Wide,
Gearsystem,
SMS Plus GX,
PicoDrive,
MasterGear **(Standalone)** | No | Single archive or ROM file | | gb | Nintendo Game Boy | Gambatte | SameBoy,
Gearboy,
TGB Dual,
DoubleCherryGB,
Mesen-S,
bsnes,
mGBA,
VBA-M,
GBC.emu **(Standalone)**,
My OldBoy! **(Standalone**),
Pizza Boy GBC **(Standalone)** | No | Single archive or ROM file | | gba | Nintendo Game Boy Advance | mGBA | VBA-M,
VBA Next,
gpSP,
GBA.emu **(Standalone)**,
My Boy! **(Standalone)**,
Pizza Boy GBA **(Standalone)** | No | Single archive or ROM file | | gbc | Nintendo Game Boy Color | Gambatte | SameBoy,
Gearboy,
TGB Dual,
DoubleCherryGB,
Mesen-S,
bsnes,
mGBA,
VBA-M,
GBC.emu **(Standalone)**,
My OldBoy! **(Standalone**),
Pizza Boy GBC **(Standalone)** | No | Single archive or ROM file | | gc | Nintendo GameCube | Dolphin | Dolphin **(Standalone)**,
Dolphin MMJR **(Standalone)**,
Dolphin MMJR2 **(Standalone)** | No | Disc image file for single-disc games, .m3u playlist for multi-disc games | | genesis | Sega Genesis | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
MD.emu **(Standalone)** | No | Single archive or ROM file | -| gmaster | Hartung Game Master | _Placeholder_ | | | | -| gx4000 | Amstrad GX4000 | Caprice32 | CrocoDS | No | Single archive or ROM file | -| intellivision | Mattel Electronics Intellivision | FreeIntv | | Yes | Single archive or ROM file | +| gmaster | Hartung Game Master | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file | +| gx4000 | Amstrad GX4000 | Caprice32 | CrocoDS,
MAME4droid 2024 **(Standalone)** | No | Single archive or ROM file | +| intellivision | Mattel Electronics Intellivision | FreeIntv | MAME4droid 2024 **(Standalone)** | Yes | Single archive or ROM file | | j2me | Java 2 Micro Edition (J2ME) | SquirrelJME | | No | Single .jar file | | kodi | Kodi Home Theatre Software | _Placeholder_ | | | | -| laserdisc | LaserDisc Games | DirkSimple | | No | | -| lcdgames | LCD Handheld Games | Multi (MESS) | MAME4droid 2024 **(Standalone)**,
Handheld Electronic (GW) | No | Single archive or ROM file | +| laserdisc | LaserDisc Games | MAME4droid 2024 **(Standalone)** | DirkSimple | Depends | See the specific _LaserDisc Games_ section in the user guide | +| lcdgames | LCD Handheld Games | Multi (MESS) | MAME4droid 2024 Local Artwork **(Standalone)**,
MAME4droid 2024 **(Standalone)**,
Handheld Electronic (GW) | No | See the specific _LCD handheld games_ section in the user guide | | lowresnx | LowRes NX Fantasy Console | LowRes NX | | No | Single ROM file | | lutris | Lutris Open Gaming Platform | _Placeholder_ | | | | | lutro | Lutro Game Engine | Lutro | | | | -| macintosh | Apple Macintosh | _Placeholder_ | | | | -| mame | Multiple Arcade Machine Emulator | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
NEO.emu **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
Geolith,
Flycast,
Flycast **(Standalone)** | Depends | | +| macintosh | Apple Macintosh | MAME4droid 2024 Mac SE Bootable **(Standalone)** | MAME4droid 2024 Mac SE Boot Disk **(Standalone)**,
MAME4droid 2024 Mac Plus Bootable **(Standalone)**,
MAME4droid 2024 Mac Plus Boot Disk **(Standalone)** | Yes | See the specific _Apple Macintosh_ section in the user guide | +| mame | Multiple Arcade Machine Emulator | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)**,
NEO.emu **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
Geolith,
Flycast,
Flycast **(Standalone)** | Depends | See the specific _Arcade and Neo Geo_ section in the user guide | | mame-advmame | AdvanceMAME | _Placeholder_ | | | | | mastersystem | Sega Master System | Genesis Plus GX | Genesis Plus GX Wide,
SMS Plus GX,
Gearsystem,
PicoDrive,
MD.emu **(Standalone)**,
MasterGear **(Standalone)** | No | Single archive or ROM file | | megacd | Sega Mega-CD | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
MD.emu **(Standalone)** | Yes | | | megacdjp | Sega Mega-CD [Japan] | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
MD.emu **(Standalone)** | Yes | | | megadrive | Sega Mega Drive | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
MD.emu **(Standalone)** | No | Single archive or ROM file | | megadrivejp | Sega Mega Drive [Japan] | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
MD.emu **(Standalone)** | No | Single archive or ROM file | -| megaduck | Creatronic Mega Duck | SameDuck | | No | Single archive or ROM file | -| mess | Multi Emulator Super System | Multi (MESS) | | | | -| model2 | Sega Model 2 | MAME - Current | | Yes | | +| megaduck | Creatronic Mega Duck | SameDuck | MAME4droid 2024 **(Standalone)** | No | Single archive or ROM file | +| mess | Multi Emulator Super System | Multi (MESS) | | Depends | | +| model2 | Sega Model 2 | MAME - Current | MAME4droid 2024 **(Standalone)** | Yes | See the specific _Arcade and Neo Geo_ section in the user guide | | model3 | Sega Model 3 | _Placeholder_ | | | | | moto | Thomson MO/TO Series | Theodore | | | | | msx | MSX | blueMSX | fMSX,
fMSX **(Standalone)**,
MSX.emu **(Standalone)** | Yes except for fMSX standalone | | @@ -640,20 +713,20 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | naomi | Sega NAOMI | Flycast | Flycast **(Standalone)** | Yes | Single archive file + .chd file in subdirectory if GD-ROM game | | naomi2 | Sega NAOMI 2 | Flycast | Flycast **(Standalone)** | Yes | Single archive file + .chd file in subdirectory if GD-ROM game | | naomigd | Sega NAOMI GD-ROM | Flycast | Flycast **(Standalone)** | Yes | Single archive file + .chd file in subdirectory if GD-ROM game | -| n3ds | Nintendo 3DS | Citra | Citra **(Standalone)**,
Citra Canary **(Standalone)**,
Citra MMJ **(Standalone)**,
Panda3DS **(Standalone)** | No | Single ROM file | +| n3ds | Nintendo 3DS | Citra | Citra **(Standalone)**,
Citra Canary **(Standalone)**,
Citra MMJ **(Standalone)**,
Lime3DS **(Standalone)**,
Panda3DS **(Standalone)** | No | Single ROM file | | n64 | Nintendo 64 | Mupen64Plus-Next | M64Plus FZ **(Standalone)**,
Mupen64Plus AE **(Standalone)**,
ParaLLEl N64 | No | Single archive or ROM file | | n64dd | Nintendo 64DD | Mupen64Plus-Next | M64Plus FZ **(Standalone)**,
Mupen64Plus AE **(Standalone)**,
ParaLLEl N64 | Yes | | -| nds | Nintendo DS | melonDS DS | melonDS **(Standalone)**,
melonDS Nightly **(Standalone)**,
DeSmuME,
DeSmuME 2015,
DraStic **(Standalone)** | No | Single archive or ROM file | -| neogeo | SNK Neo Geo | FinalBurn Neo | Geolith,
NEO.emu **(Standalone)**,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)** | Yes | Single archive or ROM file | -| neogeocd | SNK Neo Geo CD | NeoCD | FinalBurn Neo | Yes | | -| neogeocdjp | SNK Neo Geo CD [Japan] | NeoCD | FinalBurn Neo | Yes | | +| nds | Nintendo DS | melonDS DS | melonDS,
melonDS **(Standalone)**,
melonDS Nightly **(Standalone)**,
DeSmuME,
DeSmuME 2015,
DraStic **(Standalone)** | No | Single archive or ROM file | +| neogeo | SNK Neo Geo | FinalBurn Neo | Geolith,
NEO.emu **(Standalone)**,
MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)** | Yes | See the specific _Arcade and Neo Geo_ section in the user guide | +| neogeocd | SNK Neo Geo CD | NeoCD | FinalBurn Neo,
MAME4droid 2024 **(Standalone)** | Yes | .chd (NeoCD and MAME4droid 2024 only) or .cue file | +| neogeocdjp | SNK Neo Geo CD [Japan] | NeoCD | FinalBurn Neo,
MAME4droid 2024 **(Standalone)** | Yes | .chd (NeoCD and MAME4droid 2024 only) or .cue file | | nes | Nintendo Entertainment System | Mesen | Nestopia UE,
FCEUmm,
QuickNES,
NES.emu **(Standalone)**,
iNES **(Standalone)**,
Nesoid **(Standalone)** | No | Single archive or ROM file | | ngage | Nokia N-Gage | EKA2L1 **(Standalone)** | | Yes | See the specific _Symbian and Nokia N-Gage_ section in the User guide | | ngp | SNK Neo Geo Pocket | Beetle NeoPop | RACE,
NGP.emu **(Standalone)** | No | Single archive or ROM file | | ngpc | SNK Neo Geo Pocket Color | Beetle NeoPop | RACE,
NGP.emu **(Standalone)** | No | Single archive or ROM file | -| odyssey2 | Magnavox Odyssey 2 | O2EM | | Yes | Single archive or ROM file | +| odyssey2 | Magnavox Odyssey 2 | O2EM | MAME4droid 2024 **(Standalone)** | Yes | Single archive or ROM file | | openbor | OpenBOR Game Engine | OpenBOR **(Standalone)** | | No | See the specific _OpenBOR_ section in the User guide | -| oric | Tangerine Computer Systems Oric | _Placeholder_ | | | | +| oric | Tangerine Computer Systems Oric | MAME4droid 2024 **(Standalone)** | | Yes | See the specific _Tangerine Computer Systems Oric_ section in the user guide | | palm | Palm OS | Mu | | | | | pc | IBM PC | DOSBox-Pure | DOSBox-Core,
DOSBox-SVN | No | | | pc88 | NEC PC-8800 Series | QUASI88 | | Yes | | @@ -672,14 +745,14 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | psp | Sony PlayStation Portable | PPSSPP | PPSSPP **(Standalone)** | No | Single disc image file | | psvita | Sony PlayStation Vita | Vita3K **(Standalone)** | | Yes | See the specific _Sony PlayStation Vita_ section in the User guide | | psx | Sony PlayStation | Beetle PSX | Beetle PSX HW,
PCSX ReARMed,
SwanStation,
DuckStation **(Standalone)**,
ePSXe **(Standalone)**,
FPseNG **(Standalone)**,
FPse **(Standalone)** | Yes | .chd file for single-disc games, .m3u playlist for multi-disc games | -| pv1000 | Casio PV-1000 | _Placeholder_ | | | | +| pv1000 | Casio PV-1000 | MAME4droid 2024 **(Standalone)** | | No | Single archive or ROM file | | quake | Quake | TyrQuake | vitaQuake 2,
vitaQuake 2 [Rogue],
vitaQuake 2 [Xatrix],
vitaQuake 2 [Zaero] | No | | | samcoupe | MGT SAM Coupé | Speccy **(Standalone)** | | No | Single archive or ROM file | | satellaview | Nintendo Satellaview | Snes9x - Current | Snes9x 2010,
Snes9x 2005 Plus,
Snes9x EX+ **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
Mesen-S | | | -| saturn | Sega Saturn | Beetle Saturn | YabaSanshiro,
Yabause,
Saturn.emu **(Standalone)** | Yes | .chd file for single-disc games, .m3u playlist for multi-disc games | -| saturnjp | Sega Saturn [Japan] | Beetle Saturn | YabaSanshiro,
Yabause,
Saturn.emu **(Standalone)** | Yes | .chd file for single-disc games, .m3u playlist for multi-disc games | -| scummvm | ScummVM Game Engine | ScummVM | | No | | -| scv | Epoch Super Cassette Vision | _Placeholder_ | | | | +| saturn | Sega Saturn | Beetle Saturn | YabaSanshiro,
Yaba Sanshiro 2 **(Standalone)**,
Yabause,
Saturn.emu **(Standalone)** | Yes | .chd file for single-disc games, .m3u playlist for multi-disc games | +| saturnjp | Sega Saturn [Japan] | Beetle Saturn | YabaSanshiro,
Yaba Sanshiro 2 **(Standalone)**,
Yabause,
Saturn.emu **(Standalone)** | Yes | .chd file for single-disc games, .m3u playlist for multi-disc games | +| scummvm | ScummVM Game Engine | ScummVM | ScummVM **(Standalone)** | No | See the specific _ScummVM_ section in the user guide | +| scv | Epoch Super Cassette Vision | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file | | sega32x | Sega Mega Drive 32X | PicoDrive | | No | Single archive or ROM file | | sega32xjp | Sega Super 32X [Japan] | PicoDrive | | No | Single archive or ROM file | | sega32xna | Sega Genesis 32X [North America] | PicoDrive | | No | Single archive or ROM file | @@ -695,26 +768,26 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | stv | Sega Titan Video Game System | MAME - Current | MAME4droid 2024 **(Standalone)**,
MAME4droid **(Standalone)** | Yes | Single archive file | | sufami | Bandai SuFami Turbo | Snes9x - Current | Snes9x 2010,
Snes9x 2005 Plus,
Snes9x EX+ **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy | | | | supergrafx | NEC SuperGrafx | Beetle SuperGrafx | Beetle PCE,
PCE.emu **(Standalone)** | No | Single archive or ROM file | -| supervision | Watara Supervision | Potator | | No | Single archive or ROM file | -| supracan | Funtech Super A'Can | _Placeholder_ | | | | +| supervision | Watara Supervision | Potator | MAME4droid 2024 **(Standalone)** | No | Single archive or ROM file | +| supracan | Funtech Super A'Can | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file. You need a supracan.zip archive that contains a valid internal_68k.bin file and an empty file named umc6650.bin | | switch | Nintendo Switch | Skyline **(Standalone)** | | Yes | | | symbian | Symbian | EKA2L1 **(Standalone)** | | Yes | See the specific _Symbian and Nokia N-Gage_ section in the User guide | | tanodragon | Tano Dragon | _Placeholder_ | | | | | tg16 | NEC TurboGrafx-16 | Beetle PCE | Beetle PCE FAST,
Beetle SuperGrafx,
PCE.emu **(Standalone)** | No | Single archive or ROM file | | tg-cd | NEC TurboGrafx-CD | Beetle PCE | Beetle PCE FAST,
Beetle SuperGrafx,
PCE.emu **(Standalone)** | Yes | | -| ti99 | Texas Instruments TI-99 | _Placeholder_ | | | | +| ti99 | Texas Instruments TI-99 | MAME4droid 2024 **(Standalone)** | | Yes | See the specific _Texas Instruments TI-99_ section in the user guide | | tic80 | TIC-80 Fantasy Computer | TIC-80 | | No | Single .tic file | | to8 | Thomson TO8 | Theodore | | | | | triforce | Namco-Sega-Nintendo Triforce | _Placeholder_ | | | | | trs-80 | Tandy TRS-80 | _Placeholder_ | | | | | type-x | Taito Type X | _Placeholder_ | | | | | uzebox | Uzebox Open Source Console | Uzem | | | | -| vectrex | GCE Vectrex | vecx | | No | Single archive or ROM file | +| vectrex | GCE Vectrex | vecx | MAME4droid 2024 **(Standalone)** | Yes for MAME4droid 2024 | Single archive or ROM file | | vic20 | Commodore VIC-20 | VICE xvic | | No | Single archive or tape, cartridge or diskette image file | -| videopac | Philips Videopac G7000 | O2EM | | Yes | Single archive or ROM file | +| videopac | Philips Videopac G7000 | O2EM | MAME4droid 2024 **(Standalone)** | Yes | Single archive or ROM file | | virtualboy | Nintendo Virtual Boy | Beetle VB | | No | | -| vpinball | Visual Pinball | _Placeholder_ | | | | -| vsmile | VTech V.Smile | _Placeholder_ | | | | +| vpinball | Visual Pinball | Visual Pinball **(Standalone)** | | No | See the specific _Visual Pinball_ section in the user guide | +| vsmile | VTech V.Smile | MAME4droid 2024 **(Standalone)** | | Yes | Single archive or ROM file | | wasm4 | WASM-4 Fantasy Console | WASM-4 | | No | Single .wasm file | | wii | Nintendo Wii | Dolphin | Dolphin **(Standalone)**,
Dolphin MMJR **(Standalone)**,
Dolphin MMJR2 **(Standalone)** | No | | | wiiu | Nintendo Wii U | _Placeholder_ | | | | @@ -723,11 +796,11 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | windows9x | Microsoft Windows 9x | DOSBox-Pure | | No | | | wonderswan | Bandai WonderSwan | Beetle Cygne | Swan.emu **(Standalone)** | No | Single archive or ROM file | | wonderswancolor | Bandai WonderSwan Color | Beetle Cygne | Swan.emu **(Standalone)** | No | Single archive or ROM file | -| x1 | Sharp X1 | X Millennium | | No | Single archive or diskette/tape file | -| x68000 | Sharp X68000 | PX68k | | Yes | | +| x1 | Sharp X1 | X Millennium | MAME4droid 2024 [Diskette] **(Standalone)**,
MAME4droid 2024 [Tape] **(Standalone)** | Yes for MAME4droid 2024 | Single archive or diskette/tape file | +| x68000 | Sharp X68000 | PX68k | MAME4droid 2024 **(Standalone)** | Yes | | | xbox | Microsoft Xbox | _Placeholder_ | | | | | xbox360 | Microsoft Xbox 360 | _Placeholder_ | | | | -| zmachine | Infocom Z-machine | _Placeholder_ | | | | +| zmachine | Infocom Z-machine | MojoZork | | No | | | zx81 | Sinclair ZX81 | EightyOne | | | | | zxnext | Sinclair ZX Spectrum Next | _Placeholder_ | | | | | zxspectrum | Sinclair ZX Spectrum | Fuse | Speccy **(Standalone)** | No | Single archive or ROM file | diff --git a/CHANGELOG.md b/CHANGELOG.md index a7a4e560e..dca8abef1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,33 +1,133 @@ # ES-DE Frontend - Changelog -## Version 3.1.0 (in development) +## Version 3.0.3 / 3.0.3-26 -**Release date:** TBD +**Release date:** 2024-06-14 ### Release overview -* Added the MAME 2003 RetroArch core as an alternative emulator for the arcade, cps, cps1, cps2, cps3 and mame systems -* (Linux/Unix) Changed the application summary from "Emulator Frontend" to "Gaming Frontend" -* Changed the application description to "ES-DE Frontend" for the -h/--help command line option +This release enables a lot of new systems on Android which brings this platform much closer to the desktop ports as far as system support is concerned. It also brings experimental support for setting ES-DE as the Android home app. Outside of Android a number of new features have been added to the theme engine, ES-DE can now be built for KMS/direct framebuffer access on Linux and several new emulators have been added. A couple of bugs have been fixed as well, in addition to some other minor improvements. ### Detailed list of changes +* (Android) Added experimental support for running ES-DE as the home app +* (Android) The touch overlay is no longer reset by the onboarding configurator unless the "Begin setup" button was pressed +* (Linux) Added a DEINIT_ON_LAUNCH CMake build flag to support KMS/direct framebuffer access +* Added support for the new Lime3DS binary names on Linux, macOS and Windows +* (Linux) Added support for the Flatpak release of Lime3DS +* (Android) Added support for the Apple II (apple2) game system +* (Android) Added support for the Apple IIGS (apple2gs) game system +* (Android) Added support for the Emerson Arcadia 2001 (arcadia) game system +* (Android) Added support for the Acorn Archimedes (archimedes) game system +* (Android) Added support for the Bally Astrocade (astrocde) game system +* (Android) Added support for the Acorn Computers BBC Micro (bbcmicro) game system +* (Android) Added support for the Tandy Color Computer (coco) game system +* (Android) Added support for the Console Arcade Systems (consolearcade) game system +* (Android) Added support for the VTech CreatiVision (crvision) game system +* (Android) Added support for the Acorn Electron (electron) game system +* (Android) Added support for the Emulators (emulators) game system +* (Android) Added support for the Fujitsu FM-7 (fm7) game system +* (Android) Added support for the Fujitsu FM Towns (fmtowns) game system +* (Android) Added support for the Bit Corporation Gamate (gamate) game system +* (Android) Added support for the Tiger Electronics Game.com (gamecom) game system +* (Android) Added support for the Hartung Game Master (gmaster) game system +* (Android) Added support for the Apple Macintosh (macintosh) game system +* (Android) Added support for the Tangerine Computer Systems Oric (oric) game system +* (Android) Added support for the Casio PV-1000 (pv1000) game system +* (Android) Added support for the Epoch Super Cassette Vision (scv) game system +* (Android) Added support for the Funtech Super A'Can (supracan) game system +* (Android) Added support for the Texas Instruments TI-99 (ti99) game system +* (Android) Added support for the Visual Pinball (vpinball) game system +* (Android) Added support for the VTech V.Smile (vsmile) game system +* (Android) Added support for the Infocom Z-machine (zmachine) game system +* (Android) Added MAME4droid 2024 standalone as the default emulator for the adam, daphne and laserdisc systems +* (Android) Added MAME4droid 2024 standalone as an alternative emulator for the amstradcpc, atari7800, atarijaguar and cdimono1 systems +* (Android) Added MAME4droid 2024 standalone as an alternative emulator for the channelf, gx4000, intellivision and megaduck systems +* (Android) Added MAME4droid 2024 standalone as an alternative emulator for the model2, neogeocd, neogeocdjp and odyssey2 systems +* (Android) Added MAME4droid 2024 standalone as an alternative emulator for the supervision, vectrex, videopac and x68000 systems +* (Android) Added MAME4droid 2024 Local Artwork standalone as an alternative emulator for the gameandwatch and lcdgames systems +* (Android) Added MAME4droid 2024 [Diskette] standalone and MAME4droid 2024 [Tape] standalone as alternative emulators for the x1 system +* (Android) Defined explicit ROM paths for MAME4droid 2024 for the arcade, cps, cps1, cps2, cps3, mame, neogeo and stv systems +* (Android) Added ScummVM standalone as an alternative emulator for the scummvm system +* (Android) Added IrataJaguar standalone as an alternative emulator for the atarijaguar system +* (Android) Added the melonDS RetroArch core as an alternative emulator for the nds system +* Added the MojoZork RetroArch core as the default emulator for the zmachine system +* Added MAME standalone as the default emulator for the oric system on Linux, macOS and Windows +* Added MAME [Cartridge] standalone and MAME [Tape] standalone as alternative emulator entries for the coco system +* Added ACE-DL standalone as an alternative emulator for the amstradcpc system on Linux, macOS and Windows +* Added ColEm standalone as an alternative emulator for the adam and colecovision systems on Linux and Windows +* (Windows) Added WinArcadia standalone as an alternative emulator for the arcadia system +* (Windows) Added XM6 Pro-68k standalone as an alternative emulator for the x68000 system +* (Linux) Added XM6 Pro-68k Wine and XM6 Pro-68k Proton as alternative emulators for the x68000 system +* Added the "-gameio joy" option to the MAME and MAME standalone alternative emulator entries for the apple2 and apple2gs systems +* Added the "-analogue acornjoy" option to the MAME standalone emulator entry for the bbcmicro system +* Added the .elf, .tmd and .wuhb file extensions to the wiiu system on Linux, macOS and Windows +* Added support for combining a %ROM% variable with the %INJECT% variable +* (Android) Added %GAMEDIRRAW%, %ROMPATHRAW% and %ROMRAW% variables that can be used with the %EXTRA% and %EXTRAARRAY% variables +* (linear-es-de) Added startup slide animations to the default transitions animation profile +* (linear-es-de) Changed system to system transitions from fade to instant for the fade animation profile +* Added a "selectedItemOffset" property to the carousel element +* Added a "selectedBackgroundMargins" property to the textlist element +* Added a "selectedBackgroundCornerRadius" property to the textlist element +* Added a "backgroundMargins" property to the text element +* Added a "backgroundCornerRadius" property to the text element +* Added an "imageCropPos" property to the carousel element +* Added an "imageCropPos" property to the grid element +* Added a "cropPos" property to the image element +* Added a "cropPos" property to the video element +* SDL_HINT_APP_NAME is now explicitly set to "ES-DE" to display the correct name in the OS sound settings interface and similar +* (macOS) Changed the minimum required OS version from 10.15 "Catalina" to 11 "Big Sur" + ### Bug fixes -## Version 3.0.1-xx (Android intermediate) (in development) +* Adding trailing directory separators to the MediaDirectory setting could make the Orphaned data cleanup utility remove too many files +* (Windows) Filenames containing multi-byte Unicode characters could not be used with the %INJECT% variable +* The texture size was sometimes calculated incorrectly for the video element when using the cropSize property +* Transition animations could sometimes partially play when switching themes with a system selected for the gamelist on startup setting +* There could be minor textlist selector clipping issues if the selector had a text background color set -**Release date:** TBD +## Version 3.0.2 / 3.0.2-21 + +**Release date:** 2024-05-13 + +### Release overview + +This release improves scraping speed under some circumstances, adds experimental support on Android for launching native apps and games, adds support for a couple of new emulators and brings a number of additional minor improvements. ### Detailed list of changes +* Improved multithreading for the network code which significantly increases scraping speed under some circumstances +* (Android) Added experimental support for launching native apps and games +* Added Lime3DS standalone as an alternative emulator for the n3ds system +* (Linux) Added the native release of BigPEmu standalone as an alternative emulator for the atarijaguar system +* (Linux) Added the native release of BigPEmu standalone as the default emulator for the atarijaguarcd system +* Added the MAME 2003 RetroArch core as an alternative emulator for the arcade, cps, cps1, cps2, cps3 and mame systems * (Android) Added Yaba Sanshiro 2 standalone as an alternative emulator for the saturn and saturnjp systems * (Android) Changed from %ROMPROVIDER% to %ROMSAF% for MD.emu (only for megacd, megacdjp and segacd) * (Android) Added support for the Antutu build of Citra MMJ -* Added the MAME 2003 RetroArch core as an alternative emulator for the arcade, cps, cps1, cps2, cps3 and mame systems +* (Android) Added a "Back button/back swipe exits app" menu option +* (Android) Increased the maximum waiting time for the storage mount retry loop from 4 to 4.5 seconds +* Changed the supported file extensions for the cdtv system to be the same as for the amiga systems +* Added the .car file extension to the atarixe system +* The game media directory is now created on application startup instead of when first starting the scraper +* (Linux/Unix) Changed the application summary from "Emulator Frontend" to "Gaming Frontend" +* (Windows) Changed some log entries to use backslashes instead of forward slashes as directory separators +* Windows carriage return characters are now filtered out when reading custom collection files and inject files +* Changed the application description to "ES-DE Frontend" for the -h/--help command line option +* Added support for marking themes as deprecated in the theme downloader +* Added support for the androidapps and androidgames systems to the Linear, Modern and Slate themes +* (modern-es-de) Converted all carousel icons from JPG to WebP format +* Added a User-Agent string when making non-scraper HTTP requests +* Added support for building against libgit2 v1.8.0 and later +* Updated SDL to 2.30.2 on Android, Windows, macOS and the Linux AppImage builds +* (Windows) Updated OpenSSL to 3.3.0 +* Updated the MAME index files to include ROMs up to MAME version 0.265 +* Bundled the March 2024 release of the Mozilla TLS/SSL certificates ### Bug fixes * On Android 10 the Orphaned data cleanup utility removed media files which should not have been removed +* The application couldn't be built with an older SDL release than 2.0.14 ## Version 3.0.1 / 3.0.1-19 diff --git a/CMakeLists.txt b/CMakeLists.txt index cd7de722c..4fc6fd6c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MIT # -# ES-DE +# ES-DE Frontend # CMakeLists.txt # # Main CMake configuration file. @@ -12,14 +12,14 @@ cmake_minimum_required(VERSION 3.13) if(APPLE) # Set this to the minimum supported macOS version, and also update # es-app/assets/ES-DE_Info.plist accordingly. - set(CMAKE_OSX_DEPLOYMENT_TARGET 10.15 CACHE STRING "macOS deployment target") + set(CMAKE_OSX_DEPLOYMENT_TARGET 11.0 CACHE STRING "macOS deployment target") # This optional variable is used for code signing the DMG installer. set(MACOS_CODESIGN_IDENTITY "" CACHE STRING "macOS code signing certificate identity") endif() project(es-de) # Application version, update this when making a new release. -set(ES_VERSION 3.0.1) +set(ES_VERSION 3.0.3) # Set this to ON to show verbose compiler output (e.g. compiler flags, include directories etc.) set(CMAKE_VERBOSE_MAKEFILE OFF CACHE BOOL "Show verbose compiler output" FORCE) @@ -44,6 +44,7 @@ option(RPI "Set to ON to enable a Raspberry Pi specific build" OFF) option(BUNDLED_CERTS "Set to ON to use bundled TLS/SSL certificates" OFF) option(CEC "Set to ON to enable CEC" OFF) option(VIDEO_HW_DECODING "Set to ON to enable FFmpeg HW decoding" OFF) +option(DEINIT_ON_LAUNCH "Set to ON to deinitialize on game launch" OFF) option(CLANG_TIDY "Set to ON to build using the clang-tidy static analyzer" OFF) option(ASAN "Set to ON to build with AddressSanitizer" OFF) option(TSAN "Set to ON to build with ThreadSanitizer" OFF) @@ -357,6 +358,15 @@ if(VIDEO_HW_DECODING) message("-- Building with FFmpeg HW decoding") endif() +if(DEINIT_ON_LAUNCH) + if(CMAKE_SYSTEM_NAME MATCHES Linux) + add_compile_definitions(DEINIT_ON_LAUNCH) + message("-- Building with deinitialization on game launch") + else() + message(FATAL_ERROR "-- Deinitialization on game launch can only be used on Linux") + endif() +endif() + if(AUR_BUILD OR FLATPAK_BUILD OR RETRODECK OR RPI) set(APPLICATION_UPDATER OFF) endif() diff --git a/FAQ-ANDROID.md b/FAQ-ANDROID.md index 25db5b291..bd4cfc298 100644 --- a/FAQ-ANDROID.md +++ b/FAQ-ANDROID.md @@ -12,7 +12,7 @@ First it's branding, it would be very confusing to have different names for the ## Is it available for free, and is it open source? -The Android release specifically is not free, it's a paid app available for purchase through [Patreon](https://www.patreon.com/es_de). And although approximately 99% of the app is open source there are some portions of the code that is closed source. +The Android release specifically is not free, it's a paid app available for purchase through [Patreon](https://www.patreon.com/es_de) or the [Samsung Galaxy Store](https://galaxystore.samsung.com/detail/org.es_de.frontend.galaxy). And although approximately 99% of the app is open source there are some portions of the code that is closed source. ## I bought ES-DE on Patreon, how do I get access to future releases? @@ -26,6 +26,10 @@ You only need to buy it once, and then you can use it on all your devices. There Although the overwhelming majority of people have successfully got ES-DE to run on their devices (assuming they are fulfilling the basic requirements of 64-bit Android 10 or later) there are some devices that have been problematic. Unfortunately Android is not really a standardized operating system and hardware manufacturers are sometimes applying custom patches and such which may prevent ES-DE from working correctly. We will refund everyone up to one month from the purchase date if they are unable to get ES-DE to run on their device, just send a DM on Patreon and we will issue a refund as soon as possible. +## I received an update email to my Gmail account but the APK download link doesn't seem to work? + +There seems to be an issue with Gmail (both web version and app) that a few people have run into. Clicking on some external download links will result in extremely slow downloads or the download failing completely. The solution is to copy the download link from the email and paste it into the address bar of a web browser, i.e. outside of the Gmail web interface or outside the Gmail app. That should resolve the issue and the APK should download correctly. + ## Will I lose any settings or data when upgrading to a new release? No, you will not lose any settings or data when you upgrade. Just download the latest version and sideload it on your device to apply the update. @@ -38,12 +42,19 @@ The second reason is that the APK is corrupt or not complete. When we make relea ## Can I set ES-DE as my home app/launcher? -Kind of, ES-DE can't natively be set as your launcher but you can use a third party app to make this work such as [AnyHome](https://play.google.com/store/apps/details?id=com.draco.anyhome&hl=en_US&gl=US). It's not necessarily recommended though as ES-DE is not a native Android application, it's written in C++ and essentially works as a game engine with a game loop that constantly runs. For this reason it consumes more resources and battery than a native launcher app. An alternative approach would be to use a native launcher with ES-DE, this makes for a nice game console experience. To achieve this the following app is recommended: -https://play.google.com/store/apps/details?id=com.k2.consolelauncher +Yes, as of version 3.0.3 there is experimental support for setting ES-DE as the home app. Read the _Running ES-DE as the Android home app_ section of the [Android documentation](ANDROID.md#running-es-de-as-the-android-home-app) for more information about this functionality. There are currently some minor glitches like sometimes needing to start ES-DE twice after switching between regular mode and home app mode, but apart from that it should hopefully work fine. -## Can I launch Android applications and games from inside ES-DE? +## Can I launch Android apps and games from inside ES-DE? -Not at the moment. Although there is an _android_ system in ES-DE it's not in use at the moment, but this functionality is planned for a future release. +Yes, as of ES-DE 3.0.2 there is experimental support for launching native Android apps and games. Read the _Launching native Android apps and games_ section of the [Android documentation](ANDROID.md#launching-native-android-apps-and-games) to see how this is accomplished. As you can read there a separate app is needed to import your games into ES-DE, but this functionality will be built into ES-DE itself in a future release. + +## Every time I reboot my device ES-DE is starting the onboarding process, why is this happening? + +If you have set ES-DE as your home app then for some devices the onboarding configurator is displayed after booting your device. This happens because of an issue in the Android operating system where apps are started before the SD card has been mounted. When ES-DE starts it will obviously try to access the ES-DE and ROMs directories that it needs to function, but if either of these have been placed on an SD card that is not available, then the application assumes that the storage has been permanently removed and runs the onboarding process again. This is normal and intended behavior. On app startup ES-DE will however check if the SD card has been mounted, and it will wait up to 4.5 seconds for the storage to become available before it gives up and displays the configurator. For the overwhelming amount of cases this time is enough to handle reboots without issues, but some SD cards of larger sizes apparently need more time than this to get mounted, which triggers the failure mode. Note that you don't need to run through the entire onboarding process if this happens, it's enough to just press B or the back button, just make sure to wait a sufficient amount of time for the SD card to first get mounted. Unfortunately this issues is impossible to resolve on the application layer, it's an operating system defect and it needs to be fixed by Google. Setting a higher retry time than 4.5 seconds will make Android report ES-DE as non-responding, so that's unfortunately not a viable solution either. + +## Can I use ES-DE with Samsung DeX? + +While ES-DE would in theory work fine with DeX this is unfortunately not supported as Samsung has a policy to not allow apps that can be set as home apps/launchers to run via DeX. This is a Samsung limitation that they would need to resolve. ## What game systems/platforms and emulators are supported by ES-DE? @@ -73,8 +84,6 @@ Also be aware that there are some slight variations when it comes to how emulato ERROR CODE -1 is a general failure mode which could be caused by multiple things. Some emulators react like this when there's a permission issue and they can't access the game file. See the previous question above for how to deal with such permission problems. And some emulators return this error when the file you attempt to launch has an unsupported file extension. For example MD.emu does not support .bin files, but if you rename these files to the .gen extension then game launching works as expected. -If you own an Ayn Odin 2 then this error will also occur when attempting to launch the ColEm, fMSX, iNES, MasterGear, My Boy!, My OldBoy!, Redream and Speccy emulators. This seems to be caused by bugs in their firmware/OS image and needs to be resolved by Ayn. - A black screen on game launch is also a possible variation of this failure mode, it depends on how the emulator handles errors whether there will be a black screen or whether it will abort and report the launch failure to ES-DE. ## Sometimes after I return from a game ES-DE is restarting, did it crash? @@ -83,7 +92,7 @@ No Android may stop applications that are not currently focused if it needs to r ## ES-DE takes a very long time to start, is there a way to improve this? -Unfortunately disk I/O performance on Android leaves a lot to be desired compared to desktop operating systems. Google has repeatedly prioritized other things over performance which leads to disk speed being poor on this operating system. The biggest offender is the choice of FAT filesystems such as exFAT for external storage which offer abysmal performance for some file operations on which ES-DE relies heavily. Generally speaking a small to medium ROM collection can normally be placed on a FAT-formatted device such as an SD card but the ES-DE directory and more importantly the _downloaded_media_ directory should always be placed on internal storage. For large game collections ES-DE could turn borderline unusable if the ES-DE directory is placed on an SD card or USB memory stick. It's also possible to enable the _Only show games from gamelist.xml files_ option in the _Other settings_ menu to skip checking for game files on startup, but this has multiple implications such as what's displayed inside ES-DE not necessarily reflecting reality any longer. And obviously you'll need gamelist.xml entries for all games you want to show up inside ES-DE. So this option is really a last resort and is generally only recommended for testing purposes. In summary huge game collections are discouraged on Android due to limitations in the operating system itself. Setting up a collection of tens of thousands of games is for sure achievable with ES-DE on Linux, macOS or Windows but it's not really feasible on Android. +Unfortunately disk I/O performance on Android leaves a lot to be desired compared to desktop operating systems. Google has prioritized other things over performance which leads to disk speed being poor overall on this operating system. The main offender is the choice of FAT filesystems such as exFAT for external storage which offer very poor performance for some file operations on which ES-DE relies heavily. Generally speaking a small to medium ROM collection can normally be placed on a FAT-formatted device such as an SD card but the ES-DE directory and more importantly the _downloaded_media_ directory should always be placed on internal storage. For large game collections ES-DE could turn borderline unusable if the ES-DE directory is placed on an SD card or USB memory stick. It's also possible to enable the _Only show games from gamelist.xml files_ option in the _Other settings_ menu to skip checking for game files on startup, but this has multiple implications such as what's displayed inside ES-DE not necessarily reflecting reality any longer. And obviously you'll need gamelist.xml entries for all games you want to show up inside ES-DE. So this option is really a last resort and is generally only recommended for testing purposes. In summary huge game collections are discouraged on Android due to limitations in the operating system itself. Setting up a collection of tens of thousands of games is for sure achievable with ES-DE on Linux, macOS or Windows but it's not really feasible on Android. ## On game launch RetroArch runs an old game instead of the one I just selected, how do I prevent this? @@ -94,10 +103,14 @@ https://www.youtube.com/watch?v=k5WWacfIn6Y ES-DE runs on a wide range on devices, for example handheld consoles like the Ayn Odin and the Retroid Pocket models, on mobile phones, on tablets and on Android TV devices like the Nvidia Shield Pro. It supports a wide range of screen resolutions and aspect ratios. A 64-bit version of Android 10 or later is required. +## Can I use the Android soft keyboard to enter text using touch and swiping + +Yes this is somehow possible, by disabling the _Enable virtual keyboard_ setting in the _UI settings_ menu the soft keyboard built into Android can be used. There is however a bug in the SDL library that causes rendering issues in ES-DE when combining this with controller input. More specifically a green border is shown around the screen and the bottom portion of the screen is not getting rendered at all. If this happens you need to restart ES-DE, and for this reason the ES-DE built-in virtual keyboard is enabled by default. If you are however only using touch input with ES-DE then using the Android soft keyboard should work fine. + ## Will touch gesture support get added? ES-DE is not a good match for gesture navigation, there are a lot of contextual navigation and quite a number of possible actions at any given time. So it would probably get quite confusing to attempt to learn gestures for all these actions. For this reason it was decided to instead implement a touch overlay with virtual buttons. This is also what most emulators use for their input so ES-DE will match the emulators in this regard. However, if you are using a controller with ES-DE then none of this applies and you can go ahead and disable the touch overlay from the _Input device settings_ menu. ## Why does ES-DE need to have permissions to manage my storage? -ES-DE needs the storage permissions (MANAGE_EXTERNAL_STORAGE) to manage storage because it's well.. a storage manager. It handles your library of games and media which can easily be tens or even hundreds of thousands of files, and this may span across multiple storage devices as for instance scraped media could be relocated to an SD card or the ROMs moved to another device than the application data directory. During development substantial work was spent on attempting to work around the Android security model without having storage manager permission. Although this was partially successful it never worked 100% due to additional restrictions introduced in Android 13. The approach was to pipe file operations from the native C++ code via JNI to Java and translate them to SAF/MediaStore file operations. And be aware that ES-DE depends on a large amount of C and C++ libraries that have no awareness of or support for the Storage Access Framework or Media Store subsystems in Android. Even if it would have worked 100% this would have lead to unacceptable performance issues as a lot of translations were needed, for instance Java uses "filtered" UTF8 Unicode while C++ doesn't so everything would need to be translated by the UTF8-CPP library. In addition to this an undocumented feature of the FileProvider API is that you can't provide access to files you don't own, even if you have read/write access to them using scoped storage permissions. As the FileProvider API is the future of emulator launching since it removes the need to setup scoped storage access individually in each emulator, it would break a very important feature to not have storage manager access. There are more issues on top of what has just been described, but these are the most important considerations. \ No newline at end of file +ES-DE needs the storage permissions (MANAGE_EXTERNAL_STORAGE) to manage storage because it's well.. a storage manager. It handles your library of games and media which can easily be tens or even hundreds of thousands of files, and this may span across multiple storage devices as for instance scraped media could be relocated to an SD card or the ROMs moved to another device than the application data directory. During development substantial work was spent on attempting to work around the Android security model without having storage manager permission. Although this was partially successful it never worked 100% due to additional restrictions introduced in Android 13. The approach was to pipe file operations from the native C++ code via JNI to Java and translate them to SAF/MediaStore file operations. And be aware that ES-DE depends on a large amount of C and C++ libraries that have no awareness of or support for the Storage Access Framework or Media Store subsystems in Android. Even if it would have worked 100% this would have lead to unacceptable performance issues as a lot of translations were needed, for instance Java uses "filtered" UTF8 Unicode while C++ doesn't so everything would need to be translated by the UTF8-CPP library. In addition to this an undocumented feature of the FileProvider API is that you can't provide access to files you don't own, even if you have read/write access to them using scoped storage permissions. As the FileProvider API is very useful for emulator launching since it removes the need to setup scoped storage access individually in each emulator, it would break a very important feature to not have storage manager access. There are more issues on top of what has just been described, but these are the most important considerations. diff --git a/FAQ.md b/FAQ.md index 476a286d9..2db2d8edc 100644 --- a/FAQ.md +++ b/FAQ.md @@ -144,8 +144,8 @@ The second reason for double input is buggy controller drivers. This seems to on ## I'm missing a feature, how can I make a request to have it added? -First check the project [Kanban](https://gitlab.com/es-de/emulationstation-de/-/boards/1823720) board which contains an overview of planned future features and search for the functionality you would like to see added. Chances are there is already a card on the board describing what you intended to request. You can also check the [Roadmap](ROADMAP.md) document which contains a list of planned major features. If you can't find the feature you're looking for, then you can request it either via adding an issue directly to the Kanban board, or by asking for it in our [Discord](https://discord.gg/EVVX4DqWAP) server. +First check the project [Kanban](https://gitlab.com/es-de/emulationstation-de/-/boards/1823720) board which contains an overview of planned future features and search for the functionality you would like to see added. Chances are there is already a card on the board describing what you intended to request. You can also check the [Roadmap](ROADMAP.md) document which contains a list of planned major features. If you can't find the feature you're looking for, then you can request it either via adding an issue directly to the Kanban board, or by asking for it in our [Discord](https://discord.gg/42jqqNcHf9) server. ## I want to setup a gaming appliance based on a single-board computer, can I use ES-DE for this? -This is not the goal of ES-DE, the application requires a desktop environment to run. If you want to run a frontend on a single-board computer without using Xorg or Wayland then there are better options out there. But many people run ES-DE on arcade cabinets and similar which is definitely possible, it just requires a desktop-class operating system. +Yes this is possible, although this is not the primary use case for ES-DE. As the application is not intended to be the sole user interface for the computer there is no built-in functionality to manage operating system settings and emulator settings for instance. ES-DE also generally requires a desktop environment to run, which means a window manager and a sound server. You can however use KMS/direct framebuffer access on Linux if you build with the DEINIT_ON_LAUNCH flag as explained in the _Building on Unix_ section of the [INSTALL.md](INSTALL.md#building-on-unix) document. This would in theory allow ES-DE to be a drop-in replacement for RetroPie EmulationStation for example. diff --git a/INSTALL-DEV.md b/INSTALL-DEV.md index 17bda3c84..50b049edb 100644 --- a/INSTALL-DEV.md +++ b/INSTALL-DEV.md @@ -55,9 +55,11 @@ sudo pacman -S gcc clang make cmake pkgconf sdl2 ffmpeg freeimage freetype2 libg All of the required packages can be installed with apt-get: ``` -sudo apt-get install clang-format cmake libsdl2-dev libavcodec-dev libavfilter-dev libavformat-dev libavutil-dev libfreeimage-dev libgit2-dev libcurl4-gnutls-dev libpugixml-dev libpoppler-cpp-dev +sudo apt-get install clang-format cmake libraspberrypi-dev libsdl2-dev libavcodec-dev libavfilter-dev libavformat-dev libavutil-dev libfreeimage-dev libfreetype6-dev libgit2-dev libcurl4-gnutls-dev libpugixml-dev libpoppler-cpp-dev ``` +For a 64-bit build it's very important that you include libraspberrypi-dev because if this package is not installed then the file /usr/include/bcm_host.h is not present on the filesystem. This leads to CMake not detecting that it's indeed a Raspberry Pi and it will attempt to make a regular Linux build instead. + To build with CEC support you also need to install these packages: ``` sudo apt-get install libcec-dev libp8-platform-dev @@ -65,7 +67,7 @@ sudo apt-get install libcec-dev libp8-platform-dev The Raspberry Pi 4/400 is the minimum recommended version and earlier boards have not been tested. The GPU memory should be set to at least 256 MB using `raspi-config` and the GL driver must be set to `GL (Fake KMS)` or the performance will be horrible. -Note that low-level ALSA sound support has been removed from ES-DE which means that a sound server like PulseAudio or PipeWire is required. Likewise a display server (Xorg or Wayland) is required, direct framebuffer access is not supported. +Note that low-level ALSA sound support has been removed from ES-DE which means that a sound server like PulseAudio or PipeWire is required. By default a display server (Xorg or Wayland) is also required but by using the DEINIT_ON_LAUNCH build option as explained later in this document KMS/direct framebuffer access can be used. Only the OpenGL ES 3.0 renderer works on Raspberry Pi and it's enabled by default. @@ -133,6 +135,14 @@ make Note that the application updater is always disabled when building for the AUR, RetroDECK, Raspberry Pi or BSD Unix. +On Linux specifically you can build with the DEINIT_ON_LAUNCH option which will deinit the renderer, application window and audio when an emulator is launched. This makes it possible to use ES-DE with KMS/direct framebuffer access to for example make ES-DE a drop-in replacement for RetroPie EmulationStation: +``` +cmake -DDEINIT_ON_LAUNCH=on . +make +``` + +When this flag is enabled the menu option _Run in background (while game is launched)_ in the Other settings menu is disabled and all functionality related to running ES-DE in the background is also disabled. + By default the master branch will be used, which is where development takes place. To instead build a stable release, switch to the `stable-x.x` branch for the version, for example: ``` @@ -1561,7 +1571,7 @@ The following variables are expanded for the `command` tag: `%STARTDIR%` - The directory to start in when launching the emulator. Must be defined as a pair separated by an equal sign. This is normally not required, but some emulators and game engines like standalone MAME and OpenBOR will not work properly unless you're in the correct directory when launching a game. Either an absolute path can be used, such as `%STARTDIR%=C:\Games\mame` or some variables are available that provide various functions. The `%EMUDIR%` variable can be used to start in the directory where the emulator binary is located, i.e. `%STARTDIR%=%EMUDIR%`, the `%GAMEDIR%` variable can be used to start in the directory where the game file is located, i.e. `%STARTDIR%=%GAMEDIR%` and the `%GAMEENTRYDIR%` variable can be used which works identically to `%GAMEDIR%` with the exception that it will interpret the actual game entry as the start directory. This is useful in very rare situations like for the EasyRPG Player where the game directories are interpreted as files but where the game engine must still be started from inside the game directory. If an absolute path is set that contains blankspaces, then it must be surrounded by quotation marks, for example `%STARTDIR%="C:\Retro games\mame"`. If the directory defined by this variable does not exist, it will be created on game launch. The variable can be placed anywhere in the launch command if the %EMULATOR_ variable is used, otherwise it has to be placed after the emulator binary. -`%INJECT%` - This allows the injection of launch arguments or environment variables stored in a text file on the filesystem. The %INJECT% variable must be defined as a pair separated by an equal sign, for example `%INJECT%=game.commands`. The `%BASENAME%` variable can also be used in conjunction with this variable, such as `%INJECT%=%BASENAME%.commands`. By default a path relative to the game file will be assumed but it's also possible to use an absolute path or the ~ (tilde) symbol which will expand to the home directory. If a path contains spaces it needs to be surrounded by quotation marks, such as `%INJECT%="C:\My games\ROMs\daphne\%BASENAME%.daphne\%BASENAME%.commands"`. The variable can be placed anywhere in the launch command and the file contents will be injected at that position. It's also possible to have multiple injections by defining the variable more than once at different locations in the launch command string. The specified file is optional, if it does not exist, is empty, or if there are insufficient permissions to read the file, then it will simply be skipped. For safety reasons the injection file can only have a maximum size of 4096 bytes and if it's larger than this it will be skipped and a warning will be written to es_log.txt. +`%INJECT%` - This allows the injection of launch arguments or environment variables stored in a text file on the filesystem. The %INJECT% variable must be defined as a pair separated by an equal sign, for example `%INJECT%=game.commands`. The `%BASENAME%` variable can also be used in conjunction with this variable, such as `%INJECT%=%BASENAME%.commands` and the `%ROM%` variable is another possibility, such as `%INJECT%=%ROM%`. The latter will expand to the absolute path of the game file and inject its file contents, and this also works when combined with the directories interpreted as files functionality. By default a path relative to the game file will be assumed but it's also possible to use an absolute path or the ~ (tilde) symbol which will expand to the home directory. If a path contains spaces it needs to be surrounded by quotation marks, such as `%INJECT%="C:\My games\ROMs\daphne\%BASENAME%.daphne\%BASENAME%.commands"`. The variable can be placed anywhere in the launch command and the file contents will be injected at that position. It's also possible to have multiple injections by defining the variable more than once at different locations in the launch command string. The specified file is optional, if it does not exist, is empty, or if there are insufficient permissions to read the file, then it will simply be skipped. For safety reasons the injection file can only have a maximum size of 4096 bytes and if it's larger than this it will be skipped and a warning will be written to es_log.txt. `%EMUPATH%` - Replaced with the path to the emulator binary. This variable is used for manually specifying emulator core locations, and a check for the existence of the core file will be done on game launch and an error displayed if it can't be found. Normally %EMUPATH% should not be used as the %CORE_ variable is the recommended method for defining core locations. @@ -1752,13 +1762,13 @@ The es_systems.xml file on Android utilizes variables heavily to implement the _ There are two main ways to pass options to emulators, using _extras_ or using the _data_ URI. There can only be a single data URI but there can be an arbitrary amount of extras. To understand more about the way this works, you can read about the _putExtra()_ and and _setData()_ functions here:\ https://developer.android.com/reference/android/content/Intent -`%EXTRA_` - This passes an _extra_ which contains any additional information that the emulator may support. This is provided as a key/value pair where you define the key name following the literal %EXTRA_ string and terminate it with a % sign and then assign the value using an equal sign. For example %EXTRA_LIBRETRO%=puae_libretro_android.so will pass the extra named _LIBRETRO_ with its value set to _puae_libretro_android.so_. You can pass an unlimited number of extras and you can also use various ROM variables in combination with this as described below. +`%EXTRA_` - This passes an _extra_ which contains any additional information that the emulator may support. This is provided as a key/value pair where you define the key name following the literal %EXTRA_ string and terminate it with a % sign and then assign the value using an equal sign. For example %EXTRA_LIBRETRO%=puae_libretro_android.so will pass the extra named _LIBRETRO_ with its value set to _puae_libretro_android.so_. You can pass an unlimited number of extras and you can also use various ROM variables in combination with this as described below. It's also possible to use the `%GAMEDIRRAW%`, `%ROMPATHRAW%` and `%ROMRAW%` variables inside an `%EXTRA_` variable definition, which will expand to the the directory of the game file, the ROM directory and the path to the game file respectively. -`%EXTRAARRAY_` - Defines an array of comma-separated string values following the key name. Only literal strings are supported, so this can't be used in combination with any ROM variables. As commas are used as separator characters, you'll need to escape any comma signs that you want to include in the actual value. For example %EXTRAARRAY_Parameters%=pone,p\\,two,pthree will pass the extra named _Parameters_ with the three separate array entries _pone_, _p,two_ and _pthree_. +`%EXTRAARRAY_` - Defines an array of comma-separated string values following the key name. Only literal strings are supported, so this can't be used in combination with any ROM variables. As commas are used as separator characters, you'll need to escape any comma signs that you want to include in the actual value. For example %EXTRAARRAY_Parameters%=pone,p\\,two,pthree will pass the extra named _Parameters_ with the three separate array entries _pone_, _p,two_ and _pthree_. It's also possible to use the `%GAMEDIRRAW%`, `%ROMPATHRAW%` and `%ROMRAW%` variables inside an `%EXTRAARRAY_` variable definition, which will expand to the the directory of the game file, the ROM directory and the path to the game file respectively. `%EXTRABOOL_` - Sets an extra with a boolean value, i.e. true/1 or false/0. -`%DATA%` - Sets the data URI value for the intent using an equal sign. This is normally combined with one of the ROM variables. +`%DATA%` - Sets the data URI value for the intent using an equal sign. This is normally combined with one of the ROM variables but it's also possible to define an explicit value or to inject the content of a file and pass that to the variable. This can for instance be accomplished with `%DATA%=%INJECT%=%ROM%` which will expand to the absolute path of the game file and inject its file content. This also works when combined with the directories interpreted as files functionality. Alternatively the `%BASENAME%` variable can be used instead, as in `%DATA%=%BASENAME%` or `%DATA%=%BASENAME%.extension` but this can't be combined with the directories interpreted as files functionality. There are three approaches to passing game ROMs to emulators by using the following variables: @@ -1782,6 +1792,20 @@ Here are some examples to clarify how this works: %EXTRABOOL_resumeState%=false ``` +`%ANDROIDAPP%` - This is a special variable that is used to launch native Android apps and games. It must be defined as a pair separated by an equal sign. Most commonly it will be combined with the `%FILEINJECT%` variable which will inject the content of the game file, but it's also possible to define an explicit package name after the equal sign. Additionally you can specify which activity to use by adding it after a forward slash character. If no activity is defined then the default for the package will be used. The content of the inject file should look identical to an explicit entry, i.e. it can be just the package name or the package name and the activity. + +Here are some examples to clarify how this works: +``` +%ANDROIDAPP%=%FILEINJECT% +%ANDROIDAPP%=org.ppsspp.ppssppgold +%ANDROIDAPP%=org.ppsspp.ppssppgold/org.ppsspp.ppsspp.PpssppActivity +``` + +The content of an inject file could look simply like the following: +``` +org.ppsspp.ppssppgold +``` + There is also support for a couple of activity flags that affect the emulator/game launch behavior, you can read more about these flags here:\ https://developer.android.com/reference/android/content/Intent diff --git a/INSTALL.md b/INSTALL.md index 14fa7e59f..bc0b2c1de 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -53,9 +53,11 @@ sudo pacman -S gcc clang make cmake pkgconf sdl2 ffmpeg freeimage freetype2 libg All of the required packages can be installed with apt-get: ``` -sudo apt-get install clang-format cmake libsdl2-dev libavcodec-dev libavfilter-dev libavformat-dev libavutil-dev libfreeimage-dev libgit2-dev libcurl4-gnutls-dev libpugixml-dev libpoppler-cpp-dev +sudo apt-get install clang-format cmake libraspberrypi-dev libsdl2-dev libavcodec-dev libavfilter-dev libavformat-dev libavutil-dev libfreeimage-dev libfreetype6-dev libgit2-dev libcurl4-gnutls-dev libpugixml-dev libpoppler-cpp-dev ``` +For a 64-bit build it's very important that you include libraspberrypi-dev because if this package is not installed then the file /usr/include/bcm_host.h is not present on the filesystem. This leads to CMake not detecting that it's indeed a Raspberry Pi and it will attempt to make a regular Linux build instead. + To build with CEC support you also need to install these packages: ``` sudo apt-get install libcec-dev libp8-platform-dev @@ -63,7 +65,7 @@ sudo apt-get install libcec-dev libp8-platform-dev The Raspberry Pi 4/400 is the minimum recommended version and earlier boards have not been tested. The GPU memory should be set to at least 256 MB using `raspi-config` and the GL driver must be set to `GL (Fake KMS)` or the performance will be horrible. -Note that low-level ALSA sound support has been removed from ES-DE which means that a sound server like PulseAudio or PipeWire is required. Likewise a display server (Xorg or Wayland) is required, direct framebuffer access is not supported. +Note that low-level ALSA sound support has been removed from ES-DE which means that a sound server like PulseAudio or PipeWire is required. By default a display server (Xorg or Wayland) is also required but by using the DEINIT_ON_LAUNCH build option as explained later in this document KMS/direct framebuffer access can be used. Only the OpenGL ES 3.0 renderer works on Raspberry Pi and it's enabled by default. @@ -131,6 +133,14 @@ make Note that the application updater is always disabled when building for the AUR, RetroDECK, Raspberry Pi or BSD Unix. +On Linux specifically you can build with the DEINIT_ON_LAUNCH option which will deinit the renderer, application window and audio when an emulator is launched. This makes it possible to use ES-DE with KMS/direct framebuffer access to for example make ES-DE a drop-in replacement for RetroPie EmulationStation: +``` +cmake -DDEINIT_ON_LAUNCH=on . +make +``` + +When this flag is enabled the menu option _Run in background (while game is launched)_ in the Other settings menu is disabled and all functionality related to running ES-DE in the background is also disabled. + By default the master branch will be used, which is where development takes place. To instead build a stable release, switch to the `stable-x.x` branch for the version, for example: ``` @@ -1559,7 +1569,7 @@ The following variables are expanded for the `command` tag: `%STARTDIR%` - The directory to start in when launching the emulator. Must be defined as a pair separated by an equal sign. This is normally not required, but some emulators and game engines like standalone MAME and OpenBOR will not work properly unless you're in the correct directory when launching a game. Either an absolute path can be used, such as `%STARTDIR%=C:\Games\mame` or some variables are available that provide various functions. The `%EMUDIR%` variable can be used to start in the directory where the emulator binary is located, i.e. `%STARTDIR%=%EMUDIR%`, the `%GAMEDIR%` variable can be used to start in the directory where the game file is located, i.e. `%STARTDIR%=%GAMEDIR%` and the `%GAMEENTRYDIR%` variable can be used which works identically to `%GAMEDIR%` with the exception that it will interpret the actual game entry as the start directory. This is useful in very rare situations like for the EasyRPG Player where the game directories are interpreted as files but where the game engine must still be started from inside the game directory. If an absolute path is set that contains blankspaces, then it must be surrounded by quotation marks, for example `%STARTDIR%="C:\Retro games\mame"`. If the directory defined by this variable does not exist, it will be created on game launch. The variable can be placed anywhere in the launch command if the %EMULATOR_ variable is used, otherwise it has to be placed after the emulator binary. -`%INJECT%` - This allows the injection of launch arguments or environment variables stored in a text file on the filesystem. The %INJECT% variable must be defined as a pair separated by an equal sign, for example `%INJECT%=game.commands`. The `%BASENAME%` variable can also be used in conjunction with this variable, such as `%INJECT%=%BASENAME%.commands`. By default a path relative to the game file will be assumed but it's also possible to use an absolute path or the ~ (tilde) symbol which will expand to the home directory. If a path contains spaces it needs to be surrounded by quotation marks, such as `%INJECT%="C:\My games\ROMs\daphne\%BASENAME%.daphne\%BASENAME%.commands"`. The variable can be placed anywhere in the launch command and the file contents will be injected at that position. It's also possible to have multiple injections by defining the variable more than once at different locations in the launch command string. The specified file is optional, if it does not exist, is empty, or if there are insufficient permissions to read the file, then it will simply be skipped. For safety reasons the injection file can only have a maximum size of 4096 bytes and if it's larger than this it will be skipped and a warning will be written to es_log.txt. +`%INJECT%` - This allows the injection of launch arguments or environment variables stored in a text file on the filesystem. The %INJECT% variable must be defined as a pair separated by an equal sign, for example `%INJECT%=game.commands`. The `%BASENAME%` variable can also be used in conjunction with this variable, such as `%INJECT%=%BASENAME%.commands` and the `%ROM%` variable is another possibility, such as `%INJECT%=%ROM%`. The latter will expand to the absolute path of the game file and inject its file contents, and this also works when combined with the directories interpreted as files functionality. By default a path relative to the game file will be assumed but it's also possible to use an absolute path or the ~ (tilde) symbol which will expand to the home directory. If a path contains spaces it needs to be surrounded by quotation marks, such as `%INJECT%="C:\My games\ROMs\daphne\%BASENAME%.daphne\%BASENAME%.commands"`. The variable can be placed anywhere in the launch command and the file contents will be injected at that position. It's also possible to have multiple injections by defining the variable more than once at different locations in the launch command string. The specified file is optional, if it does not exist, is empty, or if there are insufficient permissions to read the file, then it will simply be skipped. For safety reasons the injection file can only have a maximum size of 4096 bytes and if it's larger than this it will be skipped and a warning will be written to es_log.txt. `%EMUPATH%` - Replaced with the path to the emulator binary. This variable is used for manually specifying emulator core locations, and a check for the existence of the core file will be done on game launch and an error displayed if it can't be found. Normally %EMUPATH% should not be used as the %CORE_ variable is the recommended method for defining core locations. @@ -1750,13 +1760,13 @@ The es_systems.xml file on Android utilizes variables heavily to implement the _ There are two main ways to pass options to emulators, using _extras_ or using the _data_ URI. There can only be a single data URI but there can be an arbitrary amount of extras. To understand more about the way this works, you can read about the _putExtra()_ and and _setData()_ functions here:\ https://developer.android.com/reference/android/content/Intent -`%EXTRA_` - This passes an _extra_ which contains any additional information that the emulator may support. This is provided as a key/value pair where you define the key name following the literal %EXTRA_ string and terminate it with a % sign and then assign the value using an equal sign. For example %EXTRA_LIBRETRO%=puae_libretro_android.so will pass the extra named _LIBRETRO_ with its value set to _puae_libretro_android.so_. You can pass an unlimited number of extras and you can also use various ROM variables in combination with this as described below. +`%EXTRA_` - This passes an _extra_ which contains any additional information that the emulator may support. This is provided as a key/value pair where you define the key name following the literal %EXTRA_ string and terminate it with a % sign and then assign the value using an equal sign. For example %EXTRA_LIBRETRO%=puae_libretro_android.so will pass the extra named _LIBRETRO_ with its value set to _puae_libretro_android.so_. You can pass an unlimited number of extras and you can also use various ROM variables in combination with this as described below. It's also possible to use the `%GAMEDIRRAW%`, `%ROMPATHRAW%` and `%ROMRAW%` variables inside an `%EXTRA_` variable definition, which will expand to the the directory of the game file, the ROM directory and the path to the game file respectively. -`%EXTRAARRAY_` - Defines an array of comma-separated string values following the key name. Only literal strings are supported, so this can't be used in combination with any ROM variables. As commas are used as separator characters, you'll need to escape any comma signs that you want to include in the actual value. For example %EXTRAARRAY_Parameters%=pone,p\\,two,pthree will pass the extra named _Parameters_ with the three separate array entries _pone_, _p,two_ and _pthree_. +`%EXTRAARRAY_` - Defines an array of comma-separated string values following the key name. Only literal strings are supported, so this can't be used in combination with any ROM variables. As commas are used as separator characters, you'll need to escape any comma signs that you want to include in the actual value. For example %EXTRAARRAY_Parameters%=pone,p\\,two,pthree will pass the extra named _Parameters_ with the three separate array entries _pone_, _p,two_ and _pthree_. It's also possible to use the `%GAMEDIRRAW%`, `%ROMPATHRAW%` and `%ROMRAW%` variables inside an `%EXTRAARRAY_` variable definition, which will expand to the the directory of the game file, the ROM directory and the path to the game file respectively. `%EXTRABOOL_` - Sets an extra with a boolean value, i.e. true/1 or false/0. -`%DATA%` - Sets the data URI value for the intent using an equal sign. This is normally combined with one of the ROM variables. +`%DATA%` - Sets the data URI value for the intent using an equal sign. This is normally combined with one of the ROM variables but it's also possible to define an explicit value or to inject the content of a file and pass that to the variable. This can for instance be accomplished with `%DATA%=%INJECT%=%ROM%` which will expand to the absolute path of the game file and inject its file content. This also works when combined with the directories interpreted as files functionality. Alternatively the `%BASENAME%` variable can be used instead, as in `%DATA%=%BASENAME%` or `%DATA%=%BASENAME%.extension` but this can't be combined with the directories interpreted as files functionality. There are three approaches to passing game ROMs to emulators by using the following variables: @@ -1780,6 +1790,20 @@ Here are some examples to clarify how this works: %EXTRABOOL_resumeState%=false ``` +`%ANDROIDAPP%` - This is a special variable that is used to launch native Android apps and games. It must be defined as a pair separated by an equal sign. Most commonly it will be combined with the `%FILEINJECT%` variable which will inject the content of the game file, but it's also possible to define an explicit package name after the equal sign. Additionally you can specify which activity to use by adding it after a forward slash character. If no activity is defined then the default for the package will be used. The content of the inject file should look identical to an explicit entry, i.e. it can be just the package name or the package name and the activity. + +Here are some examples to clarify how this works: +``` +%ANDROIDAPP%=%FILEINJECT% +%ANDROIDAPP%=org.ppsspp.ppssppgold +%ANDROIDAPP%=org.ppsspp.ppssppgold/org.ppsspp.ppsspp.PpssppActivity +``` + +The content of an inject file could look simply like the following: +``` +org.ppsspp.ppssppgold +``` + There is also support for a couple of activity flags that affect the emulator/game launch behavior, you can read more about these flags here:\ https://developer.android.com/reference/android/content/Intent diff --git a/README.md b/README.md index 8260dc83b..9a57ccce5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ES-DE Frontend -ES-DE (formerly EmulationStation Desktop Edition) is a frontend for browsing and launching games from your multi-platform collection. +ES-DE (EmulationStation Desktop Edition) is a frontend for browsing and launching games from your multi-platform collection. It's officially supported on Linux, macOS, Windows and Android but can also be used on BSD Unix and the Raspberry Pi if you build it yourself from source code. @@ -14,7 +14,7 @@ YouTube:\ https://www.youtube.com/@ES-DE_Frontend Discord:\ -https://discord.gg/EVVX4DqWAP +https://discord.gg/42jqqNcHf9 The goal of this project is to make a high quality frontend that is easy to use, requires minimal setup and configuration, looks nice, and is available across a wide range of operating systems. @@ -29,7 +29,7 @@ https://gitlab.com/es-de/themes/themes-list Visit https://es-de.org to download the latest ES-DE release or go to the [package registry](https://gitlab.com/es-de/emulationstation-de/-/packages) where you can also find most previous releases. -The Android port of ES-DE is a paid app, which you can get on [Patreon](https://www.patreon.com/es_de). +The Android port of ES-DE is a paid app, which you can get on [Patreon](https://www.patreon.com/es_de) or on the [Samsung Galaxy Store](https://galaxystore.samsung.com/detail/org.es_de.frontend.galaxy). If you're using a Raspberry Pi or if you run FreeBSD, NetBSD or OpenBSD then you need to compile from source code as no prebuilt packages are provided for these platforms. A detailed build guide is available in [INSTALL.md](INSTALL.md). diff --git a/ROADMAP.md b/ROADMAP.md index ff73d1b85..e37644476 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -5,14 +5,13 @@ ES-DE is developed using an agile methodology so which features to include per r A more detailed breakdown can be found on the [Kanban](https://gitlab.com/es-de/emulationstation-de/-/boards) board, and for previous releases the [Changelog](CHANGELOG.md) contains all relevant details. **General functionality** -* (Android) Support for running native Android apps * RetroAchievements.org integration * "Time played" counter per game, similar to how it works in Steam * Bulk metadata editor * Background music * Controller button mappings from inside ES-DE (similar to pad2key in Batocera) * Localization/multi-language support -* Auto-import tools for Steam, Lutris etc. +* Auto-import tools for Android apps, Steam, Lutris etc. **User interface** @@ -36,6 +35,4 @@ A more detailed breakdown can be found on the [Kanban](https://gitlab.com/es-de/ * Proper audio mixer * Improved multi-threading * Reduced amount of gamelist reloading to retain cached textures and improve overall performance -* Replace the built-in Unicode functions and lookup tables with those of the ICU library -* Text shaping support using the HarfBuzz library * Replacement for the abandoned FreeImage library diff --git a/THEMES-DEV.md b/THEMES-DEV.md index d179e3fd8..5287536f0 100644 --- a/THEMES-DEV.md +++ b/THEMES-DEV.md @@ -1523,7 +1523,12 @@ Properties: - This property can only be used when `type` is `horizontal` or `vertical` * `selectedItemMargins` - type: NORMALIZED_PAIR - By default items are evenly spaced across the carousel area, but this property makes it possible to define margins (extra space or less space) around the currently selected item. The first value in the pair defines the margin to the left of the item if it's a horizontal carousel or above the item if it's a vertical carousel, and the second value of the pair sets the right or bottom margin for the selected item depending on the carousel orientation. - - Minimum value per margin is `-1` and maximum value per margin is `1` + - Minimum value per axis is `-1` and maximum value per axis is `1` + - Default is `0 0` + - This property can only be used when `type` is `horizontal` or `vertical` +* `selectedItemOffset` - type: NORMALIZED_PAIR + - Offsets the selected item. The first value of the pair is the horizontal offset and the second value is the vertical offset. Applied after all other positioning calculations. + - Minimum value per axis is `-1` and maximum value per axis is `1` - Default is `0 0` - This property can only be used when `type` is `horizontal` or `vertical` * `itemSize` - type: NORMALIZED_PAIR @@ -1554,6 +1559,11 @@ Properties: - Controls how to fit the image within the aspect ratio defined by `itemSize`. To scale and preserve the original aspect ratio, set the value to `contain`, to stretch/squash the image to fill the entire area set it to `fill` and to crop the image to fill the entire area set it to `cover` - Valid values are `contain`, `fill` or `cover` - Default is `contain` +* `imageCropPos` - type: NORMALIZED_PAIR + - If the image has been cropped by setting `imageFit` to `cover` then this property makes it possible to position the texture within the cropped area. The first value of the pair is the X axis where `0` means align to the left and `1` means align to the right, and the second value of the pair is the Y axis where `0` means align on top and `1` means align at the bottom. Any arbitrary floating point values between 0 and 1 can be used for granular positioning. + - Minimum value per axis is `0` and maximum value per axis is `1` + - Default is `0.5 0.5` (texture is centered) + - This property can only be used if `imageFit` has been set to `cover` * `imageInterpolation` - type: STRING - Interpolation method to use when scaling and rotating images. Nearest neighbor (`nearest`) preserves sharp pixels and linear filtering (`linear`) makes the image smoother. This property has limited effect on scalable vector graphics (SVG) images unless rotation is applied. - Valid values are `nearest` or `linear` @@ -1828,6 +1838,11 @@ Properties: - Controls how to fit the image within the aspect ratio defined by `itemSize`. To scale and preserve the original aspect ratio, set the value to `contain`, to stretch/squash the image to fill the entire area set it to `fill` and to crop the image to fill the entire area set it to `cover` - Valid values are `contain`, `fill` or `cover` - Default is `contain` +* `imageCropPos` - type: NORMALIZED_PAIR + - If the image has been cropped by setting `imageFit` to `cover` then this property makes it possible to position the texture within the cropped area. The first value of the pair is the X axis where `0` means align to the left and `1` means align to the right, and the second value of the pair is the Y axis where `0` means align on top and `1` means align at the bottom. Any arbitrary floating point values between 0 and 1 can be used for granular positioning. + - Minimum value per axis is `0` and maximum value per axis is `1` + - Default is `0.5 0.5` (texture is centered) + - This property can only be used if `imageFit` has been set to `cover` * `imageInterpolation` - type: STRING - Interpolation method to use when scaling images. Nearest neighbor (`nearest`) preserves sharp pixels and linear filtering (`linear`) makes the image smoother. This property has limited effect on scalable vector graphics (SVG) images. - Valid values are `nearest` or `linear` @@ -2056,6 +2071,16 @@ Properties: * `selectedSecondaryBackgroundColor` - type: COLOR - Background color of the highlighted entry for the secondary entry type. This follows the sizing of the selector bar and is expanded downwards so you'll probably want to adjust its position using `selectorVerticalOffset` if you have defined a custom selector height using `selectorHeight` - Default is the same value as `selectedBackgroundColor` +* `selectedBackgroundMargins` - type: NORMALIZED_PAIR + - Adds margins to the selected text background, assuming it has a color set. The first value of the pair is the left margin and the second value is the right margin, which means it's possible to set these margins completely independently. Margins are applied after all other positioning and sizing calculations and they are rendered outside the text debug rectangle boundaries. + - Minimum value per axis is `0` and maximum value per axis is `0.5` + - Default is `0 0` + - This property can only be used if `selectedBackgroundColor` or `selectedSecondaryBackgroundColor` has a value defined. +* `selectedBackgroundCornerRadius` - type: FLOAT + - Setting this property higher than zero applies rounded corners to the text background, assuming it has a color set. The radius is a percentage of the screen width. Note that the maximum allowed value is quite arbitrary as the renderer will in practice limit the maximum roundness so it can never go beyond half the text background height. It means that setting this property sufficiently high will produce perfectly rounded sides for the text background. You normally want to combine this property with `selectedBackgroundMargins` to add some extra margins. + - Minimum value is `0` and maximum value is `0.5` + - Default is `0` (corners are not rounded) + - This property can only be used if `selectedBackgroundColor` or `selectedSecondaryBackgroundColor` has a value defined. * `textHorizontalScrolling` - type: BOOLEAN - If this property is enabled then text that does not fit within the element width (minus margins) will scroll horizontally. If the property is disabled, the text will instead be truncated with an ellipsis (...). Using this property will automatically convert all line breaks to spaces so that a single line of text is always displayed. - Valid values are `vertical` or `horizontal` @@ -2152,8 +2177,13 @@ Properties: - The image will be resized as large as possible so that it fits within this size while maintaining its aspect ratio. Use this instead of `size` when you don't know what kind of image you're using so it doesn't get grossly oversized on one axis. This property takes precedence over `cropSize` if that has also been defined. - Minimum value per axis is `0.001` and maximum value per axis is `3` * `cropSize` - type: NORMALIZED_PAIR - - The image will be resized and cropped to the exact size defined by this property while maintaining its aspect ratio. The crop is always applied centered. + - The image will be resized and cropped to the exact size defined by this property while maintaining its aspect ratio. The crop is always applied centered unless `cropPos` has been set. - Minimum value per axis is `0.001` and maximum value per axis is `3` +* `cropPos` - type: NORMALIZED_PAIR + - If the image has been cropped using `cropSize` then this property makes it possible to position the texture within the cropped area. The first value of the pair is the X axis where `0` means align to the left and `1` means align to the right, and the second value of the pair is the Y axis where `0` means align on top and `1` means align at the bottom. Any arbitrary floating point values between 0 and 1 can be used for granular positioning. + - Minimum value per axis is `0` and maximum value per axis is `1` + - Default is `0.5 0.5` (texture is centered) + - This property can only be used if `cropSize` is used. * `origin` - type: NORMALIZED_PAIR - Where on the element `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the element exactly in the middle of the screen. If the position and size attributes are themeable, origin is implied. - Minimum value per axis is `0` and maximum value per axis is `1` @@ -2286,8 +2316,13 @@ Properties: - The static image and video will be resized as large as possible so that they fit within this size while maintaining their aspect ratios. Use this instead of `size` when you don't know what kind of video you're using so it doesn't get grossly oversized on one axis. This property takes precedence over `cropSize` if that has also been defined. - Minimum value per axis is `0.01` and maximum value per axis is `2` * `cropSize` - type: NORMALIZED_PAIR - - The static image and video will be resized and cropped to the exact size defined by this property while maintaining their aspect ratios. The crop is always applied centered. Can't be combined with the `scanlines` property. + - The static image and video will be resized and cropped to the exact size defined by this property while maintaining their aspect ratios. The crop is always applied centered unless `cropPos` has been set. Can't be combined with the `scanlines` property. - Minimum value per axis is `0.01` and maximum value per axis is `2` +* `cropPos` - type: NORMALIZED_PAIR + - If the static image and video has been cropped using `cropSize` then this property makes it possible to position the texture within the cropped area. The first value of the pair is the X axis where `0` means align to the left and `1` means align to the right, and the second value of the pair is the Y axis where `0` means align on top and `1` means align at the bottom. Any arbitrary floating point values between 0 and 1 can be used for granular positioning. + - Minimum value per axis is `0` and maximum value per axis is `1` + - Default is `0.5 0.5` (texture is centered) + - This property can only be used if `cropSize` is used. * `origin` - type: NORMALIZED_PAIR - Where on the element `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the element exactly in the middle of the screen. If the position and size attributes are themeable, origin is implied. - Minimum value per axis is `0` and maximum value per axis is `1` @@ -2815,6 +2850,16 @@ Properties: - Default is `000000FF` * `backgroundColor` - type: COLOR - Default is `00000000` +* `backgroundMargins` - type: NORMALIZED_PAIR + - Adds margins to the text background, assuming it has a color set. The first value of the pair is the left margin and the second value is the right margin, which means it's possible to set these margins completely independently. Margins are applied after all other positioning and sizing calculations and they are rendered outside the text debug rectangle boundaries. + - Minimum value per axis is `0` and maximum value per axis is `0.5` + - Default is `0 0` + - This property can only be used if `backgroundColor` has a value defined. +* `backgroundCornerRadius` - type: FLOAT + - Setting this property higher than zero applies rounded corners to the text background, assuming it has a color set. The radius is a percentage of the screen width. Note that the maximum allowed value is quite arbitrary as the renderer will in practice limit the maximum roundness so it can never go beyond half the text background height. It means that setting this property sufficiently high will produce perfectly rounded sides for the text background. You normally want to combine this property with `backgroundMargins` to add some extra margins. + - Minimum value is `0` and maximum value is `0.5` + - Default is `0` (corners are not rounded) + - This property can only be used if `backgroundColor` has a value defined. * `letterCase` - type: STRING - Valid values are `none`, `uppercase`, `lowercase` or `capitalize` - Default is `none` (original letter case is retained) diff --git a/THEMES.md b/THEMES.md index 40c03a4e9..2fda4d5dd 100644 --- a/THEMES.md +++ b/THEMES.md @@ -1521,7 +1521,12 @@ Properties: - This property can only be used when `type` is `horizontal` or `vertical` * `selectedItemMargins` - type: NORMALIZED_PAIR - By default items are evenly spaced across the carousel area, but this property makes it possible to define margins (extra space or less space) around the currently selected item. The first value in the pair defines the margin to the left of the item if it's a horizontal carousel or above the item if it's a vertical carousel, and the second value of the pair sets the right or bottom margin for the selected item depending on the carousel orientation. - - Minimum value per margin is `-1` and maximum value per margin is `1` + - Minimum value per axis is `-1` and maximum value per axis is `1` + - Default is `0 0` + - This property can only be used when `type` is `horizontal` or `vertical` +* `selectedItemOffset` - type: NORMALIZED_PAIR + - Offsets the selected item. The first value of the pair is the horizontal offset and the second value is the vertical offset. Applied after all other positioning calculations. + - Minimum value per axis is `-1` and maximum value per axis is `1` - Default is `0 0` - This property can only be used when `type` is `horizontal` or `vertical` * `itemSize` - type: NORMALIZED_PAIR @@ -1552,6 +1557,11 @@ Properties: - Controls how to fit the image within the aspect ratio defined by `itemSize`. To scale and preserve the original aspect ratio, set the value to `contain`, to stretch/squash the image to fill the entire area set it to `fill` and to crop the image to fill the entire area set it to `cover` - Valid values are `contain`, `fill` or `cover` - Default is `contain` +* `imageCropPos` - type: NORMALIZED_PAIR + - If the image has been cropped by setting `imageFit` to `cover` then this property makes it possible to position the texture within the cropped area. The first value of the pair is the X axis where `0` means align to the left and `1` means align to the right, and the second value of the pair is the Y axis where `0` means align on top and `1` means align at the bottom. Any arbitrary floating point values between 0 and 1 can be used for granular positioning. + - Minimum value per axis is `0` and maximum value per axis is `1` + - Default is `0.5 0.5` (texture is centered) + - This property can only be used if `imageFit` has been set to `cover` * `imageInterpolation` - type: STRING - Interpolation method to use when scaling and rotating images. Nearest neighbor (`nearest`) preserves sharp pixels and linear filtering (`linear`) makes the image smoother. This property has limited effect on scalable vector graphics (SVG) images unless rotation is applied. - Valid values are `nearest` or `linear` @@ -1826,6 +1836,11 @@ Properties: - Controls how to fit the image within the aspect ratio defined by `itemSize`. To scale and preserve the original aspect ratio, set the value to `contain`, to stretch/squash the image to fill the entire area set it to `fill` and to crop the image to fill the entire area set it to `cover` - Valid values are `contain`, `fill` or `cover` - Default is `contain` +* `imageCropPos` - type: NORMALIZED_PAIR + - If the image has been cropped by setting `imageFit` to `cover` then this property makes it possible to position the texture within the cropped area. The first value of the pair is the X axis where `0` means align to the left and `1` means align to the right, and the second value of the pair is the Y axis where `0` means align on top and `1` means align at the bottom. Any arbitrary floating point values between 0 and 1 can be used for granular positioning. + - Minimum value per axis is `0` and maximum value per axis is `1` + - Default is `0.5 0.5` (texture is centered) + - This property can only be used if `imageFit` has been set to `cover` * `imageInterpolation` - type: STRING - Interpolation method to use when scaling images. Nearest neighbor (`nearest`) preserves sharp pixels and linear filtering (`linear`) makes the image smoother. This property has limited effect on scalable vector graphics (SVG) images. - Valid values are `nearest` or `linear` @@ -2054,6 +2069,16 @@ Properties: * `selectedSecondaryBackgroundColor` - type: COLOR - Background color of the highlighted entry for the secondary entry type. This follows the sizing of the selector bar and is expanded downwards so you'll probably want to adjust its position using `selectorVerticalOffset` if you have defined a custom selector height using `selectorHeight` - Default is the same value as `selectedBackgroundColor` +* `selectedBackgroundMargins` - type: NORMALIZED_PAIR + - Adds margins to the selected text background, assuming it has a color set. The first value of the pair is the left margin and the second value is the right margin, which means it's possible to set these margins completely independently. Margins are applied after all other positioning and sizing calculations and they are rendered outside the text debug rectangle boundaries. + - Minimum value per axis is `0` and maximum value per axis is `0.5` + - Default is `0 0` + - This property can only be used if `selectedBackgroundColor` or `selectedSecondaryBackgroundColor` has a value defined. +* `selectedBackgroundCornerRadius` - type: FLOAT + - Setting this property higher than zero applies rounded corners to the text background, assuming it has a color set. The radius is a percentage of the screen width. Note that the maximum allowed value is quite arbitrary as the renderer will in practice limit the maximum roundness so it can never go beyond half the text background height. It means that setting this property sufficiently high will produce perfectly rounded sides for the text background. You normally want to combine this property with `selectedBackgroundMargins` to add some extra margins. + - Minimum value is `0` and maximum value is `0.5` + - Default is `0` (corners are not rounded) + - This property can only be used if `selectedBackgroundColor` or `selectedSecondaryBackgroundColor` has a value defined. * `textHorizontalScrolling` - type: BOOLEAN - If this property is enabled then text that does not fit within the element width (minus margins) will scroll horizontally. If the property is disabled, the text will instead be truncated with an ellipsis (...). Using this property will automatically convert all line breaks to spaces so that a single line of text is always displayed. - Valid values are `vertical` or `horizontal` @@ -2150,8 +2175,13 @@ Properties: - The image will be resized as large as possible so that it fits within this size while maintaining its aspect ratio. Use this instead of `size` when you don't know what kind of image you're using so it doesn't get grossly oversized on one axis. This property takes precedence over `cropSize` if that has also been defined. - Minimum value per axis is `0.001` and maximum value per axis is `3` * `cropSize` - type: NORMALIZED_PAIR - - The image will be resized and cropped to the exact size defined by this property while maintaining its aspect ratio. The crop is always applied centered. + - The image will be resized and cropped to the exact size defined by this property while maintaining its aspect ratio. The crop is always applied centered unless `cropPos` has been set. - Minimum value per axis is `0.001` and maximum value per axis is `3` +* `cropPos` - type: NORMALIZED_PAIR + - If the image has been cropped using `cropSize` then this property makes it possible to position the texture within the cropped area. The first value of the pair is the X axis where `0` means align to the left and `1` means align to the right, and the second value of the pair is the Y axis where `0` means align on top and `1` means align at the bottom. Any arbitrary floating point values between 0 and 1 can be used for granular positioning. + - Minimum value per axis is `0` and maximum value per axis is `1` + - Default is `0.5 0.5` (texture is centered) + - This property can only be used if `cropSize` is used. * `origin` - type: NORMALIZED_PAIR - Where on the element `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the element exactly in the middle of the screen. If the position and size attributes are themeable, origin is implied. - Minimum value per axis is `0` and maximum value per axis is `1` @@ -2284,8 +2314,13 @@ Properties: - The static image and video will be resized as large as possible so that they fit within this size while maintaining their aspect ratios. Use this instead of `size` when you don't know what kind of video you're using so it doesn't get grossly oversized on one axis. This property takes precedence over `cropSize` if that has also been defined. - Minimum value per axis is `0.01` and maximum value per axis is `2` * `cropSize` - type: NORMALIZED_PAIR - - The static image and video will be resized and cropped to the exact size defined by this property while maintaining their aspect ratios. The crop is always applied centered. Can't be combined with the `scanlines` property. + - The static image and video will be resized and cropped to the exact size defined by this property while maintaining their aspect ratios. The crop is always applied centered unless `cropPos` has been set. Can't be combined with the `scanlines` property. - Minimum value per axis is `0.01` and maximum value per axis is `2` +* `cropPos` - type: NORMALIZED_PAIR + - If the static image and video has been cropped using `cropSize` then this property makes it possible to position the texture within the cropped area. The first value of the pair is the X axis where `0` means align to the left and `1` means align to the right, and the second value of the pair is the Y axis where `0` means align on top and `1` means align at the bottom. Any arbitrary floating point values between 0 and 1 can be used for granular positioning. + - Minimum value per axis is `0` and maximum value per axis is `1` + - Default is `0.5 0.5` (texture is centered) + - This property can only be used if `cropSize` is used. * `origin` - type: NORMALIZED_PAIR - Where on the element `pos` refers to. For example, an origin of `0.5 0.5` and a `pos` of `0.5 0.5` would place the element exactly in the middle of the screen. If the position and size attributes are themeable, origin is implied. - Minimum value per axis is `0` and maximum value per axis is `1` @@ -2813,6 +2848,16 @@ Properties: - Default is `000000FF` * `backgroundColor` - type: COLOR - Default is `00000000` +* `backgroundMargins` - type: NORMALIZED_PAIR + - Adds margins to the text background, assuming it has a color set. The first value of the pair is the left margin and the second value is the right margin, which means it's possible to set these margins completely independently. Margins are applied after all other positioning and sizing calculations and they are rendered outside the text debug rectangle boundaries. + - Minimum value per axis is `0` and maximum value per axis is `0.5` + - Default is `0 0` + - This property can only be used if `backgroundColor` has a value defined. +* `backgroundCornerRadius` - type: FLOAT + - Setting this property higher than zero applies rounded corners to the text background, assuming it has a color set. The radius is a percentage of the screen width. Note that the maximum allowed value is quite arbitrary as the renderer will in practice limit the maximum roundness so it can never go beyond half the text background height. It means that setting this property sufficiently high will produce perfectly rounded sides for the text background. You normally want to combine this property with `backgroundMargins` to add some extra margins. + - Minimum value is `0` and maximum value is `0.5` + - Default is `0` (corners are not rounded) + - This property can only be used if `backgroundColor` has a value defined. * `letterCase` - type: STRING - Valid values are `none`, `uppercase`, `lowercase` or `capitalize` - Default is `none` (original letter case is retained) diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index 0564c525e..24648a3f1 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -302,9 +302,9 @@ The Android port of ES-DE is quite different than the other versions, so it has ## Specific notes for Raspberry Pi -ES-DE on the Raspberry Pi requires a desktop environment, or more specifically a window manager and a sound server (like PulseAudio or PipeWire). There are no plans to add support for direct hardware access to the framebuffer or to ALSA. If you want to use your Raspberry Pi as an appliance, take a look at [RetroPie](https://retropie.org.uk), [Recalbox](https://www.recalbox.com) or [Batocera](https://batocera.org) instead. +By default ES-DE on the Raspberry Pi requires a desktop environment to run, or more specifically a window manager and a sound server (like PulseAudio or PipeWire). It is however possible to use KMS/direct framebuffer access if the DEINIT_ON_LAUNCH flag is used when building ES-DE, as documented in the _Building on Unix_ section of the [INSTALL-DEV.md](INSTALL-DEV.md#building-on-unix) document. -Also note that there are no prebuilt packages for the Raspberry Pi, so you will need to compile ES-DE yourself. Fortunately this is easy to do and the process is documented [here](INSTALL-DEV.md#building-on-unix). +Note that there are no prebuilt packages for the Raspberry Pi, so you will need to compile ES-DE yourself. Fortunately this is easy to do and the process is documented [here](INSTALL-DEV.md#building-on-unix). The Raspberry Pi 4/400 is the minimum recommended version and earlier boards have not been tested. @@ -679,6 +679,7 @@ The following emulators are supported in AppImage format when using the bundled | macintosh | Basilisk II | BasiliskII*.AppImage | | macintosh | SheepShaver | SheepShaver*.AppImage | | n3ds | Citra | citra-qt*.AppImage | +| n3ds | Lime3DS | lime3ds-gui*.AppImage | | n3ds | Panda3DS | Alber-*.AppImage | | n64/n64dd | Rosalie's Mupen GUI | RMG*.AppImage | | ngage/symbian | EKA2L1 | EKA2L1*.AppImage | @@ -761,10 +762,13 @@ The following manually downloaded emulators are supported when using the bundled | System name | Emulator | Filename | | :-------------------------------------- | :--------------- | :-------------------------------- | +| adam/colecovision | ColEm | colem/colem | | amiga/amiga1200/amiga600/amigacd32/cdtv | Amiberry | amiberry/amiberry | +| amstradcpc | ACE-DL | AceDL/AceDL | | amstradcpc | CPCemu | cpcemu/cpcemu | | apple2 | LinApple | linapple/linapple | | atari2600 | Gopher2600 | gopher2600/gopher2600_linux_amd64 | +| atarijaguar/atarijaguarcd | BigPEmu | bigpemu/bigpemu | | coco/dragon32/tanodragon | XRoar | xroar/xroar | | daphne | Hypseus Singe | hypseus-singe/hypseus.bin | | dreamcast | Redream | redream/redream | @@ -879,6 +883,7 @@ The following Windows emulators are supported, and the setup for most of these i | atarijaguar/atarijaguarcd | BigPEmu | BigPEmu/BigPEmu.exe | | famicom/nes | 3dSen | 3dSen/3dSen.exe | | model2 | Model 2 Emulator | m2emulator/EMULATOR.EXE | +| x68000 | XM6 Pro-68k | XM6 Pro-68k/XM6.exe | | xbox360 | xenia | xenia/xenia.exe | | xbox360 | xenia | xenia/xenia_canary.exe | @@ -1100,6 +1105,8 @@ Not all systems are as simple to setup as what was described in the previous sec ### Apple II +On Android only MAME4droid 2024 is supported for the apple2 system. Make sure you've read the _MAME4droid 2024 and MAME4droid_ section of the [Android documentation](ANDROID-DEV.md#mame4droid-2024-and-mame4droid) and that your ROM directory is configured correctly inside the emulator. + On Linux the default emulator for the apple2 system is [LinApple](http://linapple.sourceforge.net) and on Windows it's [AppleWin](https://github.com/AppleWin/AppleWin). Additionally the alternative emulators [Mednafen](https://mednafen.github.io) and [MAME](https://www.mamedev.org) standalone are supported. On macOS there is a port of AppleWin available named [Mariani](https://github.com/sh95014/AppleWin) but it appears broken at the moment as it does not accept any command line parameters. So instead only Mednafen and MAME are supported on macOS. Depending on which Linux operating system you're using, LinApple may not be readily available and you may have to build it from source code or obtain a binary from somewhere on the Internet. See the [Using manually downloaded emulators on Linux](USERGUIDE-DEV.md#using-manually-downloaded-emulators-on-linux) section of this guide for more details on where it needs to be installed. If you're using an OS with access to the AUR, such as Arch or Manjaro, then LinApple is available there. Note that you need to use the _linapple-git_ package as the regular _linapple_ package does not work correctly. @@ -1121,7 +1128,9 @@ https://docs.mamedev.org/usingmame/defaultkeys.html ### Apple IIGS -The Apple IIGS computer is emulated using MAME. There is a dedicated emulator available for this system named [GSplus](https://apple2.gs/plus) but it appears to not be able to parse command line parameters correctly so disk images can't be supplied to it. As such it's currently unsupported. +The Apple IIGS computer is emulated using MAME. On desktop operating systems there is a dedicated emulator available for this system named [GSplus](https://apple2.gs/plus) but it appears to not be able to parse command line parameters correctly so disk images can't be supplied to it. As such it's currently unsupported. + +If using Android then make sure you've read the _MAME4droid 2024 and MAME4droid_ section of the [Android documentation](ANDROID-DEV.md#mame4droid-2024-and-mame4droid) and that your ROM directory is configured correctly inside the emulator. In order to run Apple IIGS games in MAME, you need to place the following ROM file in the ~/ROMs/apple2gs directory: ``` @@ -1133,7 +1142,9 @@ https://docs.mamedev.org/usingmame/defaultkeys.html ### Apple Macintosh -There are two approaches to emulating these computers, the first is using games booted from diskettes and the second is to setup an entire OS installation as a hard disk image and run the games from there. The first approach is only applicable for older models like the Macintosh SE and Macintosh Plus (i.e. the era prior to hard drives becoming prevalent), and the second approach can be used for more modern models. +On Android only MAME4droid 2024 is supported for the macintosh system. Make sure you've read the _MAME4droid 2024 and MAME4droid_ section of the [Android documentation](ANDROID-DEV.md#mame4droid-2024-and-mame4droid) and that your ROM directory is configured correctly inside the emulator. + +There are two approaches to emulating these computers, the first is using games booted from diskettes and the second is to setup an entire OS installation as a hard disk image and run the games from there (this latter approach is not supported on Android). The first approach is only applicable for older models like the Macintosh SE and Macintosh Plus (i.e. the era prior to hard drives becoming prevalent), and the second approach can be used for more modern models. **Method 1, booting from diskette images** @@ -1144,6 +1155,8 @@ Booting from diskettes is the default approach and MAME standalone is used for t * MAME Mac Plus Bootable (Standalone) * MAME Mac Plus Boot Disk (Standalone) +Note that on Android these emulator entries are named slightly differently as the MAME4droid 2024 emulator is used on this operating system. + To use these you need the MAME files adbmodem.zip, macse.zip and macplus.zip placed in the `~/ROMs/macintosh/` directory. The _Bootable_ entries are straightforward, these are games that are self-contained on a single diskette and that can simply be booted as-is. The _Boot Disk_ entries are games that can't be booted directly but instead require a separate boot diskette. To run these you need to place a disk image named `boot.dsk` together with the game files and ES-DE will then insert this into the first floppy drive on game launch and place the game diskette in the second floppy drive. Once Mac OS has started up you can then start the game from inside the operating system. Basically any bootable diskette can be used as long as it's 400K or 800K in size and runs a Mac OS release compatible with the game you intend to play. For example the _System Tools_ diskette from the System 6.0.8 installation media works fine for this purpose. @@ -1191,6 +1204,8 @@ Note that scraper support is currently very poor for this system, so you may nee ### Arcade and Neo Geo +If using Android then make sure you've read the _MAME4droid 2024 and MAME4droid_ section of the [Android documentation](ANDROID-DEV.md#mame4droid-2024-and-mame4droid) and that your ROM directory is configured correctly inside the emulator. + **General** For all the supported MAME variants as well as Final Burn Alpha/FinalBurn Neo and Neo Geo, single file archives should be used. These files should retain the MAME software list filenames as ES-DE ships with MAME lookup tables, meaning the software list names are automatically expanded to full game names. @@ -1278,7 +1293,7 @@ ln -s /usr/local/Cellar/mame/0.248/share/mame/hash ~/.mame/ # on x86/Int These systems are generally straightforward to setup. For regular Atari Jaguar games you'll have a single ROM or zip archive per game that you place in the root of the `~/ROMs/atarijaguar` system directory. For Atari Jaguar CD games it's recommended to go for the .cdi format and you place these directly in the root of the `~/ROMs/atarijaguarcd` directory. -The only emulator that can run Atari Jaguar CD games is [BigPEmL](https://www.richwhitehouse.com/jaguar/) and while it's officially only available for the Windows operating system it's still possible to run it on Linux. To accomplish this you need to run it via the Wine (or Proton) translation layer. +The only emulator that can run Atari Jaguar CD games is [BigPEmu](https://www.richwhitehouse.com/jaguar/) which is available for Linux and Windows. On Linux you can also run the Windows release of this emulator, should you want to. To accomplish this you need to run it via the Wine (or Proton) translation layer. How to setup Wine is covered in the [Running Windows emulators on Linux using Wine or Proton](USERGUIDE-DEV.md#running-windows-emulators-on-linux-using-wine-or-proton) section. @@ -1297,7 +1312,7 @@ That's basically it, for the atarijaguar system just make sure to select _BigPEm There are many settings in Wine that may affect compatibility, performance etc. but covering all that is beyond the scope of this guide. -In addition to the above instructions there's an unofficial YouTube video available on how to setup BigPEmu with ES-DE:\ +In addition to the above instructions there's an unofficial YouTube video available on how to setup the Windows release of BigPEmu with ES-DE:\ https://www.youtube.com/watch?v=GuPAjgICc-4 ### Commodore Amiga and CDTV @@ -1390,6 +1405,8 @@ https://github.com/BlitterStudio/amiberry/wiki/Kickstart-ROMs-%28BIOS%29 ### Console Arcade Systems +Note that on Android specifically some of the arcade boards mentioned below are not supported as there are simply no suitable emulators available. + The _consolearcade_ system is intended for the various arcade boards that were based on home console platforms. For many of the older systems MAME can be used for emulation, but some of the more modern systems require the use of other emulators, which is precisely what is provided by this system. The following arcade boards have been considered: @@ -1509,13 +1526,13 @@ Setup for the standalone EasyRPG Player is identical with the exception that run ### Fujitsu FM Towns -This system is emulated using MAME or Tsugaru. +This system is emulated using MAME or Tsugaru on desktop operating systems and MAME4droid 2024 on Android. + +If using Android then make sure you've read the _MAME4droid 2024 and MAME4droid_ section of the [Android documentation](ANDROID-DEV.md#mame4droid-2024-and-mame4droid) and that your ROM directory is configured correctly inside the emulator. **MAME** -As of the time of writing MAME has somehow preliminary FM Towns support, but it seems to work well enough for most games and support will likely improve over time. - -Only CD-ROM games are supported and the .chd format is recommended. It's not adviced to go for game files using MAME software list names as these can't be scraped by either ScreenScraper or TheGames DB. It's instead better to use files with full game names. +When using MAME only CD-ROM games are supported and the .chd format is recommended. It's not adviced to go for game files using MAME software list names as these can't be scraped by either ScreenScraper or TheGames DB. It's instead better to use files with full game names. You also need the `fmtowns.zip` BIOS archive placed in ~/ROMs/fmtowns/ for the games to run. @@ -1582,6 +1599,8 @@ To map the controller to the keyboard and to set a 33 MHz CPU speed, the file co ### LaserDisc Games +Note that on Android the Hypseus Singe emulator is not available. However the setup for MAME (using MAME4droid 2024) and DirkSimple still applies. If using Android also make sure you've read the _MAME4droid 2024 and MAME4droid_ section of the [Android documentation](ANDROID-DEV.md#mame4droid-2024-and-mame4droid) and that your ROM directory is configured correctly inside the emulator. + There are three ways to run LaserDisc games in ES-DE, via MAME, via Hypseus Singe or via the DirkSimple RetroArch core. There are also two separate systems available, _daphne_ and _laserdisc_. The latter is recommended as the _daphne_ system is mostly existing for legacy reasons and may be removed in a future ES-DE release. The configuration for these two systems is identical as they are essentially clones. At the time of writing MAME and Hypseus Singe are mostly mutually exlusive as MAME tends to primarily support the games that Hypseus Singe doesn't support. In the future this is likely to change with MAME getting support for more LaserDisc games. @@ -2338,6 +2357,8 @@ On Linux it's also possible to launch AppImages directly without having to call ### ScummVM +Note that the Android release of ScummVM standalone differs from the releases for desktop operating systems in that all games need to be installed in the app before they can be launched from ES-DE. There are some very specific configuration steps that need to be followed to get this to work, but they are thoroughly described in the ScummVM user interface the first time you launch the app, and there is also a built-in help system that you can peruse. Apart from that the setup is identical to the other platforms. + ScummVM overlaps a bit with DOS when it comes to the logic of setting it up. It's recommended to keep games in separate folders, so if you have a game distributed as a ZIP file, uncompress it to its own directory. Although ScummVM supports launching of .exe files, ES-DE is currently not configured as such and it's instead recommended to create a .scummvm file in each game directory and launch that. This makes for a cleaner setup as you don't need to run game configuration utilities like INSTALL.EXE or SETUP.EXE directly as you would with DOSBox. Rather the game configuration is done within the ScummVM emulator. @@ -2570,7 +2591,15 @@ Finally there's an emulator entry named _EKA2L1 [Custom device] (Standalone)_ wh ### Tandy Color Computer -This computer (which is confusingly also known as _TRS-80 Color Computer_ even though it's a completely different machine than the _TRS-80_) is emulated using the [XRoar](http://www.6809.org.uk/xroar) emulator. +This computer (which is confusingly also known as _TRS-80 Color Computer_ even though it's a completely different machine than the _TRS-80_) is emulated using MAME standalone or the [XRoar](http://www.6809.org.uk/xroar) emulator. + +**MAME** + +To use MAME you simply need the `coco.zip` and `coco_fdc.zip` BIOS files in the ROMs/coco directory and your games should work. Note however that only cartridge and tape files can be used with MAME (via two separate emulator entries), and not diskettes. + +When running tape files there is quite some loading time involved, so it's recommended to fast-forward through the loading process. How this is done differs per platform but usually it's via the page down key on Linux and via the insert key on Windows. For this to work you may first need to disable UI controls in MAME via the scroll lock key. For MAME4droid 2024 you can hold the Start and A buttons to fast-forward. For additional details about this functionality refer to the MAME documentation. + +**XRoar** This emulator is available for Linux, macOS and Windows, although on Linux you may need to build it from source code depending on which distribution you're using. Refer to the XRoar website for more information. If you manually download or build the emulator yourself then see the [Using manually downloaded emulators on Linux](USERGUIDE-DEV.md#using-manually-downloaded-emulators-on-linux) section of this guide for more details on where you need to install it. @@ -2619,11 +2648,17 @@ Here's what a complete setup could look like: ### Tangerine Computer Systems Oric -These games are executed using the Oricutron emulator which is readily available on Windows but quite problematic to get hold on for Linux and macOS. +These games can be run using either MAME standalone or the Oricutron emulator. The latter is readily available on Windows but quite problematic to get hold on for Linux and macOS. It's also not available for Android at all. -Although there is a macOS build available at the Oricutron [download page](http://www.petergordon.org.uk/oricutron/) this seems to not work properly, or it's unclear how it should be used. As such this system is unsupported on macOS, but the configuration entries still exist in the bundled es_find_rules.xml and es_systems.xml files so if you manage to get the emulator to run, ES-DE should work with these games. +**MAME** -Likewise on Linux there seems to be no binaries available for download so you need to build the emulator yourself. As multiple files like images and roms are needed to run this emulator, it's easiest to download and extract the Windows version which contains all this data and then build from source code and simply copy over the `Oricutron` binary (example below using Ubuntu): +To use MAME you simply need the `oric1.zip` BIOS file in the ROMs/oric directory and your games should work. Note however that only tape files can be used with MAME, and not diskettes. To run diskette files you will need to use Oricutron instead. + +When running tape files there is quite some loading time involved, so it's recommended to fast-forward through the loading process. How this is done differs per platform but usually it's via the page down key on Linux and via the insert key on Windows. For this to work you may first need to disable UI controls in MAME via the scroll lock key. For MAME4droid 2024 you can hold the Start and A buttons to fast-forward. For additional details about this functionality refer to the MAME documentation. + +**Oricutron** + +Although there is a macOS build available at the Oricutron [download page](http://www.petergordon.org.uk/oricutron/) this seems to not work properly, or it's unclear how it should be used. Likewise on Linux there seems to be no binaries available for download so you need to build the emulator yourself. As multiple files like images and roms are needed to run this emulator, it's easiest to download and extract the Windows version which contains all this data and then build from source code and simply copy over the `Oricutron` binary (example below using Ubuntu): ``` mkdir -p ~/Applications/oricutron @@ -2644,6 +2679,8 @@ Once the emulator is up and running there is not really much else to consider, s The TI-99 is emulated via MAME, and only the standalone release of this emulator is supported. Unfortunately it seems as if the Homebrew build on macOS is broken as no TI-99 games can be launched. As such this system is unsupported on macOS, but the configuration entries still exist in the bundled es_find_rules.xml and es_systems.xml files so if you manage to get the emulator to run, ES-DE should work with these games. +If using Android then make sure you've read the _MAME4droid 2024 and MAME4droid_ section of the [Android documentation](ANDROID-DEV.md#mame4droid-2024-and-mame4droid) and that your ROM directory is configured correctly inside the emulator. + Emulating the TI-99 can be quite confusing as games are available in various incompatible formats, and most emulators are particular when it comes to what file types they support. In ES-DE only cartridge-based games are supported, so you can't for instance play games distributed as floppy disk images. And only games packaged for MAME using the MAME software list name standard can be used. This includes .7z and .zip files as well as .rpk cartridge images. It's strongly recommended to go for the MAME TI-99 ROM set that consists only of .zip files as these have the highest chance of working correctly. In addition to the game files you need the `ti99_4a.zip` archive which contains the TI-99 system ROMs. This file has to be placed in the root of the `~/ROMs/ti99` directory. @@ -2655,6 +2692,19 @@ Scraping can also be a bit challenging as MAME software list names are used and ### Visual Pinball +**Android** + +Unfortunately there does not seem to be a way to launch individual Visual Pinball tables from ES-DE on Android, instead the Visual Pinball user interface will open on game launch and you need to manually start your table from there. This means tables need to be installed upfront in Visual Pinball and .vpinball dummy files should be added to the `ROMs/vpinball` directory. These will then appear as individual games inside ES-DE and you can add metadata to them, scrape them etc. + +Here's an example setup: + +``` +/storage/emulated/0/ROMs/vpinball/Apollo 13.vpinball +/storage/emulated/0/ROMs/vpinball/Judge Dredd.vpinball +``` + +**Linux, macOS and Windows** + The pinball simulator Visual Pinball can be a bit tricky to setup as it supports a wide range of tables. Some of these require [PinMAME](https://github.com/vpinball/pinmame) and some don't. Some simulated tables are older electromechnical design and some are of more modern solid state designs. Some are recreations of real physical games and some are purely virtual and don't exist in physical form. In many cases there is not a definitive release for a table and you may need to assemble various files to get to a fully working game. As pinball games is a complex topic it will only be covered briefly here, refer to the official Visual Pinball [documentation](https://github.com/vpinball/vpinball/blob/standalone/standalone/README.md) for more details. @@ -3550,6 +3600,10 @@ MAME software list names for all arcade systems are automatically expanded to th The window manager desktop composition can adversely affect the framerate of ES-DE, especially on weaker graphics cards and when running at higher resolution. As such the desktop compositor can be disabled when running ES-DE, although the window manager has to be configured to allow applications to do this for the option to have any effect. Note that enabling this setting can cause problems with some graphics drivers so if you experience strange flickering and similar, then make sure to keep this setting disabled. In case of such issues, make sure that the emulator is also not blocking the composition (e.g. RetroArch has a corresponding option). This setting has no effect if using Wayland, it only applies to X11/Xorg. +**Back button/back swipe exits app** _(Android only)_ + +Whether to exit the application when swiping back or pressing the back button. + **Debug mode** Enabling this option will output detailed debug messages to es_log.txt and it also makes it possible to use the debug overlays and shortcuts which are documented in more depth in [INSTALL-DEV.md](INSTALL-DEV.md#debug-mode). Enabling this setting is equivalent to passing the --debug command line option. Make sure to only enable this setting when you really need it as it will slow down the application and cause the es_log.txt file to grow substantially. When passing the --debug command line option this setting will be grayed out in the menu. @@ -3712,11 +3766,11 @@ This is the name that will be shown when browsing the gamelist. If no sortname h **Sortname** _(files only)_ -This entry makes it possible to change the sorting of a game without having to change its name. For instance it can be used to sort _Mille Miglia_ as _1000 Miglia_ or _The Punisher_ as _Punisher, The_. Note that the _Jump to..._ quick selector on the gamelist options menu will base its index on the first character of the sortname if it exists for a game, which could be slightly confusing in some instances when quick jumping in the gamelist. The _sortname_ entry also affects custom collections, although for these it's possible to override the value as described below. This entry only applies if the sort order has been set to _Name, ascending_ or _Name, descending_. +This entry makes it possible to change the sorting of a game without having to change its name. For instance it can be used to sort _Mille Miglia_ as _1000 Miglia_ or _The Punisher_ as _Punisher, The_. Note that the _Jump to..._ quick selector on the gamelist options menu will base its index on the first character of the sortname if it exists for a game, which could be slightly confusing in some instances when quick jumping in the gamelist. The _sortname_ entry also affects custom collections, although for these it's possible to override the value as described below. This entry only applies if the sort order has been set to _Name, ascending_ or _Name, descending_. All sorting is in lexicographic order. **Custom collections sortname** _(only visible when editing a game from within a custom collection)_ -This entry works exactly like _sortname_ but will only affect the sorting for custom collections, meaning the normal system gamelists and the automatic collections (_All games, Favorites_ and _Last played_) will not be affected by this value. If there is both a _sortname_ and a _custom collections sortname_ defined, the latter will take precedence. This also means that the _Jump to..._ quick selector will use the custom collections sortname for its letter index even if there is a different value defined for the regular sortname field. Note that _custom collections sortname_ is completely optional and is only intended for overriding the regular _sortname_ field. Also note that it will affect all custom collections where the game is present; it's not possible to set a different value per collection. +This entry works exactly like _sortname_ but will only affect the sorting for custom collections, meaning the normal system gamelists and the automatic collections (_All games, Favorites_ and _Last played_) will not be affected by this value. If there is both a _sortname_ and a _custom collections sortname_ defined, the latter will take precedence. This also means that the _Jump to..._ quick selector will use the custom collections sortname for its letter index even if there is a different value defined for the regular sortname field. Note that _custom collections sortname_ is completely optional and is only intended for overriding the regular _sortname_ field. Also note that it will affect all custom collections where the game is present; it's not possible to set a different value per collection. All sorting is in lexicographic order. **Description** @@ -3975,18 +4029,20 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | System name | Full name | Default emulator | Alternative emulators | Needs BIOS | Recommended game setup | | :-------------------- | :--------------------------------------------- | :-------------------------------- | :-------------------------------- | :----------- | :----------------------------------- | | 3do | 3DO Interactive Multiplayer | Opera | | Yes | | -| adam | Coleco Adam | MAME [Diskette] **(Standalone)** | MAME [Tape] **(Standalone)**,
MAME [Cartridge] **(Standalone)**,
MAME [Software list] **(Standalone)** | Yes | | +| adam | Coleco Adam | MAME [Diskette] **(Standalone)** | MAME [Tape] **(Standalone)**,
MAME [Cartridge] **(Standalone)**,
MAME [Software list] **(Standalone)**,
ColEm **(Standalone)** [LW] | Yes | | | ags | Adventure Game Studio Game Engine | _Shortcut or script_ | | No | | | amiga | Commodore Amiga | PUAE | PUAE 2021,
FS-UAE **(Standalone)**,
Amiberry **(Standalone)** [LM] | Yes | See the specific _Commodore Amiga and CDTV_ section elsewhere in this guide | | amiga1200 | Commodore Amiga 1200 | PUAE | PUAE 2021,
FS-UAE **(Standalone)**,
Amiberry **(Standalone)** [LM] | Yes | See the specific _Commodore Amiga and CDTV_ section elsewhere in this guide | | amiga600 | Commodore Amiga 600 | PUAE | PUAE 2021,
FS-UAE **(Standalone)**,
Amiberry **(Standalone)** [LM] | Yes | See the specific _Commodore Amiga and CDTV_ section elsewhere in this guide | | amigacd32 | Commodore Amiga CD32 | PUAE | PUAE 2021,
FS-UAE **(Standalone)**,
Amiberry **(Standalone)** [LM] | Yes | See the specific _Commodore Amiga and CDTV_ section elsewhere in this guide | -| amstradcpc | Amstrad CPC | Caprice32 | CrocoDS,
CPCemu **(Standalone)**,
MAME **(Standalone)** | Yes for MAME | Single archive or disk file | -| android | Google Android | BlueStacks **(Standalone)** [W] | | No | Shortcut (.lnk) file | +| amstradcpc | Amstrad CPC | Caprice32 | CrocoDS,
CPCemu **(Standalone)**,
ACE-DL **(Standalone)**,
MAME **(Standalone)** | Yes for MAME | Single archive or disk file | +| android | Google Android | BlueStacks **(Standalone)** [W] | | No | Shortcut (.lnk) file | +| androidapps | Android Apps | _Placeholder_ | | | | +| androidgames | Android Games | _Placeholder_ | | | | | apple2 | Apple II | LinApple **(Standalone)** [L],
Mednafen **(Standalone)** [M],
AppleWin **(Standalone)** [W] | Mednafen **(Standalone)** [LW],
MAME - Current,
MAME **(Standalone)** | Yes for Mednafen and MAME | See the specific _Apple II_ section elsewhere in this guide | | apple2gs | Apple IIGS | MAME - Current | MAME **(Standalone)** | Yes | See the specific _Apple IIGS_ section elsewhere in this guide | | arcade | Arcade | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
Geolith,
Flycast,
Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Kronos [LW],
Model 2 Emulator **(Standalone)** [W],
Model 2 Emulator [Suspend ES-DE] **(Standalone)** [W],
Supermodel **(Standalone)** [LW],
_Shortcut or script_ | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | -| arcadia | Emerson Arcadia 2001 | MAME - Current | MAME **(Standalone)** | No | Single archive or ROM file | +| arcadia | Emerson Arcadia 2001 | MAME - Current | MAME **(Standalone)**,
WinArcadia **(Standalone)** | No | Single archive or ROM file | | archimedes | Acorn Archimedes | MAME [Model A440/1] **(Standalone)** | MAME [Model A3000] **(Standalone)**,
MAME [Model A310] **(Standalone)**,
MAME [Model A540] **(Standalone)** | Yes | | | arduboy | Arduboy Miniature Game System | Arduous | | No | Single archive or .hex file | | astrocde | Bally Astrocade | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file | @@ -3994,8 +4050,8 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | atari5200 | Atari 5200 | a5200 | Atari800,
Atari800 **(Standalone)**,
Altirra **(Standalone)** [W] | Yes except for Altirra | Single archive or ROM file | | atari7800 | Atari 7800 ProSystem | ProSystem | MAME - Current,
MAME **(Standalone)** | Yes | Single archive or ROM file | | atari800 | Atari 800 | Atari800 | Atari800 **(Standalone)**,
Altirra **(Standalone)** [W] | Yes except for Altirra | | -| atarijaguar | Atari Jaguar | Virtual Jaguar | BigPEmu **(Standalone)** [W],
BigPEmu **(Wine)** [L],
BigPEmu **(Proton)** [L],
MAME **(Standalone)** | Yes for MAME | See the specific _Atari Jaguar and Atari Jaguar CD_ section elsewhere in this guide | -| atarijaguarcd | Atari Jaguar CD | BigPEmu **(Standalone)** [W],
BigPEmu **(Wine)** [L] | BigPEmu **(Proton)** [L] | No | See the specific _Atari Jaguar and Atari Jaguar CD_ section elsewhere in this guide | +| atarijaguar | Atari Jaguar | Virtual Jaguar | BigPEmu **(Standalone)** [LW],
BigPEmu **(Wine)** [L],
BigPEmu **(Proton)** [L],
MAME **(Standalone)** | Yes for MAME | See the specific _Atari Jaguar and Atari Jaguar CD_ section elsewhere in this guide | +| atarijaguarcd | Atari Jaguar CD | BigPEmu **(Standalone)** [LW] | BigPEmu **(Wine)** [L],
BigPEmu **(Proton)** [L] | No | See the specific _Atari Jaguar and Atari Jaguar CD_ section elsewhere in this guide | | atarilynx | Atari Lynx | Handy | Beetle Lynx,
Mednafen **(Standalone)** | No | Single archive or ROM file | | atarist | Atari ST [also STE and Falcon] | Hatari | Hatari **(Standalone)** | Yes | Single archive or image file for single-diskette games, .m3u playlist for multi-diskette games | | atarixe | Atari XE | Atari800 | Atari800 **(Standalone)**,
Altirra **(Standalone)** [W] | Yes except for Altirra | | @@ -4006,8 +4062,8 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | cdtv | Commodore CDTV | PUAE | PUAE 2021,
FS-UAE **(Standalone)**,
Amiberry **(Standalone)** [LM] | Yes | See the specific _Commodore Amiga and CDTV_ section elsewhere in this guide | | chailove | ChaiLove Game Engine | ChaiLove | | | | | channelf | Fairchild Channel F | FreeChaF | MAME - Current,
MAME **(Standalone)** | Yes | Single archive or ROM file | -| coco | Tandy Color Computer | XRoar CoCo 2 NTSC **(Standalone)** | XRoar CoCo 2 PAL **(Standalone)** | Yes | See the specific _Tandy Color Computer_ section elsewhere in this guide | -| colecovision | Coleco ColecoVision | blueMSX | Gearcoleco,
openMSX **(Standalone)**,
ares **(Standalone)** | Yes | Single archive or ROM file | +| coco | Tandy Color Computer | XRoar CoCo 2 NTSC **(Standalone)** | XRoar CoCo 2 PAL **(Standalone)**,
MAME [Cartridge] **(Standalone)**,
MAME [Tape] **(Standalone)** | Yes | See the specific _Tandy Color Computer_ section elsewhere in this guide | +| colecovision | Coleco ColecoVision | blueMSX | Gearcoleco,
openMSX **(Standalone)**,
ares **(Standalone)**,
ColEm **(Standalone)** [LW] | Yes | Single archive or ROM file | | consolearcade | Console Arcade Systems | MAME - Current | MAME **(Standalone)**,
Flycast,
Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Kronos [LW],
Mednafen [Sega Saturn] **(Standalone)**,
Play! **(Standalone)**,
RPCS3 Shortcut **(Standalone)**,
Triforce **(Standalone)** [LW],
xemu **(Standalone)**,
Cxbx-Reloaded **(Standalone)** [W],
_Shortcut or script_ | Depends | See the specific _Console Arcade Systems_ section elsewhere in this guide | | cps | Capcom Play System | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
FB Alpha 2012 CPS-1,
FB Alpha 2012 CPS-2,
FB Alpha 2012 CPS-3 | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | | cps1 | Capcom Play System I | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
FB Alpha 2012 CPS-1 | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | @@ -4073,7 +4129,7 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | naomi | Sega NAOMI | Flycast | Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Demul **(Standalone)** [W] | Yes | Single archive file + .chd file in subdirectory if GD-ROM game | | naomi2 | Sega NAOMI 2 | Flycast | Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Demul **(Standalone)** [W] | Yes | Single archive file + .chd file in subdirectory if GD-ROM game | | naomigd | Sega NAOMI GD-ROM | Flycast | Flycast **(Standalone)**,
Flycast Dojo **(Standalone)** | Yes | Single archive file + .chd file in subdirectory if GD-ROM game | -| n3ds | Nintendo 3DS | Citra [LW],
Citra **(Standalone)** [M] | Citra 2018 [LW],
Citra **(Standalone)** [LW],
Panda3DS **(Standalone)** | No | Single ROM file | +| n3ds | Nintendo 3DS | Citra [LW],
Citra **(Standalone)** [M] | Citra 2018 [LW],
Citra **(Standalone)** [LW],
Lime3DS **(Standalone)**,
Panda3DS **(Standalone)** | No | Single ROM file | | n64 | Nintendo 64 | Mupen64Plus-Next | Mupen64Plus **(Standalone)**,
ParaLLEl N64,
simple64 **(Standalone)** [LW],
Rosalie's Mupen GUI **(Standalone)** [LW],
Project64 **(Standalone)** [W],
ares **(Standalone)**,
sixtyforce **(Standalone)** [M] | No | Single archive or ROM file | | n64dd | Nintendo 64DD | ParaLLEl N64 [LW],
Mupen64Plus-Next [M] | Mupen64Plus-Next [LW],
ParaLLEl N64 [M],
Rosalie's Mupen GUI **(Standalone)** [LW],
ares **(Standalone)** | Yes | See the specific _Nintendo 64DD_ section elsewhere in this guide | | nds | Nintendo DS | melonDS DS | melonDS @,
melonDS **(Standalone)**,
DeSmuME,
DeSmuME 2015,
DeSmuME **(Standalone)** [L],
SkyEmu **(Standalone)** | No | Single archive or ROM file | @@ -4086,7 +4142,7 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | ngpc | SNK Neo Geo Pocket Color | Beetle NeoPop | RACE,
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | | odyssey2 | Magnavox Odyssey 2 | O2EM | MAME - Current,
MAME **(Standalone)** | Yes | Single archive or ROM file | | openbor | OpenBOR Game Engine | OpenBOR **(Standalone)** [LW] | | No | See the specific _OpenBOR_ section elsewhere in this guide | -| oric | Tangerine Computer Systems Oric | Oricutron **(Standalone)** [LW] | | | See the specific _Tangerine Computer Systems Oric_ section elsewhere in this guide | +| oric | Tangerine Computer Systems Oric | MAME **(Standalone)** | Oricutron **(Standalone)** | Yes | See the specific _Tangerine Computer Systems Oric_ section elsewhere in this guide | | palm | Palm OS | Mu | | | | | pc | IBM PC | DOSBox-Pure | DOSBox-Core,
DOSBox-SVN,
DOSBox-X **(Standalone)**,
DOSBox Staging **(Standalone)** | No | See the specific _DOS / PC_ section elsewhere in this guide | | pc88 | NEC PC-8800 Series | QUASI88 | QUASI88 **(Standalone)** | Yes | | @@ -4129,7 +4185,7 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | sufami | Bandai SuFami Turbo | Snes9x - Current | Snes9x 2010,
Snes9x 2005 Plus,
Snes9x **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
bsnes **(Standalone)** [LW],
ares **(Standalone)** | | | | supergrafx | NEC SuperGrafx | Beetle SuperGrafx | Beetle PCE,
Mednafen **(Standalone)**,
Mesen **(Standalone)** [LW],
ares **(Standalone)** | No | Single archive or ROM file | | supervision | Watara Supervision | Potator | MAME - Current,
MAME **(Standalone)** | No | Single archive or ROM file | -| supracan | Funtech Super A'Can | MAME - Current | MAME **(Standalone)** | Yes/No | Single archive or ROM file. To make MAME start these games create an empty file named internal_68k.bin and zip it into supracan.zip | +| supracan | Funtech Super A'Can | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file. You need a supracan.zip archive that contains a valid internal_68k.bin file and an empty file named umc6650.bin | | switch | Nintendo Switch | Ryujinx **(Standalone)** | | Yes | | | symbian | Symbian | EKA2L1 [Nokia N-Gage] **(Standalone)** | EKA2L1 [Nokia N70] **(Standalone)**,
EKA2L1 [Nokia N97] **(Standalone)**,
EKA2L1 [Custom device] **(Standalone)** | Yes | See the specific _Symbian and Nokia N-Gage_ section elsewhere in this guide | | tanodragon | Tano Dragon | XRoar **(Standalone)** | | Yes | See the specific _Dragon 32 and Tano Dragon_ section elsewhere in this guide | @@ -4157,10 +4213,10 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | wonderswan | Bandai WonderSwan | Beetle Cygne | Mednafen **(Standalone)**,
ares **(Standalone)**,
ares [Benesse Pocket Challenge V2] **(Standalone)** | No | Single archive or ROM file | | wonderswancolor | Bandai WonderSwan Color | Beetle Cygne | Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | | x1 | Sharp X1 | X Millennium | MAME [Diskette] **(Standalone)**,
MAME [Tape] **(Standalone)** | Yes for MAME | Single archive or diskette/tape file | -| x68000 | Sharp X68000 | PX68k | MAME **(Standalone)** | Yes | | +| x68000 | Sharp X68000 | PX68k | MAME **(Standalone)**,
XM6 Pro-68k **(Standalone)** [W],
XM6 Pro-68k **(Wine)** [L],
XM6 Pro-68k **(Proton)** [L] | Yes except for XM6 Pro-68k | | | xbox | Microsoft Xbox | xemu **(Standalone)** | Cxbx-Reloaded **(Standalone)** [W] | Yes for xemu | Single .iso file for xemu or unpacked .iso directory for Cxbx-Reloaded | | xbox360 | Microsoft Xbox 360 | xenia **(Standalone)** [W],
xenia **(Wine)** [L] | xenia **(Proton)** [L],
_Shortcut or script_ [L] | No | See the specific _Microsoft Xbox 360_ section elsewhere in this guide | -| zmachine | Infocom Z-machine | Gargoyle **(Standalone)** | | No | | +| zmachine | Infocom Z-machine | MojoZork | Gargoyle **(Standalone)** | No | | | zx81 | Sinclair ZX81 | EightyOne | | | | | zxnext | Sinclair ZX Spectrum Next | #CSpect **(Standalone)** [LW],
ZEsarUX **(Standalone)** [M] | ZEsarUX **(Standalone)** [LW] | No | In separate folder interpreted as a file | | zxspectrum | Sinclair ZX Spectrum | Fuse | Fuse **(Standalone)** | No | Single archive or ROM file | diff --git a/USERGUIDE.md b/USERGUIDE.md index a0c314d5e..d4a32bf8f 100644 --- a/USERGUIDE.md +++ b/USERGUIDE.md @@ -300,9 +300,9 @@ The Android port of ES-DE is quite different than the other versions, so it has ## Specific notes for Raspberry Pi -ES-DE on the Raspberry Pi requires a desktop environment, or more specifically a window manager and a sound server (like PulseAudio or PipeWire). There are no plans to add support for direct hardware access to the framebuffer or to ALSA. If you want to use your Raspberry Pi as an appliance, take a look at [RetroPie](https://retropie.org.uk), [Recalbox](https://www.recalbox.com) or [Batocera](https://batocera.org) instead. +By default ES-DE on the Raspberry Pi requires a desktop environment to run, or more specifically a window manager and a sound server (like PulseAudio or PipeWire). It is however possible to use KMS/direct framebuffer access if the DEINIT_ON_LAUNCH flag is used when building ES-DE, as documented in the _Building on Unix_ section of the [INSTALL.md](INSTALL.md#building-on-unix) document. -Also note that there are no prebuilt packages for the Raspberry Pi, so you will need to compile ES-DE yourself. Fortunately this is easy to do and the process is documented [here](INSTALL.md#building-on-unix). +Note that there are no prebuilt packages for the Raspberry Pi, so you will need to compile ES-DE yourself. Fortunately this is easy to do and the process is documented [here](INSTALL.md#building-on-unix). The Raspberry Pi 4/400 is the minimum recommended version and earlier boards have not been tested. @@ -677,6 +677,7 @@ The following emulators are supported in AppImage format when using the bundled | macintosh | Basilisk II | BasiliskII*.AppImage | | macintosh | SheepShaver | SheepShaver*.AppImage | | n3ds | Citra | citra-qt*.AppImage | +| n3ds | Lime3DS | lime3ds-gui*.AppImage | | n3ds | Panda3DS | Alber-*.AppImage | | n64/n64dd | Rosalie's Mupen GUI | RMG*.AppImage | | ngage/symbian | EKA2L1 | EKA2L1*.AppImage | @@ -759,10 +760,13 @@ The following manually downloaded emulators are supported when using the bundled | System name | Emulator | Filename | | :-------------------------------------- | :--------------- | :-------------------------------- | +| adam/colecovision | ColEm | colem/colem | | amiga/amiga1200/amiga600/amigacd32/cdtv | Amiberry | amiberry/amiberry | +| amstradcpc | ACE-DL | AceDL/AceDL | | amstradcpc | CPCemu | cpcemu/cpcemu | | apple2 | LinApple | linapple/linapple | | atari2600 | Gopher2600 | gopher2600/gopher2600_linux_amd64 | +| atarijaguar/atarijaguarcd | BigPEmu | bigpemu/bigpemu | | coco/dragon32/tanodragon | XRoar | xroar/xroar | | daphne | Hypseus Singe | hypseus-singe/hypseus.bin | | dreamcast | Redream | redream/redream | @@ -877,6 +881,7 @@ The following Windows emulators are supported, and the setup for most of these i | atarijaguar/atarijaguarcd | BigPEmu | BigPEmu/BigPEmu.exe | | famicom/nes | 3dSen | 3dSen/3dSen.exe | | model2 | Model 2 Emulator | m2emulator/EMULATOR.EXE | +| x68000 | XM6 Pro-68k | XM6 Pro-68k/XM6.exe | | xbox360 | xenia | xenia/xenia.exe | | xbox360 | xenia | xenia/xenia_canary.exe | @@ -1098,6 +1103,8 @@ Not all systems are as simple to setup as what was described in the previous sec ### Apple II +On Android only MAME4droid 2024 is supported for the apple2 system. Make sure you've read the _MAME4droid 2024 and MAME4droid_ section of the [Android documentation](ANDROID.md#mame4droid-2024-and-mame4droid) and that your ROM directory is configured correctly inside the emulator. + On Linux the default emulator for the apple2 system is [LinApple](http://linapple.sourceforge.net) and on Windows it's [AppleWin](https://github.com/AppleWin/AppleWin). Additionally the alternative emulators [Mednafen](https://mednafen.github.io) and [MAME](https://www.mamedev.org) standalone are supported. On macOS there is a port of AppleWin available named [Mariani](https://github.com/sh95014/AppleWin) but it appears broken at the moment as it does not accept any command line parameters. So instead only Mednafen and MAME are supported on macOS. Depending on which Linux operating system you're using, LinApple may not be readily available and you may have to build it from source code or obtain a binary from somewhere on the Internet. See the [Using manually downloaded emulators on Linux](USERGUIDE.md#using-manually-downloaded-emulators-on-linux) section of this guide for more details on where it needs to be installed. If you're using an OS with access to the AUR, such as Arch or Manjaro, then LinApple is available there. Note that you need to use the _linapple-git_ package as the regular _linapple_ package does not work correctly. @@ -1119,7 +1126,9 @@ https://docs.mamedev.org/usingmame/defaultkeys.html ### Apple IIGS -The Apple IIGS computer is emulated using MAME. There is a dedicated emulator available for this system named [GSplus](https://apple2.gs/plus) but it appears to not be able to parse command line parameters correctly so disk images can't be supplied to it. As such it's currently unsupported. +The Apple IIGS computer is emulated using MAME. On desktop operating systems there is a dedicated emulator available for this system named [GSplus](https://apple2.gs/plus) but it appears to not be able to parse command line parameters correctly so disk images can't be supplied to it. As such it's currently unsupported. + +If using Android then make sure you've read the _MAME4droid 2024 and MAME4droid_ section of the [Android documentation](ANDROID.md#mame4droid-2024-and-mame4droid) and that your ROM directory is configured correctly inside the emulator. In order to run Apple IIGS games in MAME, you need to place the following ROM file in the ~/ROMs/apple2gs directory: ``` @@ -1131,7 +1140,9 @@ https://docs.mamedev.org/usingmame/defaultkeys.html ### Apple Macintosh -There are two approaches to emulating these computers, the first is using games booted from diskettes and the second is to setup an entire OS installation as a hard disk image and run the games from there. The first approach is only applicable for older models like the Macintosh SE and Macintosh Plus (i.e. the era prior to hard drives becoming prevalent), and the second approach can be used for more modern models. +On Android only MAME4droid 2024 is supported for the macintosh system. Make sure you've read the _MAME4droid 2024 and MAME4droid_ section of the [Android documentation](ANDROID.md#mame4droid-2024-and-mame4droid) and that your ROM directory is configured correctly inside the emulator. + +There are two approaches to emulating these computers, the first is using games booted from diskettes and the second is to setup an entire OS installation as a hard disk image and run the games from there (this latter approach is not supported on Android). The first approach is only applicable for older models like the Macintosh SE and Macintosh Plus (i.e. the era prior to hard drives becoming prevalent), and the second approach can be used for more modern models. **Method 1, booting from diskette images** @@ -1142,6 +1153,8 @@ Booting from diskettes is the default approach and MAME standalone is used for t * MAME Mac Plus Bootable (Standalone) * MAME Mac Plus Boot Disk (Standalone) +Note that on Android these emulator entries are named slightly differently as the MAME4droid 2024 emulator is used on this operating system. + To use these you need the MAME files adbmodem.zip, macse.zip and macplus.zip placed in the `~/ROMs/macintosh/` directory. The _Bootable_ entries are straightforward, these are games that are self-contained on a single diskette and that can simply be booted as-is. The _Boot Disk_ entries are games that can't be booted directly but instead require a separate boot diskette. To run these you need to place a disk image named `boot.dsk` together with the game files and ES-DE will then insert this into the first floppy drive on game launch and place the game diskette in the second floppy drive. Once Mac OS has started up you can then start the game from inside the operating system. Basically any bootable diskette can be used as long as it's 400K or 800K in size and runs a Mac OS release compatible with the game you intend to play. For example the _System Tools_ diskette from the System 6.0.8 installation media works fine for this purpose. @@ -1189,6 +1202,8 @@ Note that scraper support is currently very poor for this system, so you may nee ### Arcade and Neo Geo +If using Android then make sure you've read the _MAME4droid 2024 and MAME4droid_ section of the [Android documentation](ANDROID.md#mame4droid-2024-and-mame4droid) and that your ROM directory is configured correctly inside the emulator. + **General** For all the supported MAME variants as well as Final Burn Alpha/FinalBurn Neo and Neo Geo, single file archives should be used. These files should retain the MAME software list filenames as ES-DE ships with MAME lookup tables, meaning the software list names are automatically expanded to full game names. @@ -1276,7 +1291,7 @@ ln -s /usr/local/Cellar/mame/0.248/share/mame/hash ~/.mame/ # on x86/Int These systems are generally straightforward to setup. For regular Atari Jaguar games you'll have a single ROM or zip archive per game that you place in the root of the `~/ROMs/atarijaguar` system directory. For Atari Jaguar CD games it's recommended to go for the .cdi format and you place these directly in the root of the `~/ROMs/atarijaguarcd` directory. -The only emulator that can run Atari Jaguar CD games is [BigPEmL](https://www.richwhitehouse.com/jaguar/) and while it's officially only available for the Windows operating system it's still possible to run it on Linux. To accomplish this you need to run it via the Wine (or Proton) translation layer. +The only emulator that can run Atari Jaguar CD games is [BigPEmu](https://www.richwhitehouse.com/jaguar/) which is available for Linux and Windows. On Linux you can also run the Windows release of this emulator, should you want to. To accomplish this you need to run it via the Wine (or Proton) translation layer. How to setup Wine is covered in the [Running Windows emulators on Linux using Wine or Proton](USERGUIDE.md#running-windows-emulators-on-linux-using-wine-or-proton) section. @@ -1295,7 +1310,7 @@ That's basically it, for the atarijaguar system just make sure to select _BigPEm There are many settings in Wine that may affect compatibility, performance etc. but covering all that is beyond the scope of this guide. -In addition to the above instructions there's an unofficial YouTube video available on how to setup BigPEmu with ES-DE:\ +In addition to the above instructions there's an unofficial YouTube video available on how to setup the Windows release of BigPEmu with ES-DE:\ https://www.youtube.com/watch?v=GuPAjgICc-4 ### Commodore Amiga and CDTV @@ -1388,6 +1403,8 @@ https://github.com/BlitterStudio/amiberry/wiki/Kickstart-ROMs-%28BIOS%29 ### Console Arcade Systems +Note that on Android specifically some of the arcade boards mentioned below are not supported as there are simply no suitable emulators available. + The _consolearcade_ system is intended for the various arcade boards that were based on home console platforms. For many of the older systems MAME can be used for emulation, but some of the more modern systems require the use of other emulators, which is precisely what is provided by this system. The following arcade boards have been considered: @@ -1507,13 +1524,13 @@ Setup for the standalone EasyRPG Player is identical with the exception that run ### Fujitsu FM Towns -This system is emulated using MAME or Tsugaru. +This system is emulated using MAME or Tsugaru on desktop operating systems and MAME4droid 2024 on Android. + +If using Android then make sure you've read the _MAME4droid 2024 and MAME4droid_ section of the [Android documentation](ANDROID.md#mame4droid-2024-and-mame4droid) and that your ROM directory is configured correctly inside the emulator. **MAME** -As of the time of writing MAME has somehow preliminary FM Towns support, but it seems to work well enough for most games and support will likely improve over time. - -Only CD-ROM games are supported and the .chd format is recommended. It's not adviced to go for game files using MAME software list names as these can't be scraped by either ScreenScraper or TheGames DB. It's instead better to use files with full game names. +When using MAME only CD-ROM games are supported and the .chd format is recommended. It's not adviced to go for game files using MAME software list names as these can't be scraped by either ScreenScraper or TheGames DB. It's instead better to use files with full game names. You also need the `fmtowns.zip` BIOS archive placed in ~/ROMs/fmtowns/ for the games to run. @@ -1580,6 +1597,8 @@ To map the controller to the keyboard and to set a 33 MHz CPU speed, the file co ### LaserDisc Games +Note that on Android the Hypseus Singe emulator is not available. However the setup for MAME (using MAME4droid 2024) and DirkSimple still applies. If using Android also make sure you've read the _MAME4droid 2024 and MAME4droid_ section of the [Android documentation](ANDROID.md#mame4droid-2024-and-mame4droid) and that your ROM directory is configured correctly inside the emulator. + There are three ways to run LaserDisc games in ES-DE, via MAME, via Hypseus Singe or via the DirkSimple RetroArch core. There are also two separate systems available, _daphne_ and _laserdisc_. The latter is recommended as the _daphne_ system is mostly existing for legacy reasons and may be removed in a future ES-DE release. The configuration for these two systems is identical as they are essentially clones. At the time of writing MAME and Hypseus Singe are mostly mutually exlusive as MAME tends to primarily support the games that Hypseus Singe doesn't support. In the future this is likely to change with MAME getting support for more LaserDisc games. @@ -2336,6 +2355,8 @@ On Linux it's also possible to launch AppImages directly without having to call ### ScummVM +Note that the Android release of ScummVM standalone differs from the releases for desktop operating systems in that all games need to be installed in the app before they can be launched from ES-DE. There are some very specific configuration steps that need to be followed to get this to work, but they are thoroughly described in the ScummVM user interface the first time you launch the app, and there is also a built-in help system that you can peruse. Apart from that the setup is identical to the other platforms. + ScummVM overlaps a bit with DOS when it comes to the logic of setting it up. It's recommended to keep games in separate folders, so if you have a game distributed as a ZIP file, uncompress it to its own directory. Although ScummVM supports launching of .exe files, ES-DE is currently not configured as such and it's instead recommended to create a .scummvm file in each game directory and launch that. This makes for a cleaner setup as you don't need to run game configuration utilities like INSTALL.EXE or SETUP.EXE directly as you would with DOSBox. Rather the game configuration is done within the ScummVM emulator. @@ -2488,7 +2509,6 @@ Here's an example setup: The EKA2L1 installation should be fairly straightforward, for Linux there is an official AppImage, for macOS there is a DMG installer and for Windows a zip archive release. - After you have the emulator up and running you need to install ROMs for the devices you want to emulate. For the _ngage_ system you want to use the RH-29 ROM, and for the _symbian_ system ES-DE comes preconfigured with emulator entries for the RH-29 (Nokia N-Gage), RM-84 (Nokia N70) and RM-507 (Nokia N97) models. In addition to those there's a custom device entry that is explained in more depth later below. The details of ROM installation and how to setup the emulator is covered by this official YouTube video by the EKA2L1 team: https://www.youtube.com/watch?v=rFUlsSGkRjc&list=PLkrpMo4_xadtJ_Kqvc5BSTSi39ollsAbR @@ -2569,7 +2589,15 @@ Finally there's an emulator entry named _EKA2L1 [Custom device] (Standalone)_ wh ### Tandy Color Computer -This computer (which is confusingly also known as _TRS-80 Color Computer_ even though it's a completely different machine than the _TRS-80_) is emulated using the [XRoar](http://www.6809.org.uk/xroar) emulator. +This computer (which is confusingly also known as _TRS-80 Color Computer_ even though it's a completely different machine than the _TRS-80_) is emulated using MAME standalone or the [XRoar](http://www.6809.org.uk/xroar) emulator. + +**MAME** + +To use MAME you simply need the `coco.zip` and `coco_fdc.zip` BIOS files in the ROMs/coco directory and your games should work. Note however that only cartridge and tape files can be used with MAME (via two separate emulator entries), and not diskettes. + +When running tape files there is quite some loading time involved, so it's recommended to fast-forward through the loading process. How this is done differs per platform but usually it's via the page down key on Linux and via the insert key on Windows. For this to work you may first need to disable UI controls in MAME via the scroll lock key. For MAME4droid 2024 you can hold the Start and A buttons to fast-forward. For additional details about this functionality refer to the MAME documentation. + +**XRoar** This emulator is available for Linux, macOS and Windows, although on Linux you may need to build it from source code depending on which distribution you're using. Refer to the XRoar website for more information. If you manually download or build the emulator yourself then see the [Using manually downloaded emulators on Linux](USERGUIDE.md#using-manually-downloaded-emulators-on-linux) section of this guide for more details on where you need to install it. @@ -2618,11 +2646,17 @@ Here's what a complete setup could look like: ### Tangerine Computer Systems Oric -These games are executed using the Oricutron emulator which is readily available on Windows but quite problematic to get hold on for Linux and macOS. +These games can be run using either MAME standalone or the Oricutron emulator. The latter is readily available on Windows but quite problematic to get hold on for Linux and macOS. It's also not available for Android at all. -Although there is a macOS build available at the Oricutron [download page](http://www.petergordon.org.uk/oricutron/) this seems to not work properly, or it's unclear how it should be used. As such this system is unsupported on macOS, but the configuration entries still exist in the bundled es_find_rules.xml and es_systems.xml files so if you manage to get the emulator to run, ES-DE should work with these games. +**MAME** -Likewise on Linux there seems to be no binaries available for download so you need to build the emulator yourself. As multiple files like images and roms are needed to run this emulator, it's easiest to download and extract the Windows version which contains all this data and then build from source code and simply copy over the `Oricutron` binary (example below using Ubuntu): +To use MAME you simply need the `oric1.zip` BIOS file in the ROMs/oric directory and your games should work. Note however that only tape files can be used with MAME, and not diskettes. To run diskette files you will need to use Oricutron instead. + +When running tape files there is quite some loading time involved, so it's recommended to fast-forward through the loading process. How this is done differs per platform but usually it's via the page down key on Linux and via the insert key on Windows. For this to work you may first need to disable UI controls in MAME via the scroll lock key. For MAME4droid 2024 you can hold the Start and A buttons to fast-forward. For additional details about this functionality refer to the MAME documentation. + +**Oricutron** + +Although there is a macOS build available at the Oricutron [download page](http://www.petergordon.org.uk/oricutron/) this seems to not work properly, or it's unclear how it should be used. Likewise on Linux there seems to be no binaries available for download so you need to build the emulator yourself. As multiple files like images and roms are needed to run this emulator, it's easiest to download and extract the Windows version which contains all this data and then build from source code and simply copy over the `Oricutron` binary (example below using Ubuntu): ``` mkdir -p ~/Applications/oricutron @@ -2643,6 +2677,8 @@ Once the emulator is up and running there is not really much else to consider, s The TI-99 is emulated via MAME, and only the standalone release of this emulator is supported. Unfortunately it seems as if the Homebrew build on macOS is broken as no TI-99 games can be launched. As such this system is unsupported on macOS, but the configuration entries still exist in the bundled es_find_rules.xml and es_systems.xml files so if you manage to get the emulator to run, ES-DE should work with these games. +If using Android then make sure you've read the _MAME4droid 2024 and MAME4droid_ section of the [Android documentation](ANDROID.md#mame4droid-2024-and-mame4droid) and that your ROM directory is configured correctly inside the emulator. + Emulating the TI-99 can be quite confusing as games are available in various incompatible formats, and most emulators are particular when it comes to what file types they support. In ES-DE only cartridge-based games are supported, so you can't for instance play games distributed as floppy disk images. And only games packaged for MAME using the MAME software list name standard can be used. This includes .7z and .zip files as well as .rpk cartridge images. It's strongly recommended to go for the MAME TI-99 ROM set that consists only of .zip files as these have the highest chance of working correctly. In addition to the game files you need the `ti99_4a.zip` archive which contains the TI-99 system ROMs. This file has to be placed in the root of the `~/ROMs/ti99` directory. @@ -2654,6 +2690,19 @@ Scraping can also be a bit challenging as MAME software list names are used and ### Visual Pinball +**Android** + +Unfortunately there does not seem to be a way to launch individual Visual Pinball tables from ES-DE on Android, instead the Visual Pinball user interface will open on game launch and you need to manually start your table from there. This means tables need to be installed upfront in Visual Pinball and .vpinball dummy files should be added to the `ROMs/vpinball` directory. These will then appear as individual games inside ES-DE and you can add metadata to them, scrape them etc. + +Here's an example setup: + +``` +/storage/emulated/0/ROMs/vpinball/Apollo 13.vpinball +/storage/emulated/0/ROMs/vpinball/Judge Dredd.vpinball +``` + +**Linux, macOS and Windows** + The pinball simulator Visual Pinball can be a bit tricky to setup as it supports a wide range of tables. Some of these require [PinMAME](https://github.com/vpinball/pinmame) and some don't. Some simulated tables are older electromechnical design and some are of more modern solid state designs. Some are recreations of real physical games and some are purely virtual and don't exist in physical form. In many cases there is not a definitive release for a table and you may need to assemble various files to get to a fully working game. As pinball games is a complex topic it will only be covered briefly here, refer to the official Visual Pinball [documentation](https://github.com/vpinball/vpinball/blob/standalone/standalone/README.md) for more details. @@ -3549,6 +3598,10 @@ MAME software list names for all arcade systems are automatically expanded to th The window manager desktop composition can adversely affect the framerate of ES-DE, especially on weaker graphics cards and when running at higher resolution. As such the desktop compositor can be disabled when running ES-DE, although the window manager has to be configured to allow applications to do this for the option to have any effect. Note that enabling this setting can cause problems with some graphics drivers so if you experience strange flickering and similar, then make sure to keep this setting disabled. In case of such issues, make sure that the emulator is also not blocking the composition (e.g. RetroArch has a corresponding option). This setting has no effect if using Wayland, it only applies to X11/Xorg. +**Back button/back swipe exits app** _(Android only)_ + +Whether to exit the application when swiping back or pressing the back button. + **Debug mode** Enabling this option will output detailed debug messages to es_log.txt and it also makes it possible to use the debug overlays and shortcuts which are documented in more depth in [INSTALL.md](INSTALL.md#debug-mode). Enabling this setting is equivalent to passing the --debug command line option. Make sure to only enable this setting when you really need it as it will slow down the application and cause the es_log.txt file to grow substantially. When passing the --debug command line option this setting will be grayed out in the menu. @@ -3711,11 +3764,11 @@ This is the name that will be shown when browsing the gamelist. If no sortname h **Sortname** _(files only)_ -This entry makes it possible to change the sorting of a game without having to change its name. For instance it can be used to sort _Mille Miglia_ as _1000 Miglia_ or _The Punisher_ as _Punisher, The_. Note that the _Jump to..._ quick selector on the gamelist options menu will base its index on the first character of the sortname if it exists for a game, which could be slightly confusing in some instances when quick jumping in the gamelist. The _sortname_ entry also affects custom collections, although for these it's possible to override the value as described below. This entry only applies if the sort order has been set to _Name, ascending_ or _Name, descending_. +This entry makes it possible to change the sorting of a game without having to change its name. For instance it can be used to sort _Mille Miglia_ as _1000 Miglia_ or _The Punisher_ as _Punisher, The_. Note that the _Jump to..._ quick selector on the gamelist options menu will base its index on the first character of the sortname if it exists for a game, which could be slightly confusing in some instances when quick jumping in the gamelist. The _sortname_ entry also affects custom collections, although for these it's possible to override the value as described below. This entry only applies if the sort order has been set to _Name, ascending_ or _Name, descending_. All sorting is in lexicographic order. **Custom collections sortname** _(only visible when editing a game from within a custom collection)_ -This entry works exactly like _sortname_ but will only affect the sorting for custom collections, meaning the normal system gamelists and the automatic collections (_All games, Favorites_ and _Last played_) will not be affected by this value. If there is both a _sortname_ and a _custom collections sortname_ defined, the latter will take precedence. This also means that the _Jump to..._ quick selector will use the custom collections sortname for its letter index even if there is a different value defined for the regular sortname field. Note that _custom collections sortname_ is completely optional and is only intended for overriding the regular _sortname_ field. Also note that it will affect all custom collections where the game is present; it's not possible to set a different value per collection. +This entry works exactly like _sortname_ but will only affect the sorting for custom collections, meaning the normal system gamelists and the automatic collections (_All games, Favorites_ and _Last played_) will not be affected by this value. If there is both a _sortname_ and a _custom collections sortname_ defined, the latter will take precedence. This also means that the _Jump to..._ quick selector will use the custom collections sortname for its letter index even if there is a different value defined for the regular sortname field. Note that _custom collections sortname_ is completely optional and is only intended for overriding the regular _sortname_ field. Also note that it will affect all custom collections where the game is present; it's not possible to set a different value per collection. All sorting is in lexicographic order. **Description** @@ -3974,18 +4027,20 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | System name | Full name | Default emulator | Alternative emulators | Needs BIOS | Recommended game setup | | :-------------------- | :--------------------------------------------- | :-------------------------------- | :-------------------------------- | :----------- | :----------------------------------- | | 3do | 3DO Interactive Multiplayer | Opera | | Yes | | -| adam | Coleco Adam | MAME [Diskette] **(Standalone)** | MAME [Tape] **(Standalone)**,
MAME [Cartridge] **(Standalone)**,
MAME [Software list] **(Standalone)** | Yes | | +| adam | Coleco Adam | MAME [Diskette] **(Standalone)** | MAME [Tape] **(Standalone)**,
MAME [Cartridge] **(Standalone)**,
MAME [Software list] **(Standalone)**,
ColEm **(Standalone)** [LW] | Yes | | | ags | Adventure Game Studio Game Engine | _Shortcut or script_ | | No | | | amiga | Commodore Amiga | PUAE | PUAE 2021,
FS-UAE **(Standalone)**,
Amiberry **(Standalone)** [LM] | Yes | See the specific _Commodore Amiga and CDTV_ section elsewhere in this guide | | amiga1200 | Commodore Amiga 1200 | PUAE | PUAE 2021,
FS-UAE **(Standalone)**,
Amiberry **(Standalone)** [LM] | Yes | See the specific _Commodore Amiga and CDTV_ section elsewhere in this guide | | amiga600 | Commodore Amiga 600 | PUAE | PUAE 2021,
FS-UAE **(Standalone)**,
Amiberry **(Standalone)** [LM] | Yes | See the specific _Commodore Amiga and CDTV_ section elsewhere in this guide | | amigacd32 | Commodore Amiga CD32 | PUAE | PUAE 2021,
FS-UAE **(Standalone)**,
Amiberry **(Standalone)** [LM] | Yes | See the specific _Commodore Amiga and CDTV_ section elsewhere in this guide | -| amstradcpc | Amstrad CPC | Caprice32 | CrocoDS,
CPCemu **(Standalone)**,
MAME **(Standalone)** | Yes for MAME | Single archive or disk file | -| android | Google Android | BlueStacks **(Standalone)** [W] | | No | Shortcut (.lnk) file | +| amstradcpc | Amstrad CPC | Caprice32 | CrocoDS,
CPCemu **(Standalone)**,
ACE-DL **(Standalone)**,
MAME **(Standalone)** | Yes for MAME | Single archive or disk file | +| android | Google Android | BlueStacks **(Standalone)** [W] | | No | Shortcut (.lnk) file | +| androidapps | Android Apps | _Placeholder_ | | | | +| androidgames | Android Games | _Placeholder_ | | | | | apple2 | Apple II | LinApple **(Standalone)** [L],
Mednafen **(Standalone)** [M],
AppleWin **(Standalone)** [W] | Mednafen **(Standalone)** [LW],
MAME - Current,
MAME **(Standalone)** | Yes for Mednafen and MAME | See the specific _Apple II_ section elsewhere in this guide | | apple2gs | Apple IIGS | MAME - Current | MAME **(Standalone)** | Yes | See the specific _Apple IIGS_ section elsewhere in this guide | -| arcade | Arcade | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
Geolith,
Flycast,
Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Kronos [LW],
Model 2 Emulator **(Standalone)** [W],
Model 2 Emulator [Suspend ES-DE] **(Standalone)** [W],
Supermodel **(Standalone)** [LW],
_Shortcut or script_ | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | -| arcadia | Emerson Arcadia 2001 | MAME - Current | MAME **(Standalone)** | No | Single archive or ROM file | +| arcade | Arcade | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
Geolith,
Flycast,
Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Kronos [LW],
Model 2 Emulator **(Standalone)** [W],
Model 2 Emulator [Suspend ES-DE] **(Standalone)** [W],
Supermodel **(Standalone)** [LW],
_Shortcut or script_ | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | +| arcadia | Emerson Arcadia 2001 | MAME - Current | MAME **(Standalone)**,
WinArcadia **(Standalone)** | No | Single archive or ROM file | | archimedes | Acorn Archimedes | MAME [Model A440/1] **(Standalone)** | MAME [Model A3000] **(Standalone)**,
MAME [Model A310] **(Standalone)**,
MAME [Model A540] **(Standalone)** | Yes | | | arduboy | Arduboy Miniature Game System | Arduous | | No | Single archive or .hex file | | astrocde | Bally Astrocade | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file | @@ -3993,8 +4048,8 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | atari5200 | Atari 5200 | a5200 | Atari800,
Atari800 **(Standalone)**,
Altirra **(Standalone)** [W] | Yes except for Altirra | Single archive or ROM file | | atari7800 | Atari 7800 ProSystem | ProSystem | MAME - Current,
MAME **(Standalone)** | Yes | Single archive or ROM file | | atari800 | Atari 800 | Atari800 | Atari800 **(Standalone)**,
Altirra **(Standalone)** [W] | Yes except for Altirra | | -| atarijaguar | Atari Jaguar | Virtual Jaguar | BigPEmu **(Standalone)** [W],
BigPEmu **(Wine)** [L],
BigPEmu **(Proton)** [L],
MAME **(Standalone)** | Yes for MAME | See the specific _Atari Jaguar and Atari Jaguar CD_ section elsewhere in this guide | -| atarijaguarcd | Atari Jaguar CD | BigPEmu **(Standalone)** [W],
BigPEmu **(Wine)** [L] | BigPEmu **(Proton)** [L] | No | See the specific _Atari Jaguar and Atari Jaguar CD_ section elsewhere in this guide | +| atarijaguar | Atari Jaguar | Virtual Jaguar | BigPEmu **(Standalone)** [LW],
BigPEmu **(Wine)** [L],
BigPEmu **(Proton)** [L],
MAME **(Standalone)** | Yes for MAME | See the specific _Atari Jaguar and Atari Jaguar CD_ section elsewhere in this guide | +| atarijaguarcd | Atari Jaguar CD | BigPEmu **(Standalone)** [LW] | BigPEmu **(Wine)** [L],
BigPEmu **(Proton)** [L] | No | See the specific _Atari Jaguar and Atari Jaguar CD_ section elsewhere in this guide | | atarilynx | Atari Lynx | Handy | Beetle Lynx,
Mednafen **(Standalone)** | No | Single archive or ROM file | | atarist | Atari ST [also STE and Falcon] | Hatari | Hatari **(Standalone)** | Yes | Single archive or image file for single-diskette games, .m3u playlist for multi-diskette games | | atarixe | Atari XE | Atari800 | Atari800 **(Standalone)**,
Altirra **(Standalone)** [W] | Yes except for Altirra | | @@ -4005,13 +4060,13 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | cdtv | Commodore CDTV | PUAE | PUAE 2021,
FS-UAE **(Standalone)**,
Amiberry **(Standalone)** [LM] | Yes | See the specific _Commodore Amiga and CDTV_ section elsewhere in this guide | | chailove | ChaiLove Game Engine | ChaiLove | | | | | channelf | Fairchild Channel F | FreeChaF | MAME - Current,
MAME **(Standalone)** | Yes | Single archive or ROM file | -| coco | Tandy Color Computer | XRoar CoCo 2 NTSC **(Standalone)** | XRoar CoCo 2 PAL **(Standalone)** | Yes | See the specific _Tandy Color Computer_ section elsewhere in this guide | -| colecovision | Coleco ColecoVision | blueMSX | Gearcoleco,
openMSX **(Standalone)**,
ares **(Standalone)** | Yes | Single archive or ROM file | +| coco | Tandy Color Computer | XRoar CoCo 2 NTSC **(Standalone)** | XRoar CoCo 2 PAL **(Standalone)**,
MAME [Cartridge] **(Standalone)**,
MAME [Tape] **(Standalone)** | Yes | See the specific _Tandy Color Computer_ section elsewhere in this guide | +| colecovision | Coleco ColecoVision | blueMSX | Gearcoleco,
openMSX **(Standalone)**,
ares **(Standalone)**,
ColEm **(Standalone)** [LW] | Yes | Single archive or ROM file | | consolearcade | Console Arcade Systems | MAME - Current | MAME **(Standalone)**,
Flycast,
Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Kronos [LW],
Mednafen [Sega Saturn] **(Standalone)**,
Play! **(Standalone)**,
RPCS3 Shortcut **(Standalone)**,
Triforce **(Standalone)** [LW],
xemu **(Standalone)**,
Cxbx-Reloaded **(Standalone)** [W],
_Shortcut or script_ | Depends | See the specific _Console Arcade Systems_ section elsewhere in this guide | -| cps | Capcom Play System | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
FB Alpha 2012 CPS-1,
FB Alpha 2012 CPS-2,
FB Alpha 2012 CPS-3 | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | -| cps1 | Capcom Play System I | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
FB Alpha 2012 CPS-1 | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | -| cps2 | Capcom Play System II | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
FB Alpha 2012 CPS-2 | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | -| cps3 | Capcom Play System III | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
FB Alpha 2012 CPS-3 | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | +| cps | Capcom Play System | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
FB Alpha 2012 CPS-1,
FB Alpha 2012 CPS-2,
FB Alpha 2012 CPS-3 | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | +| cps1 | Capcom Play System I | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
FB Alpha 2012 CPS-1 | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | +| cps2 | Capcom Play System II | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
FB Alpha 2012 CPS-2 | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | +| cps3 | Capcom Play System III | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
FB Alpha 2012 CPS-3 | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | | crvision | VTech CreatiVision | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file | | daphne | Daphne Arcade LaserDisc Emulator | Hypseus [Daphne] **(Standalone)** | Hypseus [Singe] **(Standalone)**,
MAME - Current,
MAME **(Standalone)**,
DirkSimple | Depends | See the specific _LaserDisc Games_ section elsewhere in this guide | | desktop | Desktop Applications | _Suspend ES-DE_ | _Keep ES-DE running_,
_AppImage (Suspend ES-DE)_ [L],
_AppImage (Keep ES-DE running)_ [L] | No | See the specific _Ports and desktop applications_ section elsewhere in this guide | @@ -4051,7 +4106,7 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | lutris | Lutris Open Gaming Platform | Lutris **(Standalone)** [L] | | No | See the specific _Lutris_ section elsewhere in this guide | | lutro | Lutro Game Engine | Lutro | | | | | macintosh | Apple Macintosh | MAME Mac SE Bootable **(Standalone)** | MAME Mac SE Boot Disk **(Standalone)**,
MAME Mac Plus Bootable **(Standalone)**,
MAME Mac Plus Boot Disk **(Standalone)**,
Basilisk II **(Standalone)**,
SheepShaver **(Standalone)** | Yes | See the specific _Apple Macintosh_ section elsewhere in this guide | -| mame | Multiple Arcade Machine Emulator | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
Geolith,
Flycast,
Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Kronos [LW],
Model 2 Emulator **(Standalone)** [W],
Model 2 Emulator [Suspend ES-DE] **(Standalone)** [W],
Supermodel **(Standalone)** [LW],
_Shortcut or script_ | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | +| mame | Multiple Arcade Machine Emulator | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2003,
MAME 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
Geolith,
Flycast,
Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Kronos [LW],
Model 2 Emulator **(Standalone)** [W],
Model 2 Emulator [Suspend ES-DE] **(Standalone)** [W],
Supermodel **(Standalone)** [LW],
_Shortcut or script_ | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | | mame-advmame | AdvanceMAME | AdvanceMAME **(Standalone)** [LW] | | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | | mastersystem | Sega Master System | Genesis Plus GX | Genesis Plus GX Wide,
SMS Plus GX,
Gearsystem,
PicoDrive,
Mednafen **(Standalone)**,
Mesen **(Standalone)** [LW],
ares **(Standalone)** | No | Single archive or ROM file | | megacd | Sega Mega-CD | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
ares **(Standalone)** | Yes | | @@ -4072,7 +4127,7 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | naomi | Sega NAOMI | Flycast | Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Demul **(Standalone)** [W] | Yes | Single archive file + .chd file in subdirectory if GD-ROM game | | naomi2 | Sega NAOMI 2 | Flycast | Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Demul **(Standalone)** [W] | Yes | Single archive file + .chd file in subdirectory if GD-ROM game | | naomigd | Sega NAOMI GD-ROM | Flycast | Flycast **(Standalone)**,
Flycast Dojo **(Standalone)** | Yes | Single archive file + .chd file in subdirectory if GD-ROM game | -| n3ds | Nintendo 3DS | Citra [LW],
Citra **(Standalone)** [M] | Citra 2018 [LW],
Citra **(Standalone)** [LW],
Panda3DS **(Standalone)** | No | Single ROM file | +| n3ds | Nintendo 3DS | Citra [LW],
Citra **(Standalone)** [M] | Citra 2018 [LW],
Citra **(Standalone)** [LW],
Lime3DS **(Standalone)**,
Panda3DS **(Standalone)** | No | Single ROM file | | n64 | Nintendo 64 | Mupen64Plus-Next | Mupen64Plus **(Standalone)**,
ParaLLEl N64,
simple64 **(Standalone)** [LW],
Rosalie's Mupen GUI **(Standalone)** [LW],
Project64 **(Standalone)** [W],
ares **(Standalone)**,
sixtyforce **(Standalone)** [M] | No | Single archive or ROM file | | n64dd | Nintendo 64DD | ParaLLEl N64 [LW],
Mupen64Plus-Next [M] | Mupen64Plus-Next [LW],
ParaLLEl N64 [M],
Rosalie's Mupen GUI **(Standalone)** [LW],
ares **(Standalone)** | Yes | See the specific _Nintendo 64DD_ section elsewhere in this guide | | nds | Nintendo DS | melonDS DS | melonDS @,
melonDS **(Standalone)**,
DeSmuME,
DeSmuME 2015,
DeSmuME **(Standalone)** [L],
SkyEmu **(Standalone)** | No | Single archive or ROM file | @@ -4085,7 +4140,7 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | ngpc | SNK Neo Geo Pocket Color | Beetle NeoPop | RACE,
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | | odyssey2 | Magnavox Odyssey 2 | O2EM | MAME - Current,
MAME **(Standalone)** | Yes | Single archive or ROM file | | openbor | OpenBOR Game Engine | OpenBOR **(Standalone)** [LW] | | No | See the specific _OpenBOR_ section elsewhere in this guide | -| oric | Tangerine Computer Systems Oric | Oricutron **(Standalone)** [LW] | | | See the specific _Tangerine Computer Systems Oric_ section elsewhere in this guide | +| oric | Tangerine Computer Systems Oric | MAME **(Standalone)** | Oricutron **(Standalone)** | Yes | See the specific _Tangerine Computer Systems Oric_ section elsewhere in this guide | | palm | Palm OS | Mu | | | | | pc | IBM PC | DOSBox-Pure | DOSBox-Core,
DOSBox-SVN,
DOSBox-X **(Standalone)**,
DOSBox Staging **(Standalone)** | No | See the specific _DOS / PC_ section elsewhere in this guide | | pc88 | NEC PC-8800 Series | QUASI88 | QUASI88 **(Standalone)** | Yes | | @@ -4128,7 +4183,7 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | sufami | Bandai SuFami Turbo | Snes9x - Current | Snes9x 2010,
Snes9x 2005 Plus,
Snes9x **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
bsnes **(Standalone)** [LW],
ares **(Standalone)** | | | | supergrafx | NEC SuperGrafx | Beetle SuperGrafx | Beetle PCE,
Mednafen **(Standalone)**,
Mesen **(Standalone)** [LW],
ares **(Standalone)** | No | Single archive or ROM file | | supervision | Watara Supervision | Potator | MAME - Current,
MAME **(Standalone)** | No | Single archive or ROM file | -| supracan | Funtech Super A'Can | MAME - Current | MAME **(Standalone)** | Yes/No | Single archive or ROM file. To make MAME start these games create an empty file named internal_68k.bin and zip it into supracan.zip | +| supracan | Funtech Super A'Can | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file. You need a supracan.zip archive that contains a valid internal_68k.bin file and an empty file named umc6650.bin | | switch | Nintendo Switch | Ryujinx **(Standalone)** | | Yes | | | symbian | Symbian | EKA2L1 [Nokia N-Gage] **(Standalone)** | EKA2L1 [Nokia N70] **(Standalone)**,
EKA2L1 [Nokia N97] **(Standalone)**,
EKA2L1 [Custom device] **(Standalone)** | Yes | See the specific _Symbian and Nokia N-Gage_ section elsewhere in this guide | | tanodragon | Tano Dragon | XRoar **(Standalone)** | | Yes | See the specific _Dragon 32 and Tano Dragon_ section elsewhere in this guide | @@ -4156,10 +4211,10 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | wonderswan | Bandai WonderSwan | Beetle Cygne | Mednafen **(Standalone)**,
ares **(Standalone)**,
ares [Benesse Pocket Challenge V2] **(Standalone)** | No | Single archive or ROM file | | wonderswancolor | Bandai WonderSwan Color | Beetle Cygne | Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | | x1 | Sharp X1 | X Millennium | MAME [Diskette] **(Standalone)**,
MAME [Tape] **(Standalone)** | Yes for MAME | Single archive or diskette/tape file | -| x68000 | Sharp X68000 | PX68k | MAME **(Standalone)** | Yes | | +| x68000 | Sharp X68000 | PX68k | MAME **(Standalone)**,
XM6 Pro-68k **(Standalone)** [W],
XM6 Pro-68k **(Wine)** [L],
XM6 Pro-68k **(Proton)** [L] | Yes except for XM6 Pro-68k | | | xbox | Microsoft Xbox | xemu **(Standalone)** | Cxbx-Reloaded **(Standalone)** [W] | Yes for xemu | Single .iso file for xemu or unpacked .iso directory for Cxbx-Reloaded | | xbox360 | Microsoft Xbox 360 | xenia **(Standalone)** [W],
xenia **(Wine)** [L] | xenia **(Proton)** [L],
_Shortcut or script_ [L] | No | See the specific _Microsoft Xbox 360_ section elsewhere in this guide | -| zmachine | Infocom Z-machine | Gargoyle **(Standalone)** | | No | | +| zmachine | Infocom Z-machine | MojoZork | Gargoyle **(Standalone)** | No | | | zx81 | Sinclair ZX81 | EightyOne | | | | | zxnext | Sinclair ZX Spectrum Next | #CSpect **(Standalone)** [LW],
ZEsarUX **(Standalone)** [M] | ZEsarUX **(Standalone)** [LW] | No | In separate folder interpreted as a file | | zxspectrum | Sinclair ZX Spectrum | Fuse | Fuse **(Standalone)** | No | Single archive or ROM file | diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 34182dd65..e5eae0002 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MIT # -# ES-DE +# ES-DE Frontend # CMakeLists.txt (es-app) # # CMake configuration for es-app @@ -11,7 +11,6 @@ project(es-de) set(ES_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/ApplicationUpdater.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/ApplicationVersion.h ${CMAKE_CURRENT_SOURCE_DIR}/src/CollectionSystemsManager.h ${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.h ${CMAKE_CURRENT_SOURCE_DIR}/src/FileFilterIndex.h @@ -162,9 +161,9 @@ if(WIN32) ../freetype.dll ../git2.dll ../glew32.dll - ../libcrypto-1_1-x64.dll + ../libcrypto-3-x64.dll ../libcurl-x64.dll - ../libssl-1_1-x64.dll + ../libssl-3-x64.dll ../lunasvg.dll ../pugixml.dll ../rlottie.dll diff --git a/es-app/assets/ES-DE_Info.plist b/es-app/assets/ES-DE_Info.plist index c92e1e0c3..e362c7543 100644 --- a/es-app/assets/ES-DE_Info.plist +++ b/es-app/assets/ES-DE_Info.plist @@ -3,7 +3,7 @@ CFBundleIdentifier - 3.0.1 + 3.0.3 CFBundleDevelopmentRegion English CFBundleDisplayName @@ -11,7 +11,7 @@ CFBundleExecutable ES-DE CFBundleGetInfoString - ES-DE 3.0.1 + ES-DE 3.0.3 CFBundleIconFile ES-DE.icns CFBundleName @@ -21,15 +21,15 @@ CFBundleSignature ESDE CFBundleShortVersionString - 3.0.1 + 3.0.3 CFBundleVersion - 3.0.1 + 3.0.3 CFBundleInfoDictionaryVersion 6.0 LSApplicationCategoryType public.app-category.education LSMinimumSystemVersion - 10.15.0 + 11.0.0 LSUIPresentationMode 3 NSHighResolutionCapable diff --git a/es-app/assets/Windows_Portable_README.txt b/es-app/assets/Windows_Portable_README.txt index 57d82b54a..bd4ce3404 100644 --- a/es-app/assets/Windows_Portable_README.txt +++ b/es-app/assets/Windows_Portable_README.txt @@ -2,7 +2,7 @@ ES-DE Frontend - Portable installation on Windows ------------------------------------------------- ES-DE release: -3.0.1 +3.0.3 The latest version can be downloaded from https://es-de.org @@ -42,6 +42,7 @@ Preconfigured emulator locations: Emulators\RetroArch-Win64\retroarch.exe Emulators\RetroArch\retroarch.exe Emulators\3dSen\3dSen.exe +Emulators\AceDL\AceDL.exe Emulators\AdvanceMAME\advmame.exe Emulators\Altirra\Altirra64.exe Emulators\Altirra\Altirra.exe @@ -55,6 +56,7 @@ Emulators\bsnes\bsnes.exe Emulators\cemu\Cemu.exe Emulators\Citra\canary-mingw\citra-qt.exe Emulators\Citra\nightly-mingw\citra-qt.exe +Emulators\ColEm\ColEm.exe Emulators\cpcemu\cpcemu.exe Emulators\CSpect\CSpect.exe Emulators\Cxbx-Reloaded\cxbx.exe @@ -80,6 +82,7 @@ Emulators\gopher2600\gopher2600_windows_amd64.exe Emulators\hatari\hatari.exe Emulators\Hypseus Singe\hypseus.exe Emulators\KEmulator\KEmulator.exe +Emulators\lime3ds\lime3ds-gui.exe Emulators\m2emulator\EMULATOR.EXE Emulators\mame\mame.exe Emulators\mednafen\mednafen.exe @@ -131,8 +134,10 @@ Emulators\VICE\bin\xvic.exe Emulators\VPinballX\VPinballX_GL64.exe Emulators\VPinballX\VPinballX64.exe Emulators\Vita3K\Vita3K.exe +Emulators\WinArcadia\WinArcadia.exe Emulators\xemu\xemu.exe Emulators\xenia\xenia.exe Emulators\xenia_canary\xenia_canary.exe +Emulators\XM6 Pro-68k\XM6.exe Emulators\xroar\xroar.exe Emulators\ZEsarUX\zesarux.exe diff --git a/es-app/assets/es-de.6.gz b/es-app/assets/es-de.6.gz index 2bd149e4a..60cd5cc4c 100644 Binary files a/es-app/assets/es-de.6.gz and b/es-app/assets/es-de.6.gz differ diff --git a/es-app/assets/org.es_de.frontend.appdata.xml b/es-app/assets/org.es_de.frontend.appdata.xml index c10e4b703..2e98bcae9 100644 --- a/es-app/assets/org.es_de.frontend.appdata.xml +++ b/es-app/assets/org.es_de.frontend.appdata.xml @@ -1,7 +1,7 @@ org.es_de.frontend - ES-DE + ES-DE Frontend Gaming frontend

ES-DE is a frontend for browsing and launching games from your @@ -38,6 +38,12 @@ + + https://gitlab.com/es-de/emulationstation-de/-/releases + + + https://gitlab.com/es-de/emulationstation-de/-/releases + https://gitlab.com/es-de/emulationstation-de/-/releases diff --git a/es-app/src/CollectionSystemsManager.cpp b/es-app/src/CollectionSystemsManager.cpp index 300cd600c..4ac172ba0 100644 --- a/es-app/src/CollectionSystemsManager.cpp +++ b/es-app/src/CollectionSystemsManager.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // CollectionSystemsManager.cpp // // Manages collections of the following two types: @@ -160,6 +160,8 @@ void CollectionSystemsManager::saveCustomCollection(SystemData* sys) configFileIn.open(getCustomCollectionConfigPath(name)); #endif for (std::string gameEntry; getline(configFileIn, gameEntry);) { + // Remove Windows carriage return characters. + gameEntry = Utils::String::replace(gameEntry, "\r", ""); std::string gamePath {Utils::String::replace(gameEntry, "%ROMPATH%", rompath)}; gamePath = Utils::String::replace(gamePath, "//", "/"); // Only add the entry if it doesn't exist, i.e. only add missing files. @@ -1064,6 +1066,8 @@ void CollectionSystemsManager::reactivateCustomCollectionEntry(FileData* game) std::ifstream input {path}; #endif for (std::string gameKey; getline(input, gameKey);) { + // Remove Windows carriage return characters. + gameKey = Utils::String::replace(gameKey, "\r", ""); if (gameKey == gamePath) { setEditMode(it->first, false); toggleGameInCollection(game); @@ -1331,7 +1335,8 @@ void CollectionSystemsManager::populateCustomCollection(CollectionSystemData* sy // it's possible to use either absolute ROM paths in the collection files or using // the path variable. The absolute ROM paths are only used for backward compatibility // with old custom collections. All custom collections saved by ES-DE will use the - // %ROMPATH% variable instead. + // %ROMPATH% variable instead. Also remove Windows carriage return characters. + gameKey = Utils::String::replace(gameKey, "\r", ""); gameKey = Utils::String::replace(gameKey, "%ROMPATH%", rompath); gameKey = Utils::String::replace(gameKey, "//", "/"); diff --git a/es-app/src/CollectionSystemsManager.h b/es-app/src/CollectionSystemsManager.h index 35162271e..a1b07b02b 100644 --- a/es-app/src/CollectionSystemsManager.h +++ b/es-app/src/CollectionSystemsManager.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // CollectionSystemsManager.h // // Manages collections of the following two types: diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 9b0487993..1f143c8ac 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // FileData.cpp // // Provides game file data structures and functions to access and sort this information. @@ -10,6 +10,7 @@ #include "FileData.h" +#include "AudioManager.h" #include "CollectionSystemsManager.h" #include "FileFilterIndex.h" #include "FileSorts.h" @@ -968,6 +969,7 @@ void FileData::launchGame() size_t coreFilePos {0}; bool foundCoreFile {false}; std::vector emulatorCorePaths; + bool isAndroidApp {false}; #if defined(__ANDROID__) std::string androidPackage; @@ -1085,8 +1087,79 @@ void FileData::launchGame() } // Check that the emulator actually exists, and if so, get its path. - const std::pair emulator { - findEmulator(command, false)}; + std::pair emulator; + +#if defined(__ANDROID__) + // Native Android apps and games. + if (command.find("%ANDROIDAPP%=") != std::string::npos) { + std::string packageName; + size_t startPos {command.find("%ANDROIDAPP%=")}; + size_t endPos {command.find(" ", startPos)}; + if (endPos == std::string::npos) + endPos = command.length(); + + packageName = command.substr(startPos + 13, endPos - startPos - 13); + isAndroidApp = true; + + if (packageName == "%FILEINJECT%") { + LOG(LogDebug) << "Injecting app info from file \"" + fileName + "\""; + std::string appString; + std::ifstream injectFileStream; + + injectFileStream.open(romRaw); + for (std::string line; getline(injectFileStream, line);) { + // Remove Windows carriage return characters. + line = Utils::String::replace(line, "\r", ""); + appString += line; + if (appString.size() > 4096) + break; + } + injectFileStream.close(); + + if (appString.empty()) { + LOG(LogDebug) << "FileData::launchGame(): File empty or insufficient permissions, " + "nothing to inject"; + packageName = ""; + } + else if (appString.size() > 4096) { + LOG(LogWarning) << "FileData::launchGame(): Injection file exceeding maximum " + "allowed size of 4096 bytes, skipping \"" + << fileName << "\""; + packageName = ""; + } + else { + packageName = appString; + } + } + + if (packageName != "" && packageName != "%FILEINJECT%") { + LOG(LogInfo) << "Game entry is an Android app: " << packageName; + + size_t separatorPos {packageName.find('/')}; + + if (separatorPos != std::string::npos) { + androidActivity = packageName.substr(separatorPos + 1); + packageName = packageName.substr(0, separatorPos); + } + + if (Utils::Platform::Android::checkEmulatorInstalled(packageName, androidActivity)) { + emulator = std::make_pair(packageName, + FileData::findEmulatorResult::FOUND_ANDROID_PACKAGE); + } + else { + emulator = std::make_pair(packageName, FileData::findEmulatorResult::NOT_FOUND); + } + } + else { + emulator = std::make_pair(packageName, FileData::findEmulatorResult::NOT_FOUND); + } + } + else { + emulator = findEmulator(command, false); + } +#else + emulator = findEmulator(command, false); +#endif // Show an error message if there was no matching emulator entry in es_find_rules.xml. if (emulator.second == FileData::findEmulatorResult::NO_RULES) { @@ -1102,7 +1175,12 @@ void FileData::launchGame() return; } else if (emulator.second == FileData::findEmulatorResult::NOT_FOUND) { - LOG(LogError) << "Couldn't launch game, emulator not found"; + if (isAndroidApp) { + LOG(LogError) << "Couldn't launch app as it does not seem to be installed"; + } + else { + LOG(LogError) << "Couldn't launch game, emulator not found"; + } LOG(LogError) << "Raw emulator launch command:"; LOG(LogError) << commandRaw; @@ -1115,14 +1193,37 @@ void FileData::launchGame() if (endPos != std::string::npos) emulatorName = command.substr(startPos + 10, endPos - startPos - 10); } +#if defined(__ANDROID__) + else if ((startPos = command.find("%ANDROIDAPP%=")) != std::string::npos) { + endPos = command.find(" ", startPos); + if (endPos == std::string::npos) + endPos = command.length(); - if (emulatorName == "") - window->queueInfoPopup("ERROR: COULDN'T FIND EMULATOR, HAS IT BEEN PROPERLY INSTALLED?", - 6000); - else - window->queueInfoPopup("ERROR: COULDN'T FIND EMULATOR '" + emulatorName + - "', HAS IT BEEN PROPERLY INSTALLED?", - 6000); + emulatorName = command.substr(startPos + 13, endPos - startPos - 13); + } +#endif + if (isAndroidApp) { + if (emulatorName == "" || emulatorName == "%FILEINJECT%") { + window->queueInfoPopup("ERROR: COULDN'T FIND APP, HAS IT BEEN PROPERLY INSTALLED?", + 6000); + } + else { + window->queueInfoPopup("ERROR: COULDN'T FIND APP '" + emulatorName + + "', HAS IT BEEN PROPERLY INSTALLED?", + 6000); + } + } + else { + if (emulatorName == "") { + window->queueInfoPopup( + "ERROR: COULDN'T FIND EMULATOR, HAS IT BEEN PROPERLY INSTALLED?", 6000); + } + else { + window->queueInfoPopup("ERROR: COULDN'T FIND EMULATOR '" + emulatorName + + "', HAS IT BEEN PROPERLY INSTALLED?", + 6000); + } + } window->setAllowTextScrolling(true); window->setAllowFileAnimation(true); @@ -1473,18 +1574,30 @@ void FileData::launchGame() injectFile = Utils::String::replace(injectFile, "\\", "/"); injectFile = Utils::String::replace(injectFile, "%BASENAME%", Utils::String::replace(baseName, "\"", "")); - if (injectFile.size() < 3 || !(injectFile[1] == ':' && injectFile[2] == '/')) - injectFile = - Utils::FileSystem::getParent(Utils::String::replace(romPath, "\"", "")) + "/" + - injectFile; + if (injectFile == "%ROM%") { + injectFile = Utils::String::replace(injectFile, "%ROM%", + Utils::String::replace(romRaw, "\"", "")); + } + else { + if (injectFile.size() < 3 || !(injectFile[1] == ':' && injectFile[2] == '/')) + injectFile = + Utils::FileSystem::getParent(Utils::String::replace(romPath, "\"", "")) + + "/" + injectFile; + } injectFile = Utils::String::replace(injectFile, "/", "\\"); #else injectFile = Utils::String::replace(injectFile, "%BASENAME%", Utils::String::replace(baseName, "\\", "")); - if (injectFile.front() != '/') - injectFile = - Utils::FileSystem::getParent(Utils::String::replace(romPath, "\\", "")) + "/" + - injectFile; + if (injectFile == "%ROM%") { + injectFile = Utils::String::replace(injectFile, "%ROM%", + Utils::String::replace(romRaw, "\\", "")); + } + else { + if (injectFile.front() != '/') + injectFile = + Utils::FileSystem::getParent(Utils::String::replace(romPath, "\\", "")) + + "/" + injectFile; + } #endif if (Utils::FileSystem::isRegularFile(injectFile) || Utils::FileSystem::isSymlink(injectFile)) { @@ -1492,9 +1605,18 @@ void FileData::launchGame() << "\""; std::string arguments; std::ifstream injectFileStream; +#if defined(_WIN64) + injectFileStream.open(Utils::String::stringToWideString(injectFile)); +#else injectFileStream.open(injectFile); - for (std::string line; getline(injectFileStream, line);) +#endif + for (std::string line; getline(injectFileStream, line);) { + // Remove Windows carriage return characters. + line = Utils::String::replace(line, "\r", ""); arguments += line; + if (arguments.size() > 4096) + break; + } injectFileStream.close(); if (arguments.empty()) { @@ -1504,8 +1626,7 @@ void FileData::launchGame() } else if (arguments.size() > 4096) { LOG(LogWarning) << "FileData::launchGame(): Injection file exceeding maximum " - "allowed size of " - "4096 bytes, skipping \"" + "allowed size of 4096 bytes, skipping \"" << injectFile << "\""; } else { @@ -1634,6 +1755,10 @@ void FileData::launchGame() Utils::FileSystem::getEscapedPath(getROMDirectory())); #else command = Utils::String::replace(command, "%ANDROIDPACKAGE%", androidPackage); + // Escaped quotation marks should only be used for Extras on Android so it should be safe to + // just change them to temporary variables and convert them back to the escaped quotation + // marks when parsing the Extras. + command = Utils::String::replace(command, "\\\"", "%QUOTATION%"); const std::vector androidVariabels { "%ACTION%=", "%CATEGORY%=", "%MIMETYPE%=", "%DATA%="}; @@ -1741,6 +1866,21 @@ void FileData::launchGame() } if (extraName != "" && extraValue != "") { + // Expand the unescaped game directory path and ROM directory as well as + // the raw path to the game file if the corresponding variables have been + // used in the Extra definition. We also change back any temporary quotation + // mark variables to actual escaped quotation marks so they can be passed + // in the Intent. + extraValue = Utils::String::replace(extraValue, "%QUOTATION%", "\\\""); + extraValue = + Utils::String::replace(extraValue, "%GAMEDIRRAW%", + Utils::FileSystem::getParent( + Utils::String::replace(romPath, "\\", ""))); + extraValue = + Utils::String::replace(extraValue, "%ROMPATHRAW%", getROMDirectory()); + extraValue = Utils::String::replace(extraValue, "%ROMRAW%", romRaw); + extraValue = Utils::String::replace(extraValue, "//", "/"); + if (variable == "%EXTRA_") androidExtrasString[extraName] = extraValue; else if (variable == "%EXTRAARRAY_") @@ -1791,6 +1931,10 @@ void FileData::launchGame() // Trim any leading and trailing whitespace characters as they could cause launch issues. command = Utils::String::trim(command); +#if defined(DEINIT_ON_LAUNCH) + runInBackground = false; +#endif + // swapBuffers() is called here to turn the screen black to eliminate some potential // flickering and to avoid showing the game launch message briefly when returning // from the game. @@ -1862,7 +2006,18 @@ void FileData::launchGame() androidData, mEnvData->mStartPath, romRaw, androidExtrasString, androidExtrasStringArray, androidExtrasBool, androidActivityFlags); #else + +#if defined(DEINIT_ON_LAUNCH) +// Deinit both the AudioManager and the window which allows emulators to launch in KMS mode. +AudioManager::getInstance().deinit(); +window->deinit(); +returnValue = Utils::Platform::launchGameUnix(command, startDirectory, false); +AudioManager::getInstance().init(); +window->init(); +#else returnValue = Utils::Platform::launchGameUnix(command, startDirectory, runInBackground); +#endif + #endif // Notify the user in case of a failed game launch using a popup window. if (returnValue != 0) { diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index a12e5613d..23d654a64 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // FileData.h // // Provides game file data structures and functions to access and sort this information. diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 70da20e2d..358891110 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -40,6 +40,7 @@ #if defined(__ANDROID__) #include "InputOverlay.h" +#include "utils/PlatformUtilAndroid.h" #endif #include @@ -80,6 +81,9 @@ GuiMenu::GuiMenu() Settings::getInstance()->getString("UIMode") != "kiosk") { #if defined(__APPLE__) addEntry("QUIT RETRODECK", mMenuColorPrimary, false, [this] { openQuitMenu(); }); +#elif defined(__ANDROID__) + if (!AndroidVariables::sIsHomeApp) + addEntry("QUIT RETRODECK", mMenuColorPrimary, false, [this] { openQuitMenu(); }); #else if (Settings::getInstance()->getBool("ShowQuitMenu")) addEntry("QUIT", mMenuColorPrimary, true, [this] { openQuitMenu(); }); @@ -1655,7 +1659,7 @@ void GuiMenu::openOtherOptions() }); #endif -#if !defined(__ANDROID__) +#if !defined(__ANDROID__) && !defined(DEINIT_ON_LAUNCH) // Run ES in the background when a game has been launched. auto runInBackground = std::make_shared(); runInBackground->setState(Settings::getInstance()->getBool("RunInBackground")); @@ -1792,6 +1796,34 @@ void GuiMenu::openOtherOptions() }); #endif +#if defined(__ANDROID__) + if (!AndroidVariables::sIsHomeApp) { + // Whether swiping or pressing back should exit the application. + auto backEventAppExit = std::make_shared(); + backEventAppExit->setState(Settings::getInstance()->getBool("BackEventAppExit")); + s->addWithLabel("BACK BUTTON/BACK SWIPE EXITS APP", backEventAppExit); + s->addSaveFunc([backEventAppExit, s] { + if (backEventAppExit->getState() != + Settings::getInstance()->getBool("BackEventAppExit")) { + Settings::getInstance()->setBool("BackEventAppExit", backEventAppExit->getState()); + s->setNeedsSaving(); + } + }); + } + else { + // If we're running as the Android home app then we don't allow the application to quit, + // so simply add a disabled dummy switch in this case. + auto backEventAppExit = std::make_shared(); + s->addWithLabel("BACK BUTTON/BACK SWIPE EXITS APP", backEventAppExit); + backEventAppExit->setEnabled(false); + backEventAppExit->setState(false); + backEventAppExit->setOpacity(DISABLED_OPACITY); + backEventAppExit->getParent() + ->getChild(backEventAppExit->getChildIndex() - 1) + ->setOpacity(DISABLED_OPACITY); + } +#endif + if (Settings::getInstance()->getBool("DebugFlag")) { // If the --debug command line option was passed then create a dummy entry. auto debugMode = std::make_shared(); diff --git a/es-app/src/guis/GuiOrphanedDataCleanup.cpp b/es-app/src/guis/GuiOrphanedDataCleanup.cpp index b925bf649..b30943614 100644 --- a/es-app/src/guis/GuiOrphanedDataCleanup.cpp +++ b/es-app/src/guis/GuiOrphanedDataCleanup.cpp @@ -22,7 +22,6 @@ GuiOrphanedDataCleanup::GuiOrphanedDataCleanup(std::function reloadCallb , mGrid {glm::ivec2 {4, 11}} , mReloadCallback {reloadCallback} , mCursorPos {0} - , mMediaDirectory {FileData::getMediaDirectory()} , mMediaTypes {"3dboxes", "backcovers", "covers", "fanart", "manuals", "marquees", "miximages", "physicalmedia", "screenshots", "titlescreens", "videos"} @@ -36,6 +35,23 @@ GuiOrphanedDataCleanup::GuiOrphanedDataCleanup(std::function reloadCallb , mCaseSensitiveFilesystem {true} , mCleanupType {CleanupType::MEDIA} { + // Make sure we always have a single trailing directory separator for the media directory. + mMediaDirectory = FileData::getMediaDirectory(); + mMediaDirectory.erase(std::find_if(mMediaDirectory.rbegin(), mMediaDirectory.rend(), + [](char c) { return c != '/'; }) + .base(), + mMediaDirectory.end()); + + mMediaDirectory.erase(std::find_if(mMediaDirectory.rbegin(), mMediaDirectory.rend(), + [](char c) { return c != '\\'; }) + .base(), + mMediaDirectory.end()); +#if defined(_WIN64) + mMediaDirectory.append("\\"); +#else + mMediaDirectory.append("/"); +#endif + addChild(&mBackground); addChild(&mGrid); diff --git a/es-app/src/guis/GuiSettings.cpp b/es-app/src/guis/GuiSettings.cpp index 013042cdb..09d42f0dc 100644 --- a/es-app/src/guis/GuiSettings.cpp +++ b/es-app/src/guis/GuiSettings.cpp @@ -112,7 +112,7 @@ void GuiSettings::save() ViewController::getInstance()->reloadAll(); if (mNeedsGoToStart) - ViewController::getInstance()->goToStart(true); + ViewController::getInstance()->goToStart(false); // Special case from GuiCollectionSystemsOptions where we didn't yet know whether a matching // theme existed when creating a new custom collection. diff --git a/es-app/src/guis/GuiThemeDownloader.cpp b/es-app/src/guis/GuiThemeDownloader.cpp index af850c6f8..a5f597035 100644 --- a/es-app/src/guis/GuiThemeDownloader.cpp +++ b/es-app/src/guis/GuiThemeDownloader.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // GuiThemeDownloader.cpp // // Theme downloader. @@ -395,7 +395,9 @@ bool GuiThemeDownloader::fetchRepository(const std::string& repositoryName, bool LOG(LogError) << "GuiThemeDownloader: " << runtimeError.what() << gitError->message; mRepositoryError = RepositoryError::FETCH_ERROR; mMessage = gitError->message; +#if LIBGIT2_VER_MAJOR < 2 && LIBGIT2_VER_MINOR < 8 git_error_clear(); +#endif git_remote_free(gitRemote); git_repository_free(repository); mPromise.set_value(true); @@ -663,6 +665,9 @@ void GuiThemeDownloader::parseThemesList() if (theme.HasMember("newEntry") && theme["newEntry"].IsBool()) themeEntry.newEntry = theme["newEntry"].GetBool(); + if (theme.HasMember("deprecated") && theme["deprecated"].IsBool()) + themeEntry.deprecated = theme["deprecated"].GetBool(); + if (theme.HasMember("variants") && theme["variants"].IsArray()) { const rapidjson::Value& variants {theme["variants"]}; for (int i {0}; i < static_cast(variants.Size()); ++i) @@ -746,6 +751,11 @@ void GuiThemeDownloader::populateGUI() std::shared_ptr themeNameElement {std::make_shared( themeName, Font::get(FONT_SIZE_MEDIUM), mMenuColorPrimary)}; + if (theme.deprecated) + themeNameElement->setOpacity(0.4f); + else + themeNameElement->setOpacity(1.0f); + ThemeGUIEntry guiEntry; guiEntry.themeName = themeNameElement; mThemeGUIEntries.emplace_back(guiEntry); @@ -907,11 +917,21 @@ void GuiThemeDownloader::updateGUI() void GuiThemeDownloader::updateInfoPane() { assert(static_cast(mList->size()) == mThemes.size()); - if (!mThemes[mList->getCursorId()].screenshots.empty()) + if (!mThemes[mList->getCursorId()].screenshots.empty()) { mScreenshot->setImage(mThemeDirectory + "themes-list/" + mThemes[mList->getCursorId()].screenshots.front().image); - else + if (mThemes[mList->getCursorId()].deprecated) { + mScreenshot->setSaturation(0.0f); + mScreenshot->setBrightness(-0.2f); + } + else { + mScreenshot->setSaturation(1.0f); + mScreenshot->setBrightness(0.0f); + } + } + else { mScreenshot->setImage(""); + } if (mThemes[mList->getCursorId()].isCloned) { mDownloadStatus->setText(ViewController::TICKMARK_CHAR + " INSTALLED"); @@ -954,7 +974,11 @@ void GuiThemeDownloader::updateInfoPane() mColorSchemesCount->setText(std::to_string(mThemes[mList->getCursorId()].colorSchemes.size())); mAspectRatiosCount->setText(std::to_string(mThemes[mList->getCursorId()].aspectRatios.size())); mFontSizesCount->setText(std::to_string(mThemes[mList->getCursorId()].fontSizes.size())); - mAuthor->setText("CREATED BY " + Utils::String::toUpper(mThemes[mList->getCursorId()].author)); + if (mThemes[mList->getCursorId()].deprecated) + mAuthor->setText("THIS THEME ENTRY WILL BE REMOVED IN THE NEAR FUTURE"); + else + mAuthor->setText("CREATED BY " + + Utils::String::toUpper(mThemes[mList->getCursorId()].author)); } void GuiThemeDownloader::setupFullscreenViewer() @@ -1419,7 +1443,9 @@ bool GuiThemeDownloader::cloneRepository(const std::string& repositoryName, cons << gitError->message << "\""; mRepositoryError = RepositoryError::CLONE_ERROR; mMessage = gitError->message; +#if LIBGIT2_VER_MAJOR < 2 && LIBGIT2_VER_MINOR < 8 git_error_clear(); +#endif mPromise.set_value(true); return true; } diff --git a/es-app/src/guis/GuiThemeDownloader.h b/es-app/src/guis/GuiThemeDownloader.h index 2a807756e..f56a2fe68 100644 --- a/es-app/src/guis/GuiThemeDownloader.h +++ b/es-app/src/guis/GuiThemeDownloader.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // GuiThemeDownloader.h // // Theme downloader. @@ -68,6 +68,7 @@ private: std::vector transitions; std::vector screenshots; bool newEntry; + bool deprecated; bool invalidRepository; bool corruptRepository; bool shallowRepository; @@ -76,6 +77,7 @@ private: bool isCloned; ThemeEntry() : newEntry {false} + , deprecated {false} , invalidRepository {false} , corruptRepository {false} , shallowRepository {false} diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index a95f62e42..018f5aa4e 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE is a frontend for browsing and launching games from your multi-platform game collection. +// ES-DE is a frontend for browsing and launching games from your multi-platform collection. // // The column limit is 100 characters. // All ES-DE C++ source code is formatted using clang-format. @@ -558,6 +558,8 @@ int main(int argc, char* argv[]) std::locale::global(std::locale("C")); + SDL_SetHint(SDL_HINT_APP_NAME, "ES-DE"); + #if defined(__APPLE__) // This is a workaround to disable the incredibly annoying save state functionality in // macOS which forces a restore of the previous window state. The problem is that this @@ -610,17 +612,15 @@ int main(int argc, char* argv[]) // unusable in any emulator that is launched. SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI, "0"); - bool resetTouchOverlay {false}; - // If ES-DE is set as the home app/launcher we may be in a situation where we get started // before the external storage has been mounted. If the application data directory or the // ROMs directory have been located on this storage then the configurator will get executed. - // To prevent the likelyhood of this happening we wait up to 40 * 100 milliseconds, then + // To prevent the likelyhood of this happening we wait up to 45 * 100 milliseconds, then // we give up. This is not an airtight solution but it hopefully decreases the risk of // this failure occuring. Under normal circumstances the storage would be mounted when // the application is starting, so no delay would occur. if (SDL_AndroidGetExternalStorageState() == 0) { - for (int i {0}; i < 40; ++i) { + for (int i {0}; i < 45; ++i) { __android_log_print(ANDROID_LOG_VERBOSE, ANDROID_APPLICATION_ID, "Storage not mounted, waiting 100 ms until next attempt"); SDL_Delay(100); @@ -637,9 +637,6 @@ int main(int argc, char* argv[]) if (Utils::Platform::Android::checkConfigurationNeeded()) exit(0); - - // Always enable the touch overlay after running the configurator. - resetTouchOverlay = true; } Utils::Platform::Android::setDataDirectories(); @@ -701,6 +698,14 @@ int main(int argc, char* argv[]) LOG(LogInfo) << applicationName << " " << PROGRAM_VERSION_STRING << "-" << ANDROID_VERSION_CODE << " (r" << PROGRAM_RELEASE_NUMBER << "), built " << PROGRAM_BUILT_STRING; + + if (AndroidVariables::sIsHomeApp) { + LOG(LogInfo) << "Running as the Android home app"; + } + else { + LOG(LogInfo) << "Running as a regular Android app"; + } + #else LOG(LogInfo) << applicationName << " " << PROGRAM_VERSION_STRING << " (r" << PROGRAM_RELEASE_NUMBER << "), built " << PROGRAM_BUILT_STRING; @@ -744,7 +749,12 @@ int main(int argc, char* argv[]) // Create the settings folder in the application data directory. const std::string settingsDir {Utils::FileSystem::getAppDataDirectory() + "/settings"}; if (!Utils::FileSystem::isDirectory(settingsDir)) { +#if defined(_WIN64) + LOG(LogInfo) << "Creating settings directory \"" + << Utils::String::replace(settingsDir, "/", "\\") << "\"..."; +#else LOG(LogInfo) << "Creating settings directory \"" << settingsDir << "\"..."; +#endif Utils::FileSystem::createDirectory(settingsDir); if (!Utils::FileSystem::isDirectory(settingsDir)) { LOG(LogError) << "Couldn't create directory, permission problems?"; @@ -790,7 +800,8 @@ int main(int argc, char* argv[]) } #if defined(__ANDROID__) - if (resetTouchOverlay) { + // Reset the touch overlay if at least the second screen of the configurator was reached. + if (AndroidVariables::sResetTouchOverlay) { Settings::getInstance()->setBool("InputTouchOverlay", true); Settings::getInstance()->saveFile(); } @@ -819,7 +830,12 @@ int main(int argc, char* argv[]) // Create the gamelists folder in the application data directory. const std::string gamelistsDir {Utils::FileSystem::getAppDataDirectory() + "/gamelists"}; if (!Utils::FileSystem::exists(gamelistsDir)) { +#if defined(_WIN64) + LOG(LogInfo) << "Creating gamelists directory \"" + << Utils::String::replace(gamelistsDir, "/", "\\") << "\"..."; +#else LOG(LogInfo) << "Creating gamelists directory \"" << gamelistsDir << "\"..."; +#endif Utils::FileSystem::createDirectory(gamelistsDir); if (!Utils::FileSystem::exists(gamelistsDir)) { LOG(LogWarning) << "Couldn't create directory, permission problems?"; @@ -827,6 +843,23 @@ int main(int argc, char* argv[]) } } + { + // Create the game media folder. + const std::string mediaDirectory {FileData::getMediaDirectory()}; + if (!Utils::FileSystem::exists(mediaDirectory)) { +#if defined(_WIN64) + LOG(LogInfo) << "Creating game media directory \"" + << Utils::String::replace(mediaDirectory, "/", "\\") << "\"..."; +#else + LOG(LogInfo) << "Creating game media directory \"" << mediaDirectory << "\"..."; +#endif + Utils::FileSystem::createDirectory(mediaDirectory); + if (!Utils::FileSystem::exists(mediaDirectory)) { + LOG(LogWarning) << "Couldn't create directory, permission problems?"; + } + } + } + { #if defined(__ANDROID__) const std::string themeDir {Utils::FileSystem::getAppDataDirectory() + "/themes"}; @@ -861,8 +894,12 @@ int main(int argc, char* argv[]) userThemeDirectory = userThemeDirSetting; if (!Utils::FileSystem::exists(userThemeDirectory)) { +#if defined(_WIN64) + LOG(LogInfo) << "Creating themes directory \"" + << Utils::String::replace(userThemeDirectory, "/", "\\") << "\"..."; +#else LOG(LogInfo) << "Creating themes directory \"" << userThemeDirectory << "\"..."; - +#endif Utils::FileSystem::createDirectory(userThemeDirectory); if (!Utils::FileSystem::exists(userThemeDirectory)) { LOG(LogWarning) << "Couldn't create directory, permission problems?"; @@ -891,7 +928,12 @@ int main(int argc, char* argv[]) // for custom event scripts so it's also created as a convenience. const std::string scriptsDir {Utils::FileSystem::getAppDataDirectory() + "/scripts"}; if (!Utils::FileSystem::exists(scriptsDir)) { +#if defined(_WIN64) + LOG(LogInfo) << "Creating scripts directory \"" + << Utils::String::replace(scriptsDir, "/", "\\") << "\"..."; +#else LOG(LogInfo) << "Creating scripts directory \"" << scriptsDir << "\"..."; +#endif Utils::FileSystem::createDirectory(scriptsDir); if (!Utils::FileSystem::exists(scriptsDir)) { LOG(LogWarning) << "Couldn't create directory, permission problems?"; @@ -906,7 +948,12 @@ int main(int argc, char* argv[]) const std::string slideshowDir {Utils::FileSystem::getAppDataDirectory() + "/screensavers/custom_slideshow"}; if (!Utils::FileSystem::exists(screensaversDir)) { +#if defined(_WIN64) + LOG(LogInfo) << "Creating screensavers directory \"" + << Utils::String::replace(screensaversDir, "/", "\\") << "\"..."; +#else LOG(LogInfo) << "Creating screensavers directory \"" << screensaversDir << "\"..."; +#endif Utils::FileSystem::createDirectory(screensaversDir); if (!Utils::FileSystem::exists(screensaversDir)) { LOG(LogWarning) << "Couldn't create directory, permission problems?"; @@ -923,7 +970,12 @@ int main(int argc, char* argv[]) } #endif if (!Utils::FileSystem::exists(slideshowDir)) { +#if defined(_WIN64) + LOG(LogInfo) << "Creating custom_slideshow directory \"" + << Utils::String::replace(slideshowDir, "/", "\\") << "\"..."; +#else LOG(LogInfo) << "Creating custom_slideshow directory \"" << slideshowDir << "\"..."; +#endif Utils::FileSystem::createDirectory(slideshowDir); if (!Utils::FileSystem::exists(slideshowDir)) { LOG(LogWarning) << "Couldn't create directory, permission problems?"; @@ -937,7 +989,12 @@ int main(int argc, char* argv[]) const std::string controllersDir {Utils::FileSystem::getAppDataDirectory() + "/controllers"}; if (!Utils::FileSystem::exists(controllersDir)) { +#if defined(_WIN64) + LOG(LogInfo) << "Creating controllers directory \"" + << Utils::String::replace(controllersDir, "/", "\\") << "\"..."; +#else LOG(LogInfo) << "Creating controllers directory \"" << controllersDir << "\"..."; +#endif Utils::FileSystem::createDirectory(controllersDir); if (!Utils::FileSystem::exists(controllersDir)) { LOG(LogWarning) << "Couldn't create directory, permission problems?"; @@ -1121,6 +1178,8 @@ int main(int argc, char* argv[]) #if defined(APPLICATION_UPDATER) if (ApplicationUpdater::getInstance().getResults()) ViewController::getInstance()->updateAvailableDialog(); + else + HttpReq::cleanupCurlMulti(); #endif #if defined(_WIN64) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 03d7dc8ad..a36807094 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // ViewController.cpp // // Handles overall system navigation including animations and transitions. @@ -139,11 +139,22 @@ void ViewController::setMenuColors() void ViewController::legacyAppDataDialog() { - const std::string upgradeMessage { + const std::string upgradeMessage + { "AS OF ES-DE 3.0 THE APPLICATION DATA DIRECTORY HAS CHANGED FROM \".emulationstation\" " "to \"ES-DE\"\nPLEASE RENAME YOUR CURRENT DATA DIRECTORY:\n" + - Utils::FileSystem::getAppDataDirectory() + "\nTO THE FOLLOWING:\n" + - Utils::FileSystem::getParent(Utils::FileSystem::getAppDataDirectory()) + "/ES-DE"}; +#if defined(_WIN64) + Utils::String::replace(Utils::FileSystem::getAppDataDirectory(), "/", "\\") + + "\nTO THE FOLLOWING:\n" + + Utils::String::replace( + Utils::FileSystem::getParent(Utils::FileSystem::getAppDataDirectory()), "/", "\\") + + "\\ES-DE" + }; +#else + Utils::FileSystem::getAppDataDirectory() + "\nTO THE FOLLOWING:\n" + + Utils::FileSystem::getParent(Utils::FileSystem::getAppDataDirectory()) + "/ES-DE" + }; +#endif mWindow->pushGui(new GuiMsgBox( HelpStyle(), upgradeMessage.c_str(), "OK", [] {}, "", nullptr, "", nullptr, nullptr, true, @@ -317,7 +328,12 @@ void ViewController::updateAvailableDialog() 0.535f * (1.778f / mRenderer->getScreenAspectRatio())))); } }, - "CANCEL", [] { return; }, "", nullptr, nullptr, true, true, + "CANCEL", + [] { + HttpReq::cleanupCurlMulti(); + return; + }, + "", nullptr, nullptr, true, true, (mRenderer->getIsVerticalOrientation() ? 0.70f : 0.45f * (1.778f / mRenderer->getScreenAspectRatio())))); diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 68845b9b7..d24a6d383 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // ViewController.h // // Handles overall system navigation including animations and transitions. diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index e4c387850..6222898fb 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MIT # -# ES-DE +# ES-DE Frontend # CMakeLists.txt (es-core) # # CMake configuration for es-core @@ -9,6 +9,7 @@ project(core) set(CORE_HEADERS + ${CMAKE_CURRENT_SOURCE_DIR}/src/ApplicationVersion.h ${CMAKE_CURRENT_SOURCE_DIR}/src/AsyncHandle.h ${CMAKE_CURRENT_SOURCE_DIR}/src/AudioManager.h ${CMAKE_CURRENT_SOURCE_DIR}/src/CECInput.h diff --git a/es-app/src/ApplicationVersion.h b/es-core/src/ApplicationVersion.h similarity index 62% rename from es-app/src/ApplicationVersion.h rename to es-core/src/ApplicationVersion.h index a8d3bc264..f3491d6b0 100644 --- a/es-app/src/ApplicationVersion.h +++ b/es-core/src/ApplicationVersion.h @@ -1,25 +1,25 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // ApplicationVersion.h // -#ifndef ES_APP_APPLICATION_VERSION_H -#define ES_APP_APPLICATION_VERSION_H +#ifndef ES_CORE_APPLICATION_VERSION_H +#define ES_CORE_APPLICATION_VERSION_H // These numbers and strings need to be manually updated for a new version. // Do this version number update as the very last commit for the new release version. // clang-format off #define PROGRAM_VERSION_MAJOR 3 #define PROGRAM_VERSION_MINOR 0 -#define PROGRAM_VERSION_MAINTENANCE 1 -#define PROGRAM_RELEASE_NUMBER 42 +#define PROGRAM_VERSION_MAINTENANCE 3 +#define PROGRAM_RELEASE_NUMBER 44 // clang-format on -#define PROGRAM_VERSION_STRING "3.0.1" +#define PROGRAM_VERSION_STRING "3.0.3" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "3,0,1\0" +#define RESOURCE_VERSION_STRING "3,0,3\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR, PROGRAM_VERSION_MINOR, PROGRAM_VERSION_MAINTENANCE -#endif // ES_APP_APPLICATION_VERSION_H +#endif // ES_CORE_APPLICATION_VERSION_H diff --git a/es-core/src/AudioManager.cpp b/es-core/src/AudioManager.cpp index 0cf5d023e..e3f38e1b0 100644 --- a/es-core/src/AudioManager.cpp +++ b/es-core/src/AudioManager.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // AudioManager.cpp // // Low-level audio functions (using SDL2). @@ -113,6 +113,9 @@ void AudioManager::init() void AudioManager::deinit() { + if (sAudioDevice == 0) + return; + SDL_LockAudioDevice(sAudioDevice); SDL_FreeAudioStream(sConversionStream); SDL_UnlockAudioDevice(sAudioDevice); @@ -120,6 +123,7 @@ void AudioManager::deinit() SDL_CloseAudio(); SDL_QuitSubSystem(SDL_INIT_AUDIO); + sConversionStream = nullptr; sAudioDevice = 0; } @@ -132,7 +136,7 @@ void AudioManager::mixAudio(void* /*unused*/, Uint8* stream, int len) SDL_memset(stream, 0, len); // Iterate through all our samples. - std::vector>::const_iterator soundIt = sSoundVector.cbegin(); + std::vector>::const_iterator soundIt {sSoundVector.cbegin()}; while (soundIt != sSoundVector.cend()) { std::shared_ptr sound {*soundIt}; if (sound->isPlaying()) { diff --git a/es-core/src/AudioManager.h b/es-core/src/AudioManager.h index d274eb095..bc0ffb497 100644 --- a/es-core/src/AudioManager.h +++ b/es-core/src/AudioManager.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // AudioManager.h // // Low-level audio functions (using SDL2). @@ -49,10 +49,10 @@ private: static void mixAudio(void* unused, Uint8* stream, int len); - static inline SDL_AudioStream* sConversionStream; + static inline SDL_AudioStream* sConversionStream {nullptr}; static inline std::vector> sSoundVector; - static inline std::atomic sMuteStream = false; - static inline bool sHasAudioDevice = true; + static inline std::atomic sMuteStream {false}; + static inline bool sHasAudioDevice {true}; }; #endif // ES_CORE_AUDIO_MANAGER_H diff --git a/es-core/src/HttpReq.cpp b/es-core/src/HttpReq.cpp index 73fd81ead..305bbad0d 100644 --- a/es-core/src/HttpReq.cpp +++ b/es-core/src/HttpReq.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // HttpReq.cpp // // HTTP requests using libcurl. @@ -9,11 +9,13 @@ #include "HttpReq.h" +#include "ApplicationVersion.h" #include "Log.h" #include "Settings.h" #include "resources/ResourceManager.h" #include "utils/FileSystemUtil.h" +#include #include std::string HttpReq::urlEncode(const std::string& s) @@ -37,42 +39,41 @@ std::string HttpReq::urlEncode(const std::string& s) } HttpReq::HttpReq(const std::string& url, bool scraperRequest) - : mStatus(REQ_IN_PROGRESS) - , mHandle(nullptr) + : mStatus {REQ_IN_PROGRESS} + , mHandle {nullptr} , mTotalBytes {0} , mDownloadedBytes {0} , mScraperRequest {scraperRequest} { - // The multi-handle is cleaned up via a call from GuiScraperSearch after the scraping - // has been completed for a game, meaning the handle is valid for all curl requests - // performed for the current game. + // The multi-handle is cleaned up via an explicit call to cleanupCurlMulti() from any object + // that uses HttpReq. For example from GuiScraperSearch after scraping has been completed. if (!sMultiHandle) sMultiHandle = curl_multi_init(); mHandle = curl_easy_init(); -#if defined(USE_BUNDLED_CERTIFICATES) - // Use the bundled curl TLS/SSL certificates (which actually come from the Mozilla project). - // This is enabled by default on Windows. Although there is a possibility to use the OS - // provided Schannel certificates I haven't been able to get this to work, and it also seems - // to be problematic on older Windows versions. - // The bundled certificates are also required on Linux when building an AppImage package as - // distributions such as Debian, Ubuntu, Linux Mint and Manjaro place the TLS certificates in - // a different directory than for example Fedora and openSUSE. This makes curl unusable on - // these latter operating systems unless the bundled file is used. - curl_easy_setopt(mHandle, CURLOPT_CAINFO, - ResourceManager::getInstance() - .getResourcePath(":/certificates/curl-ca-bundle.crt") - .c_str()); -#endif - if (mHandle == nullptr) { mStatus = REQ_IO_ERROR; onError("curl_easy_init failed"); return; } - // Set the url. + if (!mPollThread) { + sStopPoll = false; + mPollThread = std::make_unique(&HttpReq::pollCurl, this); + } + +#if defined(USE_BUNDLED_CERTIFICATES) + // Use the bundled curl TLS/SSL certificates (which come from the Mozilla project). + // This is used on Windows and also on Android as there is no way for curl to access + // the system certificates on this OS. + curl_easy_setopt(mHandle, CURLOPT_CAINFO, + ResourceManager::getInstance() + .getResourcePath(":/certificates/curl-ca-bundle.crt") + .c_str()); +#endif + + // Set the URL. CURLcode err {curl_easy_setopt(mHandle, CURLOPT_URL, url.c_str())}; if (err != CURLE_OK) { mStatus = REQ_IO_ERROR; @@ -80,6 +81,32 @@ HttpReq::HttpReq(const std::string& url, bool scraperRequest) return; } + if (!mScraperRequest) { + // Set User-Agent. + std::string userAgent {"ES-DE Frontend/"}; + userAgent.append(PROGRAM_VERSION_STRING).append(" ("); +#if defined(__ANDROID__) + userAgent.append("Android"); +#elif defined(_WIN64) + userAgent.append("Windows"); +#elif defined(__APPLE__) + userAgent.append("macOS"); +#elif defined(__linux__) + userAgent.append("Linux"); +#elif defined(__unix__) + userAgent.append("Unix"); +#else + userAgent.append("Unknown"); +#endif + userAgent.append(")"); + CURLcode err {curl_easy_setopt(mHandle, CURLOPT_USERAGENT, userAgent.c_str())}; + if (err != CURLE_OK) { + mStatus = REQ_IO_ERROR; + onError(curl_easy_strerror(err)); + return; + } + } + long connectionTimeout; if (mScraperRequest) { @@ -172,7 +199,7 @@ HttpReq::HttpReq(const std::string& url, bool scraperRequest) } // Enable the curl progress meter. - err = curl_easy_setopt(mHandle, CURLOPT_NOPROGRESS, 0); + err = curl_easy_setopt(mHandle, CURLOPT_NOPROGRESS, mScraperRequest ? 1 : 0); if (err != CURLE_OK) { mStatus = REQ_IO_ERROR; onError(curl_easy_strerror(err)); @@ -188,11 +215,13 @@ HttpReq::HttpReq(const std::string& url, bool scraperRequest) } // Progress meter callback. - err = curl_easy_setopt(mHandle, CURLOPT_XFERINFOFUNCTION, HttpReq::transferProgress); - if (err != CURLE_OK) { - mStatus = REQ_IO_ERROR; - onError(curl_easy_strerror(err)); - return; + if (!mScraperRequest) { + err = curl_easy_setopt(mHandle, CURLOPT_XFERINFOFUNCTION, HttpReq::transferProgress); + if (err != CURLE_OK) { + mStatus = REQ_IO_ERROR; + onError(curl_easy_strerror(err)); + return; + } } // Fail on HTTP status codes >= 400. @@ -203,92 +232,33 @@ HttpReq::HttpReq(const std::string& url, bool scraperRequest) return; } - // Add the handle to our multi. - CURLMcode merr {curl_multi_add_handle(sMultiHandle, mHandle)}; - if (merr != CURLM_OK) { - mStatus = REQ_IO_ERROR; - onError(curl_multi_strerror(merr)); - return; - } + // Add the handle to the multi. This is done in pollCurl(), running in a separate thread. + std::unique_lock handleLock {sHandleMutex}; + sAddHandleQueue.push(mHandle); + handleLock.unlock(); + curl_multi_wakeup(sMultiHandle); + + std::unique_lock requestLock {sRequestMutex}; sRequests[mHandle] = this; + requestLock.unlock(); } HttpReq::~HttpReq() { if (mHandle) { + std::unique_lock requestLock {sRequestMutex}; sRequests.erase(mHandle); + requestLock.unlock(); - CURLMcode merr {curl_multi_remove_handle(sMultiHandle, mHandle)}; + std::unique_lock handleLock {sHandleMutex}; + sRemoveHandleQueue.push(mHandle); + handleLock.unlock(); - if (merr != CURLM_OK) { - LOG(LogError) << "Error removing curl_easy handle from curl_multi: " - << curl_multi_strerror(merr); - } - - curl_easy_cleanup(mHandle); + curl_multi_wakeup(sMultiHandle); } } -HttpReq::Status HttpReq::status() -{ - if (mStatus == REQ_IN_PROGRESS) { - int handleCount {0}; - CURLMcode merr {curl_multi_perform(sMultiHandle, &handleCount)}; - if (merr != CURLM_OK && merr != CURLM_CALL_MULTI_PERFORM) { - mStatus = REQ_IO_ERROR; - onError(curl_multi_strerror(merr)); - return mStatus; - } - - int msgsLeft; - CURLMsg* msg; - while ((msg = curl_multi_info_read(sMultiHandle, &msgsLeft)) != nullptr) { - if (msg->msg == CURLMSG_DONE) { - HttpReq* req {sRequests[msg->easy_handle]}; - - if (req == nullptr) { - LOG(LogError) << "Cannot find easy handle!"; - continue; - } - - if (msg->data.result == CURLE_OK) { - req->mStatus = REQ_SUCCESS; - } - else if (msg->data.result == CURLE_PEER_FAILED_VERIFICATION) { - req->mStatus = REQ_FAILED_VERIFICATION; - req->onError(curl_easy_strerror(msg->data.result)); - } - else if (msg->data.result == CURLE_HTTP_RETURNED_ERROR) { - long responseCode; - curl_easy_getinfo(msg->easy_handle, CURLINFO_RESPONSE_CODE, &responseCode); - - if (responseCode == 430 && - Settings::getInstance()->getString("Scraper") == "screenscraper") { - req->mContent << "You have exceeded your daily scrape quota"; - req->mStatus = REQ_SUCCESS; - } - else if (responseCode == 404 && mScraperRequest && - Settings::getInstance()->getBool("ScraperIgnoreHTTP404Errors")) { - req->mStatus = REQ_RESOURCE_NOT_FOUND; - } - else { - req->onError("Server returned HTTP error code " + - std::to_string(responseCode)); - req->mStatus = REQ_BAD_STATUS_CODE; - } - } - else { - req->mStatus = REQ_IO_ERROR; - req->onError(curl_easy_strerror(msg->data.result)); - } - } - } - } - - return mStatus; -} - std::string HttpReq::getContent() const { assert(mStatus == REQ_SUCCESS); @@ -298,21 +268,156 @@ std::string HttpReq::getContent() const int HttpReq::transferProgress( void* clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) { - // Note that it's not guaranteed that the server will actually provide the total size. - if (dltotal > 0) - static_cast(clientp)->mTotalBytes = static_cast(dltotal); - if (dlnow > 0) - static_cast(clientp)->mDownloadedBytes = static_cast(dlnow); + if (dltotal == 0 && dlnow == 0) + return CURLE_OK; + + // We need all the check logic below to make sure we're not attempting to write into + // a request that has just been removed by the main thread. + bool validEntry {false}; + + std::unique_lock requestLock {sRequestMutex}; + if (std::find_if(sRequests.cbegin(), sRequests.cend(), [&clientp](auto&& entry) { + return entry.second == clientp; + }) != sRequests.cend()) + validEntry = true; + + if (validEntry) { + // Note that it's not guaranteed that the server will actually provide the total size. + if (dltotal > 0) + static_cast(clientp)->mTotalBytes = static_cast(dltotal); + if (dlnow > 0) + static_cast(clientp)->mDownloadedBytes = static_cast(dlnow); + } + + requestLock.unlock(); return CURLE_OK; } size_t HttpReq::writeContent(void* buff, size_t size, size_t nmemb, void* req_ptr) { - // size = size of an element, nmemb = number of elements. - std::stringstream& ss {static_cast(req_ptr)->mContent}; - ss.write(static_cast(buff), size * nmemb); + // We need all the check logic below to make sure we're not attempting to write into + // a request that has just been removed by the main thread. + bool validEntry {false}; + + std::unique_lock requestLock {sRequestMutex}; + if (std::find_if(sRequests.cbegin(), sRequests.cend(), [&req_ptr](auto&& entry) { + return entry.second == req_ptr; + }) != sRequests.cend()) + validEntry = true; + + if (validEntry) { + // size = size of an element, nmemb = number of elements. + std::stringstream& ss {static_cast(req_ptr)->mContent}; + ss.write(static_cast(buff), size * nmemb); + } + + requestLock.unlock(); // Return value is number of elements successfully read. return nmemb; } + +void HttpReq::pollCurl() +{ + int numfds {0}; + + do { + if (!sStopPoll) + curl_multi_poll(sMultiHandle, nullptr, 0, 2000, &numfds); + + // Check if any easy handles should be added or removed. + std::unique_lock handleLock {sHandleMutex}; + + if (sAddHandleQueue.size() > 0) { + // Add the handle to our multi. + CURLMcode merr {curl_multi_add_handle(sMultiHandle, sAddHandleQueue.front())}; + + std::unique_lock requestLock {sRequestMutex}; + HttpReq* req {sRequests[sAddHandleQueue.front()]}; + if (merr != CURLM_OK) { + if (req != nullptr) { + req->mStatus = REQ_IO_ERROR; + req->onError(curl_multi_strerror(merr)); + LOG(LogError) << "onError(): " << curl_multi_strerror(merr); + } + } + else { + if (req != nullptr) + req->mStatus = REQ_IN_PROGRESS; + } + sAddHandleQueue.pop(); + requestLock.unlock(); + } + + if (sRemoveHandleQueue.size() > 0) { + // Remove the handle from our multi. + CURLMcode merr {curl_multi_remove_handle(sMultiHandle, sRemoveHandleQueue.front())}; + if (merr != CURLM_OK) { + LOG(LogError) << "Error removing curl easy handle from curl multi: " + << curl_multi_strerror(merr); + } + curl_easy_cleanup(sRemoveHandleQueue.front()); + sRemoveHandleQueue.pop(); + } + + handleLock.unlock(); + + if (sMultiHandle != nullptr && !sStopPoll) { + int handleCount {0}; + std::unique_lock handleLock {sHandleMutex}; + CURLMcode merr {curl_multi_perform(sMultiHandle, &handleCount)}; + handleLock.unlock(); + if (merr != CURLM_OK && merr != CURLM_CALL_MULTI_PERFORM) { + LOG(LogError) << "Error reading data from multi: " << curl_multi_strerror(merr); + } + + int msgsLeft; + CURLMsg* msg; + while (!sStopPoll && (msg = curl_multi_info_read(sMultiHandle, &msgsLeft)) != nullptr) { + if (msg->msg == CURLMSG_DONE) { + std::unique_lock requestLock {sRequestMutex}; + HttpReq* req {sRequests[msg->easy_handle]}; + + if (req == nullptr) { + LOG(LogError) << "Cannot find easy handle!"; + requestLock.unlock(); + continue; + } + + if (msg->data.result == CURLE_OK) { + req->mStatus = REQ_SUCCESS; + } + else if (msg->data.result == CURLE_PEER_FAILED_VERIFICATION) { + req->mStatus = REQ_FAILED_VERIFICATION; + req->onError(curl_easy_strerror(msg->data.result)); + } + else if (msg->data.result == CURLE_HTTP_RETURNED_ERROR) { + long responseCode; + curl_easy_getinfo(msg->easy_handle, CURLINFO_RESPONSE_CODE, &responseCode); + + if (responseCode == 430 && + Settings::getInstance()->getString("Scraper") == "screenscraper") { + req->mContent << "You have exceeded your daily scrape quota"; + req->mStatus = REQ_SUCCESS; + } + else if (responseCode == 404 && req->mScraperRequest && + Settings::getInstance()->getBool("ScraperIgnoreHTTP404Errors")) { + req->mStatus = REQ_RESOURCE_NOT_FOUND; + } + else { + req->mStatus = REQ_BAD_STATUS_CODE; + req->onError("Server returned HTTP error code " + + std::to_string(responseCode)); + } + } + else { + req->mStatus = REQ_IO_ERROR; + req->onError(curl_easy_strerror(msg->data.result)); + } + requestLock.unlock(); + } + } + } + } while (!sStopPoll || !sAddHandleQueue.empty() || !sRemoveHandleQueue.empty()); +} diff --git a/es-core/src/HttpReq.h b/es-core/src/HttpReq.h index 0de59915a..24f9489a9 100644 --- a/es-core/src/HttpReq.h +++ b/es-core/src/HttpReq.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // HttpReq.h // // HTTP requests using libcurl. @@ -14,7 +14,10 @@ #include #include +#include +#include #include +#include class HttpReq { @@ -35,8 +38,7 @@ public: // clang-format on }; - // Process any received data and return the status afterwards. - Status status(); + Status status() { return mStatus; } std::string getErrorMsg() { return mErrorMsg; } std::string getContent() const; @@ -44,9 +46,15 @@ public: long getDownloadedBytes() { return mDownloadedBytes; } static std::string urlEncode(const std::string& s); + + // Called explicitly from any object that uses HttpReq. static void cleanupCurlMulti() { if (sMultiHandle != nullptr) { + sStopPoll = true; + curl_multi_wakeup(sMultiHandle); + mPollThread->join(); + mPollThread.reset(); curl_multi_cleanup(sMultiHandle); sMultiHandle = nullptr; } @@ -60,14 +68,24 @@ private: void onError(const std::string& msg) { mErrorMsg = msg; } - static inline std::map sRequests; - static inline CURLM* sMultiHandle; + // Poll constantly to maintain network throughput even during VSyncs and other waiting states. + void pollCurl(); - Status mStatus; + static inline CURLM* sMultiHandle; + static inline std::map sRequests; + static inline std::queue sAddHandleQueue; + static inline std::queue sRemoveHandleQueue; + + std::atomic mStatus; CURL* mHandle; + static inline std::unique_ptr mPollThread; + static inline std::mutex sHandleMutex; + static inline std::mutex sRequestMutex; + std::stringstream mContent; std::string mErrorMsg; + static inline std::atomic sStopPoll = false; std::atomic mTotalBytes; std::atomic mDownloadedBytes; bool mScraperRequest; diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 8a9d947ff..d0e9d078e 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // InputManager.cpp // // Low-level input handling. @@ -26,6 +26,7 @@ #if defined(__ANDROID__) #define TOUCH_GUID_STRING "-3" +#include "utils/PlatformUtilAndroid.h" #endif namespace @@ -477,8 +478,11 @@ bool InputManager::parseEvent(const SDL_Event& event) return false; #if defined(__ANDROID__) - // Quit application if the back button is pressed. - if (event.key.keysym.sym == SDLK_AC_BACK) { + // Quit application if the back button is pressed or if the back gesture is used, + // unless we're set as the Android home app. + if (event.key.keysym.sym == SDLK_AC_BACK && + Settings::getInstance()->getBool("BackEventAppExit") && + !AndroidVariables::sIsHomeApp) { SDL_Event quit {}; quit.type = SDL_QUIT; SDL_PushEvent(&quit); @@ -492,7 +496,7 @@ bool InputManager::parseEvent(const SDL_Event& event) #if defined(__APPLE__) if (quitShortcut != "CmdQ") { #elif defined(__ANDROID__) - if (true) { + if (!AndroidVariables::sIsHomeApp) { #else if (quitShortcut != "AltF4") { #endif @@ -792,9 +796,15 @@ void InputManager::addControllerByDeviceIndex(Window* window, int deviceIndex) std::make_unique(joyID, SDL_GameControllerName(mControllers[joyID]), guid); bool customConfig {loadInputConfig(mInputConfigs[joyID].get())}; + +#if SDL_MAJOR_VERSION > 2 || (SDL_MAJOR_VERSION == 2 && SDL_MINOR_VERSION > 0) || \ + (SDL_MAJOR_VERSION == 2 && SDL_MINOR_VERSION == 0 && SDL_PATCHLEVEL >= 14) const std::string serialNumber {SDL_GameControllerGetSerial(controller) == nullptr ? "" : SDL_GameControllerGetSerial(controller)}; +#else + const std::string serialNumber; +#endif if (customConfig) { LOG(LogInfo) << "Added controller with custom configuration: \"" @@ -844,9 +854,14 @@ void InputManager::removeControllerByJoystickID(Window* window, SDL_JoystickID j return; } +#if SDL_MAJOR_VERSION > 2 || (SDL_MAJOR_VERSION == 2 && SDL_MINOR_VERSION > 0) || \ + (SDL_MAJOR_VERSION == 2 && SDL_MINOR_VERSION == 0 && SDL_PATCHLEVEL >= 14) const std::string serialNumber {SDL_GameControllerGetSerial(mControllers[joyID]) == nullptr ? "" : SDL_GameControllerGetSerial(mControllers[joyID])}; +#else + const std::string serialNumber; +#endif LOG(LogInfo) << "Removed controller \"" << SDL_GameControllerName(mControllers[joyID]) << "\" (GUID: " << guid diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index b77667975..cba5d53c4 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // InputManager.h // // Low-level input handling. diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index d17ce8335..58a423a46 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -303,6 +303,9 @@ void Settings::setDefaults() mBoolMap["MAMENameStripExtraInfo"] = {true, true}; #if defined(__unix__) && !defined(__ANDROID__) mBoolMap["DisableComposition"] = {false, false}; +#endif +#if defined(__ANDROID__) + mBoolMap["BackEventAppExit"] = {true, true}; #endif mBoolMap["DebugMode"] = {false, false}; mBoolMap["DisplayGPUStatistics"] = {false, false}; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 7cedb242d..e359c5ed5 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // ThemeData.cpp // // Finds available themes on the file system and loads and parses these. @@ -127,6 +127,7 @@ std::map> {"itemsAfterCenter", UNSIGNED_INTEGER}, {"itemStacking", STRING}, {"selectedItemMargins", NORMALIZED_PAIR}, + {"selectedItemOffset", NORMALIZED_PAIR}, {"itemSize", NORMALIZED_PAIR}, {"itemScale", FLOAT}, {"itemRotation", FLOAT}, @@ -134,6 +135,7 @@ std::map> {"itemAxisHorizontal", BOOLEAN}, {"itemAxisRotation", FLOAT}, {"imageFit", STRING}, + {"imageCropPos", NORMALIZED_PAIR}, {"imageInterpolation", STRING}, {"imageCornerRadius", FLOAT}, {"imageColor", COLOR}, @@ -201,6 +203,7 @@ std::map> {"unfocusedItemSaturation", FLOAT}, {"unfocusedItemDimming", FLOAT}, {"imageFit", STRING}, + {"imageCropPos", NORMALIZED_PAIR}, {"imageInterpolation", STRING}, {"imageRelativeScale", FLOAT}, {"imageCornerRadius", FLOAT}, @@ -264,6 +267,8 @@ std::map> {"selectedSecondaryColor", COLOR}, {"selectedBackgroundColor", COLOR}, {"selectedSecondaryBackgroundColor", COLOR}, + {"selectedBackgroundMargins", NORMALIZED_PAIR}, + {"selectedBackgroundCornerRadius", FLOAT}, {"textHorizontalScrolling", BOOLEAN}, {"textHorizontalScrollSpeed", FLOAT}, {"textHorizontalScrollDelay", FLOAT}, @@ -285,8 +290,9 @@ std::map> {"image", {{"pos", NORMALIZED_PAIR}, {"size", NORMALIZED_PAIR}, - {"cropSize", NORMALIZED_PAIR}, {"maxSize", NORMALIZED_PAIR}, + {"cropSize", NORMALIZED_PAIR}, + {"cropPos", NORMALIZED_PAIR}, {"origin", NORMALIZED_PAIR}, {"rotation", FLOAT}, {"rotationOrigin", NORMALIZED_PAIR}, @@ -319,8 +325,9 @@ std::map> {"video", {{"pos", NORMALIZED_PAIR}, {"size", NORMALIZED_PAIR}, - {"cropSize", NORMALIZED_PAIR}, {"maxSize", NORMALIZED_PAIR}, + {"cropSize", NORMALIZED_PAIR}, + {"cropPos", NORMALIZED_PAIR}, {"origin", NORMALIZED_PAIR}, {"rotation", FLOAT}, {"rotationOrigin", NORMALIZED_PAIR}, @@ -437,6 +444,8 @@ std::map> {"verticalAlignment", STRING}, {"color", COLOR}, {"backgroundColor", COLOR}, + {"backgroundMargins", NORMALIZED_PAIR}, + {"backgroundCornerRadius", FLOAT}, {"letterCase", STRING}, {"lineSpacing", FLOAT}, {"opacity", FLOAT}, diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index d6ed87fa3..f118ddc17 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // ThemeData.h // // Finds available themes on the file system and loads and parses these. diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 37f59a7e0..7d9370117 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // ImageComponent.cpp // // Handles images: loading, resizing, cropping, color shifting etc. @@ -23,6 +23,8 @@ ImageComponent::ImageComponent(bool forceLoad, bool dynamic) , mFlipY {false} , mTargetIsMax {false} , mTargetIsCrop {false} + , mCropPos {0.5f, 0.5f} + , mCropOffset {0.0f, 0.0f} , mTileWidth {0.0f} , mTileHeight {0.0f} , mColorShift {0xFFFFFFFF} @@ -231,18 +233,27 @@ void ImageComponent::coverFitCrop() mTopLeftCrop = {0.0f, 0.0f}; mBottomRightCrop = {1.0f, 1.0f}; + mCropOffset = {0.0f, 0.0f}; if (std::round(mSize.y) > std::round(mTargetSize.y)) { const float cropSize {1.0f - (std::round(mTargetSize.y) / std::round(mSize.y))}; cropTop(cropSize / 2.0f); cropBottom(cropSize / 2.0f); mSize.y = mSize.y - (mSize.y * cropSize); + if (mCropPos.y != 0.5f) { + const float cropPosY {mCropPos.y + 0.5f}; + mCropOffset.y = (cropSize * cropPosY) - cropSize; + } } else { const float cropSize {1.0f - (std::round(mTargetSize.x) / std::round(mSize.x))}; cropLeft(cropSize / 2.0f); cropRight(cropSize / 2.0f); mSize.x = mSize.x - (mSize.x * cropSize); + if (mCropPos.x != 0.5f) { + const float cropPosX {mCropPos.x + 0.5f}; + mCropOffset.x = (cropSize * cropPosX) - cropSize; + } } } @@ -537,6 +548,8 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, glm::vec2 imageCropSize {elem->get("cropSize")}; imageCropSize.x = glm::clamp(imageCropSize.x, 0.001f, 3.0f); imageCropSize.y = glm::clamp(imageCropSize.y, 0.001f, 3.0f); + if (elem->has("cropPos")) + mCropPos = glm::clamp(elem->get("cropPos"), 0.0f, 1.0f); setCroppedSize(imageCropSize * scale); } } @@ -840,10 +853,10 @@ void ImageComponent::updateVertices() if (mTileHeight == 0.0f) { // clang-format off - mVertices[0] = {{topLeft.x, topLeft.y }, {mTopLeftCrop.x, py - mTopLeftCrop.y }, 0}; - mVertices[1] = {{topLeft.x, bottomRight.y}, {mTopLeftCrop.x, 1.0f - mBottomRightCrop.y}, 0}; - mVertices[2] = {{bottomRight.x, topLeft.y }, {mBottomRightCrop.x * px, py - mTopLeftCrop.y }, 0}; - mVertices[3] = {{bottomRight.x, bottomRight.y}, {mBottomRightCrop.x * px, 1.0f - mBottomRightCrop.y}, 0}; + mVertices[0] = {{topLeft.x, topLeft.y }, {mTopLeftCrop.x + mCropOffset.x, py - mTopLeftCrop.y - mCropOffset.y }, 0}; + mVertices[1] = {{topLeft.x, bottomRight.y}, {mTopLeftCrop.x + mCropOffset.x, 1.0f - mBottomRightCrop.y - mCropOffset.y}, 0}; + mVertices[2] = {{bottomRight.x, topLeft.y }, {(mBottomRightCrop.x * px) + mCropOffset.x, py - mTopLeftCrop.y - mCropOffset.y }, 0}; + mVertices[3] = {{bottomRight.x, bottomRight.y}, {(mBottomRightCrop.x * px) + mCropOffset.x, 1.0f - mBottomRightCrop.y - mCropOffset.y}, 0}; // clang-format on } else { diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index 90c7a385b..6de0ca70e 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // ImageComponent.h // // Handles images: loading, resizing, cropping, color shifting etc. @@ -74,6 +74,9 @@ public: // cover image type (as the name may seem to imply). void coverFitCrop(); + // Texture position when using cover fit (cropping). + void setCropPos(const glm::vec2 cropPos) { mCropPos = cropPos; } + // This crops any entirely transparent areas around the actual image. // The arguments restrict how much the end result is allowed to be scaled. void cropTransparentPadding(const float maxSizeX, const float maxSizeY); @@ -129,6 +132,8 @@ private: bool mTargetIsMax; bool mTargetIsCrop; + glm::vec2 mCropPos; + glm::vec2 mCropOffset; float mTileWidth; float mTileHeight; diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index 715a70045..bb09627f1 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // TextComponent.cpp // // Displays text. @@ -18,6 +18,8 @@ TextComponent::TextComponent() , mRenderer {Renderer::getInstance()} , mColor {0x000000FF} , mBgColor {0x00000000} + , mBackgroundMargins {0.0f, 0.0f} + , mBackgroundCornerRadius {0.0f} , mColorOpacity {1.0f} , mBgColorOpacity {0.0f} , mRenderBackground {false} @@ -63,6 +65,8 @@ TextComponent::TextComponent(const std::string& text, , mRenderer {Renderer::getInstance()} , mColor {0x000000FF} , mBgColor {0x00000000} + , mBackgroundMargins {0.0f, 0.0f} + , mBackgroundCornerRadius {0.0f} , mColorOpacity {1.0f} , mBgColorOpacity {0.0f} , mRenderBackground {false} @@ -249,8 +253,21 @@ void TextComponent::render(const glm::mat4& parentTrans) auto renderFunc = [this](glm::mat4 trans, bool secondPass) { if (mRenderBackground && !secondPass) - mRenderer->drawRect(0.0f, 0.0f, mSize.x, mSize.y, mBgColor, mBgColor, false, - mOpacity * mThemeOpacity, mDimming); + if (mBackgroundMargins.x > 0.0f) { + trans = glm::translate(trans, glm::vec3 {-mBackgroundMargins.x, 0.0f, 0.0f}); + mRenderer->setMatrix(trans); + } + + mRenderer->drawRect(0.0f, 0.0f, mSize.x + mBackgroundMargins.x + mBackgroundMargins.y, + mSize.y, mBgColor, mBgColor, false, mOpacity * mThemeOpacity, mDimming, + Renderer::BlendFactor::SRC_ALPHA, + Renderer::BlendFactor::ONE_MINUS_SRC_ALPHA, mBackgroundCornerRadius); + + if (mBackgroundMargins.x > 0.0f) { + trans = glm::translate(trans, glm::vec3 {mBackgroundMargins.x, 0.0f, 0.0f}); + mRenderer->setMatrix(trans); + } + if (mTextCache) { const float textHeight {mTextCache->metrics.size.y}; float yOff {0.0f}; @@ -718,6 +735,18 @@ void TextComponent::applyTheme(const std::shared_ptr& theme, } } + if (elem->has("backgroundMargins")) { + const glm::vec2 backgroundMargins { + glm::clamp(elem->get("backgroundMargins"), 0.0f, 0.5f)}; + mBackgroundMargins = backgroundMargins * Renderer::getScreenWidth(); + } + + if (elem->has("backgroundCornerRadius")) { + mBackgroundCornerRadius = + glm::clamp(elem->get("backgroundCornerRadius"), 0.0f, 0.5f) * + mRenderer->getScreenWidth(); + } + if (properties & LETTER_CASE && elem->has("letterCaseSystemNameSuffix")) { const std::string& letterCase {elem->get("letterCaseSystemNameSuffix")}; if (letterCase == "uppercase") { diff --git a/es-core/src/components/TextComponent.h b/es-core/src/components/TextComponent.h index 837c8c92e..68ff7ece8 100644 --- a/es-core/src/components/TextComponent.h +++ b/es-core/src/components/TextComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // TextComponent.h // // Displays text. @@ -155,6 +155,8 @@ private: std::string mDefaultValue; unsigned int mColor; unsigned int mBgColor; + glm::vec2 mBackgroundMargins; + float mBackgroundCornerRadius; float mColorOpacity; float mBgColorOpacity; bool mRenderBackground; diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index af20c72e9..28de18508 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // VideoComponent.cpp // // Base class for playing videos. @@ -26,6 +26,8 @@ VideoComponent::VideoComponent() , mVideoCornerRadius {0.0f} , mColorGradientHorizontal {true} , mTargetSize {0.0f, 0.0f} + , mCropPos {0.5f, 0.5f} + , mCropOffset {0.0f, 0.0f} , mVideoAreaPos {0.0f, 0.0f} , mVideoAreaSize {0.0f, 0.0f} , mTopLeftCrop {0.0f, 0.0f} @@ -161,6 +163,8 @@ void VideoComponent::applyTheme(const std::shared_ptr& theme, glm::vec2 videoCropSize {elem->get("cropSize")}; videoCropSize.x = glm::clamp(videoCropSize.x, 0.01f, 2.0f); videoCropSize.y = glm::clamp(videoCropSize.y, 0.01f, 2.0f); + if (elem->has("cropPos")) + mCropPos = glm::clamp(elem->get("cropPos"), 0.0f, 1.0f); setCroppedSize(videoCropSize * scale); mVideoAreaSize = videoCropSize * scale; } diff --git a/es-core/src/components/VideoComponent.h b/es-core/src/components/VideoComponent.h index a9347c567..f23879861 100644 --- a/es-core/src/components/VideoComponent.h +++ b/es-core/src/components/VideoComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // VideoComponent.h // // Base class for playing videos. @@ -115,6 +115,8 @@ protected: float mVideoCornerRadius; bool mColorGradientHorizontal; glm::vec2 mTargetSize; + glm::vec2 mCropPos; + glm::vec2 mCropOffset; glm::vec2 mVideoAreaPos; glm::vec2 mVideoAreaSize; glm::vec2 mTopLeftCrop; diff --git a/es-core/src/components/VideoFFmpegComponent.cpp b/es-core/src/components/VideoFFmpegComponent.cpp index a6838231e..566d1b48a 100644 --- a/es-core/src/components/VideoFFmpegComponent.cpp +++ b/es-core/src/components/VideoFFmpegComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // VideoFFmpegComponent.cpp // // Video player based on FFmpeg. @@ -88,6 +88,7 @@ void VideoFFmpegComponent::setCroppedSize(const glm::vec2& size) mTargetSize = size; mTargetIsMax = false; mTargetIsCrop = true; + mStaticImage.setCropPos(mCropPos); mStaticImage.setCroppedSize(size); resize(); } @@ -122,6 +123,9 @@ void VideoFFmpegComponent::resize() // Size texture to allow for cropped video to fill the entire area. const float cropFactor { std::max(mTargetSize.x / textureSize.x, mTargetSize.y / textureSize.y)}; + mTopLeftCrop = {0.0f, 0.0f}; + mBottomRightCrop = {1.0f, 1.0f}; + mCropOffset = {0.0f, 0.0f}; mSize = textureSize * cropFactor; if (std::round(mSize.y) > std::round(mTargetSize.y)) { @@ -129,12 +133,20 @@ void VideoFFmpegComponent::resize() mTopLeftCrop.y = cropSize / 2.0f; mBottomRightCrop.y = 1.0f - (cropSize / 2.0f); mSize.y = mSize.y - (mSize.y * cropSize); + if (mCropPos.y != 0.5f) { + const float cropPosY {mCropPos.y + 0.5f}; + mCropOffset.y = (cropSize * cropPosY) - cropSize; + } } else { const float cropSize {1.0f - (mTargetSize.x / std::round(mSize.x))}; mTopLeftCrop.x = cropSize / 2.0f; mBottomRightCrop.x = 1.0f - (cropSize / 2.0f); mSize.x = mSize.x - (mSize.x * cropSize); + if (mCropPos.x != 0.5f) { + const float cropPosX {mCropPos.x + 0.5f}; + mCropOffset.x = cropSize - (cropSize * cropPosX); + } } } else { @@ -201,10 +213,10 @@ void VideoFFmpegComponent::render(const glm::mat4& parentTrans) return; // clang-format off - vertices[0] = {{0.0f, 0.0f }, {mTopLeftCrop.x, 1.0f - mBottomRightCrop.y}, 0xFFFFFFFF}; - vertices[1] = {{0.0f, mSize.y}, {mTopLeftCrop.x, 1.0f - mTopLeftCrop.y }, 0xFFFFFFFF}; - vertices[2] = {{mSize.x, 0.0f }, {mBottomRightCrop.x * 1.0f, 1.0f - mBottomRightCrop.y}, 0xFFFFFFFF}; - vertices[3] = {{mSize.x, mSize.y}, {mBottomRightCrop.x * 1.0f, 1.0f - mTopLeftCrop.y }, 0xFFFFFFFF}; + vertices[0] = {{0.0f, 0.0f }, {mTopLeftCrop.x - mCropOffset.x, 1.0f - mBottomRightCrop.y + mCropOffset.y}, 0xFFFFFFFF}; + vertices[1] = {{0.0f, mSize.y}, {mTopLeftCrop.x - mCropOffset.x, 1.0f - mTopLeftCrop.y + mCropOffset.y }, 0xFFFFFFFF}; + vertices[2] = {{mSize.x, 0.0f }, {(mBottomRightCrop.x * 1.0f) - mCropOffset.x, 1.0f - mBottomRightCrop.y + mCropOffset.y}, 0xFFFFFFFF}; + vertices[3] = {{mSize.x, mSize.y}, {(mBottomRightCrop.x * 1.0f) - mCropOffset.x, 1.0f - mTopLeftCrop.y + mCropOffset.y }, 0xFFFFFFFF}; // clang-format on vertices[0].color = mColorShift; diff --git a/es-core/src/components/VideoFFmpegComponent.h b/es-core/src/components/VideoFFmpegComponent.h index 85ccdcf39..24691dc17 100644 --- a/es-core/src/components/VideoFFmpegComponent.h +++ b/es-core/src/components/VideoFFmpegComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // VideoFFmpegComponent.h // // Video player based on FFmpeg. diff --git a/es-core/src/components/primary/CarouselComponent.h b/es-core/src/components/primary/CarouselComponent.h index 76ba383de..0645885cc 100644 --- a/es-core/src/components/primary/CarouselComponent.h +++ b/es-core/src/components/primary/CarouselComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // CarouselComponent.h // // Carousel, usable in both the system and gamelist views. @@ -159,6 +159,7 @@ private: int mItemsAfterCenter; ItemStacking mItemStacking; glm::vec2 mSelectedItemMargins; + glm::vec2 mSelectedItemOffset; glm::vec2 mItemSize; float mItemScale; float mItemRotation; @@ -192,6 +193,7 @@ private: bool mHasUnfocusedItemSaturation; float mUnfocusedItemDimming; ImageFit mImagefit; + glm::vec2 mImageCropPos; unsigned int mCarouselColor; unsigned int mCarouselColorEnd; bool mColorGradientHorizontal; @@ -234,6 +236,7 @@ CarouselComponent::CarouselComponent() , mItemsAfterCenter {8} , mItemStacking {ItemStacking::CENTERED} , mSelectedItemMargins {0.0f, 0.0f} + , mSelectedItemOffset {0.0f, 0.0f} , mItemSize {glm::vec2 {Renderer::getScreenWidth() * 0.25f, Renderer::getScreenHeight() * 0.155f}} , mItemScale {1.2f} @@ -268,6 +271,7 @@ CarouselComponent::CarouselComponent() , mHasUnfocusedItemSaturation {false} , mUnfocusedItemDimming {1.0f} , mImagefit {ImageFit::CONTAIN} + , mImageCropPos {0.5f, 0.5f} , mCarouselColor {0} , mCarouselColorEnd {0} , mColorGradientHorizontal {true} @@ -305,12 +309,16 @@ void CarouselComponent::addEntry(Entry& entry, const std::shared_ptr(false, dynamic); item->setLinearInterpolation(mLinearInterpolation); item->setMipmapping(true); - if (mImagefit == ImageFit::CONTAIN) + if (mImagefit == ImageFit::CONTAIN) { item->setMaxSize(glm::round(mItemSize * (mItemScale >= 1.0f ? mItemScale : 1.0f))); - else if (mImagefit == ImageFit::FILL) + } + else if (mImagefit == ImageFit::FILL) { item->setResize(glm::round(mItemSize * (mItemScale >= 1.0f ? mItemScale : 1.0f))); - else if (mImagefit == ImageFit::COVER) + } + else if (mImagefit == ImageFit::COVER) { + item->setCropPos(mImageCropPos); item->setCroppedSize(glm::round(mItemSize * (mItemScale >= 1.0f ? mItemScale : 1.0f))); + } item->setCornerRadius(mImageCornerRadius); item->setImage(entry.data.imagePath); if (mImageBrightness != 0.0) @@ -332,15 +340,19 @@ void CarouselComponent::addEntry(Entry& entry, const std::shared_ptr(false, dynamic); mDefaultImage->setLinearInterpolation(mLinearInterpolation); mDefaultImage->setMipmapping(true); - if (mImagefit == ImageFit::CONTAIN) + if (mImagefit == ImageFit::CONTAIN) { mDefaultImage->setMaxSize( glm::round(mItemSize * (mItemScale >= 1.0f ? mItemScale : 1.0f))); - else if (mImagefit == ImageFit::FILL) + } + else if (mImagefit == ImageFit::FILL) { mDefaultImage->setResize( glm::round(mItemSize * (mItemScale >= 1.0f ? mItemScale : 1.0f))); - else if (mImagefit == ImageFit::COVER) + } + else if (mImagefit == ImageFit::COVER) { + mDefaultImage->setCropPos(mImageCropPos); mDefaultImage->setCroppedSize( glm::round(mItemSize * (mItemScale >= 1.0f ? mItemScale : 1.0f))); + } mDefaultImage->setCornerRadius(mImageCornerRadius); mDefaultImage->setImage(entry.data.defaultImagePath); if (mImageBrightness != 0.0) @@ -409,12 +421,16 @@ void CarouselComponent::updateEntry(Entry& entry, const std::shared_ptr(false, true); item->setLinearInterpolation(mLinearInterpolation); item->setMipmapping(true); - if (mImagefit == ImageFit::CONTAIN) + if (mImagefit == ImageFit::CONTAIN) { item->setMaxSize(glm::round(mItemSize * (mItemScale >= 1.0f ? mItemScale : 1.0f))); - else if (mImagefit == ImageFit::FILL) + } + else if (mImagefit == ImageFit::FILL) { item->setResize(glm::round(mItemSize * (mItemScale >= 1.0f ? mItemScale : 1.0f))); - else if (mImagefit == ImageFit::COVER) + } + else if (mImagefit == ImageFit::COVER) { + item->setCropPos(mImageCropPos); item->setCroppedSize(glm::round(mItemSize * (mItemScale >= 1.0f ? mItemScale : 1.0f))); + } item->setCornerRadius(mImageCornerRadius); item->setImage(entry.data.imagePath); if (mImageBrightness != 0.0) @@ -512,7 +528,7 @@ template void CarouselComponent::onDemandTextureLoad() itemInclusion += 1; } - for (int i = center - itemInclusion - itemInclusionBefore; + for (int i {center - itemInclusion - itemInclusionBefore}; i < center + itemInclusion + itemInclusionAfter; ++i) { int cursor {i}; @@ -918,13 +934,25 @@ template void CarouselComponent::render(const glm::mat4& parentT selectedItemMargins *= std::fabs(distance); } + float itemHorizontalOffset {0.0f}; + float itemVerticallOffset {0.0f}; + + if ((mSelectedItemOffset.x != 0.0f || mSelectedItemOffset.y != 0.0f) && + std::fabs(distance) < 1.0f) { + itemHorizontalOffset = (1.0f - std::fabs(distance)) * mSelectedItemOffset.x; + itemVerticallOffset = (1.0f - std::fabs(distance)) * mSelectedItemOffset.y; + } + glm::mat4 itemTrans {carouselTrans}; if (singleEntry) itemTrans = glm::translate(carouselTrans, glm::vec3 {xOff, yOff, 0.0f}); else itemTrans = glm::translate( - itemTrans, glm::vec3 {(i * itemSpacing.x) + xOff + selectedItemMargins.x, - (i * itemSpacing.y) + yOff + selectedItemMargins.y, 0.0f}); + itemTrans, + glm::vec3 {(i * itemSpacing.x) + xOff + itemHorizontalOffset + + selectedItemMargins.x, + (i * itemSpacing.y) + yOff + itemVerticallOffset + selectedItemMargins.y, + 0.0f}); if (mType == CarouselType::HORIZONTAL_WHEEL) itemTrans = glm::rotate(itemTrans, glm::radians(-90.0f), glm::vec3 {0.0f, 0.0f, 1.0f}); @@ -1377,6 +1405,14 @@ void CarouselComponent::applyTheme(const std::shared_ptr& theme, else mSelectedItemMargins = selectedItemMargins * Renderer::getScreenHeight(); } + if (elem->has("selectedItemOffset")) { + const glm::vec2 selectedItemOffset { + glm::clamp(elem->get("selectedItemOffset"), -1.0f, 1.0f)}; + if (mType == CarouselType::HORIZONTAL) + mSelectedItemOffset = selectedItemOffset * Renderer::getScreenWidth(); + else + mSelectedItemOffset = selectedItemOffset * Renderer::getScreenHeight(); + } } if (elem->has("itemSize")) { @@ -1422,6 +1458,8 @@ void CarouselComponent::applyTheme(const std::shared_ptr& theme, } else if (imageFit == "cover") { mImagefit = ImageFit::COVER; + if (elem->has("imageCropPos")) + mImageCropPos = glm::clamp(elem->get("imageCropPos"), 0.0f, 1.0f); } else { mImagefit = ImageFit::CONTAIN; diff --git a/es-core/src/components/primary/GridComponent.h b/es-core/src/components/primary/GridComponent.h index 939edc5e2..78c7bc4ff 100644 --- a/es-core/src/components/primary/GridComponent.h +++ b/es-core/src/components/primary/GridComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // GridComponent.h // // Grid, usable in both the system and gamelist views. @@ -161,6 +161,7 @@ private: bool mHasUnfocusedItemSaturation; float mUnfocusedItemDimming; ImageFit mImagefit; + glm::vec2 mImageCropPos; bool mImageLinearInterpolation; float mImageRelativeScale; float mImageCornerRadius; @@ -239,6 +240,7 @@ GridComponent::GridComponent() , mHasUnfocusedItemSaturation {false} , mUnfocusedItemDimming {1.0f} , mImagefit {ImageFit::CONTAIN} + , mImageCropPos {0.5f, 0.5f} , mImageLinearInterpolation {true} , mImageRelativeScale {1.0f} , mImageCornerRadius {0.0f} @@ -304,12 +306,16 @@ void GridComponent::addEntry(Entry& entry, const std::shared_ptr& auto item = std::make_shared(false, dynamic); item->setLinearInterpolation(mImageLinearInterpolation); item->setMipmapping(true); - if (mImagefit == ImageFit::CONTAIN) + if (mImagefit == ImageFit::CONTAIN) { item->setMaxSize(glm::round(mItemSize * mImageRelativeScale)); - else if (mImagefit == ImageFit::FILL) + } + else if (mImagefit == ImageFit::FILL) { item->setResize(glm::round(mItemSize * mImageRelativeScale)); - else if (mImagefit == ImageFit::COVER) + } + else if (mImagefit == ImageFit::COVER) { + item->setCropPos(mImageCropPos); item->setCroppedSize(glm::round(mItemSize * mImageRelativeScale)); + } item->setCornerRadius(mImageCornerRadius); item->setImage(entry.data.imagePath); if (mImageBrightness != 0.0) @@ -336,12 +342,16 @@ void GridComponent::addEntry(Entry& entry, const std::shared_ptr& mDefaultImage = std::make_shared(false, dynamic); mDefaultImage->setLinearInterpolation(mImageLinearInterpolation); mDefaultImage->setMipmapping(true); - if (mImagefit == ImageFit::CONTAIN) + if (mImagefit == ImageFit::CONTAIN) { mDefaultImage->setMaxSize(glm::round(mItemSize * mImageRelativeScale)); - else if (mImagefit == ImageFit::FILL) + } + else if (mImagefit == ImageFit::FILL) { mDefaultImage->setResize(glm::round(mItemSize * mImageRelativeScale)); - else if (mImagefit == ImageFit::COVER) + } + else if (mImagefit == ImageFit::COVER) { + mDefaultImage->setCropPos(mImageCropPos); mDefaultImage->setCroppedSize(glm::round(mItemSize * mImageRelativeScale)); + } mDefaultImage->setCornerRadius(mImageCornerRadius); mDefaultImage->setImage(entry.data.defaultImagePath); if (mImageBrightness != 0.0) @@ -393,12 +403,16 @@ void GridComponent::updateEntry(Entry& entry, const std::shared_ptr(false, true); item->setLinearInterpolation(mImageLinearInterpolation); item->setMipmapping(true); - if (mImagefit == ImageFit::CONTAIN) + if (mImagefit == ImageFit::CONTAIN) { item->setMaxSize(glm::round(mItemSize * mImageRelativeScale)); - else if (mImagefit == ImageFit::FILL) + } + else if (mImagefit == ImageFit::FILL) { item->setResize(glm::round(mItemSize * mImageRelativeScale)); - else if (mImagefit == ImageFit::COVER) + } + else if (mImagefit == ImageFit::COVER) { + item->setCropPos(mImageCropPos); item->setCroppedSize(glm::round(mItemSize * mImageRelativeScale)); + } item->setCornerRadius(mImageCornerRadius); item->setImage(entry.data.imagePath); if (mImageBrightness != 0.0) @@ -1042,6 +1056,8 @@ void GridComponent::applyTheme(const std::shared_ptr& theme, } else if (imageFit == "cover") { mImagefit = ImageFit::COVER; + if (elem->has("imageCropPos")) + mImageCropPos = glm::clamp(elem->get("imageCropPos"), 0.0f, 1.0f); } else { mImagefit = ImageFit::CONTAIN; diff --git a/es-core/src/components/primary/PrimaryComponent.h b/es-core/src/components/primary/PrimaryComponent.h index 613c3821e..14b8d8881 100644 --- a/es-core/src/components/primary/PrimaryComponent.h +++ b/es-core/src/components/primary/PrimaryComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // PrimaryComponent.h // // Base class for the primary components (carousel, grid and textlist). diff --git a/es-core/src/components/primary/TextListComponent.h b/es-core/src/components/primary/TextListComponent.h index 069b5663d..4be5d0a0f 100644 --- a/es-core/src/components/primary/TextListComponent.h +++ b/es-core/src/components/primary/TextListComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // TextListComponent.h // // Text list, usable in both the system and gamelist views. @@ -137,6 +137,8 @@ private: unsigned int mSelectedSecondaryColor; unsigned int mSelectedBackgroundColor; unsigned int mSelectedSecondaryBackgroundColor; + glm::vec2 mSelectedBackgroundMargins; + float mSelectedBackgroundCornerRadius; bool mHorizontalScrolling; float mHorizontalScrollSpeed; float mHorizontalScrollDelay; @@ -176,6 +178,8 @@ TextListComponent::TextListComponent() , mSelectedSecondaryColor {0x00FF00FF} , mSelectedBackgroundColor {0x00000000} , mSelectedSecondaryBackgroundColor {0x00000000} + , mSelectedBackgroundMargins {0.0f, 0.0f} + , mSelectedBackgroundCornerRadius {0.0f} , mHorizontalScrolling {true} , mHorizontalScrollSpeed {1.0f} , mHorizontalScrollDelay {3000.0f} @@ -349,10 +353,19 @@ template void TextListComponent::render(const glm::mat4& parentT dim.x = (trans[0].x * dim.x + trans[3].x) - trans[3].x; dim.y = (trans[1].y * dim.y + trans[3].y) - trans[3].y; + float horizontalOffset {0.0f}; + if (mAlignment == PrimaryAlignment::ALIGN_LEFT && mSelectorHorizontalOffset < 0.0f) + horizontalOffset = mSelectorHorizontalOffset; + else if (mAlignment == PrimaryAlignment::ALIGN_RIGHT && mSelectorHorizontalOffset > 0.0f) + horizontalOffset = mSelectorHorizontalOffset; + mRenderer->pushClipRect( - glm::ivec2 {static_cast(std::round(trans[3].x + mHorizontalMargin)), + glm::ivec2 {static_cast(std::round(trans[3].x + horizontalOffset + mHorizontalMargin + + -mSelectedBackgroundMargins.x)), static_cast(std::round(trans[3].y))}, - glm::ivec2 {static_cast(std::round(dim.x - mHorizontalMargin * 2.0f)), + glm::ivec2 {static_cast(std::round((dim.x - mHorizontalMargin * 2.0f) + + mSelectedBackgroundMargins.x + + mSelectedBackgroundMargins.y)), static_cast(std::round(dim.y))}); for (int i {startEntry}; i < listCutoff; ++i) { @@ -409,9 +422,27 @@ template void TextListComponent::render(const glm::mat4& parentT mRenderer->setMatrix(drawTrans); if (i == mCursor && backgroundColor != 0x00000000) { - mRenderer->drawRect(mSelectorHorizontalOffset, mSelectorVerticalOffset, - entry.data.entryName->getSize().x, mSelectorHeight, backgroundColor, - backgroundColor); + if (mSelectorHorizontalOffset != 0.0f || mSelectedBackgroundMargins.x != 0.0f) { + drawTrans = glm::translate( + drawTrans, glm::vec3 {mSelectorHorizontalOffset - mSelectedBackgroundMargins.x, + 0.0f, 0.0f}); + mRenderer->setMatrix(drawTrans); + } + + mRenderer->drawRect(0.0f, mSelectorVerticalOffset, + entry.data.entryName->getSize().x + mSelectedBackgroundMargins.x + + mSelectedBackgroundMargins.y, + mSelectorHeight, backgroundColor, backgroundColor, false, 1.0f, + 1.0f, Renderer::BlendFactor::SRC_ALPHA, + Renderer::BlendFactor::ONE_MINUS_SRC_ALPHA, + mSelectedBackgroundCornerRadius); + + if (mSelectorHorizontalOffset != 0.0f || mSelectedBackgroundMargins.x != 0.0f) { + drawTrans = glm::translate( + drawTrans, glm::vec3 {-mSelectorHorizontalOffset + mSelectedBackgroundMargins.x, + 0.0f, 0.0f}); + mRenderer->setMatrix(drawTrans); + } } entry.data.entryName->render(drawTrans); @@ -487,6 +518,18 @@ void TextListComponent::applyTheme(const std::shared_ptr& theme, mSelectedSecondaryBackgroundColor = mSelectedBackgroundColor; } + if (elem->has("selectedBackgroundMargins")) { + const glm::vec2 selectedBackgroundMargins { + glm::clamp(elem->get("selectedBackgroundMargins"), 0.0f, 0.5f)}; + mSelectedBackgroundMargins = selectedBackgroundMargins * Renderer::getScreenWidth(); + } + + if (elem->has("selectedBackgroundCornerRadius")) { + mSelectedBackgroundCornerRadius = + glm::clamp(elem->get("selectedBackgroundCornerRadius"), 0.0f, 0.5f) * + mRenderer->getScreenWidth(); + } + if (elem->has("textHorizontalScrolling")) mHorizontalScrolling = elem->get("textHorizontalScrolling"); diff --git a/es-core/src/renderers/Renderer.cpp b/es-core/src/renderers/Renderer.cpp index 33624d07c..2a51ad3e1 100644 --- a/es-core/src/renderers/Renderer.cpp +++ b/es-core/src/renderers/Renderer.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // Renderer.cpp // // Generic rendering functions. @@ -466,7 +466,8 @@ void Renderer::drawRect(const float x, const float opacity, const float dimming, const BlendFactor srcBlendFactor, - const BlendFactor dstBlendFactor) + const BlendFactor dstBlendFactor, + const float cornerRadius) { Vertex vertices[4]; @@ -494,6 +495,11 @@ void Renderer::drawRect(const float x, vertices->opacity = opacity; vertices->dimming = dimming; + if (cornerRadius > 0.0f) { + vertices->shaderFlags = vertices->shaderFlags | Renderer::ShaderFlags::ROUNDED_CORNERS; + vertices->cornerRadius = cornerRadius; + } + bindTexture(0, 0); drawTriangleStrips(vertices, 4, srcBlendFactor, dstBlendFactor); } diff --git a/es-core/src/renderers/Renderer.h b/es-core/src/renderers/Renderer.h index 4ec4d1dfa..7d624df06 100644 --- a/es-core/src/renderers/Renderer.h +++ b/es-core/src/renderers/Renderer.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // Renderer.h // // Generic rendering functions. @@ -174,10 +174,11 @@ public: const unsigned int color, const unsigned int colorEnd, const bool horizontalGradient = false, - const float opacity = 1.0, - const float dimming = 1.0, + const float opacity = 1.0f, + const float dimming = 1.0f, const BlendFactor srcBlendFactor = BlendFactor::SRC_ALPHA, - const BlendFactor dstBlendFactor = BlendFactor::ONE_MINUS_SRC_ALPHA); + const BlendFactor dstBlendFactor = BlendFactor::ONE_MINUS_SRC_ALPHA, + const float cornerRadius = 0.0f); const glm::mat4& getProjectionMatrix() { return mProjectionMatrix; } const glm::mat4& getProjectionMatrixNormal() { return mProjectionMatrixNormal; } diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index 5e6c3e00c..345f6e0bf 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // Font.h // // Loading, unloading, caching and rendering of fonts. @@ -639,18 +639,16 @@ void Font::rebuildTextures() // Load the glyph bitmap through FT. FT_Load_Char(face, it->first, FT_LOAD_RENDER); - FontTexture* tex {it->second.texture}; + const glm::ivec2 glyphSize {glyphSlot->bitmap.width, glyphSlot->bitmap.rows}; + const glm::ivec2 cursor { + static_cast(it->second.texPos.x * it->second.texture->textureSize.x), + static_cast(it->second.texPos.y * it->second.texture->textureSize.y)}; - // Find the position/size. - glm::ivec2 cursor {static_cast(it->second.texPos.x * tex->textureSize.x), - static_cast(it->second.texPos.y * tex->textureSize.y)}; - glm::ivec2 glyphSize {static_cast(it->second.texSize.x * tex->textureSize.x), - static_cast(it->second.texSize.y * tex->textureSize.y)}; - - // Upload to texture. + // Upload glyph bitmap to texture. if (glyphSize.x > 0 && glyphSize.y > 0) { - mRenderer->updateTexture(tex->textureId, 0, Renderer::TextureType::RED, cursor.x, - cursor.y, glyphSize.x, glyphSize.y, glyphSlot->bitmap.buffer); + mRenderer->updateTexture(it->second.texture->textureId, 0, Renderer::TextureType::RED, + cursor.x, cursor.y, glyphSize.x, glyphSize.y, + glyphSlot->bitmap.buffer); } } } diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index b46d37290..f0802da2a 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // Font.h // // Loading, unloading, caching and rendering of fonts. diff --git a/es-pdf-converter/CMakeLists.txt b/es-pdf-converter/CMakeLists.txt index 3857bdd47..7aaa1b49f 100644 --- a/es-pdf-converter/CMakeLists.txt +++ b/es-pdf-converter/CMakeLists.txt @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE Frontend # CMakeLists.txt (es-pdf-converter) # # CMake configuration for es-pdf-convert diff --git a/latest_release.json b/latest_release.json index 5a05f5dff..63b4ec1f6 100644 --- a/latest_release.json +++ b/latest_release.json @@ -1,55 +1,55 @@ { - "comment": "Latest release of ES-DE (EmulationStation Desktop Edition)", + "comment": "Latest release of ES-DE Frontend", "website": "https://es-de.org/", "repository": "https://gitlab.com/es-de/", "stable": { - "version": "3.0.1", - "release": "42", - "date": "2024-03-16", - "androidVersionName": "3.0.1-19", - "androidVersionCode": "19", - "androidDate": "2024-03-16", + "version": "3.0.3", + "release": "44", + "date": "2024-06-14", + "androidVersionName": "3.0.2-21", + "androidVersionCode": "21", + "androidDate": "2024-05-13", "packages": [ { "name": "WindowsPortable", - "filename": "ES-DE_3.0.1-x64_Portable.zip", - "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/117882093/download", - "md5": "161a5700a4027183e3b2a994d6020fba", + "filename": "ES-DE_3.0.3-x64_Portable.zip", + "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/132901075/download", + "md5": "bb8c5b83ce42e111ed1905c3fb3913d6", "message": "" }, { "name": "WindowsInstaller", - "filename": "ES-DE_3.0.1-x64.exe", - "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/117882078/download", - "md5": "6b21884508c8ce795320b41c569c77ee", + "filename": "ES-DE_3.0.3-x64.exe", + "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/132901031/download", + "md5": "6446d55cdcdf4db5ab69b46048e24206", "message": "" }, { "name": "macOSApple", - "filename": "ES-DE_3.0.1-arm64.dmg", - "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/117882005/download", - "md5": "1ccb1a3ba1096eeff3b3451acaad2596", + "filename": "ES-DE_3.0.3-arm64.dmg", + "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/132900941/download", + "md5": "3863d8902894499992c6aa79f1d6d710", "message": "" }, { "name": "macOSIntel", - "filename": "ES-DE_3.0.1-x64.dmg", - "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/117882072/download", - "md5": "ffb7ad08377668016d31afca3d4b762b", + "filename": "ES-DE_3.0.3-x64.dmg", + "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/132900999/download", + "md5": "1602ffd2ed49c70c8c17f7da8d8ffdc5", "message": "" }, { "name": "LinuxAppImage", "filename": "ES-DE_x64.AppImage", - "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/117882100/download", - "md5": "bfef621f7f421a1066202620a9494e79", + "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/132901118/download", + "md5": "bf41f2e1faa75f148c9b7b764470cd45", "message": "" }, { "name": "LinuxSteamDeckAppImage", "filename": "ES-DE_x64_SteamDeck.AppImage", - "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/117882116/download", - "md5": "6433f2b350ab6c8318220191aa36eb8e", + "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/132901183/download", + "md5": "10e160abf040179ce4119bd5a013623b", "message": "" } ] diff --git a/resources/MAME/mamebioses.xml b/resources/MAME/mamebioses.xml index b3a800174..7abd75530 100644 --- a/resources/MAME/mamebioses.xml +++ b/resources/MAME/mamebioses.xml @@ -1,4 +1,4 @@ - + 3dobios airlbios aleck64 @@ -8,6 +8,7 @@ ar_bios aristmk5 aristmk6 +aristmk7 atarisy1 atluspsx atpsx diff --git a/resources/MAME/mamedevices.xml b/resources/MAME/mamedevices.xml index 29e7d7756..e2745595a 100644 --- a/resources/MAME/mamedevices.xml +++ b/resources/MAME/mamedevices.xml @@ -1,4 +1,4 @@ - + 22vp931 3c505 3xtwin @@ -74,6 +74,7 @@ a2ulttrm a2uniprint a2vidtrm +a2vistaa800 a2vtc1 a2vtc2 a2vulcan @@ -153,6 +154,7 @@ aha1542 aha1740 aha1742a +aha2940au alice_mcx128 alto2_cpu altos2_kbd @@ -197,6 +199,7 @@ arc_midimax arc_nexus_a500 arc_rom_aka05 +arc_rom_r225 arc_rs423 arc_scan256 arc_scanjunior3 @@ -225,6 +228,7 @@ atom_discpack ax208 ax208p +banshee_x86 basf7100_kbd bbc_24bbc bbc_2ndserial @@ -260,6 +264,7 @@ bbc_opus8272 bbc_opusa bbc_pdram +bbc_pms64k bbc_ramdisc bbc_raven20 bbc_stl1770_1 @@ -280,6 +285,7 @@ bbc_tube_65c102 bbc_tube_80186 bbc_tube_80286 +bbc_tube_a500d bbc_tube_a500 bbc_tube_arm7 bbc_tube_arm @@ -387,6 +393,7 @@ cit101_kbd cit220p_kbd clgd542x +clgd5446_pci clgd5465_laguna cmdhd cmdrc2 @@ -443,10 +450,13 @@ cuda302 cuda cudalite +cv8lc cw7501 d2fdc d9060 d9090 +db50xg +db60xg dc320b dc320e dc820b @@ -518,6 +528,7 @@ electron_sidewndr electron_voxbox enh2000 +enp10 ep64_exdos epson_pf10 epson_qx_option_multifont @@ -529,6 +540,7 @@ ev346 ex1280 ex800 +executive10_102_kbd exorterm155_device f4431_kbd fccpu20 @@ -552,6 +564,8 @@ fsd1 fsd2 g80_1500 +geforce256ddr +geforce256 gfxultra gfxultrap gfxultrp @@ -561,16 +575,25 @@ hardbox hcpu30 hd44780_a00 +hd44780 +hd44780u hd61830 hd63484 hdc hdc_ec1841 he191_3425 heath_gp19_tlb +heath_igc_super19_tlb_device +heath_igc_tlb_device +heath_igc_ultra_tlb_device +heath_igc_watz_tlb_device +heath_imaginator_tlb heath_super19_tlb +heath_superset_tlb heath_tlb heath_ultra_tlb heath_watz_tlb +hk68v10 hp82900 hp82937 hp82939 @@ -587,6 +610,7 @@ i8245 ibm_mfc ibm_vga +idpart_video ie15_device ie15kbd ie15_keyboard @@ -645,6 +669,7 @@ keytronic_pc3270_at keytronic_pc3270 km035 +ks0066 ks0066_f00 ks0066_f05 labtam_3232 @@ -742,16 +767,19 @@ mtx_cfx mtx_sdxbas mtx_sdxcpm +mu5lcd mulcd mvme120 mvme121 mvme122 mvme123 +mvme147 mvme180 mvme181 mvme187 mvme327a mvme350 +mzr8105 nabupc_keyboard namco50 namco51 @@ -789,6 +817,7 @@ nb_rtpd nb_sp8s3 nb_spdq +nb_thungx nb_vikbw nb_wspt neogs @@ -801,7 +830,9 @@ np600a3 nsmdsad nsmdsa +nss_tvinterface o2_voice +omniwave omti8621isa oric_jasmin oric_microdisc @@ -809,11 +840,13 @@ osa_maestroa osa_maestro osa_sparc +oti64111_pci p1_fdc p1_hdc p1_rom p72 pa7246 +partner_gdp pc1512kb pc1640_iga pc80s31 @@ -834,12 +867,17 @@ pd3_lviw pd3_mclr pd3_pc16 +pdc20262 pdc +pds30_emac pds_hyper +pdslc_macconlc pds_sefp pet_softbox pet_superpet pg200 +plg100_vl +plg150_ap plus4_sid polyvti pr8210 @@ -848,6 +886,7 @@ profighterqb profighterq profighterx +promotion3210 ps2_keybc psion_3fax psion_3link_ser @@ -856,6 +895,7 @@ pvga1a pvga1a_jk px320a +qg640 ql_cumanafdi ql_gold ql_kdi @@ -880,6 +920,7 @@ qsound qsound_hle qts1 +quadro qx10_keyboard_ascii qx10_keyboard qx10_keyboard_hasci @@ -895,6 +936,8 @@ rivatnt2_m64 rivatnt2_ultra rivatnt +robotron_k7070 +robotron_k7071 rolm_pdc rolm_smioc rtpc_kbd @@ -929,6 +972,7 @@ sbus_hme sbus_sunpc sc119 +scorpion_ic sdtandy_fdc sed1200da sed1200db @@ -936,8 +980,10 @@ sed1200fa sed1200fb sed1278_0b +sed1278 sed1330 sega837_14438 +segaai_soundbox segabill segadimm seganetw @@ -948,10 +994,12 @@ seta11leg sfd10001 sfd1001 +sgi_ip4 sgi_kbd side116 simutrek sis630_gui +sis6326_agp sis900_eth slutprov smoc501 @@ -1011,6 +1059,7 @@ spectrum_swiftdisc spectrum_usource spectrum_uspeech +spectrum_vtx5000 spectrum_wafa s_smp stereo_fx @@ -1018,17 +1067,38 @@ st_kbd sv603 sv806 +sw1000xg swtpc8212_device sx1541 +sys68k_cpu1 +sys68k_cpu20 +sys68k_cpu21a +sys68k_cpu21b +sys68k_cpu21 +sys68k_cpu21s +sys68k_cpu21ya +sys68k_cpu21yb +sys68k_cpu30be +sys68k_cpu30 +sys68k_cpu30lite +sys68k_cpu30xa +sys68k_cpu30x +sys68k_cpu30za +sys68k_cpu33 +sys68k_iscsi1 +sys68k_isio1 t5182 tanbus_ra32k tanbus_ra32krom tanbus_tandos tanbus_tanex tanbus_vid8082 +tandberg_tdv2100_disp_logic +tandberg_tdv2100_keyboard tandy2kb technica tek410x_kbd +tek_msu_fdc tetriskr_cga tgui9680 ti99_bwg @@ -1071,6 +1141,7 @@ uts_extw v102_kbd v1050kb +v50_kbd v550_kbd vanta vector4_kbd @@ -1083,6 +1154,9 @@ victor9k_kb virgedx_pci virge_pci +vision864 +vision964 +vision968 voicebox votrax votrsc01a @@ -1110,7 +1184,9 @@ wd90c31_lr wd90c33_zz wd90c90_jk +wd9710_pci wdxt_gen +wg130 wordpro wyse700 x68k_cz6bs1 @@ -1123,6 +1199,7 @@ ymf281 z8671 z8682 +zip100_ide zorba_kbd zorro_a2091 zorro_a590 @@ -1130,3 +1207,4 @@ zorro_ar2 zorro_ar3 zorro_buddha +zxbus_neogs diff --git a/resources/MAME/mamenames.xml b/resources/MAME/mamenames.xml index 5c83f47b0..6dc6ac717 100644 --- a/resources/MAME/mamenames.xml +++ b/resources/MAME/mamenames.xml @@ -1,4 +1,4 @@ - + 005 005 @@ -99,6 +99,10 @@ 1942h Supercharger 1942 + + 1942iti + 1942 (Itisa bootleg) + 1942p 1942 (Tecfri PCB, bootleg?) @@ -299,6 +303,10 @@ 2mindril Two Minute Drill (Ver 2.93A 1994/02/16) + + 2mindrila + Two Minute Drill (Ver 2.2A 1993/10/18) + 2spicy 2 Spicy @@ -471,6 +479,10 @@ 3x3puzzla 3X3 Puzzle (Normal) + + 4000_260 + 4000/260 + 4004clk 4004 Nixie Clock @@ -479,6 +491,10 @@ 40love Forty-Love (World) + + 40lovebl + Forty-Love (bootleg) + 40lovej Forty-Love (Japan) @@ -735,6 +751,10 @@ 88games '88 Games + + 88in1joy + Joystick88 + 8ball Video Eight Ball @@ -1011,6 +1031,10 @@ a7800p Atari 7800 (PAL) + + a7lucky88 + Lucky 88 (Aristocrat MK-7) + a800 Atari 800 (NTSC) @@ -1039,6 +1063,10 @@ aa3010 Acorn A3010 + + aa3010_de + Acorn A3010 (German) + aa3020 Acorn A3020 @@ -1541,7 +1569,11 @@ academy - Mephisto Academy (English) + Mephisto Academy (English, 04-10-88) + + + academyd + Mephisto Academy (Dutch, 04-10-88) academyg @@ -1551,6 +1583,14 @@ academyga Mephisto Academy (German, 04-10-88) + + academygb + Mephisto Academy (German, 27-08-88) + + + academytt + Mephisto Academy T+T (Dutch, prototype) + acchi Janken Game Acchi Muite Hoi! (Japan 1.3) @@ -1571,6 +1611,10 @@ accommp Acorn Communicator (prototype) + + accord + Accord + acd unknown ACD computer @@ -3287,6 +3331,10 @@ alaleolx LEOPARD LX + + alantin + Alantin - Aladdin's Magic Lamp + alator2 Tornado 2 @@ -3385,7 +3433,7 @@ alien - Alien: The Arcade Medal Edition + Alien: The Arcade Medal Edition (satellite) alien3 @@ -3549,7 +3597,11 @@ alm16 - Mephisto Almeria 16 Bit + Mephisto Almeria 16 Bit (v0.13) + + + alm16a + Mephisto Almeria 16 Bit (v0.121) alm32 @@ -3711,6 +3763,10 @@ altair Altair + + altair2 + Altair II + altaten Alta Tensione (ver. 2.01a) @@ -3883,6 +3939,10 @@ amazonkp Amazonia King Plus (V204BR) + + amazonsp + Amazon Spirit (Konami Endeavour, NSW) + amazont Soldier Girl Amazon (Tecfri license) @@ -3939,6 +3999,10 @@ amerihok Ameri-Hockey + + amerug + Amerug (Shoei bootleg of Atari Football) + amhbattl Acchi Muite Hoi Battle @@ -4092,7 +4156,7 @@ Mephisto Amsterdam - amsterda + amsterdg Mephisto Amsterdam (Glasgow hardware) @@ -4251,6 +4315,26 @@ animalc Animal Catch + + animalhjb + Animal House (bootleg of Jingle Bell) + + + animalhs + Animal House (V1.0, set 1) + + + animalhsa + Animal House (V1.0, set 2) + + + animalhsb + Animal House (set 3) + + + animalhsc + Animal House (set 4) + animaljr Exciting Animal Land Jr. (USA, Canada, Mexico) @@ -4353,7 +4437,7 @@ antiairc - Anti-Aircraft [TTL] + Anti-Aircraft anto2495 @@ -4723,6 +4807,10 @@ aquarius2 Aquarius II + + aquarius_ar + Aquarius (Arabic) + aquariusp Aquarius (PAL) @@ -4901,7 +4989,11 @@ aracnis - Aracnis (bootleg of Scorpion on Moon Cresta hardware) + Aracnis (bootleg of Scorpion on Moon Cresta hardware, set 1) + + + aracnisa + Aracnis (bootleg of Scorpion on Moon Cresta hardware, set 2) arbalest @@ -4945,7 +5037,7 @@ arcwins - Arctic Wins (4XF5227H03, USA) + Arctic Wins (4XF5227H03, US) area51 @@ -6227,6 +6319,10 @@ astrofl Astro Flash (Japan) + + astroft + Astro Fighter (Taito) + astron Astron Belt @@ -6609,7 +6705,7 @@ attackf - Attack (Defender bootleg) + Attack (bootleg of Defender) attackfc @@ -6621,11 +6717,11 @@ attckexd - Attack (set 1) [TTL] + Attack (set 1) attckexd2 - Attack (set 2) [TTL] + Attack (set 2) attckufo @@ -6853,7 +6949,7 @@ avenger - Avenger [TTL] + Avenger avengers @@ -7265,12 +7361,16 @@ baddudes - Bad Dudes vs. Dragonninja (US revision 1) + Bad Dudes vs. Dragonninja (US, revision 1) badgirls Bad Girls + + badgirlsa + Bad Girls (alternate set) + badgirlsf Bad Girls (French) @@ -7311,6 +7411,10 @@ bagmanm2 Bagman (bootleg on Moon Cresta hardware, set 2) + + bagmanm3 + Bagman (bootleg on Moon Cresta hardware, set 3) + bagmanmc Bagman (bootleg on Moon Cresta hardware, set 1) @@ -7383,6 +7487,10 @@ ballbros Balloon Brothers + + ballch + Ball Challenge (20020607 1.0 OVERSEA) + ballpom Ball Pom Line @@ -7409,11 +7517,11 @@ ban_onep - One Piece Punch Battle (Japan) + Let's! TV Play One Piece Punch Battle (Japan) bananadr - Mahjong Banana Dream [BET] (Japan 891124) + Mahjong Banana Dream (Japan 891124) bananas @@ -7487,6 +7595,10 @@ bankshot Bank Shot: Electronic Pool + + baoqingt + Bao Qing Tian + baracuda Barracuda @@ -7807,6 +7919,10 @@ battroad The Battle-Road + + batvgc + Interactive M.A.G. Motion Activated Gear: The Batman - Villains of Gotham City + bay1000c BAY-1000C V1.01 @@ -7827,6 +7943,10 @@ bay_f201 Baywatch (2.01 French) + + bay_g300 + Baywatch (3.00 German) + bayroute Bay Route (set 3, World) (FD1094 317-0116) @@ -7861,11 +7981,11 @@ bazooka - Bazooka [TTL] + Bazooka bazookabr - Bazooka (Brazil) [TTL] + Bazooka (Brazil) bb_21up @@ -7949,7 +8069,7 @@ bballrmt - Baseball (Ramtek) [TTL] + Baseball (Ramtek) bballs @@ -8135,6 +8255,10 @@ bbnny_l2 Bugs Bunny Birthday Ball (L-2) + + bbnny_lg + Bugs Bunny Birthday Ball (LG-2) German + bbnny_lu Bugs Bunny Birthday Ball (LU-2) European @@ -8677,11 +8801,11 @@ bgareggabl - 1945 Part-2 (Chinese hack of Battle Garegga) + 1945 Er Dai / 1945 Part-2 (Chinese hack of Battle Garegga) bgareggabla - Lei Shen Zhuan Thunder Deity Biography (Chinese hack of Battle Garegga) + Leishen Chuan / Thunder Deity Biography (Chinese hack of Battle Garegga) bgareggablj @@ -8901,11 +9025,15 @@ bigkonggx - Big Kong (Crazy Kong bootleg on Galaxian hardware) + Big Kong (bootleg of Crazy Kong on Galaxian hardware) bigprowr - The Big Pro Wrestling! + The Big Pro Wrestling! (set 1) + + + bigprowra + The Big Pro Wrestling! (set 2) bigred @@ -8989,7 +9117,7 @@ billiard - The Billiards (Video Hustler bootleg) + The Billiards (bootleg of Video Hustler) billlist @@ -9019,6 +9147,10 @@ bingogal Bingo Galaxy (main) + + bingogalo + Bingo Galaxy (main) (MDA-C0039A) + bingogals Bingo Galaxy (satellite) @@ -9031,6 +9163,10 @@ bingomana Bingo Mania (A03) + + bingopar + Bingo Parade (main) (MDA-C0008E) + bingopd Paradise (Industrias Brasileiras, Version 1.04) @@ -9083,6 +9219,10 @@ bingownga Bingo (set 2) + + bingplnt + Bingo Planet (Rev C) (M1 Satellite board) + bingpty Bingo Party Multicart (Rev B) (M1 Satellite board) @@ -9141,11 +9281,11 @@ biplane - Biplane [TTL] + Biplane biplane4 - Biplane 4 [TTL] + Biplane 4 birdiy @@ -9153,15 +9293,15 @@ birdtry - Birdie Try (Japan revision 2, revision 1 MCU) + Birdie Try (Japan, revision 2, revision 1 MCU) birdtrya - Birdie Try (Japan revision 2) + Birdie Try (Japan, revision 2) birdtryb - Birdie Try (Japan revision S) + Birdie Try (Japan, sample version) bishi @@ -9187,6 +9327,10 @@ bittboy BittBoy Mini FC 300 in 1 + + bj92 + Black Jack (Irem) + bjourney Blue's Journey / Raguy (ALM-001 ~ ALH-001) @@ -9457,7 +9601,7 @@ blckjack - Black Jack + Black Jack (InterFlip) bldwolf @@ -9497,7 +9641,7 @@ blicks - Blicks + Blicks (Japan) blit @@ -9577,6 +9721,10 @@ blkrhino + Black Rhino (4VXFC830, NSW) + + + blkrhinonz Black Rhino (3VXFC5344, New Zealand) @@ -9811,6 +9959,10 @@ blpearld Black Pearl (Ukraine, V. 42.01) + + blshark + Blue Shark (MDS Hellas) + blstroid Blasteroids (rev 4) @@ -10139,6 +10291,10 @@ bml3mk5 MB-6892 Basic Master Level 3 Mark 5 + + bmoonii + Blue Moon II + bmsafari Safari (Bambino) @@ -10261,7 +10417,7 @@ bombaway - Bombs Away [TTL] + Bombs Away bombbee @@ -10279,6 +10435,10 @@ bombjack2 Bomb Jack (set 2) + + bombjackbl + Bomb Jack (bootleg) + bombjackt Bomb Jack (Tecfri, Spain) @@ -10329,12 +10489,20 @@ bongo - Bongo + Bongo (set 1) + + + bongoa + Bongo (set 2) bonkadv B.C. Kid / Bonk's Adventure / Kyukyoku!! PC Genjin + + bonkadva + Bonk's Adventure (prototype) + bonusch Bonus Chance (W-8) @@ -10827,6 +10995,10 @@ brickznv5 Brick Zone (v5.0, Joystick) + + bridgeb + Bridge Bidder + bridgec Bridge Challenger @@ -10839,6 +11011,10 @@ bridgeca Advanced Bridge Challenger + + bridgecv + Voice Bridge Challenger + brival Burning Rival (World) @@ -10863,6 +11039,10 @@ brkblast Brick Blast (bootleg of Wall Crash) + + brke23p2 + Brick Game 96 in 1 (E-23 Plus Mark II) + brkthru Break Thru (US) @@ -10951,10 +11131,22 @@ bsb105 Breakshot (Beta) + + bscompmx + beatstage complete MIX (ver KA-B) + bsebman Bomberman (Version 6.6) + + bsebmanbl + Bomberman (Version 6.6, Avraam bootleg) + + + bsebmanbl2 + Bomberman (Version 6.6, J.T. bootleg) + bshark Battle Shark (World) @@ -10973,15 +11165,15 @@ bship - Electronic Battleship (TMS1000 version, Rev. A) + Electronic Battleship (TMS1000 version, rev. A) bshipb - Electronic Battleship (TMS1000 version, Rev. B) + Electronic Battleship (TMS1000 version, rev. B) bshipg - Electronic Battleship (COP420 version, Rev. G) + Electronic Battleship (COP420 version, rev. G) bsktball @@ -11215,6 +11407,10 @@ btorneo Bubble Torneo + + btplay2k + Beat Player 2000 + bttf_a20 Back to the Future - The Pinball (2.0) @@ -11275,6 +11471,10 @@ bubbletrj Bubble Trouble - Golly! Ghost! 2 (Japan, Rev C) + + bubbroul + Bubblen Roulette (Japan, main ver. 1.8, video ver. 1.3) + bubl2000 Bubble 2000 @@ -11359,6 +11559,10 @@ bubsymphu Bubble Symphony (Ver 2.5A 1994/10/05) + + bubucar + Bu Bu Car (English) + bucaneer Buccaneer (Aristocrat, 10173011, NSW/ACT) @@ -11536,7 +11740,7 @@ Bumble Bugs (0200510V, NSW/ACT) - bumblbugql + bumblbugq Bumble Bugs (0200456V, Queensland) @@ -11565,7 +11769,7 @@ buraiken - Hissatsu Buraiken (Japan, revision A) + Hissatsu Buraiken (Japan, rev. A) buraikenb @@ -12053,15 +12257,19 @@ cafebrk - Mahjong Cafe Break + Mahjong Cafe Break (Ver. 1.01J) cafedoll - Mahjong Cafe Doll (Japan) + Mahjong Cafe Doll (Japan, Ver. 1.00) + + + cafedollg + Mahjong Cafe Doll Great (Japan, Ver. 1.00) cafepara - Mahjong Cafe Paradise + Mahjong Cafe Paradise (Ver. 1.00) cafetime @@ -12403,6 +12611,10 @@ carhop Car Hop + + caribe + Caribe + carjmbre Car Jamboree @@ -12579,6 +12791,10 @@ castawaya Castaway (Russia) (Atronic) (set 2) + + castawayt + Cast Away (dual 6809 GI Australasia PCB) + castfant Astro Fantasia (DECO Cassette) (US) @@ -12871,6 +13087,26 @@ cbombersp Chase Bombers (Japan Prototype) + + cbrava + Costa Brava (2 jackpot points, 81%) + + + cbravaa + Costa Brava (1 jackpot point, 77%) + + + cbravab + Costa Brava (2 jackpot points, 77%) + + + cbravac + Costa Brava (4 jackpot points, 77%) + + + cbravad + Costa Brava (8 jackpot points, 77%) + cbrs8 CoolBoy RS-8 168 in 1 @@ -12969,7 +13205,7 @@ ccasino - Chinese Casino [BET] (Japan) + Chinese Casino (Japan) ccastles @@ -13100,12 +13336,12 @@ Chess Champion: Mark VI/Philidor - ccompan - Chess Companion + ccorsario + Corsarios (Cirsa slot machine, V6.0D) - ccorsario - Corsarios (Cirsa slot machine) + ccorsarioa + Corsarios (Cirsa slot machine, V5.10D, Catalonia) ccruise @@ -13423,6 +13659,10 @@ cfx9850 CFX-9850G + + cfx9850gb + CFX-9850GB Plus + cgalaxn Galaxian (Coleco) @@ -13469,11 +13709,11 @@ cgold - Caribbean Gold (3VXEC449, USA) + Caribbean Gold (3VXEC449, US) cgold2 - Caribbean Gold II (3XF5182H04, USA) + Caribbean Gold II (3XF5182H04, US) cgraplop @@ -13489,7 +13729,7 @@ cgunship - Cobra Gunship [TTL] + Cobra Gunship ch2000 @@ -13704,8 +13944,12 @@ Chariot Challenge (0100787V, NSW/ACT) - chariotcv - Chariot Challenge (04J00714, Peru?) + chariotcpe + Chariot Challenge (04J00714, Peru) + + + charles + Charleston (V2.1, Catalonia) charlien @@ -13803,6 +14047,10 @@ cherry96 New Cherry '96 (bootleg of New Fruit Bonus?) + + chessac + Kasparov Chess Academy + chessc2 Chess Challenge II @@ -13868,7 +14116,7 @@ Chicken (0100351V, NSW/ACT) - chickna5ql + chickna5q Chicken (0200530V, Queensland) @@ -13897,7 +14145,11 @@ chimerab - Chimera Beast (Japan, prototype) + Chimera Beast (Japan, prototype, set 1) + + + chimeraba + Chimera Beast (Japan, prototype, set 2) chinagat @@ -14249,7 +14501,7 @@ ckidzo - Ckidzo [TTL] + Ckidzo ckmaster @@ -14269,7 +14521,7 @@ ckongdks - Donkey Kong (Spanish Crazy Kong bootleg) + Donkey Kong (Spanish bootleg of Crazy Kong) ckongg @@ -14409,7 +14661,7 @@ cleanswp - Clean Sweep [TTL] + Clean Sweep cleoftp @@ -14451,6 +14703,10 @@ clkwise Clockwise (1VXEC534, New Zealand) + + cll + Cuty Line Limited (ver.1.30) + cloak Cloak & Dagger (rev 5) @@ -14661,7 +14917,11 @@ cmast92 - Cherry Master '92 + Cherry Master '92 (V1.2D) + + + cmast92a + Cherry Master '92 (V1.1D) cmast97 @@ -15059,10 +15319,6 @@ code1d Code One Dispatch Ver 1.21 (ver UAD) - - code1da - Code One Dispatch (ver UAA) - code1db Code One Dispatch Ver 1.16 (ver UAB) @@ -15273,7 +15529,7 @@ comg175 - Cal Omega - Game 17.51 (Gaming Draw Poker) + Cal Omega - Game 17.51 (Gaming Draw Poker, Sch 07-0T) comg176 @@ -15311,6 +15567,10 @@ comg208 Cal Omega - Game 20.8 (Winner's Choice) + + comg214 + Cal Omega - Game 21.4 (Wild Double-Up Poker) + comg227 Cal Omega - Game 22.7 (Amusement Poker, d/d) @@ -15345,11 +15605,23 @@ comg5107 - CEI 51.07 (CEI 906-III Poker) + CEI 51.07 (CEI 906-III Poker, Schedule 05F) comg5108 - CEI 51.08 (CEI 906-III Poker) + CEI 51.08 (CEI 906-III Poker, Schedule 05F) + + + comg5108a + CEI 51.08 (CEI 906-III Poker, Schedule 09F) + + + comg5108b + CEI 51.08 (CEI 906-III Poker, Schedule 21F) + + + comg6004 + CEI 60.04 (CEI 906-III Poker, Schedule 09F) comg903d @@ -15411,6 +15683,18 @@ comp4 Comp IV + + compan + Chess Companion + + + compan2 + Chess Companion II + + + compan3 + Companion III + compani1 Kompanion 1 @@ -15591,6 +15875,10 @@ conquest Conquest (prototype) + + conquist + Kasparov Conquistador + consoemt Consola EMT @@ -15607,6 +15895,10 @@ const36a Constellation 3.6MHz (set 2) + + constjr + Constellation Junior + constq Constellation Quattro @@ -15703,6 +15995,10 @@ cookrace Cook Race + + cool104 + Cool 104 + coolmini Cool Minigame Collection @@ -15907,6 +16203,10 @@ cothello Computer Othello + + cots + Creatures of the Sea (20050328 USA 6.3) + cotton Cotton (set 4, World) (FD1094 317-0181a) @@ -16005,7 +16305,7 @@ cowrace - Cow Race (King Derby hack) + Cow Race (hack of King Derby) cowtipp @@ -16045,11 +16345,11 @@ cpacman - Pac-Man (Coleco, Rev. 29) + Pac-Man (Coleco, rev. 29) cpacmanr1 - Pac-Man (Coleco, Rev. 28) + Pac-Man (Coleco, rev. 28) cpatrolm @@ -16247,6 +16547,10 @@ cptlucky Captain Lucky + + cptshark + Captain Shark (Ver. CS.01.6, Apr 21 2006) + cpu09 CPU09 @@ -16301,7 +16605,7 @@ crashnsc - Crash 'n Score/Stock Car [TTL] + Crash 'n Score/Stock Car crashrd @@ -16313,7 +16617,7 @@ crazybal - Crazy Balls [TTL] + Crazy Balls crazyblk @@ -16339,6 +16643,10 @@ crazyfgt Crazy Fight + + crazym + Crazy Mazey + crazywar Crazy War @@ -16459,6 +16767,10 @@ crkdownu Crack Down (US, Floppy Based, FD1094 317-0058-04d) + + croaky + Croaky Karaoke 16-in-1 + crockman Crock-Man @@ -16615,6 +16927,10 @@ crusnexoa Cruis'n Exotica (version 2.0) + + crusnexoaa + Cruis'n Exotica (version 2.0, alternate ROM format) + crusnexob Cruis'n Exotica (version 1.6) @@ -16815,6 +17131,10 @@ crzrallyrf Crazy Rally (Recreativos Franco license) + + crzybugs + Crazy Bugs (V103JP) + crzyddz Crazy Dou Di Zhu @@ -16913,7 +17233,7 @@ cscet - Elite Champion Challenger (Travemünde TM version) + Elite Champion Challenger (WMCCC 1981 Travemünde TM) csclub @@ -17145,11 +17465,11 @@ ct2k3sa - Crouching Tiger Hidden Dragon 2003 Super Plus alternate (The King of Fighters 2001 bootleg) + Crouching Tiger Hidden Dragon 2003 Super Plus (hack of The King of Fighters 2001, alternate) ct2k3sp - Crouching Tiger Hidden Dragon 2003 Super Plus (The King of Fighters 2001 bootleg) + Crouching Tiger Hidden Dragon 2003 Super Plus (hack of The King of Fighters 2001) ct386sx @@ -17181,7 +17501,7 @@ cthd2003 - Crouching Tiger Hidden Dragon 2003 (The King of Fighters 2001 bootleg) + Crouching Tiger Hidden Dragon 2003 (hack of The King of Fighters 2001) ctisland @@ -17671,10 +17991,18 @@ cyvernj Cyvern - The Dragon Weapons (Japan) + + cz1 + CZ-1 + cz101 CZ-101 + + cz230s + CZ-230S + czeroize Zeroize (DECO Cassette) (US) @@ -17859,6 +18187,10 @@ d6809 6809 Portable + + d70 + D-70 Super LA Synthesizer + d9final Dream 9 Final (v2.24) @@ -17905,7 +18237,7 @@ daimyojn - Mahjong Daimyojin [BET] (Japan, T017-PB-00) + Mahjong Daimyojin (Japan, T017-PB-00) daioh @@ -17953,7 +18285,7 @@ daisyari - Daisyarin [BET] (Japan) + Daisyarin (Japan) daitorid @@ -17984,16 +18316,20 @@ Mephisto Dallas 68000 - dallas16a + dallas16g Mephisto Dallas 68000 (Glasgow hardware) dallas32 - Mephisto Dallas 68020 + Mephisto Dallas 68020 (set 1) + + + dallas32a + Mephisto Dallas 68020 (set 2) dallaspk - Dallas Poker + Dallas Poker (CZ/V1) dambustr @@ -18087,6 +18423,10 @@ dangerz Danger Zone (rev 2) + + dangerz0 + Danger Zone (rev 0) + dangseed Dangerous Seed (Japan) @@ -18247,9 +18587,13 @@ dauphin Dauphin + + dawg + Dawg Gone Fun + dayto2pe - Daytona USA 2 Power Edition (Japan) + Daytona USA 2: Power Edition (Japan) daytona @@ -18257,7 +18601,7 @@ daytona2 - Daytona USA 2 (Japan, Revision A) + Daytona USA 2: Battle on the Edge (Japan, Revision A) daytona93 @@ -18583,6 +18927,10 @@ ddcrewud D. D. Crew (US, 4 Players) (bootleg of FD1094 317-0186 set) + + dddoor + Doraemon no Dokodemo Door + ddealer Double Dealer @@ -19201,7 +19549,7 @@ deathrac - Death Race [TTL] + Death Race deathsm2 @@ -19297,11 +19645,11 @@ defcmnd - Defense Command (Defender bootleg) + Defense Command (bootleg of Defender) defence - Defence Command (Defender bootleg) + Defence Command (bootleg of Defender) defender @@ -19319,6 +19667,10 @@ defenderj T.T Defender + + defenderom + Operacion Defender (bootleg of Defender) + defenderw Defender (White label) @@ -19329,7 +19681,7 @@ defenseb - Defense (Defender bootleg) + Defense (bootleg of Defender) defndjeu @@ -19415,6 +19767,10 @@ demonwld4 Demon's World / Horror Story (set 5) + + demonwld5 + Demon's World / Horror Story (set 6) + dendego Densha de GO! (Ver 2.3 J) @@ -19537,7 +19893,7 @@ destdrby - Destruction Derby [TTL] + Destruction Derby desterth @@ -19549,19 +19905,19 @@ destroyr - Destroyer (version O2) + Destroyer (Atari, version O2) destroyr1 - Destroyer (version O1) + Destroyer (Atari, version O1) destryer - Destroyer (Cidelsa) (set 1) + Destroyer (Cidelsa, set 1) destryera - Destroyer (Cidelsa) (set 2) + Destroyer (Cidelsa, set 2) detatwin @@ -19649,7 +20005,11 @@ dfruit - Fruit Dream (Japan) + Fruit Dream (Japan, Ver. 1.20) + + + dfruita + Fruit Dream (Japan, Ver. 1.10) dfs500 @@ -19723,6 +20083,10 @@ dgun2953 My Arcade Gamer Mini 160-in-1 (DGUN-2953) + + dgun2959 + My Arcade Plug And Play 220 Game Retro Controller (DGUN-2959) + dgun806 Plug 'N' Play 25-in-1 (DGUN-806) @@ -19903,6 +20267,10 @@ dietgou Diet Go Go (USA v1.1 1992.09.26) + + digamart + Diga Mart (rev. A) + digdug Dig Dug (rev 2) @@ -20007,6 +20375,10 @@ diner_f2 Diner (LF-2) French + + diner_g2 + Diner (LG-2) German + diner_l1 Diner (LU-1) Europe @@ -20279,6 +20651,10 @@ dkingjr Donkey King Jr. (bootleg of Donkey Kong Jr.) + + dkjfever + Donkey Kong Jungle Fever (Ver.1.000, 2005/08/03) + dkkids Dinoking Kids @@ -20573,15 +20949,15 @@ dmndrby - Diamond Derby (newer) + Diamond Derby (Win bet, newer) dmndrbya - Diamond Derby (original) + Diamond Derby (Win bet, original) dmndrbybl - Diamond Derby (EDG Impeuropex bootleg) + Diamond Derby (Quinella bet, EDG Impeuropex bootleg) dmnfrnt @@ -20601,7 +20977,7 @@ dmodrbcc - Demolition Derby [TTL] + Demolition Derby (Chicago Coin) dms5000 @@ -20673,7 +21049,7 @@ dngrtrck - Danger Track (Rally X bootleg) + Danger Track (bootleg of Rally X) dnmtdeka @@ -20857,7 +21233,7 @@ dokodemo - Doko Demo Issho: Toro's Fishing + Doko Demo Issho: Toro's Fishing (Ver.1.00, 2006/06/07) dokyusei @@ -20908,7 +21284,7 @@ Dolphin Treasure - Cash Express (AHG1519, US) - dolphntrql + dolphntrq Dolphin Treasure (0101250V, Queensland) @@ -20985,7 +21361,7 @@ dondenmj - Don Den Mahjong [BET] (Japan) + Don Den Mahjong (Japan) dondokod @@ -21043,6 +21419,10 @@ doraglob Dora the Explorer - Dora TV Adventure Globe + + doraglobf + Dora the Explorer - Dora TV Globe-Trotter (France) + doraglobg Dora the Explorer - Doras Abenteuer-Globus (Germany) @@ -21053,7 +21433,11 @@ doraphon - Dora the Explorer - Dora TV Explorer Phone / Boots's Special Day + Dora the Explorer - Dora TV Explorer Phone / Boots's Special Day (US) + + + doraphonf + Dora the Explorer - Dora TV Explorer Phone / L'anniversaire de Babouche (France) dorodon @@ -21139,13 +21523,17 @@ downtownp DownTown / Mokugeki (prototype) + + doyousud + Sudoku: Do You Sudoku? + dpatrol - Desert Patrol [TTL] + Desert Patrol dpatrola - Desert Patrol (set 2) [TTL] + Desert Patrol (set 2) dpb7000 @@ -21327,6 +21715,10 @@ drail Dream Rail + + draillov + Dream Rail Lovely + drakor Drakor @@ -21409,7 +21801,7 @@ drgninja - Dragonninja (Japan revision 1) + Dragonninja (Japan, revision 1) drgninjab @@ -21461,7 +21853,7 @@ drgnwrldv20j - Zhongguo Long (Japan, V020J) + Chuugokuryuu (Japan, V020J) drgnwrldv21 @@ -21469,7 +21861,7 @@ drgnwrldv21j - Zhongguo Long (Japan, V021J) + Chuugokuryuu (Japan, V021J) drgnwrldv30 @@ -21544,13 +21936,17 @@ Dribbling (set 2) - driblingbr - Dribbling (bootleg, Brazil) + driblingam + Dribbling (Automave) driblingo Dribbling (Olympia) + + driblingvm + Dribbling (Videomac bootleg, Brazil) + drifto94 Drift Out '94 - The Hard Order (Japan) @@ -21603,6 +21999,10 @@ drivfrct Top Racer (bootleg of Driving Force) + + drkseal + Dark Seal (8-liner) + drktnjr Drakton (DKJr conversion) @@ -21997,12 +22397,16 @@ dtoyoken - Mahjong Dai Touyouken [BET] (Japan) + Mahjong Dai Touyouken (Japan) dtrvwz5 Deluxe Trivia ? Whiz (6221-70, U5-0A Edition 5) + + dtrvwz5v + Deluxe Trivia ? Whiz (6221-75, U5-0 Edition 5 Vertical) + dturbogt Turbo GT 50-in-1 @@ -22433,7 +22837,11 @@ easykara - Easy Karaoke Groove Station + Easy Karaoke Groove Station (UK) + + + eatpm_3g + Elvira and the Party Monsters (LG-3) eatpm_4g @@ -24455,6 +24863,10 @@ ecau Emergency Call Ambulance (USA) + + ecbackg + Electronic Champion Backgammon + ecircus Circus (Elektronika) @@ -24527,6 +24939,10 @@ ed486vl3h 486VL3H + + edames + Electronic Dames + edf E.D.F. : Earth Defense Force (set 1) @@ -24601,16 +25017,16 @@ eforest - Enchanted Forest (12XF528902, US) - - - eforesta Enchanted Forest (4VXFC818, NSW) - eforestb + eforestnz Enchanted Forest (3VXFC5343, New Zealand) + + eforestu + Enchanted Forest (12XF528902, US) + eforsta5 Enchanted Forest (0400122V, NSW/ACT) @@ -24715,6 +25131,10 @@ ehx20e Epson HX-20 (Europe) + + eibise + Eibise (Japan) + eightbll Eight Ball (rev. 20) @@ -24825,7 +25245,15 @@ eldoradd - El Dorado + El Dorado (V5.1DR) + + + eldoraddo + El Dorado (V1.1TA) + + + eldoraddoa + El Dorado (V1.4D) eldorado @@ -25107,6 +25535,10 @@ emeraldaja Emeraldia (Japan) + + emirage + Mirage (Excalibur) + emjjoshi E-Touch Mahjong Series #2: Joshiryou de NE! (Japan) @@ -25247,6 +25679,10 @@ enmirage Mirage DMS-8 + + enterp + Enterprise "S" + eott Eyes of the Tiger (10002011, NSW/ACT) @@ -28475,10 +28911,18 @@ epo_sdb Super Dash Ball (Japan) + + epo_tenn + Excite Tennis (Japan) + epo_tfit Excite Sports Tennis x Fitness (Japan) + + epo_tfp2 + Tokyo Friend Park 2 (Japan) + eppc Ericsson Portable PC @@ -28659,6 +29103,14 @@ espial Espial (Europe) + + espialj + Espial (Japan) + + + espialn + Espial (Nova Apparate license) + espialu Espial (US?) @@ -28751,6 +29203,10 @@ eto Kokontouzai Eto Monogatari (Japan) + + etoa + Kokontouzai Eto Monogatari (Japan, prototype?) + eturtles Turtles (Entex) @@ -28779,6 +29235,10 @@ euroch92 Euro Champ '92 (World) + + euroch92j + Euro Champ '92 (Japan) + eurocom2 Eurocom II V7 @@ -28799,6 +29259,10 @@ eurogamea The Euro Game (set 2) + + europa + Mephisto Europa + europass Euro Pass (Ver 1.1) @@ -28859,6 +29323,10 @@ evmbug TMAM 6095 + + evolhh + Evolution Max + evosocc Evolution Soccer @@ -28903,10 +29371,6 @@ excelsra Excelsior (set 2) - - exchess - Executive Chess - excitbj Exciting Black Jack @@ -28963,6 +29427,14 @@ exctsccru Exciting Soccer (US) + + exe10102 + Executive 10/102 + + + exechess + Executive Chess + exedexes Exed Exes @@ -29023,6 +29495,10 @@ expcard Express Card / Top Card (Ver. 1.5) + + expchess + Explorer Chess + expert10 Expert XP-800 (1.0) (MSX1, Brazil) @@ -29225,12 +29701,16 @@ f15se - F-15 Strike Eagle (rev. 2.2 02/25/91) + F-15 Strike Eagle (rev. 2.2 02/25/91, 29K ver. 3.1f) f15se21 F-15 Strike Eagle (rev. 2.1 02/04/91) + + f15se22 + F-15 Strike Eagle (rev. 2.2 02/25/91, 29K ver. 2.2a) + f1dream F-1 Dream @@ -29517,7 +29997,11 @@ fantcar87 - Fantastic Car (Micro-87 hardware) + Fantastic Car (Micro-87 hardware, newer) + + + fantcar87a + Fantastic Car (Micro-87 hardware, older) fantjour @@ -29979,58 +30463,6 @@ fc100 FC-100 - - fccpu1 - SYS68K/CPU-1 - - - fccpu30 - SYS68K/CPU-30 - - - fccpu30be16 - SYS68K/CPU-30BE/16 - - - fccpu30be8 - SYS68K/CPU-30BE/8 - - - fccpu30lite4 - SYS68K/CPU-30Lite/4 - - - fccpu30lite8 - SYS68K/CPU-30Lite/8 - - - fccpu30senr - SYS68K/CPU-30SEN-R - - - fccpu30senr501 - SYS68K/CPU-30SEN-R-501 - - - fccpu30x - SYS68K/CPU-30X - - - fccpu30xa - SYS68K/CPU-30XA - - - fccpu30za - SYS68K/CPU-30ZA - - - fccpu30zbe - SYS68K/CPU-30ZBE - - - fccpu33 - SYS68K/CPU-33 - fcnudge Fruit Carnival Nudge (Version 2.1 Dual) @@ -30341,39 +30773,39 @@ feagv10 - Elite Avant Garde (model 6117-10) + Elite Avant Garde 2325 (model 6117-10) feagv11 - Elite Avant Garde (model 6117-11) + Elite Avant Garde 2325 (model 6117-11) feagv4 - Elite Avant Garde (model 6114-2/3/4, set 1) + Elite Avant Garde 2265 (model 6114-2/3/4, set 1) feagv4a - Elite Avant Garde (model 6114-2/3/4, set 2) + Elite Avant Garde 2265 (model 6114-2/3/4, set 2) feagv5 - Elite Avant Garde (model 6114-5) + Elite Avant Garde 2265 (model 6114-5) feagv7 - Elite Avant Garde (model 6117-6/7, set 1) + Elite Avant Garde 2325 (model 6117-6/7, set 1) feagv7a - Elite Avant Garde (model 6117-6/7, set 2) + Elite Avant Garde 2325 (model 6117-6/7, set 2) feagv7b - Elite Avant Garde (model 6117-6/7, set 3) + Elite Avant Garde 2325 (model 6117-6/7, set 3) feagv9 - Elite Avant Garde (model 6117-9) + Elite Avant Garde 2325 (model 6117-9) feap90 @@ -30435,6 +30867,10 @@ fellow Fellow (Finland) + + fengyunh + Fengyun Hui + fenix Fenix (Orio bootleg of Phoenix) @@ -30477,15 +30913,15 @@ fex68km3 - Excel 68000 Mach III Master (set 1) + Excel 68000 Mach III Master 2265 (set 1) fex68km3a - Excel 68000 Mach III Master (set 2) + Excel 68000 Mach III Master 2265 (set 2) fex68km3b - Excel 68000 Mach III Master (set 3) + Excel 68000 Mach III Master 2265 (set 3) fex68km4 @@ -30525,7 +30961,7 @@ ffantasy - Fighting Fantasy (Japan revision 3) + Fighting Fantasy (Japan, revision 3) ffantasya @@ -30541,7 +30977,7 @@ ffantasyj - Fighting Fantasy (Japan revision 2) + Fighting Fantasy (Japan, revision 2) ffantasym @@ -30857,11 +31293,11 @@ fhunter - Fortune Hunter (2XF5196I01, USA) + Fortune Hunter (2XF5196I01, US) fhuntera - Fortune Hunter (2XF5196I02, USA) + Fortune Hunter (2XF5196I02, US) fi6845 @@ -31009,7 +31445,7 @@ finalbny - Mahjong Final Bunny [BET] (Japan) + Mahjong Final Bunny (Japan) finalbu @@ -31209,7 +31645,7 @@ fisco400 - Cisco/Fisco 400 [TTL] + Cisco/Fisco 400 fishfren @@ -31445,7 +31881,11 @@ flickya - Flicky (128k Version, 315-5051, larger roms) + Flicky (128k Version, 315-5051, larger ROMs) + + + flickyb + Flicky (128k Version, 315-5051, larger ROMs, newer) flickyo @@ -31461,7 +31901,11 @@ flickyup - Flicky (64k Version, on Up'n Down boardset) + Flicky (64k Version, on Up'n Down boardset, set 1) + + + flickyupa + Flicky (64k Version, on Up'n Down boardset, set 2) flight2k @@ -31493,11 +31937,11 @@ floritas - Floritas (Moon Cresta bootleg) + Floritas (bootleg of Moon Cresta) floritasm - Floritas (Multivideo Spanish Moon Cresta bootleg) + Floritas (Multivideo Spanish bootleg of Moon Cresta) flower @@ -31537,7 +31981,7 @@ flyingf - Flying Fortress [TTL] + Flying Fortress flytiger @@ -31571,6 +32015,10 @@ fm8 FM-8 + + fmaniac2p + Fishing Maniac 2+ + fmaniac3 Fishing Maniac 3 @@ -31649,7 +32097,7 @@ fonz - Fonz [TTL] + Fonz foodf @@ -31873,12 +32321,32 @@ fpres - Prestige Challenger (original program) + Prestige Challenger (original program, set 1) + + + fpresa + Prestige Challenger (original program, set 2) + + + fpresb + Prestige Challenger (original program, set 3) fpresbu Prestige Challenger (Budapest program) + + fpresc + Prestige Challenger (original program, set 4) + + + fpresd + Prestige Challenger (original program, set 5) + + + fprese + Prestige Challenger (original program, set 6) + fpresgla Prestige Challenger (Glasgow program) @@ -31955,6 +32423,10 @@ free220 Freedom 220 + + freedeal + Free Deal Twin Jokers Progressive + freedom Freedom @@ -32219,6 +32691,14 @@ fruitstbg Fruit Star Bonus (Ver 8.17BGL-3, Burgenland, set 2) + + fruitstbh + Fruit Star Bonus (Ver 8.30UNG-25, set 1) + + + fruitstbi + Fruit Star Bonus (Ver 8.30UNG-25, set 2) + fruitstr Fruit Star (T10S, encrypted) @@ -32435,6 +32915,10 @@ fstation Fun Station Spielekoffer 9 Spiele + + fstgfish + Festival: Goldfish Scoop + fstm1 FS-TM1 (MSX2, Italy) @@ -32513,11 +32997,11 @@ fun4 - Fun Four (set 1) [TTL] + Fun Four (set 1) fun4a - Fun Four (set 2) [TTL] + Fun Four (set 2) funcsino @@ -32543,6 +33027,10 @@ funcube5 Funcube 5 (v1.0) + + fundr200 + Funderdome Video Game Entertainment System 200+ Games (FUN-GAME32-1) + funeball Fun-E-Ball @@ -32831,6 +33319,14 @@ ga486vs GA-486VS + + ga6la7 + GA-6LA7 + + + ga888 + Block Game & Echo Key GA888 + gahaha GAHAHA Ippatsudou (World, GID2 Ver.A) @@ -32869,12 +33365,16 @@ gakusai - Mahjong Gakuensai (Japan) + Mahjong Gakuensai (Japan, set 1) gakusai2 Mahjong Gakuensai 2 (Japan) + + gakusaia + Mahjong Gakuensai (Japan, set 2) + gal10ren Mahjong Gal 10-renpatsu (Japan) @@ -32889,7 +33389,7 @@ galactica2 - Galactica-2 (Moon Alien Part 2 bootleg) + Galactica-2 (bootleg of Moon Alien Part 2) galaga @@ -32949,11 +33449,11 @@ galap1 - Space Invaders Galactica ('Galaxian (Namco set 2)' hack) + Space Invaders Galactica (hack of 'Galaxian (Namco set 2)') galap2 - GX Part 2 (Galaxian hack) + GX Part 2 (hack of Galaxian) galap4 @@ -32961,7 +33461,7 @@ galapx - Galaxian Part X ('Moon Alien' hack) + Galaxian Part X (hack of 'Moon Alien') galartic @@ -33003,6 +33503,10 @@ galaxiac Galaxia (set 4) + + galaxiamv + Diviertate Galaxia (Multivideo, Spanish bootleg of Galaxian) + galaxian Galaxian (Namco set 1) @@ -33069,11 +33573,11 @@ galaxy2 - Galaxy II (VFD Rev. D) + Galaxy II (VFD rev. D) galaxy2b - Galaxy II (VFD Rev. B) + Galaxy II (VFD rev. B) galaxyfg @@ -33137,6 +33641,10 @@ galgame4 + Galaxy Games StarPak 4 + + + galgame4p Galaxy Games StarPak 4 (prototype) @@ -33333,11 +33841,11 @@ galpans2 - Gals Panic S2 (Europe) + Gals Panic S2 (Europe, version 3) galpans2a - Gals Panic S2 (Asia) + Gals Panic S2 (Asia, version 1.1) galpans2j @@ -33349,6 +33857,10 @@ galpansu + Gals Panic SU (Korea, version 5) + + + galpansua Gals Panic SU (Korea) @@ -33377,11 +33889,11 @@ galturbo - Galaxian Turbo ('Super Galaxians' hack) + Galaxian Turbo (hack of 'Super Galaxians') galwars2 - Galaxy Wars II (Defender bootleg) + Galaxy Wars II (bootleg of Defender) galxwars @@ -33439,6 +33951,10 @@ gambl186d Multi Game (English, Version Soft 4.1.2T - 1.5.7, 16-MAY-00(397)) + + gambl186e + Multi Game (Italian, Versione 3.9.8 - 1.5.7, 01-JUL-98) + gambler The Gambler (EHG0916-02, US) @@ -33497,7 +34013,11 @@ gametree - Game Tree [TTL] + Game Tree + + + gamezn2 + Game Zone II 128-in-1 gammagic @@ -34491,6 +35011,10 @@ gdefender Defender (Gakken) + + gderby + Gran Derby (Spanish hack of Jockey Club) + gdfs Mobile Suit Gundam Final Shooting (Japan) @@ -34569,7 +35093,11 @@ gekisha - Mahjong Gekisha (Japan, Bet) + Mahjong Gekisha (Japan) + + + gekishap2 + Mahjong Gekisha Part II (Japan) gekisou @@ -34689,7 +35217,11 @@ geostorm - Geo Storm (Japan) + Geo Storm (Japan, 014 custom sound CPU) + + + geostorma + Geo Storm (Japan, 026 custom sound CPU) gepoker @@ -35131,6 +35663,10 @@ gjungler Jungler (Gakken) + + gk2000 + Kasparov GK 2000 + gkidabc Genius KID ABC Fan (Germany) @@ -35303,6 +35839,10 @@ gl_wywhp Wish You Were Here Club (Global) (v2.9 Protocol) (Stealth) + + gladiador + Gladiadores (V1.0, CAA) + gladiatp Gladiators (pinball) @@ -35331,6 +35871,10 @@ glasskr Glass (Ver 1.1, Break Edition, Checksum D419AB69, Version 1994) (censored, unprotected) + + glck6809 + Good Luck! (dual 6809 GI Australasia PCB) + glcolor Genius Leader Color (Germany) @@ -36171,6 +36715,14 @@ goldnaxeud Golden Axe (set 5, US) (bootleg of FD1094 317-0122 set) + + goldnjkr + Golden Joker (Ver 16.06UNG-25, set 1) + + + goldnjkra + Golden Joker (Ver 16.06UNG-25, set 2) + goldnpkb Golden Poker Double Up (Mini Boy) @@ -36213,7 +36765,7 @@ goldpyrb - Golden Pyramids (0100878V, Victoria) + Golden Pyramids (0100878V, ASP) goldsam @@ -36291,13 +36843,21 @@ gorf Gorf + + gorfirec + Gorf (Spain, Irecsa license) + gorfpgm1 Gorf (program 1) + + gorfpgm1f + Gorf (program 1, with French language ROM) + gorfpgm1g - Gorf (program 1, with German Language ROM) + Gorf (program 1, with German language ROM) gork @@ -36319,6 +36879,10 @@ gostop Kankoku Hanafuda Go-Stop + + gostopac + Go & Stop + gotcha Got-cha Mini Game Festival @@ -36357,7 +36921,11 @@ gp98 - Grand Prix '98 (V100K) + Grand Prix '98 (V100K, set 1) + + + gp98a + Grand Prix '98 (V100K, set 2) gpgolf @@ -36739,6 +37307,10 @@ grdiansa Guardians / Denjin Makai II (P0-113A PCB) + + grdiansbl + Guardians / Denjin Makai II (bootleg) + grdnstrm Guardian Storm (horizontal, not encrypted) @@ -36851,6 +37423,10 @@ grndtour Grand Tour (V100U) + + grnlizrd + Green Lizard (4VXFC811, NSW) + grobda Grobda (New Ver.) @@ -37397,15 +37973,15 @@ gtrak10 - Gran Trak 10/Trak 10/Formula K [TTL] + Gran Trak 10/Trak 10/Formula K gtrak10a - Gran Trak 10/Trak 10/Formula K (older) [TTL] + Gran Trak 10/Trak 10/Formula K (older) gtrak20 - Gran Trak 20/Trak 20/Twin Racer [TTL] + Gran Trak 20/Trak 20/Twin Racer gtrfrk2m @@ -37593,7 +38169,11 @@ gtsers11a - Trivia (Questions Series 11 Alt Question Rom) + Trivia (Questions Series 11 Alt Question Rom, set 1) + + + gtsers11b + Trivia (Questions Series 11 Alt Question Rom, set 2) gtsers12 @@ -37941,7 +38521,7 @@ gunman - Gunman [TTL] + Gunman gunmania @@ -38235,10 +38815,18 @@ h8 Heathkit H8 Digital Computer + + h88 + Heathkit H88 + h89 Heathkit H89 + + h89_sigmasoft + Heathkit H89 with SigmaSoft IGC + hachamf Hacha Mecha Fighter (19th Sep. 1991, protected, set 1) @@ -38261,7 +38849,15 @@ hachoo - Hachoo! + Hachoo! (World, set 1) + + + hachooa + Hachoo! (World, set 2) + + + hachooj + Hachoo! (Japan) haekaka @@ -38315,10 +38911,22 @@ hamboy Hammer Boy + + hamhouse + Hamburger House + hammer Hammer + + hammerch + Hammer Champ (Japan) + + + hana6pt2 + Hana Awase 6 Part II + hanaawas Hana Awase @@ -38345,11 +38953,11 @@ hanaoji - Hana to Ojisan [BET] (ver 1.01, 1991/12/09) + Hana to Ojisan (ver 1.01, 1991/12/09) hanaojia - Hana to Ojisan [BET] (ver 1.00, 1991/08/23) + Hana to Ojisan (ver 1.00, 1991/08/23) hanaroku @@ -38411,6 +39019,14 @@ hangzo Hangzo (Japan, prototype) + + hapfarm + Happy Farm (Ver. US.01.02.B) + + + haplucky + Happy Lucky! + happy6 Huanle Liuhe Yi (Happy 6-in-1) (M68K ver. V101, ARM ver. V102CN) @@ -39641,7 +40257,7 @@ hginga - Hanafuda Hana Ginga [BET] (Japan) + Hanafuda Hana Ginga (Japan) hgkairak @@ -39653,11 +40269,11 @@ hgokbang - Hanafuda Hana Gokou Bangaihen [BET] (Japan) + Hanafuda Hana Gokou Bangaihen (Japan) hgokou - Hanafuda Hana Gokou [BET] (Japan) + Hanafuda Hana Gokou (Japan) hh @@ -39775,6 +40391,10 @@ hiimpactp High Impact Football (prototype, revision0 proto 8.6 12/09/90) + + hikara + Hi-kara (Japan) + hikcheck Hikaru Check ROM Board @@ -39893,23 +40513,19 @@ hjingi - Hana Jingi (Japan set 1, Bet) + Hana Jingi (Japan set 1) hjingia - Hana Jingi (Japan set 2, Bet) + Hana Jingi (Japan set 2) hk1000 HK1000 - - hk68v10 - HK68/V10 - hkagerou - Hana Kagerou [BET] (Japan) + Hana Kagerou (Japan) hkb502 @@ -40025,7 +40641,7 @@ hnfubuki - Hana Fubuki [BET] (Japan) + Hana Fubuki (Japan) hngmnjpm @@ -40037,7 +40653,7 @@ hnkochou - Hana Kochou (Japan, Bet) + Hana Kochou (Japan) hnktonku @@ -40065,7 +40681,7 @@ hockyrmt - Hockey (Ramtek) [TTL] + Hockey (Ramtek) hocrash @@ -40153,12 +40769,16 @@ honooinv - Honoo no Invader (main ver. 1.35, video ver. 1.35) + Honoo no Invader (Japan, main ver. 1.35, video ver. 1.35) hook Hook (World) + + hook_400 + Hook (USA 4.01, display A4.00) + hook_401 Hook (USA 4.01, display A4.01) @@ -40179,6 +40799,10 @@ hook_e406 Hook (UK 4.06, display A4.01) + + hook_f401 + Hook (USA 4.01, display F4.01) + hookj Hook (Japan) @@ -40783,6 +41407,10 @@ hpuncher Hard Puncher (Japan) + + hpyagu98 + Hanguk Pro Yagu 98 + hpz80unk unknown Z80-based mainframe @@ -40795,6 +41423,10 @@ hr16b HR-16B + + hr84 + HR-84 + hrclass Home Run Classic (v1.21 12-feb-1997) @@ -40807,6 +41439,10 @@ hrdtimesa Hard Times (set 2) + + hrtthrob + Heart Throb (01J02866, Venezuela) + hs36blk HengSheng 36-in-1 (Black pad) @@ -40909,11 +41545,7 @@ htengoku - Hanafuda Hana Tengoku [BET] (Japan) - - - hthero - Hat Trick Hero (Japan) + Hanafuda Hana Tengoku (Japan) hthero93 @@ -40939,6 +41571,14 @@ hthero95u Hat Trick Hero '95 (Ver 2.5A 1994/11/03) + + htheroj + Hat Trick Hero (Japan) + + + htherou + Hat Trick Hero (US) + httip_l1 Hot Tip (L-1) @@ -41033,11 +41673,11 @@ hustlerb2 - Fatsy Gambler (Video Hustler bootleg) + Fatsy Gambler (bootleg of Video Hustler) hustlerb3 - Video Pool (Video Hustler bootleg) + Video Pool (bootleg of Video Hustler) hustlerb4 @@ -41257,7 +41897,7 @@ hyouban - Mahjong Hyouban Musume [BET] (Japan) + Mahjong Hyouban Musume (Japan) hypbbc2p @@ -41347,6 +41987,10 @@ hyprolym Hyper Olympic + + hyprolyma + Hyper Olympic (bugfixed) + hyprolymb Hyper Olympic (bootleg, set 1) @@ -41463,6 +42107,14 @@ ibm3153 IBM 3153 Terminal + + ibm5100 + IBM 5100 + + + ibm5110 + IBM 5110 + ibm5140 IBM PC 5140 Convertible @@ -41493,7 +42145,7 @@ ibm5550 - 5550 + Multistation 5550 ibm6580 @@ -41587,6 +42239,10 @@ icldrsm40 DRS M40 + + icm3216 + ICM-3216 + ics8080 ICS8080 @@ -41609,7 +42265,7 @@ idhimitu - Idol no Himitsu [BET] (Japan 890304) + Idol no Himitsu (Japan 890304) idolmj @@ -41633,7 +42289,7 @@ iemotom - Iemoto [BET] (Japan 871118) + Iemoto (Japan 871118, medal) iez80 @@ -41655,6 +42311,10 @@ igmo IGMO + + igor + Igor (Excalibur) + igromula Igrosoft Multigame Bootleg (15 Games) @@ -41923,6 +42583,10 @@ incanp Incan Pyramid (Konami Endeavour, Russia) + + incanpq + Incan Pyramid (Konami Endeavour, Queensland) + incasun Inca Sun (0100872V, NSW/ACT) @@ -42004,9 +42668,13 @@ Indian Dreaming (0100845V, NSW/ACT) - indrema5ql + indrema5q Indian Dreaming (0101340V, Queensland) + + indrema5v + Indian Dreaming (02J01856, Venezuela) + indremce Indian Dreaming - Cash Express (20109411, NSW/ACT) @@ -42021,7 +42689,7 @@ indy4 - Indy 4 [TTL] + Indy 4 indy500 @@ -42037,7 +42705,7 @@ indy800 - Indy 800 [TTL] + Indy 800 indy_113a @@ -42547,6 +43215,10 @@ inwinner Instant Winner (Russian) + + inwinners + Instant Winner (Spanish) + inyourfa In Your Face (North America, prototype) @@ -42621,7 +43293,7 @@ ippatsu - Ippatsu Gyakuten [BET] (Japan) + Ippatsu Gyakuten (Japan) iq128 @@ -42963,6 +43635,10 @@ itvphone Teléfono interactivo de TV (Spain) + + ivant + Ivan The Terrible + ivelultr Ivel Ultra @@ -48587,13 +49263,17 @@ jackbean Jack & The Beanstalk (Doyle & Assoc.?) + + jackhous + Jack House + jackie Happy Jackie (v110U) jackler - Jackler (Jungler bootleg) + Jackler (bootleg of Jungler) jackpool @@ -48619,6 +49299,10 @@ jackrabts Jack Rabbit (special) + + jackuse + Jack Use (Jackpot settings for Interflip slots machines) + jade unknown S-100 computer with Serial/Parallel/Interrupt Controller @@ -48907,13 +49591,17 @@ jamesb2 James Bond (3/5-Ball) + + jaminator + Jaminator + janbari Mahjong Janjan Baribari (Japan) jangou - Jangou [BET] (Japan) + Jangou (Japan) jangtaku @@ -48949,7 +49637,7 @@ janputer - New Double Bet Mahjong (bootleg of Royal Mahjong) [BET] + New Double Bet Mahjong (bootleg of Royal Mahjong) janshi @@ -48961,7 +49649,7 @@ janshinp - Mahjong Janshin Plus [BET] (Japan) + Mahjong Janshin Plus (Japan) jansou @@ -49115,6 +49803,10 @@ jefffox You Might Be A Redneck If... - Jeff Foxworthy (0351068, US) + + jesterch + Jester Chance (dual 6809 GI Australasia PCB) + jestmagi Jester Magic (Konami Endeavour, Russia) @@ -49125,11 +49817,11 @@ jetfight - Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (set 1) [TTL] + Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (set 1) jetfighta - Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (set 2) [TTL] + Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (set 2) jetwave @@ -49139,6 +49831,10 @@ jetwavej Jet Wave (JAB, Japan v1.04) + + jeuint + Jeu Intéractif TV (France) + jewelcm Jewel of the Enchantress - Mr. Cashman (0151051, US) @@ -49199,10 +49895,6 @@ jjack Jumping Jack - - jjokeri - Jolly Joker? (Impera, V11/90b) - jjparad2 Jan Jan Paradise 2 @@ -49357,34 +50049,42 @@ jojoba - JoJo's Bizarre Adventure (Euro 990927) - - - jojobaj - JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927) + JoJo's Bizarre Adventure (Euro 991015, NO CD) jojobajr1 + JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927) + + + jojobajr2 JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913) jojoban - JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927, NO CD) - - - jojobane - JoJo's Bizarre Adventure (Euro 990927, NO CD) + JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 991015, NO CD) jojobaner1 + JoJo's Bizarre Adventure (Euro 990927, NO CD) + + + jojobaner2 JoJo's Bizarre Adventure (Euro 990913, NO CD) jojobanr1 + JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990927, NO CD) + + + jojobanr2 JoJo no Kimyou na Bouken: Mirai e no Isan (Japan 990913, NO CD) jojobar1 + JoJo's Bizarre Adventure (Euro 990927) + + + jojobar2 JoJo's Bizarre Adventure (Euro 990913) @@ -49637,7 +50337,11 @@ jongtei - Mahjong Jong-Tei [BET] (Japan, NM532-01) + Mahjong Jong-Tei (Japan, NM532-01) + + + jongteia + Mahjong Jong-Tei (Japan, Techno-Top license) jonos @@ -49769,7 +50473,7 @@ jppyex98 - Jikkyou Powerful Pro Yakyuu EX '98 (GC811 VER. JAA) + Jikkyou Pawafuru Puro Yakyu EX '98 (GC811 VER. JAA) jptparty @@ -49989,7 +50693,7 @@ jungjuic - Jungle Juice (0200240V, New Zealand) + Jungle Juice (0200240V, ASP) jungleby @@ -50143,6 +50847,10 @@ jx8po JX-8P Polyphonic Synthesizer (Ver. 2.x) + + jxzh + Jinxiu Zhonghua + jy_03 Junk Yard (0.3) @@ -50257,15 +50965,15 @@ kaguya - Mahjong Kaguyahime [BET] (Japan 880521) + Mahjong Kaguyahime (Japan 880521) kaguya2 - Mahjong Kaguyahime Sono2 [BET] (Japan 890829) + Mahjong Kaguyahime Sono2 (Japan 890829) kaguya2f - Mahjong Kaguyahime Sono2 Fukkokuban [BET] (Japan 010808) + Mahjong Kaguyahime Sono2 Fukkokuban (Japan 010808) kaiserkn @@ -50305,7 +51013,7 @@ kamakazi3 - Kamakazi III ('Super Galaxians' hack) + Kamakazi III (hack of 'Super Galaxians') kamenrid @@ -50329,7 +51037,7 @@ kanatuen - Kanatsuen no Onna [BET] (Japan 880905) + Kanatsuen no Onna (Japan 880905) kangaroo @@ -50351,6 +51059,10 @@ kaos Kaos + + karams + KaraokeMicro Star (France) + karatblz Karate Blazers (World, set 1) @@ -50395,6 +51107,10 @@ karatourj Chatan Yara Kuushanku - The Karate Tournament (Japan) + + karatvst + KaraokeTV Star (US, with 50 songs) + karianx Karian Cross (Rev. 1.0) @@ -50425,6 +51141,10 @@ kartduel + Kart Duel (World, KTD2/VER.A) + + + kartduelj Kart Duel (Japan, KTD1/VER.A) @@ -50861,7 +51581,7 @@ kf10thep - The King of Fighters 10th Anniversary Extra Plus (The King of Fighters 2002 bootleg) + The King of Fighters 10th Anniversary Extra Plus (bootleg of The King of Fighters 2002) kf2k2mp @@ -50893,15 +51613,15 @@ kf2k3pl - The King of Fighters 2004 Plus / Hero (The King of Fighters 2003 bootleg) + The King of Fighters 2004 Plus / Hero (bootleg of The King of Fighters 2003) kf2k3upl - The King of Fighters 2004 Ultra Plus (The King of Fighters 2003 bootleg) + The King of Fighters 2004 Ultra Plus (bootleg of The King of Fighters 2003) kf2k5uni - The King of Fighters 10th Anniversary 2005 Unique (The King of Fighters 2002 bootleg) + The King of Fighters 10th Anniversary 2005 Unique (bootleg of The King of Fighters 2002) kftgoal @@ -51003,6 +51723,14 @@ kickridr Kick Rider + + kidizmb + Kidizoom (Germany, blue camera) + + + kidizmp + Kidizoom Connect (Germany, pink camera) + kidnap Kidnap @@ -51255,6 +51983,10 @@ kizuna4p Kizuna Encounter - Super Tag Battle 4 Way Battle Version / Fu'un Super Tag Battle Special Version + + kkcount + Circlun - Kuru.Kuru-Count + kkongltd King Kong @@ -51371,9 +52103,17 @@ kngtmare Knightmare (prototype) + + knightar + Knights in Armor + knightb - Knight Boy + Knight Boy (bootleg of KiKi KaiKai, set 1) + + + knightba + Knight Boy (bootleg of KiKi KaiKai, set 2) knights @@ -51457,7 +52197,7 @@ kof10th - The King of Fighters 10th Anniversary (The King of Fighters 2002 bootleg) + The King of Fighters 10th Anniversary (bootleg of The King of Fighters 2002) kof2000 @@ -51501,7 +52241,7 @@ kof2k4se - The King of Fighters Special Edition 2004 (The King of Fighters 2002 bootleg) + The King of Fighters Special Edition 2004 (bootleg of The King of Fighters 2002) kof94 @@ -51625,7 +52365,7 @@ kog - King of Gladiator (The King of Fighters '97 bootleg) + King of Gladiator (bootleg of The King of Fighters '97) kohinoor @@ -51637,7 +52377,7 @@ koikois - Koi Koi Shimasho + Koi Koi Shimasho - Super Real Hanafuda koikois2 @@ -51673,7 +52413,7 @@ komemokos - Komemokos ('Pac-Man (Cirsa, Spanish bootleg)' hack) + Komemokos (hack of 'Pac-Man (Cirsa, Spanish bootleg)') komocomo @@ -51797,7 +52537,7 @@ korinaim - Mahjong-zukino Korinai Menmen [BET] (Japan 880920) + Mahjong-zukino Korinai Menmen (Japan 880920, medal) korokoro @@ -52021,15 +52761,15 @@ kovsgqyz - Sanguo Qunying Chuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 1) + Sanguo Qunying Zhuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 1) kovsgqyza - Sanguo Qunying Chuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 2) + Sanguo Qunying Zhuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 2) kovsgqyzb - Sanguo Qunying Chuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 3) + Sanguo Qunying Zhuan Zhengzong Plus (bootleg of Knights of Valour Plus, set 3) kovsh @@ -52151,6 +52891,10 @@ ksp10 KSP10 Digital Piano + + kst25 + Star Trek: 25th Anniversary (handheld) + kt216wb5 KT216WB5-HI Rev.2 @@ -52195,6 +52939,10 @@ ktopgun Top Gun (handheld) + + ktopgun2 + Top Gun: Second Mission (handheld) + ktparman Kiteyo Parman @@ -52209,11 +52957,11 @@ kungfu - Kung Fu (IGS, v202N) + Kung Fu Fighters (IGS, v202N) kungfua - Kung Fu (IGS, v100) + Kung Fu Fighters (IGS, v100) kungfub @@ -52317,7 +53065,7 @@ kyuhito - Kyukyoku no Hito [BET] (Japan 880824) + Kyukyoku no Hito (Japan 880824) kyukaidk @@ -52433,7 +53181,7 @@ ladymakr - Lady Maker [BET] (Japan) + Lady Maker (Japan) ladymstr @@ -52557,7 +53305,7 @@ lans2004 - Lansquenet 2004 (Shock Troopers - 2nd Squad bootleg) + Lansquenet 2004 (bootleg of Shock Troopers - 2nd Squad) lanteach @@ -52923,6 +53671,10 @@ ld50 LD-50 + + ldmj1mbh + LD Mahjong #1 Marine Blue no Hitomi (Japan) + ldquiz4 LD Quiz dai 4-dan - Kotaetamon Gachi! (Japan) @@ -53141,7 +53893,7 @@ lemans - Le Mans [TTL] + Le Mans lemans24 @@ -53243,6 +53995,10 @@ lethalth Lethal Thunder (World) + + letsdnce + Let's Dance + letsgoju Let's Go Jungle (Export) @@ -53259,6 +54015,10 @@ levers Levers + + lexiart + Lexibook Junior My 1st Drawing Studio + lexifit TV Fitness Center (Lexibook) @@ -53271,6 +54031,10 @@ lexiseal Seal 50-in-1 + + lexitvsprt + TV Sports Plug & Play 5-in-1 (JG7000) + lexizeus Zeus IG900 20-in-1 (US?) @@ -53521,11 +54285,19 @@ lilprof - Little Professor (1976 version) + Little Professor (1978 version) - lilprofa - Little Professor (1978 version) + lilprofo + Little Professor (1976 version, rev. C) + + + lilprofoa + Little Professor (1976 version, rev. A) + + + lilprofob + Little Professor (1976 version, rev. B) lineking @@ -53577,7 +54349,7 @@ livegal - Live Gal [BET] (Japan 870530) + Live Gal (Japan 870530) livequiz @@ -53715,6 +54487,10 @@ locolootnz Loco Loot (0600725V, New Zealand) + + locolootq + Loco Loot (0300670V, Queensland) + locolootu Loco Loot (AHG1513, US) @@ -53811,10 +54587,18 @@ lol Life of Luxury (Russian) + + lola8 + Lola 8 + lola8a Lola 8A + + lola8nk + Lola 8 NK + lomakai Legend of Makai (World) @@ -53857,6 +54641,10 @@ lordgun + Lord of Gun (World) + + + lordgunu Lord of Gun (USA) @@ -54149,7 +54937,7 @@ lovehous - Mahjong Love House [BET] (Japan 901024) + Mahjong Love House (Japan 901024) loverboy @@ -54407,6 +55195,10 @@ luckyclo Lucky Clover (0300109V, NSW/ACT) + + luckycoin + Lucky Coin (Jun 24 2002) + luckygrl Lucky Girl (Wing) @@ -54545,7 +55337,7 @@ lvpoker - Lovely Poker [BET] + Lovely Poker lw30 @@ -54621,7 +55413,7 @@ lwingsj - Ares no Tsubasa (Japan) + Ares no Tsubasa (Japan, rev. B) lwingsja @@ -54641,7 +55433,11 @@ lx_aven - Marvel Avengers TV Game Console (32-bit) (Lexibook) + Marvel Avengers TV Game Console (32-bit, Lexibook) + + + lx_frozen + Disney Frozen TV Game Console (32-bit, Lexibook, JG7420FZ) lx_jg7410 @@ -54651,10 +55447,18 @@ lx_jg7415 Lexibook JG7415 120-in-1 + + lx_jg7420 + Lexibook JG7420 200-in-1 + lx_jg7425 Lexibook JG7425 221-in-1 + + lxairjet + Super TV Air Jet 6-in-1 (Lexibook Junior) + lxcap Cyber Arcade Pocket (JL1895) @@ -54711,6 +55515,10 @@ lxcyber Cyber Arcade 200-in-1 + + lxnoddy + Noddy's TV Console + lxspidaj Spider-Man Super TV Air Jet (Lexibook Junior, JG6000SP) @@ -84592,16 +85400,28 @@ Multi-Action 6710-13 - ma7551 - Multi-Action 7551 + ma6710a + Multi-Action 6710-21 + + + ma7551p + Multi-Action 7551-21-R2P + + + ma7551t + Multi-Action 7551-20-R3T ma7556 - Multi-Action 7556 + Multi-Action 7556-00-R2 ma7558 - Multi-Action 7558 + Multi-Action 7558-01-R0 + + + ma8350 + Multi-Action 8350-00-R1 mac128k @@ -84895,6 +85715,10 @@ macsefd Macintosh SE (FDHD) + + mactv + Macintosh TV + macxl Macintosh XL @@ -84995,6 +85819,10 @@ mag10 Magic 10 Nevada (bootleg of Pool 10) + + mag_boob + Booby Kids (Magnet System) + mag_burn The Burning Cavern (31/03/87) @@ -85103,6 +85931,10 @@ magibombi Magic Bomb (Ver. A3.6A) + + magibombj + Magic Bomb (Ver. AA.72.C, 25/05/05) + magic Magic @@ -85463,13 +86295,17 @@ majorpkrc Major Poker (set 4, Micro Manufacturing intro) + + majrjh + Mahjong Raijinhai (Ver. D105) + majrjhdx - Mahjong Raijinhai DX + Mahjong Raijinhai DX (Ver. D105) majs101b - Mahjong Studio 101 [BET] (Japan) + Mahjong Studio 101 (Japan) majtitl2 @@ -85501,7 +86337,7 @@ majxtal7 - Mahjong X-Tal 7 - Crystal Mahjong / Mahjong Diamond 7 (Japan, Bet) + Mahjong X-Tal 7 - Crystal Mahjong / Mahjong Diamond 7 (Japan) makaiden @@ -85509,7 +86345,7 @@ makaijan - Makaijan [BET] (Japan) + Makaijan (Japan) makaimur @@ -85707,6 +86543,10 @@ marc250 Millennium Arcade 250 (M527) + + marimba + Marimba Tengoku (Japan) + marineb Marine Boy @@ -85745,7 +86585,7 @@ mariojjl - Super Mario Fushigi no JanJanLand (Ver.1.00C, 06/08/29) + Super Mario Fushigi no JanJanLand (Ver.1.00C, 2006/08/29) mariorou @@ -85815,10 +86655,6 @@ martmast104c Martial Masters / Xing Yi Quan (ver. 104, 102, 101CN) - - martmasttw - Martial Masters / Xing Yi Quan (ver. 102, 101, 101TW) - maruchan Maru-Chan de Goo! (J 971216 V1.000) @@ -85987,9 +86823,13 @@ match98 Match '98 (ver. 1.33) + + matchem + Match'em Up (6221-51, U5-1) + matchemg - Match'em Up (German) + Match'em Up (6221-55, U5-1 German) matchit @@ -86621,7 +87461,7 @@ mcitylov - City Love [BET] (Japan 860904) + City Love (Japan 860904, medal) mclass @@ -86667,6 +87507,10 @@ mcontest Miss Mahjong Contest (Japan) + + mcwars + Macro-Cosm Wars (bootleg of Galaxian) + md2 Micro Decision MD-2 @@ -86733,7 +87577,7 @@ mead4in1 - Meadows 4 in 1 [TTL] + Meadows 4 in 1 mechatt @@ -86759,6 +87603,10 @@ medalnt2 Medal no Tatsujin 2 Atsumare! Go! Go! Sugoroku Sentai Don Ranger Five (MTA1 STMPR0A) + + medalnta + Medal no Tatsujin Doki! Ooatari-Darake no Sugoroku Matsuri (MTL1 SPR0A) + medlanes Meadows Lanes @@ -86969,7 +87817,7 @@ megat - Pit Boss Megatouch (9234-20-01) + Pit Boss Megatouch (9234-20-01 R0A) megat2 @@ -87231,6 +88079,10 @@ menghong Meng Hong Lou + + mentor16 + Mentor 16 + meosism Meosis Magic (Japan) @@ -87289,7 +88141,7 @@ mercenario - Mercenario (Commando bootleg) + Mercenario (bootleg of Commando) mercs @@ -87473,11 +88325,11 @@ mexico86 - Mexico 86 (bootleg of Kick and Run) (set 1) + Mexico 86 (bootleg of Kick and Run, set 1) mexico86a - Mexico 86 (bootleg of Kick and Run) (set 2) + Mexico 86 (bootleg of Kick and Run, set 2) mexicoi @@ -87689,23 +88541,31 @@ mgcs - Man Guan Caishen (China, V103CS) + Manguan Caishen (China, V103CS) + + + mgcs3 + Man Guan Caishen 3 (V101CN) mgdh - Man Guan Daheng (Taiwan, V125T1) + Manguan Daheng (Taiwan, V125T1) mgdha - Man Guan Daheng (Taiwan, V123T1) + Manguan Daheng (Taiwan, V123T1) mgfx Man Guan Fu Xing + + mghammer + Medal Get Hammer (V100JP) + mgion - Gionbana [BET] (Japan 890207) + Gionbana (Japan 890207, medal) mgmen89 @@ -87731,6 +88591,10 @@ mgtfit Fitness Konsole (NC1470) + + mgzz + Man Guan Zhi Zun (V100CN) + mhavoc Major Havoc (rev 3) @@ -88205,7 +89069,7 @@ mirderby - Miracle Derby - Ascot + Miracle Derby (Japan) mirninja @@ -88265,7 +89129,7 @@ missilex - Missile-X [TTL] + Missile-X missmw96 @@ -88359,6 +89223,10 @@ mj3evoup Sega Network Taisen Mahjong MJ 3 Evolution Firmware Update (GDX-0023) + + mj3up + Sega Network Taisen Mahjong MJ 3 Firmware Update (GDX-0019) + mj4simai Wakakusamonogatari Mahjong Yonshimai (Japan) @@ -88369,7 +89237,7 @@ mjanbari - Medal Mahjong Janjan Baribari [BET] (Japan) + Medal Mahjong Janjan Baribari (Japan) mjangels @@ -88377,7 +89245,7 @@ mjapinky - Almond Pinky [BET] (Japan) + Almond Pinky (Japan) mjcamera @@ -88389,7 +89257,7 @@ mjchuuka - Maque Zhonghua Ernu [BET] (Taiwan) + Maque Zhonghua Ernu (Taiwan) mjclinic @@ -88401,7 +89269,7 @@ mjclub - Mahjong Club [BET] (Japan) + Mahjong Club (Japan) mjcomv1 @@ -88409,7 +89277,7 @@ mjdchuka - Maque Da Zhonghua Quan [BET] (Taiwan, D111) + Maque Da Zhonghua Quan (Taiwan, D111) mjdejav2 @@ -88433,7 +89301,7 @@ mjdiplob - Mahjong Diplomat [BET] (Japan) + Mahjong Diplomat (Japan) mjegolf @@ -88441,23 +89309,23 @@ mjelct3 - Mahjong Electron Base (parts 2 & 3, Japan set 1, Bet) + Mahjong Electron Base (parts 2 & 3, Japan set 1) mjelct3a - Mahjong Electron Base (parts 2 & 3, Japan set 2, Bet) + Mahjong Electron Base (parts 2 & 3, Japan set 2) mjelctrb - Mahjong Electron Base (parts 2 & 4, Japan bootleg, Bet) + Mahjong Electron Base (parts 2 & 4, Japan bootleg) mjelctrn - Mahjong Electron Base (parts 2 & 4, Japan, Bet) + Mahjong Electron Base (parts 2 & 4, Japan) mjembase - Mahjong Electromagnetic Base (Japan, Bet) + Mahjong Electromagnetic Base (Japan) mjflove @@ -88469,7 +89337,7 @@ mjfocusm - Mahjong Focus [BET] (Japan 890510) + Mahjong Focus (Japan 890510, medal) mjfriday @@ -88477,7 +89345,7 @@ mjgaiden - Mahjong Gaiden [BET] (Japan 870803) + Mahjong Gaiden (Japan 870803) mjgalpri @@ -88485,7 +89353,7 @@ mjgnight - Mahjong Gorgeous Night [BET] (Japan, TSM003-01) + Mahjong Gorgeous Night (Japan, TSM003-01) mjgottsu @@ -88493,7 +89361,7 @@ mjgottub - Medal Mahjong Gottsu ee-kanji [BET] (Japan) + Medal Mahjong Gottsu ee-kanji (Japan) mjgtaste @@ -88505,15 +89373,15 @@ mjifb - Mahjong If...? [BET] + Mahjong If...? mjifb2 - Mahjong If...? [BET](2921) + Mahjong If...? (2921) mjifb3 - Mahjong If...? [BET](2931) + Mahjong If...? (2931) mjikaga @@ -88553,7 +89421,7 @@ mjmaglmp - Mahjong Magic Lamp (v. JAA02) + Mahou no Lamp (v. JAA02) mjmania @@ -88561,27 +89429,27 @@ mjmyorn2 - Mahjong The Mysterious Orient Part 2 ~ Exotic Dream ~ [BET] (Japan, v1.00) + Mahjong The Mysterious Orient Part 2 ~ Exotic Dream ~ (Japan, v1.00) mjmyornt - Mahjong The Mysterious Orient [BET] (Japan, v1.00) + Mahjong The Mysterious Orient (Japan, v1.00) mjmyorntr - Mahjong The Mysterious Orient Returns [BET] (Japan, v1.00) + Mahjong The Mysterious Orient Returns (Japan, v1.00) mjmyster - Mahjong The Mysterious World [BET] (Japan, set 1) + Mahjong The Mysterious World (Japan, set 1) mjmyuniv - Mahjong The Mysterious Universe [BET] (Japan, D85) + Mahjong The Mysterious Universe (Japan, D85) mjmywrld - Mahjong The Mysterious World [BET] (Japan, set 2) + Mahjong The Mysterious World (Japan, set 2) mjnanpaa @@ -88613,15 +89481,23 @@ mjreach - Mahjong Reach (bootleg) + Mahjong Reach (Ver. 1.00) mjreach1 - Mahjong Reach Ippatsu [BET] (Japan) + Mahjong Reach Ippatsu (Japan) + + + mjreachbl + Mahjong Reach (Ver 1.00, bootleg) + + + mjreachp2 + Mahjong Reach Part II (Ver. D88) mjschuka - Mahjong Super Dai Chuuka Ken [BET] (Japan, D115) + Mahjong Super Dai Chuuka Ken (Japan, D115) mjsenka @@ -88673,11 +89549,11 @@ mjyarou - Mahjong Yarou [BET] (Japan, set 1) + Mahjong Yarou (Japan, set 1) mjyarou2 - Mahjong Yarou [BET] (Japan, set 2) + Mahjong Yarou (Japan, set 2) mjyougo @@ -89017,7 +89893,7 @@ mltpoints - Multi Points + Multi Points (V1.0, CAA) mm1 @@ -89059,6 +89935,10 @@ mm2e Mephisto MM II (set 6) + + mm2nona + Mephisto MM II (Nona program, DOCCC 1985 Leiden TM) + mm4 Mephisto MM IV (v7.10) @@ -89085,7 +89965,7 @@ mm5p - Mephisto MM V (Portorose TM version) + Mephisto MM V (WMCCC 1989 Portorose TM) mm_05 @@ -89121,7 +90001,7 @@ mmaiko - Maikobana [BET] (Japan 900911) + Maikobana (Japan 900911, medal) mmancp2u @@ -89137,11 +90017,11 @@ mmaruchan - Chibi Maruko-chan ~Minna de Sugoroku Asobi~ no Maki (Ver.1.00B, 05/06/22) + Chibi Maruko-chan ~Minna de Sugoroku Asobi~ no Maki (Ver.1.00B, 2005/06/22) mmaruchana - Chibi Maruko-chan ~Minna de Sugoroku Asobi~ no Maki (Ver.1.00A, 04/04/20) + Chibi Maruko-chan ~Minna de Sugoroku Asobi~ no Maki (Ver.1.00A, 2004/04/20) mmarvin @@ -89181,7 +90061,7 @@ mmcamera - Mahjong Camera Kozou [BET] (Japan 890509) + Mahjong Camera Kozou (Japan 890509, medal) mmd1 @@ -89193,7 +90073,7 @@ mmehyou - Medal Mahjong Circuit no Mehyou [BET] (Japan) + Medal Mahjong Circuit no Mehyou (Japan) mmerlin @@ -89257,7 +90137,7 @@ mmsikaku - Mahjong Shikaku [BET] (Japan 880929) + Mahjong Shikaku (Japan 880929, medal) mmt8 @@ -89357,7 +90237,7 @@ mocapglf - Mocap Golf (ver UAA) + Mocap Golf (ver EAA:B) mod8 @@ -89415,6 +90295,10 @@ mohicans Mohican Sun (Konami Endeavour, Russia) + + mojmikro + Moj mikro Slovenija + mok The Maze of the Kings (GDS-0022) @@ -89453,15 +90337,15 @@ momotaro - Mahjong Momotarou [BET] (Japan, T027-RB-01) + Mahjong Momotarou (Japan, T027-RB-01) monacogp - Monaco GP (set 1) [TTL] + Monaco GP (set 1) monacogpa - Monaco GP (set 2) [TTL] + Monaco GP (set 2) mondial @@ -89515,6 +90399,14 @@ monkeyd Monkey Donkey + + monkeyl + Monkey Land (Ver. AA.21.A) + + + monkeyla + Monkey Land (Ver. AA.13.B) + monkeysee Monkey See (1982 version) @@ -89669,7 +90561,7 @@ montec4le - Mephisto Monte Carlo IV - Limited Edition + Mephisto Monte Carlo IV: Limited Edition monteca @@ -89679,6 +90571,10 @@ montecar Monte Carlo + + montreal + Mephisto Montreal 68000 + montree Money Tree (0201397V, New Zealand) @@ -89749,7 +90645,7 @@ mooncmw - Moon War (Moon Cresta bootleg) + Moon War (bootleg of Moon Cresta) mooncptc @@ -89781,7 +90677,7 @@ mooncrs4 - Moon Crest (Moon Cresta bootleg) + Moon Crest (bootleg of Moon Cresta) mooncrs5 @@ -89793,7 +90689,7 @@ mooncrsl - Cresta Mundo (Laguna S.A. Spanish Moon Cresta bootleg) + Cresta Mundo (Spanish bootleg of Moon Cresta) mooncrst @@ -89929,7 +90825,7 @@ motogp - Moto GP (MGP1004-NA-B) + MotoGP (MGP1004-NA-B) motorace @@ -90001,7 +90897,7 @@ mouncrst - Moune Creste (Jeutel French Moon Cresta bootleg) + Moune Creste (Jeutel French bootleg of Moon Cresta) mountmon @@ -90305,7 +91201,7 @@ mrangbat - Mahou Taiketsu Magiranger - Magimat de Dance & Battle (Japan) + Let's! TV Play Mahou Taiketsu Magiranger - Magimat de Dance & Battle (Japan) mranger @@ -90459,6 +91355,10 @@ mrtlbeat Martial Beat (G*B47 VER. JBA) + + mrtlbeata + Martial Beat (G*B47 VER. JAB) + mrtnt Mr. TNT @@ -90617,7 +91517,7 @@ mshud - Marvel Super Heroes (US 951024 Phoenix Edition) (bootleg) + Marvel Super Heroes (USA 951024 Phoenix Edition) (bootleg) mshuttle @@ -90761,7 +91661,7 @@ mslug3b6 - Metal Slug 6 (Metal Slug 3 bootleg) + Metal Slug 6 (bootleg of Metal Slug 3) mslug3h @@ -90863,6 +91763,10 @@ mspacmanbgd Miss Pukman ('Made in Greece' Datamat bootleg) + + mspacmanbgf + Mr Pac-Turbo ('Made in Greece' Fermin bootleg) + mspacmanbhe Come-Cocos (Ms. Pac-Man) ('Made in Greece' Herle SA bootleg) @@ -90883,6 +91787,10 @@ mspacmancr Ms. Pac-Man (bootleg on Crush Roller Hardware) + + mspacmanhnc + Super Ms. Pac-Man (turbo hack, NVC284/NVC285 hardware) + mspacmanlai Ms. Pac-Man (Leisure and Allied bootleg) @@ -90913,7 +91821,11 @@ mspactwin - Ms Pac Man Twin (Argentina) + Ms Pac Man Twin (Argentina, set 1) + + + mspactwina + Ms Pac Man Twin (Argentina, set 2) mspuzzle @@ -90975,6 +91887,10 @@ mt420 Micro-Term 420 + + mt440 + Micro-Term 440 + mt5510 Microterm 5510 @@ -91273,6 +92189,10 @@ mtrain + Magic Train (Ver. 1.4) + + + mtraina Magic Train (Ver. 1.31) @@ -91321,7 +92241,7 @@ mtwinsb - Twins (Mega Twins bootleg) + Twins (bootleg of Mega Twins) mtx500 @@ -91331,18 +92251,30 @@ mtx512 MTX 512 + + mu10 + MU10 + mu100 MU100 mu100b - MU100B + MU100 Screenless version mu100r MU100 Rackable version + + mu128 + MU128 + + + mu15 + MU15 + mu5 MU-5 @@ -91355,6 +92287,10 @@ mu80 MU80 + + mu90 + MU90 + mugsmash Mug Smashers @@ -91589,7 +92525,7 @@ mutacion - Mutacion (Explomatic Spanish Moon Cresta bootleg) + Mutacion (Explomatic Spanish bootleg of Moon Cresta) mutantf @@ -91613,7 +92549,7 @@ mutantwarr - Mutant Warrior (Altered Beast - Datsu bootleg) + Mutant Warrior (Datsu bootleg of Altered Beast) mutnat @@ -91675,10 +92611,6 @@ mvbfree Mini-Vid: Break Free - - mvme147 - MVME-147 - mvme162 MVME-162 @@ -92011,6 +92943,10 @@ mywicogt My Wico Guitar + + mz1 + MZ-1 (prototype) + mz1500 MZ-1500 @@ -92067,10 +93003,6 @@ mz80kj MZ-80K (Japanese) - - mzr8105 - Mizar VME8105 - n501 Samsung NUON Enhanced DVD Player / DVD-N501 @@ -92127,6 +93059,10 @@ naganoj Hyper Olympic in Nagano (GX720 JAA) + + naltair + Altair (Nauchpribor) + nam1975 NAM-1975 (NGM-001 ~ NGH-001) @@ -92407,6 +93343,14 @@ nbajamexa NBA Jam Extreme (ver. 1.04) + + nbajamp1 + NBA Jam (proto v 1.01 1/23/93) + + + nbajamp2 + NBA Jam (proto v 2.00 1/24/93) + nbajamr1 NBA Jam (rev 1.00 2/1/93) @@ -92447,6 +93391,10 @@ nbajamten NBA Jam Tournament Edition (Nani Edition, rev 5.2 8/11/95, prototype) + + nbajamtep2 + NBA Jam Tournament Edition (proto 2.00 12/17/93) + nbamac NBA MAC @@ -92595,6 +93543,10 @@ nc96txt New Cherry '96 Special Edition (v1.32 Texas XT, C2 PCB) + + ncarrera + New Carrera - Version 2000 + ncb3 Cherry Bonus III (ver.1.40, set 1) @@ -92703,13 +93655,17 @@ ndcfboxa Naomi DIMM Firmware Update for CF-BOX (4.01) (GDS-0042A) + + ndongmul + New DongmulDongmul + nds DS ndxron10 - Royal on Ten (Noraut Deluxe hack) + Royal on Ten (hack of Noraut Deluxe Poker) neat @@ -92919,6 +93875,22 @@ newhilop New Hi-Low Poker + + newhunter + New HUNTer + + + newhunterb + New HUNTer (bootleg, set 1) + + + newhunterc + New HUNTer (bootleg, set 2) + + + newhunterd + New HUNTer (bootleg, set 3) + newmcard New Magic Card @@ -93201,7 +94173,7 @@ ngalsumr - Night Gal Summer [BET] (Japan 850702 NGS 0-01) + Night Gal Summer (Japan 850702 NGS 0-01) ngbc @@ -93793,11 +94765,11 @@ novoplaya - Novo Play (V6.2H) + Novo Play Club Card (V6.2H) novoplayb - Novo Play (V3.3H) + Novo Play Club Card (V3.3H) npc8300 @@ -93819,6 +94791,10 @@ npfpit Neo Print - Fuyu Pri Iitoko-dori (Japan) (T4i 3.07) + + npft + Neo Print - Fairy Tales (World) (T4i 3.07) + npmillen Neo Print - Millennium Multi Shot Edition (World) (T4i 3.07) @@ -93831,6 +94807,10 @@ nppopeye Neo Print - Popeye (Japan) (T4i 3.04) + + nprimo + Primo (Novag) + nprinces Ninja Princess (315-5051, 64k Ver. bootleg?) @@ -93953,7 +94933,11 @@ nsnova - Super Nova (Novag, v1.05) + Super Nova (Novag, v1.05 set 1) + + + nsnovaa + Super Nova (Novag, v1.05 set 2) nspirit @@ -94043,6 +95027,22 @@ nsupertr3 New Super Triv III + + nsvip + Super VIP (v3.7) + + + nsvipa + Super VIP (v3.6) + + + nsvipb + Super VIP (v1.03) + + + nsvipc + Super VIP (v1.01) + ntcash NtCash @@ -94051,6 +95051,10 @@ ntopstar Mahjong Nerae! Top Star (Japan) + + ntvmys + Nittere Shiki! Mirai Yosou Studio / NTV Future Forecast Studio (Japan, Rev A) + nubsupmf NubSup Mini Game Fan @@ -94103,6 +95107,10 @@ nuretemi Nurete Mitaino... - Net Idol Hen (Japan) + + nvip + VIP (Novag) + nvs_machrider Vs. Mach Rider (Endurance Course Version) @@ -94449,7 +95457,7 @@ ojousanm - Ojousan [BET] (Japan 870108) + Ojousan (Japan 870108, medal) okean240 @@ -94469,27 +95477,27 @@ olds - Oriental Legend Super / Xiyou Shi E Chuan Super (ver. 101, Korean Board) + Oriental Legend Super / Xiyou Shi E Zhuan Super (ver. 101, Korean Board) olds100 - Oriental Legend Special / Xiyou Shi E Chuan Super (ver. 100, set 1) + Oriental Legend Special / Xiyou Shi E Zhuan Super (ver. 100, set 1) olds100a - Oriental Legend Special / Xiyou Shi E Chuan Super (ver. 100, set 2) + Oriental Legend Special / Xiyou Shi E Zhuan Super (ver. 100, set 2) olds103t - Xiyou Shi E Chuan Super (ver. 103, China, Tencent) (unprotected) + Xiyou Shi E Zhuan Super (ver. 103, China, Tencent) (unprotected) oldsplus - Oriental Legend 2 (Korea) / Xiyou Shi E Chuan Qunmoluanwu (World, China, Japan, Hong Kong, Taiwan) (ver. 205) [Oriental Ex] + Oriental Legend 2 (Korea) / Xiyou Shi E Zhuan Qunmoluanwu (World, China, Japan, Hong Kong, Taiwan) (ver. 205) [Oriental Ex] oldsplus203 - Oriental Legend 2 (Korea) / Xiyou Shi E Chuan Qunmoluanwu (World, China, Japan, Hong Kong, Taiwan) (ver. 203) [Oriental Ex] + Oriental Legend 2 (Korea) / Xiyou Shi E Zhuan Qunmoluanwu (World, China, Japan, Hong Kong, Taiwan) (ver. 203) [Oriental Ex] olibochu @@ -94497,7 +95505,7 @@ olibug - Oli Bug (Jump Bug bootleg) + Oli Bug (bootleg of Jump Bug) oligam @@ -94547,6 +95555,14 @@ olybossd Olympia BOSS D + + olym65bj + Black jack (Olympic Games, v5.04, upgrade kit for Wild Card) + + + olym65wc + Wild Card (Olympic Games, v2.0) + olymp Olympus (Z Games, version 10) @@ -94592,8 +95608,12 @@ Olytext 30 - omar - Omar + omar1 + Omar I + + + omar2 + Omar II omatsuri @@ -94703,6 +95723,10 @@ op386wb OPTi 386WB VER.1.0 + + op5cards + Open 5 Cards + op82c283 386sx motherboards using the OPTi 82C283 chipset @@ -94749,7 +95773,7 @@ openmj - Open Mahjong [BET] (Japan) + Open Mahjong (Japan) oplayer @@ -94775,6 +95799,18 @@ optiger Operation Tiger (Ver 2.14 O) + + optigera + Operation Tiger (Ver 2.10 O) + + + optigerj + Operation Tiger (Ver 2.09 J) + + + optigersm + Operation Tiger Second Mission (Ver 2.02 J) + opwolf Operation Wolf (World, set 1) @@ -94821,7 +95857,7 @@ orangeci - Orange Club - Maru-hi Ippatsu Kaihou [BET] (Japan 880221) + Orange Club - Maru-hi Ippatsu Kaihou (Japan 880221) orao @@ -94953,7 +95989,7 @@ orleg2_101cn - Xiyou Shi E Chuan 2 (V101, China) + Xiyou Shi E Zhuan 2 (V101, China) orleg2_101jp @@ -94965,7 +96001,7 @@ orleg2_103cn - Xiyou Shi E Chuan 2 (V103, China) + Xiyou Shi E Zhuan 2 (V103, China) orleg2_103jp @@ -94973,7 +96009,7 @@ orleg2_104cn - Xiyou Shi E Chuan 2 (V104, China) + Xiyou Shi E Zhuan 2 (V104, China) orleg2_104jp @@ -94981,39 +96017,39 @@ orlegend - Oriental Legend / Xiyou Shi E Chuan (ver. 126) + Oriental Legend / Xiyou Shi E Zhuan (ver. 126) orlegend105k - Oriental Legend / Xiyou Shi E Chuan (ver. 105, Korean Board) + Oriental Legend / Xiyou Shi E Zhuan (ver. 105, Korean Board) orlegend105t - Oriental Legend / Xiyou Shi E Chuan (ver. 105, Taiwanese Board) + Oriental Legend / Xiyou Shi E Zhuan (ver. 105, Taiwanese Board) orlegend111c - Oriental Legend / Xiyou Shi E Chuan (ver. 111, Chinese Board) + Oriental Legend / Xiyou Shi E Zhuan (ver. 111, Chinese Board) orlegend111k - Oriental Legend / Xiyou Shi E Chuan (ver. 111, Korean Board) + Oriental Legend / Xiyou Shi E Zhuan (ver. 111, Korean Board) orlegend111t - Oriental Legend / Xiyou Shi E Chuan (ver. 111, Taiwanese Board) + Oriental Legend / Xiyou Shi E Zhuan (ver. 111, Taiwanese Board) orlegendc - Oriental Legend / Xiyou Shi E Chuan (ver. 112, Chinese Board) + Oriental Legend / Xiyou Shi E Zhuan (ver. 112, Chinese Board) orlegendca - Oriental Legend / Xiyou Shi E Chuan (ver. ???, Chinese Board) + Oriental Legend / Xiyou Shi E Zhuan (ver. ???, Chinese Board) orlegende - Oriental Legend / Xiyou Shi E Chuan (ver. 112) + Oriental Legend / Xiyou Shi E Zhuan (ver. 112) orunners @@ -95165,15 +96201,15 @@ ougonhaib1 - Mahjong Ougon no Hai (Japan bootleg set 1, Bet) + Mahjong Ougon no Hai (Japan bootleg set 1, medal) ougonhaib2 - Mahjong Ougon no Hai (Japan bootleg set 2, Bet) + Mahjong Ougon no Hai (Japan bootleg set 2, medal) ougonhaib3 - Mahjong Ougon no Hai (Japan bootleg set 3, Bet) + Mahjong Ougon no Hai (Japan bootleg set 3, medal) outbackj @@ -95197,7 +96233,7 @@ outlaw - Outlaw [TTL] + Outlaw outline @@ -95493,16 +96529,24 @@ pachiten - Medal Mahjong Pachi-Slot Tengoku [BET] (Japan) + Medal Mahjong Pachi-Slot Tengoku (Japan) packbang + Pack'n Bang Bang + + + packbangp Pack'n Bang Bang (prototype) packmon Packri Monster + + packysts + Packy's Treasure Slot (Japan, main ver. 1.3, video ver. 1.1) + pacland Pac-Land (World) @@ -95601,7 +96645,7 @@ pacmanvg - Pac-Man (bootleg, Video Game SA) + Pac-Man (Video Game SA bootleg) pacmball @@ -95863,6 +96907,10 @@ panic3 Space Panic (set 3) + + panic4 + Space Panic (set 4) + panicbom Panic Bomber @@ -95985,7 +97033,7 @@ paranoia - Paranoia + Paranoia (Arcade PC Engine, bootleg?) parcade @@ -96051,6 +97099,10 @@ partner1fg Partner 1F/G + + partnerw + Partner + partnerwfg Partner WF/G @@ -96333,19 +97385,23 @@ pbss330 - Pit Boss Superstar III 30 (9233-00-01, Standard version) + Pit Boss Superstar III 30 (9233-00-01 R0B, Standard version) + + + pbss330a + Pit Boss Superstar III 30 (9233-00-01 R0, Standard version) pbss330ca - Pit Boss Superstar III 30 (9233-00-06, California version) + Pit Boss Superstar III 30 (9233-00-06 R0A, California version) pbst30 - Pit Boss Supertouch 30 (9234-10-01) + Pit Boss Supertouch 30 (9234-10-01 R0) pbst30a - Pit Boss Supertouch 30 (9234-00-01) + Pit Boss Supertouch 30 (9234-00-01 R0A) pc @@ -96519,6 +97575,10 @@ pc50ii PC 50-II + + pc532 + pc532 + pc6001 PC-6001 (Japan) @@ -96600,8 +97660,8 @@ PC8300 - pc8401a - PC-8401A-LS + pc8401bd + PC-8401BD pc8500 @@ -96855,6 +97915,10 @@ pc_grdus Gradius (PlayChoice-10) + + pc_h98s + PC-H98S model 8/U8 + pc_hgaly Hogan's Alley (PlayChoice-10) @@ -97131,14 +98195,14 @@ pciagp Sandbox PCI/AGP PC (440BX) - - pcinv3 - Sandbox PCI PC (430HX with Riva 128) - pcipc Sandbox PCI PC (430HX) + + pcipcs7 + Sandbox PCI PC (430HX, Socket 7 CPU) + pcipctx Sandbox PCI PC (430TX) @@ -97355,6 +98419,10 @@ pcockmagu Peacock Magic (0151352, US) + + pcompelr + Precomputer Elektronik (Russia) + pcorig Player's Choice - Original (30143011, NSW/ACT) @@ -97929,7 +98997,7 @@ penpir2 - Penguin Pirate II (0100869V, Victoria) + Penguin Pirate II (0100869V, ASP) penpira @@ -100571,6 +101639,10 @@ phoenixb Phoenix (Centuri, set 2) + + phoenixbl + Phoenix (bootleg) + phoenixc Phoenix (Irecsa / G.G.I. Corporation) @@ -100717,20 +101789,20 @@ phrcraze - Phraze Craze (6221-40, U5-0A) - - - phrcrazea - Phraze Craze (6221-40, U5-0) - - - phrcrazeb Phraze Craze (6221-40, U5-3A Expanded Questions) - phrcrazec + phrcrazea Phraze Craze (6221-40, U5-3 Expanded Questions) + + phrcrazeb + Phraze Craze (6221-40, U5-0A) + + + phrcrazec + Phraze Craze (6221-40, U5-0) + phrcrazev Phraze Craze (6221-45, U5-2 Vertical) @@ -100767,10 +101839,6 @@ pi4d35 Personal IRIS 4D/35 - - pi4d50 - Professional IRIS 4D/50 - pi_stry Story Reader @@ -100823,6 +101891,10 @@ pickwinvt Pick 'n Win (Version 2.8T, Dual) + + pickytlk + Super Picky Talk - Forest of Gurutan + picno Picno @@ -100831,6 +101903,14 @@ picno2 Picno 2 + + piece2m + P/ECE (2 MB Flash) + + + piece512k + P/ECE (512 kB Flash) + piggypas Piggy Pass (version 04.40) @@ -100941,7 +102021,7 @@ pingu - Pingu's Ice Block + Pingu's Ice Block (Ver.1.00 2006/01/27) pinguinos @@ -101355,6 +102435,10 @@ pitboss2 Pit Boss II (9221-01C) + + pitbossa + The Pit Boss (2214-07, U5-0) + pitbossm Pit Boss Megastar (9244-00-01 R0B) @@ -101459,6 +102543,10 @@ pitnrunb Pit & Run - F-1 Race (set 3) + + pixtermu + Pixter Multi-Media + pjoyn50 PowerJoy Navigator 50 in 1 @@ -101519,6 +102607,10 @@ pkladiesbl2 Poker Ladies (Censored bootleg, not encrypted) + + pkladiesblu + Poker Ladies (Uncensored bootleg, encrypted) + pkladiesl Poker Ladies (Leprechaun ver. 510) @@ -101781,7 +102873,11 @@ pleiadsi - Pleiads (Irecsa) + Pleiads (Irecsa, set 1) + + + pleiadsia + Pleiads (Irecsa, set 2) pleiadsn @@ -101879,6 +102975,10 @@ plycntrchtrk PlayCenter Champions Tournament (v9.3, 'K6' hardware) + + plycntre3 + Playcenter Evolution III (v14.0, 'Epox' hardware) + plygonet Polygonet Commanders (ver UAA) @@ -101939,6 +103039,10 @@ pmv112r Pinball Magic (Redemption) + + pn8800 + PN-8800FXB + pnchmn Punch Mania: Hokuto no Ken (GQ918 VER. JAB) @@ -101987,6 +103091,26 @@ pockstat Sony PocketStation + + poembase + Nekketsu Pawapuro Champ (Japan) + + + poemgolf + Soukai Golf Champ (Japan) + + + poemspoo + Goo Choco Lantan Spoo Daisuki! Playmat + + + poemzet + Zettai Zetsumei Dangerous Jiisan - Mini Game de Taiketsu ja! + + + poemzet2 + Zettai Zetsumei Dangerous Jiisan Party ja! Zen-in Shuugou!! + pofo Portfolio @@ -102051,6 +103175,10 @@ pokeresp Poker (Electro-Sport) + + pokeri + Poker (Impera, V11/90b) + pokeriwc Poker UCMC/IWC (ver 162.03) @@ -102151,6 +103279,10 @@ poleposa1 Pole Position (Atari version 1) + + poleposa1n + Pole Position (Atari version 1 on Namco PCB) + poleposa2 Pole Position (Atari version 2) @@ -102465,7 +103597,7 @@ pop_hh - Popper (Hard Head bootleg) + Popper (bootleg of Hard Head) pop_la4 @@ -103001,7 +104133,7 @@ powyakex - Jikkyou Powerful Pro Yakyuu EX (GX802 VER. JAB) + Jikkyou Pawafuru Puro Yakyu EX (GX802 VER. JAB) pp @@ -103707,6 +104839,10 @@ preisle2 Prehistoric Isle 2 + + premiere + Elite Premiere + prestige PreComputer Prestige Elite @@ -103765,7 +104901,7 @@ primrage - Primal Rage (version 2.3, newer build) + Primal Rage (version 2.3, Jan 1995) primrage20 @@ -103773,7 +104909,7 @@ primrageo - Primal Rage (version 2.3, older build) + Primal Rage (version 2.3, Dec 1994) primusex @@ -103791,6 +104927,10 @@ princnt Prin-C (without touch-pad) + + prisma + Kasparov Prisma + prmrsocr Premier Soccer (ver EAB) @@ -104003,6 +105143,10 @@ przfight Prize Fight (0100299V, NSW/ACT) + + przonegd + Prize Zone Gold (USA, v2.01) + ps2 PlayStation 2 @@ -104059,6 +105203,10 @@ psion3a2_ru Series 3a (2M) (Russian) + + psion3a2_us + Series 3a (2M) (US) + psion3c Series 3c @@ -104067,6 +105215,10 @@ psion3mx Series 3mx + + psion3mx_fr + Series 3mx (French) + psion3s Series 3s @@ -104175,6 +105327,10 @@ pspikesu Power Spikes (US) + + psr11 + Portatone PSR-11 + psr110 PSR-110 @@ -104199,6 +105355,10 @@ psr190 PSR-190 + + psr2000 + PSR-2000 + psr260 PSR-260 @@ -104219,6 +105379,10 @@ psr500 PSR-500 + + psr540 + PSR540 + psr60 PSR-60 PortaSound @@ -104439,6 +105603,10 @@ ptrain Panda Train (Novamatic 1.7) + + ptraina + Panda Train (Ver. 1.3) + ptrmj PT Reach Mahjong (Japan) @@ -104479,6 +105647,10 @@ puckman Puck Man (Japan set 1) + + puckmana + Puck Man (Alca bootleg) + puckmanb Puck Man (bootleg set 1) @@ -104523,6 +105695,10 @@ pulltabs Pull Tabs + + pullttrig + Pull The Trigger + pulsar Pulsar @@ -104541,7 +105717,7 @@ pumpit1 - Pump It Up: The 1st Dance Floor + Pump It Up: The 1st Dance Floor (ver 0.53.1999.9.31) punchita @@ -104725,6 +105901,10 @@ puzzball + Puzz Ball (Japan, PZB1 Ver.C) + + + puzzballa Puzz Ball (Japan, PZB1 Ver.A) @@ -104841,7 +106021,11 @@ pvmil - Who Wants to Be a Millionaire? (Play Vision, Plug and Play, UK) + Who Wants to Be a Millionaire? (Play Vision, Plug and Play, UK, 16-bit version) + + + pvmil8 + Who Wants to Be a Millionaire? (Play Vision, Plug and Play, UK, 8-bit version) pvmilfin @@ -105095,6 +106279,10 @@ qcrayon2 Crayon Shinchan Orato Asobo (Japan) + + qczl + Qing Cheng Zhi Lian + qdrmfgp Quiz Do Re Mi Fa Grand Prix (Japan) @@ -105123,6 +106311,10 @@ qgundam Quiz Mobile Suit Gundam: Monsenshi (QG1 Ver. A) + + qhzb + Que Huang Zheng Ba (V100CN) + qi600 Apricot Qi 600 (Neptune Motherboard) @@ -105215,13 +106407,25 @@ qmhayaku Quiz-Mahjong Hayaku Yatteyo! (Japan) + + qmquasar + Quasimidi Quasar + + + qmrave + Rave-O-Lution 309 + + + qmsirius + Quasimidi Sirius + qncrash Quick & Crash (V2.200) qndream - Quiz Nanairo Dreams: Nijiirochou no Kiseki (Japan 96086) + Quiz Nanairo Dreams: Nijiirochou no Kiseki (Japan 960826) qnile @@ -105300,7 +106504,11 @@ Queen of the Nile (0300785V, New Zealand) - qnileql + qnilepe + Queen of the Nile (04J00784, Peru) + + + qnileq Queen of the Nile (0201200V, Queensland) @@ -105323,10 +106531,6 @@ qnileua Queen of the Nile (GHG4091-03, US) - - qnilev - Queen of the Nile (04J00784, Peru?) - qntoond Quintoon (Dutch, Game Card 95-750-243) @@ -105615,6 +106819,10 @@ quizard_17 Quizard (v1.7, German, i8751 DE 11 D3) + + quizardff + Quizard Fun and Fascination (French Edition V1 - 01/96) + quizardi Quizard (v1.8, Italian, i8751 IT 11 I2) @@ -105635,6 +106843,10 @@ quizchq Quiz Channel Question (Japan, Ver 1.00) + + quizchqk + Quiz Channel Question (Korea, Ver 1.10) + quizchql Quiz Channel Question (Taiwan?, Ver 1.23) @@ -105777,7 +106989,7 @@ qwakttl - Qwak!/Quack [TTL] + Qwak!/Quack qx10 @@ -105847,6 +107059,10 @@ r_blackm4 Black Magic 4 + + r_blackmag + Black Magic + r_cavalier Cavalier @@ -105887,6 +107103,10 @@ r_screech Screech + + r_spcgame7 + Space Game (Bingo 6+1) + r_swash SwashBuckler @@ -105947,6 +107167,10 @@ raccoon Raccoon World + + racechl8 + Racing Challenge - 8 Games In 1 + racedriv Race Drivin' (cockpit, rev 5) @@ -106288,7 +107512,11 @@ Mega Drive Collection Volume 1 (Radica, Arcade Legends) (Europe) - rad_md2 + rad_md1uk + Mega Drive Collection Volume 1 (Radica, Arcade Legends) (UK) + + + rad_md2uk Mega Drive Collection Volume 2 (Radica, Arcade Legends) (UK) @@ -106336,7 +107564,7 @@ Street Fighter II: Special Champion Edition [Ghouls'n Ghosts] (Radica, Arcade Legends) (USA) - rad_sf2p + rad_sf2uk Street Fighter II: Special Champion Edition [Ghouls'n Ghosts] (Radica, Arcade Legends) (UK) @@ -106372,7 +107600,7 @@ Super Sonic Gold (Radica Plug & Play) (USA) - rad_sonicp + rad_sonicuk Super Sonic Gold (Radica Plug & Play) (UK) @@ -106803,6 +108031,10 @@ rallyxa Rally X + + rallyxeg + Rally X (Video Game bootleg) + rallyxm Rally X (Midway) @@ -107171,6 +108403,10 @@ rchasej Rail Chase (Japan) + + rchasejb + Rail Chase (Japan, Rev B) + rcirulet Ruleta RCI (6-players, Spanish) @@ -107481,7 +108717,11 @@ re800v1 - Ruleta RE-800 (v1.0) + Ruleta RE-800 (v1.0, set 1) + + + re800v1a + Ruleta RE-800 (v1.0, set 2) re800v3 @@ -107603,6 +108843,10 @@ redbarona Red Baron + + redbird + Red Bird (bootleg of Space Firebird) + redclash Red Clash @@ -107715,6 +108959,10 @@ reelfun Reel Fun (Version 7.03) + + reelfun0 + Reel Fun (Version 7.00) + reelfun1 Reel Fun (Version 7.01) @@ -107736,7 +108984,7 @@ Reelin-n-Rockin (0100779V, NSW/ACT) - reelrockql + reelrockq Reelin-n-Rockin (0101460V, Queensland) @@ -107791,6 +109039,10 @@ renaissaa Kasparov Renaissance (set 2) + + rendfgtr + Renda Fighter (Japan, main ver. 2.02, video ver. 2.03) + renegade Renegade (US) @@ -107801,7 +109053,7 @@ renju - Renju Kizoku + Renju Kizoku - Kira Kira Gomoku Narabe replica1 @@ -108004,8 +109256,8 @@ Rezon - rezont - Rezon (Taito) + rezono + Rezon (earlier) rf2 @@ -108081,7 +109333,7 @@ rhunting - Robot Hunting (bootleg of Death Race) [TTL] + Robot Hunting (bootleg of Death Race) rhytngk @@ -108241,7 +109493,7 @@ ringo470 - Ringo 470 + Ringo R-470 ringohja @@ -108467,6 +109719,10 @@ rm380z34e RM-380Z, COS 3.4E + + rm380zhrg + RM-380Z, COS 4.0B with HRG + rm480z LINK RM-480Z (set 1) @@ -108481,7 +109737,7 @@ rmgoldyh - Real Mahjong Gold Yumehai / Super Real Mahjong GOLD part.2 [BET] (Japan) + Real Mahjong Gold Yumehai / Super Real Mahjong GOLD part.2 (Japan) rmhaihai @@ -108493,7 +109749,7 @@ rmhaihib - Real Mahjong Haihai [BET] (Japan) + Real Mahjong Haihai (Japan, medal) rmhaijin @@ -108597,15 +109853,15 @@ roadriot - Road Riot 4WD (set 1, 04 Dec 1991) + Road Riot 4WD (04 Dec 1991, conversion kit) roadriota - Road Riot 4WD (set 2, 13 Nov 1991) + Road Riot 4WD (13 Nov 1991, conversion kit) roadriotb - Road Riot 4WD (set 3, 04 Jun 1991) + Road Riot 4WD (04 Jun 1991, dedicated twin) roadrunm @@ -108733,7 +109989,7 @@ robocop - Robocop (World revision 4) + Robocop (World, revision 4) robocop2 @@ -108761,15 +110017,15 @@ robocopu - Robocop (US revision 1) + Robocop (US, revision 1) robocopu0 - Robocop (US revision 0) + Robocop (US, revision 0) robocopw - Robocop (World revision 3) + Robocop (World, revision 3) robokid @@ -108791,6 +110047,10 @@ robot Robot (Zaccaria) + + robotadv + Chess Robot Adversary + robotbwl Robot Bowl @@ -108883,10 +110143,18 @@ rockman2j Rockman 2: The Power Fighters (Japan 960708) + + rockmanbc + Rockman EXE Battle Chip Stadium Ver.3.00 + rockmanj Rockman: The Power Battle (CPS1, Japan 950922) + + rockmanmdl + Rockman EXE The Medal Operation + rockn Rock'n Tread (Japan) @@ -109083,6 +110351,10 @@ rollfr_5 Roll Fruit (100924) + + rolling + Rolling + rollingc Rolling Crash / Moon Base @@ -109132,9 +110404,13 @@ Mephisto Roma 68000 - roma16a + roma16g Mephisto Roma 68000 (Glasgow hardware) + + roma2 + Mephisto Roma II + roma32 Mephisto Roma 68020 @@ -109349,7 +110625,7 @@ royalngt - Royal Night [BET] (Japan 840220 RN 2-00) + Royal Night (Japan 840220 RN 2-00) royalpk2 @@ -109357,7 +110633,7 @@ royalqn - Royal Queen [BET] (Japan 841010 RQ 0-07) + Royal Queen (Japan 841010 RQ 0-07) royclark @@ -109747,6 +111023,10 @@ runpuppy Run Run Puppy + + runrun + Run Run (Do! Run Run bootleg) + ruprup Roll Up! Roll Up!! (10115911, NSW/ACT) @@ -109897,7 +111177,7 @@ ryuuha - Ryuuha [BET] (Japan 871027) + Ryuuha (Japan 871027) rz1 @@ -110043,6 +111323,10 @@ safemon Safe Money (Konami Endeavour, Russia) + + safemonn + Safe Money (Konami Endeavour, NSW) + sagafox Saga Fox @@ -110145,7 +111429,7 @@ sailorwr - Mahjong Sailor Wars-R [BET] (Japan) + Mahjong Sailor Wars-R (Japan) sailorws @@ -110225,7 +111509,7 @@ samcoupe - SAM Coupe + SAM Coupé samdm286 @@ -110249,7 +111533,7 @@ sams64 - Samurai Shodown 64 / Samurai Spirits 64 + Samurai Shodown 64 / Samurai Spirits / Paewang Jeonseol 64 sams64_2 @@ -110297,7 +111581,7 @@ samsho4k - Pae Wang Jeon Seol / Legend of a Warrior (Korean censored Samurai Shodown IV) + Paewang Jeonseol / Legend of a Warrior (Korean censored Samurai Shodown IV) samsho5 @@ -110365,12 +111649,16 @@ sanma - Sanma - San-nin Uchi Mahjong [BET] (Japan, version 2.60) + Sanma - San-nin Uchi Mahjong (Japan, version 2.60) sanremmg unknown San Remo / Elsy Multigame + + santaka2 + Santaka-002 + santam Santa Maria (Russia) (Atronic) @@ -110513,7 +111801,7 @@ savanna - Savanna (Jungler bootleg) + Savanna (bootleg of Jungler) savant @@ -110649,7 +111937,7 @@ sbmjb - Sonic Blast Man's Janken Battle (main ver. 1.1, video ver. 1.0) + Sonic Blast Man's Janken Battle (Japan, main ver. 1.1, video ver. 1.0) sboblbobl @@ -110753,7 +112041,7 @@ sburners - Street Burners [TTL] + Street Burners sbxc @@ -125995,6 +127283,10 @@ sc55 Sound Canvas SC-55 + + sc55mk2 + Sound Canvas SC-55mkii + sc5_3414 Bullseye Hot Arrows (Scorpion 5) @@ -132753,7 +134045,7 @@ scandalm - Scandal Mahjong [BET] (Japan 890217) + Scandal Mahjong (Japan 890217, medal) scatmag2 @@ -132799,6 +134091,10 @@ scg06nt Sega Club Golf 2006 Next Tours (Rev A) (GDX-0018A) + + schachak + Mephisto Schachakademie + schamp Sonic Championship (USA) @@ -132987,6 +134283,10 @@ scp300f SCP-300F + + scprof + Sphinx Chess Professor + scptchess Sensor Computachess (1981 version) @@ -133007,6 +134307,10 @@ scrabbled Scrabble (rev. F) (Protocol) + + scrabbleo + Scrabble (Spanish bootleg of Scramble) + scrablex Scrabble Lexor: Computer Word Game (MB8841 version) @@ -133191,6 +134495,10 @@ scuddx Scud Race / Sega Super GT - Deluxe (Export, Revision A) + + scuddxo + Scud Race / Sega Super GT - Deluxe (Export) + scudhamm Scud Hammer (ver 1.4) @@ -133271,6 +134579,10 @@ sdia SDI - Strategic Defense Initiative (Japan, old, System 16A, FD1089B 317-0027) + + sdiamond + Star Diamond (v1.04) + sdib SDI - Strategic Defense Initiative (System 16B, FD1089A 317-0028) @@ -133317,7 +134629,11 @@ sdmg2 - Super Da Man Guan II (China, V754C) + Chaoji Damanguan II (China, V754C) + + + sdmg2p + Maque Wangchao / Chaoji Damanguan 2 - Jiaqiang Ban (China, V100C) sdodgeb @@ -133423,6 +134739,10 @@ seawolf2 Sea Wolf II + + seawolfa + Sea Wolf (set 3) + seawolfo Sea Wolf (set 2) @@ -133445,11 +134765,11 @@ secretag - Secret Agent (World revision 3) + Secret Agent (World, revision 3) secretagj - Secret Agent (Japan revision 2) + Secret Agent (Japan, revision 2) sectionz @@ -133457,7 +134777,7 @@ sectionza - Section Z (set 2) + Section Z (set 2 rev. A) sectrzon @@ -133471,6 +134791,10 @@ sectrzont Sector Zone (set 2, Tecfri hardware) + + segaai + AI + segacd Sega CD (USA, NTSC) @@ -133521,7 +134845,7 @@ seiham - Seiha [BET] (Japan 870723) + Seiha (Japan 870723, medal) sekaikh @@ -133537,11 +134861,15 @@ seljan - Sel-Jan [BET] (Japan) + Sel-Jan (Japan) seljan2 - Return Of Sel Jan II [BET] (Japan, NM557) + Return Of Sel Jan II (Japan, NM557) + + + seljan2a + Return Of Sel Jan II (Japan, NM508) selz80 @@ -133585,7 +134913,7 @@ sengokmj - Sengoku Mahjong [BET] (Japan) + Sengoku Mahjong (Japan) sengoku @@ -133655,6 +134983,14 @@ senstriv Sports Trivia Professional Edition (Senario, Plug and Play) + + senterp + Super Enterprise (model 210) + + + senterpc + Super Enterprise (model 210.C) + sentetst Sente Diagnostic Cartridge @@ -133679,6 +135015,10 @@ senwld Win, Lose or Draw (Senario) + + seoul88 + Seoul 88 Fever + sergeysxt Sergey's XT @@ -133687,6 +135027,34 @@ setaroul The Roulette (Visco) + + setaroula + Super Ruleta 36 (Spanish hack of The Roulette) + + + sevenlnd + Seven Land + + + sevilla + Sevilla (2 jackpot points, 81%) + + + sevillaa + Sevilla (1 jackpot point, 77%) + + + sevillab + Sevilla (2 jackpot points, 77%) + + + sevillac + Sevilla (4 jackpot points, 77%) + + + sevillad + Sevilla (8 jackpot points, 77%) + sexappl Sex Appeal (Version 6.02) @@ -134611,6 +135979,10 @@ sftmj114 Street Fighter: The Movie (v1.14N, Japan) + + sftmk112 + Street Fighter: The Movie (v1.12K, Korea) + sfua Street Fighter (US, set 2) (protected) @@ -134773,7 +136145,7 @@ sgaltrop - Sexy Gal Tropical [BET] (Japan 850805 SXG T-02) + Sexy Gal Tropical (Japan 850805 SXG T-02) sgdrvsim @@ -134781,7 +136153,7 @@ sgemf - Super Gem Fighter Mini Mix (USA 970904) + Super Gem Fighter: Mini Mix (USA 970904) sgemfa @@ -134789,7 +136161,7 @@ sgemfd - Super Gem Fighter Mini Mix (USA 970904 Phoenix Edition) (bootleg) + Super Gem Fighter: Mini Mix (USA 970904 Phoenix Edition) (bootleg) sgemfh @@ -134917,7 +136289,7 @@ shambros - Shamisen Brothers Vol 1 + Shamisen Brothers Vol 1 (V1.01K) shamnmg @@ -135045,7 +136417,7 @@ sharkjaw - Shark JAWS [TTL] + Shark JAWS sharkpy @@ -135065,7 +136437,7 @@ sharkusb - Shark [TTL] + Shark (US Billiards) sharrier @@ -135099,10 +136471,18 @@ shdancerj Shadow Dancer (Japan) + + shendeng + Pili Shen Deng + sheriff Sheriff + + shettle + Alone Shettle Crew + shfin_l1 Shuffle Inn (Shuffle) (L-1) @@ -135599,6 +136979,10 @@ sidampkra unknown Sidam poker (horizontal) + + siddr + Dance Dance Revolution - Broadwalk Arcade + sidearms Side Arms - Hyper Dyne (World, 861129) @@ -135617,7 +137001,7 @@ sidebs - Side by Side (Ver 2.7 J) + Side by Side (Ver 3.0 OK) sidebs2 @@ -135635,6 +137019,10 @@ sidebs2u Side by Side 2 (Ver 2.6 A) + + sidebsj + Side by Side (Ver 2.7 J) + sidebsja Side by Side (Ver 2.6 J) @@ -135741,7 +137129,7 @@ silvland - Silver Land + Silver Land (hack of River Patrol) silvmil @@ -135753,11 +137141,11 @@ simon - Simon (Rev. A) + Simon (rev. A) simonf - Simon (Rev. F) + Simon (rev. F) simp_a20 @@ -135767,6 +137155,10 @@ simp_a27 The Simpsons (2.7) + + simpbest + Simply the Best (CZ750, v1.0) + simpbowl The Simpsons Bowling (GQ829 UAA) @@ -135953,7 +137345,7 @@ sirio2 - Sirio II (Calfesa S.L. Spanish Moon Cresta bootleg) + Sirio II (Calfesa S.L. Spanish bootleg of Moon Cresta) sis85c471 @@ -136093,6 +137485,10 @@ skilldrp + Skill Drop Georgia (Ver. G1.01S, Oct 1 2002) + + + skilldrpa Skill Drop Georgia (Ver. G1.0S, Sep 13 2002) @@ -136249,7 +137645,7 @@ skyraidr - Sky Raider (Uniwars bootleg) + Sky Raider (bootleg of UniWar S) skyrobo @@ -136459,6 +137855,10 @@ slotcarn Slot Carnival + + slotouji + Slot no Oujisama / Slot Prince (Japan, SLO1 Ver. B) + slotsnl Slots (Dutch, Game Card 95-750-368) @@ -136545,15 +137945,15 @@ slyspy - Sly Spy (US revision 4) + Sly Spy (US, revision 4) slyspy2 - Sly Spy (US revision 2) + Sly Spy (US, revision 2) slyspy3 - Sly Spy (US revision 3) + Sly Spy (US, revision 3) sm1800 @@ -136751,6 +138151,10 @@ smartfp Fun 2 Learn Smart Fit Park (UK) + + smartfpf + Fun 2 Learn Smart Fit Park (France) + smartfps Fun 2 Learn Smart Fit Park (Spain) @@ -136761,7 +138165,7 @@ smash - Smash (Crash bootleg) + Smash (bootleg of Crash) smashdrv @@ -136835,6 +138239,10 @@ smc777 SMC-777 + + smcard + Super Magic Card + smchess Mini Chess @@ -136985,7 +138393,7 @@ sms1 - Master System I + Master System sms1000 @@ -136993,23 +138401,23 @@ sms1br - Master System I (Brazil) + Master System (Brazil) sms1kr - Gam*Boy I (Korea) + Gam*Boy (Korea) sms1krfm - Gam*Boy I (Korea) (FM) + Gam*Boy (Korea) (FM) sms1pal - Master System I (PAL) + Master System (PAL) sms1paln - Master System I (PAL-N) + Master System (PAL-N) sms2br @@ -137061,11 +138469,11 @@ smssgame - Super Game (Sega Master System Multi-game bootleg) + Super Game (Sega Master System Multi-game bootleg, 01 Final Bubble Bobble) smssgamea - Super Game (Sega Master System Multi-game bootleg) (alt games) + Super Game (Sega Master System Multi-game bootleg, 01 Tri Formation) smtma6 @@ -137327,6 +138735,10 @@ soccer Atari Soccer + + soccer10 + Soccer 10 (ver. 16.44) + soccernw Soccer New (Italian) @@ -137353,7 +138765,7 @@ soccrrmt - Soccer (Ramtek) [TTL] + Soccer (Ramtek) socrates @@ -137451,6 +138863,10 @@ solfigtr Solitary Fighter (World) + + solitaire + Solitaire (version 2.5) + solomon Solomon's Key (US) @@ -140045,7 +141461,7 @@ spacezap - Space Zap + Space Zap (Midway) spacfury @@ -140161,7 +141577,7 @@ spcdrag - Space Dragon (Moon Cresta bootleg) + Space Dragon (bootleg of Moon Cresta) spcebttl @@ -140475,6 +141891,18 @@ speedfrk Speed Freak + + speedmst + Speed Master (Ver. V1.0, Apr 29 2004) + + + speedmsta + Speed Master (Ver. V1.0, May 23 2003) + + + speedmstb + Speed Master (Ver. V1.0, Apr 28 2004) + speedrcr Speed Racer @@ -140625,12 +142053,16 @@ spider - Spider (Buena Vision) + Spider (Buena Vision, without nudity) spidermn The Amazing Spider-Man + + spidern + Spider (Buena Vision, with nudity) + spiders Spiders (set 1) @@ -140655,6 +142087,10 @@ spidmanu Spider-Man: The Videogame (US, Rev A) + + spidtt + Interactive M.A.G. Motion Activated Gear: Spider-Man - Triple Threat + spielbud Spiel Bude (German) @@ -140695,6 +142131,10 @@ spikes91b 1991 Spikes (Italian bootleg, set 2) + + spinfev + Spin Fever + spinkick Hec's Spinkick @@ -140923,6 +142363,10 @@ sporzbx Game Sporz Wireless Boxing + + sporzbxa + Wireless Boxing (PAL, Play Vision) + sporzpp Game Sporz Wireless Duet Play Ping-Pong @@ -141041,7 +142485,11 @@ sprtauth - Sports Authority + Sports Authority Challenge (Rev 3) + + + sprtauth1 + Sports Authority (Rev 1) sprtdart @@ -141273,7 +142721,7 @@ srdchamp - Super Road Champions [TTL] + Super Road Champions srdmissn @@ -141349,7 +142797,7 @@ sryudens - Mahjong Seiryu Densetsu [BET] (Japan, NM502) + Mahjong Seiryu Densetsu (Japan, NM502) ss2001 @@ -141371,6 +142819,10 @@ ss_03 Scared Stiff (0.3) + + ss_11 + Scared Stiff (1.1) + ss_12 Scared Stiff (1.2) @@ -141391,6 +142843,10 @@ ssanchan Sanrin San Chan (Japan, 315-5096) + + ssanguoj + Shizhan Sanguo Ji Jiaqiang Ban (Version 8.9 980413) + sscandal Seishun Scandal (315-5132, Japan) @@ -141579,6 +143035,10 @@ sscopex Silent Scope EX (ver UAA) + + sscs + San Se Caishen (Version 0502) + ssensor4 Super Sensor IV @@ -142011,10 +143471,6 @@ sstar28k Superstar 28K - - sstar36k - Superstar 36K - sstar97 Super Star 97 / Ming Xing 97 (version V153B) @@ -142177,7 +143633,7 @@ stadhr96 - Stadium Hero '96 (Europe, EAJ) + Stadium Hero '96 (Europe, EAJ, Tuning license) stadhr96j @@ -142187,6 +143643,10 @@ stadhr96j2 Stadium Hero '96 (Japan?, EAE) + + stadhr96k + Stadium Hero '96 (Korea, Dream Island license) + stadhr96u Stadium Hero '96 (USA, EAH) @@ -142207,6 +143667,10 @@ stakwindev Stakes Winner / Stakes Winner - GI Kinzen Seiha e no Michi (early development board) + + stankatk + Super Tank Attack (prototype rev. 1.12) + star100 Ming Xing 100 (Star 100) @@ -142261,7 +143725,7 @@ starfgmc - Starfighter (Moon Cresta bootleg) + Starfighter (bootleg of Moon Cresta) starfigh @@ -142449,7 +143913,7 @@ startrkd - Star Trek (Defender bootleg) + Star Trek (bootleg of Defender) startrks @@ -142533,7 +143997,7 @@ stcc - Sega Touring Car Championship + Sega Touring Car Championship (newer) stcca @@ -142543,6 +144007,10 @@ stccb Sega Touring Car Championship (Revision B) + + stcco + Sega Touring Car Championship + stdragon Saint Dragon (set 1) @@ -142617,7 +144085,7 @@ steeplec - Steeplechase [TTL] + Steeplechase stellcas @@ -142645,7 +144113,7 @@ stera - Steraranger (Moon Cresta bootleg) + Steraranger (bootleg of Moon Cresta) stest @@ -142739,6 +144207,10 @@ stompin Stompin' (4/4/86) + + stompina + Stompin' (prototype?) + stoneage Stoneage (bootleg of Caveman Ninja) @@ -143205,12 +144677,16 @@ stuntcyc - Stunt Cycle [TTL] + Stunt Cycle stvboy Super TV Boy (PAL) + + stvdev + ST-V 486 dev box PC + stwr_101 Star Wars (USA 1.01, display A1.02) @@ -143315,6 +144791,10 @@ sudo6in1 6-in-1 Sudoku Plug & Play + + sudoku2p + Sudoku TV Game (PAL, 2 players) + sudopptv Sudoku Plug & Play TV Game '6 Intelligent Games' @@ -143323,6 +144803,10 @@ sugorotc Sugorotic JAPAN (STJ1 Ver.C) + + sugorotca + Sugorotic JAPAN (STJ1 Ver.A) + suhosong Su Ho Seong @@ -143545,7 +145029,7 @@ super9 - Super Nove (Playmark) + Super Nove (Playmark, Lire currency) super97 @@ -143559,6 +145043,10 @@ super98 Super 98 (3-hands, ICP-1) + + super9a + Super Nove (Playmark, Euro currency) + super9cc Super "9" Sensory Chess Challenger @@ -143653,7 +145141,7 @@ superg - Super Galaxians ('Galaxian (Namco set 2)' hack) + Super Galaxians (hack of 'Galaxian (Namco set 2)') supergb @@ -143813,7 +145301,7 @@ suprheli - Super Heli (Super Cobra bootleg) + Super Heli (bootleg of Super Cobra) suprleag @@ -143859,10 +145347,6 @@ suprnova Super Nova (Game Plan) - - suprpctv - Super PC TV (Epoch) - suprpick Super Picker @@ -143899,6 +145383,14 @@ suprtrio Super Trio + + suprtvpc + Super TV-PC + + + suprtvpchk + Super TV-PC - Hello Kitty + supst834 Super Stars (v834, encrypted) @@ -144141,6 +145633,10 @@ svolleyu + Super Volleyball (US, Data East license) + + + svolleyua Super Volleyball (US) @@ -144307,6 +145803,10 @@ swhr2a6 Sweethearts II (0151183, US) + + swhr2q + Sweethearts II (0100860V, Queensland) + swhr2u Sweethearts II (PHG0742-02, US) @@ -144329,7 +145829,7 @@ swinggal - Swing Gal [BET] (Japan 871221) + Swing Gal (Japan 871221) swingin @@ -144539,6 +146039,10 @@ synthex Synthex + + sys16 + SYS16 + sys1test System 1 Test prom @@ -144567,6 +146071,10 @@ systel100 System 100 + + syutnori + Super Yutnori (bootleg of Major Poker) + syvalion Syvalion (Japan) @@ -144583,6 +146091,10 @@ syvalionw Syvalion (World, PS2 Taito Legends 2) + + sz1 + SZ-1 + szaxxon Super Zaxxon (315-5013) @@ -144611,6 +146123,10 @@ t1000sx Tandy 1000 SX + + t1000tl + Tandy 1000 TL + t1000tl2 Tandy 1000 TL/2 @@ -144619,6 +146135,10 @@ t1000tx Tandy 1000 TX + + t1850 + 1850 Deluxe Table Chess (model 60-2199) + t2000sx T2000SX @@ -144659,6 +146179,10 @@ t3new Terminator 3: Rise of the Machines (CPU 4.00, display A4.00, ARM7 sound board) + + t4000 + Tandy 4000 + t4426 Terco 4426 CNC Programming station @@ -144667,6 +146191,10 @@ t4490 Terco 4490 Mill CNC Control + + t7000 + T7000 Video Terminal + t7in1ss 7 in 1 Sports Stadium @@ -144877,7 +146405,7 @@ taiwanmb - Taiwan Mahjong [BET] (Japan 881208) + Taiwan Mahjong (Japan 881208) tajmah @@ -144889,7 +146417,7 @@ take5 - Take 5 [TTL] + Take 5 takefive @@ -144953,7 +146481,7 @@ tank - Tank/Tank Cocktail [TTL] + Tank/Tank Cocktail tank8 @@ -145009,7 +146537,7 @@ tankii - Tank II [TTL] + Tank II tanodr64 @@ -145363,6 +146891,10 @@ tddragon Double Dragon (Tiger) + + tddragon2 + Double Dragon II: The Revenge (Tiger) + tddragon3 Double Dragon 3: The Rosetta Stone (Tiger) @@ -145483,6 +147015,10 @@ technodr Techno Drive (Japan, TH1/VER.B) + + technox + TechnoX + techromn Tech Romancer (Euro 980914) @@ -145617,7 +147153,7 @@ tekken2 - Tekken 2 Ver.B (US, TES3/VER.D) + Tekken 2 Ver.B (World, TES2/VER.D) tekken2a @@ -145643,6 +147179,10 @@ tekken2ub Tekken 2 Ver.B (US, TES3/VER.B) + + tekken2ud + Tekken 2 Ver.B (US, TES3/VER.D) + tekken3 Tekken 3 (World, TET2/VER.E1) @@ -145837,7 +147377,7 @@ tenkai - Mahjong Tenkaigen (Japan, Bet) + Mahjong Tenkaigen (Japan) tenkai2b @@ -145845,15 +147385,15 @@ tenkaibb - Mahjong Tenkaigen (Japan bootleg b, Bet) + Mahjong Tenkaigen (Japan bootleg b) tenkaicb - Mahjong Tenkaigen (Japan bootleg c, Bet) + Mahjong Tenkaigen (Japan bootleg c) tenkaie - Mahjong Tenkaigen (Japan set 2, Bet) + Mahjong Tenkaigen (Japan set 2) tenkomor @@ -145883,6 +147423,10 @@ tenup Ten Up + + teqsun + Tequila Sunrise (1VXFC613, NSW) + terabrst Teraburst (1998/07/17 ver UEL) @@ -145907,6 +147451,10 @@ terabrstua Teraburst (1998/02/25 ver UAA) + + teradrive + TeraDrive (Japan) + terak Terak 8510A @@ -147041,7 +148589,11 @@ tictac - Tic Tac Trivia (6221-23, U5-0C Horizontal) + Tic Tac Trivia (6221-23, U5-0C, 07/07/86) + + + tictaca + Tic Tac Trivia (6221-23, U5-0C, 02/11/86) tictacv @@ -147295,6 +148847,14 @@ timescan1 Time Scanner (set 1, System 16A, FD1089B 317-0024) + + timescan3 + Time Scanner (set 3, Japan, System 16B) (FD1089B 317-0024) + + + timescanbl + Time Scanner (bootleg) + timesold Time Soldiers (US Rev 3) @@ -147317,11 +148877,11 @@ timetrv - Time Traveler (set 1) + Time Traveler timetrv2 - Time Traveler (set 2) + Time Traveler (Japan) timetunl @@ -147397,7 +148957,7 @@ titanpac - Titan (Pac-Man hack) + Titan (hack of Pac-Man) tithermos @@ -147679,6 +149239,10 @@ tmacltd4 Time Machine (LTD, 4 players) + + tmate + Kasparov Team-Mate + tmbaskb Basketball (Tomy) @@ -147763,6 +149327,10 @@ tmhtb Teenage Mutant Hero Turtles (UK 4 Players, version ?) + + tmigmax + Mighty Max (Tiger) + tmkombat Mortal Kombat (Tiger) @@ -148089,7 +149657,7 @@ tokimbsj - Tokimeki Bishoujo [BET] (Japan) + Tokimeki Bishoujo (Japan) tokims @@ -148163,6 +149731,18 @@ tokyowarj Tokyo Wars (Japan, TW1 Ver.A) + + toledo + Toledo (2 jackpot points, 87%) + + + toledoa + Toledo (2 jackpot points, 83%) + + + toledob + Toledo (1 jackpot point, 79%) + tom_06 Theatre Of Magic (0.6a) @@ -148227,6 +149807,10 @@ tomy_102be The Who's Tommy Pinball Wizard (Belgium 1.02, display A1.02) + + tomy_201h + The Who's Tommy Pinball Wizard (Dutch 2.01, display A2.00) + tomy_300h The Who's Tommy Pinball Wizard (Dutch 3.00, display A3.00) @@ -148243,9 +149827,13 @@ tondemo Tondemo Crisis (Japan) + + tongzi + Tong Zi Maque + tonpuu - Ton Puu Mahjong Version 2.0 RX [BET] (Japan) + Ton Puu Mahjong Version 2.0 RX (Japan) tonto @@ -148257,7 +149845,7 @@ tontonb - Tonton [BET] (Japan, set 1) + Tonton (Japan) tonypok @@ -148505,11 +150093,11 @@ tornado1 - Tornado (set 1, Defender bootleg) + Tornado (bootleg of Defender, set 1) tornado2 - Tornado (set 2, Defender bootleg) + Tornado (bootleg of Defender, set 2) tornbase @@ -148641,7 +150229,7 @@ touchme - Touch Me (handheld, Rev. 2) + Touch Me (handheld, rev. 2) toukon3 @@ -148791,6 +150379,10 @@ tpgolf Top Player's Golf (NGM-003 ~ NGH-003) + + tpitfight + Pit-Fighter (Tiger) + tpoker2 Turbo Poker 2 @@ -148985,7 +150577,11 @@ trikitri - Triki Triki (Lover Boy bootleg) + Triki Triki (bootleg of Lover Boy) + + + triomphe + Triomphe triothep @@ -149035,6 +150631,10 @@ triplfun Triple Fun + + triplfunk + Sum-eoitneun Deongdalireul Chat-ara! + triplhnt Triple Hunt @@ -149077,7 +150677,7 @@ trivia - Trivia (Rev B) [TTL] + Trivia (Rev B) triviabb @@ -149235,6 +150835,10 @@ trojanj Tatakai no Banka (Japan) + + trojanjo + Tatakai no Banka (Japan, old ver.) + trojanlt Trojan (location test) @@ -149275,6 +150879,10 @@ troopy Troopy (bootleg of Mr. Kougar) + + tropchnc + Tropical Chance + trophyh Trophy Hunting - Bear & Moose V1.00 @@ -149463,6 +151071,10 @@ trvquest Trivia Quest + + trvwz + Trivia ? Whiz (6221-00) + trvwz2 Trivia ? Whiz (6221-05, Edition 2) @@ -149472,35 +151084,39 @@ Trivia ? Whiz (6221-05, Edition 2 Alt Sex trivia) - trvwz3h - Trivia ? Whiz (6221-05, Edition 3) + trvwz3 + Trivia ? Whiz (6221-05, U5-0D, Edition 3) - trvwz3ha + trvwz3a + Trivia ? Whiz (6221-05, U5-0C, Edition 3) + + + trvwz3b Trivia ? Whiz (6221-05, Edition 3 Sex trivia III) trvwz3v - Trivia ? Whiz (6221-04, Edition 3 Vertical) + Trivia ? Whiz (6221-04, U5-0E, Edition 3 Vertical) trvwz4 - Trivia ? Whiz (6221-13, U5-0B Edition 4) + Trivia ? Whiz (6221-10, U5-0A, Edition 4) - trvwz4a - Trivia ? Whiz (6221-13, U5-0B Edition 4 Alt Sex trivia) + trvwz4v + Trivia ? Whiz (6221-13, U5-0B, Edition 4 Vertical) - trvwzh - Trivia ? Whiz (6221-00) + trvwz4va + Trivia ? Whiz (6221-13, U5-0B, Edition 4 Vertical Alt Sex trivia) - trvwzha + trvwza Trivia ? Whiz (6221-00, with Sex trivia) - trvwzhb + trvwzb Trivia ? Whiz (6221-00, Alt Gen trivia) @@ -149647,6 +151263,10 @@ tsarevnaa Tsarevna (v1.31) + + tsbuzz + Interactive M.A.G. Motion Activated Gear: Toy Story and Beyond! Buzz Lightyear Galactic Adventure + tsclass Trap Shoot Classic (v1.0 21-mar-1997) @@ -149711,6 +151331,10 @@ tspidman Spider-Man (Tiger, 1991 version) + + tsptr_l1 + Transporter the Rescue (LA-1) + tsptr_l3 Transporter the Rescue (L-3) @@ -149725,11 +151349,15 @@ tstar432 - Kasparov Turbostar 432 (set 1) + Turbostar 432 (set 1) tstar432a - Kasparov Turbostar 432 (set 2) + Turbostar 432 (set 2) + + + tstar432b + Turbostar 432 (set 3) tstrider @@ -149809,7 +151437,7 @@ ttblock - T.T Block [TTL] + T.T Block ttchamp @@ -149849,7 +151477,7 @@ ttsracec - T.T. Speed Race CL [TTL] + T.T. Speed Race CL ttt_10 @@ -149959,6 +151587,10 @@ turbo Turbo (program 1513-1515) + + turbo16k + Turbo 16K + turboa Turbo (encrypted, program 1262-1264) @@ -150003,6 +151635,10 @@ turbofrcua Turbo Force (US, set 2) + + turbos24k + Kasparov Turbo S-24K + turbosub Turbo Sub (prototype rev. TSCA) @@ -150041,7 +151677,7 @@ turfwld3 - G1 Turf Wild 3 + GI Turf Wild 3 turkhunt @@ -150199,6 +151835,10 @@ tvdenwad Terebi Denwa Doraemon + + tvdenwam + Terebi Denwa Super Mario World + tvgame Z80 TV Game System @@ -150215,6 +151855,10 @@ tvlinkp TV Link PAL + + tvochken + TV Ocha-Ken + tvpoker T.V. Poker @@ -150567,6 +152211,10 @@ uballoon Ultra Balloon + + uboat + U-Boat + uboat65 U-boat 65 @@ -150651,6 +152299,10 @@ ufosensib Ufo Senshi Yohko Chan (bootleg, not encrypted) + + ujlnow + Um Jammer Lammy NOW! (Japan, UL1/VER.A) + uk101 UK101 @@ -150963,6 +152615,10 @@ unkljfpk unknown LJF Corporation poker game + + unkmerit + unknown Merit game (4435-81, U5-1) + unkpacg unknown 'Pac-Man' gambling game (set 1) @@ -152851,6 +154507,10 @@ vamphalfr1 Vamf x1/2 (Europe, version 1.0.0903) + + vampire + Vampire (prototype?) + vampj Vampire: The Night Warriors (Japan 940705) @@ -153075,17 +154735,17 @@ vbowlj Virtua Bowling (Japan, V100JCM) - - vbrc - Voice Bridge Challenger - vcarn Video Carnival 1999 / Super Royal Card (Version 0.11) vcc - Voice Chess Challenger + Voice Chess Challenger (set 1) + + + vcca + Voice Chess Challenger (set 2) vcircle @@ -153419,6 +155079,10 @@ vfkids Virtua Fighter Kids (JUET 960319 V0.000) + + vfootbal + Virtual Football (with 3 bonus games) + vformula Virtua Formula @@ -153687,6 +155351,10 @@ video21 Video 21 + + videoart + VideoArt + videocba Video Cordoba @@ -153903,6 +155571,10 @@ viostormub Violent Storm (ver UAB) + + viostormubbl + Violent Storm (ver UAB, bootleg) + vip Cosmac VIP (VP-711) @@ -153925,7 +155597,7 @@ vipclub - Vip Club - Maru-hi Ippatsu Kaihou [BET] (Japan 880310) + Vip Club - Maru-hi Ippatsu Kaihou (Japan 880310) viper @@ -154047,6 +155719,10 @@ visor Visor Edge + + visual50 + Visual 50 + vitaminc Mahjong Vitamin C (Japan) @@ -154159,6 +155835,10 @@ vocaid Vocaid + + vocalizer + Vocalizer 1000 + voleybal Volley @@ -154189,7 +155869,7 @@ vollyrmt - Volly (Ramtek) [TTL] + Volly (Ramtek) voltan @@ -154799,6 +156479,10 @@ vtvsocr Virtual TV Soccer + + vueloesp + Vuelo Espacial (Spanish bootleg of UniWar S) + vulcan Vulcan Venture (New) @@ -155107,10 +156791,6 @@ waveshrk Wave Shark (UAB, USA v1.04) - - wavesynth - Waveblaster-based expander - waveterm Waveterm A @@ -155215,6 +156895,10 @@ wbmld Wonder Boy - Monster Land (decrypted bootleg of Japan New Ver., MC-8123, 317-0043) + + wbmlh + Wonder Boy - Monster Land (English, difficulty hack) + wbmljb Wonder Boy - Monster Land (Japan bootleg) @@ -155627,6 +157311,10 @@ wfishing Wanpaku Fishing + + wfmotor + Motorcycle 30-in-1 + wfortune Wheel Of Fortune (set 1) @@ -155715,6 +157403,10 @@ wheelrun Wheels Runner + + wheelsii + Wheels II + wheregld Where's The Gold (10124811, NSW/ACT) @@ -155737,11 +157429,19 @@ whirl_l2 - Whirlwind (L-2) + Whirlwind (LU-2) whirl_l3 - Whirlwind (L-3) + Whirlwind (LA-3) + + + whirl_lg1 + Whirlwind (LG-1) + + + whirl_lg2 + Whirlwind (LG-2) whirl_lg3 @@ -155807,6 +157507,10 @@ wildfang Wild Fang / Tecmo Knight + + wildfangh + Wild Fang (year hack?) + wildfangs Wild Fang @@ -155973,7 +157677,7 @@ wipeormt - Wipeout (Ramtek) [TTL] + Wipeout (Ramtek) wipeout @@ -156549,7 +158253,7 @@ wontame - Won! Tertainment Happy Channel (Ver E) + Won! Tertainment Happy Channel (Ver.1.00E 2008/02/21) wontmuch @@ -156589,7 +158293,7 @@ wowg - Wizard of Wor (with German Language ROM) + Wizard of Wor (with German language ROM) wownfant @@ -157231,6 +158935,10 @@ wwfwfestub WWF WrestleFest (US bootleg) + + wwitch + Wicked Witch (Ver. AA.01.A) + wwjgtin Wai Wai Jockey Gate-In! @@ -157339,6 +159047,10 @@ x168 Xerox 16/8 + + x180ii + unknown Yuvo Joy Stand game + x1turbo X1 Turbo (CZ-850C) @@ -157455,6 +159167,10 @@ xday2 X-Day 2 (Japan) + + xds19p + XDS-19P + xegs Atari XE Game System @@ -157547,6 +159263,10 @@ xforce X Force + + xiaoao + Xiao Ao Jiang Hu (China, Ver. 1.00) + xiistag XII Stag (V2.01J 2002/6/26 22:27) @@ -157785,12 +159505,16 @@ xsleenab - Xain'd Sleena (bootleg) + Xain'd Sleena (bootleg, set 1) xsleenaba Xain'd Sleena (bootleg, bugfixed) + + xsleenabb + Xain'd Sleena (bootleg, set 2) + xsleenaj Xain'd Sleena (Japan) @@ -157851,6 +159575,14 @@ xyonix Xyonix + + y301xl + 301 XL (Yeno) + + + y416xl + 416 XL (Yeno) + y503iiir YIS-503 III R (MSX2, USSR) @@ -157997,7 +159729,7 @@ yosimotm - Mahjong Yoshimoto Gekijou [BET] (Japan) + Mahjong Yoshimoto Gekijou (Japan, medal) yosimoto @@ -158065,7 +159797,7 @@ yumefuda - Yumefuda [BET] + Yumefuda yutnori @@ -158313,11 +160045,11 @@ zero - Zero (set 1, Defender bootleg) + Zero (bootleg of Defender, set 1) zero2 - Zero (set 2, Defender bootleg) + Zero (bootleg of Defender, set 2) zerogu2 @@ -158373,7 +160105,7 @@ zeroteama - Zero Team (Japan?, earlier?) + Zero Team (Japan?, earlier?, set 1) zeroteamb @@ -158387,6 +160119,10 @@ zeroteamd Zero Team (Korea) + + zeroteame + Zero Team (Japan?, earlier?, set 2) + zeroteams Zero Team Selection @@ -158477,7 +160213,7 @@ zingzip - Zing Zing Zip + Zing Zing Zip (World) / Zhen Zhen Ji Pao (China?) zingzipbl @@ -158545,6 +160281,10 @@ zokuoten + Zoku Otenamihaiken (V2.05J 2003/05/12 18:00) + + + zokuotena Zoku Otenamihaiken (V2.03J 2001/02/16 16:00) @@ -158599,6 +160339,10 @@ zone7in1p Zone 7-in-1 Sports (PAL) + + zonefamf + Zone Family Fit + zonefusn Zone Fusion @@ -158749,7 +160493,7 @@ zzblock - Zun Zun Block [TTL] + Zun Zun Block zzyzzyxx diff --git a/resources/certificates/curl-ca-bundle.crt b/resources/certificates/curl-ca-bundle.crt index d8fda7d1a..f78a6101a 100644 --- a/resources/certificates/curl-ca-bundle.crt +++ b/resources/certificates/curl-ca-bundle.crt @@ -1,7 +1,7 @@ ## ## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Tue Dec 12 04:12:04 2023 GMT +## Certificate data from Mozilla as of: Mon Mar 11 15:25:27 2024 GMT ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates @@ -14,7 +14,7 @@ ## Just configure this file as the SSLCACertificateFile. ## ## Conversion done with mk-ca-bundle.pl version 1.29. -## SHA256: 1970dd65858925d68498d2356aea6d03f764422523c5887deca8ce3ba9e1f845 +## SHA256: 4d96bd539f4719e9ace493757afbe4a23ee8579de1c97fbebc50bba3c12e8c1e ## @@ -3532,3 +3532,50 @@ dVwPaFsdZcJfMw8eD/A7hvWwTruc9+olBdytoptLFwG+Qt81IR2tq670v64fG9PiO/yzcnMcmyiQ iRM9HcEARwmWmjgb3bHPDcK0RPOWlc4yOo80nOAXx17Org3bhzjlP1v9mxnhMUF6cKojawHhRUzN lM47ni3niAIi9G7oyOzWPPO5std3eqx7 -----END CERTIFICATE----- + +Telekom Security TLS ECC Root 2020 +================================== +-----BEGIN CERTIFICATE----- +MIICQjCCAcmgAwIBAgIQNjqWjMlcsljN0AFdxeVXADAKBggqhkjOPQQDAzBjMQswCQYDVQQGEwJE +RTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBHbWJIMSswKQYDVQQDDCJUZWxl +a29tIFNlY3VyaXR5IFRMUyBFQ0MgUm9vdCAyMDIwMB4XDTIwMDgyNTA3NDgyMFoXDTQ1MDgyNTIz +NTk1OVowYzELMAkGA1UEBhMCREUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkg +R21iSDErMCkGA1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgRUNDIFJvb3QgMjAyMDB2MBAGByqG +SM49AgEGBSuBBAAiA2IABM6//leov9Wq9xCazbzREaK9Z0LMkOsVGJDZos0MKiXrPk/OtdKPD/M1 +2kOLAoC+b1EkHQ9rK8qfwm9QMuU3ILYg/4gND21Ju9sGpIeQkpT0CdDPf8iAC8GXs7s1J8nCG6NC +MEAwHQYDVR0OBBYEFONyzG6VmUex5rNhTNHLq+O6zd6fMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P +AQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMHVSi7ekEE+uShCLsoRbQuHmKjYC2qBuGT8lv9pZ +Mo7k+5Dck2TOrbRBR2Diz6fLHgIwN0GMZt9Ba9aDAEH9L1r3ULRn0SyocddDypwnJJGDSA3PzfdU +ga/sf+Rn27iQ7t0l +-----END CERTIFICATE----- + +Telekom Security TLS RSA Root 2023 +================================== +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIQIZxULej27HF3+k7ow3BXlzANBgkqhkiG9w0BAQwFADBjMQswCQYDVQQG +EwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBHbWJIMSswKQYDVQQDDCJU +ZWxla29tIFNlY3VyaXR5IFRMUyBSU0EgUm9vdCAyMDIzMB4XDTIzMDMyODEyMTY0NVoXDTQ4MDMy +NzIzNTk1OVowYzELMAkGA1UEBhMCREUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJp +dHkgR21iSDErMCkGA1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgUlNBIFJvb3QgMjAyMzCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAO01oYGA88tKaVvC+1GDrib94W7zgRJ9cUD/h3VC +KSHtgVIs3xLBGYSJwb3FKNXVS2xE1kzbB5ZKVXrKNoIENqil/Cf2SfHVcp6R+SPWcHu79ZvB7JPP +GeplfohwoHP89v+1VmLhc2o0mD6CuKyVU/QBoCcHcqMAU6DksquDOFczJZSfvkgdmOGjup5czQRx +UX11eKvzWarE4GC+j4NSuHUaQTXtvPM6Y+mpFEXX5lLRbtLevOP1Czvm4MS9Q2QTps70mDdsipWo +l8hHD/BeEIvnHRz+sTugBTNoBUGCwQMrAcjnj02r6LX2zWtEtefdi+zqJbQAIldNsLGyMcEWzv/9 +FIS3R/qy8XDe24tsNlikfLMR0cN3f1+2JeANxdKz+bi4d9s3cXFH42AYTyS2dTd4uaNir73Jco4v +zLuu2+QVUhkHM/tqty1LkCiCc/4YizWN26cEar7qwU02OxY2kTLvtkCJkUPg8qKrBC7m8kwOFjQg +rIfBLX7JZkcXFBGk8/ehJImr2BrIoVyxo/eMbcgByU/J7MT8rFEz0ciD0cmfHdRHNCk+y7AO+oML +KFjlKdw/fKifybYKu6boRhYPluV75Gp6SG12mAWl3G0eQh5C2hrgUve1g8Aae3g1LDj1H/1Joy7S +WWO/gLCMk3PLNaaZlSJhZQNg+y+TS/qanIA7AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAdBgNV +HQ4EFgQUtqeXgj10hZv3PJ+TmpV5dVKMbUcwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS2 +p5eCPXSFm/c8n5OalXl1UoxtRzANBgkqhkiG9w0BAQwFAAOCAgEAqMxhpr51nhVQpGv7qHBFfLp+ +sVr8WyP6Cnf4mHGCDG3gXkaqk/QeoMPhk9tLrbKmXauw1GLLXrtm9S3ul0A8Yute1hTWjOKWi0Fp +kzXmuZlrYrShF2Y0pmtjxrlO8iLpWA1WQdH6DErwM807u20hOq6OcrXDSvvpfeWxm4bu4uB9tPcy +/SKE8YXJN3nptT+/XOR0so8RYgDdGGah2XsjX/GO1WfoVNpbOms2b/mBsTNHM3dA+VKq3dSDz4V4 +mZqTuXNnQkYRIer+CqkbGmVps4+uFrb2S1ayLfmlyOw7YqPta9BO1UAJpB+Y1zqlklkg5LB9zVtz +aL1txKITDmcZuI1CfmwMmm6gJC3VRRvcxAIU/oVbZZfKTpBQCHpCNfnqwmbU+AGuHrS+w6jv/naa +oqYfRvaE7fzbzsQCzndILIyy7MMAo+wsVRjBfhnu4S/yrYObnqsZ38aKL4x35bcF7DvB7L6Gs4a8 +wPfc5+pbrrLMtTWGS9DiP7bY+A4A7l3j941Y/8+LN+ljX273CXE2whJdV/LItM3z7gLfEdxquVeE +HVlNjM7IDiPCtyaaEBRx/pOyiriA8A4QntOoUAw3gi/q4Iqd4Sw5/7W0cwDk90imc6y/st53BIe0 +o82bNSQ3+pCTE4FCxpgmdTdmQRCsu/WU48IxK63nI1bMNSWSs1A= +-----END CERTIFICATE----- diff --git a/resources/sorting/hwtype_year/es_systems_sorting.xml b/resources/sorting/hwtype_year/es_systems_sorting.xml index 9246c2f14..95e833ae9 100644 --- a/resources/sorting/hwtype_year/es_systems_sorting.xml +++ b/resources/sorting/hwtype_year/es_systems_sorting.xml @@ -37,6 +37,14 @@ android OS - 2008 + + androidapps + Folder - 0000 + + + androidgames + Folder - 0000 + apple2 Computer - 1977 diff --git a/resources/sorting/manufacturer_hwtype_year/es_systems_sorting.xml b/resources/sorting/manufacturer_hwtype_year/es_systems_sorting.xml index ef0c3b699..213eb1d0b 100644 --- a/resources/sorting/manufacturer_hwtype_year/es_systems_sorting.xml +++ b/resources/sorting/manufacturer_hwtype_year/es_systems_sorting.xml @@ -37,6 +37,14 @@ android Google - OS - 2008 + + androidapps + Various - Folder - 0000 + + + androidgames + Various - Folder - 0000 + apple2 Apple - Computer - 1977 diff --git a/resources/sorting/manufacturer_year/es_systems_sorting.xml b/resources/sorting/manufacturer_year/es_systems_sorting.xml index 1a5a2001f..7450e9fa9 100644 --- a/resources/sorting/manufacturer_year/es_systems_sorting.xml +++ b/resources/sorting/manufacturer_year/es_systems_sorting.xml @@ -37,6 +37,14 @@ android Google - 2008 + + androidapps + Various - 0000 + + + androidgames + Various - 0000 + apple2 Apple - 1977 diff --git a/resources/sorting/year/es_systems_sorting.xml b/resources/sorting/year/es_systems_sorting.xml index f69eace23..3637e625f 100644 --- a/resources/sorting/year/es_systems_sorting.xml +++ b/resources/sorting/year/es_systems_sorting.xml @@ -37,6 +37,14 @@ android 2008 + + androidapps + 0000 + + + androidgames + 0000 + apple2 1977 diff --git a/resources/systems/android/es_find_rules.xml b/resources/systems/android/es_find_rules.xml index 24c1739e6..7a06d38d6 100644 --- a/resources/systems/android/es_find_rules.xml +++ b/resources/systems/android/es_find_rules.xml @@ -6,7 +6,7 @@ com.retroarch.aarch64/com.retroarch.browser.retroactivity.RetroActivityFuture com.retroarch.ra32/com.retroarch.browser.retroactivity.RetroActivityFuture - + com.retroarch/com.retroarch.browser.retroactivity.RetroActivityFuture @@ -73,6 +73,12 @@ org.dolphinemu.mmjr/org.dolphinemu.dolphinemu.ui.main.MainActivity + + + + com.amigan.droidarcadia/.MainActivity + + @@ -140,6 +146,18 @@ com.fms.ines.free/com.fms.emulib.TVActivity + + + + ru.vastness.altmer.iratajaguar/.EmulatorActivity + + + + + + io.github.lime3ds.android/.activities.EmulationActivity + + @@ -307,6 +325,13 @@ com.explusalpha.SaturnEmu/com.imagine.BaseActivity + + + + org.scummvm.scummvm.debug/org.scummvm.scummvm.SplashActivity + org.scummvm.scummvm/org.scummvm.scummvm.SplashActivity + + @@ -332,6 +357,12 @@ com.explusalpha.SwanEmu/com.imagine.BaseActivity + + + + org.vpinball.app/.VpxLauncherActivity + + diff --git a/resources/systems/android/es_systems.xml b/resources/systems/android/es_systems.xml index 0a119e12d..9eb1408ad 100644 --- a/resources/systems/android/es_systems.xml +++ b/resources/systems/android/es_systems.xml @@ -16,6 +16,10 @@ Coleco Adam %ROMPATH%/adam .1dd .1DD .bin .BIN .col .COL .cqi .CQI .cqm .CQM .d77 .D77 .d88 .D88 .ddp .DDP .dfi .DFI .dsk .DSK .hfe .HFE .imd .IMD .mfi .MFI .mfm .MFM .rom .ROM .td0 .TD0 .wav .WAV .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/adam' -flop1 '%ROMRAW%'" %DATA%=adam + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/adam' -cass1 '%ROMRAW%'" %DATA%=adam + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/adam' -cart1 '%ROMRAW%'" %DATA%=adam + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/adam'" %DATA%=%ROMPROVIDER% %EMULATOR_COLEM% %ACTIVITY_CLEAR_TASK% %ACTIVITY_CLEAR_TOP% %ACTION%=android.intent.action.VIEW %DATA%=%ROMSAF% adam adam @@ -76,6 +80,7 @@ .cdt .CDT .cpr .CPR .dsk .DSK .kcr .KCR .m3u .M3U .sna .SNA .tap .TAR .voc .VOC .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=cap32_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=crocods_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/amstradcpc' -flop1 '%ROMRAW%'" %DATA%=cpc6128 amstradcpc amstradcpc @@ -88,12 +93,30 @@ android android + + androidapps + Android Apps + %ROMPATH%/androidapps + .app .APP + %ANDROIDAPP%=%FILEINJECT% + android + androidapps + + + androidgames + Android Games + %ROMPATH%/androidgames + .app .APP + %ANDROIDAPP%=%FILEINJECT% + android + androidgames + apple2 Apple II %ROMPATH%/apple2 - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .do .DO .dsk .DSK .nib .NIB .po .PO + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/apple2' -gameio joy -flop1 '%ROMRAW%'" %DATA%=apple2e apple2 apple2 @@ -101,8 +124,8 @@ apple2gs Apple IIGS %ROMPATH%/apple2gs - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .2mg .2MG .7z .7z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/apple2gs' -gameio joy -flop3 '%ROMRAW%'" %DATA%=apple2gs apple2gs apple2gs @@ -116,7 +139,7 @@ %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2003_plus_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2003_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2000_libretro_android.so %EXTRA_ROM%=%ROM% - %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/arcade'" %DATA%=%ROMPROVIDER% %EMULATOR_MAME4DROID% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% %EMULATOR_NEO-EMU% %DATA%=%ROMSAF% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbneo_libretro_android.so %EXTRA_ROM%=%ROM% @@ -131,8 +154,9 @@ arcadia Emerson Arcadia 2001 %ROMPATH%/arcadia - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_DROIDARCADIA% %MIMETYPE%=application/zip %DATA%=%ROMPROVIDER% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/arcadia' -cart '%ROMRAW%'" %DATA%=arcadia arcadia arcadia @@ -140,8 +164,11 @@ archimedes Acorn Archimedes %ROMPATH%/archimedes - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .1dd .1DD .360 .adf .ADF .adl .ADL .adm .ADM .ads .ADS .apd .APD .bbc .BBC .chd .CHD .cqi .CQI .cqm .CQM .d77 .D77 .d88 .D88 .dfi .DFI .dsd .DSD .dsk .DSK .hfe .HFE .ima .IMA .imd .IMD .img .IMG .ipf .IPF .jfd .JFD .mfi .MFI .mfm .MFM .msa .MSA .ssd .SSD .st .ST .td0 .TD0 .ufi .UFI .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/archimedes' -flop1 '%ROMRAW%'" %DATA%=aa4401 + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/archimedes' -flop1 '%ROMRAW%'" %DATA%=aa3000 + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/archimedes' -flop1 '%ROMRAW%'" %DATA%=aa310 + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/archimedes' -flop1 '%ROMRAW%'" %DATA%=aa540 archimedes archimedes @@ -159,7 +186,7 @@ Bally Astrocade %ROMPATH%/astrocde .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/astrocde' -cart '%ROMRAW%'" %DATA%=astrocde astrocde astrocade @@ -190,6 +217,7 @@ %ROMPATH%/atari7800 .a78 .A78 .bin .BIN .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=prosystem_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/atari7800' -cart '%ROMRAW%'" %DATA%=a7800 atari7800 atari7800 @@ -208,6 +236,8 @@ %ROMPATH%/atarijaguar .abs .ABS .bin .BIN .cdi .CDI .cof .COF .cue .CUE .j64 .J64 .jag .JAG .prg .PRG .rom .ROM .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=virtualjaguar_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_IRATAJAGUAR% %DATA%=%ROMSAF% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/atarijaguar' -cart '%ROMRAW%'" %DATA%=jaguar atarijaguar atarijaguar @@ -244,7 +274,7 @@ atarixe Atari XE %ROMPATH%/atarixe - .a52 .A52 .atr .ATR .atx .ATX .bin .BIN .cas .CAS .cdm .CDM .xex .XEX .xfd .XFD .7z .7Z .zip .ZIP + .a52 .A52 .atr .ATR .atx .ATX .bin .BIN .car .CAR .cas .CAS .cdm .CDM .xex .XEX .xfd .XFD .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=atari800_libretro_android.so %EXTRA_ROM%=%ROM% atarixe atarixe @@ -263,8 +293,8 @@ bbcmicro Acorn Computers BBC Micro %ROMPATH%/bbcmicro - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .dsd .DSD .img .IMG .ssd .SSD .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/bbcmicro' -autoboot_delay '2' -autoboot_command '*cat\n\n*exec !boot\n' -analogue acornjoy -flop1 '%ROMRAW%'" %DATA%=bbcb bbcmicro bbcmicro @@ -287,6 +317,7 @@ %ROMPATH%/cdimono1 .chd .CHD .cue .CUE .iso .ISO %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=same_cdi_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/cdimono1' -cdrom '%ROMRAW%'" %DATA%=cdimono1 cdimono1 cdimono1 @@ -294,7 +325,7 @@ cdtv Commodore CDTV %ROMPATH%/cdtv - .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .m3u .M3U .mds .MDS .nrg .NRG .rp9 .RP9 .7z .7Z .zip .ZIP + .adf .ADF .adz .ADZ .ccd .CCD .chd .CHD .cue .CUE .dms .DMS .fdi .FDI .hdf .HDF .hdz .HDZ .ipf .IPF .iso .ISO .lha .LHA .m3u .M3U .mds .MDS .nrg .NRG .rp9 .RP9 .uae .UAE .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=puae_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=puae2021_libretro_android.so %EXTRA_ROM%=%ROM% cdtv @@ -315,6 +346,7 @@ %ROMPATH%/channelf .bin .BIN .chf .CHF .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=freechaf_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/channelf' -cart '%ROMRAW%'" %DATA%=channelf channelf channelf @@ -322,8 +354,9 @@ coco Tandy Color Computer %ROMPATH%/coco - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .cas .CAS .ccc .CCC .dsk .DSK .rom .ROM + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/coco' -cart '%ROMRAW%'" %DATA%=coco + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/coco' -autoboot_delay '2' -autoboot_command 'cloadm:exec\n' -cass '%ROMRAW%'" %DATA%=coco coco coco @@ -343,7 +376,12 @@ consolearcade Console Arcade Systems %ROMPATH%/consolearcade - .7z .7Z .zip .ZIP + .arcadedef .iso .ISO .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mamearcade_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/consolearcade'" %DATA%=%ROMPROVIDER% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=flycast_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_FLYCAST% %ACTION%=android.intent.action.VIEW %DATA%=%ROM% + %EMULATOR_PLAY!% %ACTION%=android.intent.action.VIEW %DATA%=%ROMSAF% PLACEHOLDER %ROM% arcade consolearcade @@ -358,7 +396,7 @@ %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2003_plus_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2003_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2000_libretro_android.so %EXTRA_ROM%=%ROM% - %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/cps'" %DATA%=%ROMPROVIDER% %EMULATOR_MAME4DROID% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbneo_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_libretro_android.so %EXTRA_ROM%=%ROM% @@ -378,7 +416,7 @@ %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2003_plus_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2003_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2000_libretro_android.so %EXTRA_ROM%=%ROM% - %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/cps1'" %DATA%=%ROMPROVIDER% %EMULATOR_MAME4DROID% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbneo_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_libretro_android.so %EXTRA_ROM%=%ROM% @@ -396,7 +434,7 @@ %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2003_plus_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2003_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2000_libretro_android.so %EXTRA_ROM%=%ROM% - %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/cps2'" %DATA%=%ROMPROVIDER% %EMULATOR_MAME4DROID% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbneo_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_libretro_android.so %EXTRA_ROM%=%ROM% @@ -414,7 +452,7 @@ %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2003_plus_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2003_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2000_libretro_android.so %EXTRA_ROM%=%ROM% - %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/cps3'" %DATA%=%ROMPROVIDER% %EMULATOR_MAME4DROID% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbneo_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_libretro_android.so %EXTRA_ROM%=%ROM% @@ -426,8 +464,8 @@ crvision VTech CreatiVision %ROMPATH%/crvision - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .bin .BIN .rom .ROM .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/crvision' -cart '%ROMRAW%'" %DATA%=crvision crvision crvision @@ -435,7 +473,8 @@ daphne Daphne Arcade LaserDisc Emulator %ROMPATH%/daphne - .dirksimple .ogv .OGV + .dirksimple .ogv .OGV .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/daphne'" %DATA%=%ROMPROVIDER% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=dirksimple_libretro_android.so %EXTRA_ROM%=%ROM% daphne, arcade daphne @@ -502,8 +541,10 @@ electron Acorn Electron %ROMPATH%/electron - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .1dd .1DD .adf .ADF .adl .ADL .adm .ADM .ads .ADS .bbc .BBC .bin .BIN .cqi .CQI .cqm .CQM .csw .CSW .d77 .D77 .d88 .D88 .dfi .DFI .dsd .DSD .dsk .DSK .hfe .HFE .imd .IMD .img .IMG .mfi .MFI .mfm .MFM .rom .ROM .ssd .SSD .td0 .TD0 .uef .UEF .wav .WAV .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/electron' -autoboot_delay '2' -autoboot_command '*T.\nCH.\"\"\n' -cass1 '%ROMRAW%'" %DATA%=electron64 + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/electron' -exp plus1 -cart1 seds -autoboot_delay '2' -autoboot_command '*CAT\n\n\n\n\n\n*EXEC !BOOT\n' -flop1 '%ROMRAW%'" %DATA%=electron64 + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/electron' -exp plus3 -exp:plus3:fdc:1 35dd -autoboot_delay '2' -autoboot_command '*CAT\n\n\n\n\n\n*RUN !BOOT\n' -flop1 '%ROMRAW%'" %DATA%=electron64 electron electron @@ -511,9 +552,9 @@ emulators Emulators %ROMPATH%/emulators - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% - pcwindows + .app .APP + %ANDROIDAPP%=%FILEINJECT% + android emulators @@ -589,8 +630,13 @@ fm7 Fujitsu FM-7 %ROMPATH%/fm7 - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .1dd .1DD .cqi .CQI .cqm .CQM .d77 .D77 .d88 .D88 .dfi .DFI .dsk .DSK .hfe .HFE .imd .IMD .mfi .MFI .mfm .MFM .t77 .T77 .td0 .TD0 .wav .WAV .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/fm7' -flop1 '%ROMRAW%'" %DATA%=fm7 + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/fm7' -autoboot_delay '5' -autoboot_command 'load\n\n\nrun\n' -cass1 '%ROMRAW%'" %DATA%=fm7 + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/fm7'" %DATA%=%ROMPROVIDER% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/fm7' -flop1 '%ROMRAW%'" %DATA%=fm77av + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/fm7' -autoboot_delay '5' -autoboot_command 'load\n\n\nrun\n' -cass1 '%ROMRAW%'" %DATA%=fm77av + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/fm7'" %DATA%=%ROMPROVIDER% fm7 fm7 @@ -598,8 +644,8 @@ fmtowns Fujitsu FM Towns %ROMPATH%/fmtowns - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .cdr .CDR .chd .CHD .cue .CUE .gdi .GDI .iso .ISO + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/fmtowns' -cdrom '%ROMRAW%'" %DATA%=fmtownshr fmtowns fmtowns @@ -616,8 +662,8 @@ gamate Bit Corporation Gamate %ROMPATH%/gamate - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/gamate' -cart '%ROMRAW%'" %DATA%=gamate gamate gamate @@ -627,6 +673,7 @@ %ROMPATH%/gameandwatch .mgw .MGW .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mamemess_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-artpath '%ROMPATHRAW%/gameandwatch/artwork'" %DATA%=%ROMPROVIDER% %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=gw_libretro_android.so %EXTRA_ROM%=%ROM% gameandwatch @@ -636,8 +683,8 @@ gamecom Tiger Electronics Game.com %ROMPATH%/gamecom - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .tgc .TGC .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/gamecom' -cartridge1 '%ROMRAW%'" %DATA%=gamecom gamecom gamecom @@ -738,8 +785,8 @@ gmaster Hartung Game Master %ROMPATH%/gmaster - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/gmaster' -cart '%ROMRAW%'" %DATA%=gmaster gmaster gmaster @@ -750,6 +797,7 @@ .bin .BIN .cdt .CDT .cpr .CPR .dsk .DSK .kcr .KCR .m3u .M3U .sna .SNA .tap .TAR .voc .VOC .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=cap32_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=crocods_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/gx4000' -cart '%ROMRAW%'" %DATA%=gx4000 gx4000 gx4000 @@ -759,6 +807,7 @@ %ROMPATH%/intellivision .bin .BIN .int .INT .rom .ROM .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=freeintv_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/intellivision' -cart '%ROMRAW%'" %DATA%=intv intellivision intellivision @@ -784,7 +833,8 @@ laserdisc LaserDisc Games %ROMPATH%/laserdisc - .dirksimple .ogv .OGV + .dirksimple .ogv .OGV .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/laserdisc'" %DATA%=%ROMPROVIDER% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=dirksimple_libretro_android.so %EXTRA_ROM%=%ROM% daphne, arcade laserdisc @@ -795,6 +845,7 @@ %ROMPATH%/lcdgames .mgw .MGW .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mamemess_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-artpath '%ROMPATHRAW%/lcdgames/artwork'" %DATA%=%ROMPROVIDER% %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=gw_libretro_android.so %EXTRA_ROM%=%ROM% lcdgames, gameandwatch @@ -831,8 +882,11 @@ macintosh Apple Macintosh %ROMPATH%/macintosh - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .dsk .DSK + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/macintosh' -flop1 '%ROMRAW%'" %DATA%=macse + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/macintosh' -flop1 %GAMEDIRRAW%/boot.dsk -flop2 '%ROMRAW%'" %DATA%=macse + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/macintosh' -flop1 '%ROMRAW%'" %DATA%=macplus + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/macintosh' -flop1 %GAMEDIRRAW%/boot.dsk -flop2 '%ROMRAW%'" %DATA%=macplus macintosh macintosh @@ -846,7 +900,7 @@ %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2003_plus_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2003_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2000_libretro_android.so %EXTRA_ROM%=%ROM% - %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/mame'" %DATA%=%ROMPROVIDER% %EMULATOR_MAME4DROID% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% %EMULATOR_NEO-EMU% %DATA%=%ROMSAF% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbneo_libretro_android.so %EXTRA_ROM%=%ROM% @@ -935,6 +989,7 @@ %ROMPATH%/megaduck .bin .BIN .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=sameduck_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/megaduck' -cart '%ROMRAW%'" %DATA%=megaduck megaduck megaduck @@ -953,6 +1008,7 @@ %ROMPATH%/model2 .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mamearcade_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/model2'" %DATA%=%ROMPROVIDER% arcade model2 @@ -1048,6 +1104,7 @@ %EMULATOR_CITRA% %ACTIVITY_CLEAR_TASK% %ACTIVITY_CLEAR_TOP% %DATA%=%ROMSAF% %EMULATOR_CITRA-CANARY% %ACTIVITY_CLEAR_TASK% %ACTIVITY_CLEAR_TOP% %DATA%=%ROMSAF% %EMULATOR_CITRA-MMJ% %EXTRA_GamePath%=%ROM% + %EMULATOR_LIME3DS% %ACTIVITY_CLEAR_TASK% %ACTIVITY_CLEAR_TOP% %DATA%=%ROMSAF% %EMULATOR_PANDA3DS% %DATA%=%ROMPROVIDER% n3ds n3ds @@ -1112,6 +1169,7 @@ %ROMPATH%/nds .app .APP .bin .BIN .nds .NDS .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=melondsds_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=melonds_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_MELONDS% %ACTION%=me.magnum.melonds.LAUNCH_ROM %EXTRA_uri%=%ROMSAF% %EMULATOR_MELONDS-NIGHTLY% %ACTION%=me.magnum.melonds.nightly.LAUNCH_ROM %EXTRA_uri%=%ROMSAF% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=desmume_libretro_android.so %EXTRA_ROM%=%ROM% @@ -1128,7 +1186,7 @@ %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbneo_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=geolith_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_NEO-EMU% %DATA%=%ROMSAF% - %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/neogeo'" %DATA%=%ROMPROVIDER% %EMULATOR_MAME4DROID% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% neogeo neogeo @@ -1140,6 +1198,7 @@ .chd .CHD .cue .CUE %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=neocd_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbneo_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/neogeocd' -cdrm '%ROMRAW%'" %DATA%=neocdz neogeocd neogeocd @@ -1150,6 +1209,7 @@ .chd .CHD .cue .CUE %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=neocd_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbneo_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/neogeocdjp' -cdrm '%ROMRAW%'" %DATA%=neocdz neogeocd neogeocdjp @@ -1205,6 +1265,7 @@ %ROMPATH%/odyssey2 .bin .BIN .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=o2em_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/odyssey2' -cart '%ROMRAW%'" %DATA%=odyssey2 odyssey2 odyssey2 @@ -1221,8 +1282,8 @@ oric Tangerine Computer Systems Oric %ROMPATH%/oric - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .dsk .DSK .ort .ORT .tap .TAP .wav .WAV + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/oric' -autoboot_delay '4' -autoboot_command 'cload\"\"\n' -cass '%ROMRAW%'" %DATA%=oric1 oric oric @@ -1414,8 +1475,8 @@ pv1000 Casio PV-1000 %ROMPATH%/pv1000 - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/pv1000' -cart '%ROMRAW%'" %DATA%=pv1000 pv1000 pv1000 @@ -1489,6 +1550,7 @@ %ROMPATH%/scummvm .scummvm .SCUMMVM .svm .SVM %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=scummvm_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_SCUMMVM% %ACTION%=android.intent.action.MAIN %CATEGORY%=android.intent.action.MAIN %DATA%=%INJECT%=%ROM% scummvm scummvm @@ -1496,8 +1558,8 @@ scv Epoch Super Cassette Vision %ROMPATH%/scv - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .0 .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/scv' -cart '%ROMRAW%'" %DATA%=scv scv scv @@ -1648,7 +1710,7 @@ %ROMPATH%/stv .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mamearcade_libretro_android.so %EXTRA_ROM%=%ROM% - %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/stv'" %DATA%=%ROMPROVIDER% %EMULATOR_MAME4DROID% %ACTION%=android.intent.action.VIEW %DATA%=%ROMPROVIDER% arcade stv @@ -1685,6 +1747,7 @@ %ROMPATH%/supervision .bin .BIN .sv .SV .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=potator_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/supervision' -cart '%ROMRAW%'" %DATA%=svision supervision supervision @@ -1692,8 +1755,8 @@ supracan Funtech Super A'Can %ROMPATH%/supracan - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/supracan' -cart '%ROMRAW%'" %DATA%=supracan supracan supracan @@ -1752,8 +1815,8 @@ ti99 Texas Instruments TI-99 %ROMPATH%/ti99 - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .rpk .RPK .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/ti99' -ioport peb -ioport:peb:slot3 speech -cart '%ROMRAW%'" %DATA%=ti99_4a ti99 ti99 @@ -1817,6 +1880,7 @@ %ROMPATH%/vectrex .bin .BIN .gam .GAM .vc .VC .vec .VEC .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vecx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/vectrex' -cart '%ROMRAW%'" %DATA%=vectrex vectrex vectrex @@ -1835,6 +1899,7 @@ %ROMPATH%/videopac .bin .BIN .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=o2em_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/videopac' -cart '%ROMRAW%'" %DATA%=videopac odyssey2 videopac @@ -1851,8 +1916,8 @@ vpinball Visual Pinball %ROMPATH%/vpinball - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .vpinball .VPINBALL .vpt .VPT .vpx .VPX + %EMULATOR_VISUAL-PINBALL% %ACTIVITY_CLEAR_TASK% %ACTIVITY_CLEAR_TOP% %DATA%=%ROMSAF% vpinball vpinball @@ -1860,8 +1925,8 @@ vsmile VTech V.Smile %ROMPATH%/vsmile - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/vsmile' -cart '%ROMRAW%'" %DATA%=vsmile vsmile vsmile @@ -1948,6 +2013,8 @@ %ROMPATH%/x1 .2d .2D .2hd .2HD .88d .88D .cmd .CMD .d88 .D88 .dup .DUP .dx1 .DX1 .hdm .HDM .tap .TAP .tfd .TFD .xdf .XDF .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=x1_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/x1' -flop1 '%ROMRAW%'" %DATA%=x1 + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/x1' -cass1 '%ROMRAW%'" %DATA%=x1 x1 x1 @@ -1957,6 +2024,7 @@ %ROMPATH%/x68000 .2hd .2HD .88d .88D .cmd .CMD .d88 .D88 .dim .DIM .dup .DUP .hdf .HDF .hdm .HDM .img .IMG .m3u .M3U .xdf .XDF .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=px68k_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID-2024% %ACTION%=android.intent.action.VIEW %EXTRA_cli_params%="-rompath '%GAMEDIRRAW%;%ROMPATHRAW%/x68000' -flop1 '%ROMRAW%'" %DATA%=x68000 x68000 x68000 @@ -1982,8 +2050,8 @@ zmachine Infocom Z-machine %ROMPATH%/zmachine - .7z .7Z .zip .ZIP - PLACEHOLDER %ROM% + .dat .DAT .z1 .Z1 .z2 .Z2 .z3 .Z3 .z4 .Z4 .z5 .Z5 .z6 .Z6 .z7 .Z7 .z8 .Z8 .zlb .ZLB .zblorb .ZBLORB + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mojozork_libretro_android.so %EXTRA_ROM%=%ROM% zmachine zmachine diff --git a/resources/systems/linux/es_find_rules.xml b/resources/systems/linux/es_find_rules.xml index 50e1b7b5c..2223f0d27 100644 --- a/resources/systems/linux/es_find_rules.xml +++ b/resources/systems/linux/es_find_rules.xml @@ -53,6 +53,18 @@ ~/bin/3dSen/3dSen.exe + + + + AceDL + + + ~/Applications/AceDL/AceDL + ~/.local/share/applications/AceDL/AceDL + ~/.local/bin/AceDL/AceDL + ~/bin/AceDL/AceDL + + @@ -110,6 +122,18 @@ ~/.local/share/flatpak/exports/bin/net.cebix.basilisk + + + + bigpemu + + + ~/Applications/bigpemu/bigpemu + ~/.local/share/applications/bigpemu/bigpemu + ~/.local/bin/bigpemu/bigpemu + ~/bin/bigpemu/bigpemu + + @@ -181,6 +205,18 @@ ~/.local/share/flatpak/exports/bin/org.citra_emu.citra + + + + colem + + + ~/Applications/colem/colem + ~/.local/share/applications/colem/colem + ~/.local/bin/colem/colem + ~/bin/colem/colem + + @@ -449,6 +485,25 @@ ~/bin/lightspark/lightspark + + + + lime3ds-gui + lime-qt + + + ~/Applications/lime3ds-gui*.AppImage + ~/.local/share/applications/lime3ds-gui*.AppImage + ~/.local/bin/lime3ds-gui*.AppImage + ~/bin/lime3ds-gui*.AppImage + ~/Applications/lime-qt*.AppImage + ~/.local/share/applications/lime-qt*.AppImage + ~/.local/bin/lime-qt*.AppImage + ~/bin/lime-qt*.AppImage + /var/lib/flatpak/exports/bin/io.github.lime3ds.Lime3DS + ~/.local/share/flatpak/exports/bin/io.github.lime3ds.Lime3DS + + @@ -1058,6 +1113,15 @@ ~/bin/xenia/xenia_canary.exe + + + + ~/Applications/XM6 Pro-68k/XM6.exe + ~/.local/share/applications/XM6 Pro-68k/XM6.exe + ~/.local/bin/XM6 Pro-68k/XM6.exe + ~/bin/XM6 Pro-68k/XM6.exe + + diff --git a/resources/systems/linux/es_systems.xml b/resources/systems/linux/es_systems.xml index 5934eeee6..d8392e94b 100644 --- a/resources/systems/linux/es_systems.xml +++ b/resources/systems/linux/es_systems.xml @@ -15,10 +15,11 @@ Coleco Adam %ROMPATH%/adam .1dd .1DD .bin .BIN .col .COL .cqi .CQI .cqm .CQM .d77 .D77 .d88 .D88 .ddp .DDP .dfi .DFI .dsk .DSK .hfe .HFE .imd .IMD .mfi .MFI .mfm .MFM .rom .ROM .td0 .TD0 .wav .WAV .7z .7Z .zip .ZIP - %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/adam adam -flop1 %ROM% - %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/adam adam -cass1 %ROM% - %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/adam adam -cart1 %ROM% - %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/adam adam %BASENAME% + %STARTDIR%=~/.mame %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/adam adam -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/adam adam -cass1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/adam adam -cart1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/adam adam %BASENAME% + adam adam @@ -88,8 +89,9 @@ .cdt .CDT .cpr .CPR .dsk .DSK .kcr .KCR .m3u .M3U .sna .SNA .tap .TAR .voc .VOC .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/cap32_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/crocods_libretro.so %ROM% - %STARTDIR%=~/.CPCemu %EMULATOR_CPCEMU% %ROM% - %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/amstradcpc cpc6128 -flop1 %ROM% + + + %STARTDIR%=~/.mame %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/amstradcpc cpc6128 -flop1 %ROM% amstradcpc amstradcpc @@ -102,6 +104,24 @@ android android + + androidapps + Android Apps + %ROMPATH%/androidapps + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + android + androidapps + + + androidgames + Android Games + %ROMPATH%/androidgames + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + android + androidgames + apple2 Apple II @@ -109,8 +129,8 @@ .do .DO .dsk .DSK .nib .NIB .po .PO - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "apple2e -rompath \"%GAMEDIRRAW%;%ROMPATH%/apple2\" -flop1 \"%ROMRAW%\"" - %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/apple2 apple2e -flop1 %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "apple2e -rompath \"%GAMEDIRRAW%;%ROMPATH%/apple2\" -gameio joy -flop1 \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/apple2 apple2e -gameio joy -flop1 %ROM% apple2 apple2 @@ -119,8 +139,8 @@ Apple IIGS %ROMPATH%/apple2gs .2mg .2MG .7z .7z .zip .ZIP - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "apple2gs -rompath \"%GAMEDIRRAW%;%ROMPATH%/apple2gs\" -flop3 \"%ROMRAW%\"" - %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/apple2gs apple2gs -flop3 %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "apple2gs -rompath \"%GAMEDIRRAW%;%ROMPATH%/apple2gs\" -gameio joy -flop3 \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/apple2gs apple2gs -gameio joy -flop3 %ROM% apple2gs apple2gs @@ -240,9 +260,10 @@ %ROMPATH%/atarijaguar .abs .ABS .bin .BIN .cdi .CDI .cof .COF .cue .CUE .j64 .J64 .jag .JAG .prg .PRG .rom .ROM .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/virtualjaguar_libretro.so %ROM% - %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/atarijaguar jaguar -cart %ROM% - - + + + + %STARTDIR%=~/.mame %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/atarijaguar jaguar -cart %ROM% atarijaguar atarijaguar @@ -252,6 +273,7 @@ Atari Jaguar CD %ROMPATH%/atarijaguarcd .abs .ABS .bin .BIN .cdi .CDI .cof .COF .cue .CUE .j64 .J64 .jag .JAG .prg .PRG .rom .ROM .7z .7Z .zip .ZIP + %EMULATOR_BIGPEMU% %ROM% %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_BIGPEMU-WINDOWS% %ROM% %STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_BIGPEMU-WINDOWS% %ROM% atarijaguarcd @@ -283,7 +305,7 @@ atarixe Atari XE %ROMPATH%/atarixe - .a52 .A52 .atr .ATR .atx .ATX .bin .BIN .cas .CAS .cdm .CDM .xex .XEX .xfd .XFD .7z .7Z .zip .ZIP + .a52 .A52 .atr .ATR .atx .ATX .bin .BIN .car .CAR .cas .CAS .cdm .CDM .xex .XEX .xfd .XFD .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/atari800_libretro.so %ROM% atarixe @@ -305,7 +327,7 @@ Acorn Computers BBC Micro %ROMPATH%/bbcmicro .dsd .DSD .img .IMG .ssd .SSD .7z .7Z .zip .ZIP - %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/bbcmicro bbcb -autoboot_delay "2" -autoboot_command "*cat\n\n*exec !boot\n" -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/bbcmicro bbcb -autoboot_delay "2" -autoboot_command "*cat\n\n*exec !boot\n" -analogue acornjoy -flop1 %ROM% bbcmicro bbcmicro @@ -338,7 +360,7 @@ cdtv Commodore CDTV %ROMPATH%/cdtv - .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .m3u .M3U .mds .MDS .nrg .NRG .rp9 .RP9 .7z .7Z .zip .ZIP + .adf .ADF .adz .ADZ .ccd .CCD .chd .CHD .cue .CUE .dms .DMS .fdi .FDI .hdf .HDF .hdz .HDZ .ipf .IPF .iso .ISO .lha .LHA .m3u .M3U .mds .MDS .nrg .NRG .rp9 .RP9 .uae .UAE .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/puae_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/puae2021_libretro.so %ROM% @@ -374,6 +396,8 @@ .cas .CAS .ccc .CCC .dsk .DSK .rom .ROM %EMULATOR_XROAR% -fs -default-machine coco2bus %ROM% %EMULATOR_XROAR% -fs -default-machine coco2b %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/coco coco -cart %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/coco coco -autoboot_delay "2" -autoboot_command "cloadm:exec\n" -cass %ROM% coco coco @@ -387,6 +411,7 @@ %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearcoleco_libretro.so %ROM% + colecovision colecovision @@ -1205,7 +1230,8 @@ %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/citra_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/citra2018_libretro.so %ROM% %EMULATOR_CITRA% %ROM% - + + n3ds n3ds @@ -1400,6 +1426,7 @@ Tangerine Computer Systems Oric %ROMPATH%/oric .dsk .DSK .ort .ORT .tap .TAP .wav .WAV + %STARTDIR%=~/.mame %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/oric oric1 -autoboot_delay "4" -autoboot_command "cload\"\"\n" -cass %ROM% %STARTDIR%=%EMUDIR% %EMULATOR_ORICUTRON% %ROM% oric oric @@ -2149,7 +2176,7 @@ wiiu Nintendo Wii U %ROMPATH%/wiiu - .rpx .RPX .wua .WUA .wud .WUD .wux .WUX + .elf .ELF .rpx .RPX .tmd .TMD .wua .WUA .wud .WUD .wuhb .WUHB .wux .WUX %EMULATOR_CEMU% -g %ROM% wiiu wiiu @@ -2234,7 +2261,9 @@ %ROMPATH%/x68000 .2hd .2HD .88d .88D .cmd .CMD .d88 .D88 .dim .DIM .dup .DUP .hdf .HDF .hdm .HDM .img .IMG .m3u .M3U .xdf .XDF .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/px68k_libretro.so %ROM% - %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/x68000 x68000 -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -inipath /var/config/mame/ini -rompath %GAMEDIR%\;%ROMPATH%/x68000 x68000 -flop1 %ROM% + + x68000 x68000 @@ -2266,6 +2295,7 @@ Infocom Z-machine %ROMPATH%/zmachine .dat .DAT .z1 .Z1 .z2 .Z2 .z3 .Z3 .z4 .Z4 .z5 .Z5 .z6 .Z6 .z7 .Z7 .z8 .Z8 .zlb .ZLB .zblorb .ZBLORB + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mojozork_libretro.so %ROM% %EMULATOR_GARGOYLE% %ROM% zmachine zmachine diff --git a/resources/systems/macos/es_find_rules.xml b/resources/systems/macos/es_find_rules.xml index 93defbc37..485fa4a71 100644 --- a/resources/systems/macos/es_find_rules.xml +++ b/resources/systems/macos/es_find_rules.xml @@ -21,6 +21,12 @@ /Applications/RetroArch.app/Contents/Resources/cores + + + + /Applications/AceDL.app/Contents/MacOS/AceDL + + @@ -160,6 +166,13 @@ hypseus.bin + + + + /Applications/lime3ds-gui.app/Contents/MacOS/lime3ds-gui + /Applications/lime-qt.app/Contents/MacOS/lime-qt + + diff --git a/resources/systems/macos/es_systems.xml b/resources/systems/macos/es_systems.xml index 359980b3d..3ded71fd7 100644 --- a/resources/systems/macos/es_systems.xml +++ b/resources/systems/macos/es_systems.xml @@ -87,6 +87,7 @@ %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/cap32_libretro.dylib %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/crocods_libretro.dylib %ROM% %STARTDIR%="~/Library/Application Support/CPCemu" %EMULATOR_CPCEMU% %ROM% + %EMULATOR_ACE-DL% %INJECT%=%BASENAME%.commands %ROM% %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/amstradcpc cpc6128 -flop1 %ROM% amstradcpc amstradcpc @@ -100,14 +101,32 @@ android android + + androidapps + Android Apps + %ROMPATH%/androidapps + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + android + androidapps + + + androidgames + Android Games + %ROMPATH%/androidgames + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + android + androidgames + apple2 Apple II %ROMPATH%/apple2 .do .DO .dsk .DSK .nib .NIB .po .PO %EMULATOR_MEDNAFEN% -force_module apple2 %ROM% - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.dylib "apple2e -rompath \"%GAMEDIRRAW%;%ROMPATH%/apple2\" -flop1 \"%ROMRAW%\"" - %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/apple2 apple2e -flop1 %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.dylib "apple2e -rompath \"%GAMEDIRRAW%;%ROMPATH%/apple2\" -gameio joy -flop1 \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/apple2 apple2e -gameio joy -flop1 %ROM% apple2 apple2 @@ -116,8 +135,8 @@ Apple IIGS %ROMPATH%/apple2gs .2mg .2MG .7z .7z .zip .ZIP - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.dylib "apple2gs -rompath \"%GAMEDIRRAW%;%ROMPATH%/apple2gs\" -flop3 \"%ROMRAW%\"" - %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/apple2gs apple2gs -flop3 %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.dylib "apple2gs -rompath \"%GAMEDIRRAW%;%ROMPATH%/apple2gs\" -gameio joy -flop3 \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/apple2gs apple2gs -gameio joy -flop3 %ROM% apple2gs apple2gs @@ -271,7 +290,7 @@ atarixe Atari XE %ROMPATH%/atarixe - .a52 .A52 .atr .ATR .atx .ATX .bin .BIN .cas .CAS .cdm .CDM .xex .XEX .xfd .XFD .7z .7Z .zip .ZIP + .a52 .A52 .atr .ATR .atx .ATX .bin .BIN .car .CAR .cas .CAS .cdm .CDM .xex .XEX .xfd .XFD .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/atari800_libretro.dylib %ROM% %EMULATOR_ATARI800% %ROM% atarixe @@ -293,7 +312,7 @@ Acorn Computers BBC Micro %ROMPATH%/bbcmicro .dsd .DSD .img .IMG .ssd .SSD .7z .7Z .zip .ZIP - %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/bbcmicro bbcb -autoboot_delay "2" -autoboot_command "*cat\n\n*exec !boot\n" -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/bbcmicro bbcb -autoboot_delay "2" -autoboot_command "*cat\n\n*exec !boot\n" -analogue acornjoy -flop1 %ROM% bbcmicro bbcmicro @@ -326,7 +345,7 @@ cdtv Commodore CDTV %ROMPATH%/cdtv - .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .m3u .M3U .mds .MDS .nrg .NRG .rp9 .RP9 .7z .7Z .zip .ZIP + .adf .ADF .adz .ADZ .ccd .CCD .chd .CHD .cue .CUE .dms .DMS .fdi .FDI .hdf .HDF .hdz .HDZ .ipf .IPF .iso .ISO .lha .LHA .m3u .M3U .mds .MDS .nrg .NRG .rp9 .RP9 .uae .UAE .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/puae_libretro.dylib %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/puae2021_libretro.dylib %ROM% %EMULATOR_FS-UAE% --config:amiga-model=CDTV %ROM% @@ -361,6 +380,8 @@ .cas .CAS .ccc .CCC .dsk .DSK .rom .ROM %EMULATOR_XROAR% -fs -default-machine coco2bus %ROM% %EMULATOR_XROAR% -fs -default-machine coco2b %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/coco coco -cart %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/coco coco -autoboot_delay "2" -autoboot_command "cloadm:exec\n" -cass %ROM% coco coco @@ -1142,6 +1163,7 @@ %ROMPATH%/n3ds .3ds .3DS .3dsx .3DSX .app .APP .axf .AXF .cci .CCI .cxi .CXI .elf .ELF .7z .7Z .zip .ZIP %EMULATOR_CITRA% %ROM% + %EMULATOR_LIME3DS% %ROM% %EMULATOR_PANDA3DS% %ROM% n3ds n3ds @@ -1324,6 +1346,7 @@ Tangerine Computer Systems Oric %ROMPATH%/oric .dsk .DSK .ort .ORT .tap .TAP .wav .WAV + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/oric oric1 -autoboot_delay "4" -autoboot_command "cload\"\"\n" -cass %ROM% %STARTDIR%=%EMUDIR% %EMULATOR_ORICUTRON% %ROM% oric oric @@ -2025,7 +2048,7 @@ wiiu Nintendo Wii U %ROMPATH%/wiiu - .rpx .RPX .wua .WUA .wud .WUD .wux .WUX + .elf .ELF .rpx .RPX .tmd .TMD .wua .WUA .wud .WUD .wuhb .WUHB .wux .WUX %EMULATOR_CEMU% -g %ROM% wiiu wiiu @@ -2131,6 +2154,7 @@ Infocom Z-machine %ROMPATH%/zmachine .dat .DAT .z1 .Z1 .z2 .Z2 .z3 .Z3 .z4 .Z4 .z5 .Z5 .z6 .Z6 .z7 .Z7 .z8 .Z8 .zlb .ZLB .zblorb .ZBLORB + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mojozork_libretro.dylib %ROM% %EMULATOR_GARGOYLE% %ROM% zmachine zmachine diff --git a/resources/systems/unix/es_find_rules.xml b/resources/systems/unix/es_find_rules.xml index acff84fc2..73504e25f 100644 --- a/resources/systems/unix/es_find_rules.xml +++ b/resources/systems/unix/es_find_rules.xml @@ -251,6 +251,12 @@ ~/bin/lightspark/lightspark + + + + lime3ds-gui + + diff --git a/resources/systems/unix/es_systems.xml b/resources/systems/unix/es_systems.xml index 7c4d5b6a5..a160aa099 100644 --- a/resources/systems/unix/es_systems.xml +++ b/resources/systems/unix/es_systems.xml @@ -100,6 +100,24 @@ android android + + androidapps + Android Apps + %ROMPATH%/androidapps + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + android + androidapps + + + androidgames + Android Games + %ROMPATH%/androidgames + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + android + androidgames + apple2 Apple II @@ -107,8 +125,8 @@ .do .DO .dsk .DSK .nib .NIB .po .PO %EMULATOR_LINAPPLE% -f -b --d1 %ROM% %EMULATOR_MEDNAFEN% -force_module apple2 %ROM% - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "apple2e -rompath \"%GAMEDIRRAW%;%ROMPATH%/apple2\" -flop1 \"%ROMRAW%\"" - %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/apple2 apple2e -flop1 %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "apple2e -rompath \"%GAMEDIRRAW%;%ROMPATH%/apple2\" -gameio joy -flop1 \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/apple2 apple2e -gameio joy -flop1 %ROM% apple2 apple2 @@ -117,8 +135,8 @@ Apple IIGS %ROMPATH%/apple2gs .2mg .2MG .7z .7z .zip .ZIP - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "apple2gs -rompath \"%GAMEDIRRAW%;%ROMPATH%/apple2gs\" -flop3 \"%ROMRAW%\"" - %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/apple2gs apple2gs -flop3 %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "apple2gs -rompath \"%GAMEDIRRAW%;%ROMPATH%/apple2gs\" -gameio joy -flop3 \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/apple2gs apple2gs -gameio joy -flop3 %ROM% apple2gs apple2gs @@ -275,7 +293,7 @@ atarixe Atari XE %ROMPATH%/atarixe - .a52 .A52 .atr .ATR .atx .ATX .bin .BIN .cas .CAS .cdm .CDM .xex .XEX .xfd .XFD .7z .7Z .zip .ZIP + .a52 .A52 .atr .ATR .atx .ATX .bin .BIN .car .CAR .cas .CAS .cdm .CDM .xex .XEX .xfd .XFD .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/atari800_libretro.so %ROM% %EMULATOR_ATARI800% %ROM% atarixe @@ -297,7 +315,7 @@ Acorn Computers BBC Micro %ROMPATH%/bbcmicro .dsd .DSD .img .IMG .ssd .SSD .7z .7Z .zip .ZIP - %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/bbcmicro bbcb -autoboot_delay "2" -autoboot_command "*cat\n\n*exec !boot\n" -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/bbcmicro bbcb -autoboot_delay "2" -autoboot_command "*cat\n\n*exec !boot\n" -analogue acornjoy -flop1 %ROM% bbcmicro bbcmicro @@ -330,7 +348,7 @@ cdtv Commodore CDTV %ROMPATH%/cdtv - .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .m3u .M3U .mds .MDS .nrg .NRG .rp9 .RP9 .7z .7Z .zip .ZIP + .adf .ADF .adz .ADZ .ccd .CCD .chd .CHD .cue .CUE .dms .DMS .fdi .FDI .hdf .HDF .hdz .HDZ .ipf .IPF .iso .ISO .lha .LHA .m3u .M3U .mds .MDS .nrg .NRG .rp9 .RP9 .uae .UAE .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/puae_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/puae2021_libretro.so %ROM% %EMULATOR_FS-UAE% --config:amiga-model=CDTV %ROM% @@ -365,6 +383,8 @@ .cas .CAS .ccc .CCC .dsk .DSK .rom .ROM %EMULATOR_XROAR% -fs -default-machine coco2bus %ROM% %EMULATOR_XROAR% -fs -default-machine coco2b %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/coco coco -cart %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/coco coco -autoboot_delay "2" -autoboot_command "cloadm:exec\n" -cass %ROM% coco coco @@ -1177,6 +1197,7 @@ %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/citra_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/citra2018_libretro.so %ROM% %EMULATOR_CITRA% %ROM% + %EMULATOR_LIME3DS% %ROM% %EMULATOR_PANDA3DS% %ROM% n3ds n3ds @@ -1368,6 +1389,7 @@ Tangerine Computer Systems Oric %ROMPATH%/oric .dsk .DSK .ort .ORT .tap .TAP .wav .WAV + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/oric oric1 -autoboot_delay "4" -autoboot_command "cload\"\"\n" -cass %ROM% %STARTDIR%=%EMUDIR% %EMULATOR_ORICUTRON% %ROM% oric oric @@ -2097,7 +2119,7 @@ wiiu Nintendo Wii U %ROMPATH%/wiiu - .rpx .RPX .wua .WUA .wud .WUD .wux .WUX + .elf .ELF .rpx .RPX .tmd .TMD .wua .WUA .wud .WUD .wuhb .WUHB .wux .WUX %EMULATOR_CEMU% -g %ROM% wiiu wiiu @@ -2203,6 +2225,7 @@ Infocom Z-machine %ROMPATH%/zmachine .dat .DAT .z1 .Z1 .z2 .Z2 .z3 .Z3 .z4 .Z4 .z5 .Z5 .z6 .Z6 .z7 .Z7 .z8 .Z8 .zlb .ZLB .zblorb .ZBLORB + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mojozork_libretro.so %ROM% %EMULATOR_GARGOYLE% %ROM% zmachine zmachine diff --git a/resources/systems/windows/es_find_rules.xml b/resources/systems/windows/es_find_rules.xml index d441eb8f5..7251a4c5e 100644 --- a/resources/systems/windows/es_find_rules.xml +++ b/resources/systems/windows/es_find_rules.xml @@ -52,6 +52,16 @@ %ESPATH%\..\Emulators\3dSen\3dSen.exe + + + + AceDL.exe + + + %ESPATH%\Emulators\AceDL\AceDL.exe + %ESPATH%\..\Emulators\AceDL\AceDL.exe + + @@ -169,6 +179,16 @@ %ESPATH%\..\Emulators\Citra\canary-mingw\citra-qt.exe + + + + ColEm.exe + + + %ESPATH%\Emulators\ColEm\ColEm.exe + %ESPATH%\..\Emulators\ColEm\ColEm.exe + + @@ -402,6 +422,19 @@ %ESPATH%\..\Emulators\KEmulator\KEmulator.exe + + + + lime3ds-gui.exe + lime-qt.exe + + + %ESPATH%\Emulators\lime3ds\lime3ds-gui.exe + %ESPATH%\..\Emulators\lime3ds\lime3ds-gui.exe + %ESPATH%\Emulators\lime-qt\lime-qt.exe + %ESPATH%\..\Emulators\lime-qt\lime-qt.exe + + @@ -919,6 +952,16 @@ %ESPATH%\..\Emulators\Vita3K\Vita3K.exe + + + + WinArcadia.exe + + + %ESPATH%\Emulators\WinArcadia\WinArcadia.exe + %ESPATH%\..\Emulators\WinArcadia\WinArcadia.exe + + @@ -942,6 +985,16 @@ %ESPATH%\..\Emulators\xenia_canary\xenia_canary.exe + + + + XM6.exe + + + %ESPATH%\Emulators\XM6 Pro-68k\XM6.exe + %ESPATH%\..\Emulators\XM6 Pro-68k\XM6.exe + + diff --git a/resources/systems/windows/es_find_rules_portable.xml b/resources/systems/windows/es_find_rules_portable.xml index a16f8577c..d4f9c609c 100644 --- a/resources/systems/windows/es_find_rules_portable.xml +++ b/resources/systems/windows/es_find_rules_portable.xml @@ -28,6 +28,13 @@ %ESPATH%\..\Emulators\3dSen\3dSen.exe + + + + %ESPATH%\Emulators\AceDL\AceDL.exe + %ESPATH%\..\Emulators\AceDL\AceDL.exe + + @@ -109,6 +116,13 @@ %ESPATH%\..\Emulators\Citra\canary-mingw\citra-qt.exe + + + + %ESPATH%\Emulators\ColEm\ColEm.exe + %ESPATH%\..\Emulators\ColEm\ColEm.exe + + @@ -267,6 +281,15 @@ %ESPATH%\..\Emulators\KEmulator\KEmulator.exe + + + + %ESPATH%\Emulators\lime3ds\lime3ds-gui.exe + %ESPATH%\..\Emulators\lime3ds\lime3ds-gui.exe + %ESPATH%\Emulators\lime-qt\lime-qt.exe + %ESPATH%\..\Emulators\lime-qt\lime-qt.exe + + @@ -614,6 +637,13 @@ %ESPATH%\..\Emulators\Vita3K\Vita3K.exe + + + + %ESPATH%\Emulators\WinArcadia\WinArcadia.exe + %ESPATH%\..\Emulators\WinArcadia\WinArcadia.exe + + @@ -630,6 +660,13 @@ %ESPATH%\..\Emulators\xenia_canary\xenia_canary.exe + + + + %ESPATH%\Emulators\XM6 Pro-68k\XM6.exe + %ESPATH%\..\Emulators\XM6 Pro-68k\XM6.exe + + diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index d7ac8c0b9..ce9d9a3ab 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -19,6 +19,7 @@ %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\adam adam -cass1 %ROM% %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\adam adam -cart1 %ROM% %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\adam adam %BASENAME% + %EMULATOR_COLEM% %INJECT%=%BASENAME%.commands -adam %ROM% adam adam @@ -83,6 +84,7 @@ %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\cap32_libretro.dll %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\crocods_libretro.dll %ROM% %EMULATOR_CPCEMU% %ROM% + %EMULATOR_ACE-DL% %INJECT%=%BASENAME%.commands %ROM% %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\amstradcpc cpc6128 -flop1 %ROM% amstradcpc amstradcpc @@ -96,6 +98,24 @@ android android + + androidapps + Android Apps + %ROMPATH%\androidapps + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + android + androidapps + + + androidgames + Android Games + %ROMPATH%\androidgames + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + android + androidgames + apple2 Apple II @@ -103,8 +123,8 @@ .do .DO .dsk .DSK .nib .NIB .po .PO %EMULATOR_APPLEWIN% -f -d1 %ROM% %EMULATOR_MEDNAFEN% -force_module apple2 %ROM% - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame_libretro.dll "apple2e -rompath \"%GAMEDIRRAW%;%ROMPATH%\apple2\" -flop1 \"%ROMRAW%\"" - %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\apple2 apple2e -flop1 %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame_libretro.dll "apple2e -rompath \"%GAMEDIRRAW%;%ROMPATH%\apple2\" -gameio joy -flop1 \"%ROMRAW%\"" + %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\apple2 apple2e -gameio joy -flop1 %ROM% apple2 apple2 @@ -113,8 +133,8 @@ Apple IIGS %ROMPATH%\apple2gs .2mg .2MG .7z .7z .zip .ZIP - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame_libretro.dll "apple2gs -rompath \"%GAMEDIRRAW%;%ROMPATH%\apple2gs\" -flop3 \"%ROMRAW%\"" - %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\apple2gs apple2gs -flop3 %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame_libretro.dll "apple2gs -rompath \"%GAMEDIRRAW%;%ROMPATH%\apple2gs\" -gameio joy -flop3 \"%ROMRAW%\"" + %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\apple2gs apple2gs -gameio joy -flop3 %ROM% apple2gs apple2gs @@ -151,6 +171,7 @@ .bin .BIN .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame_libretro.dll "arcadia -rompath \"%GAMEDIRRAW%;%ROMPATH%\arcadia\" -cart \"%ROMRAW%\"" %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\arcadia arcadia -cart %ROM% + %EMULATOR_WINARCADIA% %ROM% arcadia arcadia @@ -277,7 +298,7 @@ atarixe Atari XE %ROMPATH%\atarixe - .a52 .A52 .atr .ATR .atx .ATX .bin .BIN .cas .CAS .cdm .CDM .xex .XEX .xfd .XFD .7z .7Z .zip .ZIP + .a52 .A52 .atr .ATR .atx .ATX .bin .BIN .car .CAR .cas .CAS .cdm .CDM .xex .XEX .xfd .XFD .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\atari800_libretro.dll %ROM% %STARTDIR%=%EMUDIR% %EMULATOR_ATARI800% %ROM% %EMULATOR_ALTIRRA% %INJECT%=%BASENAME%.commands %ROM% @@ -301,7 +322,7 @@ Acorn Computers BBC Micro %ROMPATH%\bbcmicro .dsd .DSD .img .IMG .ssd .SSD .7z .7Z .zip .ZIP - %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\bbcmicro bbcb -autoboot_delay "2" -autoboot_command "*cat\n\n*exec !boot\n" -flop1 %ROM% + %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\bbcmicro bbcb -autoboot_delay "2" -autoboot_command "*cat\n\n*exec !boot\n" -analogue acornjoy -flop1 %ROM% bbcmicro bbcmicro @@ -334,7 +355,7 @@ cdtv Commodore CDTV %ROMPATH%\cdtv - .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .m3u .M3U .mds .MDS .nrg .NRG .rp9 .RP9 .7z .7Z .zip .ZIP + .adf .ADF .adz .ADZ .ccd .CCD .chd .CHD .cue .CUE .dms .DMS .fdi .FDI .hdf .HDF .hdz .HDZ .ipf .IPF .iso .ISO .lha .LHA .m3u .M3U .mds .MDS .nrg .NRG .rp9 .RP9 .uae .UAE .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\puae_libretro.dll %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\puae2021_libretro.dll %ROM% %EMULATOR_FS-UAE% --config:amiga-model=CDTV %ROM% @@ -368,6 +389,8 @@ .cas .CAS .ccc .CCC .dsk .DSK .rom .ROM %STARTDIR%=%EMUDIR% %EMULATOR_XROAR% -fs -default-machine coco2bus %ROM% %STARTDIR%=%EMUDIR% %EMULATOR_XROAR% -fs -default-machine coco2b %ROM% + %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\coco coco -cart %ROM% + %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\coco coco -autoboot_delay "2" -autoboot_command "cloadm:exec\n" -cass %ROM% coco coco @@ -380,6 +403,7 @@ %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\gearcoleco_libretro.dll %ROM% %EMULATOR_OPENMSX% -machine ColecoVision_SGM %INJECT%=%BASENAME%.commands -cart %ROM% %EMULATOR_ARES% --fullscreen --system "ColecoVision" %ROM% + %EMULATOR_COLEM% %INJECT%=%BASENAME%.commands -cv %ROM% colecovision colecovision @@ -1187,6 +1211,7 @@ %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\citra_libretro.dll %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\citra2018_libretro.dll %ROM% %EMULATOR_CITRA% %ROM% + %EMULATOR_LIME3DS% %ROM% %EMULATOR_PANDA3DS% %ROM% n3ds n3ds @@ -1378,6 +1403,7 @@ Tangerine Computer Systems Oric %ROMPATH%\oric .dsk .DSK .ort .ORT .tap .TAP .wav .WAV + %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\oric oric1 -autoboot_delay "4" -autoboot_command "cload\"\"\n" -cass %ROM% %STARTDIR%=%EMUDIR% %EMULATOR_ORICUTRON% %ROM% oric oric @@ -2111,7 +2137,7 @@ wiiu Nintendo Wii U %ROMPATH%\wiiu - .rpx .RPX .wua .WUA .wud .WUD .wux .WUX + .elf .ELF .rpx .RPX .tmd .TMD .wua .WUA .wud .WUD .wuhb .WUHB .wux .WUX %EMULATOR_CEMU% -f -g %ROM% wiiu wiiu @@ -2191,6 +2217,7 @@ .2hd .2HD .88d .88D .cmd .CMD .d88 .D88 .dim .DIM .dup .DUP .hdf .HDF .hdm .HDM .img .IMG .m3u .M3U .xdf .XDF .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\px68k_libretro.dll %ROM% %HIDEWINDOW% %STARTDIR%=%EMUDIR% %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%\x68000 x68000 -flop1 %ROM% + %STARTDIR%=%EMUDIR% %EMULATOR_XM6PRO68K% %ROM% x68000 x68000 @@ -2218,6 +2245,7 @@ Infocom Z-machine %ROMPATH%\zmachine .dat .DAT .z1 .Z1 .z2 .Z2 .z3 .Z3 .z4 .Z4 .z5 .Z5 .z6 .Z6 .z7 .Z7 .z8 .Z8 .zlb .ZLB .zblorb .ZBLORB + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mojozork_libretro.dll %ROM% %STARTDIR%=%EMUDIR% %EMULATOR_GARGOYLE% %ROM% zmachine zmachine diff --git a/themes/linear-es-de/capabilities.xml b/themes/linear-es-de/capabilities.xml index 53aa8e1b5..993ba0058 100644 --- a/themes/linear-es-de/capabilities.xml +++ b/themes/linear-es-de/capabilities.xml @@ -70,6 +70,8 @@ slide instant slide + slide + slide @@ -86,7 +88,7 @@ true - fade + instant fade fade fade diff --git a/themes/linear-es-de/system/logos/androidapps.svg b/themes/linear-es-de/system/logos/androidapps.svg new file mode 100644 index 000000000..d2cefdd17 --- /dev/null +++ b/themes/linear-es-de/system/logos/androidapps.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/androidgames.svg b/themes/linear-es-de/system/logos/androidgames.svg new file mode 100644 index 000000000..59a15b5e2 --- /dev/null +++ b/themes/linear-es-de/system/logos/androidgames.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/systemart/androidapps.webp b/themes/linear-es-de/system/systemart/androidapps.webp new file mode 100644 index 000000000..36a39ac62 Binary files /dev/null and b/themes/linear-es-de/system/systemart/androidapps.webp differ diff --git a/themes/linear-es-de/system/systemart/androidgames.webp b/themes/linear-es-de/system/systemart/androidgames.webp new file mode 100644 index 000000000..d2f994381 Binary files /dev/null and b/themes/linear-es-de/system/systemart/androidgames.webp differ diff --git a/themes/modern-es-de/art/3do.jpg b/themes/modern-es-de/art/3do.jpg deleted file mode 100644 index 265a80753..000000000 Binary files a/themes/modern-es-de/art/3do.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/3do.webp b/themes/modern-es-de/art/3do.webp new file mode 100644 index 000000000..200cc2872 Binary files /dev/null and b/themes/modern-es-de/art/3do.webp differ diff --git a/themes/modern-es-de/art/adam.jpg b/themes/modern-es-de/art/adam.jpg deleted file mode 100644 index 25259f870..000000000 Binary files a/themes/modern-es-de/art/adam.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/adam.webp b/themes/modern-es-de/art/adam.webp new file mode 100644 index 000000000..fa147ca77 Binary files /dev/null and b/themes/modern-es-de/art/adam.webp differ diff --git a/themes/modern-es-de/art/ags.jpg b/themes/modern-es-de/art/ags.jpg deleted file mode 100644 index 839373706..000000000 Binary files a/themes/modern-es-de/art/ags.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/ags.webp b/themes/modern-es-de/art/ags.webp new file mode 100644 index 000000000..feef199bc Binary files /dev/null and b/themes/modern-es-de/art/ags.webp differ diff --git a/themes/modern-es-de/art/amiga.jpg b/themes/modern-es-de/art/amiga.jpg deleted file mode 100644 index d47ec3fc1..000000000 Binary files a/themes/modern-es-de/art/amiga.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/amiga.webp b/themes/modern-es-de/art/amiga.webp new file mode 100644 index 000000000..4ce0b5f56 Binary files /dev/null and b/themes/modern-es-de/art/amiga.webp differ diff --git a/themes/modern-es-de/art/amiga1200.jpg b/themes/modern-es-de/art/amiga1200.jpg deleted file mode 100644 index 85ca58598..000000000 Binary files a/themes/modern-es-de/art/amiga1200.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/amiga1200.webp b/themes/modern-es-de/art/amiga1200.webp new file mode 100644 index 000000000..8ce177976 Binary files /dev/null and b/themes/modern-es-de/art/amiga1200.webp differ diff --git a/themes/modern-es-de/art/amiga600.jpg b/themes/modern-es-de/art/amiga600.jpg deleted file mode 100644 index dda2f272b..000000000 Binary files a/themes/modern-es-de/art/amiga600.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/amiga600.webp b/themes/modern-es-de/art/amiga600.webp new file mode 100644 index 000000000..6e585166d Binary files /dev/null and b/themes/modern-es-de/art/amiga600.webp differ diff --git a/themes/modern-es-de/art/amigacd32.jpg b/themes/modern-es-de/art/amigacd32.jpg deleted file mode 100644 index 1a5758237..000000000 Binary files a/themes/modern-es-de/art/amigacd32.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/amigacd32.webp b/themes/modern-es-de/art/amigacd32.webp new file mode 100644 index 000000000..194efc185 Binary files /dev/null and b/themes/modern-es-de/art/amigacd32.webp differ diff --git a/themes/modern-es-de/art/amstradcpc.jpg b/themes/modern-es-de/art/amstradcpc.jpg deleted file mode 100644 index a55454d3a..000000000 Binary files a/themes/modern-es-de/art/amstradcpc.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/amstradcpc.webp b/themes/modern-es-de/art/amstradcpc.webp new file mode 100644 index 000000000..0d9e7c17c Binary files /dev/null and b/themes/modern-es-de/art/amstradcpc.webp differ diff --git a/themes/modern-es-de/art/android.jpg b/themes/modern-es-de/art/android.jpg deleted file mode 100644 index ae8637361..000000000 Binary files a/themes/modern-es-de/art/android.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/android.webp b/themes/modern-es-de/art/android.webp new file mode 100644 index 000000000..17032e4d9 Binary files /dev/null and b/themes/modern-es-de/art/android.webp differ diff --git a/themes/modern-es-de/art/androidapps.webp b/themes/modern-es-de/art/androidapps.webp new file mode 100644 index 000000000..4fa1cbe84 Binary files /dev/null and b/themes/modern-es-de/art/androidapps.webp differ diff --git a/themes/modern-es-de/art/androidgames.webp b/themes/modern-es-de/art/androidgames.webp new file mode 100644 index 000000000..658817619 Binary files /dev/null and b/themes/modern-es-de/art/androidgames.webp differ diff --git a/themes/modern-es-de/art/apple2.jpg b/themes/modern-es-de/art/apple2.jpg deleted file mode 100644 index e44eb3dff..000000000 Binary files a/themes/modern-es-de/art/apple2.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/apple2.webp b/themes/modern-es-de/art/apple2.webp new file mode 100644 index 000000000..6b832107f Binary files /dev/null and b/themes/modern-es-de/art/apple2.webp differ diff --git a/themes/modern-es-de/art/apple2gs.jpg b/themes/modern-es-de/art/apple2gs.jpg deleted file mode 100644 index dc631b7aa..000000000 Binary files a/themes/modern-es-de/art/apple2gs.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/apple2gs.webp b/themes/modern-es-de/art/apple2gs.webp new file mode 100644 index 000000000..be45aefc3 Binary files /dev/null and b/themes/modern-es-de/art/apple2gs.webp differ diff --git a/themes/modern-es-de/art/arcade.jpg b/themes/modern-es-de/art/arcade.jpg deleted file mode 100644 index 3aed26c38..000000000 Binary files a/themes/modern-es-de/art/arcade.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/arcade.webp b/themes/modern-es-de/art/arcade.webp new file mode 100644 index 000000000..e77ef13e3 Binary files /dev/null and b/themes/modern-es-de/art/arcade.webp differ diff --git a/themes/modern-es-de/art/arcadia.jpg b/themes/modern-es-de/art/arcadia.jpg deleted file mode 100644 index d4f95ae68..000000000 Binary files a/themes/modern-es-de/art/arcadia.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/arcadia.webp b/themes/modern-es-de/art/arcadia.webp new file mode 100644 index 000000000..0ec248151 Binary files /dev/null and b/themes/modern-es-de/art/arcadia.webp differ diff --git a/themes/modern-es-de/art/archimedes.jpg b/themes/modern-es-de/art/archimedes.jpg deleted file mode 100644 index a1e7b234b..000000000 Binary files a/themes/modern-es-de/art/archimedes.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/archimedes.webp b/themes/modern-es-de/art/archimedes.webp new file mode 100644 index 000000000..002d75ca3 Binary files /dev/null and b/themes/modern-es-de/art/archimedes.webp differ diff --git a/themes/modern-es-de/art/arduboy.jpg b/themes/modern-es-de/art/arduboy.jpg deleted file mode 100644 index 79e219987..000000000 Binary files a/themes/modern-es-de/art/arduboy.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/arduboy.webp b/themes/modern-es-de/art/arduboy.webp new file mode 100644 index 000000000..f221ec74a Binary files /dev/null and b/themes/modern-es-de/art/arduboy.webp differ diff --git a/themes/modern-es-de/art/astrocade.jpg b/themes/modern-es-de/art/astrocade.jpg deleted file mode 100644 index 916f9cd25..000000000 Binary files a/themes/modern-es-de/art/astrocade.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/astrocade.webp b/themes/modern-es-de/art/astrocade.webp new file mode 100644 index 000000000..b7802988b Binary files /dev/null and b/themes/modern-es-de/art/astrocade.webp differ diff --git a/themes/modern-es-de/art/atari2600.jpg b/themes/modern-es-de/art/atari2600.jpg deleted file mode 100644 index f8cbfc2cf..000000000 Binary files a/themes/modern-es-de/art/atari2600.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/atari2600.webp b/themes/modern-es-de/art/atari2600.webp new file mode 100644 index 000000000..d1109f167 Binary files /dev/null and b/themes/modern-es-de/art/atari2600.webp differ diff --git a/themes/modern-es-de/art/atari5200.jpg b/themes/modern-es-de/art/atari5200.jpg deleted file mode 100644 index 74a2b1683..000000000 Binary files a/themes/modern-es-de/art/atari5200.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/atari5200.webp b/themes/modern-es-de/art/atari5200.webp new file mode 100644 index 000000000..0cda520e2 Binary files /dev/null and b/themes/modern-es-de/art/atari5200.webp differ diff --git a/themes/modern-es-de/art/atari7800.jpg b/themes/modern-es-de/art/atari7800.jpg deleted file mode 100644 index 6fb3f1f80..000000000 Binary files a/themes/modern-es-de/art/atari7800.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/atari7800.webp b/themes/modern-es-de/art/atari7800.webp new file mode 100644 index 000000000..ed13b6fa2 Binary files /dev/null and b/themes/modern-es-de/art/atari7800.webp differ diff --git a/themes/modern-es-de/art/atari800.jpg b/themes/modern-es-de/art/atari800.jpg deleted file mode 100644 index c608bc35b..000000000 Binary files a/themes/modern-es-de/art/atari800.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/atari800.webp b/themes/modern-es-de/art/atari800.webp new file mode 100644 index 000000000..0c0c23842 Binary files /dev/null and b/themes/modern-es-de/art/atari800.webp differ diff --git a/themes/modern-es-de/art/atarijaguar.jpg b/themes/modern-es-de/art/atarijaguar.jpg deleted file mode 100644 index 51bdf9228..000000000 Binary files a/themes/modern-es-de/art/atarijaguar.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/atarijaguar.webp b/themes/modern-es-de/art/atarijaguar.webp new file mode 100644 index 000000000..b48e26f33 Binary files /dev/null and b/themes/modern-es-de/art/atarijaguar.webp differ diff --git a/themes/modern-es-de/art/atarijaguarcd.jpg b/themes/modern-es-de/art/atarijaguarcd.jpg deleted file mode 100644 index 64c022f56..000000000 Binary files a/themes/modern-es-de/art/atarijaguarcd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/atarijaguarcd.webp b/themes/modern-es-de/art/atarijaguarcd.webp new file mode 100644 index 000000000..6fabd3638 Binary files /dev/null and b/themes/modern-es-de/art/atarijaguarcd.webp differ diff --git a/themes/modern-es-de/art/atarilynx.jpg b/themes/modern-es-de/art/atarilynx.jpg deleted file mode 100644 index 77761d59d..000000000 Binary files a/themes/modern-es-de/art/atarilynx.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/atarilynx.webp b/themes/modern-es-de/art/atarilynx.webp new file mode 100644 index 000000000..96ad5ee1c Binary files /dev/null and b/themes/modern-es-de/art/atarilynx.webp differ diff --git a/themes/modern-es-de/art/atarist.jpg b/themes/modern-es-de/art/atarist.jpg deleted file mode 100644 index ef3e064ec..000000000 Binary files a/themes/modern-es-de/art/atarist.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/atarist.webp b/themes/modern-es-de/art/atarist.webp new file mode 100644 index 000000000..a452d00bd Binary files /dev/null and b/themes/modern-es-de/art/atarist.webp differ diff --git a/themes/modern-es-de/art/atarixe.jpg b/themes/modern-es-de/art/atarixe.jpg deleted file mode 100644 index e27bd434e..000000000 Binary files a/themes/modern-es-de/art/atarixe.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/atarixe.webp b/themes/modern-es-de/art/atarixe.webp new file mode 100644 index 000000000..17b8ddb9a Binary files /dev/null and b/themes/modern-es-de/art/atarixe.webp differ diff --git a/themes/modern-es-de/art/atomiswave.jpg b/themes/modern-es-de/art/atomiswave.jpg deleted file mode 100644 index 5500f6e17..000000000 Binary files a/themes/modern-es-de/art/atomiswave.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/atomiswave.webp b/themes/modern-es-de/art/atomiswave.webp new file mode 100644 index 000000000..833f9bfb4 Binary files /dev/null and b/themes/modern-es-de/art/atomiswave.webp differ diff --git a/themes/modern-es-de/art/auto-allgames.jpg b/themes/modern-es-de/art/auto-allgames.jpg deleted file mode 100644 index 918dc3ddb..000000000 Binary files a/themes/modern-es-de/art/auto-allgames.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/auto-allgames.webp b/themes/modern-es-de/art/auto-allgames.webp new file mode 100644 index 000000000..460b2d824 Binary files /dev/null and b/themes/modern-es-de/art/auto-allgames.webp differ diff --git a/themes/modern-es-de/art/auto-favorites.jpg b/themes/modern-es-de/art/auto-favorites.jpg deleted file mode 100644 index 6f77cda93..000000000 Binary files a/themes/modern-es-de/art/auto-favorites.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/auto-favorites.webp b/themes/modern-es-de/art/auto-favorites.webp new file mode 100644 index 000000000..2a1263a2c Binary files /dev/null and b/themes/modern-es-de/art/auto-favorites.webp differ diff --git a/themes/modern-es-de/art/auto-lastplayed.jpg b/themes/modern-es-de/art/auto-lastplayed.jpg deleted file mode 100644 index 8c76a52b0..000000000 Binary files a/themes/modern-es-de/art/auto-lastplayed.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/auto-lastplayed.webp b/themes/modern-es-de/art/auto-lastplayed.webp new file mode 100644 index 000000000..132bf90ba Binary files /dev/null and b/themes/modern-es-de/art/auto-lastplayed.webp differ diff --git a/themes/modern-es-de/art/bbcmicro.jpg b/themes/modern-es-de/art/bbcmicro.jpg deleted file mode 100644 index 7c0c598c6..000000000 Binary files a/themes/modern-es-de/art/bbcmicro.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/bbcmicro.webp b/themes/modern-es-de/art/bbcmicro.webp new file mode 100644 index 000000000..7d86e4233 Binary files /dev/null and b/themes/modern-es-de/art/bbcmicro.webp differ diff --git a/themes/modern-es-de/art/c64.jpg b/themes/modern-es-de/art/c64.jpg deleted file mode 100644 index f2405d2d1..000000000 Binary files a/themes/modern-es-de/art/c64.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/c64.webp b/themes/modern-es-de/art/c64.webp new file mode 100644 index 000000000..660a90700 Binary files /dev/null and b/themes/modern-es-de/art/c64.webp differ diff --git a/themes/modern-es-de/art/cavestory.jpg b/themes/modern-es-de/art/cavestory.jpg deleted file mode 100644 index 42ebbc6f2..000000000 Binary files a/themes/modern-es-de/art/cavestory.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/cavestory.webp b/themes/modern-es-de/art/cavestory.webp new file mode 100644 index 000000000..06ed6dabf Binary files /dev/null and b/themes/modern-es-de/art/cavestory.webp differ diff --git a/themes/modern-es-de/art/cdimono1.jpg b/themes/modern-es-de/art/cdimono1.jpg deleted file mode 100644 index 3ff9d2ab1..000000000 Binary files a/themes/modern-es-de/art/cdimono1.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/cdimono1.webp b/themes/modern-es-de/art/cdimono1.webp new file mode 100644 index 000000000..f8e7ae99c Binary files /dev/null and b/themes/modern-es-de/art/cdimono1.webp differ diff --git a/themes/modern-es-de/art/cdtv.jpg b/themes/modern-es-de/art/cdtv.jpg deleted file mode 100644 index 518cc8211..000000000 Binary files a/themes/modern-es-de/art/cdtv.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/cdtv.webp b/themes/modern-es-de/art/cdtv.webp new file mode 100644 index 000000000..d2714dda1 Binary files /dev/null and b/themes/modern-es-de/art/cdtv.webp differ diff --git a/themes/modern-es-de/art/chailove.jpg b/themes/modern-es-de/art/chailove.jpg deleted file mode 100644 index f6d2cde8c..000000000 Binary files a/themes/modern-es-de/art/chailove.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/chailove.webp b/themes/modern-es-de/art/chailove.webp new file mode 100644 index 000000000..7ccb1685d Binary files /dev/null and b/themes/modern-es-de/art/chailove.webp differ diff --git a/themes/modern-es-de/art/channelf.jpg b/themes/modern-es-de/art/channelf.jpg deleted file mode 100644 index daf69ceee..000000000 Binary files a/themes/modern-es-de/art/channelf.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/channelf.webp b/themes/modern-es-de/art/channelf.webp new file mode 100644 index 000000000..a5e5f532b Binary files /dev/null and b/themes/modern-es-de/art/channelf.webp differ diff --git a/themes/modern-es-de/art/coco.jpg b/themes/modern-es-de/art/coco.jpg deleted file mode 100644 index d1e77c18f..000000000 Binary files a/themes/modern-es-de/art/coco.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/coco.webp b/themes/modern-es-de/art/coco.webp new file mode 100644 index 000000000..3e5e0029a Binary files /dev/null and b/themes/modern-es-de/art/coco.webp differ diff --git a/themes/modern-es-de/art/colecovision.jpg b/themes/modern-es-de/art/colecovision.jpg deleted file mode 100644 index 9b54508eb..000000000 Binary files a/themes/modern-es-de/art/colecovision.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/colecovision.webp b/themes/modern-es-de/art/colecovision.webp new file mode 100644 index 000000000..e7960f887 Binary files /dev/null and b/themes/modern-es-de/art/colecovision.webp differ diff --git a/themes/modern-es-de/art/consolearcade.jpg b/themes/modern-es-de/art/consolearcade.jpg deleted file mode 100644 index 8e9e8a382..000000000 Binary files a/themes/modern-es-de/art/consolearcade.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/consolearcade.webp b/themes/modern-es-de/art/consolearcade.webp new file mode 100644 index 000000000..6e836febb Binary files /dev/null and b/themes/modern-es-de/art/consolearcade.webp differ diff --git a/themes/modern-es-de/art/cps.jpg b/themes/modern-es-de/art/cps.jpg deleted file mode 100644 index 73474d299..000000000 Binary files a/themes/modern-es-de/art/cps.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/cps.webp b/themes/modern-es-de/art/cps.webp new file mode 100644 index 000000000..4a53895bb Binary files /dev/null and b/themes/modern-es-de/art/cps.webp differ diff --git a/themes/modern-es-de/art/cps1.jpg b/themes/modern-es-de/art/cps1.jpg deleted file mode 100644 index 7b897619a..000000000 Binary files a/themes/modern-es-de/art/cps1.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/cps1.webp b/themes/modern-es-de/art/cps1.webp new file mode 100644 index 000000000..fd972e247 Binary files /dev/null and b/themes/modern-es-de/art/cps1.webp differ diff --git a/themes/modern-es-de/art/cps2.jpg b/themes/modern-es-de/art/cps2.jpg deleted file mode 100644 index 5c7221cd4..000000000 Binary files a/themes/modern-es-de/art/cps2.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/cps2.webp b/themes/modern-es-de/art/cps2.webp new file mode 100644 index 000000000..5c36ca318 Binary files /dev/null and b/themes/modern-es-de/art/cps2.webp differ diff --git a/themes/modern-es-de/art/cps3.jpg b/themes/modern-es-de/art/cps3.jpg deleted file mode 100644 index c4e09de05..000000000 Binary files a/themes/modern-es-de/art/cps3.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/cps3.webp b/themes/modern-es-de/art/cps3.webp new file mode 100644 index 000000000..193b2c378 Binary files /dev/null and b/themes/modern-es-de/art/cps3.webp differ diff --git a/themes/modern-es-de/art/crvision.jpg b/themes/modern-es-de/art/crvision.jpg deleted file mode 100644 index af13574c4..000000000 Binary files a/themes/modern-es-de/art/crvision.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/crvision.webp b/themes/modern-es-de/art/crvision.webp new file mode 100644 index 000000000..c0c63f9be Binary files /dev/null and b/themes/modern-es-de/art/crvision.webp differ diff --git a/themes/modern-es-de/art/custom-collections.jpg b/themes/modern-es-de/art/custom-collections.jpg deleted file mode 100644 index d7f85f4ed..000000000 Binary files a/themes/modern-es-de/art/custom-collections.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/custom-collections.webp b/themes/modern-es-de/art/custom-collections.webp new file mode 100644 index 000000000..9fb29935f Binary files /dev/null and b/themes/modern-es-de/art/custom-collections.webp differ diff --git a/themes/modern-es-de/art/daphne.jpg b/themes/modern-es-de/art/daphne.jpg deleted file mode 100644 index ccb719a39..000000000 Binary files a/themes/modern-es-de/art/daphne.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/daphne.webp b/themes/modern-es-de/art/daphne.webp new file mode 100644 index 000000000..bb2aaeed1 Binary files /dev/null and b/themes/modern-es-de/art/daphne.webp differ diff --git a/themes/modern-es-de/art/desktop.jpg b/themes/modern-es-de/art/desktop.jpg deleted file mode 100644 index 681fb92b9..000000000 Binary files a/themes/modern-es-de/art/desktop.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/desktop.webp b/themes/modern-es-de/art/desktop.webp new file mode 100644 index 000000000..f525d1f35 Binary files /dev/null and b/themes/modern-es-de/art/desktop.webp differ diff --git a/themes/modern-es-de/art/doom.jpg b/themes/modern-es-de/art/doom.jpg deleted file mode 100644 index ef3fec042..000000000 Binary files a/themes/modern-es-de/art/doom.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/doom.webp b/themes/modern-es-de/art/doom.webp new file mode 100644 index 000000000..3e5f93af8 Binary files /dev/null and b/themes/modern-es-de/art/doom.webp differ diff --git a/themes/modern-es-de/art/dos.jpg b/themes/modern-es-de/art/dos.jpg deleted file mode 100644 index 7dfcfcd7f..000000000 Binary files a/themes/modern-es-de/art/dos.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/dos.webp b/themes/modern-es-de/art/dos.webp new file mode 100644 index 000000000..4a98de834 Binary files /dev/null and b/themes/modern-es-de/art/dos.webp differ diff --git a/themes/modern-es-de/art/dragon32.jpg b/themes/modern-es-de/art/dragon32.jpg deleted file mode 100644 index eb412c794..000000000 Binary files a/themes/modern-es-de/art/dragon32.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/dragon32.webp b/themes/modern-es-de/art/dragon32.webp new file mode 100644 index 000000000..9bb7f96b0 Binary files /dev/null and b/themes/modern-es-de/art/dragon32.webp differ diff --git a/themes/modern-es-de/art/dreamcast.jpg b/themes/modern-es-de/art/dreamcast.jpg deleted file mode 100644 index 437cf12c3..000000000 Binary files a/themes/modern-es-de/art/dreamcast.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/dreamcast.webp b/themes/modern-es-de/art/dreamcast.webp new file mode 100644 index 000000000..6b64bb903 Binary files /dev/null and b/themes/modern-es-de/art/dreamcast.webp differ diff --git a/themes/modern-es-de/art/easyrpg.jpg b/themes/modern-es-de/art/easyrpg.jpg deleted file mode 100644 index 25d1e889d..000000000 Binary files a/themes/modern-es-de/art/easyrpg.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/easyrpg.webp b/themes/modern-es-de/art/easyrpg.webp new file mode 100644 index 000000000..0345cd562 Binary files /dev/null and b/themes/modern-es-de/art/easyrpg.webp differ diff --git a/themes/modern-es-de/art/electron.jpg b/themes/modern-es-de/art/electron.jpg deleted file mode 100644 index 2b325c252..000000000 Binary files a/themes/modern-es-de/art/electron.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/electron.webp b/themes/modern-es-de/art/electron.webp new file mode 100644 index 000000000..3dd7d26d1 Binary files /dev/null and b/themes/modern-es-de/art/electron.webp differ diff --git a/themes/modern-es-de/art/emulators.jpg b/themes/modern-es-de/art/emulators.jpg deleted file mode 100644 index 79205d8a3..000000000 Binary files a/themes/modern-es-de/art/emulators.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/emulators.webp b/themes/modern-es-de/art/emulators.webp new file mode 100644 index 000000000..5a1ff931a Binary files /dev/null and b/themes/modern-es-de/art/emulators.webp differ diff --git a/themes/modern-es-de/art/epic.jpg b/themes/modern-es-de/art/epic.jpg deleted file mode 100644 index a75028ffb..000000000 Binary files a/themes/modern-es-de/art/epic.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/epic.webp b/themes/modern-es-de/art/epic.webp new file mode 100644 index 000000000..090937add Binary files /dev/null and b/themes/modern-es-de/art/epic.webp differ diff --git a/themes/modern-es-de/art/famicom.jpg b/themes/modern-es-de/art/famicom.jpg deleted file mode 100644 index c3e411f61..000000000 Binary files a/themes/modern-es-de/art/famicom.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/famicom.webp b/themes/modern-es-de/art/famicom.webp new file mode 100644 index 000000000..e452b7b84 Binary files /dev/null and b/themes/modern-es-de/art/famicom.webp differ diff --git a/themes/modern-es-de/art/fba.jpg b/themes/modern-es-de/art/fba.jpg deleted file mode 100644 index 355c7635d..000000000 Binary files a/themes/modern-es-de/art/fba.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/fba.webp b/themes/modern-es-de/art/fba.webp new file mode 100644 index 000000000..8a21dd32d Binary files /dev/null and b/themes/modern-es-de/art/fba.webp differ diff --git a/themes/modern-es-de/art/fbneo.jpg b/themes/modern-es-de/art/fbneo.jpg deleted file mode 100644 index 561673db3..000000000 Binary files a/themes/modern-es-de/art/fbneo.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/fbneo.webp b/themes/modern-es-de/art/fbneo.webp new file mode 100644 index 000000000..f9e1b8b03 Binary files /dev/null and b/themes/modern-es-de/art/fbneo.webp differ diff --git a/themes/modern-es-de/art/fds.jpg b/themes/modern-es-de/art/fds.jpg deleted file mode 100644 index bbe66557a..000000000 Binary files a/themes/modern-es-de/art/fds.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/fds.webp b/themes/modern-es-de/art/fds.webp new file mode 100644 index 000000000..6790cd836 Binary files /dev/null and b/themes/modern-es-de/art/fds.webp differ diff --git a/themes/modern-es-de/art/flash.jpg b/themes/modern-es-de/art/flash.jpg deleted file mode 100644 index 178199f9a..000000000 Binary files a/themes/modern-es-de/art/flash.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/flash.webp b/themes/modern-es-de/art/flash.webp new file mode 100644 index 000000000..f64726f01 Binary files /dev/null and b/themes/modern-es-de/art/flash.webp differ diff --git a/themes/modern-es-de/art/fm7.jpg b/themes/modern-es-de/art/fm7.jpg deleted file mode 100644 index ba1b91819..000000000 Binary files a/themes/modern-es-de/art/fm7.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/fm7.webp b/themes/modern-es-de/art/fm7.webp new file mode 100644 index 000000000..13f80e054 Binary files /dev/null and b/themes/modern-es-de/art/fm7.webp differ diff --git a/themes/modern-es-de/art/fmtowns.jpg b/themes/modern-es-de/art/fmtowns.jpg deleted file mode 100644 index 275577d98..000000000 Binary files a/themes/modern-es-de/art/fmtowns.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/fmtowns.webp b/themes/modern-es-de/art/fmtowns.webp new file mode 100644 index 000000000..3694211cd Binary files /dev/null and b/themes/modern-es-de/art/fmtowns.webp differ diff --git a/themes/modern-es-de/art/fpinball.jpg b/themes/modern-es-de/art/fpinball.jpg deleted file mode 100644 index b3cb41f19..000000000 Binary files a/themes/modern-es-de/art/fpinball.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/fpinball.webp b/themes/modern-es-de/art/fpinball.webp new file mode 100644 index 000000000..12248f5d2 Binary files /dev/null and b/themes/modern-es-de/art/fpinball.webp differ diff --git a/themes/modern-es-de/art/gamate.jpg b/themes/modern-es-de/art/gamate.jpg deleted file mode 100644 index 760da9645..000000000 Binary files a/themes/modern-es-de/art/gamate.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/gamate.webp b/themes/modern-es-de/art/gamate.webp new file mode 100644 index 000000000..408afc044 Binary files /dev/null and b/themes/modern-es-de/art/gamate.webp differ diff --git a/themes/modern-es-de/art/gameandwatch.jpg b/themes/modern-es-de/art/gameandwatch.jpg deleted file mode 100644 index 21d59c580..000000000 Binary files a/themes/modern-es-de/art/gameandwatch.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/gameandwatch.webp b/themes/modern-es-de/art/gameandwatch.webp new file mode 100644 index 000000000..6aa14e3e6 Binary files /dev/null and b/themes/modern-es-de/art/gameandwatch.webp differ diff --git a/themes/modern-es-de/art/gamecom.jpg b/themes/modern-es-de/art/gamecom.jpg deleted file mode 100644 index 8afeafbd7..000000000 Binary files a/themes/modern-es-de/art/gamecom.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/gamecom.webp b/themes/modern-es-de/art/gamecom.webp new file mode 100644 index 000000000..eca3db854 Binary files /dev/null and b/themes/modern-es-de/art/gamecom.webp differ diff --git a/themes/modern-es-de/art/gamegear.jpg b/themes/modern-es-de/art/gamegear.jpg deleted file mode 100644 index 740284a2f..000000000 Binary files a/themes/modern-es-de/art/gamegear.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/gamegear.webp b/themes/modern-es-de/art/gamegear.webp new file mode 100644 index 000000000..410edbdf2 Binary files /dev/null and b/themes/modern-es-de/art/gamegear.webp differ diff --git a/themes/modern-es-de/art/gb.jpg b/themes/modern-es-de/art/gb.jpg deleted file mode 100644 index 575fccbce..000000000 Binary files a/themes/modern-es-de/art/gb.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/gb.webp b/themes/modern-es-de/art/gb.webp new file mode 100644 index 000000000..42f59f7a5 Binary files /dev/null and b/themes/modern-es-de/art/gb.webp differ diff --git a/themes/modern-es-de/art/gba.jpg b/themes/modern-es-de/art/gba.jpg deleted file mode 100644 index a4b0647fb..000000000 Binary files a/themes/modern-es-de/art/gba.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/gba.webp b/themes/modern-es-de/art/gba.webp new file mode 100644 index 000000000..a357761b6 Binary files /dev/null and b/themes/modern-es-de/art/gba.webp differ diff --git a/themes/modern-es-de/art/gbc.jpg b/themes/modern-es-de/art/gbc.jpg deleted file mode 100644 index 78026f2c0..000000000 Binary files a/themes/modern-es-de/art/gbc.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/gbc.webp b/themes/modern-es-de/art/gbc.webp new file mode 100644 index 000000000..a48bdc9d7 Binary files /dev/null and b/themes/modern-es-de/art/gbc.webp differ diff --git a/themes/modern-es-de/art/gc.jpg b/themes/modern-es-de/art/gc.jpg deleted file mode 100644 index 4dd0d29cb..000000000 Binary files a/themes/modern-es-de/art/gc.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/gc.webp b/themes/modern-es-de/art/gc.webp new file mode 100644 index 000000000..5bbd8af70 Binary files /dev/null and b/themes/modern-es-de/art/gc.webp differ diff --git a/themes/modern-es-de/art/genesis.jpg b/themes/modern-es-de/art/genesis.jpg deleted file mode 100644 index f5099ab92..000000000 Binary files a/themes/modern-es-de/art/genesis.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/genesis.webp b/themes/modern-es-de/art/genesis.webp new file mode 100644 index 000000000..1ba33f7e1 Binary files /dev/null and b/themes/modern-es-de/art/genesis.webp differ diff --git a/themes/modern-es-de/art/gmaster.jpg b/themes/modern-es-de/art/gmaster.jpg deleted file mode 100644 index a646cf73c..000000000 Binary files a/themes/modern-es-de/art/gmaster.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/gmaster.webp b/themes/modern-es-de/art/gmaster.webp new file mode 100644 index 000000000..eceb061b9 Binary files /dev/null and b/themes/modern-es-de/art/gmaster.webp differ diff --git a/themes/modern-es-de/art/gx4000.jpg b/themes/modern-es-de/art/gx4000.jpg deleted file mode 100644 index 9eaae074b..000000000 Binary files a/themes/modern-es-de/art/gx4000.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/gx4000.webp b/themes/modern-es-de/art/gx4000.webp new file mode 100644 index 000000000..e430dff9f Binary files /dev/null and b/themes/modern-es-de/art/gx4000.webp differ diff --git a/themes/modern-es-de/art/intellivision.jpg b/themes/modern-es-de/art/intellivision.jpg deleted file mode 100644 index 8be1ceefc..000000000 Binary files a/themes/modern-es-de/art/intellivision.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/intellivision.webp b/themes/modern-es-de/art/intellivision.webp new file mode 100644 index 000000000..83a9f5e4c Binary files /dev/null and b/themes/modern-es-de/art/intellivision.webp differ diff --git a/themes/modern-es-de/art/j2me.jpg b/themes/modern-es-de/art/j2me.jpg deleted file mode 100644 index ade1e3a97..000000000 Binary files a/themes/modern-es-de/art/j2me.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/j2me.webp b/themes/modern-es-de/art/j2me.webp new file mode 100644 index 000000000..160af37fd Binary files /dev/null and b/themes/modern-es-de/art/j2me.webp differ diff --git a/themes/modern-es-de/art/kodi.jpg b/themes/modern-es-de/art/kodi.jpg deleted file mode 100644 index c2bec9357..000000000 Binary files a/themes/modern-es-de/art/kodi.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/kodi.webp b/themes/modern-es-de/art/kodi.webp new file mode 100644 index 000000000..3f07258f0 Binary files /dev/null and b/themes/modern-es-de/art/kodi.webp differ diff --git a/themes/modern-es-de/art/laserdisc.jpg b/themes/modern-es-de/art/laserdisc.jpg deleted file mode 100644 index fddae67f4..000000000 Binary files a/themes/modern-es-de/art/laserdisc.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/laserdisc.webp b/themes/modern-es-de/art/laserdisc.webp new file mode 100644 index 000000000..c2cb52e9a Binary files /dev/null and b/themes/modern-es-de/art/laserdisc.webp differ diff --git a/themes/modern-es-de/art/lcdgames.jpg b/themes/modern-es-de/art/lcdgames.jpg deleted file mode 100644 index caf46ff5f..000000000 Binary files a/themes/modern-es-de/art/lcdgames.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/lcdgames.webp b/themes/modern-es-de/art/lcdgames.webp new file mode 100644 index 000000000..ee0f712d4 Binary files /dev/null and b/themes/modern-es-de/art/lcdgames.webp differ diff --git a/themes/modern-es-de/art/lowresnx.jpg b/themes/modern-es-de/art/lowresnx.jpg deleted file mode 100644 index 587a758ec..000000000 Binary files a/themes/modern-es-de/art/lowresnx.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/lowresnx.webp b/themes/modern-es-de/art/lowresnx.webp new file mode 100644 index 000000000..c5f72a9f3 Binary files /dev/null and b/themes/modern-es-de/art/lowresnx.webp differ diff --git a/themes/modern-es-de/art/lutris.jpg b/themes/modern-es-de/art/lutris.jpg deleted file mode 100644 index 32fc0394b..000000000 Binary files a/themes/modern-es-de/art/lutris.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/lutris.webp b/themes/modern-es-de/art/lutris.webp new file mode 100644 index 000000000..28e21aaf5 Binary files /dev/null and b/themes/modern-es-de/art/lutris.webp differ diff --git a/themes/modern-es-de/art/lutro.jpg b/themes/modern-es-de/art/lutro.jpg deleted file mode 100644 index 2805c5b85..000000000 Binary files a/themes/modern-es-de/art/lutro.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/lutro.webp b/themes/modern-es-de/art/lutro.webp new file mode 100644 index 000000000..60dfb2969 Binary files /dev/null and b/themes/modern-es-de/art/lutro.webp differ diff --git a/themes/modern-es-de/art/macintosh.jpg b/themes/modern-es-de/art/macintosh.jpg deleted file mode 100644 index e8acda764..000000000 Binary files a/themes/modern-es-de/art/macintosh.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/macintosh.webp b/themes/modern-es-de/art/macintosh.webp new file mode 100644 index 000000000..1d661b78f Binary files /dev/null and b/themes/modern-es-de/art/macintosh.webp differ diff --git a/themes/modern-es-de/art/mame-advmame.jpg b/themes/modern-es-de/art/mame-advmame.jpg deleted file mode 100644 index 34b248044..000000000 Binary files a/themes/modern-es-de/art/mame-advmame.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/mame-advmame.webp b/themes/modern-es-de/art/mame-advmame.webp new file mode 100644 index 000000000..acfa21134 Binary files /dev/null and b/themes/modern-es-de/art/mame-advmame.webp differ diff --git a/themes/modern-es-de/art/mame.jpg b/themes/modern-es-de/art/mame.jpg deleted file mode 100644 index adaefe268..000000000 Binary files a/themes/modern-es-de/art/mame.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/mame.webp b/themes/modern-es-de/art/mame.webp new file mode 100644 index 000000000..bda65b437 Binary files /dev/null and b/themes/modern-es-de/art/mame.webp differ diff --git a/themes/modern-es-de/art/mastersystem.jpg b/themes/modern-es-de/art/mastersystem.jpg deleted file mode 100644 index 7d99913c3..000000000 Binary files a/themes/modern-es-de/art/mastersystem.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/mastersystem.webp b/themes/modern-es-de/art/mastersystem.webp new file mode 100644 index 000000000..2d366e34a Binary files /dev/null and b/themes/modern-es-de/art/mastersystem.webp differ diff --git a/themes/modern-es-de/art/megacd.jpg b/themes/modern-es-de/art/megacd.jpg deleted file mode 100644 index ebe754f27..000000000 Binary files a/themes/modern-es-de/art/megacd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/megacd.webp b/themes/modern-es-de/art/megacd.webp new file mode 100644 index 000000000..e4972f7b8 Binary files /dev/null and b/themes/modern-es-de/art/megacd.webp differ diff --git a/themes/modern-es-de/art/megacdjp.jpg b/themes/modern-es-de/art/megacdjp.jpg deleted file mode 100644 index 51814efac..000000000 Binary files a/themes/modern-es-de/art/megacdjp.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/megacdjp.webp b/themes/modern-es-de/art/megacdjp.webp new file mode 100644 index 000000000..652e3568e Binary files /dev/null and b/themes/modern-es-de/art/megacdjp.webp differ diff --git a/themes/modern-es-de/art/megadrive.jpg b/themes/modern-es-de/art/megadrive.jpg deleted file mode 100644 index ccb7503e9..000000000 Binary files a/themes/modern-es-de/art/megadrive.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/megadrive.webp b/themes/modern-es-de/art/megadrive.webp new file mode 100644 index 000000000..c33324df9 Binary files /dev/null and b/themes/modern-es-de/art/megadrive.webp differ diff --git a/themes/modern-es-de/art/megadrivejp.jpg b/themes/modern-es-de/art/megadrivejp.jpg deleted file mode 100644 index f89a0ab8d..000000000 Binary files a/themes/modern-es-de/art/megadrivejp.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/megadrivejp.webp b/themes/modern-es-de/art/megadrivejp.webp new file mode 100644 index 000000000..5e6ba5dd6 Binary files /dev/null and b/themes/modern-es-de/art/megadrivejp.webp differ diff --git a/themes/modern-es-de/art/megaduck.jpg b/themes/modern-es-de/art/megaduck.jpg deleted file mode 100644 index 6214bc3fb..000000000 Binary files a/themes/modern-es-de/art/megaduck.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/megaduck.webp b/themes/modern-es-de/art/megaduck.webp new file mode 100644 index 000000000..3bd01feff Binary files /dev/null and b/themes/modern-es-de/art/megaduck.webp differ diff --git a/themes/modern-es-de/art/mess.jpg b/themes/modern-es-de/art/mess.jpg deleted file mode 100644 index 5d3a5465d..000000000 Binary files a/themes/modern-es-de/art/mess.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/mess.webp b/themes/modern-es-de/art/mess.webp new file mode 100644 index 000000000..969d53272 Binary files /dev/null and b/themes/modern-es-de/art/mess.webp differ diff --git a/themes/modern-es-de/art/model2.jpg b/themes/modern-es-de/art/model2.jpg deleted file mode 100644 index ffb9eb6b9..000000000 Binary files a/themes/modern-es-de/art/model2.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/model2.webp b/themes/modern-es-de/art/model2.webp new file mode 100644 index 000000000..9badf05ae Binary files /dev/null and b/themes/modern-es-de/art/model2.webp differ diff --git a/themes/modern-es-de/art/model3.jpg b/themes/modern-es-de/art/model3.jpg deleted file mode 100644 index 02bfb4483..000000000 Binary files a/themes/modern-es-de/art/model3.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/model3.webp b/themes/modern-es-de/art/model3.webp new file mode 100644 index 000000000..09e2ed007 Binary files /dev/null and b/themes/modern-es-de/art/model3.webp differ diff --git a/themes/modern-es-de/art/moto.jpg b/themes/modern-es-de/art/moto.jpg deleted file mode 100644 index 661562264..000000000 Binary files a/themes/modern-es-de/art/moto.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/moto.webp b/themes/modern-es-de/art/moto.webp new file mode 100644 index 000000000..ee2d380bc Binary files /dev/null and b/themes/modern-es-de/art/moto.webp differ diff --git a/themes/modern-es-de/art/msx.jpg b/themes/modern-es-de/art/msx.jpg deleted file mode 100644 index 2143c9bda..000000000 Binary files a/themes/modern-es-de/art/msx.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/msx.webp b/themes/modern-es-de/art/msx.webp new file mode 100644 index 000000000..b0a8918be Binary files /dev/null and b/themes/modern-es-de/art/msx.webp differ diff --git a/themes/modern-es-de/art/msx1.jpg b/themes/modern-es-de/art/msx1.jpg deleted file mode 100644 index 8bd8735e1..000000000 Binary files a/themes/modern-es-de/art/msx1.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/msx1.webp b/themes/modern-es-de/art/msx1.webp new file mode 100644 index 000000000..d796b55df Binary files /dev/null and b/themes/modern-es-de/art/msx1.webp differ diff --git a/themes/modern-es-de/art/msx2.jpg b/themes/modern-es-de/art/msx2.jpg deleted file mode 100644 index 3f01450ba..000000000 Binary files a/themes/modern-es-de/art/msx2.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/msx2.webp b/themes/modern-es-de/art/msx2.webp new file mode 100644 index 000000000..dcfea59b4 Binary files /dev/null and b/themes/modern-es-de/art/msx2.webp differ diff --git a/themes/modern-es-de/art/msxturbor.jpg b/themes/modern-es-de/art/msxturbor.jpg deleted file mode 100644 index 9efe7eeb9..000000000 Binary files a/themes/modern-es-de/art/msxturbor.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/msxturbor.webp b/themes/modern-es-de/art/msxturbor.webp new file mode 100644 index 000000000..55ef86b9b Binary files /dev/null and b/themes/modern-es-de/art/msxturbor.webp differ diff --git a/themes/modern-es-de/art/mugen.jpg b/themes/modern-es-de/art/mugen.jpg deleted file mode 100644 index aa90f2cc2..000000000 Binary files a/themes/modern-es-de/art/mugen.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/mugen.webp b/themes/modern-es-de/art/mugen.webp new file mode 100644 index 000000000..53528ac3b Binary files /dev/null and b/themes/modern-es-de/art/mugen.webp differ diff --git a/themes/modern-es-de/art/multivision.jpg b/themes/modern-es-de/art/multivision.jpg deleted file mode 100644 index 1a54ec958..000000000 Binary files a/themes/modern-es-de/art/multivision.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/multivision.webp b/themes/modern-es-de/art/multivision.webp new file mode 100644 index 000000000..bfd705c74 Binary files /dev/null and b/themes/modern-es-de/art/multivision.webp differ diff --git a/themes/modern-es-de/art/n3ds.jpg b/themes/modern-es-de/art/n3ds.jpg deleted file mode 100644 index 676fb8737..000000000 Binary files a/themes/modern-es-de/art/n3ds.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/n3ds.webp b/themes/modern-es-de/art/n3ds.webp new file mode 100644 index 000000000..d0e27dabb Binary files /dev/null and b/themes/modern-es-de/art/n3ds.webp differ diff --git a/themes/modern-es-de/art/n64.jpg b/themes/modern-es-de/art/n64.jpg deleted file mode 100644 index 584fa89bd..000000000 Binary files a/themes/modern-es-de/art/n64.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/n64.webp b/themes/modern-es-de/art/n64.webp new file mode 100644 index 000000000..dc4832371 Binary files /dev/null and b/themes/modern-es-de/art/n64.webp differ diff --git a/themes/modern-es-de/art/n64dd.jpg b/themes/modern-es-de/art/n64dd.jpg deleted file mode 100644 index 458b5994e..000000000 Binary files a/themes/modern-es-de/art/n64dd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/n64dd.webp b/themes/modern-es-de/art/n64dd.webp new file mode 100644 index 000000000..ecbacd943 Binary files /dev/null and b/themes/modern-es-de/art/n64dd.webp differ diff --git a/themes/modern-es-de/art/naomi.jpg b/themes/modern-es-de/art/naomi.jpg deleted file mode 100644 index d9323d832..000000000 Binary files a/themes/modern-es-de/art/naomi.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/naomi.webp b/themes/modern-es-de/art/naomi.webp new file mode 100644 index 000000000..379853915 Binary files /dev/null and b/themes/modern-es-de/art/naomi.webp differ diff --git a/themes/modern-es-de/art/naomi2.jpg b/themes/modern-es-de/art/naomi2.jpg deleted file mode 100644 index ccf873e1b..000000000 Binary files a/themes/modern-es-de/art/naomi2.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/naomi2.webp b/themes/modern-es-de/art/naomi2.webp new file mode 100644 index 000000000..a819b8c68 Binary files /dev/null and b/themes/modern-es-de/art/naomi2.webp differ diff --git a/themes/modern-es-de/art/naomigd.jpg b/themes/modern-es-de/art/naomigd.jpg deleted file mode 100644 index e0e1d0e9d..000000000 Binary files a/themes/modern-es-de/art/naomigd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/naomigd.webp b/themes/modern-es-de/art/naomigd.webp new file mode 100644 index 000000000..bc8a12c5a Binary files /dev/null and b/themes/modern-es-de/art/naomigd.webp differ diff --git a/themes/modern-es-de/art/nds.jpg b/themes/modern-es-de/art/nds.jpg deleted file mode 100644 index 8099b5434..000000000 Binary files a/themes/modern-es-de/art/nds.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/nds.webp b/themes/modern-es-de/art/nds.webp new file mode 100644 index 000000000..c98429ece Binary files /dev/null and b/themes/modern-es-de/art/nds.webp differ diff --git a/themes/modern-es-de/art/neogeo.jpg b/themes/modern-es-de/art/neogeo.jpg deleted file mode 100644 index 280497be0..000000000 Binary files a/themes/modern-es-de/art/neogeo.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/neogeo.webp b/themes/modern-es-de/art/neogeo.webp new file mode 100644 index 000000000..4767b2946 Binary files /dev/null and b/themes/modern-es-de/art/neogeo.webp differ diff --git a/themes/modern-es-de/art/neogeocd.jpg b/themes/modern-es-de/art/neogeocd.jpg deleted file mode 100644 index cb8220725..000000000 Binary files a/themes/modern-es-de/art/neogeocd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/neogeocd.webp b/themes/modern-es-de/art/neogeocd.webp new file mode 100644 index 000000000..1304fabd3 Binary files /dev/null and b/themes/modern-es-de/art/neogeocd.webp differ diff --git a/themes/modern-es-de/art/neogeocdjp.jpg b/themes/modern-es-de/art/neogeocdjp.jpg deleted file mode 100644 index cb8220725..000000000 Binary files a/themes/modern-es-de/art/neogeocdjp.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/neogeocdjp.webp b/themes/modern-es-de/art/neogeocdjp.webp new file mode 100644 index 000000000..1304fabd3 Binary files /dev/null and b/themes/modern-es-de/art/neogeocdjp.webp differ diff --git a/themes/modern-es-de/art/nes.jpg b/themes/modern-es-de/art/nes.jpg deleted file mode 100644 index f1a24b40e..000000000 Binary files a/themes/modern-es-de/art/nes.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/nes.webp b/themes/modern-es-de/art/nes.webp new file mode 100644 index 000000000..176f5830a Binary files /dev/null and b/themes/modern-es-de/art/nes.webp differ diff --git a/themes/modern-es-de/art/ngage.jpg b/themes/modern-es-de/art/ngage.jpg deleted file mode 100644 index d81c94a37..000000000 Binary files a/themes/modern-es-de/art/ngage.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/ngage.webp b/themes/modern-es-de/art/ngage.webp new file mode 100644 index 000000000..4f49f627f Binary files /dev/null and b/themes/modern-es-de/art/ngage.webp differ diff --git a/themes/modern-es-de/art/ngp.jpg b/themes/modern-es-de/art/ngp.jpg deleted file mode 100644 index 6517b11c7..000000000 Binary files a/themes/modern-es-de/art/ngp.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/ngp.webp b/themes/modern-es-de/art/ngp.webp new file mode 100644 index 000000000..7af4d0462 Binary files /dev/null and b/themes/modern-es-de/art/ngp.webp differ diff --git a/themes/modern-es-de/art/ngpc.jpg b/themes/modern-es-de/art/ngpc.jpg deleted file mode 100644 index 76130a6b2..000000000 Binary files a/themes/modern-es-de/art/ngpc.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/ngpc.webp b/themes/modern-es-de/art/ngpc.webp new file mode 100644 index 000000000..eac2edc97 Binary files /dev/null and b/themes/modern-es-de/art/ngpc.webp differ diff --git a/themes/modern-es-de/art/odyssey2.jpg b/themes/modern-es-de/art/odyssey2.jpg deleted file mode 100644 index f9c78147a..000000000 Binary files a/themes/modern-es-de/art/odyssey2.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/odyssey2.webp b/themes/modern-es-de/art/odyssey2.webp new file mode 100644 index 000000000..671229c97 Binary files /dev/null and b/themes/modern-es-de/art/odyssey2.webp differ diff --git a/themes/modern-es-de/art/openbor.jpg b/themes/modern-es-de/art/openbor.jpg deleted file mode 100644 index ce743b36f..000000000 Binary files a/themes/modern-es-de/art/openbor.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/openbor.webp b/themes/modern-es-de/art/openbor.webp new file mode 100644 index 000000000..b34171273 Binary files /dev/null and b/themes/modern-es-de/art/openbor.webp differ diff --git a/themes/modern-es-de/art/oric.jpg b/themes/modern-es-de/art/oric.jpg deleted file mode 100644 index 8039ca6fb..000000000 Binary files a/themes/modern-es-de/art/oric.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/oric.webp b/themes/modern-es-de/art/oric.webp new file mode 100644 index 000000000..15545fd47 Binary files /dev/null and b/themes/modern-es-de/art/oric.webp differ diff --git a/themes/modern-es-de/art/palm.jpg b/themes/modern-es-de/art/palm.jpg deleted file mode 100644 index f41690043..000000000 Binary files a/themes/modern-es-de/art/palm.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/palm.webp b/themes/modern-es-de/art/palm.webp new file mode 100644 index 000000000..780cdd508 Binary files /dev/null and b/themes/modern-es-de/art/palm.webp differ diff --git a/themes/modern-es-de/art/pc.jpg b/themes/modern-es-de/art/pc.jpg deleted file mode 100644 index efab650f1..000000000 Binary files a/themes/modern-es-de/art/pc.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/pc.webp b/themes/modern-es-de/art/pc.webp new file mode 100644 index 000000000..8828354fd Binary files /dev/null and b/themes/modern-es-de/art/pc.webp differ diff --git a/themes/modern-es-de/art/pc88.jpg b/themes/modern-es-de/art/pc88.jpg deleted file mode 100644 index c7c97db03..000000000 Binary files a/themes/modern-es-de/art/pc88.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/pc88.webp b/themes/modern-es-de/art/pc88.webp new file mode 100644 index 000000000..5e1bd4b8f Binary files /dev/null and b/themes/modern-es-de/art/pc88.webp differ diff --git a/themes/modern-es-de/art/pc98.jpg b/themes/modern-es-de/art/pc98.jpg deleted file mode 100644 index 9ea576ecd..000000000 Binary files a/themes/modern-es-de/art/pc98.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/pc98.webp b/themes/modern-es-de/art/pc98.webp new file mode 100644 index 000000000..aebb49765 Binary files /dev/null and b/themes/modern-es-de/art/pc98.webp differ diff --git a/themes/modern-es-de/art/pcarcade.jpg b/themes/modern-es-de/art/pcarcade.jpg deleted file mode 100644 index 286603e8d..000000000 Binary files a/themes/modern-es-de/art/pcarcade.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/pcarcade.webp b/themes/modern-es-de/art/pcarcade.webp new file mode 100644 index 000000000..7fce02c46 Binary files /dev/null and b/themes/modern-es-de/art/pcarcade.webp differ diff --git a/themes/modern-es-de/art/pcengine.jpg b/themes/modern-es-de/art/pcengine.jpg deleted file mode 100644 index 253f439a2..000000000 Binary files a/themes/modern-es-de/art/pcengine.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/pcengine.webp b/themes/modern-es-de/art/pcengine.webp new file mode 100644 index 000000000..3cb27e768 Binary files /dev/null and b/themes/modern-es-de/art/pcengine.webp differ diff --git a/themes/modern-es-de/art/pcenginecd.jpg b/themes/modern-es-de/art/pcenginecd.jpg deleted file mode 100644 index c9275f0c2..000000000 Binary files a/themes/modern-es-de/art/pcenginecd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/pcenginecd.webp b/themes/modern-es-de/art/pcenginecd.webp new file mode 100644 index 000000000..fe3392540 Binary files /dev/null and b/themes/modern-es-de/art/pcenginecd.webp differ diff --git a/themes/modern-es-de/art/pcfx.jpg b/themes/modern-es-de/art/pcfx.jpg deleted file mode 100644 index 050f85ff8..000000000 Binary files a/themes/modern-es-de/art/pcfx.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/pcfx.webp b/themes/modern-es-de/art/pcfx.webp new file mode 100644 index 000000000..19077bf84 Binary files /dev/null and b/themes/modern-es-de/art/pcfx.webp differ diff --git a/themes/modern-es-de/art/pico8.jpg b/themes/modern-es-de/art/pico8.jpg deleted file mode 100644 index d043d6225..000000000 Binary files a/themes/modern-es-de/art/pico8.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/pico8.webp b/themes/modern-es-de/art/pico8.webp new file mode 100644 index 000000000..2b13e1f25 Binary files /dev/null and b/themes/modern-es-de/art/pico8.webp differ diff --git a/themes/modern-es-de/art/plus4.jpg b/themes/modern-es-de/art/plus4.jpg deleted file mode 100644 index f87fa0cf5..000000000 Binary files a/themes/modern-es-de/art/plus4.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/plus4.webp b/themes/modern-es-de/art/plus4.webp new file mode 100644 index 000000000..bc67f2f51 Binary files /dev/null and b/themes/modern-es-de/art/plus4.webp differ diff --git a/themes/modern-es-de/art/pokemini.jpg b/themes/modern-es-de/art/pokemini.jpg deleted file mode 100644 index 685ee1bba..000000000 Binary files a/themes/modern-es-de/art/pokemini.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/pokemini.webp b/themes/modern-es-de/art/pokemini.webp new file mode 100644 index 000000000..93f221883 Binary files /dev/null and b/themes/modern-es-de/art/pokemini.webp differ diff --git a/themes/modern-es-de/art/ports.jpg b/themes/modern-es-de/art/ports.jpg deleted file mode 100644 index b79b79bc7..000000000 Binary files a/themes/modern-es-de/art/ports.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/ports.webp b/themes/modern-es-de/art/ports.webp new file mode 100644 index 000000000..2dcbbdd53 Binary files /dev/null and b/themes/modern-es-de/art/ports.webp differ diff --git a/themes/modern-es-de/art/ps2.jpg b/themes/modern-es-de/art/ps2.jpg deleted file mode 100644 index 2f06bd207..000000000 Binary files a/themes/modern-es-de/art/ps2.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/ps2.webp b/themes/modern-es-de/art/ps2.webp new file mode 100644 index 000000000..3dd2257d5 Binary files /dev/null and b/themes/modern-es-de/art/ps2.webp differ diff --git a/themes/modern-es-de/art/ps3.jpg b/themes/modern-es-de/art/ps3.jpg deleted file mode 100644 index 88cf8d289..000000000 Binary files a/themes/modern-es-de/art/ps3.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/ps3.webp b/themes/modern-es-de/art/ps3.webp new file mode 100644 index 000000000..92817d269 Binary files /dev/null and b/themes/modern-es-de/art/ps3.webp differ diff --git a/themes/modern-es-de/art/ps4.jpg b/themes/modern-es-de/art/ps4.jpg deleted file mode 100644 index 9f39d2632..000000000 Binary files a/themes/modern-es-de/art/ps4.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/ps4.webp b/themes/modern-es-de/art/ps4.webp new file mode 100644 index 000000000..07de6a9dc Binary files /dev/null and b/themes/modern-es-de/art/ps4.webp differ diff --git a/themes/modern-es-de/art/psp.jpg b/themes/modern-es-de/art/psp.jpg deleted file mode 100644 index 2bb683e11..000000000 Binary files a/themes/modern-es-de/art/psp.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/psp.webp b/themes/modern-es-de/art/psp.webp new file mode 100644 index 000000000..86605850f Binary files /dev/null and b/themes/modern-es-de/art/psp.webp differ diff --git a/themes/modern-es-de/art/psvita.jpg b/themes/modern-es-de/art/psvita.jpg deleted file mode 100644 index b0f4c6103..000000000 Binary files a/themes/modern-es-de/art/psvita.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/psvita.webp b/themes/modern-es-de/art/psvita.webp new file mode 100644 index 000000000..084d9503c Binary files /dev/null and b/themes/modern-es-de/art/psvita.webp differ diff --git a/themes/modern-es-de/art/psx.jpg b/themes/modern-es-de/art/psx.jpg deleted file mode 100644 index 0b38f2bca..000000000 Binary files a/themes/modern-es-de/art/psx.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/psx.webp b/themes/modern-es-de/art/psx.webp new file mode 100644 index 000000000..619179347 Binary files /dev/null and b/themes/modern-es-de/art/psx.webp differ diff --git a/themes/modern-es-de/art/pv1000.jpg b/themes/modern-es-de/art/pv1000.jpg deleted file mode 100644 index de8900a9c..000000000 Binary files a/themes/modern-es-de/art/pv1000.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/pv1000.webp b/themes/modern-es-de/art/pv1000.webp new file mode 100644 index 000000000..5b5c9d700 Binary files /dev/null and b/themes/modern-es-de/art/pv1000.webp differ diff --git a/themes/modern-es-de/art/quake.jpg b/themes/modern-es-de/art/quake.jpg deleted file mode 100644 index 119671afd..000000000 Binary files a/themes/modern-es-de/art/quake.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/quake.webp b/themes/modern-es-de/art/quake.webp new file mode 100644 index 000000000..9cdd2059f Binary files /dev/null and b/themes/modern-es-de/art/quake.webp differ diff --git a/themes/modern-es-de/art/samcoupe.jpg b/themes/modern-es-de/art/samcoupe.jpg deleted file mode 100644 index b5d828d87..000000000 Binary files a/themes/modern-es-de/art/samcoupe.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/samcoupe.webp b/themes/modern-es-de/art/samcoupe.webp new file mode 100644 index 000000000..305dffe6d Binary files /dev/null and b/themes/modern-es-de/art/samcoupe.webp differ diff --git a/themes/modern-es-de/art/satellaview.jpg b/themes/modern-es-de/art/satellaview.jpg deleted file mode 100644 index 5c913c457..000000000 Binary files a/themes/modern-es-de/art/satellaview.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/satellaview.webp b/themes/modern-es-de/art/satellaview.webp new file mode 100644 index 000000000..e6d7a4de0 Binary files /dev/null and b/themes/modern-es-de/art/satellaview.webp differ diff --git a/themes/modern-es-de/art/saturn.jpg b/themes/modern-es-de/art/saturn.jpg deleted file mode 100644 index f8bc2114c..000000000 Binary files a/themes/modern-es-de/art/saturn.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/saturn.webp b/themes/modern-es-de/art/saturn.webp new file mode 100644 index 000000000..94c3c757d Binary files /dev/null and b/themes/modern-es-de/art/saturn.webp differ diff --git a/themes/modern-es-de/art/saturnjp.jpg b/themes/modern-es-de/art/saturnjp.jpg deleted file mode 100644 index 6d609f6c3..000000000 Binary files a/themes/modern-es-de/art/saturnjp.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/saturnjp.webp b/themes/modern-es-de/art/saturnjp.webp new file mode 100644 index 000000000..f4ed69187 Binary files /dev/null and b/themes/modern-es-de/art/saturnjp.webp differ diff --git a/themes/modern-es-de/art/scummvm.jpg b/themes/modern-es-de/art/scummvm.jpg deleted file mode 100644 index d495541f3..000000000 Binary files a/themes/modern-es-de/art/scummvm.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/scummvm.webp b/themes/modern-es-de/art/scummvm.webp new file mode 100644 index 000000000..a75aac62b Binary files /dev/null and b/themes/modern-es-de/art/scummvm.webp differ diff --git a/themes/modern-es-de/art/scv.jpg b/themes/modern-es-de/art/scv.jpg deleted file mode 100644 index 6b0470998..000000000 Binary files a/themes/modern-es-de/art/scv.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/scv.webp b/themes/modern-es-de/art/scv.webp new file mode 100644 index 000000000..cdf3a4d92 Binary files /dev/null and b/themes/modern-es-de/art/scv.webp differ diff --git a/themes/modern-es-de/art/sega32x.jpg b/themes/modern-es-de/art/sega32x.jpg deleted file mode 100644 index dfbd1f90a..000000000 Binary files a/themes/modern-es-de/art/sega32x.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/sega32x.webp b/themes/modern-es-de/art/sega32x.webp new file mode 100644 index 000000000..543ea0847 Binary files /dev/null and b/themes/modern-es-de/art/sega32x.webp differ diff --git a/themes/modern-es-de/art/sega32xjp.jpg b/themes/modern-es-de/art/sega32xjp.jpg deleted file mode 100644 index dfbd1f90a..000000000 Binary files a/themes/modern-es-de/art/sega32xjp.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/sega32xjp.webp b/themes/modern-es-de/art/sega32xjp.webp new file mode 100644 index 000000000..543ea0847 Binary files /dev/null and b/themes/modern-es-de/art/sega32xjp.webp differ diff --git a/themes/modern-es-de/art/sega32xna.jpg b/themes/modern-es-de/art/sega32xna.jpg deleted file mode 100644 index dfbd1f90a..000000000 Binary files a/themes/modern-es-de/art/sega32xna.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/sega32xna.webp b/themes/modern-es-de/art/sega32xna.webp new file mode 100644 index 000000000..543ea0847 Binary files /dev/null and b/themes/modern-es-de/art/sega32xna.webp differ diff --git a/themes/modern-es-de/art/segacd.jpg b/themes/modern-es-de/art/segacd.jpg deleted file mode 100644 index 162f79e92..000000000 Binary files a/themes/modern-es-de/art/segacd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/segacd.webp b/themes/modern-es-de/art/segacd.webp new file mode 100644 index 000000000..7d07fb977 Binary files /dev/null and b/themes/modern-es-de/art/segacd.webp differ diff --git a/themes/modern-es-de/art/sfc.jpg b/themes/modern-es-de/art/sfc.jpg deleted file mode 100644 index e216a4652..000000000 Binary files a/themes/modern-es-de/art/sfc.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/sfc.webp b/themes/modern-es-de/art/sfc.webp new file mode 100644 index 000000000..4e5fa01d1 Binary files /dev/null and b/themes/modern-es-de/art/sfc.webp differ diff --git a/themes/modern-es-de/art/sg-1000.jpg b/themes/modern-es-de/art/sg-1000.jpg deleted file mode 100644 index 980cd706f..000000000 Binary files a/themes/modern-es-de/art/sg-1000.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/sg-1000.webp b/themes/modern-es-de/art/sg-1000.webp new file mode 100644 index 000000000..f34aadcf9 Binary files /dev/null and b/themes/modern-es-de/art/sg-1000.webp differ diff --git a/themes/modern-es-de/art/sgb.jpg b/themes/modern-es-de/art/sgb.jpg deleted file mode 100644 index 0b02f7e5a..000000000 Binary files a/themes/modern-es-de/art/sgb.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/sgb.webp b/themes/modern-es-de/art/sgb.webp new file mode 100644 index 000000000..3e40319f4 Binary files /dev/null and b/themes/modern-es-de/art/sgb.webp differ diff --git a/themes/modern-es-de/art/snes.jpg b/themes/modern-es-de/art/snes.jpg deleted file mode 100644 index c93866f30..000000000 Binary files a/themes/modern-es-de/art/snes.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/snes.webp b/themes/modern-es-de/art/snes.webp new file mode 100644 index 000000000..b54534449 Binary files /dev/null and b/themes/modern-es-de/art/snes.webp differ diff --git a/themes/modern-es-de/art/snesna.jpg b/themes/modern-es-de/art/snesna.jpg deleted file mode 100644 index b65f90c2d..000000000 Binary files a/themes/modern-es-de/art/snesna.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/snesna.webp b/themes/modern-es-de/art/snesna.webp new file mode 100644 index 000000000..9494492af Binary files /dev/null and b/themes/modern-es-de/art/snesna.webp differ diff --git a/themes/modern-es-de/art/solarus.jpg b/themes/modern-es-de/art/solarus.jpg deleted file mode 100644 index e46e7bfd8..000000000 Binary files a/themes/modern-es-de/art/solarus.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/solarus.webp b/themes/modern-es-de/art/solarus.webp new file mode 100644 index 000000000..d50807f15 Binary files /dev/null and b/themes/modern-es-de/art/solarus.webp differ diff --git a/themes/modern-es-de/art/spectravideo.jpg b/themes/modern-es-de/art/spectravideo.jpg deleted file mode 100644 index b4bf21c2d..000000000 Binary files a/themes/modern-es-de/art/spectravideo.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/spectravideo.webp b/themes/modern-es-de/art/spectravideo.webp new file mode 100644 index 000000000..3e58cfad2 Binary files /dev/null and b/themes/modern-es-de/art/spectravideo.webp differ diff --git a/themes/modern-es-de/art/steam.jpg b/themes/modern-es-de/art/steam.jpg deleted file mode 100644 index ca6523fcd..000000000 Binary files a/themes/modern-es-de/art/steam.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/steam.webp b/themes/modern-es-de/art/steam.webp new file mode 100644 index 000000000..0a891365a Binary files /dev/null and b/themes/modern-es-de/art/steam.webp differ diff --git a/themes/modern-es-de/art/stv.jpg b/themes/modern-es-de/art/stv.jpg deleted file mode 100644 index 08e449cf9..000000000 Binary files a/themes/modern-es-de/art/stv.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/stv.webp b/themes/modern-es-de/art/stv.webp new file mode 100644 index 000000000..1679a3a2a Binary files /dev/null and b/themes/modern-es-de/art/stv.webp differ diff --git a/themes/modern-es-de/art/sufami.jpg b/themes/modern-es-de/art/sufami.jpg deleted file mode 100644 index bb7d6b18d..000000000 Binary files a/themes/modern-es-de/art/sufami.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/sufami.webp b/themes/modern-es-de/art/sufami.webp new file mode 100644 index 000000000..7b850714a Binary files /dev/null and b/themes/modern-es-de/art/sufami.webp differ diff --git a/themes/modern-es-de/art/supergrafx.jpg b/themes/modern-es-de/art/supergrafx.jpg deleted file mode 100644 index bcc3572e6..000000000 Binary files a/themes/modern-es-de/art/supergrafx.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/supergrafx.webp b/themes/modern-es-de/art/supergrafx.webp new file mode 100644 index 000000000..92c83548d Binary files /dev/null and b/themes/modern-es-de/art/supergrafx.webp differ diff --git a/themes/modern-es-de/art/supervision.jpg b/themes/modern-es-de/art/supervision.jpg deleted file mode 100644 index 8fb817bb1..000000000 Binary files a/themes/modern-es-de/art/supervision.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/supervision.webp b/themes/modern-es-de/art/supervision.webp new file mode 100644 index 000000000..5cb28b402 Binary files /dev/null and b/themes/modern-es-de/art/supervision.webp differ diff --git a/themes/modern-es-de/art/supracan.jpg b/themes/modern-es-de/art/supracan.jpg deleted file mode 100644 index 7a9d1c4d2..000000000 Binary files a/themes/modern-es-de/art/supracan.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/supracan.webp b/themes/modern-es-de/art/supracan.webp new file mode 100644 index 000000000..191385d4e Binary files /dev/null and b/themes/modern-es-de/art/supracan.webp differ diff --git a/themes/modern-es-de/art/switch.jpg b/themes/modern-es-de/art/switch.jpg deleted file mode 100644 index c7264044e..000000000 Binary files a/themes/modern-es-de/art/switch.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/switch.webp b/themes/modern-es-de/art/switch.webp new file mode 100644 index 000000000..0b2f2b94c Binary files /dev/null and b/themes/modern-es-de/art/switch.webp differ diff --git a/themes/modern-es-de/art/symbian.jpg b/themes/modern-es-de/art/symbian.jpg deleted file mode 100644 index 404f3e955..000000000 Binary files a/themes/modern-es-de/art/symbian.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/symbian.webp b/themes/modern-es-de/art/symbian.webp new file mode 100644 index 000000000..7fc1b7231 Binary files /dev/null and b/themes/modern-es-de/art/symbian.webp differ diff --git a/themes/modern-es-de/art/tanodragon.jpg b/themes/modern-es-de/art/tanodragon.jpg deleted file mode 100644 index afac96136..000000000 Binary files a/themes/modern-es-de/art/tanodragon.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/tanodragon.webp b/themes/modern-es-de/art/tanodragon.webp new file mode 100644 index 000000000..a07469fc5 Binary files /dev/null and b/themes/modern-es-de/art/tanodragon.webp differ diff --git a/themes/modern-es-de/art/tg-cd.jpg b/themes/modern-es-de/art/tg-cd.jpg deleted file mode 100644 index 6d51f34d8..000000000 Binary files a/themes/modern-es-de/art/tg-cd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/tg-cd.webp b/themes/modern-es-de/art/tg-cd.webp new file mode 100644 index 000000000..5f43bcc49 Binary files /dev/null and b/themes/modern-es-de/art/tg-cd.webp differ diff --git a/themes/modern-es-de/art/tg16.jpg b/themes/modern-es-de/art/tg16.jpg deleted file mode 100644 index e14bcf9ab..000000000 Binary files a/themes/modern-es-de/art/tg16.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/tg16.webp b/themes/modern-es-de/art/tg16.webp new file mode 100644 index 000000000..a980bd46e Binary files /dev/null and b/themes/modern-es-de/art/tg16.webp differ diff --git a/themes/modern-es-de/art/ti99.jpg b/themes/modern-es-de/art/ti99.jpg deleted file mode 100644 index 763334f55..000000000 Binary files a/themes/modern-es-de/art/ti99.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/ti99.webp b/themes/modern-es-de/art/ti99.webp new file mode 100644 index 000000000..89a6ef9f4 Binary files /dev/null and b/themes/modern-es-de/art/ti99.webp differ diff --git a/themes/modern-es-de/art/tic80.jpg b/themes/modern-es-de/art/tic80.jpg deleted file mode 100644 index 77f1abc52..000000000 Binary files a/themes/modern-es-de/art/tic80.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/tic80.webp b/themes/modern-es-de/art/tic80.webp new file mode 100644 index 000000000..d621b726a Binary files /dev/null and b/themes/modern-es-de/art/tic80.webp differ diff --git a/themes/modern-es-de/art/to8.jpg b/themes/modern-es-de/art/to8.jpg deleted file mode 100644 index d3819cd76..000000000 Binary files a/themes/modern-es-de/art/to8.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/to8.webp b/themes/modern-es-de/art/to8.webp new file mode 100644 index 000000000..97bae703d Binary files /dev/null and b/themes/modern-es-de/art/to8.webp differ diff --git a/themes/modern-es-de/art/tools.jpg b/themes/modern-es-de/art/tools.jpg deleted file mode 100644 index 613c4e7a9..000000000 Binary files a/themes/modern-es-de/art/tools.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/tools.webp b/themes/modern-es-de/art/tools.webp new file mode 100644 index 000000000..cf20b6f49 Binary files /dev/null and b/themes/modern-es-de/art/tools.webp differ diff --git a/themes/modern-es-de/art/triforce.jpg b/themes/modern-es-de/art/triforce.jpg deleted file mode 100644 index 5ff536b2a..000000000 Binary files a/themes/modern-es-de/art/triforce.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/triforce.webp b/themes/modern-es-de/art/triforce.webp new file mode 100644 index 000000000..7636cec36 Binary files /dev/null and b/themes/modern-es-de/art/triforce.webp differ diff --git a/themes/modern-es-de/art/trs-80.jpg b/themes/modern-es-de/art/trs-80.jpg deleted file mode 100644 index 765d5c4d1..000000000 Binary files a/themes/modern-es-de/art/trs-80.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/trs-80.webp b/themes/modern-es-de/art/trs-80.webp new file mode 100644 index 000000000..7c3a31a52 Binary files /dev/null and b/themes/modern-es-de/art/trs-80.webp differ diff --git a/themes/modern-es-de/art/type-x.jpg b/themes/modern-es-de/art/type-x.jpg deleted file mode 100644 index b555c96e4..000000000 Binary files a/themes/modern-es-de/art/type-x.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/type-x.webp b/themes/modern-es-de/art/type-x.webp new file mode 100644 index 000000000..55fef046d Binary files /dev/null and b/themes/modern-es-de/art/type-x.webp differ diff --git a/themes/modern-es-de/art/uzebox.jpg b/themes/modern-es-de/art/uzebox.jpg deleted file mode 100644 index 85a16e82b..000000000 Binary files a/themes/modern-es-de/art/uzebox.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/uzebox.webp b/themes/modern-es-de/art/uzebox.webp new file mode 100644 index 000000000..26f47aee9 Binary files /dev/null and b/themes/modern-es-de/art/uzebox.webp differ diff --git a/themes/modern-es-de/art/vectrex.jpg b/themes/modern-es-de/art/vectrex.jpg deleted file mode 100644 index 01fca47cf..000000000 Binary files a/themes/modern-es-de/art/vectrex.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/vectrex.webp b/themes/modern-es-de/art/vectrex.webp new file mode 100644 index 000000000..0d8ced106 Binary files /dev/null and b/themes/modern-es-de/art/vectrex.webp differ diff --git a/themes/modern-es-de/art/vic20.jpg b/themes/modern-es-de/art/vic20.jpg deleted file mode 100644 index a7a66eeda..000000000 Binary files a/themes/modern-es-de/art/vic20.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/vic20.webp b/themes/modern-es-de/art/vic20.webp new file mode 100644 index 000000000..bbf5c228e Binary files /dev/null and b/themes/modern-es-de/art/vic20.webp differ diff --git a/themes/modern-es-de/art/videopac.jpg b/themes/modern-es-de/art/videopac.jpg deleted file mode 100644 index 8182fc0d4..000000000 Binary files a/themes/modern-es-de/art/videopac.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/videopac.webp b/themes/modern-es-de/art/videopac.webp new file mode 100644 index 000000000..0cc91a51f Binary files /dev/null and b/themes/modern-es-de/art/videopac.webp differ diff --git a/themes/modern-es-de/art/virtualboy.jpg b/themes/modern-es-de/art/virtualboy.jpg deleted file mode 100644 index d495462b0..000000000 Binary files a/themes/modern-es-de/art/virtualboy.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/virtualboy.webp b/themes/modern-es-de/art/virtualboy.webp new file mode 100644 index 000000000..d6753137b Binary files /dev/null and b/themes/modern-es-de/art/virtualboy.webp differ diff --git a/themes/modern-es-de/art/vpinball.jpg b/themes/modern-es-de/art/vpinball.jpg deleted file mode 100644 index c1734c7b8..000000000 Binary files a/themes/modern-es-de/art/vpinball.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/vpinball.webp b/themes/modern-es-de/art/vpinball.webp new file mode 100644 index 000000000..e3b25a4fb Binary files /dev/null and b/themes/modern-es-de/art/vpinball.webp differ diff --git a/themes/modern-es-de/art/vsmile.jpg b/themes/modern-es-de/art/vsmile.jpg deleted file mode 100644 index bb53d915c..000000000 Binary files a/themes/modern-es-de/art/vsmile.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/vsmile.webp b/themes/modern-es-de/art/vsmile.webp new file mode 100644 index 000000000..e37a22cc3 Binary files /dev/null and b/themes/modern-es-de/art/vsmile.webp differ diff --git a/themes/modern-es-de/art/wasm4.jpg b/themes/modern-es-de/art/wasm4.jpg deleted file mode 100644 index d47a89da3..000000000 Binary files a/themes/modern-es-de/art/wasm4.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/wasm4.webp b/themes/modern-es-de/art/wasm4.webp new file mode 100644 index 000000000..75fc0530c Binary files /dev/null and b/themes/modern-es-de/art/wasm4.webp differ diff --git a/themes/modern-es-de/art/wii.jpg b/themes/modern-es-de/art/wii.jpg deleted file mode 100644 index 38a7d55a2..000000000 Binary files a/themes/modern-es-de/art/wii.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/wii.webp b/themes/modern-es-de/art/wii.webp new file mode 100644 index 000000000..00a44a65b Binary files /dev/null and b/themes/modern-es-de/art/wii.webp differ diff --git a/themes/modern-es-de/art/wiiu.jpg b/themes/modern-es-de/art/wiiu.jpg deleted file mode 100644 index 827531335..000000000 Binary files a/themes/modern-es-de/art/wiiu.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/wiiu.webp b/themes/modern-es-de/art/wiiu.webp new file mode 100644 index 000000000..71d32752e Binary files /dev/null and b/themes/modern-es-de/art/wiiu.webp differ diff --git a/themes/modern-es-de/art/windows.jpg b/themes/modern-es-de/art/windows.jpg deleted file mode 100644 index d075b96c7..000000000 Binary files a/themes/modern-es-de/art/windows.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/windows.webp b/themes/modern-es-de/art/windows.webp new file mode 100644 index 000000000..6908442ef Binary files /dev/null and b/themes/modern-es-de/art/windows.webp differ diff --git a/themes/modern-es-de/art/windows3x.jpg b/themes/modern-es-de/art/windows3x.jpg deleted file mode 100644 index 49846f91c..000000000 Binary files a/themes/modern-es-de/art/windows3x.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/windows3x.webp b/themes/modern-es-de/art/windows3x.webp new file mode 100644 index 000000000..44ba14289 Binary files /dev/null and b/themes/modern-es-de/art/windows3x.webp differ diff --git a/themes/modern-es-de/art/windows9x.jpg b/themes/modern-es-de/art/windows9x.jpg deleted file mode 100644 index 48e60e61d..000000000 Binary files a/themes/modern-es-de/art/windows9x.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/windows9x.webp b/themes/modern-es-de/art/windows9x.webp new file mode 100644 index 000000000..1d59d59fa Binary files /dev/null and b/themes/modern-es-de/art/windows9x.webp differ diff --git a/themes/modern-es-de/art/wonderswan.jpg b/themes/modern-es-de/art/wonderswan.jpg deleted file mode 100644 index 95a265f54..000000000 Binary files a/themes/modern-es-de/art/wonderswan.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/wonderswan.webp b/themes/modern-es-de/art/wonderswan.webp new file mode 100644 index 000000000..484631d20 Binary files /dev/null and b/themes/modern-es-de/art/wonderswan.webp differ diff --git a/themes/modern-es-de/art/wonderswancolor.jpg b/themes/modern-es-de/art/wonderswancolor.jpg deleted file mode 100644 index afd3c3938..000000000 Binary files a/themes/modern-es-de/art/wonderswancolor.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/wonderswancolor.webp b/themes/modern-es-de/art/wonderswancolor.webp new file mode 100644 index 000000000..631ed926f Binary files /dev/null and b/themes/modern-es-de/art/wonderswancolor.webp differ diff --git a/themes/modern-es-de/art/x1.jpg b/themes/modern-es-de/art/x1.jpg deleted file mode 100644 index b9cbd4602..000000000 Binary files a/themes/modern-es-de/art/x1.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/x1.webp b/themes/modern-es-de/art/x1.webp new file mode 100644 index 000000000..3899ed309 Binary files /dev/null and b/themes/modern-es-de/art/x1.webp differ diff --git a/themes/modern-es-de/art/x68000.jpg b/themes/modern-es-de/art/x68000.jpg deleted file mode 100644 index 0b4308f2f..000000000 Binary files a/themes/modern-es-de/art/x68000.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/x68000.webp b/themes/modern-es-de/art/x68000.webp new file mode 100644 index 000000000..73c299ba2 Binary files /dev/null and b/themes/modern-es-de/art/x68000.webp differ diff --git a/themes/modern-es-de/art/xbox.jpg b/themes/modern-es-de/art/xbox.jpg deleted file mode 100644 index be5270ac3..000000000 Binary files a/themes/modern-es-de/art/xbox.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/xbox.webp b/themes/modern-es-de/art/xbox.webp new file mode 100644 index 000000000..1d2f932b6 Binary files /dev/null and b/themes/modern-es-de/art/xbox.webp differ diff --git a/themes/modern-es-de/art/xbox360.jpg b/themes/modern-es-de/art/xbox360.jpg deleted file mode 100644 index a40f9a353..000000000 Binary files a/themes/modern-es-de/art/xbox360.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/xbox360.webp b/themes/modern-es-de/art/xbox360.webp new file mode 100644 index 000000000..2af6be8f7 Binary files /dev/null and b/themes/modern-es-de/art/xbox360.webp differ diff --git a/themes/modern-es-de/art/zmachine.jpg b/themes/modern-es-de/art/zmachine.jpg deleted file mode 100644 index e1f475945..000000000 Binary files a/themes/modern-es-de/art/zmachine.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/zmachine.webp b/themes/modern-es-de/art/zmachine.webp new file mode 100644 index 000000000..8b00e4463 Binary files /dev/null and b/themes/modern-es-de/art/zmachine.webp differ diff --git a/themes/modern-es-de/art/zx81.jpg b/themes/modern-es-de/art/zx81.jpg deleted file mode 100644 index 1f2639350..000000000 Binary files a/themes/modern-es-de/art/zx81.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/zx81.webp b/themes/modern-es-de/art/zx81.webp new file mode 100644 index 000000000..c8e2f492f Binary files /dev/null and b/themes/modern-es-de/art/zx81.webp differ diff --git a/themes/modern-es-de/art/zxnext.jpg b/themes/modern-es-de/art/zxnext.jpg deleted file mode 100644 index e18be1a29..000000000 Binary files a/themes/modern-es-de/art/zxnext.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/zxnext.webp b/themes/modern-es-de/art/zxnext.webp new file mode 100644 index 000000000..ab06fa295 Binary files /dev/null and b/themes/modern-es-de/art/zxnext.webp differ diff --git a/themes/modern-es-de/art/zxspectrum.jpg b/themes/modern-es-de/art/zxspectrum.jpg deleted file mode 100644 index 5a6f0a133..000000000 Binary files a/themes/modern-es-de/art/zxspectrum.jpg and /dev/null differ diff --git a/themes/modern-es-de/art/zxspectrum.webp b/themes/modern-es-de/art/zxspectrum.webp new file mode 100644 index 000000000..3ce9d8175 Binary files /dev/null and b/themes/modern-es-de/art/zxspectrum.webp differ diff --git a/themes/modern-es-de/art_legacy/3do.jpg b/themes/modern-es-de/art_legacy/3do.jpg deleted file mode 100644 index decb96bc6..000000000 Binary files a/themes/modern-es-de/art_legacy/3do.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/3do.webp b/themes/modern-es-de/art_legacy/3do.webp new file mode 100644 index 000000000..32ecd9f52 Binary files /dev/null and b/themes/modern-es-de/art_legacy/3do.webp differ diff --git a/themes/modern-es-de/art_legacy/adam.jpg b/themes/modern-es-de/art_legacy/adam.jpg deleted file mode 100644 index a9e1b6cc4..000000000 Binary files a/themes/modern-es-de/art_legacy/adam.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/adam.webp b/themes/modern-es-de/art_legacy/adam.webp new file mode 100644 index 000000000..3ff2fa79d Binary files /dev/null and b/themes/modern-es-de/art_legacy/adam.webp differ diff --git a/themes/modern-es-de/art_legacy/ags.jpg b/themes/modern-es-de/art_legacy/ags.jpg deleted file mode 100644 index fa3b5a605..000000000 Binary files a/themes/modern-es-de/art_legacy/ags.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/ags.webp b/themes/modern-es-de/art_legacy/ags.webp new file mode 100644 index 000000000..172182b6c Binary files /dev/null and b/themes/modern-es-de/art_legacy/ags.webp differ diff --git a/themes/modern-es-de/art_legacy/amiga.jpg b/themes/modern-es-de/art_legacy/amiga.jpg deleted file mode 100644 index 57b4f60f6..000000000 Binary files a/themes/modern-es-de/art_legacy/amiga.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/amiga.webp b/themes/modern-es-de/art_legacy/amiga.webp new file mode 100644 index 000000000..659407451 Binary files /dev/null and b/themes/modern-es-de/art_legacy/amiga.webp differ diff --git a/themes/modern-es-de/art_legacy/amiga1200.jpg b/themes/modern-es-de/art_legacy/amiga1200.jpg deleted file mode 100644 index f7e576dba..000000000 Binary files a/themes/modern-es-de/art_legacy/amiga1200.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/amiga1200.webp b/themes/modern-es-de/art_legacy/amiga1200.webp new file mode 100644 index 000000000..f3b3b19b8 Binary files /dev/null and b/themes/modern-es-de/art_legacy/amiga1200.webp differ diff --git a/themes/modern-es-de/art_legacy/amiga600.jpg b/themes/modern-es-de/art_legacy/amiga600.jpg deleted file mode 100644 index 374a8cdd5..000000000 Binary files a/themes/modern-es-de/art_legacy/amiga600.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/amiga600.webp b/themes/modern-es-de/art_legacy/amiga600.webp new file mode 100644 index 000000000..f690db56c Binary files /dev/null and b/themes/modern-es-de/art_legacy/amiga600.webp differ diff --git a/themes/modern-es-de/art_legacy/amigacd32.jpg b/themes/modern-es-de/art_legacy/amigacd32.jpg deleted file mode 100644 index d4a503817..000000000 Binary files a/themes/modern-es-de/art_legacy/amigacd32.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/amigacd32.webp b/themes/modern-es-de/art_legacy/amigacd32.webp new file mode 100644 index 000000000..dec082c67 Binary files /dev/null and b/themes/modern-es-de/art_legacy/amigacd32.webp differ diff --git a/themes/modern-es-de/art_legacy/amstradcpc.jpg b/themes/modern-es-de/art_legacy/amstradcpc.jpg deleted file mode 100644 index 414661114..000000000 Binary files a/themes/modern-es-de/art_legacy/amstradcpc.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/amstradcpc.webp b/themes/modern-es-de/art_legacy/amstradcpc.webp new file mode 100644 index 000000000..51606abdb Binary files /dev/null and b/themes/modern-es-de/art_legacy/amstradcpc.webp differ diff --git a/themes/modern-es-de/art_legacy/android.jpg b/themes/modern-es-de/art_legacy/android.jpg deleted file mode 100644 index ce2b150cc..000000000 Binary files a/themes/modern-es-de/art_legacy/android.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/android.webp b/themes/modern-es-de/art_legacy/android.webp new file mode 100644 index 000000000..0435c0495 Binary files /dev/null and b/themes/modern-es-de/art_legacy/android.webp differ diff --git a/themes/modern-es-de/art_legacy/androidapps.webp b/themes/modern-es-de/art_legacy/androidapps.webp new file mode 100644 index 000000000..e896b5929 Binary files /dev/null and b/themes/modern-es-de/art_legacy/androidapps.webp differ diff --git a/themes/modern-es-de/art_legacy/androidgames.webp b/themes/modern-es-de/art_legacy/androidgames.webp new file mode 100644 index 000000000..85d6fb4a7 Binary files /dev/null and b/themes/modern-es-de/art_legacy/androidgames.webp differ diff --git a/themes/modern-es-de/art_legacy/apple2.jpg b/themes/modern-es-de/art_legacy/apple2.jpg deleted file mode 100644 index 653895623..000000000 Binary files a/themes/modern-es-de/art_legacy/apple2.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/apple2.webp b/themes/modern-es-de/art_legacy/apple2.webp new file mode 100644 index 000000000..32768cd84 Binary files /dev/null and b/themes/modern-es-de/art_legacy/apple2.webp differ diff --git a/themes/modern-es-de/art_legacy/apple2gs.jpg b/themes/modern-es-de/art_legacy/apple2gs.jpg deleted file mode 100644 index ea5da53e0..000000000 Binary files a/themes/modern-es-de/art_legacy/apple2gs.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/apple2gs.webp b/themes/modern-es-de/art_legacy/apple2gs.webp new file mode 100644 index 000000000..d9081d652 Binary files /dev/null and b/themes/modern-es-de/art_legacy/apple2gs.webp differ diff --git a/themes/modern-es-de/art_legacy/arcade.jpg b/themes/modern-es-de/art_legacy/arcade.jpg deleted file mode 100644 index 57bd4b6ab..000000000 Binary files a/themes/modern-es-de/art_legacy/arcade.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/arcade.webp b/themes/modern-es-de/art_legacy/arcade.webp new file mode 100644 index 000000000..f5066f1e0 Binary files /dev/null and b/themes/modern-es-de/art_legacy/arcade.webp differ diff --git a/themes/modern-es-de/art_legacy/arcadia.jpg b/themes/modern-es-de/art_legacy/arcadia.jpg deleted file mode 100644 index d090c4817..000000000 Binary files a/themes/modern-es-de/art_legacy/arcadia.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/arcadia.webp b/themes/modern-es-de/art_legacy/arcadia.webp new file mode 100644 index 000000000..b99d086f4 Binary files /dev/null and b/themes/modern-es-de/art_legacy/arcadia.webp differ diff --git a/themes/modern-es-de/art_legacy/archimedes.jpg b/themes/modern-es-de/art_legacy/archimedes.jpg deleted file mode 100644 index d8825d7d8..000000000 Binary files a/themes/modern-es-de/art_legacy/archimedes.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/archimedes.webp b/themes/modern-es-de/art_legacy/archimedes.webp new file mode 100644 index 000000000..47d1163ae Binary files /dev/null and b/themes/modern-es-de/art_legacy/archimedes.webp differ diff --git a/themes/modern-es-de/art_legacy/arduboy.jpg b/themes/modern-es-de/art_legacy/arduboy.jpg deleted file mode 100644 index c0e53d25d..000000000 Binary files a/themes/modern-es-de/art_legacy/arduboy.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/arduboy.webp b/themes/modern-es-de/art_legacy/arduboy.webp new file mode 100644 index 000000000..9d58712c8 Binary files /dev/null and b/themes/modern-es-de/art_legacy/arduboy.webp differ diff --git a/themes/modern-es-de/art_legacy/astrocade.jpg b/themes/modern-es-de/art_legacy/astrocade.jpg deleted file mode 100644 index 6291f68e5..000000000 Binary files a/themes/modern-es-de/art_legacy/astrocade.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/astrocade.webp b/themes/modern-es-de/art_legacy/astrocade.webp new file mode 100644 index 000000000..d00d0fa67 Binary files /dev/null and b/themes/modern-es-de/art_legacy/astrocade.webp differ diff --git a/themes/modern-es-de/art_legacy/atari2600.jpg b/themes/modern-es-de/art_legacy/atari2600.jpg deleted file mode 100644 index 69bde9a06..000000000 Binary files a/themes/modern-es-de/art_legacy/atari2600.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/atari2600.webp b/themes/modern-es-de/art_legacy/atari2600.webp new file mode 100644 index 000000000..356b57d3f Binary files /dev/null and b/themes/modern-es-de/art_legacy/atari2600.webp differ diff --git a/themes/modern-es-de/art_legacy/atari5200.jpg b/themes/modern-es-de/art_legacy/atari5200.jpg deleted file mode 100644 index df4c2cda0..000000000 Binary files a/themes/modern-es-de/art_legacy/atari5200.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/atari5200.webp b/themes/modern-es-de/art_legacy/atari5200.webp new file mode 100644 index 000000000..4566ca24f Binary files /dev/null and b/themes/modern-es-de/art_legacy/atari5200.webp differ diff --git a/themes/modern-es-de/art_legacy/atari7800.jpg b/themes/modern-es-de/art_legacy/atari7800.jpg deleted file mode 100644 index 576b873f6..000000000 Binary files a/themes/modern-es-de/art_legacy/atari7800.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/atari7800.webp b/themes/modern-es-de/art_legacy/atari7800.webp new file mode 100644 index 000000000..c97660e87 Binary files /dev/null and b/themes/modern-es-de/art_legacy/atari7800.webp differ diff --git a/themes/modern-es-de/art_legacy/atari800.jpg b/themes/modern-es-de/art_legacy/atari800.jpg deleted file mode 100644 index 4cf64f77d..000000000 Binary files a/themes/modern-es-de/art_legacy/atari800.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/atari800.webp b/themes/modern-es-de/art_legacy/atari800.webp new file mode 100644 index 000000000..12de5e901 Binary files /dev/null and b/themes/modern-es-de/art_legacy/atari800.webp differ diff --git a/themes/modern-es-de/art_legacy/atarijaguar.jpg b/themes/modern-es-de/art_legacy/atarijaguar.jpg deleted file mode 100644 index cc7814c47..000000000 Binary files a/themes/modern-es-de/art_legacy/atarijaguar.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/atarijaguar.webp b/themes/modern-es-de/art_legacy/atarijaguar.webp new file mode 100644 index 000000000..71105e04d Binary files /dev/null and b/themes/modern-es-de/art_legacy/atarijaguar.webp differ diff --git a/themes/modern-es-de/art_legacy/atarijaguarcd.jpg b/themes/modern-es-de/art_legacy/atarijaguarcd.jpg deleted file mode 100644 index 91689936c..000000000 Binary files a/themes/modern-es-de/art_legacy/atarijaguarcd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/atarijaguarcd.webp b/themes/modern-es-de/art_legacy/atarijaguarcd.webp new file mode 100644 index 000000000..abdfe3e4c Binary files /dev/null and b/themes/modern-es-de/art_legacy/atarijaguarcd.webp differ diff --git a/themes/modern-es-de/art_legacy/atarilynx.jpg b/themes/modern-es-de/art_legacy/atarilynx.jpg deleted file mode 100644 index f5d4f9daa..000000000 Binary files a/themes/modern-es-de/art_legacy/atarilynx.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/atarilynx.webp b/themes/modern-es-de/art_legacy/atarilynx.webp new file mode 100644 index 000000000..de006c04b Binary files /dev/null and b/themes/modern-es-de/art_legacy/atarilynx.webp differ diff --git a/themes/modern-es-de/art_legacy/atarist.jpg b/themes/modern-es-de/art_legacy/atarist.jpg deleted file mode 100644 index 87db8f419..000000000 Binary files a/themes/modern-es-de/art_legacy/atarist.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/atarist.webp b/themes/modern-es-de/art_legacy/atarist.webp new file mode 100644 index 000000000..3b21fdd75 Binary files /dev/null and b/themes/modern-es-de/art_legacy/atarist.webp differ diff --git a/themes/modern-es-de/art_legacy/atarixe.jpg b/themes/modern-es-de/art_legacy/atarixe.jpg deleted file mode 100644 index 8cac5044a..000000000 Binary files a/themes/modern-es-de/art_legacy/atarixe.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/atarixe.webp b/themes/modern-es-de/art_legacy/atarixe.webp new file mode 100644 index 000000000..4de3fd387 Binary files /dev/null and b/themes/modern-es-de/art_legacy/atarixe.webp differ diff --git a/themes/modern-es-de/art_legacy/atomiswave.jpg b/themes/modern-es-de/art_legacy/atomiswave.jpg deleted file mode 100644 index f7acaa3b0..000000000 Binary files a/themes/modern-es-de/art_legacy/atomiswave.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/atomiswave.webp b/themes/modern-es-de/art_legacy/atomiswave.webp new file mode 100644 index 000000000..61fab1094 Binary files /dev/null and b/themes/modern-es-de/art_legacy/atomiswave.webp differ diff --git a/themes/modern-es-de/art_legacy/auto-allgames.jpg b/themes/modern-es-de/art_legacy/auto-allgames.jpg deleted file mode 100644 index 725839237..000000000 Binary files a/themes/modern-es-de/art_legacy/auto-allgames.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/auto-allgames.webp b/themes/modern-es-de/art_legacy/auto-allgames.webp new file mode 100644 index 000000000..e1ca7a179 Binary files /dev/null and b/themes/modern-es-de/art_legacy/auto-allgames.webp differ diff --git a/themes/modern-es-de/art_legacy/auto-favorites.jpg b/themes/modern-es-de/art_legacy/auto-favorites.jpg deleted file mode 100644 index f13bf28d3..000000000 Binary files a/themes/modern-es-de/art_legacy/auto-favorites.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/auto-favorites.webp b/themes/modern-es-de/art_legacy/auto-favorites.webp new file mode 100644 index 000000000..6ba6c467e Binary files /dev/null and b/themes/modern-es-de/art_legacy/auto-favorites.webp differ diff --git a/themes/modern-es-de/art_legacy/auto-lastplayed.jpg b/themes/modern-es-de/art_legacy/auto-lastplayed.jpg deleted file mode 100644 index ebc647209..000000000 Binary files a/themes/modern-es-de/art_legacy/auto-lastplayed.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/auto-lastplayed.webp b/themes/modern-es-de/art_legacy/auto-lastplayed.webp new file mode 100644 index 000000000..7f5d1a400 Binary files /dev/null and b/themes/modern-es-de/art_legacy/auto-lastplayed.webp differ diff --git a/themes/modern-es-de/art_legacy/bbcmicro.jpg b/themes/modern-es-de/art_legacy/bbcmicro.jpg deleted file mode 100644 index b36a13ebb..000000000 Binary files a/themes/modern-es-de/art_legacy/bbcmicro.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/bbcmicro.webp b/themes/modern-es-de/art_legacy/bbcmicro.webp new file mode 100644 index 000000000..e4dfc1414 Binary files /dev/null and b/themes/modern-es-de/art_legacy/bbcmicro.webp differ diff --git a/themes/modern-es-de/art_legacy/c64.jpg b/themes/modern-es-de/art_legacy/c64.jpg deleted file mode 100644 index 95e234940..000000000 Binary files a/themes/modern-es-de/art_legacy/c64.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/c64.webp b/themes/modern-es-de/art_legacy/c64.webp new file mode 100644 index 000000000..69fb2ed48 Binary files /dev/null and b/themes/modern-es-de/art_legacy/c64.webp differ diff --git a/themes/modern-es-de/art_legacy/cdimono1.jpg b/themes/modern-es-de/art_legacy/cdimono1.jpg deleted file mode 100644 index a02031236..000000000 Binary files a/themes/modern-es-de/art_legacy/cdimono1.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/cdimono1.webp b/themes/modern-es-de/art_legacy/cdimono1.webp new file mode 100644 index 000000000..ce6424962 Binary files /dev/null and b/themes/modern-es-de/art_legacy/cdimono1.webp differ diff --git a/themes/modern-es-de/art_legacy/cdtv.jpg b/themes/modern-es-de/art_legacy/cdtv.jpg deleted file mode 100644 index 75beddc75..000000000 Binary files a/themes/modern-es-de/art_legacy/cdtv.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/cdtv.webp b/themes/modern-es-de/art_legacy/cdtv.webp new file mode 100644 index 000000000..c30779c95 Binary files /dev/null and b/themes/modern-es-de/art_legacy/cdtv.webp differ diff --git a/themes/modern-es-de/art_legacy/chailove.jpg b/themes/modern-es-de/art_legacy/chailove.jpg deleted file mode 100644 index f40a473e1..000000000 Binary files a/themes/modern-es-de/art_legacy/chailove.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/chailove.webp b/themes/modern-es-de/art_legacy/chailove.webp new file mode 100644 index 000000000..490567b5f Binary files /dev/null and b/themes/modern-es-de/art_legacy/chailove.webp differ diff --git a/themes/modern-es-de/art_legacy/channelf.jpg b/themes/modern-es-de/art_legacy/channelf.jpg deleted file mode 100644 index 1e6160a24..000000000 Binary files a/themes/modern-es-de/art_legacy/channelf.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/channelf.webp b/themes/modern-es-de/art_legacy/channelf.webp new file mode 100644 index 000000000..d5cf51510 Binary files /dev/null and b/themes/modern-es-de/art_legacy/channelf.webp differ diff --git a/themes/modern-es-de/art_legacy/coco.jpg b/themes/modern-es-de/art_legacy/coco.jpg deleted file mode 100644 index 03af2580f..000000000 Binary files a/themes/modern-es-de/art_legacy/coco.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/coco.webp b/themes/modern-es-de/art_legacy/coco.webp new file mode 100644 index 000000000..0bddd25d3 Binary files /dev/null and b/themes/modern-es-de/art_legacy/coco.webp differ diff --git a/themes/modern-es-de/art_legacy/colecovision.jpg b/themes/modern-es-de/art_legacy/colecovision.jpg deleted file mode 100644 index b4c7999ab..000000000 Binary files a/themes/modern-es-de/art_legacy/colecovision.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/colecovision.webp b/themes/modern-es-de/art_legacy/colecovision.webp new file mode 100644 index 000000000..dbe8d432c Binary files /dev/null and b/themes/modern-es-de/art_legacy/colecovision.webp differ diff --git a/themes/modern-es-de/art_legacy/consolearcade.jpg b/themes/modern-es-de/art_legacy/consolearcade.jpg deleted file mode 100644 index fee352c07..000000000 Binary files a/themes/modern-es-de/art_legacy/consolearcade.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/consolearcade.webp b/themes/modern-es-de/art_legacy/consolearcade.webp new file mode 100644 index 000000000..0da1fcc18 Binary files /dev/null and b/themes/modern-es-de/art_legacy/consolearcade.webp differ diff --git a/themes/modern-es-de/art_legacy/cps.jpg b/themes/modern-es-de/art_legacy/cps.jpg deleted file mode 100644 index 40b80d6e4..000000000 Binary files a/themes/modern-es-de/art_legacy/cps.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/cps.webp b/themes/modern-es-de/art_legacy/cps.webp new file mode 100644 index 000000000..a85256136 Binary files /dev/null and b/themes/modern-es-de/art_legacy/cps.webp differ diff --git a/themes/modern-es-de/art_legacy/cps1.jpg b/themes/modern-es-de/art_legacy/cps1.jpg deleted file mode 100644 index a0c54776e..000000000 Binary files a/themes/modern-es-de/art_legacy/cps1.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/cps1.webp b/themes/modern-es-de/art_legacy/cps1.webp new file mode 100644 index 000000000..882afe22e Binary files /dev/null and b/themes/modern-es-de/art_legacy/cps1.webp differ diff --git a/themes/modern-es-de/art_legacy/cps2.jpg b/themes/modern-es-de/art_legacy/cps2.jpg deleted file mode 100644 index 8583ce597..000000000 Binary files a/themes/modern-es-de/art_legacy/cps2.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/cps2.webp b/themes/modern-es-de/art_legacy/cps2.webp new file mode 100644 index 000000000..eb22002ea Binary files /dev/null and b/themes/modern-es-de/art_legacy/cps2.webp differ diff --git a/themes/modern-es-de/art_legacy/cps3.jpg b/themes/modern-es-de/art_legacy/cps3.jpg deleted file mode 100644 index 0d8838871..000000000 Binary files a/themes/modern-es-de/art_legacy/cps3.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/cps3.webp b/themes/modern-es-de/art_legacy/cps3.webp new file mode 100644 index 000000000..fbca849b8 Binary files /dev/null and b/themes/modern-es-de/art_legacy/cps3.webp differ diff --git a/themes/modern-es-de/art_legacy/crvision.jpg b/themes/modern-es-de/art_legacy/crvision.jpg deleted file mode 100644 index a2ce49c26..000000000 Binary files a/themes/modern-es-de/art_legacy/crvision.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/crvision.webp b/themes/modern-es-de/art_legacy/crvision.webp new file mode 100644 index 000000000..3f5b955e6 Binary files /dev/null and b/themes/modern-es-de/art_legacy/crvision.webp differ diff --git a/themes/modern-es-de/art_legacy/custom-collections.jpg b/themes/modern-es-de/art_legacy/custom-collections.jpg deleted file mode 100644 index c7df5111e..000000000 Binary files a/themes/modern-es-de/art_legacy/custom-collections.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/custom-collections.webp b/themes/modern-es-de/art_legacy/custom-collections.webp new file mode 100644 index 000000000..d9bcedcfc Binary files /dev/null and b/themes/modern-es-de/art_legacy/custom-collections.webp differ diff --git a/themes/modern-es-de/art_legacy/daphne.jpg b/themes/modern-es-de/art_legacy/daphne.jpg deleted file mode 100644 index a4885cbaa..000000000 Binary files a/themes/modern-es-de/art_legacy/daphne.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/daphne.webp b/themes/modern-es-de/art_legacy/daphne.webp new file mode 100644 index 000000000..b1e732e9f Binary files /dev/null and b/themes/modern-es-de/art_legacy/daphne.webp differ diff --git a/themes/modern-es-de/art_legacy/desktop.jpg b/themes/modern-es-de/art_legacy/desktop.jpg deleted file mode 100644 index df87252ed..000000000 Binary files a/themes/modern-es-de/art_legacy/desktop.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/desktop.webp b/themes/modern-es-de/art_legacy/desktop.webp new file mode 100644 index 000000000..9677b8b06 Binary files /dev/null and b/themes/modern-es-de/art_legacy/desktop.webp differ diff --git a/themes/modern-es-de/art_legacy/doom.jpg b/themes/modern-es-de/art_legacy/doom.jpg deleted file mode 100644 index 3c7502c45..000000000 Binary files a/themes/modern-es-de/art_legacy/doom.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/doom.webp b/themes/modern-es-de/art_legacy/doom.webp new file mode 100644 index 000000000..46a0c0d03 Binary files /dev/null and b/themes/modern-es-de/art_legacy/doom.webp differ diff --git a/themes/modern-es-de/art_legacy/dos.jpg b/themes/modern-es-de/art_legacy/dos.jpg deleted file mode 100644 index c33e1e383..000000000 Binary files a/themes/modern-es-de/art_legacy/dos.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/dos.webp b/themes/modern-es-de/art_legacy/dos.webp new file mode 100644 index 000000000..1e1ffc7d4 Binary files /dev/null and b/themes/modern-es-de/art_legacy/dos.webp differ diff --git a/themes/modern-es-de/art_legacy/dragon32.jpg b/themes/modern-es-de/art_legacy/dragon32.jpg deleted file mode 100644 index b9a662770..000000000 Binary files a/themes/modern-es-de/art_legacy/dragon32.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/dragon32.webp b/themes/modern-es-de/art_legacy/dragon32.webp new file mode 100644 index 000000000..c3d3802a1 Binary files /dev/null and b/themes/modern-es-de/art_legacy/dragon32.webp differ diff --git a/themes/modern-es-de/art_legacy/dreamcast.jpg b/themes/modern-es-de/art_legacy/dreamcast.jpg deleted file mode 100644 index 8a98f8209..000000000 Binary files a/themes/modern-es-de/art_legacy/dreamcast.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/dreamcast.webp b/themes/modern-es-de/art_legacy/dreamcast.webp new file mode 100644 index 000000000..35af06a70 Binary files /dev/null and b/themes/modern-es-de/art_legacy/dreamcast.webp differ diff --git a/themes/modern-es-de/art_legacy/easyrpg.jpg b/themes/modern-es-de/art_legacy/easyrpg.jpg deleted file mode 100644 index 2cbdda547..000000000 Binary files a/themes/modern-es-de/art_legacy/easyrpg.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/easyrpg.webp b/themes/modern-es-de/art_legacy/easyrpg.webp new file mode 100644 index 000000000..4364ddbda Binary files /dev/null and b/themes/modern-es-de/art_legacy/easyrpg.webp differ diff --git a/themes/modern-es-de/art_legacy/electron.jpg b/themes/modern-es-de/art_legacy/electron.jpg deleted file mode 100644 index e035dd9ab..000000000 Binary files a/themes/modern-es-de/art_legacy/electron.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/electron.webp b/themes/modern-es-de/art_legacy/electron.webp new file mode 100644 index 000000000..74f9473f1 Binary files /dev/null and b/themes/modern-es-de/art_legacy/electron.webp differ diff --git a/themes/modern-es-de/art_legacy/emulators.jpg b/themes/modern-es-de/art_legacy/emulators.jpg deleted file mode 100644 index 4539794a3..000000000 Binary files a/themes/modern-es-de/art_legacy/emulators.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/emulators.webp b/themes/modern-es-de/art_legacy/emulators.webp new file mode 100644 index 000000000..62c2a94df Binary files /dev/null and b/themes/modern-es-de/art_legacy/emulators.webp differ diff --git a/themes/modern-es-de/art_legacy/epic.jpg b/themes/modern-es-de/art_legacy/epic.jpg deleted file mode 100644 index b5d12a290..000000000 Binary files a/themes/modern-es-de/art_legacy/epic.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/epic.webp b/themes/modern-es-de/art_legacy/epic.webp new file mode 100644 index 000000000..dec4dc784 Binary files /dev/null and b/themes/modern-es-de/art_legacy/epic.webp differ diff --git a/themes/modern-es-de/art_legacy/famicom.jpg b/themes/modern-es-de/art_legacy/famicom.jpg deleted file mode 100644 index 55f698a68..000000000 Binary files a/themes/modern-es-de/art_legacy/famicom.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/famicom.webp b/themes/modern-es-de/art_legacy/famicom.webp new file mode 100644 index 000000000..a7ece753a Binary files /dev/null and b/themes/modern-es-de/art_legacy/famicom.webp differ diff --git a/themes/modern-es-de/art_legacy/fba.jpg b/themes/modern-es-de/art_legacy/fba.jpg deleted file mode 100644 index 9561689ab..000000000 Binary files a/themes/modern-es-de/art_legacy/fba.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/fba.webp b/themes/modern-es-de/art_legacy/fba.webp new file mode 100644 index 000000000..e190542ed Binary files /dev/null and b/themes/modern-es-de/art_legacy/fba.webp differ diff --git a/themes/modern-es-de/art_legacy/fbneo.jpg b/themes/modern-es-de/art_legacy/fbneo.jpg deleted file mode 100644 index 2877ec832..000000000 Binary files a/themes/modern-es-de/art_legacy/fbneo.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/fbneo.webp b/themes/modern-es-de/art_legacy/fbneo.webp new file mode 100644 index 000000000..760990114 Binary files /dev/null and b/themes/modern-es-de/art_legacy/fbneo.webp differ diff --git a/themes/modern-es-de/art_legacy/fds.jpg b/themes/modern-es-de/art_legacy/fds.jpg deleted file mode 100644 index 3ee448fe7..000000000 Binary files a/themes/modern-es-de/art_legacy/fds.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/fds.webp b/themes/modern-es-de/art_legacy/fds.webp new file mode 100644 index 000000000..899f649a5 Binary files /dev/null and b/themes/modern-es-de/art_legacy/fds.webp differ diff --git a/themes/modern-es-de/art_legacy/flash.jpg b/themes/modern-es-de/art_legacy/flash.jpg deleted file mode 100644 index b527b2142..000000000 Binary files a/themes/modern-es-de/art_legacy/flash.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/flash.webp b/themes/modern-es-de/art_legacy/flash.webp new file mode 100644 index 000000000..583720779 Binary files /dev/null and b/themes/modern-es-de/art_legacy/flash.webp differ diff --git a/themes/modern-es-de/art_legacy/fm7.jpg b/themes/modern-es-de/art_legacy/fm7.jpg deleted file mode 100644 index 260871ad0..000000000 Binary files a/themes/modern-es-de/art_legacy/fm7.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/fm7.webp b/themes/modern-es-de/art_legacy/fm7.webp new file mode 100644 index 000000000..04a64a6d7 Binary files /dev/null and b/themes/modern-es-de/art_legacy/fm7.webp differ diff --git a/themes/modern-es-de/art_legacy/fmtowns.jpg b/themes/modern-es-de/art_legacy/fmtowns.jpg deleted file mode 100644 index 989884b63..000000000 Binary files a/themes/modern-es-de/art_legacy/fmtowns.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/fmtowns.webp b/themes/modern-es-de/art_legacy/fmtowns.webp new file mode 100644 index 000000000..2f2b76930 Binary files /dev/null and b/themes/modern-es-de/art_legacy/fmtowns.webp differ diff --git a/themes/modern-es-de/art_legacy/fpinball.jpg b/themes/modern-es-de/art_legacy/fpinball.jpg deleted file mode 100644 index 9c9d80bc8..000000000 Binary files a/themes/modern-es-de/art_legacy/fpinball.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/fpinball.webp b/themes/modern-es-de/art_legacy/fpinball.webp new file mode 100644 index 000000000..1707ad7bf Binary files /dev/null and b/themes/modern-es-de/art_legacy/fpinball.webp differ diff --git a/themes/modern-es-de/art_legacy/gamate.jpg b/themes/modern-es-de/art_legacy/gamate.jpg deleted file mode 100644 index b8a3e80d7..000000000 Binary files a/themes/modern-es-de/art_legacy/gamate.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/gamate.webp b/themes/modern-es-de/art_legacy/gamate.webp new file mode 100644 index 000000000..b13bd69f1 Binary files /dev/null and b/themes/modern-es-de/art_legacy/gamate.webp differ diff --git a/themes/modern-es-de/art_legacy/gameandwatch.jpg b/themes/modern-es-de/art_legacy/gameandwatch.jpg deleted file mode 100644 index e830c4126..000000000 Binary files a/themes/modern-es-de/art_legacy/gameandwatch.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/gameandwatch.webp b/themes/modern-es-de/art_legacy/gameandwatch.webp new file mode 100644 index 000000000..bfe8a4e1a Binary files /dev/null and b/themes/modern-es-de/art_legacy/gameandwatch.webp differ diff --git a/themes/modern-es-de/art_legacy/gamecom.jpg b/themes/modern-es-de/art_legacy/gamecom.jpg deleted file mode 100644 index c17055259..000000000 Binary files a/themes/modern-es-de/art_legacy/gamecom.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/gamecom.webp b/themes/modern-es-de/art_legacy/gamecom.webp new file mode 100644 index 000000000..7bd6edd4a Binary files /dev/null and b/themes/modern-es-de/art_legacy/gamecom.webp differ diff --git a/themes/modern-es-de/art_legacy/gamegear.jpg b/themes/modern-es-de/art_legacy/gamegear.jpg deleted file mode 100644 index 9732c68c8..000000000 Binary files a/themes/modern-es-de/art_legacy/gamegear.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/gamegear.webp b/themes/modern-es-de/art_legacy/gamegear.webp new file mode 100644 index 000000000..b8535df31 Binary files /dev/null and b/themes/modern-es-de/art_legacy/gamegear.webp differ diff --git a/themes/modern-es-de/art_legacy/gb.jpg b/themes/modern-es-de/art_legacy/gb.jpg deleted file mode 100644 index 919cb349c..000000000 Binary files a/themes/modern-es-de/art_legacy/gb.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/gb.webp b/themes/modern-es-de/art_legacy/gb.webp new file mode 100644 index 000000000..da1f3308b Binary files /dev/null and b/themes/modern-es-de/art_legacy/gb.webp differ diff --git a/themes/modern-es-de/art_legacy/gba.jpg b/themes/modern-es-de/art_legacy/gba.jpg deleted file mode 100644 index 7fd5ab167..000000000 Binary files a/themes/modern-es-de/art_legacy/gba.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/gba.webp b/themes/modern-es-de/art_legacy/gba.webp new file mode 100644 index 000000000..2feb040f1 Binary files /dev/null and b/themes/modern-es-de/art_legacy/gba.webp differ diff --git a/themes/modern-es-de/art_legacy/gbc.jpg b/themes/modern-es-de/art_legacy/gbc.jpg deleted file mode 100644 index 55aa95756..000000000 Binary files a/themes/modern-es-de/art_legacy/gbc.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/gbc.webp b/themes/modern-es-de/art_legacy/gbc.webp new file mode 100644 index 000000000..d7f4b2ec6 Binary files /dev/null and b/themes/modern-es-de/art_legacy/gbc.webp differ diff --git a/themes/modern-es-de/art_legacy/gc.jpg b/themes/modern-es-de/art_legacy/gc.jpg deleted file mode 100644 index 8f084f7ec..000000000 Binary files a/themes/modern-es-de/art_legacy/gc.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/gc.webp b/themes/modern-es-de/art_legacy/gc.webp new file mode 100644 index 000000000..2eba4a2be Binary files /dev/null and b/themes/modern-es-de/art_legacy/gc.webp differ diff --git a/themes/modern-es-de/art_legacy/genesis.jpg b/themes/modern-es-de/art_legacy/genesis.jpg deleted file mode 100644 index ea4577f57..000000000 Binary files a/themes/modern-es-de/art_legacy/genesis.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/genesis.webp b/themes/modern-es-de/art_legacy/genesis.webp new file mode 100644 index 000000000..856562775 Binary files /dev/null and b/themes/modern-es-de/art_legacy/genesis.webp differ diff --git a/themes/modern-es-de/art_legacy/gmaster.jpg b/themes/modern-es-de/art_legacy/gmaster.jpg deleted file mode 100644 index 6fc1102d7..000000000 Binary files a/themes/modern-es-de/art_legacy/gmaster.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/gmaster.webp b/themes/modern-es-de/art_legacy/gmaster.webp new file mode 100644 index 000000000..bea29a0a5 Binary files /dev/null and b/themes/modern-es-de/art_legacy/gmaster.webp differ diff --git a/themes/modern-es-de/art_legacy/gog.jpg b/themes/modern-es-de/art_legacy/gog.jpg deleted file mode 100644 index 4f75395a6..000000000 Binary files a/themes/modern-es-de/art_legacy/gog.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/gog.webp b/themes/modern-es-de/art_legacy/gog.webp new file mode 100644 index 000000000..39dad66b1 Binary files /dev/null and b/themes/modern-es-de/art_legacy/gog.webp differ diff --git a/themes/modern-es-de/art_legacy/gx4000.jpg b/themes/modern-es-de/art_legacy/gx4000.jpg deleted file mode 100644 index 3ee0b9218..000000000 Binary files a/themes/modern-es-de/art_legacy/gx4000.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/gx4000.webp b/themes/modern-es-de/art_legacy/gx4000.webp new file mode 100644 index 000000000..dbf22f5a1 Binary files /dev/null and b/themes/modern-es-de/art_legacy/gx4000.webp differ diff --git a/themes/modern-es-de/art_legacy/ibm.jpg b/themes/modern-es-de/art_legacy/ibm.jpg deleted file mode 100644 index efea0e322..000000000 Binary files a/themes/modern-es-de/art_legacy/ibm.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/ibm.webp b/themes/modern-es-de/art_legacy/ibm.webp new file mode 100644 index 000000000..cc36d9932 Binary files /dev/null and b/themes/modern-es-de/art_legacy/ibm.webp differ diff --git a/themes/modern-es-de/art_legacy/intellivision.jpg b/themes/modern-es-de/art_legacy/intellivision.jpg deleted file mode 100644 index c65be0403..000000000 Binary files a/themes/modern-es-de/art_legacy/intellivision.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/intellivision.webp b/themes/modern-es-de/art_legacy/intellivision.webp new file mode 100644 index 000000000..931ee9825 Binary files /dev/null and b/themes/modern-es-de/art_legacy/intellivision.webp differ diff --git a/themes/modern-es-de/art_legacy/j2me.jpg b/themes/modern-es-de/art_legacy/j2me.jpg deleted file mode 100644 index 671c5e1e2..000000000 Binary files a/themes/modern-es-de/art_legacy/j2me.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/j2me.webp b/themes/modern-es-de/art_legacy/j2me.webp new file mode 100644 index 000000000..c12a5e62f Binary files /dev/null and b/themes/modern-es-de/art_legacy/j2me.webp differ diff --git a/themes/modern-es-de/art_legacy/kodi.jpg b/themes/modern-es-de/art_legacy/kodi.jpg deleted file mode 100644 index 399611920..000000000 Binary files a/themes/modern-es-de/art_legacy/kodi.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/kodi.webp b/themes/modern-es-de/art_legacy/kodi.webp new file mode 100644 index 000000000..eaaa0fc3f Binary files /dev/null and b/themes/modern-es-de/art_legacy/kodi.webp differ diff --git a/themes/modern-es-de/art_legacy/laserdisc.jpg b/themes/modern-es-de/art_legacy/laserdisc.jpg deleted file mode 100644 index a4885cbaa..000000000 Binary files a/themes/modern-es-de/art_legacy/laserdisc.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/laserdisc.webp b/themes/modern-es-de/art_legacy/laserdisc.webp new file mode 100644 index 000000000..b1e732e9f Binary files /dev/null and b/themes/modern-es-de/art_legacy/laserdisc.webp differ diff --git a/themes/modern-es-de/art_legacy/lcdgames.jpg b/themes/modern-es-de/art_legacy/lcdgames.jpg deleted file mode 100644 index f17866f3a..000000000 Binary files a/themes/modern-es-de/art_legacy/lcdgames.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/lcdgames.webp b/themes/modern-es-de/art_legacy/lcdgames.webp new file mode 100644 index 000000000..4e9f9ef97 Binary files /dev/null and b/themes/modern-es-de/art_legacy/lcdgames.webp differ diff --git a/themes/modern-es-de/art_legacy/love.jpg b/themes/modern-es-de/art_legacy/love.jpg deleted file mode 100644 index e5118b7f8..000000000 Binary files a/themes/modern-es-de/art_legacy/love.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/love.webp b/themes/modern-es-de/art_legacy/love.webp new file mode 100644 index 000000000..d4e108857 Binary files /dev/null and b/themes/modern-es-de/art_legacy/love.webp differ diff --git a/themes/modern-es-de/art_legacy/lowresnx.jpg b/themes/modern-es-de/art_legacy/lowresnx.jpg deleted file mode 100644 index 4e82a7232..000000000 Binary files a/themes/modern-es-de/art_legacy/lowresnx.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/lowresnx.webp b/themes/modern-es-de/art_legacy/lowresnx.webp new file mode 100644 index 000000000..b2d12bcfc Binary files /dev/null and b/themes/modern-es-de/art_legacy/lowresnx.webp differ diff --git a/themes/modern-es-de/art_legacy/lutris.jpg b/themes/modern-es-de/art_legacy/lutris.jpg deleted file mode 100644 index dea1624ca..000000000 Binary files a/themes/modern-es-de/art_legacy/lutris.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/lutris.webp b/themes/modern-es-de/art_legacy/lutris.webp new file mode 100644 index 000000000..52b371d4a Binary files /dev/null and b/themes/modern-es-de/art_legacy/lutris.webp differ diff --git a/themes/modern-es-de/art_legacy/lutro.jpg b/themes/modern-es-de/art_legacy/lutro.jpg deleted file mode 100644 index 86482f40c..000000000 Binary files a/themes/modern-es-de/art_legacy/lutro.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/lutro.webp b/themes/modern-es-de/art_legacy/lutro.webp new file mode 100644 index 000000000..4c8503fbe Binary files /dev/null and b/themes/modern-es-de/art_legacy/lutro.webp differ diff --git a/themes/modern-es-de/art_legacy/macintosh.jpg b/themes/modern-es-de/art_legacy/macintosh.jpg deleted file mode 100644 index 5d2c549e4..000000000 Binary files a/themes/modern-es-de/art_legacy/macintosh.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/macintosh.webp b/themes/modern-es-de/art_legacy/macintosh.webp new file mode 100644 index 000000000..6be4a1ea7 Binary files /dev/null and b/themes/modern-es-de/art_legacy/macintosh.webp differ diff --git a/themes/modern-es-de/art_legacy/mame-advmame.jpg b/themes/modern-es-de/art_legacy/mame-advmame.jpg deleted file mode 100644 index e791c9d52..000000000 Binary files a/themes/modern-es-de/art_legacy/mame-advmame.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/mame-advmame.webp b/themes/modern-es-de/art_legacy/mame-advmame.webp new file mode 100644 index 000000000..37fde7fb2 Binary files /dev/null and b/themes/modern-es-de/art_legacy/mame-advmame.webp differ diff --git a/themes/modern-es-de/art_legacy/mame-libretro.jpg b/themes/modern-es-de/art_legacy/mame-libretro.jpg deleted file mode 100644 index 9c2b1482e..000000000 Binary files a/themes/modern-es-de/art_legacy/mame-libretro.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/mame-libretro.webp b/themes/modern-es-de/art_legacy/mame-libretro.webp new file mode 100644 index 000000000..37f7f5c98 Binary files /dev/null and b/themes/modern-es-de/art_legacy/mame-libretro.webp differ diff --git a/themes/modern-es-de/art_legacy/mame.jpg b/themes/modern-es-de/art_legacy/mame.jpg deleted file mode 100644 index f0492a75d..000000000 Binary files a/themes/modern-es-de/art_legacy/mame.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/mame.webp b/themes/modern-es-de/art_legacy/mame.webp new file mode 100644 index 000000000..9779264a2 Binary files /dev/null and b/themes/modern-es-de/art_legacy/mame.webp differ diff --git a/themes/modern-es-de/art_legacy/mastersystem.jpg b/themes/modern-es-de/art_legacy/mastersystem.jpg deleted file mode 100644 index 13327c3b8..000000000 Binary files a/themes/modern-es-de/art_legacy/mastersystem.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/mastersystem.webp b/themes/modern-es-de/art_legacy/mastersystem.webp new file mode 100644 index 000000000..2ee23a996 Binary files /dev/null and b/themes/modern-es-de/art_legacy/mastersystem.webp differ diff --git a/themes/modern-es-de/art_legacy/megacd.jpg b/themes/modern-es-de/art_legacy/megacd.jpg deleted file mode 100644 index 8eede7ce4..000000000 Binary files a/themes/modern-es-de/art_legacy/megacd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/megacd.webp b/themes/modern-es-de/art_legacy/megacd.webp new file mode 100644 index 000000000..2b1796753 Binary files /dev/null and b/themes/modern-es-de/art_legacy/megacd.webp differ diff --git a/themes/modern-es-de/art_legacy/megacdjp.jpg b/themes/modern-es-de/art_legacy/megacdjp.jpg deleted file mode 100644 index 68226c7b8..000000000 Binary files a/themes/modern-es-de/art_legacy/megacdjp.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/megacdjp.webp b/themes/modern-es-de/art_legacy/megacdjp.webp new file mode 100644 index 000000000..16ceca602 Binary files /dev/null and b/themes/modern-es-de/art_legacy/megacdjp.webp differ diff --git a/themes/modern-es-de/art_legacy/megadrive.jpg b/themes/modern-es-de/art_legacy/megadrive.jpg deleted file mode 100644 index 3aa994fbb..000000000 Binary files a/themes/modern-es-de/art_legacy/megadrive.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/megadrive.webp b/themes/modern-es-de/art_legacy/megadrive.webp new file mode 100644 index 000000000..ac284c9f3 Binary files /dev/null and b/themes/modern-es-de/art_legacy/megadrive.webp differ diff --git a/themes/modern-es-de/art_legacy/megadrivejp.jpg b/themes/modern-es-de/art_legacy/megadrivejp.jpg deleted file mode 100644 index 1cd14362a..000000000 Binary files a/themes/modern-es-de/art_legacy/megadrivejp.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/megadrivejp.webp b/themes/modern-es-de/art_legacy/megadrivejp.webp new file mode 100644 index 000000000..028fbbcb6 Binary files /dev/null and b/themes/modern-es-de/art_legacy/megadrivejp.webp differ diff --git a/themes/modern-es-de/art_legacy/megaduck.jpg b/themes/modern-es-de/art_legacy/megaduck.jpg deleted file mode 100644 index 7fc1dc17e..000000000 Binary files a/themes/modern-es-de/art_legacy/megaduck.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/megaduck.webp b/themes/modern-es-de/art_legacy/megaduck.webp new file mode 100644 index 000000000..b1e1e2551 Binary files /dev/null and b/themes/modern-es-de/art_legacy/megaduck.webp differ diff --git a/themes/modern-es-de/art_legacy/mess.jpg b/themes/modern-es-de/art_legacy/mess.jpg deleted file mode 100644 index d0d9e6696..000000000 Binary files a/themes/modern-es-de/art_legacy/mess.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/mess.webp b/themes/modern-es-de/art_legacy/mess.webp new file mode 100644 index 000000000..d8a47be36 Binary files /dev/null and b/themes/modern-es-de/art_legacy/mess.webp differ diff --git a/themes/modern-es-de/art_legacy/model2.jpg b/themes/modern-es-de/art_legacy/model2.jpg deleted file mode 100644 index 7160b79a8..000000000 Binary files a/themes/modern-es-de/art_legacy/model2.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/model2.webp b/themes/modern-es-de/art_legacy/model2.webp new file mode 100644 index 000000000..f6f5d1a9b Binary files /dev/null and b/themes/modern-es-de/art_legacy/model2.webp differ diff --git a/themes/modern-es-de/art_legacy/model3.jpg b/themes/modern-es-de/art_legacy/model3.jpg deleted file mode 100644 index a5e73293b..000000000 Binary files a/themes/modern-es-de/art_legacy/model3.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/model3.webp b/themes/modern-es-de/art_legacy/model3.webp new file mode 100644 index 000000000..3a2da502b Binary files /dev/null and b/themes/modern-es-de/art_legacy/model3.webp differ diff --git a/themes/modern-es-de/art_legacy/moto.jpg b/themes/modern-es-de/art_legacy/moto.jpg deleted file mode 100644 index 013519c80..000000000 Binary files a/themes/modern-es-de/art_legacy/moto.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/moto.webp b/themes/modern-es-de/art_legacy/moto.webp new file mode 100644 index 000000000..511efded1 Binary files /dev/null and b/themes/modern-es-de/art_legacy/moto.webp differ diff --git a/themes/modern-es-de/art_legacy/msx.jpg b/themes/modern-es-de/art_legacy/msx.jpg deleted file mode 100644 index d93b9513a..000000000 Binary files a/themes/modern-es-de/art_legacy/msx.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/msx.webp b/themes/modern-es-de/art_legacy/msx.webp new file mode 100644 index 000000000..b891489ad Binary files /dev/null and b/themes/modern-es-de/art_legacy/msx.webp differ diff --git a/themes/modern-es-de/art_legacy/msx1.jpg b/themes/modern-es-de/art_legacy/msx1.jpg deleted file mode 100644 index 6d3bbc977..000000000 Binary files a/themes/modern-es-de/art_legacy/msx1.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/msx1.webp b/themes/modern-es-de/art_legacy/msx1.webp new file mode 100644 index 000000000..0c0f6b70e Binary files /dev/null and b/themes/modern-es-de/art_legacy/msx1.webp differ diff --git a/themes/modern-es-de/art_legacy/msx2.jpg b/themes/modern-es-de/art_legacy/msx2.jpg deleted file mode 100644 index fc47011e7..000000000 Binary files a/themes/modern-es-de/art_legacy/msx2.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/msx2.webp b/themes/modern-es-de/art_legacy/msx2.webp new file mode 100644 index 000000000..69c979e6b Binary files /dev/null and b/themes/modern-es-de/art_legacy/msx2.webp differ diff --git a/themes/modern-es-de/art_legacy/msxturbor.jpg b/themes/modern-es-de/art_legacy/msxturbor.jpg deleted file mode 100644 index f8ab489cf..000000000 Binary files a/themes/modern-es-de/art_legacy/msxturbor.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/msxturbor.webp b/themes/modern-es-de/art_legacy/msxturbor.webp new file mode 100644 index 000000000..8c2fea2b4 Binary files /dev/null and b/themes/modern-es-de/art_legacy/msxturbor.webp differ diff --git a/themes/modern-es-de/art_legacy/mugen.jpg b/themes/modern-es-de/art_legacy/mugen.jpg deleted file mode 100644 index e36a57fc4..000000000 Binary files a/themes/modern-es-de/art_legacy/mugen.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/mugen.webp b/themes/modern-es-de/art_legacy/mugen.webp new file mode 100644 index 000000000..da716cb09 Binary files /dev/null and b/themes/modern-es-de/art_legacy/mugen.webp differ diff --git a/themes/modern-es-de/art_legacy/multivision.jpg b/themes/modern-es-de/art_legacy/multivision.jpg deleted file mode 100644 index 0eef6f065..000000000 Binary files a/themes/modern-es-de/art_legacy/multivision.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/multivision.webp b/themes/modern-es-de/art_legacy/multivision.webp new file mode 100644 index 000000000..d10969276 Binary files /dev/null and b/themes/modern-es-de/art_legacy/multivision.webp differ diff --git a/themes/modern-es-de/art_legacy/n3ds.jpg b/themes/modern-es-de/art_legacy/n3ds.jpg deleted file mode 100644 index ff79582dd..000000000 Binary files a/themes/modern-es-de/art_legacy/n3ds.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/n3ds.webp b/themes/modern-es-de/art_legacy/n3ds.webp new file mode 100644 index 000000000..86ecd8c1d Binary files /dev/null and b/themes/modern-es-de/art_legacy/n3ds.webp differ diff --git a/themes/modern-es-de/art_legacy/n64.jpg b/themes/modern-es-de/art_legacy/n64.jpg deleted file mode 100644 index 9c757d366..000000000 Binary files a/themes/modern-es-de/art_legacy/n64.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/n64.webp b/themes/modern-es-de/art_legacy/n64.webp new file mode 100644 index 000000000..f5e290f46 Binary files /dev/null and b/themes/modern-es-de/art_legacy/n64.webp differ diff --git a/themes/modern-es-de/art_legacy/n64dd.jpg b/themes/modern-es-de/art_legacy/n64dd.jpg deleted file mode 100644 index e9ba35f0e..000000000 Binary files a/themes/modern-es-de/art_legacy/n64dd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/n64dd.webp b/themes/modern-es-de/art_legacy/n64dd.webp new file mode 100644 index 000000000..f1355e60c Binary files /dev/null and b/themes/modern-es-de/art_legacy/n64dd.webp differ diff --git a/themes/modern-es-de/art_legacy/naomi.jpg b/themes/modern-es-de/art_legacy/naomi.jpg deleted file mode 100644 index e25cb85e2..000000000 Binary files a/themes/modern-es-de/art_legacy/naomi.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/naomi.webp b/themes/modern-es-de/art_legacy/naomi.webp new file mode 100644 index 000000000..41ba6f277 Binary files /dev/null and b/themes/modern-es-de/art_legacy/naomi.webp differ diff --git a/themes/modern-es-de/art_legacy/naomi2.jpg b/themes/modern-es-de/art_legacy/naomi2.jpg deleted file mode 100644 index 1ce88d977..000000000 Binary files a/themes/modern-es-de/art_legacy/naomi2.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/naomi2.webp b/themes/modern-es-de/art_legacy/naomi2.webp new file mode 100644 index 000000000..fbef60ca3 Binary files /dev/null and b/themes/modern-es-de/art_legacy/naomi2.webp differ diff --git a/themes/modern-es-de/art_legacy/naomigd.jpg b/themes/modern-es-de/art_legacy/naomigd.jpg deleted file mode 100644 index ae9b0dc37..000000000 Binary files a/themes/modern-es-de/art_legacy/naomigd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/naomigd.webp b/themes/modern-es-de/art_legacy/naomigd.webp new file mode 100644 index 000000000..b0368a1d0 Binary files /dev/null and b/themes/modern-es-de/art_legacy/naomigd.webp differ diff --git a/themes/modern-es-de/art_legacy/nds.jpg b/themes/modern-es-de/art_legacy/nds.jpg deleted file mode 100644 index c795c4376..000000000 Binary files a/themes/modern-es-de/art_legacy/nds.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/nds.webp b/themes/modern-es-de/art_legacy/nds.webp new file mode 100644 index 000000000..51a0fe462 Binary files /dev/null and b/themes/modern-es-de/art_legacy/nds.webp differ diff --git a/themes/modern-es-de/art_legacy/neogeo.jpg b/themes/modern-es-de/art_legacy/neogeo.jpg deleted file mode 100644 index a331f98c3..000000000 Binary files a/themes/modern-es-de/art_legacy/neogeo.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/neogeo.webp b/themes/modern-es-de/art_legacy/neogeo.webp new file mode 100644 index 000000000..4db5a9d5b Binary files /dev/null and b/themes/modern-es-de/art_legacy/neogeo.webp differ diff --git a/themes/modern-es-de/art_legacy/neogeocd.jpg b/themes/modern-es-de/art_legacy/neogeocd.jpg deleted file mode 100644 index 6498e38b5..000000000 Binary files a/themes/modern-es-de/art_legacy/neogeocd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/neogeocd.webp b/themes/modern-es-de/art_legacy/neogeocd.webp new file mode 100644 index 000000000..c02906e82 Binary files /dev/null and b/themes/modern-es-de/art_legacy/neogeocd.webp differ diff --git a/themes/modern-es-de/art_legacy/neogeocdjp.jpg b/themes/modern-es-de/art_legacy/neogeocdjp.jpg deleted file mode 100644 index 2a62c92a4..000000000 Binary files a/themes/modern-es-de/art_legacy/neogeocdjp.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/neogeocdjp.webp b/themes/modern-es-de/art_legacy/neogeocdjp.webp new file mode 100644 index 000000000..dac759bfd Binary files /dev/null and b/themes/modern-es-de/art_legacy/neogeocdjp.webp differ diff --git a/themes/modern-es-de/art_legacy/nes.jpg b/themes/modern-es-de/art_legacy/nes.jpg deleted file mode 100644 index 3fcb03fb5..000000000 Binary files a/themes/modern-es-de/art_legacy/nes.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/nes.webp b/themes/modern-es-de/art_legacy/nes.webp new file mode 100644 index 000000000..8693e0c6f Binary files /dev/null and b/themes/modern-es-de/art_legacy/nes.webp differ diff --git a/themes/modern-es-de/art_legacy/ngage.jpg b/themes/modern-es-de/art_legacy/ngage.jpg deleted file mode 100644 index 9041f45f5..000000000 Binary files a/themes/modern-es-de/art_legacy/ngage.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/ngage.webp b/themes/modern-es-de/art_legacy/ngage.webp new file mode 100644 index 000000000..fb4d7f910 Binary files /dev/null and b/themes/modern-es-de/art_legacy/ngage.webp differ diff --git a/themes/modern-es-de/art_legacy/ngp.jpg b/themes/modern-es-de/art_legacy/ngp.jpg deleted file mode 100644 index aa050e12a..000000000 Binary files a/themes/modern-es-de/art_legacy/ngp.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/ngp.webp b/themes/modern-es-de/art_legacy/ngp.webp new file mode 100644 index 000000000..3d8d6be83 Binary files /dev/null and b/themes/modern-es-de/art_legacy/ngp.webp differ diff --git a/themes/modern-es-de/art_legacy/ngpc.jpg b/themes/modern-es-de/art_legacy/ngpc.jpg deleted file mode 100644 index 669bd4361..000000000 Binary files a/themes/modern-es-de/art_legacy/ngpc.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/ngpc.webp b/themes/modern-es-de/art_legacy/ngpc.webp new file mode 100644 index 000000000..f1a6c103a Binary files /dev/null and b/themes/modern-es-de/art_legacy/ngpc.webp differ diff --git a/themes/modern-es-de/art_legacy/odyssey2.jpg b/themes/modern-es-de/art_legacy/odyssey2.jpg deleted file mode 100644 index 15e998563..000000000 Binary files a/themes/modern-es-de/art_legacy/odyssey2.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/odyssey2.webp b/themes/modern-es-de/art_legacy/odyssey2.webp new file mode 100644 index 000000000..a76ba60a0 Binary files /dev/null and b/themes/modern-es-de/art_legacy/odyssey2.webp differ diff --git a/themes/modern-es-de/art_legacy/openbor.jpg b/themes/modern-es-de/art_legacy/openbor.jpg deleted file mode 100644 index 3688b8338..000000000 Binary files a/themes/modern-es-de/art_legacy/openbor.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/openbor.webp b/themes/modern-es-de/art_legacy/openbor.webp new file mode 100644 index 000000000..83df4bb44 Binary files /dev/null and b/themes/modern-es-de/art_legacy/openbor.webp differ diff --git a/themes/modern-es-de/art_legacy/oric.jpg b/themes/modern-es-de/art_legacy/oric.jpg deleted file mode 100644 index 0a0f42602..000000000 Binary files a/themes/modern-es-de/art_legacy/oric.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/oric.webp b/themes/modern-es-de/art_legacy/oric.webp new file mode 100644 index 000000000..b4f6cadf4 Binary files /dev/null and b/themes/modern-es-de/art_legacy/oric.webp differ diff --git a/themes/modern-es-de/art_legacy/palm.jpg b/themes/modern-es-de/art_legacy/palm.jpg deleted file mode 100644 index 3536b3c1d..000000000 Binary files a/themes/modern-es-de/art_legacy/palm.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/palm.webp b/themes/modern-es-de/art_legacy/palm.webp new file mode 100644 index 000000000..6dba2000d Binary files /dev/null and b/themes/modern-es-de/art_legacy/palm.webp differ diff --git a/themes/modern-es-de/art_legacy/pc-cd.jpg b/themes/modern-es-de/art_legacy/pc-cd.jpg deleted file mode 100644 index f80dca423..000000000 Binary files a/themes/modern-es-de/art_legacy/pc-cd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/pc-cd.webp b/themes/modern-es-de/art_legacy/pc-cd.webp new file mode 100644 index 000000000..a6fe5f123 Binary files /dev/null and b/themes/modern-es-de/art_legacy/pc-cd.webp differ diff --git a/themes/modern-es-de/art_legacy/pc.jpg b/themes/modern-es-de/art_legacy/pc.jpg deleted file mode 100644 index 5b267b67d..000000000 Binary files a/themes/modern-es-de/art_legacy/pc.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/pc.webp b/themes/modern-es-de/art_legacy/pc.webp new file mode 100644 index 000000000..36c31083d Binary files /dev/null and b/themes/modern-es-de/art_legacy/pc.webp differ diff --git a/themes/modern-es-de/art_legacy/pc88.jpg b/themes/modern-es-de/art_legacy/pc88.jpg deleted file mode 100644 index c4d8e532a..000000000 Binary files a/themes/modern-es-de/art_legacy/pc88.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/pc88.webp b/themes/modern-es-de/art_legacy/pc88.webp new file mode 100644 index 000000000..cd30d035c Binary files /dev/null and b/themes/modern-es-de/art_legacy/pc88.webp differ diff --git a/themes/modern-es-de/art_legacy/pc98.jpg b/themes/modern-es-de/art_legacy/pc98.jpg deleted file mode 100644 index 53f7e55e1..000000000 Binary files a/themes/modern-es-de/art_legacy/pc98.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/pc98.webp b/themes/modern-es-de/art_legacy/pc98.webp new file mode 100644 index 000000000..7b0c97bb7 Binary files /dev/null and b/themes/modern-es-de/art_legacy/pc98.webp differ diff --git a/themes/modern-es-de/art_legacy/pcarcade.jpg b/themes/modern-es-de/art_legacy/pcarcade.jpg deleted file mode 100644 index 536680d4f..000000000 Binary files a/themes/modern-es-de/art_legacy/pcarcade.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/pcarcade.webp b/themes/modern-es-de/art_legacy/pcarcade.webp new file mode 100644 index 000000000..28f651d0a Binary files /dev/null and b/themes/modern-es-de/art_legacy/pcarcade.webp differ diff --git a/themes/modern-es-de/art_legacy/pcengine.jpg b/themes/modern-es-de/art_legacy/pcengine.jpg deleted file mode 100644 index 2fe06f185..000000000 Binary files a/themes/modern-es-de/art_legacy/pcengine.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/pcengine.webp b/themes/modern-es-de/art_legacy/pcengine.webp new file mode 100644 index 000000000..d43508b5e Binary files /dev/null and b/themes/modern-es-de/art_legacy/pcengine.webp differ diff --git a/themes/modern-es-de/art_legacy/pcenginecd.jpg b/themes/modern-es-de/art_legacy/pcenginecd.jpg deleted file mode 100644 index bfc591b8e..000000000 Binary files a/themes/modern-es-de/art_legacy/pcenginecd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/pcenginecd.webp b/themes/modern-es-de/art_legacy/pcenginecd.webp new file mode 100644 index 000000000..6a181ad95 Binary files /dev/null and b/themes/modern-es-de/art_legacy/pcenginecd.webp differ diff --git a/themes/modern-es-de/art_legacy/pcfx.jpg b/themes/modern-es-de/art_legacy/pcfx.jpg deleted file mode 100644 index e199ffb71..000000000 Binary files a/themes/modern-es-de/art_legacy/pcfx.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/pcfx.webp b/themes/modern-es-de/art_legacy/pcfx.webp new file mode 100644 index 000000000..678f54207 Binary files /dev/null and b/themes/modern-es-de/art_legacy/pcfx.webp differ diff --git a/themes/modern-es-de/art_legacy/pico8.jpg b/themes/modern-es-de/art_legacy/pico8.jpg deleted file mode 100644 index 3f7ffc432..000000000 Binary files a/themes/modern-es-de/art_legacy/pico8.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/pico8.webp b/themes/modern-es-de/art_legacy/pico8.webp new file mode 100644 index 000000000..0819826c5 Binary files /dev/null and b/themes/modern-es-de/art_legacy/pico8.webp differ diff --git a/themes/modern-es-de/art_legacy/plus4.jpg b/themes/modern-es-de/art_legacy/plus4.jpg deleted file mode 100644 index b424020eb..000000000 Binary files a/themes/modern-es-de/art_legacy/plus4.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/plus4.webp b/themes/modern-es-de/art_legacy/plus4.webp new file mode 100644 index 000000000..8294c4863 Binary files /dev/null and b/themes/modern-es-de/art_legacy/plus4.webp differ diff --git a/themes/modern-es-de/art_legacy/pokemini.jpg b/themes/modern-es-de/art_legacy/pokemini.jpg deleted file mode 100644 index 7b5897554..000000000 Binary files a/themes/modern-es-de/art_legacy/pokemini.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/pokemini.webp b/themes/modern-es-de/art_legacy/pokemini.webp new file mode 100644 index 000000000..49beaf119 Binary files /dev/null and b/themes/modern-es-de/art_legacy/pokemini.webp differ diff --git a/themes/modern-es-de/art_legacy/ports.jpg b/themes/modern-es-de/art_legacy/ports.jpg deleted file mode 100644 index b089e1fe3..000000000 Binary files a/themes/modern-es-de/art_legacy/ports.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/ports.webp b/themes/modern-es-de/art_legacy/ports.webp new file mode 100644 index 000000000..884c488de Binary files /dev/null and b/themes/modern-es-de/art_legacy/ports.webp differ diff --git a/themes/modern-es-de/art_legacy/ps2.jpg b/themes/modern-es-de/art_legacy/ps2.jpg deleted file mode 100644 index 6d0f3cd22..000000000 Binary files a/themes/modern-es-de/art_legacy/ps2.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/ps2.webp b/themes/modern-es-de/art_legacy/ps2.webp new file mode 100644 index 000000000..2e9f8decf Binary files /dev/null and b/themes/modern-es-de/art_legacy/ps2.webp differ diff --git a/themes/modern-es-de/art_legacy/ps3.jpg b/themes/modern-es-de/art_legacy/ps3.jpg deleted file mode 100644 index 84628fc63..000000000 Binary files a/themes/modern-es-de/art_legacy/ps3.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/ps3.webp b/themes/modern-es-de/art_legacy/ps3.webp new file mode 100644 index 000000000..8db8fe05a Binary files /dev/null and b/themes/modern-es-de/art_legacy/ps3.webp differ diff --git a/themes/modern-es-de/art_legacy/ps4.jpg b/themes/modern-es-de/art_legacy/ps4.jpg deleted file mode 100644 index fb6d07279..000000000 Binary files a/themes/modern-es-de/art_legacy/ps4.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/ps4.webp b/themes/modern-es-de/art_legacy/ps4.webp new file mode 100644 index 000000000..6877bbb5e Binary files /dev/null and b/themes/modern-es-de/art_legacy/ps4.webp differ diff --git a/themes/modern-es-de/art_legacy/psp.jpg b/themes/modern-es-de/art_legacy/psp.jpg deleted file mode 100644 index af6cce78a..000000000 Binary files a/themes/modern-es-de/art_legacy/psp.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/psp.webp b/themes/modern-es-de/art_legacy/psp.webp new file mode 100644 index 000000000..f86e2c66c Binary files /dev/null and b/themes/modern-es-de/art_legacy/psp.webp differ diff --git a/themes/modern-es-de/art_legacy/psvita.jpg b/themes/modern-es-de/art_legacy/psvita.jpg deleted file mode 100644 index c0c751a76..000000000 Binary files a/themes/modern-es-de/art_legacy/psvita.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/psvita.webp b/themes/modern-es-de/art_legacy/psvita.webp new file mode 100644 index 000000000..412ba4dca Binary files /dev/null and b/themes/modern-es-de/art_legacy/psvita.webp differ diff --git a/themes/modern-es-de/art_legacy/psx.jpg b/themes/modern-es-de/art_legacy/psx.jpg deleted file mode 100644 index 0c806fe42..000000000 Binary files a/themes/modern-es-de/art_legacy/psx.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/psx.webp b/themes/modern-es-de/art_legacy/psx.webp new file mode 100644 index 000000000..fa4ccef30 Binary files /dev/null and b/themes/modern-es-de/art_legacy/psx.webp differ diff --git a/themes/modern-es-de/art_legacy/pv1000.jpg b/themes/modern-es-de/art_legacy/pv1000.jpg deleted file mode 100644 index 3247fb56b..000000000 Binary files a/themes/modern-es-de/art_legacy/pv1000.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/pv1000.webp b/themes/modern-es-de/art_legacy/pv1000.webp new file mode 100644 index 000000000..6557f1cba Binary files /dev/null and b/themes/modern-es-de/art_legacy/pv1000.webp differ diff --git a/themes/modern-es-de/art_legacy/quake.jpg b/themes/modern-es-de/art_legacy/quake.jpg deleted file mode 100644 index e37999408..000000000 Binary files a/themes/modern-es-de/art_legacy/quake.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/quake.webp b/themes/modern-es-de/art_legacy/quake.webp new file mode 100644 index 000000000..8b0659b8d Binary files /dev/null and b/themes/modern-es-de/art_legacy/quake.webp differ diff --git a/themes/modern-es-de/art_legacy/reflexive.jpg b/themes/modern-es-de/art_legacy/reflexive.jpg deleted file mode 100644 index e77e55ec6..000000000 Binary files a/themes/modern-es-de/art_legacy/reflexive.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/reflexive.webp b/themes/modern-es-de/art_legacy/reflexive.webp new file mode 100644 index 000000000..54eb89828 Binary files /dev/null and b/themes/modern-es-de/art_legacy/reflexive.webp differ diff --git a/themes/modern-es-de/art_legacy/samcoupe.jpg b/themes/modern-es-de/art_legacy/samcoupe.jpg deleted file mode 100644 index 823e41ee6..000000000 Binary files a/themes/modern-es-de/art_legacy/samcoupe.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/samcoupe.webp b/themes/modern-es-de/art_legacy/samcoupe.webp new file mode 100644 index 000000000..edaff50e6 Binary files /dev/null and b/themes/modern-es-de/art_legacy/samcoupe.webp differ diff --git a/themes/modern-es-de/art_legacy/satellaview.jpg b/themes/modern-es-de/art_legacy/satellaview.jpg deleted file mode 100644 index 7b13a9b71..000000000 Binary files a/themes/modern-es-de/art_legacy/satellaview.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/satellaview.webp b/themes/modern-es-de/art_legacy/satellaview.webp new file mode 100644 index 000000000..539daf165 Binary files /dev/null and b/themes/modern-es-de/art_legacy/satellaview.webp differ diff --git a/themes/modern-es-de/art_legacy/saturn.jpg b/themes/modern-es-de/art_legacy/saturn.jpg deleted file mode 100644 index 4e917e314..000000000 Binary files a/themes/modern-es-de/art_legacy/saturn.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/saturn.webp b/themes/modern-es-de/art_legacy/saturn.webp new file mode 100644 index 000000000..844d1f995 Binary files /dev/null and b/themes/modern-es-de/art_legacy/saturn.webp differ diff --git a/themes/modern-es-de/art_legacy/saturnjp.jpg b/themes/modern-es-de/art_legacy/saturnjp.jpg deleted file mode 100644 index 90a962d61..000000000 Binary files a/themes/modern-es-de/art_legacy/saturnjp.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/saturnjp.webp b/themes/modern-es-de/art_legacy/saturnjp.webp new file mode 100644 index 000000000..5d25b62ec Binary files /dev/null and b/themes/modern-es-de/art_legacy/saturnjp.webp differ diff --git a/themes/modern-es-de/art_legacy/scummvm.jpg b/themes/modern-es-de/art_legacy/scummvm.jpg deleted file mode 100644 index 1bbc548db..000000000 Binary files a/themes/modern-es-de/art_legacy/scummvm.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/scummvm.webp b/themes/modern-es-de/art_legacy/scummvm.webp new file mode 100644 index 000000000..4c81df40d Binary files /dev/null and b/themes/modern-es-de/art_legacy/scummvm.webp differ diff --git a/themes/modern-es-de/art_legacy/scv.jpg b/themes/modern-es-de/art_legacy/scv.jpg deleted file mode 100644 index 158da4a07..000000000 Binary files a/themes/modern-es-de/art_legacy/scv.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/scv.webp b/themes/modern-es-de/art_legacy/scv.webp new file mode 100644 index 000000000..b77d92ba0 Binary files /dev/null and b/themes/modern-es-de/art_legacy/scv.webp differ diff --git a/themes/modern-es-de/art_legacy/sega32x.jpg b/themes/modern-es-de/art_legacy/sega32x.jpg deleted file mode 100644 index 4c8339dfb..000000000 Binary files a/themes/modern-es-de/art_legacy/sega32x.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/sega32x.webp b/themes/modern-es-de/art_legacy/sega32x.webp new file mode 100644 index 000000000..6694052df Binary files /dev/null and b/themes/modern-es-de/art_legacy/sega32x.webp differ diff --git a/themes/modern-es-de/art_legacy/sega32xjp.jpg b/themes/modern-es-de/art_legacy/sega32xjp.jpg deleted file mode 100644 index 6fe059819..000000000 Binary files a/themes/modern-es-de/art_legacy/sega32xjp.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/sega32xjp.webp b/themes/modern-es-de/art_legacy/sega32xjp.webp new file mode 100644 index 000000000..6adc1ca92 Binary files /dev/null and b/themes/modern-es-de/art_legacy/sega32xjp.webp differ diff --git a/themes/modern-es-de/art_legacy/sega32xna.jpg b/themes/modern-es-de/art_legacy/sega32xna.jpg deleted file mode 100644 index 5257a8ba0..000000000 Binary files a/themes/modern-es-de/art_legacy/sega32xna.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/sega32xna.webp b/themes/modern-es-de/art_legacy/sega32xna.webp new file mode 100644 index 000000000..a398eceed Binary files /dev/null and b/themes/modern-es-de/art_legacy/sega32xna.webp differ diff --git a/themes/modern-es-de/art_legacy/segacd.jpg b/themes/modern-es-de/art_legacy/segacd.jpg deleted file mode 100644 index 964029c9e..000000000 Binary files a/themes/modern-es-de/art_legacy/segacd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/segacd.webp b/themes/modern-es-de/art_legacy/segacd.webp new file mode 100644 index 000000000..cad2a4bac Binary files /dev/null and b/themes/modern-es-de/art_legacy/segacd.webp differ diff --git a/themes/modern-es-de/art_legacy/settings.jpg b/themes/modern-es-de/art_legacy/settings.jpg deleted file mode 100644 index 4c101dff8..000000000 Binary files a/themes/modern-es-de/art_legacy/settings.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/settings.webp b/themes/modern-es-de/art_legacy/settings.webp new file mode 100644 index 000000000..61a2c0906 Binary files /dev/null and b/themes/modern-es-de/art_legacy/settings.webp differ diff --git a/themes/modern-es-de/art_legacy/sfc.jpg b/themes/modern-es-de/art_legacy/sfc.jpg deleted file mode 100644 index 239b2f18c..000000000 Binary files a/themes/modern-es-de/art_legacy/sfc.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/sfc.webp b/themes/modern-es-de/art_legacy/sfc.webp new file mode 100644 index 000000000..9e2f37ce0 Binary files /dev/null and b/themes/modern-es-de/art_legacy/sfc.webp differ diff --git a/themes/modern-es-de/art_legacy/sg-1000.jpg b/themes/modern-es-de/art_legacy/sg-1000.jpg deleted file mode 100644 index a9a77ee42..000000000 Binary files a/themes/modern-es-de/art_legacy/sg-1000.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/sg-1000.webp b/themes/modern-es-de/art_legacy/sg-1000.webp new file mode 100644 index 000000000..34bd61832 Binary files /dev/null and b/themes/modern-es-de/art_legacy/sg-1000.webp differ diff --git a/themes/modern-es-de/art_legacy/sgb.jpg b/themes/modern-es-de/art_legacy/sgb.jpg deleted file mode 100644 index 982059150..000000000 Binary files a/themes/modern-es-de/art_legacy/sgb.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/sgb.webp b/themes/modern-es-de/art_legacy/sgb.webp new file mode 100644 index 000000000..b1bcfd7a6 Binary files /dev/null and b/themes/modern-es-de/art_legacy/sgb.webp differ diff --git a/themes/modern-es-de/art_legacy/snes.jpg b/themes/modern-es-de/art_legacy/snes.jpg deleted file mode 100644 index b4be77526..000000000 Binary files a/themes/modern-es-de/art_legacy/snes.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/snes.webp b/themes/modern-es-de/art_legacy/snes.webp new file mode 100644 index 000000000..144b7e20d Binary files /dev/null and b/themes/modern-es-de/art_legacy/snes.webp differ diff --git a/themes/modern-es-de/art_legacy/snesna.jpg b/themes/modern-es-de/art_legacy/snesna.jpg deleted file mode 100644 index 737b2226a..000000000 Binary files a/themes/modern-es-de/art_legacy/snesna.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/snesna.webp b/themes/modern-es-de/art_legacy/snesna.webp new file mode 100644 index 000000000..5676d9bc3 Binary files /dev/null and b/themes/modern-es-de/art_legacy/snesna.webp differ diff --git a/themes/modern-es-de/art_legacy/solarus.jpg b/themes/modern-es-de/art_legacy/solarus.jpg deleted file mode 100644 index 565ee3553..000000000 Binary files a/themes/modern-es-de/art_legacy/solarus.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/solarus.webp b/themes/modern-es-de/art_legacy/solarus.webp new file mode 100644 index 000000000..9dc6ea917 Binary files /dev/null and b/themes/modern-es-de/art_legacy/solarus.webp differ diff --git a/themes/modern-es-de/art_legacy/spectravideo.jpg b/themes/modern-es-de/art_legacy/spectravideo.jpg deleted file mode 100644 index c4712b2b9..000000000 Binary files a/themes/modern-es-de/art_legacy/spectravideo.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/spectravideo.webp b/themes/modern-es-de/art_legacy/spectravideo.webp new file mode 100644 index 000000000..20ffccee0 Binary files /dev/null and b/themes/modern-es-de/art_legacy/spectravideo.webp differ diff --git a/themes/modern-es-de/art_legacy/steam.jpg b/themes/modern-es-de/art_legacy/steam.jpg deleted file mode 100644 index 097087c07..000000000 Binary files a/themes/modern-es-de/art_legacy/steam.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/steam.webp b/themes/modern-es-de/art_legacy/steam.webp new file mode 100644 index 000000000..03522ee31 Binary files /dev/null and b/themes/modern-es-de/art_legacy/steam.webp differ diff --git a/themes/modern-es-de/art_legacy/stv.jpg b/themes/modern-es-de/art_legacy/stv.jpg deleted file mode 100644 index 584e90701..000000000 Binary files a/themes/modern-es-de/art_legacy/stv.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/stv.webp b/themes/modern-es-de/art_legacy/stv.webp new file mode 100644 index 000000000..f611ca651 Binary files /dev/null and b/themes/modern-es-de/art_legacy/stv.webp differ diff --git a/themes/modern-es-de/art_legacy/sufami.jpg b/themes/modern-es-de/art_legacy/sufami.jpg deleted file mode 100644 index 30691ac53..000000000 Binary files a/themes/modern-es-de/art_legacy/sufami.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/sufami.webp b/themes/modern-es-de/art_legacy/sufami.webp new file mode 100644 index 000000000..a71dd31eb Binary files /dev/null and b/themes/modern-es-de/art_legacy/sufami.webp differ diff --git a/themes/modern-es-de/art_legacy/supergrafx.jpg b/themes/modern-es-de/art_legacy/supergrafx.jpg deleted file mode 100644 index d901a6d5e..000000000 Binary files a/themes/modern-es-de/art_legacy/supergrafx.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/supergrafx.webp b/themes/modern-es-de/art_legacy/supergrafx.webp new file mode 100644 index 000000000..57fe7d345 Binary files /dev/null and b/themes/modern-es-de/art_legacy/supergrafx.webp differ diff --git a/themes/modern-es-de/art_legacy/supervision.jpg b/themes/modern-es-de/art_legacy/supervision.jpg deleted file mode 100644 index 3117c610f..000000000 Binary files a/themes/modern-es-de/art_legacy/supervision.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/supervision.webp b/themes/modern-es-de/art_legacy/supervision.webp new file mode 100644 index 000000000..518ec32d1 Binary files /dev/null and b/themes/modern-es-de/art_legacy/supervision.webp differ diff --git a/themes/modern-es-de/art_legacy/supracan.jpg b/themes/modern-es-de/art_legacy/supracan.jpg deleted file mode 100644 index 2eabc304c..000000000 Binary files a/themes/modern-es-de/art_legacy/supracan.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/supracan.webp b/themes/modern-es-de/art_legacy/supracan.webp new file mode 100644 index 000000000..3dc622941 Binary files /dev/null and b/themes/modern-es-de/art_legacy/supracan.webp differ diff --git a/themes/modern-es-de/art_legacy/switch.jpg b/themes/modern-es-de/art_legacy/switch.jpg deleted file mode 100644 index af1906039..000000000 Binary files a/themes/modern-es-de/art_legacy/switch.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/switch.webp b/themes/modern-es-de/art_legacy/switch.webp new file mode 100644 index 000000000..d19bf1aa3 Binary files /dev/null and b/themes/modern-es-de/art_legacy/switch.webp differ diff --git a/themes/modern-es-de/art_legacy/symbian.jpg b/themes/modern-es-de/art_legacy/symbian.jpg deleted file mode 100644 index 56e47ae66..000000000 Binary files a/themes/modern-es-de/art_legacy/symbian.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/symbian.webp b/themes/modern-es-de/art_legacy/symbian.webp new file mode 100644 index 000000000..4d1bd0e57 Binary files /dev/null and b/themes/modern-es-de/art_legacy/symbian.webp differ diff --git a/themes/modern-es-de/art_legacy/tanodragon.jpg b/themes/modern-es-de/art_legacy/tanodragon.jpg deleted file mode 100644 index 4cdc7fe5c..000000000 Binary files a/themes/modern-es-de/art_legacy/tanodragon.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/tanodragon.webp b/themes/modern-es-de/art_legacy/tanodragon.webp new file mode 100644 index 000000000..56f7afcc5 Binary files /dev/null and b/themes/modern-es-de/art_legacy/tanodragon.webp differ diff --git a/themes/modern-es-de/art_legacy/tg-cd.jpg b/themes/modern-es-de/art_legacy/tg-cd.jpg deleted file mode 100644 index 9e60cd3d5..000000000 Binary files a/themes/modern-es-de/art_legacy/tg-cd.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/tg-cd.webp b/themes/modern-es-de/art_legacy/tg-cd.webp new file mode 100644 index 000000000..55ba9dbdb Binary files /dev/null and b/themes/modern-es-de/art_legacy/tg-cd.webp differ diff --git a/themes/modern-es-de/art_legacy/tg16.jpg b/themes/modern-es-de/art_legacy/tg16.jpg deleted file mode 100644 index 88fba3682..000000000 Binary files a/themes/modern-es-de/art_legacy/tg16.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/tg16.webp b/themes/modern-es-de/art_legacy/tg16.webp new file mode 100644 index 000000000..3f2bfc16e Binary files /dev/null and b/themes/modern-es-de/art_legacy/tg16.webp differ diff --git a/themes/modern-es-de/art_legacy/ti99.jpg b/themes/modern-es-de/art_legacy/ti99.jpg deleted file mode 100644 index c8f89c6c6..000000000 Binary files a/themes/modern-es-de/art_legacy/ti99.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/ti99.webp b/themes/modern-es-de/art_legacy/ti99.webp new file mode 100644 index 000000000..bdec8e8dd Binary files /dev/null and b/themes/modern-es-de/art_legacy/ti99.webp differ diff --git a/themes/modern-es-de/art_legacy/tic80.jpg b/themes/modern-es-de/art_legacy/tic80.jpg deleted file mode 100644 index e09d9e664..000000000 Binary files a/themes/modern-es-de/art_legacy/tic80.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/tic80.webp b/themes/modern-es-de/art_legacy/tic80.webp new file mode 100644 index 000000000..752971028 Binary files /dev/null and b/themes/modern-es-de/art_legacy/tic80.webp differ diff --git a/themes/modern-es-de/art_legacy/to8.jpg b/themes/modern-es-de/art_legacy/to8.jpg deleted file mode 100644 index ab4e9fe59..000000000 Binary files a/themes/modern-es-de/art_legacy/to8.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/to8.webp b/themes/modern-es-de/art_legacy/to8.webp new file mode 100644 index 000000000..fec268f5a Binary files /dev/null and b/themes/modern-es-de/art_legacy/to8.webp differ diff --git a/themes/modern-es-de/art_legacy/triforce.jpg b/themes/modern-es-de/art_legacy/triforce.jpg deleted file mode 100644 index 9fe1f6791..000000000 Binary files a/themes/modern-es-de/art_legacy/triforce.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/triforce.webp b/themes/modern-es-de/art_legacy/triforce.webp new file mode 100644 index 000000000..f189216c5 Binary files /dev/null and b/themes/modern-es-de/art_legacy/triforce.webp differ diff --git a/themes/modern-es-de/art_legacy/trs-80.jpg b/themes/modern-es-de/art_legacy/trs-80.jpg deleted file mode 100644 index be3412938..000000000 Binary files a/themes/modern-es-de/art_legacy/trs-80.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/trs-80.webp b/themes/modern-es-de/art_legacy/trs-80.webp new file mode 100644 index 000000000..44682654e Binary files /dev/null and b/themes/modern-es-de/art_legacy/trs-80.webp differ diff --git a/themes/modern-es-de/art_legacy/type-x.jpg b/themes/modern-es-de/art_legacy/type-x.jpg deleted file mode 100644 index 0c541ed3b..000000000 Binary files a/themes/modern-es-de/art_legacy/type-x.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/type-x.webp b/themes/modern-es-de/art_legacy/type-x.webp new file mode 100644 index 000000000..44f68bae5 Binary files /dev/null and b/themes/modern-es-de/art_legacy/type-x.webp differ diff --git a/themes/modern-es-de/art_legacy/uzebox.jpg b/themes/modern-es-de/art_legacy/uzebox.jpg deleted file mode 100644 index b3af94bc8..000000000 Binary files a/themes/modern-es-de/art_legacy/uzebox.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/uzebox.webp b/themes/modern-es-de/art_legacy/uzebox.webp new file mode 100644 index 000000000..ac35ebf63 Binary files /dev/null and b/themes/modern-es-de/art_legacy/uzebox.webp differ diff --git a/themes/modern-es-de/art_legacy/vectrex.jpg b/themes/modern-es-de/art_legacy/vectrex.jpg deleted file mode 100644 index 83ce3a850..000000000 Binary files a/themes/modern-es-de/art_legacy/vectrex.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/vectrex.webp b/themes/modern-es-de/art_legacy/vectrex.webp new file mode 100644 index 000000000..254674213 Binary files /dev/null and b/themes/modern-es-de/art_legacy/vectrex.webp differ diff --git a/themes/modern-es-de/art_legacy/vic20.jpg b/themes/modern-es-de/art_legacy/vic20.jpg deleted file mode 100644 index 77b7dc1b0..000000000 Binary files a/themes/modern-es-de/art_legacy/vic20.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/vic20.webp b/themes/modern-es-de/art_legacy/vic20.webp new file mode 100644 index 000000000..864fdc5a6 Binary files /dev/null and b/themes/modern-es-de/art_legacy/vic20.webp differ diff --git a/themes/modern-es-de/art_legacy/videopac.jpg b/themes/modern-es-de/art_legacy/videopac.jpg deleted file mode 100644 index 299099a75..000000000 Binary files a/themes/modern-es-de/art_legacy/videopac.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/videopac.webp b/themes/modern-es-de/art_legacy/videopac.webp new file mode 100644 index 000000000..96ba2e4b7 Binary files /dev/null and b/themes/modern-es-de/art_legacy/videopac.webp differ diff --git a/themes/modern-es-de/art_legacy/virtualboy.jpg b/themes/modern-es-de/art_legacy/virtualboy.jpg deleted file mode 100644 index e4465fd4d..000000000 Binary files a/themes/modern-es-de/art_legacy/virtualboy.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/virtualboy.webp b/themes/modern-es-de/art_legacy/virtualboy.webp new file mode 100644 index 000000000..afb22a9b6 Binary files /dev/null and b/themes/modern-es-de/art_legacy/virtualboy.webp differ diff --git a/themes/modern-es-de/art_legacy/vpinball.jpg b/themes/modern-es-de/art_legacy/vpinball.jpg deleted file mode 100644 index 48da0ab30..000000000 Binary files a/themes/modern-es-de/art_legacy/vpinball.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/vpinball.webp b/themes/modern-es-de/art_legacy/vpinball.webp new file mode 100644 index 000000000..13aa4aa9a Binary files /dev/null and b/themes/modern-es-de/art_legacy/vpinball.webp differ diff --git a/themes/modern-es-de/art_legacy/vsmile.jpg b/themes/modern-es-de/art_legacy/vsmile.jpg deleted file mode 100644 index 1efac46ea..000000000 Binary files a/themes/modern-es-de/art_legacy/vsmile.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/vsmile.webp b/themes/modern-es-de/art_legacy/vsmile.webp new file mode 100644 index 000000000..b51d5359d Binary files /dev/null and b/themes/modern-es-de/art_legacy/vsmile.webp differ diff --git a/themes/modern-es-de/art_legacy/wasm4.jpg b/themes/modern-es-de/art_legacy/wasm4.jpg deleted file mode 100644 index d60e151b4..000000000 Binary files a/themes/modern-es-de/art_legacy/wasm4.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/wasm4.webp b/themes/modern-es-de/art_legacy/wasm4.webp new file mode 100644 index 000000000..d01cf14cb Binary files /dev/null and b/themes/modern-es-de/art_legacy/wasm4.webp differ diff --git a/themes/modern-es-de/art_legacy/web.jpg b/themes/modern-es-de/art_legacy/web.jpg deleted file mode 100644 index 9c02c1bd7..000000000 Binary files a/themes/modern-es-de/art_legacy/web.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/web.webp b/themes/modern-es-de/art_legacy/web.webp new file mode 100644 index 000000000..4e5f91bcd Binary files /dev/null and b/themes/modern-es-de/art_legacy/web.webp differ diff --git a/themes/modern-es-de/art_legacy/wii.jpg b/themes/modern-es-de/art_legacy/wii.jpg deleted file mode 100644 index 02a871306..000000000 Binary files a/themes/modern-es-de/art_legacy/wii.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/wii.webp b/themes/modern-es-de/art_legacy/wii.webp new file mode 100644 index 000000000..1dce7fcac Binary files /dev/null and b/themes/modern-es-de/art_legacy/wii.webp differ diff --git a/themes/modern-es-de/art_legacy/wiiu.jpg b/themes/modern-es-de/art_legacy/wiiu.jpg deleted file mode 100644 index d70b9ce33..000000000 Binary files a/themes/modern-es-de/art_legacy/wiiu.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/wiiu.webp b/themes/modern-es-de/art_legacy/wiiu.webp new file mode 100644 index 000000000..6021cb170 Binary files /dev/null and b/themes/modern-es-de/art_legacy/wiiu.webp differ diff --git a/themes/modern-es-de/art_legacy/windows.jpg b/themes/modern-es-de/art_legacy/windows.jpg deleted file mode 100644 index 5b267b67d..000000000 Binary files a/themes/modern-es-de/art_legacy/windows.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/windows.webp b/themes/modern-es-de/art_legacy/windows.webp new file mode 100644 index 000000000..36c31083d Binary files /dev/null and b/themes/modern-es-de/art_legacy/windows.webp differ diff --git a/themes/modern-es-de/art_legacy/windows3x.jpg b/themes/modern-es-de/art_legacy/windows3x.jpg deleted file mode 100644 index 4172506b3..000000000 Binary files a/themes/modern-es-de/art_legacy/windows3x.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/windows3x.webp b/themes/modern-es-de/art_legacy/windows3x.webp new file mode 100644 index 000000000..ddd193f97 Binary files /dev/null and b/themes/modern-es-de/art_legacy/windows3x.webp differ diff --git a/themes/modern-es-de/art_legacy/windows9x.jpg b/themes/modern-es-de/art_legacy/windows9x.jpg deleted file mode 100644 index 7b30039bb..000000000 Binary files a/themes/modern-es-de/art_legacy/windows9x.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/windows9x.webp b/themes/modern-es-de/art_legacy/windows9x.webp new file mode 100644 index 000000000..7608aa9e5 Binary files /dev/null and b/themes/modern-es-de/art_legacy/windows9x.webp differ diff --git a/themes/modern-es-de/art_legacy/wonderswan.jpg b/themes/modern-es-de/art_legacy/wonderswan.jpg deleted file mode 100644 index e78e5a05e..000000000 Binary files a/themes/modern-es-de/art_legacy/wonderswan.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/wonderswan.webp b/themes/modern-es-de/art_legacy/wonderswan.webp new file mode 100644 index 000000000..a937e0180 Binary files /dev/null and b/themes/modern-es-de/art_legacy/wonderswan.webp differ diff --git a/themes/modern-es-de/art_legacy/wonderswancolor.jpg b/themes/modern-es-de/art_legacy/wonderswancolor.jpg deleted file mode 100644 index 08fef038b..000000000 Binary files a/themes/modern-es-de/art_legacy/wonderswancolor.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/wonderswancolor.webp b/themes/modern-es-de/art_legacy/wonderswancolor.webp new file mode 100644 index 000000000..97efde8cc Binary files /dev/null and b/themes/modern-es-de/art_legacy/wonderswancolor.webp differ diff --git a/themes/modern-es-de/art_legacy/x1.jpg b/themes/modern-es-de/art_legacy/x1.jpg deleted file mode 100644 index 49009713b..000000000 Binary files a/themes/modern-es-de/art_legacy/x1.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/x1.webp b/themes/modern-es-de/art_legacy/x1.webp new file mode 100644 index 000000000..0c280852e Binary files /dev/null and b/themes/modern-es-de/art_legacy/x1.webp differ diff --git a/themes/modern-es-de/art_legacy/x68000.jpg b/themes/modern-es-de/art_legacy/x68000.jpg deleted file mode 100644 index 1c968e675..000000000 Binary files a/themes/modern-es-de/art_legacy/x68000.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/x68000.webp b/themes/modern-es-de/art_legacy/x68000.webp new file mode 100644 index 000000000..2a424857f Binary files /dev/null and b/themes/modern-es-de/art_legacy/x68000.webp differ diff --git a/themes/modern-es-de/art_legacy/xbox.jpg b/themes/modern-es-de/art_legacy/xbox.jpg deleted file mode 100644 index 7d81fcd71..000000000 Binary files a/themes/modern-es-de/art_legacy/xbox.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/xbox.webp b/themes/modern-es-de/art_legacy/xbox.webp new file mode 100644 index 000000000..da2eaf185 Binary files /dev/null and b/themes/modern-es-de/art_legacy/xbox.webp differ diff --git a/themes/modern-es-de/art_legacy/xbox360.jpg b/themes/modern-es-de/art_legacy/xbox360.jpg deleted file mode 100644 index 89e28fad0..000000000 Binary files a/themes/modern-es-de/art_legacy/xbox360.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/xbox360.webp b/themes/modern-es-de/art_legacy/xbox360.webp new file mode 100644 index 000000000..1ffd4fe05 Binary files /dev/null and b/themes/modern-es-de/art_legacy/xbox360.webp differ diff --git a/themes/modern-es-de/art_legacy/zmachine.jpg b/themes/modern-es-de/art_legacy/zmachine.jpg deleted file mode 100644 index c61ab2404..000000000 Binary files a/themes/modern-es-de/art_legacy/zmachine.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/zmachine.webp b/themes/modern-es-de/art_legacy/zmachine.webp new file mode 100644 index 000000000..b04a5e395 Binary files /dev/null and b/themes/modern-es-de/art_legacy/zmachine.webp differ diff --git a/themes/modern-es-de/art_legacy/zx81.jpg b/themes/modern-es-de/art_legacy/zx81.jpg deleted file mode 100644 index 589d20954..000000000 Binary files a/themes/modern-es-de/art_legacy/zx81.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/zx81.webp b/themes/modern-es-de/art_legacy/zx81.webp new file mode 100644 index 000000000..ec4f5ab96 Binary files /dev/null and b/themes/modern-es-de/art_legacy/zx81.webp differ diff --git a/themes/modern-es-de/art_legacy/zxnext.jpg b/themes/modern-es-de/art_legacy/zxnext.jpg deleted file mode 100644 index a6f03c11d..000000000 Binary files a/themes/modern-es-de/art_legacy/zxnext.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/zxnext.webp b/themes/modern-es-de/art_legacy/zxnext.webp new file mode 100644 index 000000000..d0ecba7eb Binary files /dev/null and b/themes/modern-es-de/art_legacy/zxnext.webp differ diff --git a/themes/modern-es-de/art_legacy/zxspectrum.jpg b/themes/modern-es-de/art_legacy/zxspectrum.jpg deleted file mode 100644 index ed4a9f43a..000000000 Binary files a/themes/modern-es-de/art_legacy/zxspectrum.jpg and /dev/null differ diff --git a/themes/modern-es-de/art_legacy/zxspectrum.webp b/themes/modern-es-de/art_legacy/zxspectrum.webp new file mode 100644 index 000000000..1135ee436 Binary files /dev/null and b/themes/modern-es-de/art_legacy/zxspectrum.webp differ diff --git a/themes/modern-es-de/theme.xml b/themes/modern-es-de/theme.xml index d7bb6d106..14d318df1 100644 --- a/themes/modern-es-de/theme.xml +++ b/themes/modern-es-de/theme.xml @@ -123,7 +123,7 @@ 0 0.3 1 0.4 horizontal - ./${artDirectory}/${system.theme}.jpg + ./${artDirectory}/${system.theme}.webp 1 center 1 diff --git a/themes/slate-es-de/MISSING.md b/themes/slate-es-de/MISSING.md index 1ca14750d..bef5d9c30 100644 --- a/themes/slate-es-de/MISSING.md +++ b/themes/slate-es-de/MISSING.md @@ -4,6 +4,8 @@ * amigacd32: Amiga CD32 - consolegame.svg, controller.svg * amstradcpc - Amstrad CPC - controller.svg * android: Google Android - consolegame.svg, controller.svg +* androidapps: Android Apps - consolegame.svg, controller.svg +* androidgames: Android Games - consolegame.svg, controller.svg * apple2gs: Apple IIGS - consolegame.svg, controller.svg * arcadia: Emerson Arcadia 2001 - consolegame.svg, controller.svg * archimedes: Acorn Archimedes - consolegame.svg, controller.svg diff --git a/themes/slate-es-de/androidapps/colors.xml b/themes/slate-es-de/androidapps/colors.xml new file mode 100644 index 000000000..e11dce586 --- /dev/null +++ b/themes/slate-es-de/androidapps/colors.xml @@ -0,0 +1,16 @@ + + + + 31AA52 + + + FBBD00 + + + EB4132 + + + 4086F4 + + + \ No newline at end of file diff --git a/themes/slate-es-de/androidapps/images/logo.svg b/themes/slate-es-de/androidapps/images/logo.svg new file mode 100644 index 000000000..8c4a1bc41 --- /dev/null +++ b/themes/slate-es-de/androidapps/images/logo.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + diff --git a/themes/slate-es-de/androidapps/systeminfo.xml b/themes/slate-es-de/androidapps/systeminfo.xml new file mode 100644 index 000000000..5549f90b5 --- /dev/null +++ b/themes/slate-es-de/androidapps/systeminfo.xml @@ -0,0 +1,7 @@ + + + + View and use your favorite Android apps + + + \ No newline at end of file diff --git a/themes/slate-es-de/androidgames/colors.xml b/themes/slate-es-de/androidgames/colors.xml new file mode 100644 index 000000000..4c785f22f --- /dev/null +++ b/themes/slate-es-de/androidgames/colors.xml @@ -0,0 +1,16 @@ + + + + 4086F4 + + + EB4132 + + + FBBD00 + + + 31AA52 + + + \ No newline at end of file diff --git a/themes/slate-es-de/androidgames/images/logo.svg b/themes/slate-es-de/androidgames/images/logo.svg new file mode 100644 index 000000000..90afdebb5 --- /dev/null +++ b/themes/slate-es-de/androidgames/images/logo.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + diff --git a/themes/slate-es-de/androidgames/systeminfo.xml b/themes/slate-es-de/androidgames/systeminfo.xml new file mode 100644 index 000000000..d2847871e --- /dev/null +++ b/themes/slate-es-de/androidgames/systeminfo.xml @@ -0,0 +1,7 @@ + + + + View and play your favorite Android games + + + \ No newline at end of file diff --git a/tools/Windows_dependencies_build.bat b/tools/Windows_dependencies_build.bat index 58d98fb06..fb5169e98 100644 --- a/tools/Windows_dependencies_build.bat +++ b/tools/Windows_dependencies_build.bat @@ -1,6 +1,6 @@ :: SPDX-License-Identifier: MIT :: -:: ES-DE +:: ES-DE Frontend :: Windows_dependencies_build.bat :: :: Builds the external dependencies in-tree using MSVC. diff --git a/tools/Windows_dependencies_setup.bat b/tools/Windows_dependencies_setup.bat index 6fa84e16b..72f027dc4 100644 --- a/tools/Windows_dependencies_setup.bat +++ b/tools/Windows_dependencies_setup.bat @@ -1,6 +1,6 @@ :: SPDX-License-Identifier: MIT :: -:: ES-DE +:: ES-DE Frontend :: Windows_dependencies_setup.bat :: :: Downloads and prepares the external dependencies for building in-tree using MSVC. @@ -230,29 +230,29 @@ cd .. echo: echo Setting up SDL -if exist SDL2-2.30.1\ ( - rmdir /S /Q SDL2-2.30.1 +if exist SDL2-2.30.2\ ( + rmdir /S /Q SDL2-2.30.2 ) if exist SDL2\ ( rmdir /S /Q SDL2 ) -if exist SDL2-devel-2.30.1-VC.zip ( - del SDL2-devel-2.30.1-VC.zip +if exist SDL2-devel-2.30.2-VC.zip ( + del SDL2-devel-2.30.2-VC.zip ) -curl -LO https://libsdl.org/release/SDL2-devel-2.30.1-VC.zip +curl -LO https://libsdl.org/release/SDL2-devel-2.30.2-VC.zip -7z x SDL2-devel-2.30.1-VC.zip +7z x SDL2-devel-2.30.2-VC.zip -if not exist SDL2-2.30.1\ ( +if not exist SDL2-2.30.2\ ( echo SDL directory is missing, aborting. cd .. goto end ) -rename SDL2-2.30.1 SDL2 +rename SDL2-2.30.2 SDL2 cd SDL2 rename include SDL2 @@ -309,18 +309,18 @@ if exist fWin64OpenSSL_Light-1_1_1m.exe ( del Win64OpenSSL_Light-1_1_1m.exe ) -if not exist "C:\Program Files\OpenSSL-Win64\libcrypto-1_1-x64.dll" ( - curl -O https://slproweb.com/download/Win64OpenSSL_Light-1_1_1m.exe +if not exist "C:\Program Files\OpenSSL-Win64\libcrypto-3-x64.dll" ( + curl -O https://slproweb.com/download/Win64OpenSSL_Light-3_3_0.exe :: Run the installer. - .\Win64OpenSSL_Light-1_1_1m.exe + .\Win64OpenSSL_Light-3_3_0.exe ) :: Return to the root of the repository. cd .. -if exist "C:\Program Files\OpenSSL-Win64\libcrypto-1_1-x64.dll" ( - copy /Y "C:\Program Files\OpenSSL-Win64\libcrypto-1_1-x64.dll" - copy /Y "C:\Program Files\OpenSSL-Win64\libssl-1_1-x64.dll" +if exist "C:\Program Files\OpenSSL-Win64\libcrypto-3-x64.dll" ( + copy /Y "C:\Program Files\OpenSSL-Win64\libcrypto-3-x64.dll" + copy /Y "C:\Program Files\OpenSSL-Win64\libssl-3-x64.dll" ) echo: diff --git a/tools/create_AppImage.sh b/tools/create_AppImage.sh index 1f8caf8a4..ca5eeb456 100755 --- a/tools/create_AppImage.sh +++ b/tools/create_AppImage.sh @@ -1,7 +1,7 @@ #!/usr/bin/bash # SPDX-License-Identifier: MIT # -# ES-DE +# ES-DE Frontend # create_AppImage.sh # # Runs the complete process of building a Linux AppImage. @@ -13,8 +13,8 @@ # How many CPU threads to use for the compilation. JOBS=4 -SDL_RELEASE_TAG=release-2.30.1 -SDL_SHARED_LIBRARY=libSDL2-2.0.so.0.3000.1 +SDL_RELEASE_TAG=release-2.30.2 +SDL_SHARED_LIBRARY=libSDL2-2.0.so.0.3000.2 echo "Building AppImage..." diff --git a/tools/create_AppImage_SteamDeck.sh b/tools/create_AppImage_SteamDeck.sh index 7df4b6bca..151080238 100755 --- a/tools/create_AppImage_SteamDeck.sh +++ b/tools/create_AppImage_SteamDeck.sh @@ -1,7 +1,7 @@ #!/usr/bin/bash # SPDX-License-Identifier: MIT # -# ES-DE +# ES-DE Frontend # create_AppImage_SteamDeck.sh # # Runs the complete process of building a Linux AppImage specific to the Valve Steam Deck. @@ -13,8 +13,8 @@ # How many CPU threads to use for the compilation. JOBS=4 -SDL_RELEASE_TAG=release-2.30.1 -SDL_SHARED_LIBRARY=libSDL2-2.0.so.0.3000.1 +SDL_RELEASE_TAG=release-2.30.2 +SDL_SHARED_LIBRARY=libSDL2-2.0.so.0.3000.2 echo "Building Steam Deck AppImage..." diff --git a/tools/macOS_dependencies_build.sh b/tools/macOS_dependencies_build.sh index 1c483395f..60a9e52da 100755 --- a/tools/macOS_dependencies_build.sh +++ b/tools/macOS_dependencies_build.sh @@ -1,7 +1,7 @@ #!/bin/sh # SPDX-License-Identifier: MIT # -# ES-DE +# ES-DE Frontend # macOS_dependencies_build.sh # # Builds the external dependencies in-tree. @@ -12,7 +12,7 @@ # This script needs to run from the root of the repository. # -export MACOSX_DEPLOYMENT_TARGET=10.15 +export MACOSX_DEPLOYMENT_TARGET=11.0 # How many CPU threads to use for the compilation. JOBS=4 diff --git a/tools/macOS_dependencies_setup.sh b/tools/macOS_dependencies_setup.sh index a3ed661d3..cb04aef79 100755 --- a/tools/macOS_dependencies_setup.sh +++ b/tools/macOS_dependencies_setup.sh @@ -1,7 +1,7 @@ #!/bin/sh # SPDX-License-Identifier: MIT # -# ES-DE +# ES-DE Frontend # macOS_dependencies_setup.sh # # Downloads and prepares the external dependencies for building in-tree. @@ -280,7 +280,7 @@ if [ ! -d SDL ]; then fi cd SDL -git checkout release-2.30.1 +git checkout release-2.30.2 ln -s include SDL2 mkdir build cd .. diff --git a/tools/system-dirs-dummy-files/ROMs_ALL_Linux.zip b/tools/system-dirs-dummy-files/ROMs_ALL_Linux.zip index 78204c421..5ae2bbfe5 100644 Binary files a/tools/system-dirs-dummy-files/ROMs_ALL_Linux.zip and b/tools/system-dirs-dummy-files/ROMs_ALL_Linux.zip differ diff --git a/tools/system-dirs-dummy-files/ROMs_ALL_Windows.zip b/tools/system-dirs-dummy-files/ROMs_ALL_Windows.zip index dfab31474..ca07b7bd8 100644 Binary files a/tools/system-dirs-dummy-files/ROMs_ALL_Windows.zip and b/tools/system-dirs-dummy-files/ROMs_ALL_Windows.zip differ diff --git a/tools/system-dirs-dummy-files/ROMs_ALL_macOS.zip b/tools/system-dirs-dummy-files/ROMs_ALL_macOS.zip index dd41a4625..acee82250 100644 Binary files a/tools/system-dirs-dummy-files/ROMs_ALL_macOS.zip and b/tools/system-dirs-dummy-files/ROMs_ALL_macOS.zip differ diff --git a/tools/update_version_string.sh b/tools/update_version_string.sh index e44278b22..6776085bf 100755 --- a/tools/update_version_string.sh +++ b/tools/update_version_string.sh @@ -1,7 +1,7 @@ #!/usr/bin/bash # SPDX-License-Identifier: MIT # -# ES-DE +# ES-DE Frontend # update_version_string.sh # # Updates the version string for ES-DE. @@ -10,13 +10,13 @@ # The script has to be run from within the tools directory. # # Example use: -# ./update_version_string.sh 2 1 0 beta +# ./update_version_string.sh 3 0 2 beta # # The following files are updated by this script: # es-app/CMakeLists.txt -# es-app/src/ApplicationVersion.h # es-app/assets/ES-DE.plist # es-app/assets/Windows_Portable_README.txt +# es-core/src/ApplicationVersion.h # # This script is only intended to be used on Linux systems. # @@ -29,7 +29,7 @@ fi if [ $# -ne 3 ] && [ $# -ne 4 ]; then echo "Usage: ./update_version_string.sh []" echo "For example:" - echo "./update_version_string.sh 2 0 0 beta" + echo "./update_version_string.sh 3 0 2 beta" exit fi @@ -50,9 +50,36 @@ NEWSTRING="set(ES_VERSION ${1}.${2}.${3}${SUFFIX})" cat $MODIFYFILE | sed s/"${MODIFYSTRING}"/"${NEWSTRING}"/ > $TEMPFILE mv $TEMPFILE $MODIFYFILE +##### ES-DE_Info.plist + +MODIFYFILE=../es-app/assets/ES-DE_Info.plist +MODIFYSTRING=$(grep "ES-DE " $MODIFYFILE) +OLDVERSION=$(echo $MODIFYSTRING | cut -f4 -d" " | sed s/".........$"//) +MODIFYSTRING=$(echo $MODIFYSTRING | sed s/".........$"//) +NEWSTRING="ES-DE ${1}.${2}.${3}" + +cat $MODIFYFILE | sed s/"${MODIFYSTRING}"/"${NEWSTRING}"/ > $TEMPFILE +mv $TEMPFILE $MODIFYFILE + +MODIFYSTRING=$(grep -m1 "${OLDVERSION}" $MODIFYFILE) +MODIFYSTRING=$(echo $MODIFYSTRING | sed s/".........$"//) +# Adding the suffix is not fully compliant with the Apple documentation but seems to be working. +# It's not used for the release builds anyway so it should hopefully not be an issue. +NEWSTRING="${1}.${2}.${3}${SUFFIX}" + +cat $MODIFYFILE | sed s/"${MODIFYSTRING}"/"${NEWSTRING}"/ > $TEMPFILE +mv $TEMPFILE $MODIFYFILE + +##### Windows_Portable_README.txt + +ROW_NUM=$(grep -n "ES-DE release:" ../es-app/assets/Windows_Portable_README.txt | cut -f1 -d:) +ROW_NUM=$((ROW_NUM+1)) +NEWSTRING=${1}.${2}.${3}${SUFFIX} +sed -i ${ROW_NUM}s/.*/$(echo $NEWSTRING | unix2dos)/ ../es-app/assets/Windows_Portable_README.txt + ##### ApplicationVersion.h -MODIFYFILE=../es-app/src/ApplicationVersion.h +MODIFYFILE=../es-core/src/ApplicationVersion.h MODIFYSTRING=$(grep "PROGRAM_VERSION_MAJOR " $MODIFYFILE) NEWSTRING="#define PROGRAM_VERSION_MAJOR ${1}" @@ -94,31 +121,4 @@ NEWSTRING=$(grep "PROGRAM_RELEASE_NUMBER" $MODIFYFILE | sed "s/$OLDRELEASE/$NEWR cat $MODIFYFILE | sed s/"${MODIFYSTRING}"/"${NEWSTRING}"/ > $TEMPFILE mv $TEMPFILE $MODIFYFILE -##### ES-DE_Info.plist - -MODIFYFILE=../es-app/assets/ES-DE_Info.plist -MODIFYSTRING=$(grep "ES-DE " $MODIFYFILE) -OLDVERSION=$(echo $MODIFYSTRING | cut -f4 -d" " | sed s/".........$"//) -MODIFYSTRING=$(echo $MODIFYSTRING | sed s/".........$"//) -NEWSTRING="ES-DE ${1}.${2}.${3}" - -cat $MODIFYFILE | sed s/"${MODIFYSTRING}"/"${NEWSTRING}"/ > $TEMPFILE -mv $TEMPFILE $MODIFYFILE - -MODIFYSTRING=$(grep -m1 "${OLDVERSION}" $MODIFYFILE) -MODIFYSTRING=$(echo $MODIFYSTRING | sed s/".........$"//) -# Adding the suffix is not fully compliant with the Apple documentation but seems to be working. -# It's not used for the release builds anyway so it should hopefully not be an issue. -NEWSTRING="${1}.${2}.${3}${SUFFIX}" - -cat $MODIFYFILE | sed s/"${MODIFYSTRING}"/"${NEWSTRING}"/ > $TEMPFILE -mv $TEMPFILE $MODIFYFILE - -##### Windows_Portable_README.txt - -ROW_NUM=$(grep -n "ES-DE release:" ../es-app/assets/Windows_Portable_README.txt | cut -f1 -d:) -ROW_NUM=$((ROW_NUM+1)) -NEWSTRING=${1}.${2}.${3}${SUFFIX} -sed -i ${ROW_NUM}s/.*/$(echo $NEWSTRING | unix2dos)/ ../es-app/assets/Windows_Portable_README.txt - echo "Done updating, don't forget to run generate_man_page.sh once the binary has been compiled with the new version string."