From 0b674a0c6cc460467f7a9255f171eb6dccb804c7 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 13 Nov 2023 19:53:39 +0100 Subject: [PATCH 001/320] (macOS) Reclassified the application as a non-game to disable Game Mode on macOS 14 Sonoma --- es-app/assets/EmulationStation-DE_Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/assets/EmulationStation-DE_Info.plist b/es-app/assets/EmulationStation-DE_Info.plist index ffcd40a02..2090e59f2 100644 --- a/es-app/assets/EmulationStation-DE_Info.plist +++ b/es-app/assets/EmulationStation-DE_Info.plist @@ -27,7 +27,7 @@ CFBundleInfoDictionaryVersion 6.0 LSApplicationCategoryType - public.app-category.games + public.app-category.education LSMinimumSystemVersion 10.15.0 LSUIPresentationMode From dcf8e922f3e46533a332916463bf6653239d2960 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 13 Nov 2023 20:53:30 +0100 Subject: [PATCH 002/320] (macOS) Added support for the Visual Pinball (vpinball) game system --- resources/systems/macos/es_find_rules.xml | 6 ++++++ resources/systems/macos/es_systems.xml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/resources/systems/macos/es_find_rules.xml b/resources/systems/macos/es_find_rules.xml index 8d967f405..e380cd234 100644 --- a/resources/systems/macos/es_find_rules.xml +++ b/resources/systems/macos/es_find_rules.xml @@ -370,6 +370,12 @@ /usr/local/bin/xvic + + + + /Applications/VPinballX_GL.app/Contents/MacOS/VPinballX_GL + + diff --git a/resources/systems/macos/es_systems.xml b/resources/systems/macos/es_systems.xml index 8c23370da..142266e64 100644 --- a/resources/systems/macos/es_systems.xml +++ b/resources/systems/macos/es_systems.xml @@ -1962,7 +1962,7 @@ Visual Pinball %ROMPATH%/vpinball .vpt .VPT .vpx .VPX - PLACEHOLDER %ROM% + %EMULATOR_VISUAL-PINBALL% -play %ROM% vpinball vpinball From a01215a8db801eb69a3db167f49d57094f57f455 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 13 Nov 2023 21:26:54 +0100 Subject: [PATCH 003/320] Updated latest_release.json for the 2.2.1 macOS re-release --- latest_release.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/latest_release.json b/latest_release.json index 25e613549..5bf0b657e 100644 --- a/latest_release.json +++ b/latest_release.json @@ -24,15 +24,15 @@ { "name": "macOSApple", "filename": "EmulationStation-DE-2.2.1-arm64.dmg", - "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/101581889/download", - "md5": "999fa80d231ac00041e321685872b545", + "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/101732696/download", + "md5": "1aec895180c0e19a3d33ce6b6f267c0b", "message": "" }, { "name": "macOSIntel", "filename": "EmulationStation-DE-2.2.1-x64.dmg", - "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/101581898/download", - "md5": "70eb5456655d8902da79ea08b3efb9da", + "url": "https://gitlab.com/es-de/emulationstation-de/-/package_files/101732724/download", + "md5": "9c7f26773402afb3f8fcae79ac16a5fd", "message": "" }, { From 8eee1518203485ba67d0f0406feb4eca4b613a0b Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 13 Nov 2023 21:36:34 +0100 Subject: [PATCH 004/320] Documentation update --- CHANGELOG.md | 12 ++++++++++ INSTALL-DEV.md | 2 +- THEMES-DEV.md | 60 ++++++++++++++++++++++++++++++++++++++++-------- THEMES.md | 58 +++++++++++++++++++++++++++++++++++++++------- USERGUIDE-DEV.md | 4 ++-- USERGUIDE.md | 2 +- 6 files changed, 117 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4894ca69..faedd5410 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # EmulationStation Desktop Edition (ES-DE) - Changelog +## Version 3.0.0 (in development) + +**Release date:** TBD + +### Release overview + +### Detailed list of changes + +### Bug fixes + ## Version 2.2.1 **Release date:** 2023-11-12 @@ -18,6 +28,8 @@ Some improvements were also made to the systems sorting functionality. * The Orphaned data cleanup utility will now skip any system where a flatten.txt file is present * Changed a number of error messages in the Orphaned data cleanup utility from uppercase to lowercase * The application release number is now tracked on startup instead of the application version +* (macOS) Reclassified the application as a non-game to disable Game Mode on macOS 14 Sonoma +* (macOS) Added support for the Visual Pinball (vpinball) game system * (slate-es-de) Added console graphics for the adam system * Changed the systems sorting platform from "Peripheral" to "Console" for the fds, megacd, megacdjp, n64dd, pcenginecd and satellaview systems * Changed the systems sorting platform from "Peripheral" to "Console" for the sega32x, sega32xjp, sega32xna, segacd, sgb, sufami and tg-cd systems diff --git a/INSTALL-DEV.md b/INSTALL-DEV.md index 3c33c97af..2ae95beda 100644 --- a/INSTALL-DEV.md +++ b/INSTALL-DEV.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) v2.2 (development version) - Building and advanced configuration +# EmulationStation Desktop Edition (ES-DE) v3.0 (development version) - Building and advanced configuration This document is only relevant for the current ES-DE development version, if you would like to see the documentation for the latest stable release, refer to [INSTALL.md](INSTALL.md) instead. diff --git a/THEMES-DEV.md b/THEMES-DEV.md index cf3e2b108..18491cf6a 100644 --- a/THEMES-DEV.md +++ b/THEMES-DEV.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) v2.2 (development version) - Themes +# EmulationStation Desktop Edition (ES-DE) v3.0 (development version) - Themes **Note:** This document is only relevant for the current ES-DE development version, if you would like to see the documentation for the latest stable release, refer to [THEMES.md](THEMES.md) instead. @@ -158,17 +158,19 @@ Note that the legacy theme engine had quite inaccurate text sizing and font rend * The defined line spacing was not always applied for automatically sized text elements * Font sizes were rounded to integers, leading to imprecise text sizing across different resolutions (the rounding was also done incorrectly) -## System metadata and logo repositories +## Theme assets repositories -There are two useful repositories hosted by the ES-DE project that provide system metadata and system logotypes. This greatly simplifies the work of adding support for all systems that ES-DE supports. +There are several useful repositories hosted by the ES-DE project that provide system metadata and system graphics files. Using these greatly simplifies the work of adding support for all ES-DE systems to your theme. -**Metadata** +Make sure to regularly check for updates in these repositories as corrections, improvements and additions of new systems are made continuously. + +### Metadata The metadata repository provides descriptions, release dates, per-system color palettes etc. and it can be found here: https://gitlab.com/es-de/themes/system-metadata -By adding this to your theme, either via manually downloading and including it, or by adding it as a Git subtree, you'll be able to access its defined variables. Make sure to regularly check for updates as corrections and additions of new systems are done continuously. Also check the README.md file in the repository for more details on how to actually use the variables. +By adding this to your theme, either via manually downloading and including it, or by adding it as a Git subtree, you'll be able to access its defined variables. Check the README.md file in the repository for details on how to actually use the variables. Here's how to add this repository as a subtree inside your theme's Git repository: ``` @@ -183,9 +185,47 @@ git subtree pull --prefix=system-metadata --squash system-metadata master The directory name can be changed to whatever you like using the --prefix flag. -**Logos** +### Controller outline graphics -Likewise there's a repository of system logotypes that can also be added and used in the same fashion as the metadata. It can be found here: +This repository provides controller graphics files for each system in an outline style and it can be found here: + +https://gitlab.com/es-de/themes/system-controllers-outline + +Here's how to add this repository as a subtree inside your theme's Git repository: +``` +git remote add system-controllers-outline https://gitlab.com/es-de/themes/system-controllers-outline.git +git subtree add --prefix=system-controllers-outline --squash system-controllers-outline master +``` + +To later pull in repository updates you'll run the following: +``` +git subtree pull --prefix=system-controllers-outline --squash system-controllers-outline master +``` + +The directory name can be changed to whatever you like using the --prefix flag. + +### Mini system graphics + +This repository provides graphics files for each system in a "mini" style and it can be found here: + +https://gitlab.com/es-de/themes/system-graphics-mini + +Here's how to add this repository as a subtree inside your theme's Git repository: +``` +git remote add system-graphics-mini https://gitlab.com/es-de/themes/system-graphics-mini.git +git subtree add --prefix=system-graphics-mini --squash system-graphics-mini master +``` + +To later pull in repository updates you'll run the following: +``` +git subtree pull --prefix=system-graphics-mini --squash system-graphics-mini master +``` + +The directory name can be changed to whatever you like using the --prefix flag. + +### Logos + +This repository provides logos for each system in color and white (the latter for use with color shifting) and it can be found here: https://gitlab.com/es-de/themes/system-logos @@ -202,11 +242,13 @@ git subtree pull --prefix=system-logos --squash system-logos master The directory name can be changed to whatever you like using the --prefix flag. -**Adding remotes** +### Adding remotes -Note that the remotes are only setup for your local repository, so if you clone a theme you'll need to manually add the system-metadata and/or system-logos remotes to be able to pull to these subtrees. That means you'll need to run the following commands on a freshly cloned theme repository: +Note that the remotes are only setup for your local repository, so if you clone a theme you'll need to manually add the repository remotes to be able to pull from these subtrees. That means you'll need to run one or more of the following commands on a freshly cloned theme repository: ``` git remote add system-metadata https://gitlab.com/es-de/themes/system-metadata.git +git remote add system-controllers-outline https://gitlab.com/es-de/themes/system-controllers-outline.git +git remote add system-graphics-mini https://gitlab.com/es-de/themes/system-graphics-mini.git git remote add system-logos https://gitlab.com/es-de/themes/system-logos.git ``` After doing this you'll be able to pull repository updates as described above. diff --git a/THEMES.md b/THEMES.md index b503af69a..8cff60738 100644 --- a/THEMES.md +++ b/THEMES.md @@ -156,17 +156,19 @@ Note that the legacy theme engine had quite inaccurate text sizing and font rend * The defined line spacing was not always applied for automatically sized text elements * Font sizes were rounded to integers, leading to imprecise text sizing across different resolutions (the rounding was also done incorrectly) -## System metadata and logo repositories +## Theme assets repositories -There are two useful repositories hosted by the ES-DE project that provide system metadata and system logotypes. This greatly simplifies the work of adding support for all systems that ES-DE supports. +There are several useful repositories hosted by the ES-DE project that provide system metadata and system graphics files. Using these greatly simplifies the work of adding support for all ES-DE systems to your theme. -**Metadata** +Make sure to regularly check for updates in these repositories as corrections, improvements and additions of new systems are made continuously. + +### Metadata The metadata repository provides descriptions, release dates, per-system color palettes etc. and it can be found here: https://gitlab.com/es-de/themes/system-metadata -By adding this to your theme, either via manually downloading and including it, or by adding it as a Git subtree, you'll be able to access its defined variables. Make sure to regularly check for updates as corrections and additions of new systems are done continuously. Also check the README.md file in the repository for more details on how to actually use the variables. +By adding this to your theme, either via manually downloading and including it, or by adding it as a Git subtree, you'll be able to access its defined variables. Check the README.md file in the repository for details on how to actually use the variables. Here's how to add this repository as a subtree inside your theme's Git repository: ``` @@ -181,9 +183,47 @@ git subtree pull --prefix=system-metadata --squash system-metadata master The directory name can be changed to whatever you like using the --prefix flag. -**Logos** +### Controller outline graphics -Likewise there's a repository of system logotypes that can also be added and used in the same fashion as the metadata. It can be found here: +This repository provides controller graphics files for each system in an outline style and it can be found here: + +https://gitlab.com/es-de/themes/system-controllers-outline + +Here's how to add this repository as a subtree inside your theme's Git repository: +``` +git remote add system-controllers-outline https://gitlab.com/es-de/themes/system-controllers-outline.git +git subtree add --prefix=system-controllers-outline --squash system-controllers-outline master +``` + +To later pull in repository updates you'll run the following: +``` +git subtree pull --prefix=system-controllers-outline --squash system-controllers-outline master +``` + +The directory name can be changed to whatever you like using the --prefix flag. + +### Mini system graphics + +This repository provides graphics files for each system in a "mini" style and it can be found here: + +https://gitlab.com/es-de/themes/system-graphics-mini + +Here's how to add this repository as a subtree inside your theme's Git repository: +``` +git remote add system-graphics-mini https://gitlab.com/es-de/themes/system-graphics-mini.git +git subtree add --prefix=system-graphics-mini --squash system-graphics-mini master +``` + +To later pull in repository updates you'll run the following: +``` +git subtree pull --prefix=system-graphics-mini --squash system-graphics-mini master +``` + +The directory name can be changed to whatever you like using the --prefix flag. + +### Logos + +This repository provides logos for each system in color and white (the latter for use with color shifting) and it can be found here: https://gitlab.com/es-de/themes/system-logos @@ -200,11 +240,13 @@ git subtree pull --prefix=system-logos --squash system-logos master The directory name can be changed to whatever you like using the --prefix flag. -**Adding remotes** +### Adding remotes -Note that the remotes are only setup for your local repository, so if you clone a theme you'll need to manually add the system-metadata and/or system-logos remotes to be able to pull to these subtrees. That means you'll need to run the following commands on a freshly cloned theme repository: +Note that the remotes are only setup for your local repository, so if you clone a theme you'll need to manually add the repository remotes to be able to pull from these subtrees. That means you'll need to run one or more of the following commands on a freshly cloned theme repository: ``` git remote add system-metadata https://gitlab.com/es-de/themes/system-metadata.git +git remote add system-controllers-outline https://gitlab.com/es-de/themes/system-controllers-outline.git +git remote add system-graphics-mini https://gitlab.com/es-de/themes/system-graphics-mini.git git remote add system-logos https://gitlab.com/es-de/themes/system-logos.git ``` After doing this you'll be able to pull repository updates as described above. diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index 4c40abd59..9f033ee27 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) v2.2 (development version) - User guide +# EmulationStation Desktop Edition (ES-DE) v3.0 (development version) - User guide This version of the user guide is only relevant for the current ES-DE development version, if you are using the latest stable release, refer to [USERGUIDE.md](USERGUIDE.md) instead. @@ -4018,7 +4018,7 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | vic20 | Commodore VIC-20 | VICE xvic | VICE xvic **(Standalone)** | No | Single archive or tape, cartridge or diskette image file | | videopac | Philips Videopac G7000 | O2EM | MAME - Current,
MAME **(Standalone)** | Yes | Single archive or ROM file | | | virtualboy | Nintendo Virtual Boy | Beetle VB | Mednafen **(Standalone)** | No | | -| vpinball | Visual Pinball | Visual Pinball **(Standalone)** [UW] | | No | In separate folder interpreted as a file | +| vpinball | Visual Pinball | Visual Pinball **(Standalone)** | | No | In separate folder interpreted as a file | | vsmile | VTech V.Smile | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file | | wasm4 | WASM-4 Fantasy Console | WASM-4 | | No | Single .wasm file | | wii | Nintendo Wii | Dolphin | Dolphin **(Standalone)**,
PrimeHack **(Standalone)** [UW] | No | | diff --git a/USERGUIDE.md b/USERGUIDE.md index 983e45050..2946a5c71 100644 --- a/USERGUIDE.md +++ b/USERGUIDE.md @@ -4016,7 +4016,7 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | vic20 | Commodore VIC-20 | VICE xvic | VICE xvic **(Standalone)** | No | Single archive or tape, cartridge or diskette image file | | videopac | Philips Videopac G7000 | O2EM | MAME - Current,
MAME **(Standalone)** | Yes | Single archive or ROM file | | | virtualboy | Nintendo Virtual Boy | Beetle VB | Mednafen **(Standalone)** | No | | -| vpinball | Visual Pinball | Visual Pinball **(Standalone)** [UW] | | No | In separate folder interpreted as a file | +| vpinball | Visual Pinball | Visual Pinball **(Standalone)** | | No | In separate folder interpreted as a file | | vsmile | VTech V.Smile | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file | | wasm4 | WASM-4 Fantasy Console | WASM-4 | | No | Single .wasm file | | wii | Nintendo Wii | Dolphin | Dolphin **(Standalone)**,
PrimeHack **(Standalone)** [UW] | No | | From 2cd3e7af6636fbe039b1f6a2858807818bf6177a Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 13 Nov 2023 22:33:07 +0100 Subject: [PATCH 005/320] Bumped the version to 3.0.0-alpha --- CMakeLists.txt | 2 +- es-app/assets/EmulationStation-DE_Info.plist | 6 +++--- es-app/assets/Windows_Portable_README.txt | 2 +- es-app/assets/emulationstation.6.gz | Bin 1078 -> 1084 bytes es-app/src/EmulationStation.h | 12 ++++++------ 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4aeec12e7..5da4ca03d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ endif() project(emulationstation-de) # Application version, update this when making a new release. -set(ES_VERSION 2.2.1) +set(ES_VERSION 3.0.0-alpha) # 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) diff --git a/es-app/assets/EmulationStation-DE_Info.plist b/es-app/assets/EmulationStation-DE_Info.plist index 2090e59f2..e46d72fb7 100644 --- a/es-app/assets/EmulationStation-DE_Info.plist +++ b/es-app/assets/EmulationStation-DE_Info.plist @@ -11,7 +11,7 @@ CFBundleExecutable EmulationStation CFBundleGetInfoString - EmulationStation Desktop Edition 2.2.1 + EmulationStation Desktop Edition 3.0.0 CFBundleIconFile EmulationStation-DE.icns CFBundleName @@ -21,9 +21,9 @@ CFBundleSignature ESDE CFBundleShortVersionString - 2.2.1 + 3.0.0-alpha CFBundleVersion - 2.2.1 + 3.0.0-alpha CFBundleInfoDictionaryVersion 6.0 LSApplicationCategoryType diff --git a/es-app/assets/Windows_Portable_README.txt b/es-app/assets/Windows_Portable_README.txt index f295a7f0c..32bc4b3a8 100644 --- a/es-app/assets/Windows_Portable_README.txt +++ b/es-app/assets/Windows_Portable_README.txt @@ -2,7 +2,7 @@ EmulationStation Desktop Edition (ES-DE) - Portable installation on Windows --------------------------------------------------------------------------- ES-DE release: -2.2.1 +3.0.0-alpha The latest version can be downloaded from https://es-de.org Please also consider donating to the project, links for that can be found on the ES-DE website just mentioned. diff --git a/es-app/assets/emulationstation.6.gz b/es-app/assets/emulationstation.6.gz index f86bcabbb97ef3bcf236b8a4dd8ea60bc207a658..53cf0cc1ff28be2223908b2f0124110047716517 100644 GIT binary patch literal 1084 zcmV-C1jG9uiwFp|l~QE_17&S>Y+-b1Z*FsRVRUJ4ZZ0+eomE?J8aWhx_pdn1%YqaJ zl197RYE_Ar$p$q9#E?o=h6gkDFcvfRtnGo&U%$sTY=EVyv=0OFxqLq7I~PZ33x*ST zoXlZ78IJD0!Tf%dz}@H}{smxUVM`6Hxa68z&S1HNf|vD8MI~HEx9_9th(z;yh{sP4 zgZXIkn9Thjw0>(r>rriZwd5LZ`Zw?J99K(rD3Vn)(E)*ih`0hGArC^6xxjE6q~|bp=9S6sG={3rfKEDjQGwMWK3V+>ufOI7aH2g zK*g70xwG7KV9Bwqkg6@Rg83YyQE3JKmV%lC3CQz}iv#;8!2*tx!2nLp+%=djU6!1o z@r$>9Ifj)Ai->HP0wKvz$zQP(3bjS1Fb=OcRE{;;LE=Da+tlYEP0d^nbhCnI>sKs) z^b>Ym=wNK#fOL~p3S-l*lBJs&lB`7yw6Ur}j4X_v;Z$eE6*wC#CuLz&56;m`RUU(i zl|*`vz!7%jWj@_wH^@cF%}J{xD`~e7jJam?Y9E#(D@cQn-ypdv8P{+4`^9qZ?}aDr zuXM)46gb;Ecl4n?ji6GDyZYXt@`BG=D6{^d(-)_`=*8afVHZ4vtQ)Knj&&|pufE~j z=umH!gSP|5HzGUD5u3|5j@cQ@E4L=KC+4%4@9XS!*vc9gEv~OqghEwe`P3A5Bkt5- zwL1(MK9J4?ocd%T^JU{hj-{Ir@MoXy$v(h3hBa~(mdnO>_kM@$wV0lJ5a{_bac}Xf zr=PK;sc_rl`(tno3jD6HV^%KOW=Z|qF?gEaPiEwSqgi5i1-57V>?P~KpM|xx`Oxce zgNZ~+uX-N|nQ^PtR5<>ts=+s92kn1l7~#4@$N*m}cu@J@4fZ;;kP1cZjNY{)#)Y+-b1Z*FsRVRUJ4ZZ0+eomJm&8aWVt_g^u`%YhUY z!bNv&b*eaTS zF`hmo3;zeL-&@dnP+MNDxQ0Q0@Ee}vswt@zN+#C-!HAoURW-y+`15uU4Wesk>zjTD z?f;?`H!Tt+cknQr#DpL5=78_Q&nP`O`T8)OCF6udpWu>%Jf-3GAXgezTJ4OGYoI77X(O}3oz^ZiXIa5sH5%{& zE4nq_f}qN)AyZ|^Gsllfp3R7NYwA71P!=O#8^cdgnj2L%j@<)yg4tpTPX!n2!Y;|Mu1k@HXkScE2~4IrmnzQOEUM` z|Hq#s_iHcDOBYA`XT4LB6(TFSFM! zSu|S0mjtyCI5%_GV6=2qa)!pw-un5J zRw^taX2TRnNk&Tkik(oX9cBvs@QP#QSfd>!4y3kCeM!>P%=JJwD|ohf;qpg6VW))- z#^w!5H(8}HHti}|x|t!#M$|wXt19Hk!sr=Jbyi$~v%zvw7Dn|5j-IRXlvJ!GruT## zX~$mX!##yTE=q3BS{<{Jb_>CnYeuj3ZnK?qqlSS1|mT&!QP;oRs@Zh0+3T>CH7;6QU*`;ks>1TADegwxsljT095Q?w zoe4Pg*+S;4#=9I#HzDB9KHRf?fOQOO%gCdwYB-s>v4mDL`tuF z9|@UrtJO@n{8v?jZ^|Cp-(~3GrbEaOUn{s*`9BTzI&*xN0NLRdB>(^b diff --git a/es-app/src/EmulationStation.h b/es-app/src/EmulationStation.h index 1333dc3f6..b2d6f695e 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/EmulationStation.h @@ -11,16 +11,16 @@ // 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 2 -#define PROGRAM_VERSION_MINOR 2 -#define PROGRAM_VERSION_MAINTENANCE 1 -#define PROGRAM_RELEASE_NUMBER 40 +#define PROGRAM_VERSION_MAJOR 3 +#define PROGRAM_VERSION_MINOR 0 +#define PROGRAM_VERSION_MAINTENANCE 0 +#define PROGRAM_RELEASE_NUMBER 41 // clang-format on -#define PROGRAM_VERSION_STRING "2.2.1" +#define PROGRAM_VERSION_STRING "3.0.0-alpha" #define PROGRAM_BUILT_STRING __DATE__ " - " __TIME__ -#define RESOURCE_VERSION_STRING "2,2,1\0" +#define RESOURCE_VERSION_STRING "3,0,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR, PROGRAM_VERSION_MINOR, PROGRAM_VERSION_MAINTENANCE #endif // ES_APP_EMULATION_STATION_H From f52f3a17a04c2fad25950e444541840cc5f53770 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 13 Nov 2023 23:27:00 +0100 Subject: [PATCH 006/320] Added some additional theme inventory debug logging to GuiThemeDownloader --- es-app/src/guis/GuiThemeDownloader.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/es-app/src/guis/GuiThemeDownloader.cpp b/es-app/src/guis/GuiThemeDownloader.cpp index efb05884c..6659f329d 100644 --- a/es-app/src/guis/GuiThemeDownloader.cpp +++ b/es-app/src/guis/GuiThemeDownloader.cpp @@ -470,7 +470,10 @@ void GuiThemeDownloader::resetRepository(git_repository* repository) void GuiThemeDownloader::makeInventory() { + const auto totalInventoryTime {std::chrono::system_clock::now()}; + for (auto& theme : mThemes) { + const auto themeInventoryTime {std::chrono::system_clock::now()}; const std::string path {mThemeDirectory + theme.reponame}; theme.invalidRepository = false; theme.corruptRepository = false; @@ -519,8 +522,25 @@ void GuiThemeDownloader::makeInventory() theme.hasLocalChanges = true; git_repository_free(repository); + + LOG(LogDebug) << "GuiThemeDownloader::makeInventory(): Theme \"" +#if defined(_WIN64) + << Utils::String::replace(path, "/", "\\") + << "\" inventory completed in: " +#else + << path << "\" inventory completed in: " +#endif + << std::chrono::duration_cast( + std::chrono::system_clock::now() - themeInventoryTime) + .count() + << " ms"; } } + LOG(LogDebug) << "GuiThemeDownloader::makeInventory(): Total theme inventory time: " + << std::chrono::duration_cast( + std::chrono::system_clock::now() - totalInventoryTime) + .count() + << " ms"; } bool GuiThemeDownloader::renameDirectory(const std::string& path, const std::string& extension) @@ -1158,8 +1178,14 @@ bool GuiThemeDownloader::input(InputConfig* config, Input input) "LOCAL CUSTOMIZATIONS", "PROCEED", [this] { +#if defined(_WIN64) + const std::filesystem::path themeDirectory { + Utils::String::replace(mThemeDirectory, "/", "\\") + + mThemes[mList->getCursorId()].reponame}; +#else const std::filesystem::path themeDirectory {mThemeDirectory + mThemes[mList->getCursorId()].reponame}; +#endif LOG(LogInfo) << "Deleting theme directory \"" << themeDirectory.string() << "\""; if (!Utils::FileSystem::removeDirectory(themeDirectory.string(), true)) { mWindow->pushGui(new GuiMsgBox( From 221a87ce3081ded5dfa305f94b611962bce01f7a Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 13 Nov 2023 23:35:41 +0100 Subject: [PATCH 007/320] Removed the -Minimized flag from the Visual Pinball launch command on Unix --- resources/systems/unix/es_systems.xml | 2 +- resources/systems/windows/es_systems.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/systems/unix/es_systems.xml b/resources/systems/unix/es_systems.xml index dc05793f1..9d03ceda0 100644 --- a/resources/systems/unix/es_systems.xml +++ b/resources/systems/unix/es_systems.xml @@ -2056,7 +2056,7 @@ Visual Pinball %ROMPATH%/vpinball .vpt .VPT .vpx .VPX - %EMULATOR_VISUAL-PINBALL% -Minimized -Play %ROM% + %EMULATOR_VISUAL-PINBALL% -play %ROM% vpinball vpinball diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index 7062e11c0..9f588e0ce 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -2041,7 +2041,7 @@ Visual Pinball %ROMPATH%\vpinball .vpt .VPT .vpx .VPX - %EMULATOR_VISUAL-PINBALL% -Minimized -Play %ROM% + %EMULATOR_VISUAL-PINBALL% -minimized -play %ROM% vpinball vpinball From b31172846578864a074ffaf5ea5ed225f411024c Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 14 Nov 2023 22:19:12 +0100 Subject: [PATCH 008/320] (Windows) Updated the find rules for Visual Pinball --- es-app/assets/Windows_Portable_README.txt | 3 ++- resources/systems/windows/es_find_rules.xml | 6 ++++++ resources/systems/windows/es_find_rules_portable.xml | 4 ++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/es-app/assets/Windows_Portable_README.txt b/es-app/assets/Windows_Portable_README.txt index 32bc4b3a8..7a47db3b7 100644 --- a/es-app/assets/Windows_Portable_README.txt +++ b/es-app/assets/Windows_Portable_README.txt @@ -128,7 +128,8 @@ Emulators\VICE\xplus4.exe Emulators\VICE\bin\xplus4.exe Emulators\VICE\xvic.exe Emulators\VICE\bin\xvic.exe -Emulators\Visual Pinball\VPinballX.exe +Emulators\VPinballX\VPinballX_GL64.exe +Emulators\VPinballX\VPinballX64.exe Emulators\Vita3K\Vita3K.exe Emulators\xemu\xemu.exe Emulators\xenia\xenia.exe diff --git a/resources/systems/windows/es_find_rules.xml b/resources/systems/windows/es_find_rules.xml index 7d64d4fca..42ce7f53d 100644 --- a/resources/systems/windows/es_find_rules.xml +++ b/resources/systems/windows/es_find_rules.xml @@ -886,9 +886,15 @@ + VPinballX_GL64.exe + VPinballX64.exe VPinballX.exe + %ESPATH%\Emulators\VPinballX\VPinballX_GL64.exe + %ESPATH%\..\Emulators\VPinballX\VPinballX_GL64.exe + %ESPATH%\Emulators\VPinballX\VPinballX64.exe + %ESPATH%\..\Emulators\VPinballX\VPinballX64.exe %ESPATH%\Emulators\Visual Pinball\VPinballX.exe %ESPATH%\..\Emulators\Visual Pinball\VPinballX.exe diff --git a/resources/systems/windows/es_find_rules_portable.xml b/resources/systems/windows/es_find_rules_portable.xml index 0ed950f73..c793ebc02 100644 --- a/resources/systems/windows/es_find_rules_portable.xml +++ b/resources/systems/windows/es_find_rules_portable.xml @@ -592,6 +592,10 @@ + %ESPATH%\Emulators\VPinballX\VPinballX_GL64.exe + %ESPATH%\..\Emulators\VPinballX\VPinballX_GL64.exe + %ESPATH%\Emulators\VPinballX\VPinballX64.exe + %ESPATH%\..\Emulators\VPinballX\VPinballX64.exe %ESPATH%\Emulators\Visual Pinball\VPinballX.exe %ESPATH%\..\Emulators\Visual Pinball\VPinballX.exe From 7fbced93512b1c1c852ff94e2b80bfa8d14be632 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 14 Nov 2023 22:21:31 +0100 Subject: [PATCH 009/320] Documentation update --- CHANGELOG.md | 3 ++ USERGUIDE-DEV.md | 80 +++++++++++++++++++++++++++++++++++++++++++++++- USERGUIDE.md | 76 +++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 156 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index faedd5410..64d5ffaae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ ### Detailed list of changes +* (Unix) Removed the -Minimized flag from the Visual Pinball launch command +* (Windows) Updated the find rules for Visual Pinball to match the actual filenames of the official releases + ### Bug fixes ## Version 2.2.1 diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index 9f033ee27..5e4e116df 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -254,6 +254,8 @@ If you want to create your own portable intallation from scratch or customize th A number of systems have alternative emulator entries named _Shortcut or script_ which allows the direct execution of .lnk shortcut files or .bat batch files. It's not possible by default to directly launch .ps1 PowerShell scripts. As running PowerShell scripts is not even enabled by default on Windows they are for sure not recommended. If you still want to use them the best approach is to execute them via either a .lnk shortcut file or a .bat wrapper script where you explicitly call powershell.exe with the -command flag. If you instead insist on running them directly from ES-DE, you'll need to add a custom system or find rule configuration where you execute powershell.exe instead of cmd.exe and you'll also need to add .ps1 as a file extension for each relevant system. +Some disk operations can have abysmal performance on Windows, and this may be especially obvious for the theme downloader. This is often caused by anti-virus software like Microsoft Defender. If it takes say 30 seconds rather than 300 milliseconds to open the theme downloader then it may be a good idea to add an exlusion for the .emulationstation\themes\ directory to Microsoft Defender. The same may also be true for other directories like the ROMs folder if disk performance is terrible. Refer to your anti-virus software documentation on how to setup such exclusions. + ## Specific notes for macOS As macOS does not support Vulkan some emulators are not available, and some that do exist have not been updated for this operating system in recent years. But emulator support is steadily improving and native ARM releases ("Apple Silicon") are also getting more common. One issue though is that some emulators are not codesigned and notarized so macOS refuses to run them by default. You can override the operating system's security settings however, which will work around this problem. Some emulators are also available via the [Homebrew](https://brew.sh) package manager and in many instances ES-DE includes support for these releases using the bundled configuration. @@ -812,6 +814,12 @@ cd ~/Applications/SkyEmu chmod +x SkyEmu ``` +And for VPinballX_GL: +``` +cd ~/Applications/VPinballX +chmod +x VPinballX_GL +``` + ## Running Windows emulators on Linux using Wine or Proton On Linux it's possible to run emulators developed specifically for Microsoft Windows via the Wine compatibility layer. Support is also included for the Proton fork of Wine. @@ -2620,6 +2628,76 @@ https://docs.mamedev.org/usingmame/defaultkeys.html Scraping can also be a bit challenging as MAME software list names are used and neither ScreenScraper nor TheGamesDB can parse these names. So it's recommended to run the scraper in interactive mode and refine the searches for all games that are not properly identified. +### Visual Pinball + +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. + +The Windows release of Visual Pinball can be downloaded here (make sure to get the GL version):\ +https://github.com/vpinball/vpinball/releases + +Apart from this the Windows-specific setup is not covered in this document, but you should be able to find a lot of resources online on this topic. + +The Linux and macOS releases need to be downloaded from the GitHub Actions page for the time being:\ +https://github.com/vpinball/vpinball/actions + +On Linux simply unpack the archive into `~/Applications/VPinballX` and make sure to give the binary executable permissions: +``` +cd ~/Applications/VPinballX +chmod +x VPinballX_GL +``` + +On macOS there is a DMG package that you simply install. + +Once you've installed Visual Pinball start it once outside ES-DE and its .ini configuration file will be created. On Linux and macOS this is `~/.vpinball/VPinballX.ini` + +Set the following entries in this file: +``` +VPRegPath = ./ +PinMAMEPath = ./ +PinMAMEIniPath = ./ +``` + +If you don't do this the table may still start but won't work properly and you'll not be able to actually start a game. + +ES-DE launches .vpx and .vpt files for the vpinball system, but most tables come shipped with multiple additional files that are needed for the table to work, for example: +``` +~/ROMs/vpinball/fh/pinmame/ +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.directb2s +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.ini +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.vbs +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx +``` + +Assembling the necessary files to run a table is beyond the scope of this guide but there are various resources available online for this. + +This specific table requires PinMAME to run, and the _fh_ directory name is an example of the abbreviations commonly used in the pinball community. You can for instance find these names in the [Internet Pinball Database](https://www.ipdb.org/) where they are referred to as _Common Abbreviations_. + +If you don't need to retain these abbreviations then you can simply setup your games using the _directories interpreted as files_ functionality: +``` +~/ROMs/vpinball/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx/pinmame/ +~/ROMs/vpinball/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx/Funhouse (Williams 1990)_Bigus(MOD)1.6.directb2s +~/ROMs/vpinball/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx/Funhouse (Williams 1990)_Bigus(MOD)1.6.ini +~/ROMs/vpinball/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx/Funhouse (Williams 1990)_Bigus(MOD)1.6.vbs +~/ROMs/vpinball/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx +``` + +If you however insist on retaining these abbreviations you could use folder links to launch the .vpx or .vpt file inside the fh directory by editing the folder in the metadata editor and selecting the game file via the _Folder link_ entry. + +A final option would be to use the _folder flattening_ functionality, although this has many negative side effects that you need to be aware of. If going for this approach make sure to thoroughly read the [Folder flattening](USERGUIDE-DEV.md#folder-flattening) section of this document. + +``` +~/ROMs/vpinball/fh/pinmame/ +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.directb2s +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.ini +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.vbs +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx +~/ROMs/vpinball/flatten.txt +``` + +With folder flattening in place the .vpx and .vpt files will show up as file entries directly in the root of the gamelist. + ## Scraping Scraping means downloading metadata and game media files (images and videos) for the games in your collection. @@ -4018,7 +4096,7 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | vic20 | Commodore VIC-20 | VICE xvic | VICE xvic **(Standalone)** | No | Single archive or tape, cartridge or diskette image file | | videopac | Philips Videopac G7000 | O2EM | MAME - Current,
MAME **(Standalone)** | Yes | Single archive or ROM file | | | virtualboy | Nintendo Virtual Boy | Beetle VB | Mednafen **(Standalone)** | No | | -| vpinball | Visual Pinball | Visual Pinball **(Standalone)** | | No | In separate folder interpreted as a file | +| vpinball | Visual Pinball | Visual Pinball **(Standalone)** | | No | See the specific _Visual Pinball_ section elsewhere in this guide | | vsmile | VTech V.Smile | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file | | wasm4 | WASM-4 Fantasy Console | WASM-4 | | No | Single .wasm file | | wii | Nintendo Wii | Dolphin | Dolphin **(Standalone)**,
PrimeHack **(Standalone)** [UW] | No | | diff --git a/USERGUIDE.md b/USERGUIDE.md index 2946a5c71..f56ac33ee 100644 --- a/USERGUIDE.md +++ b/USERGUIDE.md @@ -252,6 +252,8 @@ If you want to create your own portable intallation from scratch or customize th A number of systems have alternative emulator entries named _Shortcut or script_ which allows the direct execution of .lnk shortcut files or .bat batch files. It's not possible by default to directly launch .ps1 PowerShell scripts. As running PowerShell scripts is not even enabled by default on Windows they are for sure not recommended. If you still want to use them the best approach is to execute them via either a .lnk shortcut file or a .bat wrapper script where you explicitly call powershell.exe with the -command flag. If you instead insist on running them directly from ES-DE, you'll need to add a custom system or find rule configuration where you execute powershell.exe instead of cmd.exe and you'll also need to add .ps1 as a file extension for each relevant system. +Some disk operations can have abysmal performance on Windows, and this may be especially obvious for the theme downloader. This is often caused by anti-virus software like Microsoft Defender. If it takes say 30 seconds rather than 300 milliseconds to open the theme downloader then it may be a good idea to add an exlusion for the .emulationstation\themes\ directory to Microsoft Defender. The same may also be true for other directories like the ROMs folder if disk performance is terrible. Refer to your anti-virus software documentation on how to setup such exclusions. + ## Specific notes for macOS As macOS does not support Vulkan some emulators are not available, and some that do exist have not been updated for this operating system in recent years. But emulator support is steadily improving and native ARM releases ("Apple Silicon") are also getting more common. One issue though is that some emulators are not codesigned and notarized so macOS refuses to run them by default. You can override the operating system's security settings however, which will work around this problem. Some emulators are also available via the [Homebrew](https://brew.sh) package manager and in many instances ES-DE includes support for these releases using the bundled configuration. @@ -1219,7 +1221,7 @@ The EMULATOR.INI file is found in the _Model 2 Emulator_ installation directory. Note that Model 2 Emulator is a bit broken and on Windows most GPU drivers it will only work correctly if ES-DE keeps running in the background while the game is launched. However, for some GPU drivers the opposite is true and the emulator will only work if ES-DE is suspended. To use the latter setup, switch to the alternative emulator entry _Model 2 Emulator [Suspend ES-DE] (Standalone)_. -To run Model 2 Emulator on Linux you need Wine or Proton, how to setup this 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. +To run Model 2 Emulator on Linux you need Wine or Proton, how to setup this 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. After Wine or Proton has been installed, unpack the emulator files into the `~/Applications/m2emulator/` directory. @@ -2618,6 +2620,76 @@ https://docs.mamedev.org/usingmame/defaultkeys.html Scraping can also be a bit challenging as MAME software list names are used and neither ScreenScraper nor TheGamesDB can parse these names. So it's recommended to run the scraper in interactive mode and refine the searches for all games that are not properly identified. +### Visual Pinball + +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. + +The Windows release of Visual Pinball can be downloaded here (make sure to get the GL version):\ +https://github.com/vpinball/vpinball/releases + +Apart from this the Windows-specific setup is not covered in this document, but you should be able to find a lot of resources online on this topic. + +The Linux and macOS releases need to be downloaded from the GitHub Actions page for the time being:\ +https://github.com/vpinball/vpinball/actions + +On Linux simply unpack the archive into `~/Applications/VPinballX` and make sure to give the binary executable permissions: +``` +cd ~/Applications/VPinballX +chmod +x VPinballX_GL +``` + +On macOS there is a DMG package that you simply install. + +Once you've installed Visual Pinball start it once outside ES-DE and its .ini configuration file will be created. On Linux and macOS this is `~/.vpinball/VPinballX.ini` + +Set the following entries in this file: +``` +VPRegPath = ./ +PinMAMEPath = ./ +PinMAMEIniPath = ./ +``` + +If you don't do this the table may still start but won't work properly and you'll not be able to actually start a game. + +ES-DE launches .vpx and .vpt files for the vpinball system, but most tables come shipped with multiple additional files that are needed for the table to work, for example: +``` +~/ROMs/vpinball/fh/pinmame/ +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.directb2s +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.ini +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.vbs +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx +``` + +Assembling the necessary files to run a table is beyond the scope of this guide but there are various resources available online for this. + +This specific table requires PinMAME to run, and the _fh_ directory name is an example of the abbreviations commonly used in the pinball community. You can for instance find these names in the [Internet Pinball Database](https://www.ipdb.org/) where they are referred to as _Common Abbreviations_. + +If you don't need to retain these abbreviations then you can simply setup your games using the _directories interpreted as files_ functionality: +``` +~/ROMs/vpinball/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx/pinmame/ +~/ROMs/vpinball/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx/Funhouse (Williams 1990)_Bigus(MOD)1.6.directb2s +~/ROMs/vpinball/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx/Funhouse (Williams 1990)_Bigus(MOD)1.6.ini +~/ROMs/vpinball/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx/Funhouse (Williams 1990)_Bigus(MOD)1.6.vbs +~/ROMs/vpinball/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx +``` + +If you however insist on retaining these abbreviations you could use folder links to launch the .vpx or .vpt file inside the fh directory by editing the folder in the metadata editor and selecting the game file via the _Folder link_ entry. + +A final option would be to use the _folder flattening_ functionality, although this has many negative side effects that you need to be aware of. If going for this approach make sure to thoroughly read the [Folder flattening](USERGUIDE.md#folder-flattening) section of this document. + +``` +~/ROMs/vpinball/fh/pinmame/ +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.directb2s +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.ini +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.vbs +~/ROMs/vpinball/fh/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx +~/ROMs/vpinball/flatten.txt +``` + +With folder flattening in place the .vpx and .vpt files will show up as file entries directly in the root of the gamelist. + ## Scraping Scraping means downloading metadata and game media files (images and videos) for the games in your collection. @@ -4016,7 +4088,7 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | vic20 | Commodore VIC-20 | VICE xvic | VICE xvic **(Standalone)** | No | Single archive or tape, cartridge or diskette image file | | videopac | Philips Videopac G7000 | O2EM | MAME - Current,
MAME **(Standalone)** | Yes | Single archive or ROM file | | | virtualboy | Nintendo Virtual Boy | Beetle VB | Mednafen **(Standalone)** | No | | -| vpinball | Visual Pinball | Visual Pinball **(Standalone)** | | No | In separate folder interpreted as a file | +| vpinball | Visual Pinball | Visual Pinball **(Standalone)** | | No | See the specific _Visual Pinball_ section elsewhere in this guide | | vsmile | VTech V.Smile | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file | | wasm4 | WASM-4 Fantasy Console | WASM-4 | | No | Single .wasm file | | wii | Nintendo Wii | Dolphin | Dolphin **(Standalone)**,
PrimeHack **(Standalone)** [UW] | No | | From e98d461b54a094c4cb265b705879454c85ed85af Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 19 Nov 2023 10:18:42 +0100 Subject: [PATCH 010/320] Documentation update --- USERGUIDE-DEV.md | 2 +- USERGUIDE.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index 5e4e116df..0b5543f0c 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -2683,7 +2683,7 @@ If you don't need to retain these abbreviations then you can simply setup your g ~/ROMs/vpinball/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx ``` -If you however insist on retaining these abbreviations you could use folder links to launch the .vpx or .vpt file inside the fh directory by editing the folder in the metadata editor and selecting the game file via the _Folder link_ entry. +If you however insist on retaining the abbreviations then you could use folder links to launch the .vpx or .vpt file inside the fh directory by editing the folder in the metadata editor and selecting the game file via the _Folder link_ entry. A final option would be to use the _folder flattening_ functionality, although this has many negative side effects that you need to be aware of. If going for this approach make sure to thoroughly read the [Folder flattening](USERGUIDE-DEV.md#folder-flattening) section of this document. diff --git a/USERGUIDE.md b/USERGUIDE.md index f56ac33ee..63d1276c9 100644 --- a/USERGUIDE.md +++ b/USERGUIDE.md @@ -2675,7 +2675,7 @@ If you don't need to retain these abbreviations then you can simply setup your g ~/ROMs/vpinball/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx/Funhouse (Williams 1990)_Bigus(MOD)1.6.vpx ``` -If you however insist on retaining these abbreviations you could use folder links to launch the .vpx or .vpt file inside the fh directory by editing the folder in the metadata editor and selecting the game file via the _Folder link_ entry. +If you however insist on retaining the abbreviations then you could use folder links to launch the .vpx or .vpt file inside the fh directory by editing the folder in the metadata editor and selecting the game file via the _Folder link_ entry. A final option would be to use the _folder flattening_ functionality, although this has many negative side effects that you need to be aware of. If going for this approach make sure to thoroughly read the [Folder flattening](USERGUIDE.md#folder-flattening) section of this document. From 8c25702fa4feaa9295b33dd2bdb9a209b1d1d0fb Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 7 Dec 2023 17:19:30 +0100 Subject: [PATCH 011/320] Updated the .gitignore file --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index bca68e074..8576a43de 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,9 @@ emulationstation.worker.js /index.html /ROMs +# Android build +android/** + # AppImage AppDir *.AppImage From 145cd85b0a5acb993197829f0fa36efabbf1957e Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 19 Nov 2023 17:37:00 +0100 Subject: [PATCH 012/320] (Android) Added build support to the CMake configuration --- CMake/Packages/FindOpenGLES3.cmake | 32 ++++++++++++++++ CMakeLists.txt | 60 +++++++++++++++++++++++++++--- es-app/CMakeLists.txt | 7 +++- 3 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 CMake/Packages/FindOpenGLES3.cmake diff --git a/CMake/Packages/FindOpenGLES3.cmake b/CMake/Packages/FindOpenGLES3.cmake new file mode 100644 index 000000000..5370cdd6e --- /dev/null +++ b/CMake/Packages/FindOpenGLES3.cmake @@ -0,0 +1,32 @@ +# FindOpenGLES +# ------------ +# Finds the OpenGLES3 library +# +# This will define the following variables:: +# +# OPENGLES3_FOUND - system has OpenGLES +# OPENGLES3_INCLUDE_DIRS - the OpenGLES include directory +# OPENGLES3_LIBRARIES - the OpenGLES libraries + +if(NOT HINT_GLES_LIBNAME) + set(HINT_GLES_LIBNAME GLESv3) +endif() + +find_path(OPENGLES3_INCLUDE_DIR GLES3/gl3.h + PATHS "${CMAKE_FIND_ROOT_PATH}/usr/include" + HINTS ${HINT_GLES_INCDIR} +) + +find_library(OPENGLES3_gl_LIBRARY + NAMES ${HINT_GLES_LIBNAME} + HINTS ${HINT_GLES_LIBDIR} +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(OpenGLES3 REQUIRED_VARS OPENGLES3_gl_LIBRARY OPENGLES3_INCLUDE_DIR) + +if(OPENGLES3_FOUND) + set(OPENGLES3_LIBRARIES ${OPENGLES3_gl_LIBRARY}) + set(OPENGLES3_INCLUDE_DIRS ${OPENGLES3_INCLUDE_DIR}) + mark_as_advanced(OPENGLES3_INCLUDE_DIR OPENGLES3_gl_LIBRARY) +endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 5da4ca03d..fd0ed2692 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -114,6 +114,8 @@ set_property(CACHE GLSYSTEM PROPERTY STRINGS "Desktop OpenGL" "Embedded OpenGL") if(GLSYSTEM MATCHES "Desktop OpenGL") set(OpenGL_GL_PREFERENCE GLVND) find_package(OpenGL REQUIRED) +elseif(ANDROID) + find_package(OpenGLES3 REQUIRED) elseif(GLES AND NOT EMSCRIPTEN) find_package(OpenGLES2 REQUIRED) endif() @@ -129,7 +131,7 @@ elseif(WIN32) NOT EXISTS ${PROJECT_SOURCE_DIR}/external/pugixml/pugixml.dll) # MSVC message(FATAL_ERROR "-- You need to build the dependencies in ./external first") endif() -elseif(NOT EMSCRIPTEN) +elseif(NOT EMSCRIPTEN AND NOT ANDROID) find_package(CURL REQUIRED) find_package(FFmpeg REQUIRED) find_package(FreeImage REQUIRED) @@ -218,6 +220,10 @@ if(APPLE AND CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 15.0.0) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-utf8") endif() +if(ANDROID) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -llog") +endif() + if(EMSCRIPTEN) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s USE_SDL=2 -pthread") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s INITIAL_MEMORY=33554432 -s ALLOW_MEMORY_GROWTH=1 -s WASM=1 -s ASSERTIONS=1 -s EXIT_RUNTIME=1 -s USE_SDL=2 \ @@ -379,6 +385,18 @@ if(APPLE) endif() endif() +if(ANDROID) + if(ANDROID_ABI MATCHES arm64-v8a) + message("-- Building for Android arm64-v8a") + set(ANDROID_CPU_ARCH arm64-v8a) + elseif(ANDROID_ABI MATCHES x86_64) + message("-- Building for Android x86_64") + set(ANDROID_CPU_ARCH x86_64) + else() + message(FATAL_ERROR "-- Unsupported Android ABI: " ${ANDROID_ABI}) + endif() +endif() + # Affects the application updater and is used for displaying version info in the main menu. if(ES_VERSION MATCHES alpha OR ES_VERSION MATCHES beta OR ES_VERSION MATCHES dev) add_compile_definitions(IS_PRERELEASE) @@ -446,6 +464,15 @@ elseif(EMSCRIPTEN) ${CMAKE_CURRENT_SOURCE_DIR}/external/FreeImage-CMake/FreeImage/Source ${CMAKE_CURRENT_SOURCE_DIR}/external/freetype/include ${CMAKE_CURRENT_SOURCE_DIR}/external/pugixml/src) +elseif(ANDROID) + set(COMMON_INCLUDE_DIRS ${COMMON_INCLUDE_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/external/curl/include + ${CMAKE_CURRENT_SOURCE_DIR}/external/ffmpeg-kit/src/ffmpeg + ${CMAKE_CURRENT_SOURCE_DIR}/external/freeimage/FreeImage/Source + ${CMAKE_CURRENT_SOURCE_DIR}/external/freetype/include + ${CMAKE_CURRENT_SOURCE_DIR}/external/libgit2/include + ${CMAKE_CURRENT_SOURCE_DIR}/external/pugixml/src + ${CMAKE_CURRENT_SOURCE_DIR}/external/SDL_Android) else() set(COMMON_INCLUDE_DIRS ${COMMON_INCLUDE_DIRS} ${FFMPEG_INCLUDE_DIRS} @@ -529,6 +556,22 @@ elseif(WIN32) mingw32 Winmm.dll) endif() +elseif(ANDROID) + set(COMMON_LIBRARIES ${COMMON_LIBRARIES} + # FFmpeg libraries. + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libavcodec.so + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libavfilter.so + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libavformat.so + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libavutil.so + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libswresample.so + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libswscale.so + # Other dependencies. + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libcurl.so + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libfreeimage.a + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libfreetype.so + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libgit2.so + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libpugixml.a + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libSDL2.so) elseif(EMSCRIPTEN) set(COMMON_LIBRARIES ${COMMON_LIBRARIES} # FFmpeg core libraries. @@ -611,6 +654,8 @@ endif() # OpenGL. if(GLSYSTEM MATCHES "Desktop OpenGL") list(APPEND COMMON_LIBRARIES ${OPENGL_LIBRARIES}) +elseif(GLES AND ANDROID) + list(APPEND COMMON_LIBRARIES ${OPENGLES3_LIBRARIES}) elseif(GLES) list(APPEND COMMON_LIBRARIES ${OPENGLES2_LIBRARIES}) endif() @@ -623,13 +668,18 @@ set(EXECUTABLE_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE) set(LIBRARY_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE) # Add each component. -add_subdirectory(es-pdf-converter) +if(NOT ANDROID) + add_subdirectory(es-pdf-converter) +endif() add_subdirectory(external) add_subdirectory(es-core) add_subdirectory(es-app) -# Make sure that es-pdf-convert is built first, and then that rlottie is built before es-core. -# Also set lottie2gif to not be built. -add_dependencies(lunasvg es-pdf-convert) +if(NOT ANDROID) + # Make sure that es-pdf-convert is built first, and then that rlottie is built before es-core. + # Also set lottie2gif to not be built. + add_dependencies(lunasvg es-pdf-convert) +endif() + add_dependencies(es-core rlottie) set_target_properties(lottie2gif PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1) diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 99bdfd5ff..8c3d5fdcd 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -132,6 +132,11 @@ elseif(WIN32) add_executable(EmulationStation WIN32 ${ES_SOURCES} ${ES_HEADERS}) target_link_libraries(EmulationStation ${COMMON_LIBRARIES} es-core) set_target_properties(EmulationStation PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) +elseif(ANDROID) + include_directories(${COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/src) + add_library(main SHARED ${ES_SOURCES} ${ES_HEADERS}) + target_link_libraries(main ${COMMON_LIBRARIES} ${CMAKE_DL_LIBS} es-core) + set_target_properties(main PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) else() include_directories(${COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/src) add_executable(emulationstation ${ES_SOURCES} ${ES_HEADERS}) @@ -325,7 +330,7 @@ elseif(APPLE) install(DIRECTORY ${CMAKE_SOURCE_DIR}/themes/modern-es-de DESTINATION ../Resources/themes) install(DIRECTORY ${CMAKE_SOURCE_DIR}/themes/slate-es-de DESTINATION ../Resources/themes) install(DIRECTORY ${CMAKE_SOURCE_DIR}/licenses DESTINATION ../Resources) -else() +elseif(NOT ANDROID) install(TARGETS emulationstation RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) install(TARGETS es-pdf-convert RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) if(CMAKE_SYSTEM_NAME MATCHES Linux) From bbab5c6b9338bf170eb92d25203fb7f7d4d75c53 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 19 Nov 2023 17:40:41 +0100 Subject: [PATCH 013/320] (Android) Fixed some compile errors --- es-app/src/VolumeControl.cpp | 14 +++++++------- es-app/src/VolumeControl.h | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/es-app/src/VolumeControl.cpp b/es-app/src/VolumeControl.cpp index e3fd447a2..0d240b9cd 100644 --- a/es-app/src/VolumeControl.cpp +++ b/es-app/src/VolumeControl.cpp @@ -15,14 +15,14 @@ #include #endif -#if defined(__linux__) +#if defined(__linux__) && !defined(__ANDROID__) std::string VolumeControl::mixerName = "Master"; std::string VolumeControl::mixerCard = "default"; #endif VolumeControl::VolumeControl() // clang-format off -#if defined(__linux__) +#if defined(__linux__) && !defined(__ANDROID__) : mixerIndex {0} , mixerHandle {nullptr} , mixerElem {nullptr} @@ -39,7 +39,7 @@ VolumeControl::VolumeControl() VolumeControl::~VolumeControl() { deinit(); -#if defined(__linux__) +#if defined(__linux__) && !defined(__ANDROID__) snd_config_update_free_global(); #endif } @@ -48,7 +48,7 @@ void VolumeControl::init() { // Initialize audio mixer interface. -#if defined(__linux__) +#if defined(__linux__) && !defined(__ANDROID__) // Try to open mixer device. if (mixerHandle == nullptr) { snd_mixer_selem_id_alloca(&mixerSelemId); @@ -139,7 +139,7 @@ void VolumeControl::deinit() { // Deinitialize audio mixer interface. -#if defined(__linux__) +#if defined(__linux__) && !defined(__ANDROID__) if (mixerHandle != nullptr) { snd_mixer_detach(mixerHandle, mixerCard.c_str()); snd_mixer_free(mixerHandle); @@ -160,7 +160,7 @@ int VolumeControl::getVolume() const { int volume = 0; -#if defined(__linux__) +#if defined(__linux__) && !defined(__ANDROID__) if (mixerElem != nullptr) { // Get volume range. long minVolume; @@ -204,7 +204,7 @@ void VolumeControl::setVolume(int volume) { volume = glm::clamp(volume, 0, 100); -#if defined(__linux__) +#if defined(__linux__) && !defined(__ANDROID__) if (mixerElem != nullptr) { // Get volume range. long minVolume; diff --git a/es-app/src/VolumeControl.h b/es-app/src/VolumeControl.h index 8a002e569..5b031afbb 100644 --- a/es-app/src/VolumeControl.h +++ b/es-app/src/VolumeControl.h @@ -11,7 +11,7 @@ #include -#if defined(__linux__) +#if defined(__linux__) && !defined(__ANDROID__) #include #include #include @@ -33,7 +33,7 @@ public: int getVolume() const; void setVolume(int volume); -#if defined(__linux__) +#if defined(__linux__) && !defined(__ANDROID__) static std::string mixerName; static std::string mixerCard; int mixerIndex; From 1ea0428a00d328351aa2c7a249c04c541e724057 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 19 Nov 2023 17:43:23 +0100 Subject: [PATCH 014/320] (Android) Temporary code to be able to test the .apk package --- es-app/src/main.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 42dd245ac..fa6ef6c32 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -42,6 +42,10 @@ #include #include +#if defined(__ANDROID__) +#include +#endif + #if defined(__EMSCRIPTEN__) #include #endif @@ -525,6 +529,12 @@ int main(int argc, char* argv[]) { const auto applicationStartTime {std::chrono::system_clock::now()}; +#if defined(__ANDROID__) + __android_log_print(ANDROID_LOG_VERBOSE, nullptr, "ES-DE running on Android!"); + SDL_Delay(3000); + return 0; +#endif + std::locale::global(std::locale("C")); #if defined(__APPLE__) From 69951964357d34675a4aacd94feba2f549136a8c Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 7 Dec 2023 17:54:51 +0100 Subject: [PATCH 015/320] Updated the .gitignore file --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8576a43de..e18f26d9c 100644 --- a/.gitignore +++ b/.gitignore @@ -34,7 +34,7 @@ emulationstation.worker.js /ROMs # Android build -android/** +android # AppImage AppDir From 8fe027e9ad418e6aa41acf3125c554c0d8e31e54 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 20 Nov 2023 21:26:58 +0100 Subject: [PATCH 016/320] Fixed an issue where font textures were sometimes updated with empty glyhps --- es-core/src/resources/Font.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index 0329cb057..3069aa467 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -768,8 +768,10 @@ Font::Glyph* Font::getGlyph(const unsigned int id) glyph.rows = glyphSize.y; // Upload glyph bitmap to texture. - mRenderer->updateTexture(tex->textureId, 0, Renderer::TextureType::RED, cursor.x, cursor.y, - glyphSize.x, glyphSize.y, glyphSlot->bitmap.buffer); + 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); + } return &glyph; } From 27be4007a2ac4a36f03499b085fc8ddd417690ae Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 20 Nov 2023 21:33:16 +0100 Subject: [PATCH 017/320] Added workarounds for some mobile GPUs which do not support all OpenGL operations when using the BGRA pixel format --- es-core/src/components/ImageComponent.cpp | 9 ++++++++ es-core/src/renderers/Renderer.h | 3 ++- es-core/src/renderers/RendererOpenGL.cpp | 23 +++++++++++++++++---- resources/shaders/glsl/blur_horizontal.glsl | 1 + resources/shaders/glsl/blur_vertical.glsl | 1 + resources/shaders/glsl/core.glsl | 10 ++++++++- resources/shaders/glsl/scanlines.glsl | 1 + 7 files changed, 42 insertions(+), 6 deletions(-) diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 1f80e2f25..1b34f37c7 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -462,6 +462,15 @@ void ImageComponent::render(const glm::mat4& parentTrans) } mVertices->shaderFlags = mVertices->shaderFlags | Renderer::ShaderFlags::PREMULTIPLIED; + +#if defined(USE_OPENGLES) + // This is required as not all mobile GPUs support mipmapping when using the BGRA + // pixel format. + if (mMipmapping) + mVertices->shaderFlags = + mVertices->shaderFlags | Renderer::ShaderFlags::CONVERT_PIXEL_FORMAT; +#endif + mRenderer->drawTriangleStrips(&mVertices[0], 4); } else { diff --git a/es-core/src/renderers/Renderer.h b/es-core/src/renderers/Renderer.h index feb958962..173aa73e6 100644 --- a/es-core/src/renderers/Renderer.h +++ b/es-core/src/renderers/Renderer.h @@ -55,7 +55,8 @@ public: CLIPPING = 0x00000008, ROTATED = 0x00000010, // Screen rotated 90 or 270 degrees. ROUNDED_CORNERS = 0x00000020, - ROUNDED_CORNERS_NO_AA = 0x00000040 + ROUNDED_CORNERS_NO_AA = 0x00000040, + CONVERT_PIXEL_FORMAT = 0x00000080 }; // clang-format on diff --git a/es-core/src/renderers/RendererOpenGL.cpp b/es-core/src/renderers/RendererOpenGL.cpp index 8f62b705b..222343102 100644 --- a/es-core/src/renderers/RendererOpenGL.cpp +++ b/es-core/src/renderers/RendererOpenGL.cpp @@ -439,8 +439,16 @@ unsigned int RendererOpenGL::createTexture(const unsigned int texUnit, static_cast(GL_NEAREST))); #if defined(USE_OPENGLES) - GL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, 0, textureType, width, height, 0, textureType, - GL_UNSIGNED_BYTE, data)); + if (mipmapping) { + // This is required as not all mobile GPUs support mipmapping when using the BGRA + // pixel format. + GL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, + GL_UNSIGNED_BYTE, data)); + } + else { + GL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, 0, textureType, width, height, 0, textureType, + GL_UNSIGNED_BYTE, data)); + } #else GL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, textureType, GL_UNSIGNED_BYTE, data)); @@ -644,6 +652,13 @@ void RendererOpenGL::shaderPostprocessing(unsigned int shaders, vertices->blurStrength = parameters.blurStrength; vertices->shaderFlags = ShaderFlags::POST_PROCESSING | ShaderFlags::PREMULTIPLIED; +#if defined(USE_OPENGLES) + // This is required as not all mobile GPUs support the glReadPixels() function when using + // the BGRA pixel format. + if (textureRGBA) + vertices->shaderFlags |= ShaderFlags::CONVERT_PIXEL_FORMAT; +#endif + if (screenRotation == 90 || screenRotation == 270) vertices->shaderFlags |= ShaderFlags::ROTATED; @@ -774,10 +789,10 @@ void RendererOpenGL::shaderPostprocessing(unsigned int shaders, #if defined(USE_OPENGLES) if (screenRotation == 0 || screenRotation == 180) GL_CHECK_ERROR( - glReadPixels(0, 0, width, height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, textureRGBA)); + glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, textureRGBA)); else GL_CHECK_ERROR( - glReadPixels(0, 0, height, width, GL_BGRA_EXT, GL_UNSIGNED_BYTE, textureRGBA)); + glReadPixels(0, 0, height, width, GL_RGBA, GL_UNSIGNED_BYTE, textureRGBA)); #else if (screenRotation == 0 || screenRotation == 180) GL_CHECK_ERROR( diff --git a/resources/shaders/glsl/blur_horizontal.glsl b/resources/shaders/glsl/blur_horizontal.glsl index e35b8cb04..75b208ff2 100644 --- a/resources/shaders/glsl/blur_horizontal.glsl +++ b/resources/shaders/glsl/blur_horizontal.glsl @@ -41,6 +41,7 @@ out vec4 FragColor; // 0x00000010 - Screen rotated 90 or 270 degrees // 0x00000020 - Rounded corners // 0x00000040 - Rounded corners with no anti-aliasing +// 0x00000080 - Convert pixel format void main() { diff --git a/resources/shaders/glsl/blur_vertical.glsl b/resources/shaders/glsl/blur_vertical.glsl index e23d5e8e1..2f4d00825 100644 --- a/resources/shaders/glsl/blur_vertical.glsl +++ b/resources/shaders/glsl/blur_vertical.glsl @@ -41,6 +41,7 @@ out vec4 FragColor; // 0x00000010 - Screen rotated 90 or 270 degrees // 0x00000020 - Rounded corners // 0x00000040 - Rounded corners with no anti-aliasing +// 0x00000080 - Convert pixel format void main() { diff --git a/resources/shaders/glsl/core.glsl b/resources/shaders/glsl/core.glsl index 12587cfcf..0c56f2991 100644 --- a/resources/shaders/glsl/core.glsl +++ b/resources/shaders/glsl/core.glsl @@ -59,6 +59,7 @@ out vec4 FragColor; // 0x00000010 - Screen rotated 90 or 270 degrees // 0x00000020 - Rounded corners // 0x00000040 - Rounded corners with no anti-aliasing +// 0x00000080 - Convert pixel format void main() { @@ -74,7 +75,14 @@ void main() discard; } - vec4 sampledColor = texture(textureSampler0, texCoord); + vec4 sampledColor; + + // Pixel format conversion is sometimes required as not all mobile GPUs support all + // OpenGL operations in BGRA format. + if (0x0u != (shaderFlags & 0x80u)) + sampledColor.bgra = texture(textureSampler0, texCoord); + else + sampledColor = texture(textureSampler0, texCoord); // Rounded corners. if (0x0u != (shaderFlags & 0x20u) || 0x0u != (shaderFlags & 0x40u)) { diff --git a/resources/shaders/glsl/scanlines.glsl b/resources/shaders/glsl/scanlines.glsl index a69725e75..ae5cef003 100644 --- a/resources/shaders/glsl/scanlines.glsl +++ b/resources/shaders/glsl/scanlines.glsl @@ -102,6 +102,7 @@ uniform float OutputGamma; // 0x00000010 - Screen rotated 90 or 270 degrees // 0x00000020 - Rounded corners // 0x00000040 - Rounded corners with no anti-aliasing +// 0x00000080 - Convert pixel format void main() { From c8d9d100cf6133a60cfaa29505e32e7a42baf050 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 20 Nov 2023 22:52:33 +0100 Subject: [PATCH 018/320] (Android) Added log output support --- es-core/src/Log.cpp | 14 ++++++++++++++ es-core/src/Log.h | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/es-core/src/Log.cpp b/es-core/src/Log.cpp index 4807bd7ee..f3d8e65bd 100644 --- a/es-core/src/Log.cpp +++ b/es-core/src/Log.cpp @@ -91,7 +91,21 @@ Log::~Log() sFile << mOutStringStream.str(); +#if defined(__ANDROID__) + if (mMessageLevel == LogError) { + __android_log_print(ANDROID_LOG_ERROR, nullptr, "%s", mOutStringStream.str().c_str()); + } + else if (sReportingLevel >= LogDebug) { + if (mMessageLevel == LogInfo) + __android_log_print(ANDROID_LOG_INFO, nullptr, "%s", mOutStringStream.str().c_str()); + else if (mMessageLevel == LogWarning) + __android_log_print(ANDROID_LOG_WARN, nullptr, "%s", mOutStringStream.str().c_str()); + else + __android_log_print(ANDROID_LOG_DEBUG, nullptr, "%s", mOutStringStream.str().c_str()); + } +#else // If it's an error or the --debug flag has been set, then print to the console as well. if (mMessageLevel == LogError || sReportingLevel >= LogDebug) std::cerr << mOutStringStream.str(); +#endif } diff --git a/es-core/src/Log.h b/es-core/src/Log.h index 0f165cd04..0c9c31528 100644 --- a/es-core/src/Log.h +++ b/es-core/src/Log.h @@ -19,6 +19,10 @@ #include #include +#if defined(__ANDROID__) +#include +#endif + #define LOG(level) \ if (level > Log::getReportingLevel()) \ ; \ From 1d6701ca4c67256fe1d599e020645a9cd65c188d Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 20 Nov 2023 23:02:41 +0100 Subject: [PATCH 019/320] (Android) Added error output if attempting to write to log file before it was open --- es-core/src/Log.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/es-core/src/Log.cpp b/es-core/src/Log.cpp index f3d8e65bd..cacab31ed 100644 --- a/es-core/src/Log.cpp +++ b/es-core/src/Log.cpp @@ -83,9 +83,16 @@ Log::~Log() if (!sFile.is_open()) { // Not open yet, print to stdout. +#if defined(__ANDROID__) + __android_log_print( + ANDROID_LOG_ERROR, nullptr, + "Error: Tried to write to log file before it was open, the following won't be logged:"); + __android_log_print(ANDROID_LOG_ERROR, nullptr, "%s", mOutStringStream.str().c_str()); +#else std::cerr << "Error: Tried to write to log file before it was open, " "the following won't be logged:\n"; std::cerr << mOutStringStream.str(); +#endif return; } From 498bdbd11915be93c2f64165b62386f5a332a04a Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 20 Nov 2023 23:15:01 +0100 Subject: [PATCH 020/320] Fixed an additional issue where font textures were sometimes updated with empty glyhps --- es-core/src/resources/Font.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index 3069aa467..76e1ac960 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -648,8 +648,10 @@ void Font::rebuildTextures() static_cast(it->second.texSize.y * tex->textureSize.y)}; // Upload to texture. - mRenderer->updateTexture(tex->textureId, 0, Renderer::TextureType::RED, cursor.x, cursor.y, - glyphSize.x, glyphSize.y, glyphSlot->bitmap.buffer); + 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); + } } } From 10a048b416e1db89f963bb9065bdffb9fe6ba20c Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 21 Nov 2023 19:31:32 +0100 Subject: [PATCH 021/320] (Android) Added networking support --- CMakeLists.txt | 4 ++++ es-app/src/guis/GuiThemeDownloader.cpp | 7 +++++++ es-app/src/scrapers/ScreenScraper.h | 2 ++ 3 files changed, 13 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index fd0ed2692..81e05743d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -284,6 +284,10 @@ if(APPLE) endif() endif() +if(ANDROID) + set(BUNDLED_CERTS ON) +endif() + if(WIN32) set(BUNDLED_CERTS ON) add_compile_definitions(UNICODE) diff --git a/es-app/src/guis/GuiThemeDownloader.cpp b/es-app/src/guis/GuiThemeDownloader.cpp index 6659f329d..018d4ac52 100644 --- a/es-app/src/guis/GuiThemeDownloader.cpp +++ b/es-app/src/guis/GuiThemeDownloader.cpp @@ -162,6 +162,13 @@ GuiThemeDownloader::GuiThemeDownloader(std::function updateCallback) git_libgit2_init(); +#if defined(__ANDROID__) && defined(USE_BUNDLED_CERTIFICATES) + git_libgit2_opts( + GIT_OPT_SET_SSL_CERT_LOCATIONS, + ResourceManager::getInstance().getResourcePath(":/certificates/curl-ca-bundle.crt").c_str(), + nullptr); +#endif + // The promise/future mechanism is used as signaling for the thread to indicate that // repository fetching has been completed. std::promise().swap(mPromise); diff --git a/es-app/src/scrapers/ScreenScraper.h b/es-app/src/scrapers/ScreenScraper.h index dc995cefd..e132ac173 100644 --- a/es-app/src/scrapers/ScreenScraper.h +++ b/es-app/src/scrapers/ScreenScraper.h @@ -57,6 +57,8 @@ public: const std::string platformIdentifier {" S"}; #elif defined(RETRODECK) const std::string platformIdentifier {" R"}; +#elif defined(__ANDROID__) + const std::string platformIdentifier {" G"}; #elif defined(APPIMAGE_BUILD) const std::string platformIdentifier {" A"}; #elif defined(__linux__) && defined(RASPBERRY_PI) From 8c032d50b2c8dddc6b93e70b0277568ea466cfe8 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 25 Nov 2023 10:19:55 +0100 Subject: [PATCH 022/320] Added some Java formatting rules to the clang-format configuration --- .clang-format | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/.clang-format b/.clang-format index 5041249e9..d84f1ee9c 100644 --- a/.clang-format +++ b/.clang-format @@ -3,8 +3,7 @@ # EmulationStation Desktop Edition # .clang-format # -# Style configuration file for automatic C++ code formatting using clang-format. -# This file requires at least clang-format version 11.0. +# Style configuration file for automatic C++ and Java code formatting using clang-format. # --- @@ -141,3 +140,16 @@ TabWidth: 8 UseCRLF: false UseTab: Never ... +--- +Language: Java +BraceWrapping: + AfterClass: true + AfterFunction: true + BeforeElse: true + IndentBraces: false +BreakBeforeBraces: Custom +ColumnLimit: 100 +IndentWidth: 4 +TabWidth: 8 +UseCRLF: false +UseTab: Never From a09e4096ac091f65ad23b365dc402f52cde54885 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 25 Nov 2023 10:31:09 +0100 Subject: [PATCH 023/320] (Android) Added preliminary support for requesting storage permissions --- es-app/src/main.cpp | 38 ++++++++++++++++++++++-------- es-core/src/utils/PlatformUtil.cpp | 17 +++++++++++++ es-core/src/utils/PlatformUtil.h | 11 +++++++++ 3 files changed, 56 insertions(+), 10 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index fa6ef6c32..477c14dbd 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -42,10 +42,6 @@ #include #include -#if defined(__ANDROID__) -#include -#endif - #if defined(__EMSCRIPTEN__) #include #endif @@ -455,13 +451,22 @@ bool checkApplicationHomeDirectory() #if defined(_WIN64) std::cout << "First startup, creating application home directory \"" << Utils::String::replace(applicationHome, "/", "\\") << "\"\n"; +#elif defined(__ANDROID__) + __android_log_print(ANDROID_LOG_VERBOSE, nullptr, + "First startup, creating application home directory \"%s\"", + applicationHome.c_str()); #else std::cout << "First startup, creating application home directory \"" << applicationHome << "\"\n"; #endif Utils::FileSystem::createDirectory(applicationHome); if (!Utils::FileSystem::exists(applicationHome)) { +#if defined(__ANDROID__) + __android_log_print(ANDROID_LOG_ERROR, nullptr, + "Error: Couldn't create directory, permission problems?"); +#else std::cerr << "Error: Couldn't create directory, permission problems?\n"; +#endif return false; } } @@ -529,12 +534,6 @@ int main(int argc, char* argv[]) { const auto applicationStartTime {std::chrono::system_clock::now()}; -#if defined(__ANDROID__) - __android_log_print(ANDROID_LOG_VERBOSE, nullptr, "ES-DE running on Android!"); - SDL_Delay(3000); - return 0; -#endif - std::locale::global(std::locale("C")); #if defined(__APPLE__) @@ -737,6 +736,13 @@ int main(int argc, char* argv[]) return 1; } +#if defined(__ANDROID__) + LOG(LogDebug) << "Android API level: " << SDL_GetAndroidSDKVersion(); + LOG(LogDebug) << "Android storage state: " << SDL_AndroidGetExternalStorageState(); + LOG(LogDebug) << "Android internal path: " << SDL_AndroidGetInternalStoragePath(); + LOG(LogDebug) << "Android external path: " << SDL_AndroidGetExternalStoragePath(); +#endif + #if defined(APPLICATION_UPDATER) if (!noUpdateCheck) ApplicationUpdater::getInstance().checkForUpdates(); @@ -776,6 +782,18 @@ int main(int argc, char* argv[]) SDL_SetHint(SDL_HINT_ENABLE_SCREEN_KEYBOARD, "0"); } +#if defined(__ANDROID__) + Utils::Platform::Android::requestStoragePermission(); + + const std::string storageDir {"/sdcard/ES-DE"}; + if (!Utils::FileSystem::exists(storageDir)) { + LOG(LogInfo) << "Creating data directory \"" << storageDir << "\"..."; + if (!Utils::FileSystem::createDirectory(storageDir)) { + LOG(LogError) << "Couldn't create directory, permission problems?"; + } + } +#endif + MameNames::getInstance(); ThemeData::populateThemes(); loadSystemsReturnCode loadSystemsStatus {loadSystemConfigFile()}; diff --git a/es-core/src/utils/PlatformUtil.cpp b/es-core/src/utils/PlatformUtil.cpp index af8dd9e5a..8b00443c4 100644 --- a/es-core/src/utils/PlatformUtil.cpp +++ b/es-core/src/utils/PlatformUtil.cpp @@ -371,6 +371,23 @@ namespace Utils exit(EXIT_FAILURE); } +#if defined(__ANDROID__) + namespace Android + { + bool requestStoragePermission() + { + // TODO: Wait for interface to close and check actual outcome. + JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; + jclass jniClass {jniEnv->FindClass("org/esde/esde/esde")}; + jmethodID funcID { + jniEnv->GetStaticMethodID(jniClass, "requestStoragePermissions", "()Z")}; + const bool result { + static_cast(jniEnv->CallStaticBooleanMethod(jniClass, funcID))}; + return result; + } + + } // namespace Android +#endif } // namespace Platform } // namespace Utils diff --git a/es-core/src/utils/PlatformUtil.h b/es-core/src/utils/PlatformUtil.h index 6ff1b550e..a0f9a3fe4 100644 --- a/es-core/src/utils/PlatformUtil.h +++ b/es-core/src/utils/PlatformUtil.h @@ -15,6 +15,10 @@ #include #endif +#if defined(__ANDROID__) +#include +#endif + namespace Utils { namespace Platform @@ -52,6 +56,13 @@ namespace Utils // Immediately shut down the application as cleanly as possible. void emergencyShutdown(); +#if defined(__ANDROID__) + namespace Android + { + bool requestStoragePermission(); + }; // namespace Android +#endif + static QuitMode sQuitMode = QuitMode::QUIT; // This is simply to get rid of a GCC false positive -Wunused-variable compiler warning. static QuitMode sQuitModeDummy = sQuitMode; From d48872af6cc504676ae8f0be31e38547ad324368 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 26 Nov 2023 13:25:25 +0100 Subject: [PATCH 024/320] Added a Java clang-format rule --- .clang-format | 1 + 1 file changed, 1 insertion(+) diff --git a/.clang-format b/.clang-format index d84f1ee9c..22f5528ea 100644 --- a/.clang-format +++ b/.clang-format @@ -145,6 +145,7 @@ Language: Java BraceWrapping: AfterClass: true AfterFunction: true + BeforeCatch: true BeforeElse: true IndentBraces: false BreakBeforeBraces: Custom From 310fb6e809878c13ac9525717718fdf3da2d5201 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 26 Nov 2023 13:32:11 +0100 Subject: [PATCH 025/320] (Android) Added find rules logic and launch command configuration logic Also did some general refactoring of the emulator launch code --- es-app/src/FileData.cpp | 257 +++++++++++++++++++++-------- es-app/src/FileData.h | 10 +- es-app/src/SystemData.cpp | 14 +- es-app/src/SystemData.h | 2 + es-core/src/utils/PlatformUtil.cpp | 51 +++++- es-core/src/utils/PlatformUtil.h | 7 +- 6 files changed, 268 insertions(+), 73 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 69eb22899..52153ae9a 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -947,6 +947,12 @@ void FileData::launchGame() bool foundCoreFile {false}; std::vector emulatorCorePaths; +#if defined(__ANDROID__) + std::string androidPackage; + std::string androidComponent; + std::vector> androidExtras; +#endif + #if defined(_WIN64) bool hideWindow {false}; @@ -997,30 +1003,27 @@ void FileData::launchGame() // Expand home path if ~ is used. command = Utils::FileSystem::expandHomePath(command); - std::string preCommandPath; - // Check for any pre-command entry, and if it exists then expand it using the find rules. if (command.find("%PRECOMMAND_") != std::string::npos) { - preCommandPath = findEmulatorPath(command, true); + const std::pair preCommand { + findEmulator(command, true)}; // Show an error message if there was no matching emulator entry in es_find_rules.xml. - if (preCommandPath.substr(0, 18) == "NO EMULATOR RULE: ") { - const std::string& preCommandEntry { - preCommandPath.substr(18, preCommandPath.size() - 18)}; + if (preCommand.second == FileData::findEmulatorResult::NO_RULES) { LOG(LogError) << "Couldn't launch game, either there is no emulator entry for pre-command \"" - << preCommandEntry << "\" in es_find_rules.xml or there are no rules defined"; + << preCommand.first << "\" in es_find_rules.xml or there are no rules defined"; LOG(LogError) << "Raw emulator launch command:"; LOG(LogError) << commandRaw; window->queueInfoPopup("ERROR: MISSING PRE-COMMAND FIND RULES CONFIGURATION FOR '" + - preCommandEntry + "'", + preCommand.first + "'", 6000); window->setAllowTextScrolling(true); window->setAllowFileAnimation(true); return; } - else if (preCommandPath.empty()) { - LOG(LogError) << "Couldn't launch game, pre-command binary not found"; + else if (preCommand.first.empty()) { + LOG(LogError) << "Couldn't launch game, pre-command not found"; LOG(LogError) << "Raw emulator launch command:"; LOG(LogError) << commandRaw; @@ -1047,30 +1050,30 @@ void FileData::launchGame() return; } else { - LOG(LogDebug) << "FileData::launchGame(): Pre-command binary set to \"" - << preCommandPath << "\""; + LOG(LogDebug) << "FileData::launchGame(): Pre-command set to \"" << preCommand.first + << "\""; } } - // Check that the emulator binary actually exists, and if so, get its path. - const std::string& binaryPath {findEmulatorPath(command, false)}; + // Check that the emulator actually exists, and if so, get its path. + const std::pair emulator { + findEmulator(command, false)}; // Show an error message if there was no matching emulator entry in es_find_rules.xml. - if (binaryPath.substr(0, 18) == "NO EMULATOR RULE: ") { - const std::string& emulatorEntry {binaryPath.substr(18, binaryPath.size() - 18)}; + if (emulator.second == FileData::findEmulatorResult::NO_RULES) { LOG(LogError) << "Couldn't launch game, either there is no emulator entry for \"" - << emulatorEntry << "\" in es_find_rules.xml or there are no rules defined"; + << emulator.first << "\" in es_find_rules.xml or there are no rules defined"; LOG(LogError) << "Raw emulator launch command:"; LOG(LogError) << commandRaw; window->queueInfoPopup( - "ERROR: MISSING EMULATOR FIND RULES CONFIGURATION FOR '" + emulatorEntry + "'", 6000); + "ERROR: MISSING EMULATOR FIND RULES CONFIGURATION FOR '" + emulator.first + "'", 6000); window->setAllowTextScrolling(true); window->setAllowFileAnimation(true); return; } - else if (binaryPath.empty()) { - LOG(LogError) << "Couldn't launch game, emulator binary not found"; + else if (emulator.second == FileData::findEmulatorResult::NOT_FOUND) { + LOG(LogError) << "Couldn't launch game, emulator not found"; LOG(LogError) << "Raw emulator launch command:"; LOG(LogError) << commandRaw; @@ -1098,15 +1101,27 @@ void FileData::launchGame() } #if defined(_WIN64) else { - std::string binaryLogPath {Utils::String::replace( - Utils::String::replace(binaryPath, "%ESPATH%", esPath), "/", "\\")}; - if (binaryLogPath.front() != '\"' && binaryLogPath.back() != '\"') - binaryLogPath = "\"" + binaryLogPath + "\""; - LOG(LogDebug) << "FileData::launchGame(): Emulator binary set to " << binaryLogPath; + std::string emulatorLogPath {Utils::String::replace( + Utils::String::replace(emulator.first, "%ESPATH%", esPath), "/", "\\")}; + if (emulatorLogPath.front() != '\"' && emulatorLogPath.back() != '\"') + emulatorLogPath = "\"" + emulatorLogPath + "\""; + LOG(LogDebug) << "FileData::launchGame(): Emulator set to " << emulatorLogPath; #else +#if defined(__ANDROID__) + else if (emulator.second == FileData::findEmulatorResult::FOUND_ANDROID_PACKAGE) { + androidPackage = emulator.first; + const size_t pipePos {androidPackage.find('|')}; + if (pipePos != std::string::npos) { + androidComponent = androidPackage.substr(pipePos + 1); + androidPackage = androidPackage.substr(0, pipePos); + } + LOG(LogDebug) << "FileData::launchGame(): Found Android emulator package \"" + << androidPackage << "\""; + } +#endif else if (!isShortcut) { - LOG(LogDebug) << "FileData::launchGame(): Emulator binary set to \"" - << Utils::String::replace(binaryPath, "%ESPATH%", esPath) << "\""; + LOG(LogDebug) << "FileData::launchGame(): Emulator set to \"" + << Utils::String::replace(emulator.first, "%ESPATH%", esPath) << "\""; #endif } @@ -1127,11 +1142,12 @@ void FileData::launchGame() if (spacePos != std::string::npos) { coreRaw = command.substr(emuPathPos, spacePos - emuPathPos); #if defined(_WIN64) - coreFile = Utils::FileSystem::getParent(Utils::String::replace(binaryPath, "\"", "")) + - command.substr(emuPathPos + 9, spacePos - emuPathPos - 9); + coreFile = + Utils::FileSystem::getParent(Utils::String::replace(emulator.first, "\"", "")) + + command.substr(emuPathPos + 9, spacePos - emuPathPos - 9); coreFile = Utils::String::replace(coreFile, "/", "\\"); #else - coreFile = Utils::FileSystem::getParent(binaryPath) + + coreFile = Utils::FileSystem::getParent(emulator.first) + command.substr(emuPathPos + 9, spacePos - emuPathPos - 9); #endif if (hasQuotationMark) { @@ -1192,7 +1208,7 @@ void FileData::launchGame() // the emulator core using the rules defined in es_find_rules.xml. for (std::string& path : emulatorCorePaths) { // The position of the %CORE_ variable could have changed as there may have been an - // %EMULATOR_ variable that was substituted for the actual emulator binary. + // %EMULATOR_ variable that was substituted for the actual emulator. coreEntryPos = command.find("%CORE_"); coreFilePos = command.find("%", coreEntryPos + 6); @@ -1218,10 +1234,11 @@ void FileData::launchGame() #if defined(_WIN64) coreFile = coreFile.replace( stringPos, 9, - Utils::FileSystem::getParent(Utils::String::replace(binaryPath, "\"", ""))); + Utils::FileSystem::getParent(Utils::String::replace(emulator.first, "\"", ""))); coreFile = Utils::String::replace(coreFile, "/", "\\"); #else - coreFile = coreFile.replace(stringPos, 9, Utils::FileSystem::getParent(binaryPath)); + coreFile = + coreFile.replace(stringPos, 9, Utils::FileSystem::getParent(emulator.first)); #endif } @@ -1325,7 +1342,7 @@ void FileData::launchGame() #if defined(_WIN64) startDirectory = Utils::String::replace( startDirectory, "%EMUDIR%", - Utils::FileSystem::getParent(Utils::String::replace(binaryPath, "\"", ""))); + Utils::FileSystem::getParent(Utils::String::replace(emulator.first, "\"", ""))); startDirectory = Utils::String::replace( startDirectory, "%GAMEDIR%", @@ -1336,7 +1353,7 @@ void FileData::launchGame() #else startDirectory = Utils::String::replace( startDirectory, "%EMUDIR%", - Utils::FileSystem::getParent(Utils::String::replace(binaryPath, "\\", ""))); + Utils::FileSystem::getParent(Utils::String::replace(emulator.first, "\\", ""))); startDirectory = Utils::String::replace( startDirectory, "%GAMEDIR%", @@ -1500,7 +1517,7 @@ void FileData::launchGame() if (Utils::FileSystem::exists(Utils::String::replace(romPath, "\\", ""))) { LOG(LogInfo) << "Opening app or alias file \"" << Utils::String::replace(romPath, "\\", "") << "\""; - command = Utils::String::replace(command, binaryPath, "open -W -a"); + command = Utils::String::replace(command, emulator.first, "open -W -a"); } else { LOG(LogError) << "App or alias file \"" << romPath @@ -1551,7 +1568,7 @@ void FileData::launchGame() } romPath = Utils::String::replace(romPath, "%%", "%"); romPath = Utils::String::trim(romPath); - command = Utils::String::replace(command, binaryPath, ""); + command = Utils::String::replace(command, emulator.first, ""); execEntry = true; break; } @@ -1583,12 +1600,71 @@ void FileData::launchGame() command = Utils::String::replace(command, "%ROMRAW%", romRaw); command = Utils::String::replace(command, "%ROMPATH%", Utils::FileSystem::getEscapedPath(getROMDirectory())); +#if defined(__ANDROID__) + command = Utils::String::replace(command, "%ANDROIDPACKAGE%", androidPackage); + size_t extraPos {command.find("%EXTRA_")}; + + while (extraPos != std::string::npos) { + if (extraPos != std::string::npos) { + bool invalidEntry {false}; + bool isQuoted {false}; + std::string extraName; + std::string extraValue; + + size_t equalPos {command.find("=", extraPos)}; + if (equalPos == std::string::npos) + invalidEntry = true; + + if (!invalidEntry && extraPos + 8 >= command.size()) + invalidEntry = true; + + if (!invalidEntry) { + if (command.length() > equalPos && command[equalPos + 1] == '\"') + isQuoted = true; + + extraName = command.substr(extraPos + 7, equalPos - (extraPos + 8)); + + if (isQuoted) { + const size_t closeQuotePos {command.find("\"", equalPos + 2)}; + if (closeQuotePos != std::string::npos) + extraValue = command.substr(equalPos + 2, closeQuotePos - (equalPos + 2)); + else + invalidEntry = true; + } + else { + const size_t spacePos {command.find(" ", extraPos)}; + if (spacePos != std::string::npos) + extraValue = command.substr(equalPos + 1, spacePos - (equalPos + 1)); + else + extraValue = command.substr(equalPos + 1, command.size() - equalPos); + } + + if (invalidEntry) { + LOG(LogError) << "Invalid entry in systems configuration file es_systems.xml"; + LOG(LogError) << "Raw emulator launch command:"; + LOG(LogError) << commandRaw; + + window->queueInfoPopup("ERROR: INVALID ENTRY IN SYSTEMS CONFIGURATION FILE", + 6000); + window->setAllowTextScrolling(true); + window->setAllowFileAnimation(true); + return; + } + + if (extraName != "" && extraValue != "") + androidExtras.emplace_back(make_pair(extraName, extraValue)); + } + } + extraPos = command.find("%EXTRA_", extraPos + 1); + } +#endif + #if defined(_WIN64) command = Utils::String::replace( command, "%ESPATH%", Utils::String::replace(Utils::FileSystem::getExePath(), "/", "\\")); command = Utils::String::replace(command, "%EMUDIR%", Utils::FileSystem::getEscapedPath(Utils::FileSystem::getParent( - Utils::String::replace(binaryPath, "\"", "")))); + Utils::String::replace(emulator.first, "\"", "")))); command = Utils::String::replace(command, "%GAMEDIR%", Utils::FileSystem::getEscapedPath(Utils::FileSystem::getParent( Utils::String::replace(romPath, "\"", "")))); @@ -1600,7 +1676,7 @@ void FileData::launchGame() command = Utils::String::replace(command, "%ESPATH%", Utils::FileSystem::getExePath()); command = Utils::String::replace(command, "%EMUDIR%", Utils::FileSystem::getEscapedPath(Utils::FileSystem::getParent( - Utils::String::replace(binaryPath, "\\", "")))); + Utils::String::replace(emulator.first, "\\", "")))); command = Utils::String::replace(command, "%GAMEDIR%", Utils::FileSystem::getEscapedPath(Utils::FileSystem::getParent( Utils::String::replace(romPath, "\\", "")))); @@ -1625,8 +1701,19 @@ void FileData::launchGame() LOG(LogDebug) << "Raw emulator launch command:"; LOG(LogDebug) << commandRaw; +#if defined(__ANDROID__) + LOG(LogInfo) << "Expanded emulator launch parameters:"; + LOG(LogInfo) << "Package: " << androidPackage; + LOG(LogInfo) << "Component: " + << (androidComponent == "" ? "" : androidComponent); + for (auto& extra : androidExtras) { + LOG(LogInfo) << "Extra name: " << extra.first; + LOG(LogInfo) << "Extra value: " << extra.second; + } +#else LOG(LogInfo) << "Expanded emulator launch command:"; LOG(LogInfo) << command; +#endif #if defined(FLATPAK_BUILD) // Break out of the sandbox. @@ -1645,8 +1732,11 @@ void FileData::launchGame() returnValue = Utils::Platform::launchGameWindows( Utils::String::stringToWideString(command), Utils::String::stringToWideString(startDirectory), runInBackground, hideWindow); +#elif defined(__ANDROID__) + returnValue = + Utils::Platform::Android::launchGame(androidPackage, androidComponent, androidExtras); #else - returnValue = Utils::Platform::launchGameUnix(command, startDirectory, runInBackground); +returnValue = Utils::Platform::launchGameUnix(command, startDirectory, runInBackground); #endif // Notify the user in case of a failed game launch using a popup window. if (returnValue != 0) { @@ -1737,23 +1827,27 @@ void FileData::launchGame() gameToUpdate->mSystem->onMetaDataSavePoint(); } -const std::string FileData::findEmulatorPath(std::string& command, const bool preCommand) +const std::pair FileData::findEmulator( + std::string& command, const bool preCommand) { // Extract the emulator executable from the launch command string. There are two ways // that the emulator can be defined in es_systems.xml, either using the find rules in - // es_find_rules.xml or via the explicit emulator binary name. In the former case, we + // es_find_rules.xml or via the explicit emulator name. In the former case, we // need to process any configured systempath and staticpath rules (and for Windows also // winregistrypath and winregistryvalue rules), and in the latter case we simply search - // for the emulator binary in the system path. + // for the emulator in the system path. std::string emuExecutable; std::string exePath; - // Method 1, emulator binary is defined using find rules: + // Method 1, emulator is defined using find rules: #if defined(_WIN64) std::vector emulatorWinRegistryPaths; std::vector emulatorWinRegistryValues; +#endif +#if defined(__ANDROID__) + std::vector emulatorAndroidPackages; #endif std::vector emulatorSystemPaths; std::vector emulatorStaticPaths; @@ -1782,6 +1876,10 @@ const std::string FileData::findEmulatorPath(std::string& command, const bool pr SystemData::sFindRules.get()->mEmulators[emulatorEntry].winRegistryPaths; emulatorWinRegistryValues = SystemData::sFindRules.get()->mEmulators[emulatorEntry].winRegistryValues; +#endif +#if defined(__ANDROID__) + emulatorAndroidPackages = + SystemData::sFindRules.get()->mEmulators[emulatorEntry].androidPackages; #endif emulatorSystemPaths = SystemData::sFindRules.get()->mEmulators[emulatorEntry].systemPaths; @@ -1793,10 +1891,13 @@ const std::string FileData::findEmulatorPath(std::string& command, const bool pr if (emulatorEntry != "" && emulatorWinRegistryPaths.empty() && emulatorWinRegistryValues.empty() && emulatorSystemPaths.empty() && emulatorStaticPaths.empty()) +#elif defined(__ANDROID__) + if (emulatorEntry != "" && emulatorAndroidPackages.empty() && emulatorSystemPaths.empty() && + emulatorStaticPaths.empty()) #else if (emulatorEntry != "" && emulatorSystemPaths.empty() && emulatorStaticPaths.empty()) #endif - return "NO EMULATOR RULE: " + emulatorEntry; + return std::make_pair(emulatorEntry, FileData::findEmulatorResult::NO_RULES); #if defined(_WIN64) for (std::string& path : emulatorWinRegistryPaths) { @@ -1834,19 +1935,19 @@ const std::string FileData::findEmulatorPath(std::string& command, const bool pr continue; } - // That a value was found does not guarantee that the emulator binary actually exists, - // so check for that as well. + // That a value was found does not guarantee that the emulator actually exists, so + // check for that as well. if (pathStatus == ERROR_SUCCESS) { if (Utils::FileSystem::isRegularFile(Utils::String::wideStringToString(registryPath)) || Utils::FileSystem::isSymlink(Utils::String::wideStringToString(registryPath))) { - LOG(LogDebug) << "FileData::findEmulatorPath(): " - << (preCommand ? "Pre-command binary" : "Emulator binary") + LOG(LogDebug) << "FileData::findEmulator(): " + << (preCommand ? "Pre-command" : "Emulator") << " found via winregistrypath rule"; exePath = Utils::FileSystem::getEscapedPath( Utils::String::wideStringToString(registryPath)); command.replace(startPos, endPos - startPos + 1, exePath); RegCloseKey(registryKey); - return exePath; + return std::make_pair(exePath, FileData::findEmulatorResult::FOUND_FILE); } } RegCloseKey(registryKey); @@ -1906,25 +2007,45 @@ const std::string FileData::findEmulatorPath(std::string& command, const bool pr if (!appendString.empty()) path.append(Utils::String::stringToWideString(appendString)); - // That a value was found does not guarantee that the emulator binary actually exists, + // That a value was found does not guarantee that the emulator actually exists, // so check for that as well. if (pathStatus == ERROR_SUCCESS) { if (Utils::FileSystem::isRegularFile(Utils::String::wideStringToString(path)) || Utils::FileSystem::isSymlink(Utils::String::wideStringToString(path))) { - LOG(LogDebug) << "FileData::findEmulatorPath(): " - << (preCommand ? "Pre-command binary" : "Emulator binary") + LOG(LogDebug) << "FileData::findEmulator(): " + << (preCommand ? "Pre-command" : "Emulator") << " found via winregistryvalue rule"; exePath = Utils::FileSystem::getEscapedPath(Utils::String::wideStringToString(path)); command.replace(startPos, endPos - startPos + 1, exePath); RegCloseKey(registryKey); - return exePath; + return std::make_pair(exePath, FileData::findEmulatorResult::FOUND_FILE); } } RegCloseKey(registryKey); } #endif +#if defined(__ANDROID__) + for (std::string& androidpackage : emulatorAndroidPackages) { + // If a pipe character is present in the androidpackage entry it means an explicit Intent + // component should be used rather than the default one. The checkEmulatorInstalled() + // Java function will check for the component as well and if it's not found it flags + // the overall emulator entry as not found. + std::string packageName {androidpackage}; + std::string component; + const size_t pipePos {packageName.find('|')}; + if (pipePos != std::string::npos) { + component = packageName.substr(pipePos + 1); + packageName = packageName.substr(0, pipePos); + } + if (Utils::Platform::Android::checkEmulatorInstalled(packageName, component)) { + return std::make_pair(androidpackage, + FileData::findEmulatorResult::FOUND_ANDROID_PACKAGE); + } + } +#endif + for (std::string& path : emulatorSystemPaths) { #if defined(_WIN64) std::wstring pathWide {Utils::String::stringToWideString(path)}; @@ -1945,30 +2066,30 @@ const std::string FileData::findEmulatorPath(std::string& command, const bool pr } } if (exePath != "") { - LOG(LogDebug) << "FileData::findEmulatorPath(): " - << (preCommand ? "Pre-command binary" : "Emulator binary") + LOG(LogDebug) << "FileData::findEmulator(): " + << (preCommand ? "Pre-command" : "Emulator") << " found via systempath rule"; exePath += "\\" + path; exePath = Utils::FileSystem::getEscapedPath(exePath); command.replace(startPos, endPos - startPos + 1, exePath); - return exePath; + return std::make_pair(exePath, FileData::findEmulatorResult::FOUND_FILE); } #else exePath = Utils::FileSystem::getPathToBinary(path); if (exePath != "") { - LOG(LogDebug) << "FileData::findEmulatorPath(): " - << (preCommand ? "Pre-command binary" : "Emulator binary") + LOG(LogDebug) << "FileData::findEmulator(): " + << (preCommand ? "Pre-command" : "Emulator") << " found via systempath rule"; exePath += "/" + path; command.replace(startPos, endPos - startPos + 1, exePath); - return exePath; + return std::make_pair(exePath, FileData::findEmulatorResult::FOUND_FILE); } #endif } for (std::string& path : emulatorStaticPaths) { // If a pipe character is present in the staticpath entry it means we should substitute - // the emulator binary with whatever is defined after the pipe character. + // the emulator with whatever is defined after the pipe character. std::string replaceCommand; const size_t pipePos {path.find('|')}; @@ -1998,23 +2119,23 @@ const std::string FileData::findEmulatorPath(std::string& command, const bool pr } if (Utils::FileSystem::isRegularFile(path) || Utils::FileSystem::isSymlink(path)) { - LOG(LogDebug) << "FileData::findEmulatorPath(): " - << (preCommand ? "Pre-command binary" : "Emulator binary") + LOG(LogDebug) << "FileData::findEmulator(): " + << (preCommand ? "Pre-command" : "Emulator") << " found via staticpath rule"; if (replaceCommand == "") { exePath = Utils::FileSystem::getEscapedPath(path); } else { - LOG(LogDebug) << "FileData::findEmulatorPath(): Replacing emulator binary in " + LOG(LogDebug) << "FileData::findEmulator(): Replacing emulator in " "staticpath rule with explicitly defined command"; exePath = replaceCommand; } command.replace(startPos, endPos - startPos + 1, exePath); - return exePath; + return std::make_pair(exePath, FileData::findEmulatorResult::FOUND_FILE); } } - // Method 2, exact emulator binary name: + // Method 2, exact emulator name: // If %ESPATH% is used, then expand it to the binary directory of ES-DE. command = Utils::String::replace(command, "%ESPATH%", Utils::FileSystem::getExePath()); @@ -2052,7 +2173,7 @@ const std::string FileData::findEmulatorPath(std::string& command, const bool pr exePath = Utils::String::wideStringToString(pathBuffer.data()); } -#else +#elif !defined(__ANDROID__) if (Utils::FileSystem::isRegularFile(emuExecutable) || Utils::FileSystem::isSymlink(emuExecutable)) { exePath = Utils::FileSystem::getEscapedPath(emuExecutable); @@ -2065,7 +2186,7 @@ const std::string FileData::findEmulatorPath(std::string& command, const bool pr } #endif - return exePath; + return std::make_pair(exePath, FileData::findEmulatorResult::NOT_FOUND); } CollectionFileData::CollectionFileData(FileData* file, SystemData* system) diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index 46aed47e3..982d73b88 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -123,8 +123,16 @@ public: virtual FileData* getSourceFileData() { return this; } const std::string& getSystemName() const { return mSystemName; } + enum class findEmulatorResult { + FOUND_FILE, + FOUND_ANDROID_PACKAGE, + NOT_FOUND, + NO_RULES + }; + void launchGame(); - const std::string findEmulatorPath(std::string& command, const bool preCommand); + const std::pair findEmulator(std::string& command, + const bool preCommand); using ComparisonFunction = bool(const FileData* a, const FileData* b); struct SortType { diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index b54e0b487..12f1c390a 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -56,6 +56,9 @@ void FindRules::loadFindRules() #elif defined(__APPLE__) filePath = ResourceManager::getInstance().getResourcePath(":/systems/macos/es_find_rules.xml", false); +#elif defined(__ANDROID__) + filePath = ResourceManager::getInstance().getResourcePath(":/systems/android/es_find_rules.xml", + false); #else filePath = ResourceManager::getInstance().getResourcePath(":/systems/unix/es_find_rules.xml", false); @@ -84,7 +87,6 @@ void FindRules::loadFindRules() #else const pugi::xml_parse_result& res {doc.load_file(path.c_str())}; #endif - if (!res) { LOG(LogError) << "Couldn't parse es_find_rules.xml: " << res.description(); continue; @@ -126,6 +128,9 @@ void FindRules::loadFindRules() #if defined(_WIN64) if (ruleType != "winregistrypath" && ruleType != "winregistryvalue" && ruleType != "systempath" && ruleType != "staticpath") { +#elif defined(__ANDROID__) + if (ruleType != "androidpackage" && ruleType != "systempath" && + ruleType != "staticpath") { #else if (ruleType != "systempath" && ruleType != "staticpath") { #endif @@ -145,6 +150,9 @@ void FindRules::loadFindRules() emulatorRules.winRegistryPaths.emplace_back(entryValue); else if (ruleType == "winregistryvalue") emulatorRules.winRegistryValues.emplace_back(entryValue); +#elif defined(__ANDROID__) + else if (ruleType == "androidpackage") + emulatorRules.androidPackages.emplace_back(entryValue); #endif } } @@ -154,6 +162,8 @@ void FindRules::loadFindRules() #if defined(_WIN64) emulatorRules.winRegistryPaths.clear(); emulatorRules.winRegistryValues.clear(); +#elif defined(__ANDROID__) + emulatorRules.androidPackages.clear(); #endif } @@ -969,6 +979,8 @@ std::vector SystemData::getConfigPath() path = ResourceManager::getInstance().getResourcePath(":/systems/windows/es_systems.xml", true); #elif defined(__APPLE__) path = ResourceManager::getInstance().getResourcePath(":/systems/macos/es_systems.xml", true); +#elif defined(__ANDROID__) + path = ResourceManager::getInstance().getResourcePath(":/systems/android/es_systems.xml", true); #else path = ResourceManager::getInstance().getResourcePath(":/systems/unix/es_systems.xml", true); #endif diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index c72889b56..d352b27d8 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -44,6 +44,8 @@ private: #if defined(_WIN64) std::vector winRegistryPaths; std::vector winRegistryValues; +#elif defined(__ANDROID__) + std::vector androidPackages; #endif std::vector systemPaths; std::vector staticPaths; diff --git a/es-core/src/utils/PlatformUtil.cpp b/es-core/src/utils/PlatformUtil.cpp index 8b00443c4..f09336b62 100644 --- a/es-core/src/utils/PlatformUtil.cpp +++ b/es-core/src/utils/PlatformUtil.cpp @@ -379,13 +379,60 @@ namespace Utils // TODO: Wait for interface to close and check actual outcome. JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; jclass jniClass {jniEnv->FindClass("org/esde/esde/esde")}; - jmethodID funcID { + jmethodID methodID { jniEnv->GetStaticMethodID(jniClass, "requestStoragePermissions", "()Z")}; const bool result { - static_cast(jniEnv->CallStaticBooleanMethod(jniClass, funcID))}; + static_cast(jniEnv->CallStaticBooleanMethod(jniClass, methodID))}; + // jniEnv->DeleteLocalRef(jniClass); return result; } + bool checkEmulatorInstalled(const std::string& packageName, + const std::string& component) + { + JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; + jclass jniClass {jniEnv->FindClass("org/esde/esde/esde")}; + jmethodID methodID {jniEnv->GetStaticMethodID( + jniClass, "checkEmulatorInstalled", "(Ljava/lang/String;Ljava/lang/String;)Z")}; + bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( + jniClass, methodID, jniEnv->NewStringUTF(packageName.c_str()), + jniEnv->NewStringUTF(component.c_str())))}; + // jniEnv->DeleteLocalRef(jniClass); + return returnValue; + } + + int launchGame(const std::string& packageName, + const std::string& component, + std::vector>& extras) + { + JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; + jclass jniClass {jniEnv->FindClass("org/esde/esde/esde")}; + jmethodID methodID {jniEnv->GetStaticMethodID( + jniClass, "launchGame", + "(Ljava/lang/String;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Z")}; + jclass vectorClass {jniEnv->FindClass("java/util/Vector")}; + jmethodID vectorMID {jniEnv->GetMethodID(vectorClass, "", "()V")}; + jmethodID addMethodID { + jniEnv->GetMethodID(vectorClass, "add", "(Ljava/lang/Object;)Z")}; + jobject extrasNames {jniEnv->NewObject(vectorClass, vectorMID)}; + jobject extrasValues {jniEnv->NewObject(vectorClass, vectorMID)}; + for (auto& extra : extras) { + jniEnv->CallBooleanMethod(extrasNames, addMethodID, + jniEnv->NewStringUTF(extra.first.c_str())); + jniEnv->CallBooleanMethod(extrasValues, addMethodID, + jniEnv->NewStringUTF(extra.second.c_str())); + } + const bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( + jniClass, methodID, jniEnv->NewStringUTF(packageName.c_str()), + jniEnv->NewStringUTF(component.c_str()), extrasNames, extrasValues))}; + // jniEnv->DeleteLocalRef(vectorClass); + // jniEnv->DeleteLocalRef(jniClass); + if (returnValue) + return -1; + else + return 0; + } + } // namespace Android #endif } // namespace Platform diff --git a/es-core/src/utils/PlatformUtil.h b/es-core/src/utils/PlatformUtil.h index a0f9a3fe4..723d0db64 100644 --- a/es-core/src/utils/PlatformUtil.h +++ b/es-core/src/utils/PlatformUtil.h @@ -60,7 +60,12 @@ namespace Utils namespace Android { bool requestStoragePermission(); - }; // namespace Android + bool checkEmulatorInstalled(const std::string& packageName, + const std::string& component); + int launchGame(const std::string& packageName, + const std::string& component, + std::vector>& extras); + } // namespace Android #endif static QuitMode sQuitMode = QuitMode::QUIT; From 25f017d9f8245055faa53296566a233290e39321 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 26 Nov 2023 22:19:24 +0100 Subject: [PATCH 026/320] (Android) Added support for defining a specific Intent action in the find rule configuration --- es-app/src/FileData.cpp | 80 +++++++++++++++++++++--------- es-core/src/utils/PlatformUtil.cpp | 18 ++++--- es-core/src/utils/PlatformUtil.h | 5 +- 3 files changed, 69 insertions(+), 34 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 52153ae9a..ffd67f69d 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -949,7 +949,8 @@ void FileData::launchGame() #if defined(__ANDROID__) std::string androidPackage; - std::string androidComponent; + std::string androidActivity; + std::string androidAction; std::vector> androidExtras; #endif @@ -1110,13 +1111,27 @@ void FileData::launchGame() #if defined(__ANDROID__) else if (emulator.second == FileData::findEmulatorResult::FOUND_ANDROID_PACKAGE) { androidPackage = emulator.first; - const size_t pipePos {androidPackage.find('|')}; - if (pipePos != std::string::npos) { - androidComponent = androidPackage.substr(pipePos + 1); - androidPackage = androidPackage.substr(0, pipePos); + size_t separatorPos {androidPackage.find('/')}; + + if (separatorPos != std::string::npos) { + androidActivity = androidPackage.substr(separatorPos + 1); + androidPackage = androidPackage.substr(0, separatorPos); } - LOG(LogDebug) << "FileData::launchGame(): Found Android emulator package \"" - << androidPackage << "\""; + + separatorPos = androidPackage.find('|'); + if (separatorPos != std::string::npos) { + androidAction = androidPackage.substr(separatorPos + 1); + androidPackage = androidPackage.substr(0, separatorPos); + } + + separatorPos = androidActivity.find('|'); + if (separatorPos != std::string::npos) { + androidAction = androidActivity.substr(separatorPos + 1); + androidActivity = androidActivity.substr(0, separatorPos); + } + + LOG(LogDebug) << "FileData::launchGame(): Found emulator package \"" << androidPackage + << "\""; } #endif else if (!isShortcut) { @@ -1702,13 +1717,13 @@ void FileData::launchGame() LOG(LogDebug) << "Raw emulator launch command:"; LOG(LogDebug) << commandRaw; #if defined(__ANDROID__) - LOG(LogInfo) << "Expanded emulator launch parameters:"; + LOG(LogInfo) << "Expanded emulator launch arguments:"; LOG(LogInfo) << "Package: " << androidPackage; - LOG(LogInfo) << "Component: " - << (androidComponent == "" ? "" : androidComponent); + LOG(LogInfo) << "Activity: " << (androidActivity == "" ? "" : androidActivity); + LOG(LogInfo) << "Action: " << (androidAction == "" ? "" : androidAction); for (auto& extra : androidExtras) { - LOG(LogInfo) << "Extra name: " << extra.first; - LOG(LogInfo) << "Extra value: " << extra.second; + LOG(LogDebug) << "Extra name: " << extra.first; + LOG(LogDebug) << "Extra value: " << extra.second; } #else LOG(LogInfo) << "Expanded emulator launch command:"; @@ -1733,8 +1748,8 @@ void FileData::launchGame() Utils::String::stringToWideString(command), Utils::String::stringToWideString(startDirectory), runInBackground, hideWindow); #elif defined(__ANDROID__) - returnValue = - Utils::Platform::Android::launchGame(androidPackage, androidComponent, androidExtras); + returnValue = Utils::Platform::Android::launchGame(androidPackage, androidActivity, + androidAction, androidExtras); #else returnValue = Utils::Platform::launchGameUnix(command, startDirectory, runInBackground); #endif @@ -2028,18 +2043,35 @@ const std::pair FileData::findEmulato #if defined(__ANDROID__) for (std::string& androidpackage : emulatorAndroidPackages) { - // If a pipe character is present in the androidpackage entry it means an explicit Intent - // component should be used rather than the default one. The checkEmulatorInstalled() - // Java function will check for the component as well and if it's not found it flags - // the overall emulator entry as not found. + // If a forward slash character is present in the androidpackage entry it means an explicit + // Intent activity should be used rather than the default one. The checkEmulatorInstalled() + // Java function will check for the activity as well and if it's not found it flags + // the overall emulator entry as not found. It's also possible to define an explicit + // Intent action using the pipe character but this is not checked for in the Java + // function as invalid actions will not lead to crashes. std::string packageName {androidpackage}; - std::string component; - const size_t pipePos {packageName.find('|')}; - if (pipePos != std::string::npos) { - component = packageName.substr(pipePos + 1); - packageName = packageName.substr(0, pipePos); + std::string activity; + std::string action; + size_t separatorPos {packageName.find('/')}; + + if (separatorPos != std::string::npos) { + activity = packageName.substr(separatorPos + 1); + packageName = packageName.substr(0, separatorPos); } - if (Utils::Platform::Android::checkEmulatorInstalled(packageName, component)) { + + separatorPos = packageName.find('|'); + if (separatorPos != std::string::npos) { + action = packageName.substr(separatorPos + 1); + packageName = packageName.substr(0, separatorPos); + } + + separatorPos = activity.find('|'); + if (separatorPos != std::string::npos) { + action = activity.substr(separatorPos + 1); + activity = activity.substr(0, separatorPos); + } + + if (Utils::Platform::Android::checkEmulatorInstalled(packageName, activity)) { return std::make_pair(androidpackage, FileData::findEmulatorResult::FOUND_ANDROID_PACKAGE); } diff --git a/es-core/src/utils/PlatformUtil.cpp b/es-core/src/utils/PlatformUtil.cpp index f09336b62..7f8d4cc96 100644 --- a/es-core/src/utils/PlatformUtil.cpp +++ b/es-core/src/utils/PlatformUtil.cpp @@ -387,8 +387,7 @@ namespace Utils return result; } - bool checkEmulatorInstalled(const std::string& packageName, - const std::string& component) + bool checkEmulatorInstalled(const std::string& packageName, const std::string& activity) { JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; jclass jniClass {jniEnv->FindClass("org/esde/esde/esde")}; @@ -396,20 +395,22 @@ namespace Utils jniClass, "checkEmulatorInstalled", "(Ljava/lang/String;Ljava/lang/String;)Z")}; bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( jniClass, methodID, jniEnv->NewStringUTF(packageName.c_str()), - jniEnv->NewStringUTF(component.c_str())))}; + jniEnv->NewStringUTF(activity.c_str())))}; // jniEnv->DeleteLocalRef(jniClass); return returnValue; } int launchGame(const std::string& packageName, - const std::string& component, + const std::string& activity, + const std::string& action, std::vector>& extras) { JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; jclass jniClass {jniEnv->FindClass("org/esde/esde/esde")}; - jmethodID methodID {jniEnv->GetStaticMethodID( - jniClass, "launchGame", - "(Ljava/lang/String;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Z")}; + jmethodID methodID { + jniEnv->GetStaticMethodID(jniClass, "launchGame", + "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/" + "String;Ljava/util/Vector;Ljava/util/Vector;)Z")}; jclass vectorClass {jniEnv->FindClass("java/util/Vector")}; jmethodID vectorMID {jniEnv->GetMethodID(vectorClass, "", "()V")}; jmethodID addMethodID { @@ -424,7 +425,8 @@ namespace Utils } const bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( jniClass, methodID, jniEnv->NewStringUTF(packageName.c_str()), - jniEnv->NewStringUTF(component.c_str()), extrasNames, extrasValues))}; + jniEnv->NewStringUTF(activity.c_str()), jniEnv->NewStringUTF(action.c_str()), + extrasNames, extrasValues))}; // jniEnv->DeleteLocalRef(vectorClass); // jniEnv->DeleteLocalRef(jniClass); if (returnValue) diff --git a/es-core/src/utils/PlatformUtil.h b/es-core/src/utils/PlatformUtil.h index 723d0db64..57c78b28f 100644 --- a/es-core/src/utils/PlatformUtil.h +++ b/es-core/src/utils/PlatformUtil.h @@ -61,9 +61,10 @@ namespace Utils { bool requestStoragePermission(); bool checkEmulatorInstalled(const std::string& packageName, - const std::string& component); + const std::string& activity); int launchGame(const std::string& packageName, - const std::string& component, + const std::string& activity, + const std::string& action, std::vector>& extras); } // namespace Android #endif From b2e9507b0e5ce8ec5dd7a98f30fb201394d83e07 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 27 Nov 2023 20:12:03 +0100 Subject: [PATCH 027/320] (Android) Small change to PlatformUtil --- es-core/src/utils/PlatformUtil.cpp | 8 ++++---- es-core/src/utils/PlatformUtil.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/es-core/src/utils/PlatformUtil.cpp b/es-core/src/utils/PlatformUtil.cpp index 7f8d4cc96..ef55cc6e1 100644 --- a/es-core/src/utils/PlatformUtil.cpp +++ b/es-core/src/utils/PlatformUtil.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Platform.cpp // // Platform utility functions. @@ -378,7 +378,7 @@ namespace Utils { // TODO: Wait for interface to close and check actual outcome. JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; - jclass jniClass {jniEnv->FindClass("org/esde/esde/esde")}; + jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; jmethodID methodID { jniEnv->GetStaticMethodID(jniClass, "requestStoragePermissions", "()Z")}; const bool result { @@ -390,7 +390,7 @@ namespace Utils bool checkEmulatorInstalled(const std::string& packageName, const std::string& activity) { JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; - jclass jniClass {jniEnv->FindClass("org/esde/esde/esde")}; + jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; jmethodID methodID {jniEnv->GetStaticMethodID( jniClass, "checkEmulatorInstalled", "(Ljava/lang/String;Ljava/lang/String;)Z")}; bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( @@ -406,7 +406,7 @@ namespace Utils std::vector>& extras) { JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; - jclass jniClass {jniEnv->FindClass("org/esde/esde/esde")}; + jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; jmethodID methodID { jniEnv->GetStaticMethodID(jniClass, "launchGame", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/" diff --git a/es-core/src/utils/PlatformUtil.h b/es-core/src/utils/PlatformUtil.h index 57c78b28f..97687f052 100644 --- a/es-core/src/utils/PlatformUtil.h +++ b/es-core/src/utils/PlatformUtil.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Platform.h // // Platform utility functions. From 84534cf5d7a3733644af156088ad7e080d8c8265 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 27 Nov 2023 20:19:35 +0100 Subject: [PATCH 028/320] (Android) Added the application ID to the log output Also changed the general log output formatting slightly --- CMakeLists.txt | 1 + es-app/src/main.cpp | 17 ++++++----------- es-core/src/Log.cpp | 23 +++++++++++++++-------- es-core/src/Log.h | 2 +- 4 files changed, 23 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 81e05743d..55aab8d58 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -286,6 +286,7 @@ endif() if(ANDROID) set(BUNDLED_CERTS ON) + add_compile_definitions(ANDROID_APPLICATION_ID="org.es_de.frontend") endif() if(WIN32) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 477c14dbd..8f13f39c9 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -1,20 +1,15 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition (ES-DE) is a frontend for browsing -// and launching games from your multi-platform game collection. -// -// Originally created by Alec Lofquist. -// Improved and extended by the RetroPie community. -// Desktop Edition fork by Leon Styhre. +// ES-DE is a frontend for browsing and launching games from your multi-platform game collection. // // The column limit is 100 characters. // All ES-DE C++ source code is formatted using clang-format. // // main.cpp // -// Main program loop. Interprets command-line arguments, checks for the -// home folder and es_settings.xml configuration file, sets up the application -// environment and starts listening to SDL events. +// Main program loop. Interprets command-line arguments, checks for the home folder +// and es_settings.xml configuration file, sets up the application environment and +// starts listening to SDL events. // #include "ApplicationUpdater.h" @@ -452,7 +447,7 @@ bool checkApplicationHomeDirectory() std::cout << "First startup, creating application home directory \"" << Utils::String::replace(applicationHome, "/", "\\") << "\"\n"; #elif defined(__ANDROID__) - __android_log_print(ANDROID_LOG_VERBOSE, nullptr, + __android_log_print(ANDROID_LOG_VERBOSE, ANDROID_APPLICATION_ID, "First startup, creating application home directory \"%s\"", applicationHome.c_str()); #else @@ -462,7 +457,7 @@ bool checkApplicationHomeDirectory() Utils::FileSystem::createDirectory(applicationHome); if (!Utils::FileSystem::exists(applicationHome)) { #if defined(__ANDROID__) - __android_log_print(ANDROID_LOG_ERROR, nullptr, + __android_log_print(ANDROID_LOG_ERROR, ANDROID_APPLICATION_ID, "Error: Couldn't create directory, permission problems?"); #else std::cerr << "Error: Couldn't create directory, permission problems?\n"; diff --git a/es-core/src/Log.cpp b/es-core/src/Log.cpp index cacab31ed..b3a4dd149 100644 --- a/es-core/src/Log.cpp +++ b/es-core/src/Log.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Log.cpp // // Log output. @@ -70,7 +70,9 @@ std::ostringstream& Log::get(LogLevel level) localtime_r(&t, &tm); #endif std::unique_lock lock {sLogMutex}; - mOutStringStream << std::put_time(&tm, "%b %d %H:%M:%S ") << mLogLevelMap[level] << ":\t"; + mOutStringStream << std::put_time(&tm, "%b %d %H:%M:%S ") << mLogLevelMap[level] + << (level == LogLevel::LogInfo || level == LogLevel::LogWarning ? ": " : + ": "); mMessageLevel = level; return mOutStringStream; @@ -85,9 +87,10 @@ Log::~Log() // Not open yet, print to stdout. #if defined(__ANDROID__) __android_log_print( - ANDROID_LOG_ERROR, nullptr, + ANDROID_LOG_ERROR, ANDROID_APPLICATION_ID, "Error: Tried to write to log file before it was open, the following won't be logged:"); - __android_log_print(ANDROID_LOG_ERROR, nullptr, "%s", mOutStringStream.str().c_str()); + __android_log_print(ANDROID_LOG_ERROR, ANDROID_APPLICATION_ID, "%s", + mOutStringStream.str().c_str()); #else std::cerr << "Error: Tried to write to log file before it was open, " "the following won't be logged:\n"; @@ -100,15 +103,19 @@ Log::~Log() #if defined(__ANDROID__) if (mMessageLevel == LogError) { - __android_log_print(ANDROID_LOG_ERROR, nullptr, "%s", mOutStringStream.str().c_str()); + __android_log_print(ANDROID_LOG_ERROR, ANDROID_APPLICATION_ID, "%s", + mOutStringStream.str().c_str()); } else if (sReportingLevel >= LogDebug) { if (mMessageLevel == LogInfo) - __android_log_print(ANDROID_LOG_INFO, nullptr, "%s", mOutStringStream.str().c_str()); + __android_log_print(ANDROID_LOG_INFO, ANDROID_APPLICATION_ID, "%s", + mOutStringStream.str().c_str()); else if (mMessageLevel == LogWarning) - __android_log_print(ANDROID_LOG_WARN, nullptr, "%s", mOutStringStream.str().c_str()); + __android_log_print(ANDROID_LOG_WARN, ANDROID_APPLICATION_ID, "%s", + mOutStringStream.str().c_str()); else - __android_log_print(ANDROID_LOG_DEBUG, nullptr, "%s", mOutStringStream.str().c_str()); + __android_log_print(ANDROID_LOG_DEBUG, ANDROID_APPLICATION_ID, "%s", + mOutStringStream.str().c_str()); } #else // If it's an error or the --debug flag has been set, then print to the console as well. diff --git a/es-core/src/Log.h b/es-core/src/Log.h index 0c9c31528..41e1f1f1c 100644 --- a/es-core/src/Log.h +++ b/es-core/src/Log.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Log.h // // Log output. From 811118d3ee936dca89ee8c9c7523dc804ad181c8 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 29 Nov 2023 22:30:22 +0100 Subject: [PATCH 029/320] (Android) Added support for launching emulators with scoped storage permissions --- es-app/src/FileData.cpp | 16 +++++++++++----- es-app/src/FileData.h | 2 +- es-core/src/utils/PlatformUtil.cpp | 11 ++++++----- es-core/src/utils/PlatformUtil.h | 1 + 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index ffd67f69d..ac3e2710f 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // FileData.cpp // // Provides game file data structures and functions to access and sort this information. @@ -951,6 +951,7 @@ void FileData::launchGame() std::string androidPackage; std::string androidActivity; std::string androidAction; + std::string androidFileAsURI; std::vector> androidExtras; #endif @@ -1616,6 +1617,8 @@ void FileData::launchGame() command = Utils::String::replace(command, "%ROMPATH%", Utils::FileSystem::getEscapedPath(getROMDirectory())); #if defined(__ANDROID__) + if (command.find("%ROMURI%") != std::string::npos) + androidFileAsURI = romRaw; command = Utils::String::replace(command, "%ANDROIDPACKAGE%", androidPackage); size_t extraPos {command.find("%EXTRA_")}; @@ -1721,9 +1724,12 @@ void FileData::launchGame() LOG(LogInfo) << "Package: " << androidPackage; LOG(LogInfo) << "Activity: " << (androidActivity == "" ? "" : androidActivity); LOG(LogInfo) << "Action: " << (androidAction == "" ? "" : androidAction); + if (androidFileAsURI != "") { + LOG(LogInfo) << "File (URI): " << androidFileAsURI; + } for (auto& extra : androidExtras) { - LOG(LogDebug) << "Extra name: " << extra.first; - LOG(LogDebug) << "Extra value: " << extra.second; + LOG(LogInfo) << "Extra name: " << extra.first; + LOG(LogInfo) << "Extra value: " << extra.second; } #else LOG(LogInfo) << "Expanded emulator launch command:"; @@ -1748,8 +1754,8 @@ void FileData::launchGame() Utils::String::stringToWideString(command), Utils::String::stringToWideString(startDirectory), runInBackground, hideWindow); #elif defined(__ANDROID__) - returnValue = Utils::Platform::Android::launchGame(androidPackage, androidActivity, - androidAction, androidExtras); + returnValue = Utils::Platform::Android::launchGame( + androidPackage, androidActivity, androidAction, androidFileAsURI, androidExtras); #else returnValue = Utils::Platform::launchGameUnix(command, startDirectory, runInBackground); #endif diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index 982d73b88..4940d3aa9 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // FileData.h // // Provides game file data structures and functions to access and sort this information. diff --git a/es-core/src/utils/PlatformUtil.cpp b/es-core/src/utils/PlatformUtil.cpp index ef55cc6e1..3ad639707 100644 --- a/es-core/src/utils/PlatformUtil.cpp +++ b/es-core/src/utils/PlatformUtil.cpp @@ -403,14 +403,15 @@ namespace Utils int launchGame(const std::string& packageName, const std::string& activity, const std::string& action, + const std::string& fileAsURI, std::vector>& extras) { JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; - jmethodID methodID { - jniEnv->GetStaticMethodID(jniClass, "launchGame", - "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/" - "String;Ljava/util/Vector;Ljava/util/Vector;)Z")}; + jmethodID methodID {jniEnv->GetStaticMethodID( + jniClass, "launchGame", + "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/" + "String;Ljava/util/Vector;Ljava/util/Vector;)Z")}; jclass vectorClass {jniEnv->FindClass("java/util/Vector")}; jmethodID vectorMID {jniEnv->GetMethodID(vectorClass, "", "()V")}; jmethodID addMethodID { @@ -426,7 +427,7 @@ namespace Utils const bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( jniClass, methodID, jniEnv->NewStringUTF(packageName.c_str()), jniEnv->NewStringUTF(activity.c_str()), jniEnv->NewStringUTF(action.c_str()), - extrasNames, extrasValues))}; + jniEnv->NewStringUTF(fileAsURI.c_str()), extrasNames, extrasValues))}; // jniEnv->DeleteLocalRef(vectorClass); // jniEnv->DeleteLocalRef(jniClass); if (returnValue) diff --git a/es-core/src/utils/PlatformUtil.h b/es-core/src/utils/PlatformUtil.h index 97687f052..ff64bfbd3 100644 --- a/es-core/src/utils/PlatformUtil.h +++ b/es-core/src/utils/PlatformUtil.h @@ -65,6 +65,7 @@ namespace Utils int launchGame(const std::string& packageName, const std::string& activity, const std::string& action, + const std::string& fileAsURI, std::vector>& extras); } // namespace Android #endif From e9457306a843ab4b6753339d773b7e33178f0746 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 30 Nov 2023 17:20:19 +0100 Subject: [PATCH 030/320] (Android) Added the Android API level to a CMake build message --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 55aab8d58..5775c8c9d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -392,10 +392,10 @@ endif() if(ANDROID) if(ANDROID_ABI MATCHES arm64-v8a) - message("-- Building for Android arm64-v8a") + message("-- Building for Android arm64-v8a on API level ${ANDROID_PLATFORM}") set(ANDROID_CPU_ARCH arm64-v8a) elseif(ANDROID_ABI MATCHES x86_64) - message("-- Building for Android x86_64") + message("-- Building for Android x86_64 on API level ${ANDROID_PLATFORM}") set(ANDROID_CPU_ARCH x86_64) else() message(FATAL_ERROR "-- Unsupported Android ABI: " ${ANDROID_ABI}) From 27feef1b23187930c74d829b7b237a1ed58bc9ae Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 1 Dec 2023 22:32:59 +0100 Subject: [PATCH 031/320] (Android) Fixed a font rendering issue on some devices --- es-core/src/renderers/RendererOpenGL.cpp | 4 ++-- es-core/src/renderers/RendererOpenGL.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/es-core/src/renderers/RendererOpenGL.cpp b/es-core/src/renderers/RendererOpenGL.cpp index 222343102..ed724fc72 100644 --- a/es-core/src/renderers/RendererOpenGL.cpp +++ b/es-core/src/renderers/RendererOpenGL.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // RendererOpenGL.cpp // // OpenGL / OpenGL ES renderering functions. @@ -112,7 +112,7 @@ GLenum RendererOpenGL::convertTextureType(const TextureType type) #else case TextureType::BGRA: { return GL_BGRA; } break; #endif -#if defined(__EMSCRIPTEN__) +#if defined(__EMSCRIPTEN__) || defined(__ANDROID__) case TextureType::RED: { return GL_LUMINANCE; } break; #else case TextureType::RED: { return GL_RED; } break; diff --git a/es-core/src/renderers/RendererOpenGL.h b/es-core/src/renderers/RendererOpenGL.h index 416b4d89d..ad8bf44a4 100644 --- a/es-core/src/renderers/RendererOpenGL.h +++ b/es-core/src/renderers/RendererOpenGL.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // RendererOpenGL.h // // OpenGL / OpenGL ES renderering functions. From a83763c2c3ba38f1668cc2abe1e1306cf34b54be Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 1 Dec 2023 23:00:41 +0100 Subject: [PATCH 032/320] (Android) Added preliminary support for copying assets to the internal data directory --- CMakeLists.txt | 2 +- es-app/src/main.cpp | 4 +++ es-core/src/ThemeData.cpp | 2 ++ es-core/src/resources/ResourceManager.cpp | 43 ++++++++++++++++++++--- es-core/src/resources/ResourceManager.h | 13 +++++-- es-core/src/utils/PlatformUtil.cpp | 42 +++++++++++++++++++++- es-core/src/utils/PlatformUtil.h | 1 + 7 files changed, 97 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5775c8c9d..6552d1eb0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -413,7 +413,7 @@ add_compile_definitions(GLM_FORCE_XYZW_ONLY) # For Unix systems, assign the installation prefix. If it's not explicitly set, # we use /usr on Linux, /usr/pkg on NetBSD and /usr/local on FreeBSD and OpenBSD. -if(NOT WIN32 AND NOT APPLE) +if(NOT WIN32 AND NOT APPLE AND NOT ANDROID) if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) if(CMAKE_SYSTEM_NAME MATCHES Linux) set(CMAKE_INSTALL_PREFIX /usr CACHE INTERNAL CMAKE_INSTALL_PREFIX) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 8f13f39c9..fe0c191af 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -719,6 +719,10 @@ int main(int argc, char* argv[]) renderer = Renderer::getInstance(); window = Window::getInstance(); +#if defined(__ANDROID__) + Utils::Platform::Android::setupResources(); +#endif + ViewController::getInstance()->setMenuColors(); CollectionSystemsManager::getInstance(); Screensaver screensaver; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 4cfdfa06c..fed58c4cd 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -709,6 +709,8 @@ void ThemeData::populateThemes() Utils::FileSystem::getExePath() + "/themes", #if defined(__APPLE__) Utils::FileSystem::getExePath() + "/../Resources/themes", +#elif defined(__ANDROID__) + ResourceManager::getInstance().getDataDirectory() + "/themes", #elif defined(__unix__) && !defined(APPIMAGE_BUILD) Utils::FileSystem::getProgramDataPath() + "/themes", #endif diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index b14e11a4f..d4f5e3201 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -42,14 +42,17 @@ std::string ResourceManager::getResourcePath(const std::string& path, bool termi return applePackagePath; } #elif defined(__unix__) && !defined(APPIMAGE_BUILD) +#if defined(__ANDROID__) + std::string testDataPath {mDataDirectory + "/resources/" + &path[2]}; +#else // Check under the data installation directory (Unix only). std::string testDataPath {Utils::FileSystem::getProgramDataPath() + "/resources/" + &path[2]}; - - if (Utils::FileSystem::exists(testDataPath)) { - return testDataPath; - } #endif + if (Utils::FileSystem::exists(testDataPath)) + return testDataPath; +#endif +#if !defined(__ANDROID__) // Check under the ES executable directory. std::string testExePath {Utils::FileSystem::getExePath() + "/resources/" + &path[2]}; @@ -60,6 +63,14 @@ std::string ResourceManager::getResourcePath(const std::string& path, bool termi // indicate that we have a broken EmulationStation installation. If the argument // terminateOnFailure is set to false though, then skip this step. else { +#else + SDL_RWops* resFile {SDL_RWFromFile(path.substr(2).c_str(), "rb")}; + if (resFile != nullptr) { + SDL_RWclose(resFile); + return path.substr(2); + } + else { +#endif if (terminateOnFailure) { LOG(LogError) << "Program resource missing: " << path; LOG(LogError) << "Tried to find the resource in the following locations:"; @@ -69,7 +80,9 @@ std::string ResourceManager::getResourcePath(const std::string& path, bool termi #elif defined(__unix__) && !defined(APPIMAGE_BUILD) LOG(LogError) << testDataPath; #endif +#if !defined(__ANDROID__) LOG(LogError) << testExePath; +#endif LOG(LogError) << "Has EmulationStation been properly installed?"; Utils::Platform::emergencyShutdown(); } @@ -88,10 +101,19 @@ const ResourceData ResourceManager::getFileData(const std::string& path) const // Check if its a resource. const std::string respath {getResourcePath(path)}; +#if defined(__ANDROID__) + SDL_RWops* resFile {SDL_RWFromFile(respath.c_str(), "rb")}; + if (resFile != nullptr) { + ResourceData data {loadFile(resFile)}; + SDL_RWclose(resFile); + return data; + } +#else if (Utils::FileSystem::exists(respath)) { ResourceData data {loadFile(respath)}; return data; } +#endif // If the file doesn't exist, return an "empty" ResourceData. ResourceData data {nullptr, 0}; @@ -107,7 +129,7 @@ ResourceData ResourceManager::loadFile(const std::string& path) const #endif stream.seekg(0, stream.end); - size_t size {static_cast(stream.tellg())}; + const size_t size {static_cast(stream.tellg())}; stream.seekg(0, stream.beg); // Supply custom deleter to properly free array. @@ -120,6 +142,17 @@ ResourceData ResourceManager::loadFile(const std::string& path) const return ret; } +ResourceData ResourceManager::loadFile(SDL_RWops* resFile) const +{ + const size_t size {static_cast(SDL_RWsize(resFile))}; + std::shared_ptr data {new unsigned char[size], + [](unsigned char* p) { delete[] p; }}; + SDL_RWread(resFile, reinterpret_cast(data.get()), 1, size); + + ResourceData ret {data, size}; + return ret; +} + bool ResourceManager::fileExists(const std::string& path) const { // If it exists as a resource file, return true. diff --git a/es-core/src/resources/ResourceManager.h b/es-core/src/resources/ResourceManager.h index 1f41e864a..526926de6 100644 --- a/es-core/src/resources/ResourceManager.h +++ b/es-core/src/resources/ResourceManager.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ResourceManager.h // // Handles the application resources (fonts, graphics, sounds etc.). @@ -14,6 +14,8 @@ #include #include +#include + // The ResourceManager exists to: // Allow loading resources embedded into the executable like an actual file. // Allow embedded resources to be optionally remapped to actual files for further customization. @@ -42,6 +44,9 @@ public: void unloadAll(); void reloadAll(); + void setDataDirectory(const std::string& dataDirectory) { mDataDirectory = dataDirectory; } + const std::string& getDataDirectory() const { return mDataDirectory; } + std::string getResourcePath(const std::string& path, bool terminateOnFailure = true) const; const ResourceData getFileData(const std::string& path) const; bool fileExists(const std::string& path) const; @@ -49,9 +54,11 @@ public: private: ResourceManager() noexcept {} - std::list> mReloadables; - ResourceData loadFile(const std::string& path) const; + ResourceData loadFile(SDL_RWops* resFile) const; + + std::list> mReloadables; + std::string mDataDirectory; }; #endif // ES_CORE_RESOURCES_RESOURCE_MANAGER_H diff --git a/es-core/src/utils/PlatformUtil.cpp b/es-core/src/utils/PlatformUtil.cpp index 3ad639707..d9de622e5 100644 --- a/es-core/src/utils/PlatformUtil.cpp +++ b/es-core/src/utils/PlatformUtil.cpp @@ -387,13 +387,53 @@ namespace Utils return result; } + bool setupResources() + { + JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; + { + jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; + jmethodID methodID {jniEnv->GetStaticMethodID(jniClass, "getDataDirectory", + "()Ljava/lang/String;")}; + jstring dataDirectory { + static_cast(jniEnv->CallStaticObjectMethod(jniClass, methodID))}; + const char* dataDirUtf {jniEnv->GetStringUTFChars(dataDirectory, nullptr)}; + ResourceManager::getInstance().setDataDirectory(std::string(dataDirUtf)); + jniEnv->ReleaseStringUTFChars(dataDirectory, dataDirUtf); + jniEnv->DeleteLocalRef(jniClass); + } + { + jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; + jmethodID methodID { + jniEnv->GetStaticMethodID(jniClass, "setupResources", "()Z")}; + const bool returnValue { + static_cast(jniEnv->CallStaticBooleanMethod(jniClass, methodID))}; + jniEnv->DeleteLocalRef(jniClass); + if (returnValue) { + LOG(LogError) << "Couldn't setup application resources on internal storage"; + return true; + } + } + { + jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; + jmethodID methodID {jniEnv->GetStaticMethodID(jniClass, "setupThemes", "()Z")}; + const bool returnValue { + static_cast(jniEnv->CallStaticBooleanMethod(jniClass, methodID))}; + jniEnv->DeleteLocalRef(jniClass); + if (returnValue) { + LOG(LogError) << "Couldn't setup application themes on internal storage"; + return true; + } + } + return false; + } + bool checkEmulatorInstalled(const std::string& packageName, const std::string& activity) { JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; jmethodID methodID {jniEnv->GetStaticMethodID( jniClass, "checkEmulatorInstalled", "(Ljava/lang/String;Ljava/lang/String;)Z")}; - bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( + const bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( jniClass, methodID, jniEnv->NewStringUTF(packageName.c_str()), jniEnv->NewStringUTF(activity.c_str())))}; // jniEnv->DeleteLocalRef(jniClass); diff --git a/es-core/src/utils/PlatformUtil.h b/es-core/src/utils/PlatformUtil.h index ff64bfbd3..7c041f0bf 100644 --- a/es-core/src/utils/PlatformUtil.h +++ b/es-core/src/utils/PlatformUtil.h @@ -60,6 +60,7 @@ namespace Utils namespace Android { bool requestStoragePermission(); + bool setupResources(); bool checkEmulatorInstalled(const std::string& packageName, const std::string& activity); int launchGame(const std::string& packageName, From 2bdad527def967ef812702c2b42f39ed082a5779 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 2 Dec 2023 09:52:24 +0100 Subject: [PATCH 033/320] (Android) Set GuiOrphanedDataCleanup to be case-insensitive --- es-app/src/guis/GuiOrphanedDataCleanup.cpp | 4 ++-- es-app/src/guis/GuiOrphanedDataCleanup.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/guis/GuiOrphanedDataCleanup.cpp b/es-app/src/guis/GuiOrphanedDataCleanup.cpp index 7279826f9..5281e2ad3 100644 --- a/es-app/src/guis/GuiOrphanedDataCleanup.cpp +++ b/es-app/src/guis/GuiOrphanedDataCleanup.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE Frontend // GuiOrphanedDataCleanup.cpp // // Removes orphaned game media, gamelist.xml entries and custom collections entries. @@ -39,7 +39,7 @@ GuiOrphanedDataCleanup::GuiOrphanedDataCleanup(std::function reloadCallb addChild(&mBackground); addChild(&mGrid); -#if defined(_WIN64) || defined(__APPLE__) +#if defined(_WIN64) || defined(__APPLE__) || defined(__ANDROID__) // Although macOS may have filesystem case-sensitivity enabled it's rare and in worst case // this will just leave some extra media files on the filesystem. mCaseSensitiveFilesystem = false; diff --git a/es-app/src/guis/GuiOrphanedDataCleanup.h b/es-app/src/guis/GuiOrphanedDataCleanup.h index 6523da643..0170868b5 100644 --- a/es-app/src/guis/GuiOrphanedDataCleanup.h +++ b/es-app/src/guis/GuiOrphanedDataCleanup.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE Frontend // GuiOrphanedDataCleanup.h // // Removes orphaned game media, gamelist.xml entries and custom collections entries. From d87bb4e3a47a3233ee31b6ed5617cd5a619bf00e Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 2 Dec 2023 12:47:17 +0100 Subject: [PATCH 034/320] (Android) Resources and themes are now only copied to internal storage after upgrades or for new installations --- es-app/src/main.cpp | 22 +++++++++++++---- es-core/src/Window.cpp | 9 ++++++- es-core/src/Window.h | 6 +++-- es-core/src/utils/PlatformUtil.cpp | 38 ++++++++++++++++++++++-------- es-core/src/utils/PlatformUtil.h | 6 +++-- 5 files changed, 62 insertions(+), 19 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index fe0c191af..e6010c332 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -719,10 +719,6 @@ int main(int argc, char* argv[]) renderer = Renderer::getInstance(); window = Window::getInstance(); -#if defined(__ANDROID__) - Utils::Platform::Android::setupResources(); -#endif - ViewController::getInstance()->setMenuColors(); CollectionSystemsManager::getInstance(); Screensaver screensaver; @@ -740,6 +736,24 @@ int main(int argc, char* argv[]) LOG(LogDebug) << "Android storage state: " << SDL_AndroidGetExternalStorageState(); LOG(LogDebug) << "Android internal path: " << SDL_AndroidGetInternalStoragePath(); LOG(LogDebug) << "Android external path: " << SDL_AndroidGetExternalStoragePath(); + Utils::Platform::Android::setDataDirectory(); + { + std::string buildIdentifier {PROGRAM_VERSION_STRING}; + buildIdentifier.append(" (r") + .append(std::to_string(PROGRAM_RELEASE_NUMBER)) + .append("), built ") + .append(PROGRAM_BUILT_STRING); + if (Utils::Platform::Android::checkNeedResourceCopy(buildIdentifier)) { + LOG(LogInfo) << "Application has been updated or it's a new installation, copying " + "bundled resources and themes to internal storage..."; + if (Settings::getInstance()->getBool("SplashScreen")) + window->renderSplashScreen(Window::SplashScreenState::RESOURCE_COPY, 0.0f); + if (Utils::Platform::Android::setupResources(buildIdentifier)) { + LOG(LogError) << "Copying of resources and themes failed"; + return -1; + } + } + } #endif #if defined(APPLICATION_UPDATER) diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 4ef169f3c..904661d63 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE Frontend // Window.cpp // // Window management, screensaver management, help prompts and splash screen. @@ -144,6 +144,8 @@ bool Window::init() mDefaultFonts.at(1)->buildTextCache("Loading systems...", 0.0f, 0.0f, 0x777777FF)); mSplashTextReloading = std::unique_ptr( mDefaultFonts.at(1)->buildTextCache("Reloading...", 0.0f, 0.0f, 0x777777FF)); + mSplashTextResourceCopy = std::unique_ptr( + mDefaultFonts.at(1)->buildTextCache("Copying resources...", 0.0f, 0.0f, 0x777777FF)); mSplashTextPositions.x = (mRenderer->getScreenWidth() - mSplashTextScanning->metrics.size.x) / 2.0f; @@ -698,6 +700,9 @@ void Window::renderSplashScreen(SplashScreenState state, float progress) textPosX = mSplashTextPositions.w; textPosY += mDefaultFonts.at(1)->getLetterHeight(); } + else if (state == SplashScreenState::RESOURCE_COPY) { + textPosX = (mRenderer->getScreenWidth() - mSplashTextResourceCopy->metrics.size.x) / 2.0f; + } trans = glm::translate(trans, glm::round(glm::vec3 {textPosX, textPosY, 0.0f})); mRenderer->setMatrix(trans); @@ -708,6 +713,8 @@ void Window::renderSplashScreen(SplashScreenState state, float progress) mDefaultFonts.at(1)->renderTextCache(mSplashTextPopulating.get()); else if (state == SplashScreenState::RELOADING) mDefaultFonts.at(1)->renderTextCache(mSplashTextReloading.get()); + else if (state == SplashScreenState::RESOURCE_COPY) + mDefaultFonts.at(1)->renderTextCache(mSplashTextResourceCopy.get()); mRenderer->swapBuffers(); } diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 198e8c2a7..8ea2f4fbd 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE Frontend // Window.h // // Window management, screensaver management, help prompts and splash screen. @@ -109,7 +109,8 @@ public: enum class SplashScreenState { SCANNING, POPULATING, - RELOADING + RELOADING, + RESOURCE_COPY }; void renderSplashScreen(SplashScreenState state, float progress); @@ -188,6 +189,7 @@ private: std::unique_ptr mSplashTextScanning; std::unique_ptr mSplashTextPopulating; std::unique_ptr mSplashTextReloading; + std::unique_ptr mSplashTextResourceCopy; glm::vec4 mSplashTextPositions; std::vector mProgressBarRectangles; diff --git a/es-core/src/utils/PlatformUtil.cpp b/es-core/src/utils/PlatformUtil.cpp index d9de622e5..e5c3802ca 100644 --- a/es-core/src/utils/PlatformUtil.cpp +++ b/es-core/src/utils/PlatformUtil.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // Platform.cpp // // Platform utility functions. @@ -387,7 +387,7 @@ namespace Utils return result; } - bool setupResources() + void setDataDirectory() { JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; { @@ -401,12 +401,29 @@ namespace Utils jniEnv->ReleaseStringUTFChars(dataDirectory, dataDirUtf); jniEnv->DeleteLocalRef(jniClass); } + } + + bool checkNeedResourceCopy(const std::string& buildIdentifier) + { + JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; + jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; + jmethodID methodID {jniEnv->GetStaticMethodID(jniClass, "checkNeedResourceCopy", + "(Ljava/lang/String;)Z")}; + const bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( + jniClass, methodID, jniEnv->NewStringUTF(buildIdentifier.c_str())))}; + jniEnv->DeleteLocalRef(jniClass); + return returnValue; + } + + bool setupResources(const std::string& buildIdentifier) + { + JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; { jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; - jmethodID methodID { - jniEnv->GetStaticMethodID(jniClass, "setupResources", "()Z")}; - const bool returnValue { - static_cast(jniEnv->CallStaticBooleanMethod(jniClass, methodID))}; + jmethodID methodID {jniEnv->GetStaticMethodID(jniClass, "setupResources", + "(Ljava/lang/String;)Z")}; + const bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( + jniClass, methodID, jniEnv->NewStringUTF(buildIdentifier.c_str())))}; jniEnv->DeleteLocalRef(jniClass); if (returnValue) { LOG(LogError) << "Couldn't setup application resources on internal storage"; @@ -415,9 +432,10 @@ namespace Utils } { jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; - jmethodID methodID {jniEnv->GetStaticMethodID(jniClass, "setupThemes", "()Z")}; - const bool returnValue { - static_cast(jniEnv->CallStaticBooleanMethod(jniClass, methodID))}; + jmethodID methodID {jniEnv->GetStaticMethodID(jniClass, "setupThemes", + "(Ljava/lang/String;)Z")}; + const bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( + jniClass, methodID, jniEnv->NewStringUTF(buildIdentifier.c_str())))}; jniEnv->DeleteLocalRef(jniClass); if (returnValue) { LOG(LogError) << "Couldn't setup application themes on internal storage"; @@ -436,7 +454,7 @@ namespace Utils const bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( jniClass, methodID, jniEnv->NewStringUTF(packageName.c_str()), jniEnv->NewStringUTF(activity.c_str())))}; - // jniEnv->DeleteLocalRef(jniClass); + jniEnv->DeleteLocalRef(jniClass); return returnValue; } diff --git a/es-core/src/utils/PlatformUtil.h b/es-core/src/utils/PlatformUtil.h index 7c041f0bf..88de575ca 100644 --- a/es-core/src/utils/PlatformUtil.h +++ b/es-core/src/utils/PlatformUtil.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// ES-DE +// ES-DE Frontend // Platform.h // // Platform utility functions. @@ -60,7 +60,9 @@ namespace Utils namespace Android { bool requestStoragePermission(); - bool setupResources(); + void setDataDirectory(); + bool checkNeedResourceCopy(const std::string& buildIdentifier); + bool setupResources(const std::string& buildIdentifier); bool checkEmulatorInstalled(const std::string& packageName, const std::string& activity); int launchGame(const std::string& packageName, From 3ae7bc6b5bc817edd1b055a707bd1cec268cd8fa Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 7 Dec 2023 18:51:09 +0100 Subject: [PATCH 035/320] (Android) Updated the game launching logic --- .gitignore | 2 +- es-app/src/FileData.cpp | 246 ++++++++++++++++++----------- es-core/src/utils/PlatformUtil.cpp | 81 +++++++--- es-core/src/utils/PlatformUtil.h | 16 +- 4 files changed, 230 insertions(+), 115 deletions(-) diff --git a/.gitignore b/.gitignore index e18f26d9c..36380cfb6 100644 --- a/.gitignore +++ b/.gitignore @@ -34,7 +34,7 @@ emulationstation.worker.js /ROMs # Android build -android +/android # AppImage AppDir diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index ac3e2710f..15918bcda 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -882,6 +882,7 @@ void FileData::launchGame() std::string commandRaw {command}; std::string romPath {Utils::FileSystem::getEscapedPath(mPath)}; std::string baseName {Utils::FileSystem::getStem(mPath)}; + std::string romRaw {Utils::FileSystem::getPreferredPath(mPath)}; // For the special case where a directory has a supported file extension and is therefore // interpreted as a file, check if there is a matching filename inside the directory. @@ -890,7 +891,11 @@ void FileData::launchGame() for (std::string& file : Utils::FileSystem::getDirContent(mPath)) { if (Utils::FileSystem::getFileName(file) == Utils::FileSystem::getFileName(mPath) && (Utils::FileSystem::isRegularFile(file) || Utils::FileSystem::isSymlink(file))) { +#if defined(__ANDROID__) + romRaw = file; +#else romPath = Utils::FileSystem::getEscapedPath(file); +#endif baseName = baseName.substr(0, baseName.find(".")); break; } @@ -898,7 +903,6 @@ void FileData::launchGame() } const std::string fileName {baseName + Utils::FileSystem::getExtension(romPath)}; - const std::string romRaw {Utils::FileSystem::getPreferredPath(mPath)}; const std::string esPath {Utils::FileSystem::getExePath()}; bool runInBackground {false}; @@ -951,8 +955,12 @@ void FileData::launchGame() std::string androidPackage; std::string androidActivity; std::string androidAction; - std::string androidFileAsURI; - std::vector> androidExtras; + std::string androidCategory; + std::string androidMimeType; + std::string androidData; + std::map androidExtrasString; + std::map androidExtrasBool; + std::vector androidActivityFlags; #endif #if defined(_WIN64) @@ -1119,18 +1127,6 @@ void FileData::launchGame() androidPackage = androidPackage.substr(0, separatorPos); } - separatorPos = androidPackage.find('|'); - if (separatorPos != std::string::npos) { - androidAction = androidPackage.substr(separatorPos + 1); - androidPackage = androidPackage.substr(0, separatorPos); - } - - separatorPos = androidActivity.find('|'); - if (separatorPos != std::string::npos) { - androidAction = androidActivity.substr(separatorPos + 1); - androidActivity = androidActivity.substr(0, separatorPos); - } - LOG(LogDebug) << "FileData::launchGame(): Found emulator package \"" << androidPackage << "\""; } @@ -1609,6 +1605,7 @@ void FileData::launchGame() #endif #endif +#if !defined(__ANDROID__) // Replace the remaining variables with their actual values. command = Utils::String::replace(command, "%ROM%", romPath); command = Utils::String::replace(command, "%BASENAME%", baseName); @@ -1616,65 +1613,132 @@ void FileData::launchGame() command = Utils::String::replace(command, "%ROMRAW%", romRaw); command = Utils::String::replace(command, "%ROMPATH%", Utils::FileSystem::getEscapedPath(getROMDirectory())); -#if defined(__ANDROID__) - if (command.find("%ROMURI%") != std::string::npos) - androidFileAsURI = romRaw; +#else command = Utils::String::replace(command, "%ANDROIDPACKAGE%", androidPackage); - size_t extraPos {command.find("%EXTRA_")}; - while (extraPos != std::string::npos) { - if (extraPos != std::string::npos) { + const std::vector androidVariabels { + "%ACTION%=", "%CATEGORY%=", "%MIMETYPE%=", "%DATA%="}; + + for (std::string variable : androidVariabels) { + size_t dataPos {command.find(variable)}; + if (dataPos != std::string::npos) { bool invalidEntry {false}; - bool isQuoted {false}; - std::string extraName; - std::string extraValue; + bool isQuoted {(command.length() > dataPos + variable.length() && + command[dataPos + variable.length()] == '\"')}; + std::string value; - size_t equalPos {command.find("=", extraPos)}; - if (equalPos == std::string::npos) - invalidEntry = true; - - if (!invalidEntry && extraPos + 8 >= command.size()) - invalidEntry = true; - - if (!invalidEntry) { - if (command.length() > equalPos && command[equalPos + 1] == '\"') - isQuoted = true; - - extraName = command.substr(extraPos + 7, equalPos - (extraPos + 8)); - - if (isQuoted) { - const size_t closeQuotePos {command.find("\"", equalPos + 2)}; - if (closeQuotePos != std::string::npos) - extraValue = command.substr(equalPos + 2, closeQuotePos - (equalPos + 2)); - else - invalidEntry = true; - } - else { - const size_t spacePos {command.find(" ", extraPos)}; - if (spacePos != std::string::npos) - extraValue = command.substr(equalPos + 1, spacePos - (equalPos + 1)); - else - extraValue = command.substr(equalPos + 1, command.size() - equalPos); - } - - if (invalidEntry) { - LOG(LogError) << "Invalid entry in systems configuration file es_systems.xml"; - LOG(LogError) << "Raw emulator launch command:"; - LOG(LogError) << commandRaw; - - window->queueInfoPopup("ERROR: INVALID ENTRY IN SYSTEMS CONFIGURATION FILE", - 6000); - window->setAllowTextScrolling(true); - window->setAllowFileAnimation(true); - return; - } - - if (extraName != "" && extraValue != "") - androidExtras.emplace_back(make_pair(extraName, extraValue)); + if (isQuoted) { + const size_t closeQuotePos {command.find("\"", dataPos + variable.length() + 1)}; + if (closeQuotePos != std::string::npos) + value = command.substr(dataPos + variable.length() + 1, + closeQuotePos - (dataPos + variable.length() + 1)); + else + invalidEntry = true; } + else { + const size_t spacePos {command.find(" ", dataPos)}; + if (spacePos != std::string::npos) + value = command.substr(dataPos + variable.length(), + spacePos - (dataPos + variable.length())); + else + value = command.substr(dataPos + variable.length(), + command.size() - dataPos + variable.length()); + } + + if (invalidEntry) { + LOG(LogError) << "Invalid entry in systems configuration file es_systems.xml"; + LOG(LogError) << "Raw emulator launch command:"; + LOG(LogError) << commandRaw; + + window->queueInfoPopup("ERROR: INVALID ENTRY IN SYSTEMS CONFIGURATION FILE", 6000); + window->setAllowTextScrolling(true); + window->setAllowFileAnimation(true); + return; + } + + if (variable == "%ACTION%=") + androidAction = value; + else if (variable == "%DATA%=") + androidData = value; + else if (variable == "%CATEGORY%=") + androidCategory = value; + else if (variable == "%MIMETYPE%=") + androidMimeType = value; } - extraPos = command.find("%EXTRA_", extraPos + 1); } + + std::vector extraVariabels {"%EXTRA_", "%EXTRABOOL_"}; + + for (std::string variable : extraVariabels) { + size_t extraPos {command.find(variable)}; + while (extraPos != std::string::npos) { + if (extraPos != std::string::npos) { + bool invalidEntry {false}; + bool isQuoted {false}; + std::string extraName; + std::string extraValue; + + size_t equalPos {command.find("=", extraPos)}; + if (equalPos == std::string::npos) + invalidEntry = true; + + if (!invalidEntry && extraPos + variable.length() + 1 >= command.size()) + invalidEntry = true; + + if (!invalidEntry) { + if (command.length() > equalPos && command[equalPos + 1] == '\"') + isQuoted = true; + + extraName = command.substr(extraPos + variable.length(), + equalPos - (extraPos + variable.length() + 1)); + + if (isQuoted) { + const size_t closeQuotePos {command.find("\"", equalPos + 2)}; + if (closeQuotePos != std::string::npos) + extraValue = + command.substr(equalPos + 2, closeQuotePos - (equalPos + 2)); + else + invalidEntry = true; + } + else { + const size_t spacePos {command.find(" ", extraPos)}; + if (spacePos != std::string::npos) + extraValue = command.substr(equalPos + 1, spacePos - (equalPos + 1)); + else + extraValue = command.substr(equalPos + 1, command.size() - equalPos); + } + + if (invalidEntry) { + LOG(LogError) + << "Invalid entry in systems configuration file es_systems.xml"; + LOG(LogError) << "Raw emulator launch command:"; + LOG(LogError) << commandRaw; + + window->queueInfoPopup("ERROR: INVALID ENTRY IN SYSTEMS CONFIGURATION FILE", + 6000); + window->setAllowTextScrolling(true); + window->setAllowFileAnimation(true); + return; + } + + if (extraName != "" && extraValue != "") { + if (variable == "%EXTRA_") + androidExtrasString[extraName] = extraValue; + else if (variable == "%EXTRABOOL_") + androidExtrasBool[extraName] = extraValue; + } + } + } + extraPos = command.find(variable, extraPos + 1); + } + } + + if (command.find("%ACTIVITY_CLEAR_TASK%") != std::string::npos) + androidActivityFlags.emplace_back("%ACTIVITY_CLEAR_TASK%"); + if (command.find("%ACTIVITY_CLEAR_TOP%") != std::string::npos) + androidActivityFlags.emplace_back("%ACTIVITY_CLEAR_TOP%"); + if (command.find("%ACTIVITY_NO_HISTORY%") != std::string::npos) + androidActivityFlags.emplace_back("%ACTIVITY_NO_HISTORY%"); #endif #if defined(_WIN64) @@ -1722,15 +1786,29 @@ void FileData::launchGame() #if defined(__ANDROID__) LOG(LogInfo) << "Expanded emulator launch arguments:"; LOG(LogInfo) << "Package: " << androidPackage; - LOG(LogInfo) << "Activity: " << (androidActivity == "" ? "" : androidActivity); - LOG(LogInfo) << "Action: " << (androidAction == "" ? "" : androidAction); - if (androidFileAsURI != "") { - LOG(LogInfo) << "File (URI): " << androidFileAsURI; + if (androidActivity != "") { + LOG(LogInfo) << "Activity: " << androidActivity; } - for (auto& extra : androidExtras) { + if (androidAction != "") { + LOG(LogInfo) << "Action: " << androidAction; + } + if (androidCategory != "") { + LOG(LogInfo) << "Category: " << androidCategory; + } + if (androidMimeType != "") { + LOG(LogInfo) << "MIME type: " << androidMimeType; + } + if (androidData != "") { + LOG(LogInfo) << "Data: " << androidData; + } + for (auto& extra : androidExtrasString) { LOG(LogInfo) << "Extra name: " << extra.first; LOG(LogInfo) << "Extra value: " << extra.second; } + for (auto& extra : androidExtrasBool) { + LOG(LogInfo) << "Extra bool name: " << extra.first; + LOG(LogInfo) << "Extra bool value: " << extra.second; + } #else LOG(LogInfo) << "Expanded emulator launch command:"; LOG(LogInfo) << command; @@ -1755,13 +1833,14 @@ void FileData::launchGame() Utils::String::stringToWideString(startDirectory), runInBackground, hideWindow); #elif defined(__ANDROID__) returnValue = Utils::Platform::Android::launchGame( - androidPackage, androidActivity, androidAction, androidFileAsURI, androidExtras); + androidPackage, androidActivity, androidAction, androidCategory, androidMimeType, + androidData, romRaw, androidExtrasString, androidExtrasBool, androidActivityFlags); #else returnValue = Utils::Platform::launchGameUnix(command, startDirectory, runInBackground); #endif // Notify the user in case of a failed game launch using a popup window. if (returnValue != 0) { - LOG(LogWarning) << "...launch terminated with nonzero return value " << returnValue; + LOG(LogWarning) << "Launch terminated with nonzero return value " << returnValue; window->queueInfoPopup("ERROR LAUNCHING GAME '" + Utils::String::toUpper(metadata.get("name")) + "' (ERROR CODE " + @@ -2051,13 +2130,10 @@ const std::pair FileData::findEmulato for (std::string& androidpackage : emulatorAndroidPackages) { // If a forward slash character is present in the androidpackage entry it means an explicit // Intent activity should be used rather than the default one. The checkEmulatorInstalled() - // Java function will check for the activity as well and if it's not found it flags - // the overall emulator entry as not found. It's also possible to define an explicit - // Intent action using the pipe character but this is not checked for in the Java - // function as invalid actions will not lead to crashes. + // Java function will check for the activity as well and if it's not found it flags the + // overall emulator entry as not found. std::string packageName {androidpackage}; std::string activity; - std::string action; size_t separatorPos {packageName.find('/')}; if (separatorPos != std::string::npos) { @@ -2065,18 +2141,6 @@ const std::pair FileData::findEmulato packageName = packageName.substr(0, separatorPos); } - separatorPos = packageName.find('|'); - if (separatorPos != std::string::npos) { - action = packageName.substr(separatorPos + 1); - packageName = packageName.substr(0, separatorPos); - } - - separatorPos = activity.find('|'); - if (separatorPos != std::string::npos) { - action = activity.substr(separatorPos + 1); - activity = activity.substr(0, separatorPos); - } - if (Utils::Platform::Android::checkEmulatorInstalled(packageName, activity)) { return std::make_pair(androidpackage, FileData::findEmulatorResult::FOUND_ANDROID_PACKAGE); diff --git a/es-core/src/utils/PlatformUtil.cpp b/es-core/src/utils/PlatformUtil.cpp index e5c3802ca..67f91f87b 100644 --- a/es-core/src/utils/PlatformUtil.cpp +++ b/es-core/src/utils/PlatformUtil.cpp @@ -31,6 +31,18 @@ #include #include +#if defined(__ANDROID__) +JNIEXPORT void JNICALL Java_org_es_1de_frontend_MainActivity_nativeLogOutput(JNIEnv* jniEnv, + jclass jniClass, + jstring output, + jint logLevel) +{ + const char* outputUtf {jniEnv->GetStringUTFChars(output, nullptr)}; + LOG(static_cast(logLevel)) << outputUtf; + jniEnv->ReleaseStringUTFChars(output, outputUtf); +} +#endif + namespace Utils { namespace Platform @@ -380,10 +392,9 @@ namespace Utils JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; jmethodID methodID { - jniEnv->GetStaticMethodID(jniClass, "requestStoragePermissions", "()Z")}; - const bool result { - static_cast(jniEnv->CallStaticBooleanMethod(jniClass, methodID))}; - // jniEnv->DeleteLocalRef(jniClass); + jniEnv->GetStaticMethodID(jniClass, "requestStoragePermissions", "()V")}; + jniEnv->CallStaticVoidMethod(jniClass, methodID); + bool result {false}; return result; } @@ -461,33 +472,61 @@ namespace Utils int launchGame(const std::string& packageName, const std::string& activity, const std::string& action, - const std::string& fileAsURI, - std::vector>& extras) + const std::string& category, + const std::string& mimeType, + const std::string& data, + const std::string& romRaw, + const std::map& extrasString, + const std::map& extrasBool, + const std::vector& activityFlags) { JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; jmethodID methodID {jniEnv->GetStaticMethodID( jniClass, "launchGame", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/" - "String;Ljava/util/Vector;Ljava/util/Vector;)Z")}; - jclass vectorClass {jniEnv->FindClass("java/util/Vector")}; - jmethodID vectorMID {jniEnv->GetMethodID(vectorClass, "", "()V")}; - jmethodID addMethodID { - jniEnv->GetMethodID(vectorClass, "add", "(Ljava/lang/Object;)Z")}; - jobject extrasNames {jniEnv->NewObject(vectorClass, vectorMID)}; - jobject extrasValues {jniEnv->NewObject(vectorClass, vectorMID)}; - for (auto& extra : extras) { - jniEnv->CallBooleanMethod(extrasNames, addMethodID, - jniEnv->NewStringUTF(extra.first.c_str())); - jniEnv->CallBooleanMethod(extrasValues, addMethodID, - jniEnv->NewStringUTF(extra.second.c_str())); + "String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/" + "HashMap;Ljava/util/HashMap;Ljava/util/List;)Z")}; + + jclass hashMapClass {jniEnv->FindClass("java/util/HashMap")}; + jmethodID hashMapInit {jniEnv->GetMethodID(hashMapClass, "", "(I)V")}; + + jobject hashMapString { + jniEnv->NewObject(hashMapClass, hashMapInit, extrasString.size())}; + jobject hashMapBool { + jniEnv->NewObject(hashMapClass, hashMapInit, extrasBool.size())}; + + jmethodID hashMapPutMethodString {jniEnv->GetMethodID( + hashMapClass, "put", + "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;")}; + + for (auto it : extrasString) { + jniEnv->CallObjectMethod(hashMapString, hashMapPutMethodString, + jniEnv->NewStringUTF(it.first.c_str()), + jniEnv->NewStringUTF(it.second.c_str())); } + + for (auto it : extrasBool) { + jniEnv->CallObjectMethod(hashMapBool, hashMapPutMethodString, + jniEnv->NewStringUTF(it.first.c_str()), + jniEnv->NewStringUTF(it.second.c_str())); + } + + jclass arrayListClass {jniEnv->FindClass("java/util/ArrayList")}; + jmethodID arrayListInit {jniEnv->GetMethodID(arrayListClass, "", "()V")}; + jmethodID addMethod { + jniEnv->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z")}; + jobject flags {jniEnv->NewObject(arrayListClass, arrayListInit)}; + + for (auto& flag : activityFlags) + jniEnv->CallBooleanMethod(flags, addMethod, jniEnv->NewStringUTF(flag.c_str())); + const bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( jniClass, methodID, jniEnv->NewStringUTF(packageName.c_str()), jniEnv->NewStringUTF(activity.c_str()), jniEnv->NewStringUTF(action.c_str()), - jniEnv->NewStringUTF(fileAsURI.c_str()), extrasNames, extrasValues))}; - // jniEnv->DeleteLocalRef(vectorClass); - // jniEnv->DeleteLocalRef(jniClass); + jniEnv->NewStringUTF(category.c_str()), jniEnv->NewStringUTF(mimeType.c_str()), + jniEnv->NewStringUTF(data.c_str()), jniEnv->NewStringUTF(romRaw.c_str()), + hashMapString, hashMapBool, flags))}; if (returnValue) return -1; else diff --git a/es-core/src/utils/PlatformUtil.h b/es-core/src/utils/PlatformUtil.h index 88de575ca..2fac7ee93 100644 --- a/es-core/src/utils/PlatformUtil.h +++ b/es-core/src/utils/PlatformUtil.h @@ -17,6 +17,12 @@ #if defined(__ANDROID__) #include +#include + +extern "C" void Java_org_es_1de_frontend_MainActivity_nativeLogOutput(JNIEnv* jniEnv, + jclass jniClass, + jstring output, + jint logLevel); #endif namespace Utils @@ -68,8 +74,14 @@ namespace Utils int launchGame(const std::string& packageName, const std::string& activity, const std::string& action, - const std::string& fileAsURI, - std::vector>& extras); + const std::string& category, + const std::string& mimeType, + const std::string& data, + const std::string& romRaw, + const std::map& extrasString, + const std::map& extrasBool, + const std::vector& activityFlags); + } // namespace Android #endif From f83d4ddbe2d62a3290d3ad6cfd5956fada1deebe Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 8 Dec 2023 17:05:39 +0100 Subject: [PATCH 036/320] (Android) Added initial find rules and systems configuration --- resources/systems/android/es_find_rules.xml | 87 + resources/systems/android/es_systems.xml | 1906 +++++++++++++++++++ 2 files changed, 1993 insertions(+) create mode 100644 resources/systems/android/es_find_rules.xml create mode 100644 resources/systems/android/es_systems.xml diff --git a/resources/systems/android/es_find_rules.xml b/resources/systems/android/es_find_rules.xml new file mode 100644 index 000000000..082dd6e77 --- /dev/null +++ b/resources/systems/android/es_find_rules.xml @@ -0,0 +1,87 @@ + + + + + + com.retroarch.aarch64/com.retroarch.browser.retroactivity.RetroActivityFuture + com.retroarch.ra32/com.retroarch.browser.retroactivity.RetroActivityFuture + com.retroarch/com.retroarch.browser.retroactivity.RetroActivityFuture + + + + + + xyz.aethersx2.android/.EmulationActivity + + + + + + org.citra.citra_emu/.activities.EmulationActivity + org.citra.citra_emu/.ui.main.MainActivity + + + + + + org.citra.emu/.ui.EmulationActivity + + + + + + org.dolphinemu.dolphinemu/.ui.main.MainActivity + + + + + + com.dsemu.drastic/.DraSticActivity + + + + + + com.github.stenzek.duckstation/.EmulationActivity + + + + + + com.flycast.emulator/com.reicast.emulator.MainActivity + + + + + + com.seleuco.mame4droid/.MAME4droid + + + + + + org.mupen64plusae.v3.fzurita.pro/paulscode.android.mupen64plusae.SplashActivity + org.mupen64plusae.v3.fzurita/paulscode.android.mupen64plusae.SplashActivity + + + + + + org.ppsspp.ppssppgold/org.ppsspp.ppsspp.PpssppActivity + org.ppsspp.ppsspp/.PpssppActivity + + + + + + io.recompiled.redream/.MainActivity + + + + + + org.yuzu.yuzu_emu.ea/org.yuzu.yuzu_emu.activities.EmulationActivity + org.yuzu.yuzu_emu/org.yuzu.yuzu_emu.activities.EmulationActivity + + + \ No newline at end of file diff --git a/resources/systems/android/es_systems.xml b/resources/systems/android/es_systems.xml new file mode 100644 index 000000000..38440e877 --- /dev/null +++ b/resources/systems/android/es_systems.xml @@ -0,0 +1,1906 @@ + + + + + 3do + 3DO Interactive Multiplayer + %ROMPATH%/3do + .bin .BIN .chd .CHD .cue .CUE .iso .ISO .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=opera_libretro_android.so %EXTRA_ROM%=%ROM% + 3do + 3do + + + adam + Coleco Adam + %ROMPATH%/adam + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + adam + adam + + + ags + Adventure Game Studio Game Engine + %ROMPATH%/ags + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + pcwindows + ags + + + amiga + Commodore Amiga + %ROMPATH%/amiga + .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% + amiga + amiga + + + amiga1200 + Commodore Amiga 1200 + %ROMPATH%/amiga1200 + .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% + amiga + amiga1200 + + + amiga600 + Commodore Amiga 600 + %ROMPATH%/amiga600 + .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% + amiga + amiga600 + + + amigacd32 + Commodore Amiga CD32 + %ROMPATH%/amigacd32 + .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% + amigacd32 + amigacd32 + + + amstradcpc + Amstrad CPC + %ROMPATH%/amstradcpc + .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% + amstradcpc + amstradcpc + + + android + Google Android + %ROMPATH%/android + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + android + android + + + apple2 + Apple II + %ROMPATH%/apple2 + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + apple2 + apple2 + + + apple2gs + Apple IIGS + %ROMPATH%/apple2gs + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + apple2gs + apple2gs + + + arcade + Arcade + %ROMPATH%/arcade + .cmd .CMD .desktop .sh .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_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2010_libretro_android.so %EXTRA_ROM%=%ROM% + %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%=mame2000_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID% %ACTIVITY_CLEAR_TASK% %ACTIVITY_CLEAR_TOP% %ACTION%=android.intent.action.VIEW %DATA%=%ROM% + %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% + %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% + arcade + arcade + + + arcadia + Emerson Arcadia 2001 + %ROMPATH%/arcadia + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + arcadia + arcadia + + + archimedes + Acorn Archimedes + %ROMPATH%/archimedes + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + archimedes + archimedes + + + arduboy + Arduboy Miniature Game System + %ROMPATH%/arduboy + .hex .HEX .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=arduous_libretro_android.so %EXTRA_ROM%=%ROM% + arduboy + arduboy + + + astrocde + Bally Astrocade + %ROMPATH%/astrocde + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + astrocde + astrocade + + + atari2600 + Atari 2600 + %ROMPATH%/atari2600 + .a26 .A26 .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=stella_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=stella2014_libretro_android.so %EXTRA_ROM%=%ROM% + atari2600 + atari2600 + + + atari5200 + Atari 5200 + %ROMPATH%/atari5200 + .a52 .A52 .atr .ATR .atx .ATX .bin .BIN .car .CAR .cas .CAS .cdm .CDM .rom .ROM .xex .XEX .xfd .XFD .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=a5200_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=atari800_libretro_android.so %EXTRA_ROM%=%ROM% + atari5200 + atari5200 + + + atari7800 + Atari 7800 ProSystem + %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% + atari7800 + atari7800 + + + atari800 + Atari 800 + %ROMPATH%/atari800 + .a52 .A52 .atr .ATR .atx .ATX .bin .BIN .car .CAR .cas .CAS .cdm .CDM .rom .ROM .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% + atari800 + atari800 + + + atarijaguar + Atari Jaguar + %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% + atarijaguar + atarijaguar + + + atarijaguarcd + Atari Jaguar CD + %ROMPATH%/atarijaguarcd + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + atarijaguarcd + atarijaguarcd + + + atarilynx + Atari Lynx + %ROMPATH%/atarilynx + .lnx .LNX .o .O .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=handy_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_lynx_libretro_android.so %EXTRA_ROM%=%ROM% + atarilynx + atarilynx + + + atarist + Atari ST + %ROMPATH%/atarist + .st .ST .msa .MSA .stx .STX .dim .DIM .ipf .IPF .m3u .M3U .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=hatari_libretro_android.so %EXTRA_ROM%=%ROM% + atarist + atarist + + + 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 + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=atari800_libretro_android.so %EXTRA_ROM%=%ROM% + atarixe + atarixe + + + atomiswave + Sammy Corporation Atomiswave + %ROMPATH%/atomiswave + .bin .BIN .dat .DAT .elf .ELF .lst .LST .7z .7Z .zip .ZIP + %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% + arcade + atomiswave + + + bbcmicro + Acorn Computers BBC Micro + %ROMPATH%/bbcmicro + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + bbcmicro + bbcmicro + + + c64 + Commodore 64 + %ROMPATH%/c64 + .bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vice_x64sc_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vice_x64_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vice_xscpu64_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vice_x128_libretro_android.so %EXTRA_ROM%=%ROM% + c64 + c64 + + + cdimono1 + Philips CD-i + %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% + cdimono1 + cdimono1 + + + 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 + %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 + cdtv + + + chailove + ChaiLove Game Engine + %ROMPATH%/chailove + .chai .CHAI .chailove .CHAILOVE .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=chailove_libretro_android.so %EXTRA_ROM%=%ROM% + love + chailove + + + channelf + Fairchild Channel F + %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% + channelf + channelf + + + coco + Tandy Color Computer + %ROMPATH%/coco + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + coco + coco + + + colecovision + Coleco ColecoVision + %ROMPATH%/colecovision + .bin .BIN .cas .CAS .col .COL .cv .CV .dsk .DSK .m3u .M3U .mx1 .MX1 .mx2 .MX2 .ri .RI .rom .ROM .sc .SC .sg .SG .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bluemsx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=gearcoleco_libretro_android.so %EXTRA_ROM%=%ROM% + colecovision + colecovision + + + consolearcade + Console Arcade Systems + %ROMPATH%/consolearcade + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + arcade + consolearcade + + + cps + Capcom Play System + %ROMPATH%/cps + .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_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2010_libretro_android.so %EXTRA_ROM%=%ROM% + %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%=mame2000_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID% %ACTIVITY_CLEAR_TASK% %ACTIVITY_CLEAR_TOP% %ACTION%=android.intent.action.VIEW %DATA%=%ROM% + %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% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_cps1_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_cps2_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_cps3_libretro_android.so %EXTRA_ROM%=%ROM% + arcade + cps + + + cps1 + Capcom Play System I + %ROMPATH%/cps1 + .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_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2010_libretro_android.so %EXTRA_ROM%=%ROM% + %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%=mame2000_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID% %ACTIVITY_CLEAR_TASK% %ACTIVITY_CLEAR_TOP% %ACTION%=android.intent.action.VIEW %DATA%=%ROM% + %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% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_cps1_libretro_android.so %EXTRA_ROM%=%ROM% + arcade + cps1 + + + cps2 + Capcom Play System II + %ROMPATH%/cps2 + .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_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2010_libretro_android.so %EXTRA_ROM%=%ROM% + %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%=mame2000_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID% %ACTIVITY_CLEAR_TASK% %ACTIVITY_CLEAR_TOP% %ACTION%=android.intent.action.VIEW %DATA%=%ROM% + %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% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_cps2_libretro_android.so %EXTRA_ROM%=%ROM% + arcade + cps2 + + + cps3 + Capcom Play System III + %ROMPATH%/cps3 + .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_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2010_libretro_android.so %EXTRA_ROM%=%ROM% + %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%=mame2000_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID% %ACTIVITY_CLEAR_TASK% %ACTIVITY_CLEAR_TOP% %ACTION%=android.intent.action.VIEW %DATA%=%ROM% + %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% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_cps3_libretro_android.so %EXTRA_ROM%=%ROM% + arcade + cps3 + + + crvision + VTech CreatiVision + %ROMPATH%/crvision + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + crvision + crvision + + + daphne + Daphne Arcade LaserDisc Emulator + %ROMPATH%/daphne + .dirksimple .ogv .OGV + %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 + + + desktop + Desktop Applications + %ROMPATH%/desktop + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + pcwindows + desktop + + + doom + Doom + %ROMPATH%/doom + .desktop .iwad .IWAD .pk4 .PK4 .pwad .PWAD .sh .wad .WAD + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=prboom_libretro_android.so %EXTRA_ROM%=%ROM% + pc, pcwindows + doom + + + dos + DOS (PC) + %ROMPATH%/dos + .bat .BAT .com .COM .conf .CONF .cue .CUE .dosz .DOSZ .exe .EXE .iso .ISO .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=dosbox_pure_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=dosbox_core_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=dosbox_svn_libretro_android.so %EXTRA_ROM%=%ROM% + dos + dos + + + dragon32 + Dragon Data Dragon 32 + %ROMPATH%/dragon32 + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + dragon32 + dragon32 + + + dreamcast + Sega Dreamcast + %ROMPATH%/dreamcast + .cdi .CDI .chd .CHD .cue .CUE .dat .DAT .elf .ELF .gdi .GDI .iso .ISO .lst .LST .m3u .M3U .7z .7Z .zip .ZIP + %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_REDREAM% %ACTION%=android.intent.action.VIEW %DATA%=%ROMSAF% + dreamcast + dreamcast + + + easyrpg + EasyRPG Game Engine + %ROMPATH%/easyrpg + .easyrpg .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=easyrpg_libretro_android.so %EXTRA_ROM%=%ROM% + easyrpg + easyrpg + + + electron + Acorn Electron + %ROMPATH%/electron + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + electron + electron + + + emulators + Emulators + %ROMPATH%/emulators + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + pcwindows + emulators + + + epic + Epic Games Store + %ROMPATH%/epic + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + pcwindows + epic + + + famicom + Nintendo Family Computer + %ROMPATH%/famicom + .3dsen .3DSEN .fds .FDS .nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/mesen_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/nestopia_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/fceumm_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/quicknes_libretro_android.so %EXTRA_ROM%=%ROM% + famicom + famicom + + + fba + FinalBurn Alpha + %ROMPATH%/fba + .iso .ISO .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_neogeo_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_cps1_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_cps2_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbalpha2012_cps3_libretro_android.so %EXTRA_ROM%=%ROM% + arcade + fba + + + fbneo + FinalBurn Neo + %ROMPATH%/fbneo + .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbneo_libretro_android.so %EXTRA_ROM%=%ROM% + arcade + fbneo + + + fds + Nintendo Famicom Disk System + %ROMPATH%/fds + .nes .NES .fds .FDS .unf .UNF .UNIF .UNIF .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/mesen_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/nestopia_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/fceumm_libretro_android.so %EXTRA_ROM%=%ROM% + fds + fds + + + flash + Adobe Flash + %ROMPATH%/flash + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + flash + flash + + + fm7 + Fujitsu FM-7 + %ROMPATH%/fm7 + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + fm7 + fm7 + + + fmtowns + Fujitsu FM Towns + %ROMPATH%/fmtowns + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + fmtowns + fmtowns + + + fpinball + Future Pinball + %ROMPATH%/fpinball + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + fpinball + fpinball + + + gamate + Bit Corporation Gamate + %ROMPATH%/gamate + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + gamate + gamate + + + gameandwatch + Nintendo Game and Watch + %ROMPATH%/gameandwatch + .mgw .MGW + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=gw_libretro_android.so %EXTRA_ROM%=%ROM% + gameandwatch + gameandwatch + + + gamecom + Tiger Electronics Game.com + %ROMPATH%/gamecom + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + gamecom + gamecom + + + gamegear + Sega Game Gear + %ROMPATH%/gamegear + .68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_wide_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=gearsystem_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=smsplus_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=picodrive_libretro_android.so %EXTRA_ROM%=%ROM% + gamegear + gamegear + + + gb + Nintendo Game Boy + %ROMPATH%/gb + .bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=gambatte_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=sameboy_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=gearboy_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=tgbdual_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mesen-s_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mgba_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vbam_libretro_android.so %EXTRA_ROM%=%ROM% + gb + gb + + + gba + Nintendo Game Boy Advance + %ROMPATH%/gba + .agb .AGB .bin .BIN .cgb .CGB .dmg .DMG .gb .GB .gba .GBA .gbc .GBC .sgb .SGB .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mgba_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vbam_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vba_next_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=gpsp_libretro_android.so %EXTRA_ROM%=%ROM% + gba + gba + + + gbc + Nintendo Game Boy Color + %ROMPATH%/gbc + .bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=gambatte_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=sameboy_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=gearboy_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=tgbdual_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mesen-s_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mgba_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vbam_libretro_android.so %EXTRA_ROM%=%ROM% + gbc + gbc + + + gc + Nintendo GameCube + %ROMPATH%/gc + .ciso .CISO .dff .DFF .dol .DOL .elf .ELF .gcm .GCM .gcz .GCZ .iso .ISO .json .JSON .m3u .M3U .rvz .RVZ .tgc .TGC .wad .WAD .wbfs .WBFS .wia .WIA .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/dolphin_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_DOLPHIN% %ACTION%=android.intent.action.MAIN %DATA%=%ROMPROVIDER% + gc + gc + + + genesis + Sega Genesis + %ROMPATH%/genesis + .32x .32X .68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_wide_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=picodrive_libretro_android.so %EXTRA_ROM%=%ROM% + genesis + genesis + + + gmaster + Hartung Game Master + %ROMPATH%/gmaster + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + gmaster + gmaster + + + gx4000 + Amstrad GX4000 + %ROMPATH%/gx4000 + .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% + gx4000 + gx4000 + + + intellivision + Mattel Electronics Intellivision + %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% + intellivision + intellivision + + + j2me + Java 2 Micro Edition (J2ME) + %ROMPATH%/j2me + .jar .JAR .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=squirreljme_libretro_android.so %EXTRA_ROM%=%ROM% + android + j2me + + + kodi + Kodi Home Theatre Software + %ROMPATH%/kodi + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + pcwindows + kodi + + + laserdisc + LaserDisc Games + %ROMPATH%/laserdisc + .dirksimple .ogv .OGV + %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 + + + lcdgames + LCD Handheld Games + %ROMPATH%/lcdgames + .mgw .MGW + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=gw_libretro_android.so %EXTRA_ROM%=%ROM% + lcdgames, gameandwatch + lcdgames + + + lowresnx + LowRes NX Fantasy Console + %ROMPATH%/lowresnx + .nx .NX + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=lowresnx_libretro_android.so %EXTRA_ROM%=%ROM% + lowresnx + lowresnx + + + lutris + Lutris Open Gaming Platform + %ROMPATH%/lutris + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + pc, pcwindows + lutris + + + lutro + Lutro Game Engine + %ROMPATH%/lutro + .lua .LUA .lutro .LUTRO .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=lutro_libretro_android.so %EXTRA_ROM%=%ROM% + lutro + lutro + + + macintosh + Apple Macintosh + %ROMPATH%/macintosh + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + macintosh + macintosh + + + mame + Multiple Arcade Machine Emulator + %ROMPATH%/mame + .cmd .CMD .desktop .sh .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_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2010_libretro_android.so %EXTRA_ROM%=%ROM% + %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%=mame2000_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID% %ACTIVITY_CLEAR_TASK% %ACTIVITY_CLEAR_TOP% %ACTION%=android.intent.action.VIEW %DATA%=%ROM% + %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% + %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% + arcade + mame + + + mame-advmame + AdvanceMAME + %ROMPATH%/mame-advmame + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + arcade + mame-advmame + + + mastersystem + Sega Master System + %ROMPATH%/mastersystem + .68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_wide_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=smsplus_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=gearsystem_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=picodrive_libretro_android.so %EXTRA_ROM%=%ROM% + mastersystem + mastersystem + + + megacd + Sega Mega-CD + %ROMPATH%/megacd + .68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_wide_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=picodrive_libretro_android.so %EXTRA_ROM%=%ROM% + segacd + megacd + + + megacdjp + Sega Mega-CD + %ROMPATH%/megacdjp + .68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_wide_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=picodrive_libretro_android.so %EXTRA_ROM%=%ROM% + segacd + megacdjp + + + megadrive + Sega Mega Drive + %ROMPATH%/megadrive + .32x .32X .68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_wide_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=picodrive_libretro_android.so %EXTRA_ROM%=%ROM% + megadrive + megadrive + + + megadrivejp + Sega Mega Drive + %ROMPATH%/megadrivejp + .32x .32X .68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_wide_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=picodrive_libretro_android.so %EXTRA_ROM%=%ROM% + megadrive + megadrivejp + + + megaduck + Creatronic Mega Duck + %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% + megaduck + megaduck + + + mess + Multi Emulator Super System + %ROMPATH%/mess + .chd .CHD .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% + mess + mess + + + model2 + Sega Model 2 + %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% + arcade + model2 + + + model3 + Sega Model 3 + %ROMPATH%/model3 + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + arcade + model3 + + + moto + Thomson MO/TO Series + %ROMPATH%/moto + .fd .FD .k7 .K7 .m5 .M5 .m7 .M7 .rom .ROM .sap .SAP .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=theodore_libretro_android.so %EXTRA_ROM%=%ROM% + moto + moto + + + msx + MSX + %ROMPATH%/msx + .cas .CAS .col .COL .di1 .DI1 .di2 .DI2 .dmk .DMK .dsk .DSK .fd1 .FD1 .fd2 .FD2 .m3u .M3U .mx1 .MX1 .mx2 .MX2 .ogv .OGV .ri .RI .rom .ROM .sc .SC .sg .SG .wav .WAV .xsa .XSA .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bluemsx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fmsx_libretro_android.so %EXTRA_ROM%=%ROM% + msx + msx + + + msx1 + MSX1 + %ROMPATH%/msx1 + .cas .CAS .col .COL .di1 .DI1 .di2 .DI2 .dmk .DMK .dsk .DSK .fd1 .FD1 .fd2 .FD2 .m3u .M3U .mx1 .MX1 .mx2 .MX2 .ogv .OGV .ri .RI .rom .ROM .sc .SC .sg .SG .wav .WAV .xsa .XSA .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bluemsx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fmsx_libretro_android.so %EXTRA_ROM%=%ROM% + msx + msx1 + + + msx2 + MSX2 + %ROMPATH%/msx2 + .cas .CAS .col .COL .di1 .DI1 .di2 .DI2 .dmk .DMK .dsk .DSK .fd1 .FD1 .fd2 .FD2 .m3u .M3U .mx1 .MX1 .mx2 .MX2 .ogv .OGV .ri .RI .rom .ROM .sc .SC .sg .SG .wav .WAV .xsa .XSA .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bluemsx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fmsx_libretro_android.so %EXTRA_ROM%=%ROM% + msx2 + msx2 + + + msxturbor + MSX Turbo R + %ROMPATH%/msxturbor + .cas .CAS .col .COL .di1 .DI1 .di2 .DI2 .dmk .DMK .dsk .DSK .fd1 .FD1 .fd2 .FD2 .m3u .M3U .mx1 .MX1 .mx2 .MX2 .ogv .OGV .ri .RI .rom .ROM .sc .SC .sg .SG .wav .WAV .xsa .XSA .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bluemsx_libretro_android.so %EXTRA_ROM%=%ROM% + msxturbor + msxturbor + + + mugen + M.U.G.E.N Game Engine + %ROMPATH%/mugen + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + mugen + mugen + + + multivision + Othello Multivision + %ROMPATH%/multivision + .bin .BIN .gg .GG .rom .ROM .sg .SG .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=gearsystem_libretro_android.so %EXTRA_ROM%=%ROM% + sg-1000 + multivision + + + n3ds + Nintendo 3DS + %ROMPATH%/n3ds + .3ds .3DS .3dsx .3DSX .app .APP .axf .AXF .cci .CCI .cxi .CXI .elf .ELF .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/citra_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_CITRA% %EXTRA_SelectedGame%=%ROMSAF% + %EMULATOR_CITRA-MMJ% %EXTRA_GamePath%=%ROM% + n3ds + n3ds + + + n64 + Nintendo 64 + %ROMPATH%/n64 + .bin .BIN .d64 .D64 .n64 .N64 .ndd .NDD .u1 .U1 .v64 .V64 .z64 .Z64 .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mupen64plus_next_gles3_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_M64PLUS-FZ% %ACTION%=android.intent.action.VIEW %DATA%=%ROMSAF% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=parallel_n64_libretro_android.so %EXTRA_ROM%=%ROM% + n64 + n64 + + + n64dd + Nintendo 64DD + %ROMPATH%/n64dd + .bin .BIN .d64 .D64 .n64 .N64 .ndd .NDD .u1 .U1 .v64 .V64 .z64 .Z64 .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mupen64plus_next_gles3_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=parallel_n64_libretro_android.so %EXTRA_ROM%=%ROM% + n64 + n64dd + + + naomi + Sega NAOMI + %ROMPATH%/naomi + .bin .BIN .dat .DAT .elf .ELF .lst .LST .7z .7Z .zip .ZIP + %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% + arcade + naomi + + + naomi2 + Sega NAOMI 2 + %ROMPATH%/naomi2 + .bin .BIN .dat .DAT .elf .ELF .lst .LST .7z .7Z .zip .ZIP + %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% + arcade + naomi2 + + + naomigd + Sega NAOMI GD-ROM + %ROMPATH%/naomigd + .bin .BIN .dat .DAT .elf .ELF .lst .LST .7z .7Z .zip .ZIP + %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% + arcade + naomigd + + + nds + Nintendo DS + %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%=desmume_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=desmume2015_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_DRASTIC% %DATA%=%ROMSAF% + nds + nds + + + neogeo + SNK Neo Geo + %ROMPATH%/neogeo + .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fbneo_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_MAME4DROID% %ACTIVITY_CLEAR_TASK% %ACTIVITY_CLEAR_TOP% %ACTION%=android.intent.action.VIEW %DATA%=%ROM% + neogeo + neogeo + + + neogeocd + SNK Neo Geo CD + %ROMPATH%/neogeocd + .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% + neogeocd + neogeocd + + + neogeocdjp + SNK Neo Geo CD + %ROMPATH%/neogeocdjp + .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% + neogeocd + neogeocdjp + + + nes + Nintendo Entertainment System + %ROMPATH%/nes + .3dsen .3DSEN .fds .FDS .nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/mesen_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/nestopia_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/fceumm_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/quicknes_libretro_android.so %EXTRA_ROM%=%ROM% + nes + nes + + + ngage + Nokia N-Gage + %ROMPATH%/ngage + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + ngage + ngage + + + ngp + SNK Neo Geo Pocket + %ROMPATH%/ngp + .ngc .NGC .ngp .NGP .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_ngp_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=race_libretro_android.so %EXTRA_ROM%=%ROM% + ngp + ngp + + + ngpc + SNK Neo Geo Pocket Color + %ROMPATH%/ngpc + .ngc .NGC .ngp .NGP .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_ngp_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=race_libretro_android.so %EXTRA_ROM%=%ROM% + ngpc + ngpc + + + odyssey2 + Magnavox Odyssey 2 + %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% + odyssey2 + odyssey2 + + + openbor + OpenBOR Game Engine + %ROMPATH%/openbor + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + openbor + openbor + + + oric + Tangerine Computer Systems Oric + %ROMPATH%/oric + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + oric + oric + + + palm + Palm OS + %ROMPATH%/palm + .img .IMG .pqa .PQA .prc .PRC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mu_libretro_android.so %EXTRA_ROM%=%ROM% + palm + palm + + + pc + IBM PC + %ROMPATH%/pc + .bat .BAT .com .COM .conf .CONF .cue .CUE .dosz .DOSZ .exe .EXE .iso .ISO .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=dosbox_pure_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=dosbox_core_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=dosbox_svn_libretro_android.so %EXTRA_ROM%=%ROM% + pc + pc + + + pc88 + NEC PC-8800 Series + %ROMPATH%/pc88 + .88d .88D .cmt .CMT .d88 .D88 .m3u .M3U .t88 .T88 .u88 .U88 + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=quasi88_libretro_android.so %EXTRA_ROM%=%ROM% + pc88 + pc88 + + + pc98 + NEC PC-9800 Series + %ROMPATH%/pc98 + .2hd .2HD .88d .88D .98d .98D .d88 .D88 .d98 .D98 .cmd .CMD .dup .DUP .fdd .FDD .fdi .FDI .hdd .HDD .hdi .HDI .hdm .HDM .hdn .HDN .m3u .M3U .nhd .NHD .tfd .TFD .thd .THD .xdf .XDF .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=np2kai_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=nekop2_libretro_android.so %EXTRA_ROM%=%ROM% + pc98 + pc98 + + + pcarcade + PC Arcade Systems + %ROMPATH%/pcarcade + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + arcade + pcarcade + + + pcengine + NEC PC Engine + %ROMPATH%/pcengine + .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_pce_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_pce_fast_libretro_android.so %EXTRA_ROM%=%ROM% + pcengine + pcengine + + + pcenginecd + NEC PC Engine CD + %ROMPATH%/pcenginecd + .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_pce_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_pce_fast_libretro_android.so %EXTRA_ROM%=%ROM% + pcenginecd + pcenginecd + + + pcfx + NEC PC-FX + %ROMPATH%/pcfx + .ccd .CCD .chd .CHD .cue CUE .m3u .M3U .toc .TOC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_pcfx_libretro_android.so %EXTRA_ROM%=%ROM% + pcfx + pcfx + + + pico8 + PICO-8 Fantasy Console + %ROMPATH%/pico8 + .p8 .P8 .png .PNG + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=retro8_libretro_android.so %EXTRA_ROM%=%ROM% + pico8 + pico8 + + + plus4 + Commodore Plus/4 + %ROMPATH%/plus4 + .bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vice_xplus4_libretro_android.so %EXTRA_ROM%=%ROM% + plus4 + plus4 + + + pokemini + Nintendo Pokémon Mini + %ROMPATH%/pokemini + .min .MIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=pokemini_libretro_android.so %EXTRA_ROM%=%ROM% + pokemini + pokemini + + + ports + Ports + %ROMPATH%/ports + .exe .EXE .game .GAME .phd .PHD .psx .PSX + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=ecwolf_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=nxengine_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=openlara_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=superbroswar_libretro_android.so %EXTRA_ROM%=%ROM% + pc, pcwindows + ports + + + ps2 + Sony PlayStation 2 + %ROMPATH%/ps2 + .bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG + %EMULATOR_AETHERSX2% %ACTION%=android.intent.action.MAIN %EXTRA_bootPath%=%ROMSAF% + ps2 + ps2 + + + ps3 + Sony PlayStation 3 + %ROMPATH%/ps3 + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + ps3 + ps3 + + + ps4 + Sony PlayStation 4 + %ROMPATH%/ps4 + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + ps4 + ps4 + + + psp + Sony PlayStation Portable + %ROMPATH%/psp + .chd .CHD .cso .CSO .elf .ELF .iso .ISO .pbp .PBP .prx .PRX .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=ppsspp_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_PPSSPP% %CATEGORY%=android.intent.category.DEFAULT %MIMETYPE%=application/octet-stream %DATA%=%ROMPROVIDER% + psp + psp + + + psvita + Sony PlayStation Vita + %ROMPATH%/psvita + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + psvita + psvita + + + psx + Sony PlayStation + %ROMPATH%/psx + .bin .BIN .cbn .CBN .ccd .CCD .chd .CHD .cue .CUE .ecm .ECM .exe .EXE .img .IMG .iso .ISO .m3u .M3U .mdf .MDF .mds .MDS .minipsf .MINIPSF .pbp .PBP .psexe .PSEXE .psf .PSF .toc .TOC .z .Z .znx .ZNX .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_psx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_psx_hw_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=pcsx_rearmed_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=swanstation_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_DUCKSTATION% %EXTRABOOL_resumeState%=false %EXTRA_bootPath%=%ROMSAF% + psx + psx + + + pv1000 + Casio PV-1000 + %ROMPATH%/pv1000 + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + pv1000 + pv1000 + + + quake + Quake + %ROMPATH%/quake + .pak .PAK .pk3 .PK3 + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=tyrquake_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vitaquake2_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vitaquake2-rogue_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vitaquake2-xatrix_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vitaquake2-zaero_libretro_android.so %EXTRA_ROM%=%ROM% + pc, pcwindows + quake + + + samcoupe + MGT SAM Coupé + %ROMPATH%/samcoupe + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + samcoupe + samcoupe + + + satellaview + Nintendo Satellaview + %ROMPATH%/satellaview + .bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .swc .SWC .st .ST .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=snes9x_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=snes9x2010_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_hd_beta_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_mercury_accuracy_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mesen-s_libretro_android.so %EXTRA_ROM%=%ROM% + satellaview + satellaview + + + saturn + Sega Saturn + %ROMPATH%/saturn + .bin .BIN .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .m3u .M3U .mds .MDS .toc .TOC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_saturn_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=yabasanshiro_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=yabause_libretro_android.so %EXTRA_ROM%=%ROM% + saturn + saturn + + + saturnjp + Sega Saturn + %ROMPATH%/saturnjp + .bin .BIN .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .m3u .M3U .mds .MDS .toc .TOC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_saturn_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=yabasanshiro_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=yabause_libretro_android.so %EXTRA_ROM%=%ROM% + saturn + saturnjp + + + scummvm + ScummVM Game Engine + %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% + scummvm + scummvm + + + scv + Epoch Super Cassette Vision + %ROMPATH%/scv + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + scv + scv + + + sega32x + Sega Mega Drive 32X + %ROMPATH%/sega32x + .32x .32X .68k .68K .bin .BIN .cue .CUE .gen .GEN .iso .ISO .md .MD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=picodrive_libretro_android.so %EXTRA_ROM%=%ROM% + sega32x + sega32x + + + sega32xjp + Sega Super 32X + %ROMPATH%/sega32xjp + .32x .32X .68k .68K .bin .BIN .cue .CUE .gen .GEN .iso .ISO .md .MD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=picodrive_libretro_android.so %EXTRA_ROM%=%ROM% + sega32x + sega32xjp + + + sega32xna + Sega Genesis 32X + %ROMPATH%/sega32xna + .32x .32X .68k .68K .bin .BIN .cue .CUE .gen .GEN .iso .ISO .md .MD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=picodrive_libretro_android.so %EXTRA_ROM%=%ROM% + sega32x + sega32xna + + + segacd + Sega CD + %ROMPATH%/segacd + .68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_wide_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=picodrive_libretro_android.so %EXTRA_ROM%=%ROM% + segacd + segacd + + + sfc + Nintendo SFC (Super Famicom) + %ROMPATH%/sfc + .bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=snes9x_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=snes9x2010_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_hd_beta_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_mercury_accuracy_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_supafaust_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mesen-s_libretro_android.so %EXTRA_ROM%=%ROM% + snes + sfc + + + sg-1000 + Sega SG-1000 + %ROMPATH%/sg-1000 + .68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .ri .RI .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=genesis_plus_gx_wide_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=gearsystem_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bluemsx_libretro_android.so %EXTRA_ROM%=%ROM% + sg-1000 + sg-1000 + + + sgb + Nintendo Super Game Boy + %ROMPATH%/sgb + .gb .GB .gbc .GBC .sgb .SGB .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mesen-s_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=sameboy_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mgba_libretro_android.so %EXTRA_ROM%=%ROM% + sgb + sgb + + + snes + Nintendo SNES (Super Nintendo) + %ROMPATH%/snes + .bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=snes9x_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=snes9x2010_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_hd_beta_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_mercury_accuracy_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_supafaust_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mesen-s_libretro_android.so %EXTRA_ROM%=%ROM% + snes + snes + + + snesna + Nintendo SNES (Super Nintendo) + %ROMPATH%/snesna + .bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=snes9x_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=snes9x2010_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_hd_beta_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_mercury_accuracy_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_supafaust_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mesen-s_libretro_android.so %EXTRA_ROM%=%ROM% + snes + snesna + + + solarus + Solarus Game Engine + %ROMPATH%/solarus + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + solarus + solarus + + + spectravideo + Spectravideo + %ROMPATH%/spectravideo + .cas .CAS .col .COL .dsk .DSK .m3u .M3U .mx1 .MX1 .mx2 .MX2 .ri .RI .rom .ROM .sc .SC .sg .SG .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bluemsx_libretro_android.so %EXTRA_ROM%=%ROM% + spectravideo + spectravideo + + + steam + Valve Steam + %ROMPATH%/steam + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + steam + steam + + + stv + Sega Titan Video Game System + %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% %ACTIVITY_CLEAR_TASK% %ACTIVITY_CLEAR_TOP% %ACTION%=android.intent.action.VIEW %DATA%=%ROM% + arcade + stv + + + sufami + Bandai SuFami Turbo + %ROMPATH%/sufami + .bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .st .ST .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=snes9x_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=snes9x2010_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_hd_beta_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=bsnes_mercury_accuracy_libretro_android.so %EXTRA_ROM%=%ROM% + sufami + sufami + + + supergrafx + NEC SuperGrafx + %ROMPATH%/supergrafx + .ccd .CCD .chd .CHD .cue .CUE .pce .PCE .sgx .SGX .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_pce_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_supergrafx_libretro_android.so %EXTRA_ROM%=%ROM% + supergrafx + supergrafx + + + supervision + Watara Supervision + %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% + supervision + supervision + + + supracan + Funtech Super A'Can + %ROMPATH%/supracan + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + supracan + supracan + + + switch + Nintendo Switch + %ROMPATH%/switch + .nca .NCA .nro .NRO .nso .NSO .nsp .NSP .xci .XCI + %EMULATOR_YUZU% %ACTION%=android.nfc.action.TECH_DISCOVERED %DATA%=%ROMPROVIDER% + switch + switch + + + symbian + Symbian + %ROMPATH%/symbian + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + ngage + symbian + + + tanodragon + Tano Dragon + %ROMPATH%/tanodragon + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + dragon32 + tanodragon + + + tg16 + NEC TurboGrafx-16 + %ROMPATH%/tg16 + .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_pce_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_pce_fast_libretro_android.so %EXTRA_ROM%=%ROM% + pcengine + tg16 + + + tg-cd + NEC TurboGrafx-CD + %ROMPATH%/tg-cd + .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_pce_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_pce_fast_libretro_android.so %EXTRA_ROM%=%ROM% + pcenginecd + tg-cd + + + ti99 + Texas Instruments TI-99 + %ROMPATH%/ti99 + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + ti99 + ti99 + + + tic80 + TIC-80 Fantasy Computer + %ROMPATH%/tic80 + .tic .TIC + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=tic80_libretro_android.so %EXTRA_ROM%=%ROM% + tic80 + tic80 + + + to8 + Thomson TO8 + %ROMPATH%/to8 + .fd .FD .k7 .K7 .m5 .M5 .m7 .M7 .rom .ROM .sap .SAP .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=theodore_libretro_android.so %EXTRA_ROM%=%ROM% + moto + to8 + + + triforce + Namco-Sega-Nintendo Triforce + %ROMPATH%/triforce + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + arcade + triforce + + + trs-80 + Tandy TRS-80 + %ROMPATH%/trs-80 + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + trs-80 + trs-80 + + + type-x + Taito Type X + %ROMPATH%/type-x + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + arcade + type-x + + + uzebox + Uzebox Open Source Console + %ROMPATH%/uzebox + .uze .UZE .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=uzem_libretro_android.so %EXTRA_ROM%=%ROM% + uzebox + uzebox + + + vectrex + GCE Vectrex + %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% + vectrex + vectrex + + + vic20 + Commodore VIC-20 + %ROMPATH%/vic20 + .bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=vice_xvic_libretro_android.so %EXTRA_ROM%=%ROM% + vic20 + vic20 + + + videopac + Philips Videopac G7000 + %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% + odyssey2 + videopac + + + virtualboy + Nintendo Virtual Boy + %ROMPATH%/virtualboy + .bin .BIN .vb .VB .vboy .VBOY .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_vb_libretro_android.so %EXTRA_ROM%=%ROM% + virtualboy + virtualboy + + + vpinball + Visual Pinball + %ROMPATH%/vpinball + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + vpinball + vpinball + + + vsmile + VTech V.Smile + %ROMPATH%/vsmile + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + vsmile + vsmile + + + wasm4 + WASM-4 Fantasy Console + %ROMPATH%/wasm4 + .wasm .WASM + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=wasm4_libretro_android.so %EXTRA_ROM%=%ROM% + wasm4 + wasm4 + + + wii + Nintendo Wii + %ROMPATH%/wii + .ciso .CISO .dff .DFF .dol .DOL .elf .ELF .gcm .GCM .gcz .GCZ .iso .ISO .json .JSON .m3u .M3U .rvz .RVZ .tgc .TGC .wad .WAD .wbfs .WBFS .wia .WIA .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/dolphin_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_DOLPHIN% %ACTION%=android.intent.action.MAIN %DATA%=%ROMPROVIDER% + wii + wii + + + wiiu + Nintendo Wii U + %ROMPATH%/wiiu + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + wiiu + wiiu + + + windows + Microsoft Windows + %ROMPATH%/windows + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + pcwindows + windows + + + windows3x + Microsoft Windows 3.x + %ROMPATH%/windows3x + .bat .BAT .desktop .dosz .DOSZ .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=dosbox_pure_libretro_android.so %EXTRA_ROM%=%ROM% + windows3x + windows3x + + + windows9x + Microsoft Windows 9x + %ROMPATH%/windows9x + .bat .BAT .desktop .dosz .DOSZ .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=dosbox_pure_libretro_android.so %EXTRA_ROM%=%ROM% + pcwindows + windows9x + + + wonderswan + Bandai WonderSwan + %ROMPATH%/wonderswan + .pc2 .PC2 .ws .WS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_wswan_libretro_android.so %EXTRA_ROM%=%ROM% + wonderswan + wonderswan + + + wonderswancolor + Bandai WonderSwan Color + %ROMPATH%/wonderswancolor + .pc2 .PC2 .ws .WS .wsc .WSC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_wswan_libretro_android.so %EXTRA_ROM%=%ROM% + wonderswancolor + wonderswancolor + + + x1 + Sharp X1 + %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% + x1 + x1 + + + x68000 + Sharp X68000 + %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% + x68000 + x68000 + + + xbox + Microsoft Xbox + %ROMPATH%/xbox + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + xbox + xbox + + + xbox360 + Microsoft Xbox 360 + %ROMPATH%/xbox360 + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + xbox360 + xbox360 + + + zmachine + Infocom Z-machine + %ROMPATH%/zmachine + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + zmachine + zmachine + + + zx81 + Sinclair ZX81 + %ROMPATH%/zx81 + .p .P .tzx .TZX .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=81_libretro_android.so %EXTRA_ROM%=%ROM% + zx81 + zx81 + + + zxnext + Sinclair ZX Spectrum Next + %ROMPATH%/zxnext + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + zxnext + zxnext + + + zxspectrum + Sinclair ZX Spectrum + %ROMPATH%/zxspectrum + .dsk .DSK .gz .GZ .img .IMG .mgt .MGT .rzx .RZX .scl .SCL .sh .SH .sna .SNA .szx .SZX .tap .TAP .trd .TRD .tzx .TZX .udi .UDI .z80 .Z80 .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=fuse_libretro_android.so %EXTRA_ROM%=%ROM% + zxspectrum + zxspectrum + + \ No newline at end of file From a3979c19a25b9aa7eb78085082f098e455e4d851 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 8 Dec 2023 17:08:04 +0100 Subject: [PATCH 037/320] Documentation update --- ANDROID.md | 198 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 ANDROID.md diff --git a/ANDROID.md b/ANDROID.md new file mode 100644 index 000000000..812aba6f9 --- /dev/null +++ b/ANDROID.md @@ -0,0 +1,198 @@ +# ES-DE (EmulationStation Desktop Edition) v3.0 (development version) - Android documentation + +All emulators are RetroArch cores unless marked as **(Standalone)** + +The **@** symbol indicates that the emulator is _deprecated_ and will be removed in a future ES-DE release. + +| System name | Full name | Default emulator | Alternative emulators | Needs BIOS | Recommended game setup | +| :-------------------- | :--------------------------------------------- | :-------------------------------- | :-------------------------------- | :----------- | :----------------------------------- | +| 3do | 3DO Interactive Multiplayer | Opera | | | | +| adam | Coleco Adam | _Placeholder_ | | | | +| 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 | +| android | Google Android | _Placeholder_ | | | | +| apple2 | Apple II | _Placeholder_ | | | | +| apple2gs | Apple IIGS | _Placeholder_ | | | | +| arcade | Arcade | MAME - Current | MAME 2010,
MAME 2003-Plus,
MAME 2000,
MAME4droid **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
Flycast,
Flycast **(Standalone)** | Depends | | +| arcadia | Emerson Arcadia 2001 | _Placeholder_ | | | | +| archimedes | Acorn Archimedes | _Placeholder_ | | | | +| arduboy | Arduboy Miniature Game System | Arduous | | No | Single archive or .hex file | +| astrocde | Bally Astrocade | _Placeholder_ | | | | +| atari2600 | Atari 2600 | Stella | Stella 2014 | 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 | +| atari800 | Atari 800 | Atari800 | | Yes | | +| atarijaguar | Atari Jaguar | Virtual Jaguar | | No | | +| atarijaguarcd | Atari Jaguar CD | _Placeholder_ | | | | +| atarilynx | Atari Lynx | Handy | Beetle Lynx | | | +| 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_ | | | | +| c64 | Commodore 64 | VICE x64sc Accurate | VICE x64 Fast,
VICE x64 SuperCPU,
VICE x128 | 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 | +| 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_ | | | | +| colecovision | Coleco ColecoVision | blueMSX | Gearcoleco | 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 **(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 **(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 **(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 **(Standalone)**,
FB Alpha 2012,
FB Alpha 2012 CPS-3 | Depends | | +| crvision | VTech CreatiVision | _Placeholder_ | | | | +| daphne | Daphne Arcade LaserDisc Emulator | DirkSimple | | No | | +| 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_ | | | | +| epic | Epic Games Store | _Placeholder_ | | | | +| famicom | Nintendo Family Computer | Mesen | Nestopia UE,
FCEUmm,
QuickNES | 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 | Yes | Single archive or ROM file | +| flash | Adobe Flash | _Placeholder_ | | | | +| fm7 | Fujitsu FM-7 | _Placeholder_ | | | | +| fmtowns | Fujitsu FM Towns | _Placeholder_ | | | | +| fpinball | Future Pinball | _Placeholder_ | | | | +| gamate | Bit Corporation Gamate | _Placeholder_ | | | | +| gameandwatch | Nintendo Game and Watch | Handheld Electronic (GW) | | No | | +| gamecom | Tiger Electronics Game.com | _Placeholder_ | | | | +| gamegear | Sega Game Gear | Genesis Plus GX | Genesis Plus GX Wide,
Gearsystem,
SMS Plus GX,
PicoDrive | No | Single archive or ROM file | +| gb | Nintendo Game Boy | Gambatte | SameBoy,
Gearboy,
TGB Dual,
Mesen-S,
bsnes,
mGBA,
VBA-M | No | Single archive or ROM file | +| gba | Nintendo Game Boy Advance | mGBA | VBA-M,
VBA Next,
gpSP | No | Single archive or ROM file | +| gbc | Nintendo Game Boy Color | Gambatte | SameBoy,
Gearboy,
TGB Dual,
Mesen-S,
bsnes,
mGBA,
VBA-M | No | Single archive or ROM file | +| gc | Nintendo GameCube | Dolphin | Dolphin **(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 | 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 | +| 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 | Handheld Electronic (GW) | | No | | +| 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 **(Standalone)**,
FinalBurn Neo,
FB Alpha 2012,
Flycast,
Flycast **(Standalone)** | Depends | | +| mame-advmame | AdvanceMAME | _Placeholder_ | | | | +| mastersystem | Sega Master System | Genesis Plus GX | Genesis Plus GX Wide,
SMS Plus GX,
Gearsystem,
PicoDrive | No | Single archive or ROM file | +| megacd | Sega Mega-CD | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive | Yes | | +| megacdjp | Sega Mega-CD [Japan] | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive | Yes | | +| megadrive | Sega Mega Drive | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive | No | Single archive or ROM file | +| megadrivejp | Sega Mega Drive [Japan] | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive | No | Single archive or ROM file | +| megaduck | Creatronic Mega Duck | SameDuck | | No | Single archive or ROM file | +| mess | Multi Emulator Super System | MESS 2015 | | | | +| model2 | Sega Model 2 | MAME - Current | | Yes | | +| model3 | Sega Model 3 | _Placeholder_ | | | | +| moto | Thomson MO/TO Series | Theodore | | | | +| msx | MSX | blueMSX | fMSX | Yes | | +| msx1 | MSX1 | blueMSX | fMSX | Yes | | +| msx2 | MSX2 | blueMSX | fMSX | Yes | | +| msxturbor | MSX Turbo R | blueMSX | | | | +| mugen | M.U.G.E.N Game Engine | _Placeholder_ | | | | +| multivision | Othello Multivision | Gearsystem | | | | +| 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 MMJ **(Standalone)** | No | Single ROM file | +| n64 | Nintendo 64 | Mupen64Plus-Next | M64Plus FZ **(Standalone)**,
ParaLLEl N64 | No | Single archive or ROM file | +| n64dd | Nintendo 64DD | Mupen64Plus-Next | ParaLLEl N64 | Yes | | +| nds | Nintendo DS | DeSmuME | DeSmuME 2015,
melonDS,
DraStic **(Standalone)** | No | Single archive or ROM file | +| neogeo | SNK Neo Geo | FinalBurn Neo | 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 | | +| nes | Nintendo Entertainment System | Mesen | Nestopia UE,
FCEUmm,
QuickNES | No | Single archive or ROM file | +| ngage | Nokia N-Gage | _Placeholder_ | | | | +| ngp | SNK Neo Geo Pocket | Beetle NeoPop | RACE | | | +| ngpc | SNK Neo Geo Pocket Color | Beetle NeoPop | RACE | | | +| odyssey2 | Magnavox Odyssey 2 | O2EM | | Yes | Single archive or ROM file | +| openbor | OpenBOR Game Engine | _Placeholder_ | | | | +| oric | Tangerine Computer Systems Oric | _Placeholder_ | | | | +| palm | Palm OS | Mu | | | | +| pc | IBM PC | DOSBox-Pure | DOSBox-Core,
DOSBox-SVN | No | | +| pc88 | NEC PC-8800 Series | QUASI88 | | Yes | | +| pc98 | NEC PC-9800 Series | Neko Project II Kai | Neko Project II | | | +| pcarcade | PC Arcade Systems | _Placeholder_ | | | | | +| pcengine | NEC PC Engine | Beetle PCE | Beetle PCE FAST | No | Single archive or ROM file | +| pcenginecd | NEC PC Engine CD | Beetle PCE | Beetle PCE FAST | Yes | | +| pcfx | NEC PC-FX | Beetle PC-FX | | Yes | | +| pico8 | PICO-8 Fantasy Console | Retro8 | | No | | +| plus4 | Commodore Plus/4 | VICE xplus4 | | No | Single archive or image file for tape, cartridge or single-diskette games, .m3u playlist for multi-diskette games | +| pokemini | Nintendo Pokémon Mini | PokeMini | | No | | +| ports | Ports | ECWolf (Wolfenstein 3D) | NXEngine (Cave Story),
OpenLara (Tomb Raider),
Super Bros War | Yes for ECWolf | | +| ps2 | Sony PlayStation 2 | AetherSX2 **(Standalone)** | | Yes | | +| ps3 | Sony PlayStation 3 | _Placeholder_ | | | | +| ps4 | Sony PlayStation 4 | _Placeholder_ | | | | +| psp | Sony PlayStation Portable | PPSSPP | PPSSPP **(Standalone)** | No | Single disc image file | +| psvita | Sony PlayStation Vita | _Placeholder_ | | | | +| psx | Sony PlayStation | Beetle PSX | Beetle PSX HW,
PCSX ReARMed,
SwanStation,
DuckStation **(Standalone)** | Yes | .chd file for single-disc games, .m3u playlist for multi-disc games | +| pv1000 | Casio PV-1000 | _Placeholder_ | | | | +| quake | Quake | TyrQuake | vitaQuake 2,
vitaQuake 2 [Rogue],
vitaQuake 2 [Xatrix],
vitaQuake 2 [Zaero] | No | | +| samcoupe | MGT SAM Coupé | _Placeholder_ | | | | +| satellaview | Nintendo Satellaview | Snes9x - Current | Snes9x 2010,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
Mesen-S | | | +| saturn | Sega Saturn | Beetle Saturn | YabaSanshiro,
Yabause | Yes | In separate folder interpreted as a file, with .m3u playlist if multi-disc game | +| saturnjp | Sega Saturn [Japan] | Beetle Saturn | YabaSanshiro,
Yabause | Yes | In separate folder interpreted as a file, with .m3u playlist if multi-disc game | +| scummvm | ScummVM Game Engine | ScummVM | | No | | +| scv | Epoch Super Cassette Vision | _Placeholder_ | | | | +| 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 | +| segacd | Sega CD | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive | Yes | | +| sfc | Nintendo SFC (Super Famicom) | Snes9x - Current | Snes9x 2010,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
Beetle Supafaust,
Mesen-S | No | Single archive or ROM file | +| sg-1000 | Sega SG-1000 | Genesis Plus GX | Genesis Plus GX Wide,
Gearsystem,
blueMSX | No | | +| sgb | Nintendo Super Game Boy | Mesen-S | SameBoy,
mGBA | | Single archive or ROM file | +| snes | Nintendo SNES (Super Nintendo) | Snes9x - Current | Snes9x 2010,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
Beetle Supafaust,
Mesen-S | No | Single archive or ROM file | +| snesna | Nintendo SNES (Super Nintendo) [North America] | Snes9x - Current | Snes9x 2010,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
Beetle Supafaust,
Mesen-S | No | Single archive or ROM file | +| solarus | Solarus Game Engine | _Placeholder_ | | | | +| spectravideo | Spectravideo | blueMSX | | | | +| steam | Valve Steam | _Placeholder_ | | | | +| stv | Sega Titan Video Game System | MAME - Current | MAME4droid **(Standalone)** | Yes | Single archive file | +| sufami | Bandai SuFami Turbo | Snes9x - Current | Snes9x 2010,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy | | | +| supergrafx | NEC SuperGrafx | Beetle SuperGrafx | Beetle PCE | | | +| supervision | Watara Supervision | Potator | | No | Single archive or ROM file | +| supracan | Funtech Super A'Can | _Placeholder_ | | | | +| switch | Nintendo Switch | Yuzu **(Standalone)** | | Yes | | +| symbian | Symbian | _Placeholder_ | | | | +| tanodragon | Tano Dragon | _Placeholder_ | | | | +| tg16 | NEC TurboGrafx-16 | Beetle PCE | Beetle PCE FAST | No | Single archive or ROM file | +| tg-cd | NEC TurboGrafx-CD | Beetle PCE | Beetle PCE FAST | Yes | | +| ti99 | Texas Instruments TI-99 | _Placeholder_ | | | | +| 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 | +| 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 | +| virtualboy | Nintendo Virtual Boy | Beetle VB | | No | | +| vpinball | Visual Pinball | _Placeholder_ | | | | +| vsmile | VTech V.Smile | _Placeholder_ | | | | +| wasm4 | WASM-4 Fantasy Console | WASM-4 | | No | Single .wasm file | +| wii | Nintendo Wii | Dolphin | Dolphin **(Standalone)** | No | | +| wiiu | Nintendo Wii U | _Placeholder_ | | | | +| windows | Microsoft Windows | _Placeholder_ | | | | +| windows3x | Microsoft Windows 3.x | DOSBox-Pure | | No | | +| windows9x | Microsoft Windows 9x | DOSBox-Pure | | No | | +| wonderswan | Bandai WonderSwan | Beetle Cygne | | No | Single archive or ROM file | +| wonderswancolor | Bandai WonderSwan Color | Beetle Cygne | | No | Single archive or ROM file | +| x1 | Sharp X1 | X Millennium | | No | Single archive or diskette/tape file | +| x68000 | Sharp X68000 | PX68k | | Yes | | +| xbox | Microsoft Xbox | _Placeholder_ | | | | +| xbox360 | Microsoft Xbox 360 | _Placeholder_ | | | | +| zmachine | Infocom Z-machine | _Placeholder_ | | | | +| zx81 | Sinclair ZX81 | EightyOne | | | | +| zxnext | Sinclair ZX Spectrum Next | _Placeholder_ | | | | +| zxspectrum | Sinclair ZX Spectrum | Fuse | | No | | From 7d1e7d95e92d1fbbfffd0e4880ed5705e0600da3 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 8 Dec 2023 17:25:38 +0100 Subject: [PATCH 038/320] Disabled the application updater when building for Android --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6552d1eb0..27477c0b6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # CMakeLists.txt # # Main CMake configuration file. @@ -359,7 +359,7 @@ if(VIDEO_HW_DECODING) message("-- Building with FFmpeg HW decoding") endif() -if(AUR_BUILD OR FLATPAK_BUILD OR RETRODECK OR RPI) +if(AUR_BUILD OR FLATPAK_BUILD OR RETRODECK OR RPI OR ANDROID) set(APPLICATION_UPDATER OFF) endif() From 8403b40d4c8dd56507e4eb92095a394558064dab Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 11 Dec 2023 18:23:20 +0100 Subject: [PATCH 039/320] Moved some code --- es-core/src/utils/PlatformUtil.cpp | 168 +---------------------------- es-core/src/utils/PlatformUtil.h | 36 +------ 2 files changed, 6 insertions(+), 198 deletions(-) diff --git a/es-core/src/utils/PlatformUtil.cpp b/es-core/src/utils/PlatformUtil.cpp index 67f91f87b..255926072 100644 --- a/es-core/src/utils/PlatformUtil.cpp +++ b/es-core/src/utils/PlatformUtil.cpp @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // -// ES-DE Frontend -// Platform.cpp +// ES-DE +// PlatformUtil.cpp // // Platform utility functions. // @@ -31,18 +31,6 @@ #include #include -#if defined(__ANDROID__) -JNIEXPORT void JNICALL Java_org_es_1de_frontend_MainActivity_nativeLogOutput(JNIEnv* jniEnv, - jclass jniClass, - jstring output, - jint logLevel) -{ - const char* outputUtf {jniEnv->GetStringUTFChars(output, nullptr)}; - LOG(static_cast(logLevel)) << outputUtf; - jniEnv->ReleaseStringUTFChars(output, outputUtf); -} -#endif - namespace Utils { namespace Platform @@ -383,158 +371,6 @@ namespace Utils exit(EXIT_FAILURE); } -#if defined(__ANDROID__) - namespace Android - { - bool requestStoragePermission() - { - // TODO: Wait for interface to close and check actual outcome. - JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; - jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; - jmethodID methodID { - jniEnv->GetStaticMethodID(jniClass, "requestStoragePermissions", "()V")}; - jniEnv->CallStaticVoidMethod(jniClass, methodID); - bool result {false}; - return result; - } - - void setDataDirectory() - { - JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; - { - jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; - jmethodID methodID {jniEnv->GetStaticMethodID(jniClass, "getDataDirectory", - "()Ljava/lang/String;")}; - jstring dataDirectory { - static_cast(jniEnv->CallStaticObjectMethod(jniClass, methodID))}; - const char* dataDirUtf {jniEnv->GetStringUTFChars(dataDirectory, nullptr)}; - ResourceManager::getInstance().setDataDirectory(std::string(dataDirUtf)); - jniEnv->ReleaseStringUTFChars(dataDirectory, dataDirUtf); - jniEnv->DeleteLocalRef(jniClass); - } - } - - bool checkNeedResourceCopy(const std::string& buildIdentifier) - { - JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; - jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; - jmethodID methodID {jniEnv->GetStaticMethodID(jniClass, "checkNeedResourceCopy", - "(Ljava/lang/String;)Z")}; - const bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( - jniClass, methodID, jniEnv->NewStringUTF(buildIdentifier.c_str())))}; - jniEnv->DeleteLocalRef(jniClass); - return returnValue; - } - - bool setupResources(const std::string& buildIdentifier) - { - JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; - { - jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; - jmethodID methodID {jniEnv->GetStaticMethodID(jniClass, "setupResources", - "(Ljava/lang/String;)Z")}; - const bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( - jniClass, methodID, jniEnv->NewStringUTF(buildIdentifier.c_str())))}; - jniEnv->DeleteLocalRef(jniClass); - if (returnValue) { - LOG(LogError) << "Couldn't setup application resources on internal storage"; - return true; - } - } - { - jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; - jmethodID methodID {jniEnv->GetStaticMethodID(jniClass, "setupThemes", - "(Ljava/lang/String;)Z")}; - const bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( - jniClass, methodID, jniEnv->NewStringUTF(buildIdentifier.c_str())))}; - jniEnv->DeleteLocalRef(jniClass); - if (returnValue) { - LOG(LogError) << "Couldn't setup application themes on internal storage"; - return true; - } - } - return false; - } - - bool checkEmulatorInstalled(const std::string& packageName, const std::string& activity) - { - JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; - jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; - jmethodID methodID {jniEnv->GetStaticMethodID( - jniClass, "checkEmulatorInstalled", "(Ljava/lang/String;Ljava/lang/String;)Z")}; - const bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( - jniClass, methodID, jniEnv->NewStringUTF(packageName.c_str()), - jniEnv->NewStringUTF(activity.c_str())))}; - jniEnv->DeleteLocalRef(jniClass); - return returnValue; - } - - int launchGame(const std::string& packageName, - const std::string& activity, - const std::string& action, - const std::string& category, - const std::string& mimeType, - const std::string& data, - const std::string& romRaw, - const std::map& extrasString, - const std::map& extrasBool, - const std::vector& activityFlags) - { - JNIEnv* jniEnv {reinterpret_cast(SDL_AndroidGetJNIEnv())}; - jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; - jmethodID methodID {jniEnv->GetStaticMethodID( - jniClass, "launchGame", - "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/" - "String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/" - "HashMap;Ljava/util/HashMap;Ljava/util/List;)Z")}; - - jclass hashMapClass {jniEnv->FindClass("java/util/HashMap")}; - jmethodID hashMapInit {jniEnv->GetMethodID(hashMapClass, "", "(I)V")}; - - jobject hashMapString { - jniEnv->NewObject(hashMapClass, hashMapInit, extrasString.size())}; - jobject hashMapBool { - jniEnv->NewObject(hashMapClass, hashMapInit, extrasBool.size())}; - - jmethodID hashMapPutMethodString {jniEnv->GetMethodID( - hashMapClass, "put", - "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;")}; - - for (auto it : extrasString) { - jniEnv->CallObjectMethod(hashMapString, hashMapPutMethodString, - jniEnv->NewStringUTF(it.first.c_str()), - jniEnv->NewStringUTF(it.second.c_str())); - } - - for (auto it : extrasBool) { - jniEnv->CallObjectMethod(hashMapBool, hashMapPutMethodString, - jniEnv->NewStringUTF(it.first.c_str()), - jniEnv->NewStringUTF(it.second.c_str())); - } - - jclass arrayListClass {jniEnv->FindClass("java/util/ArrayList")}; - jmethodID arrayListInit {jniEnv->GetMethodID(arrayListClass, "", "()V")}; - jmethodID addMethod { - jniEnv->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z")}; - jobject flags {jniEnv->NewObject(arrayListClass, arrayListInit)}; - - for (auto& flag : activityFlags) - jniEnv->CallBooleanMethod(flags, addMethod, jniEnv->NewStringUTF(flag.c_str())); - - const bool returnValue {static_cast(jniEnv->CallStaticBooleanMethod( - jniClass, methodID, jniEnv->NewStringUTF(packageName.c_str()), - jniEnv->NewStringUTF(activity.c_str()), jniEnv->NewStringUTF(action.c_str()), - jniEnv->NewStringUTF(category.c_str()), jniEnv->NewStringUTF(mimeType.c_str()), - jniEnv->NewStringUTF(data.c_str()), jniEnv->NewStringUTF(romRaw.c_str()), - hashMapString, hashMapBool, flags))}; - if (returnValue) - return -1; - else - return 0; - } - - } // namespace Android -#endif } // namespace Platform } // namespace Utils diff --git a/es-core/src/utils/PlatformUtil.h b/es-core/src/utils/PlatformUtil.h index 2fac7ee93..a5faac134 100644 --- a/es-core/src/utils/PlatformUtil.h +++ b/es-core/src/utils/PlatformUtil.h @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // -// ES-DE Frontend -// Platform.h +// ES-DE +// PlatformUtil.h // // Platform utility functions. // @@ -16,15 +16,10 @@ #endif #if defined(__ANDROID__) -#include -#include - -extern "C" void Java_org_es_1de_frontend_MainActivity_nativeLogOutput(JNIEnv* jniEnv, - jclass jniClass, - jstring output, - jint logLevel); +#include "utils/PlatformUtilAndroid.h" #endif + namespace Utils { namespace Platform @@ -62,29 +57,6 @@ namespace Utils // Immediately shut down the application as cleanly as possible. void emergencyShutdown(); -#if defined(__ANDROID__) - namespace Android - { - bool requestStoragePermission(); - void setDataDirectory(); - bool checkNeedResourceCopy(const std::string& buildIdentifier); - bool setupResources(const std::string& buildIdentifier); - bool checkEmulatorInstalled(const std::string& packageName, - const std::string& activity); - int launchGame(const std::string& packageName, - const std::string& activity, - const std::string& action, - const std::string& category, - const std::string& mimeType, - const std::string& data, - const std::string& romRaw, - const std::map& extrasString, - const std::map& extrasBool, - const std::vector& activityFlags); - - } // namespace Android -#endif - static QuitMode sQuitMode = QuitMode::QUIT; // This is simply to get rid of a GCC false positive -Wunused-variable compiler warning. static QuitMode sQuitModeDummy = sQuitMode; From ddaf2f01b7ac3246fdf6f11087fc00ade939a141 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 11 Dec 2023 18:31:38 +0100 Subject: [PATCH 040/320] Split the main PDF converter code into its own class --- es-pdf-converter/CMakeLists.txt | 18 ++- es-pdf-converter/src/ConvertPDF.cpp | 194 ++++++++++++++++++++++++++++ es-pdf-converter/src/ConvertPDF.h | 35 +++++ es-pdf-converter/src/main.cpp | 115 +---------------- 4 files changed, 249 insertions(+), 113 deletions(-) create mode 100644 es-pdf-converter/src/ConvertPDF.cpp create mode 100644 es-pdf-converter/src/ConvertPDF.h diff --git a/es-pdf-converter/CMakeLists.txt b/es-pdf-converter/CMakeLists.txt index 242efa8ad..23ed46a90 100644 --- a/es-pdf-converter/CMakeLists.txt +++ b/es-pdf-converter/CMakeLists.txt @@ -21,13 +21,27 @@ if(WIN32) elseif(APPLE) set(POPPLER_CPP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/cpp ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/build/cpp) set(POPPLER_CPP_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/../libpoppler-cpp.0.dylib) +elseif(ANDROID) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -llog") + set(POPPLER_CPP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/cpp ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/build/cpp) + set(POPPLER_CPP_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/../android/libs/${ANDROID_CPU_ARCH}/libpoppler-cpp.so) else() find_package(Poppler REQUIRED COMPONENTS cpp) endif() include_directories(${POPPLER_CPP_INCLUDE_DIR}) -add_executable(es-pdf-convert WIN32 ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp) -target_link_libraries(es-pdf-convert ${POPPLER_CPP_LIBRARY}) +if (ANDROID) + set(CONVERTER_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/ConvertPDF.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/ConvertPDF.h) + add_library(es-pdf-convert SHARED ${CONVERTER_SOURCE_FILES}) +else() + set(CONVERTER_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/ConvertPDF.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/ConvertPDF.h) + add_executable(es-pdf-convert WIN32 ${CONVERTER_SOURCE_FILES}) +endif() +target_link_libraries(es-pdf-convert PRIVATE ${POPPLER_CPP_LIBRARY}) if(WIN32) set_target_properties(es-pdf-convert PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/es-pdf-converter" INSTALL_RPATH_USE_LINK_PATH TRUE) diff --git a/es-pdf-converter/src/ConvertPDF.cpp b/es-pdf-converter/src/ConvertPDF.cpp new file mode 100644 index 000000000..a665a2db6 --- /dev/null +++ b/es-pdf-converter/src/ConvertPDF.cpp @@ -0,0 +1,194 @@ +// SPDX-License-Identifier: GPL-2.0-only +// +// ES-DE +// ConvertPDF.cpp +// +// Converts PDF document pages to raw ARGB32 pixel data for maximum performance. +// This needs to be separated into its own binary to get around the restrictive GPL +// license used by the Poppler PDF rendering library. +// + +#include "ConvertPDF.h" + +#include "poppler-document.h" +#include "poppler-image.h" +#include "poppler-page-renderer.h" +#include "poppler-page.h" + +#include +#include +#include + +#if defined(__ANDROID__) +#include +#endif + +#if defined(_WIN64) +#include +#include +#include +#endif + +#if defined(_WIN64) +int ConvertPDF::processFile( + const std::wstring path, const std::wstring mode, int pageNum, int width, int height) +#elif defined(__ANDROID__) +int ConvertPDF::processFile(const std::string path, + const std::string mode, + int pageNum, + int width, + int height, + std::string& result) +#else +int ConvertPDF::processFile( + const std::string path, const std::string mode, int pageNum, int width, int height) +#endif +{ + std::ifstream file; + + file.open(path.c_str(), std::ifstream::binary); + if (file.fail()) { +#if defined(__ANDROID__) + __android_log_print(ANDROID_LOG_ERROR, ANDROID_APPLICATION_ID, + "Error: Couldn't open PDF file, permission problems?"); +#else + std::cerr << "Error: Couldn't open PDF file, permission problems?" << std::endl; +#endif + return (-1); + } + + file.seekg(0, std::ios::end); + const long fileLength {static_cast(file.tellg())}; + file.seekg(0, std::ios::beg); + std::vector fileData(fileLength); + file.read(&fileData[0], fileLength); + file.close(); + + const poppler::document* document { + poppler::document::load_from_raw_data(&fileData[0], fileLength)}; + + if (document == nullptr) { +#if defined(__ANDROID__) + __android_log_print(ANDROID_LOG_ERROR, ANDROID_APPLICATION_ID, + "Error: Couldn't open document, invalid PDF file?"); +#else + std::cerr << "Error: Couldn't open document, invalid PDF file?" << std::endl; +#endif + return (-1); + } + + const int pageCount {document->pages()}; +#if defined(_WIN64) + if (mode == L"-fileinfo") { +#else + if (mode == "-fileinfo") { +#endif + std::vector pageInfo; + for (int i {0}; i < pageCount; ++i) { + std::string pageRow; + const poppler::page* page {document->create_page(i)}; + if (page == nullptr) { + if (page == nullptr) { +#if defined(__ANDROID__) + __android_log_print(ANDROID_LOG_ERROR, ANDROID_APPLICATION_ID, + "Error: Couldn't read page %i", i + 1); +#else + std::cerr << "Error: Couldn't read page " << i + 1 << std::endl; +#endif + return (-1); + } + } + + std::string orientation; + if (page->orientation() == poppler::page::portrait) + orientation = "portrait"; + else if (page->orientation() == poppler::page::upside_down) + orientation = "upside_down"; + else if (page->orientation() == poppler::page::seascape) + orientation = "seascape"; + else + orientation = "landscape"; + + const poppler::rectf pageRect {page->page_rect()}; + pageRow.append(std::to_string(i + 1)) + .append(";") + .append(orientation) + .append(";") + .append(std::to_string(pageRect.width())) + .append(";") + .append(std::to_string(pageRect.height())); + pageInfo.emplace_back(pageRow); + } + for (auto& row : pageInfo) { +#if defined(__ANDROID__) + result.append(row).append("\n"); +#else + std::cout << row << std::endl; +#endif + } + return (0); + } + + if (pageNum < 1 || pageNum > pageCount) { +#if defined(__ANDROID__) + __android_log_print(ANDROID_LOG_ERROR, ANDROID_APPLICATION_ID, + "Error: Requested page %i does not exist in document", pageNum); +#else + std::cerr << "Error: Requested page " << pageNum << " does not exist in document" + << std::endl; +#endif + return (-1); + } + +#if defined(__ANDROID__) + __android_log_print(ANDROID_LOG_ERROR, "org.es_de.frontend", "PDF CONVERTING BREAK 10"); +#endif + + const poppler::page* page {document->create_page(pageNum - 1)}; + + if (page == nullptr) { +#if defined(__ANDROID__) + __android_log_print(ANDROID_LOG_ERROR, ANDROID_APPLICATION_ID, + "Error: Couldn't read page %i", pageNum); +#else + std::cerr << "Error: Couldn't read page " << pageNum << std::endl; +#endif + return (-1); + } + + poppler::page_renderer pageRenderer; + + pageRenderer.set_render_hint(poppler::page_renderer::text_antialiasing); + pageRenderer.set_render_hint(poppler::page_renderer::antialiasing); + // pageRenderer.set_render_hint(poppler::page_renderer::text_hinting); + + const poppler::rectf pageRect {page->page_rect()}; + const bool rotate {page->orientation() == poppler::page::portrait || + page->orientation() == poppler::page::upside_down}; + const double pageHeight {pageRect.height()}; + const double sizeFactor {static_cast(rotate ? height : width) / pageHeight}; + + poppler::image image { + pageRenderer.render_page(page, 72.0 * sizeFactor, 72.0 * sizeFactor, 0, 0, width, height)}; + + if (!image.is_valid()) { +#if defined(__ANDROID__) + __android_log_print(ANDROID_LOG_ERROR, ANDROID_APPLICATION_ID, "Rendered image is invalid"); +#else + std::cerr << "Rendered image is invalid" << std::endl; +#endif + return (-1); + } + +#if defined(__ANDROID__) + result.insert(0, std::move(image.data()), width * height * 4); +#else + // Necessary as the image data stream may contain null characters. + std::string imageARGB32; + imageARGB32.insert(0, std::move(image.data()), width * height * 4); + + std::cout << imageARGB32; +#endif + + return 0; +} \ No newline at end of file diff --git a/es-pdf-converter/src/ConvertPDF.h b/es-pdf-converter/src/ConvertPDF.h new file mode 100644 index 000000000..8f9a33bfb --- /dev/null +++ b/es-pdf-converter/src/ConvertPDF.h @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-2.0-only +// +// ES-DE +// ConvertPDF.h +// +// Converts PDF document pages to raw ARGB32 pixel data for maximum performance. +// This needs to be separated into its own binary to get around the restrictive GPL +// license used by the Poppler PDF rendering library. +// + +#include + +#ifndef ES_PDF_CONVERTER_CONVERT_PDF_H +#define ES_PDF_CONVERTER_CONVERT_PDF_H + +class ConvertPDF +{ +public: +#if defined(_WIN64) + static int processFile( + const std::wstring path, const std::wstring mode, int pageNum, int width, int height); +#elif defined(__ANDROID__) + __attribute__((visibility("default"))) static int processFile(const std::string path, + const std::string mode, + int pageNum, + int width, + int height, + std::string& result); +#else + static int processFile( + const std::string path, const std::string mode, int pageNum, int width, int height); +#endif +}; + +#endif // ES_PDF_CONVERTER_CONVERT_PDF_H diff --git a/es-pdf-converter/src/main.cpp b/es-pdf-converter/src/main.cpp index 8418fb5d9..552cf7087 100644 --- a/es-pdf-converter/src/main.cpp +++ b/es-pdf-converter/src/main.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only // -// EmulationStation Desktop Edition (ES-DE) PDF converter +// ES-DE PDF converter // main.cpp // // Converts PDF document pages to raw ARGB32 pixel data for maximum performance. @@ -11,13 +11,8 @@ // All ES-DE C++ source code is formatted using clang-format. // -#include "poppler-document.h" -#include "poppler-image.h" -#include "poppler-page-renderer.h" -#include "poppler-page.h" +#include "ConvertPDF.h" -#include -#include #include #if defined(_WIN64) @@ -101,7 +96,7 @@ int main(int argc, char* argv[]) pageNum = atoi(argv[3]); width = atoi(argv[4]); height = atoi(argv[5]); -#endif +#endif // _WIN64 if (width < 1 || width > 7680) { std::cerr << "Invalid horizontal resolution defined: " << argv[3] << std::endl; exit(-1); @@ -116,107 +111,5 @@ int main(int argc, char* argv[]) // << width << "x" << height << " pixels" << std::endl; } - std::ifstream file; - - file.open(path.c_str(), std::ifstream::binary); - if (file.fail()) { - std::cerr << "Error: Couldn't open PDF file, permission problems?" << std::endl; - exit(-1); - } - - file.seekg(0, std::ios::end); - const long fileLength {static_cast(file.tellg())}; - file.seekg(0, std::ios::beg); - std::vector fileData(fileLength); - file.read(&fileData[0], fileLength); - file.close(); - - const poppler::document* document { - poppler::document::load_from_raw_data(&fileData[0], fileLength)}; - - if (document == nullptr) { - std::cerr << "Error: Couldn't open document, invalid PDF file?" << std::endl; - exit(-1); - } - - const int pageCount {document->pages()}; -#if defined(_WIN64) - if (mode == L"-fileinfo") { -#else - if (mode == "-fileinfo") { -#endif - std::vector pageInfo; - for (int i {0}; i < pageCount; ++i) { - std::string pageRow; - const poppler::page* page {document->create_page(i)}; - if (page == nullptr) { - if (page == nullptr) { - std::cerr << "Error: Couldn't read page " << i + 1 << std::endl; - exit(-1); - } - } - std::string orientation; - if (page->orientation() == poppler::page::portrait) - orientation = "portrait"; - else if (page->orientation() == poppler::page::upside_down) - orientation = "upside_down"; - else if (page->orientation() == poppler::page::seascape) - orientation = "seascape"; - else - orientation = "landscape"; - - const poppler::rectf pageRect {page->page_rect()}; - pageRow.append(std::to_string(i + 1)) - .append(";") - .append(orientation) - .append(";") - .append(std::to_string(pageRect.width())) - .append(";") - .append(std::to_string(pageRect.height())); - pageInfo.emplace_back(pageRow); - } - for (auto& row : pageInfo) - std::cout << row << std::endl; - exit(0); - } - - if (pageNum < 1 || pageNum > pageCount) { - std::cerr << "Error: Requested page " << pageNum << " does not exist in document" - << std::endl; - exit(-1); - } - - const poppler::page* page {document->create_page(pageNum - 1)}; - - if (page == nullptr) { - std::cerr << "Error: Couldn't read page " << pageNum << std::endl; - exit(-1); - } - - poppler::page_renderer pageRenderer; - - pageRenderer.set_render_hint(poppler::page_renderer::text_antialiasing); - pageRenderer.set_render_hint(poppler::page_renderer::antialiasing); - // pageRenderer.set_render_hint(poppler::page_renderer::text_hinting); - - const poppler::rectf pageRect {page->page_rect()}; - const bool rotate {page->orientation() == poppler::page::portrait || - page->orientation() == poppler::page::upside_down}; - const double pageHeight {pageRect.height()}; - const double sizeFactor {static_cast(rotate ? height : width) / pageHeight}; - - poppler::image image { - pageRenderer.render_page(page, 72.0 * sizeFactor, 72.0 * sizeFactor, 0, 0, width, height)}; - - if (!image.is_valid()) { - std::cerr << "Rendered image is invalid" << std::endl; - exit(-1); - } - - // Necessary as the image data stream may contain null characters. - std::string imageARGB32; - imageARGB32.insert(0, std::move(image.data()), width * height * 4); - - std::cout << imageARGB32; - return 0; + return ConvertPDF::processFile(path, mode, pageNum, width, height); } From a4f5c82203dfce17ddbef0d1f0719d7a900a2a60 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 11 Dec 2023 18:33:05 +0100 Subject: [PATCH 041/320] Small change to the .gitignore file --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 36380cfb6..98650abcb 100644 --- a/.gitignore +++ b/.gitignore @@ -33,8 +33,9 @@ emulationstation.worker.js /index.html /ROMs -# Android build +# Android /android +es-core/src/utils/PlatformUtilAndroid.* # AppImage AppDir From 854cef60cb1b340d12506e9c62b6e7012fec55ad Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 11 Dec 2023 18:38:11 +0100 Subject: [PATCH 042/320] (Android) Made PDF rendering work correctly using Poppler --- CMakeLists.txt | 26 ++++++++++++++------------ es-app/CMakeLists.txt | 5 ++--- es-app/src/PDFViewer.cpp | 17 +++++++++++++++++ es-core/CMakeLists.txt | 5 +++++ 4 files changed, 38 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 27477c0b6..606d81387 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -221,7 +221,8 @@ if(APPLE AND CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 15.0.0) endif() if(ANDROID) - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -llog") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -llog") endif() if(EMSCRIPTEN) @@ -442,7 +443,8 @@ set(COMMON_INCLUDE_DIRS ${CURL_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/external/lunasvg/include ${CMAKE_CURRENT_SOURCE_DIR}/external/rapidjson/include ${CMAKE_CURRENT_SOURCE_DIR}/external/rlottie/inc - ${CMAKE_CURRENT_SOURCE_DIR}/es-core/src) + ${CMAKE_CURRENT_SOURCE_DIR}/es-core/src + ${CMAKE_CURRENT_SOURCE_DIR}/es-pdf-converter/src) if(APPLE) set(COMMON_INCLUDE_DIRS ${COMMON_INCLUDE_DIRS} @@ -572,11 +574,15 @@ elseif(ANDROID) ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libswscale.so # Other dependencies. ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libcurl.so - ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libfreeimage.a + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libcrypto.so + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libfreeimage.so ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libfreetype.so ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libgit2.so + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libjpeg.so + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libpoppler.so ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libpugixml.a - ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libSDL2.so) + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libSDL2.so + ${PROJECT_SOURCE_DIR}/android/libs/${ANDROID_CPU_ARCH}/libssl.so) elseif(EMSCRIPTEN) set(COMMON_LIBRARIES ${COMMON_LIBRARIES} # FFmpeg core libraries. @@ -673,18 +679,14 @@ set(EXECUTABLE_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE) set(LIBRARY_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE) # Add each component. -if(NOT ANDROID) - add_subdirectory(es-pdf-converter) -endif() +add_subdirectory(es-pdf-converter) add_subdirectory(external) add_subdirectory(es-core) add_subdirectory(es-app) -if(NOT ANDROID) - # Make sure that es-pdf-convert is built first, and then that rlottie is built before es-core. - # Also set lottie2gif to not be built. - add_dependencies(lunasvg es-pdf-convert) -endif() +# Make sure that es-pdf-convert is built first, and then that rlottie is built before es-core. +# Also set lottie2gif to not be built. +add_dependencies(lunasvg es-pdf-convert) add_dependencies(es-core rlottie) set_target_properties(lottie2gif PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1) diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 8c3d5fdcd..48a33fcff 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -134,9 +134,8 @@ elseif(WIN32) set_target_properties(EmulationStation PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) elseif(ANDROID) include_directories(${COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/src) - add_library(main SHARED ${ES_SOURCES} ${ES_HEADERS}) - target_link_libraries(main ${COMMON_LIBRARIES} ${CMAKE_DL_LIBS} es-core) - set_target_properties(main PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) + add_library(main MODULE ${ES_SOURCES} ${ES_HEADERS}) + target_link_libraries(main PRIVATE ${COMMON_LIBRARIES} ${CMAKE_DL_LIBS} es-core es-pdf-convert) else() include_directories(${COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/src) add_executable(emulationstation ${ES_SOURCES} ${ES_HEADERS}) diff --git a/es-app/src/PDFViewer.cpp b/es-app/src/PDFViewer.cpp index 6f59e98f0..67ef2b28d 100644 --- a/es-app/src/PDFViewer.cpp +++ b/es-app/src/PDFViewer.cpp @@ -20,6 +20,10 @@ #include #endif +#if defined(__ANDROID__) +#include "ConvertPDF.h" +#endif + #define DEBUG_PDF_CONVERSION false #define KEY_REPEAT_START_DELAY 600 @@ -51,6 +55,7 @@ bool PDFViewer::startPDFViewer(FileData* game) { ViewController::getInstance()->pauseViewVideos(); +#if !defined(__ANDROID__) #if defined(_WIN64) const std::string convertBinary {"/es-pdf-converter/es-pdf-convert.exe"}; #else @@ -67,6 +72,7 @@ bool PDFViewer::startPDFViewer(FileData* game) ViewController::getInstance()->startViewVideos(); return false; } +#endif // !__ANDROID__ mGame = game; mManualPath = mGame->getManualPath(); @@ -298,6 +304,8 @@ bool PDFViewer::getDocumentInfo() // Close process and thread handles. CloseHandle(pi.hProcess); CloseHandle(pi.hThread); +#elif defined(__ANDROID__) + ConvertPDF::processFile(mManualPath, "-fileinfo", 0, 0, 0, commandOutput); #else FILE* commandPipe; std::array buffer {}; @@ -439,6 +447,13 @@ void PDFViewer::convertPage(int pageNum) CloseHandle(childStdoutRead); WaitForSingleObject(pi.hThread, INFINITE); WaitForSingleObject(pi.hProcess, INFINITE); +#elif (__ANDROID__) + ConvertPDF::processFile(mManualPath, "-convert", pageNum, + static_cast(mPages[pageNum].width), + static_cast(mPages[pageNum].height), imageData); + mPages[pageNum].imageData.insert(mPages[pageNum].imageData.end(), + std::make_move_iterator(imageData.begin()), + std::make_move_iterator(imageData.end())); #else FILE* commandPipe; std::array buffer {}; @@ -461,6 +476,8 @@ void PDFViewer::convertPage(int pageNum) #if defined(_WIN64) if (!processReturnValue || (static_cast(imageDataSize) < mPages[pageNum].width * mPages[pageNum].height * 4)) { +#elif defined(__ANDROID__) + if (static_cast(imageDataSize) < mPages[pageNum].width * mPages[pageNum].height * 4) { #else if (returnValue != 0 || (static_cast(imageDataSize) < mPages[pageNum].width * mPages[pageNum].height * 4)) { diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 91c91604a..9f60146f7 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -169,6 +169,11 @@ set(CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/TimeUtil.cpp ) +if(ANDROID) + set(CORE_HEADERS ${CORE_HEADERS} ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/PlatformUtilAndroid.h) + set(CORE_SOURCES ${CORE_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/PlatformUtilAndroid.cpp) +endif() + #--------------------------------------------------------------------------------------------------- # Miscellaneous configuration. From 8571dfe7bf09439143e88fe066224b39d97af70b Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 12 Dec 2023 23:21:27 +0100 Subject: [PATCH 043/320] (Android) Implemented a cleaner way of handling the private data directory --- es-app/src/FileData.cpp | 4 +++ es-app/src/main.cpp | 4 +++ es-core/src/ThemeData.cpp | 41 ++++++++++------------- es-core/src/resources/ResourceManager.cpp | 26 +++++++------- es-core/src/resources/ResourceManager.h | 4 --- es-core/src/utils/FileSystemUtil.cpp | 12 ++++--- es-core/src/utils/PlatformUtil.h | 5 --- 7 files changed, 44 insertions(+), 52 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 15918bcda..889b26b7e 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -25,6 +25,10 @@ #include "views/GamelistView.h" #include "views/ViewController.h" +#if defined(__ANDROID__) +#include "utils/PlatformUtilAndroid.h" +#endif + #include #include diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index e6010c332..c61c4d0b5 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -37,6 +37,10 @@ #include #include +#if defined(__ANDROID__) +#include "utils/PlatformUtilAndroid.h" +#endif + #if defined(__EMSCRIPTEN__) #include #endif diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index fed58c4cd..8469b23ca 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -696,32 +696,27 @@ void ThemeData::populateThemes() userThemeDirectory = defaultUserThemeDir; } -#if defined(__unix__) || defined(__APPLE__) -#if defined(APPIMAGE_BUILD) - static const size_t pathCount {2}; -#else - static const size_t pathCount {3}; -#endif -#else - static const size_t pathCount {2}; -#endif - std::string paths[pathCount] = { +#if defined(__ANDROID__) + const std::vector themePaths {Utils::FileSystem::getProgramDataPath() + "/themes", + userThemeDirectory}; +#elif defined(__APPLE__) + const std::vector themePaths { Utils::FileSystem::getExePath() + "/themes", -#if defined(__APPLE__) - Utils::FileSystem::getExePath() + "/../Resources/themes", -#elif defined(__ANDROID__) - ResourceManager::getInstance().getDataDirectory() + "/themes", -#elif defined(__unix__) && !defined(APPIMAGE_BUILD) - Utils::FileSystem::getProgramDataPath() + "/themes", + Utils::FileSystem::getExePath() + "/../Resources/themes", userThemeDirectory}; +#elif defined(_WIN64) || defined(APPIMAGE_BUILD) + const std::vector themePaths {Utils::FileSystem::getExePath() + "/themes", + userThemeDirectory}; +#else + const std::vector themePaths {Utils::FileSystem::getExePath() + "/themes", + Utils::FileSystem::getProgramDataPath() + "/themes", + userThemeDirectory}; #endif - userThemeDirectory - }; - for (size_t i {0}; i < pathCount; ++i) { - if (!Utils::FileSystem::isDirectory(paths[i])) + for (auto path : themePaths) { + if (!Utils::FileSystem::isDirectory(path)) continue; - Utils::FileSystem::StringList dirContent {Utils::FileSystem::getDirContent(paths[i])}; + Utils::FileSystem::StringList dirContent {Utils::FileSystem::getDirContent(path)}; for (Utils::FileSystem::StringList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) { @@ -732,7 +727,6 @@ void ThemeData::populateThemes() Utils::String::toLower(themeDirName.substr(themeDirName.length() - 8, 8)) == "disabled")) continue; - #if defined(_WIN64) LOG(LogDebug) << "Loading theme capabilities for \"" << Utils::String::replace(*it, "/", "\\") << "\"..."; @@ -745,9 +739,8 @@ void ThemeData::populateThemes() continue; std::string themeName; - if (capabilities.themeName != "") { + if (capabilities.themeName != "") themeName.append(" (\"").append(capabilities.themeName).append("\")"); - } #if defined(_WIN64) LOG(LogInfo) << "Added theme \"" << Utils::String::replace(*it, "/", "\\") << "\"" diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index d4f5e3201..2902cfe01 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -41,18 +41,22 @@ std::string ResourceManager::getResourcePath(const std::string& path, bool termi if (Utils::FileSystem::exists(applePackagePath)) { return applePackagePath; } -#elif defined(__unix__) && !defined(APPIMAGE_BUILD) -#if defined(__ANDROID__) - std::string testDataPath {mDataDirectory + "/resources/" + &path[2]}; -#else - // Check under the data installation directory (Unix only). +#elif (defined(__unix__) && !defined(APPIMAGE_BUILD)) || defined(__ANDROID__) + // Check in the program data directory. std::string testDataPath {Utils::FileSystem::getProgramDataPath() + "/resources/" + &path[2]}; -#endif if (Utils::FileSystem::exists(testDataPath)) return testDataPath; #endif -#if !defined(__ANDROID__) +#if defined(__ANDROID__) + // Check in the assets directory using AssetManager. + SDL_RWops* resFile {SDL_RWFromFile(path.substr(2).c_str(), "rb")}; + if (resFile != nullptr) { + SDL_RWclose(resFile); + return path.substr(2); + } + else { +#else // Check under the ES executable directory. std::string testExePath {Utils::FileSystem::getExePath() + "/resources/" + &path[2]}; @@ -63,13 +67,6 @@ std::string ResourceManager::getResourcePath(const std::string& path, bool termi // indicate that we have a broken EmulationStation installation. If the argument // terminateOnFailure is set to false though, then skip this step. else { -#else - SDL_RWops* resFile {SDL_RWFromFile(path.substr(2).c_str(), "rb")}; - if (resFile != nullptr) { - SDL_RWclose(resFile); - return path.substr(2); - } - else { #endif if (terminateOnFailure) { LOG(LogError) << "Program resource missing: " << path; @@ -102,6 +99,7 @@ const ResourceData ResourceManager::getFileData(const std::string& path) const const std::string respath {getResourcePath(path)}; #if defined(__ANDROID__) + // Check in the assets directory using AssetManager. SDL_RWops* resFile {SDL_RWFromFile(respath.c_str(), "rb")}; if (resFile != nullptr) { ResourceData data {loadFile(resFile)}; diff --git a/es-core/src/resources/ResourceManager.h b/es-core/src/resources/ResourceManager.h index 526926de6..835f7af21 100644 --- a/es-core/src/resources/ResourceManager.h +++ b/es-core/src/resources/ResourceManager.h @@ -44,9 +44,6 @@ public: void unloadAll(); void reloadAll(); - void setDataDirectory(const std::string& dataDirectory) { mDataDirectory = dataDirectory; } - const std::string& getDataDirectory() const { return mDataDirectory; } - std::string getResourcePath(const std::string& path, bool terminateOnFailure = true) const; const ResourceData getFileData(const std::string& path) const; bool fileExists(const std::string& path) const; @@ -58,7 +55,6 @@ private: ResourceData loadFile(SDL_RWops* resFile) const; std::list> mReloadables; - std::string mDataDirectory; }; #endif // ES_CORE_RESOURCES_RESOURCE_MANAGER_H diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index accc3df82..ba9951ce7 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -8,9 +8,9 @@ // remove files etc. // -#if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && \ - !defined(__NetBSD__) && !defined(__EMSCRIPTEN__) -#define _FILE_OFFSET_BITS 64 +#if defined(__ANDROID__) +#include "utils/PlatformUtilAndroid.h" +#include #endif #if defined(__APPLE__) @@ -365,10 +365,12 @@ namespace Utils std::string getProgramDataPath() { -#if defined(__unix__) +#if defined(__ANDROID__) + return AndroidVariables::sAndroidDataDirectory; +#elif defined(__unix__) return installPrefix + "/share/emulationstation"; #else - return ""; + return ""; #endif } diff --git a/es-core/src/utils/PlatformUtil.h b/es-core/src/utils/PlatformUtil.h index a5faac134..c1e839571 100644 --- a/es-core/src/utils/PlatformUtil.h +++ b/es-core/src/utils/PlatformUtil.h @@ -15,11 +15,6 @@ #include #endif -#if defined(__ANDROID__) -#include "utils/PlatformUtilAndroid.h" -#endif - - namespace Utils { namespace Platform From 6bcbd702371a0efbe9bde8a4bf1e401c6bd3c900 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 13 Dec 2023 20:07:23 +0100 Subject: [PATCH 044/320] (Android) Changed a variable for the private data directory --- es-app/src/main.cpp | 2 +- es-core/src/utils/FileSystemUtil.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index c61c4d0b5..7681547de 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -740,7 +740,7 @@ int main(int argc, char* argv[]) LOG(LogDebug) << "Android storage state: " << SDL_AndroidGetExternalStorageState(); LOG(LogDebug) << "Android internal path: " << SDL_AndroidGetInternalStoragePath(); LOG(LogDebug) << "Android external path: " << SDL_AndroidGetExternalStoragePath(); - Utils::Platform::Android::setDataDirectory(); + Utils::Platform::Android::setPrivateDataDirectory(); { std::string buildIdentifier {PROGRAM_VERSION_STRING}; buildIdentifier.append(" (r") diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index ba9951ce7..434619dde 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -366,7 +366,7 @@ namespace Utils std::string getProgramDataPath() { #if defined(__ANDROID__) - return AndroidVariables::sAndroidDataDirectory; + return AndroidVariables::sPrivateDataDirectory; #elif defined(__unix__) return installPrefix + "/share/emulationstation"; #else From b72e2a20a8d8964c2d883da5da817c18d9ccb7a2 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 13 Dec 2023 22:04:14 +0100 Subject: [PATCH 045/320] Changed a number of FileSystemUtil functions to use std::filesystem facilities --- es-core/src/ThemeData.cpp | 10 +- es-core/src/resources/ResourceManager.cpp | 2 +- es-core/src/utils/FileSystemUtil.cpp | 136 +++++++++++++++++----- es-core/src/utils/FileSystemUtil.h | 13 ++- 4 files changed, 119 insertions(+), 42 deletions(-) diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 8469b23ca..6c22ae993 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -697,8 +697,8 @@ void ThemeData::populateThemes() } #if defined(__ANDROID__) - const std::vector themePaths {Utils::FileSystem::getProgramDataPath() + "/themes", - userThemeDirectory}; + const std::vector themePaths { + Utils::FileSystem::getProgramDataPath().string() + "/themes", userThemeDirectory}; #elif defined(__APPLE__) const std::vector themePaths { Utils::FileSystem::getExePath() + "/themes", @@ -707,9 +707,9 @@ void ThemeData::populateThemes() const std::vector themePaths {Utils::FileSystem::getExePath() + "/themes", userThemeDirectory}; #else - const std::vector themePaths {Utils::FileSystem::getExePath() + "/themes", - Utils::FileSystem::getProgramDataPath() + "/themes", - userThemeDirectory}; + const std::vector themePaths { + Utils::FileSystem::getExePath() + "/themes", + Utils::FileSystem::getProgramDataPath().string() + "/themes", userThemeDirectory}; #endif for (auto path : themePaths) { diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index 2902cfe01..7c8b86eac 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -43,7 +43,7 @@ std::string ResourceManager::getResourcePath(const std::string& path, bool termi } #elif (defined(__unix__) && !defined(APPIMAGE_BUILD)) || defined(__ANDROID__) // Check in the program data directory. - std::string testDataPath {Utils::FileSystem::getProgramDataPath() + "/resources/" + + std::string testDataPath {Utils::FileSystem::getProgramDataPath().string() + "/resources/" + &path[2]}; if (Utils::FileSystem::exists(testDataPath)) return testDataPath; diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 434619dde..d501b8cf1 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -42,14 +42,14 @@ // build environment is broken. #if defined(__unix__) #if defined(ES_INSTALL_PREFIX) -const std::string installPrefix {ES_INSTALL_PREFIX}; +const std::filesystem::path installPrefix {ES_INSTALL_PREFIX}; #else #if defined(__linux__) -const std::string installPrefix {"/usr"}; +const std::filesystem::path installPrefix {"/usr"}; #elif defined(__NetBSD__) -const std::string installPrefix {"/usr/pkg"}; +const std::filesystem::path installPrefix {"/usr/pkg"}; #else -const std::string installPrefix {"/usr/local"}; +const std::filesystem::path installPrefix {"/usr/local"}; #endif #endif #endif @@ -59,8 +59,9 @@ namespace Utils namespace FileSystem { static std::string homePath; - static std::string exePath; - static std::string esBinary; + static std::filesystem::path homePathSTD; + static std::filesystem::path exePath; + static std::filesystem::path esBinary; StringList getDirContent(const std::string& path, const bool recursive) { @@ -168,6 +169,7 @@ namespace Utils { // Set home path. homePath = getGenericPath(path); + homePathSTD = std::filesystem::path {homePath}; } std::string getHomePath() @@ -208,11 +210,52 @@ namespace Utils // No homepath found, fall back to current working directory. if (!homePath.length()) - homePath = getCWDPath(); + homePath = std::filesystem::current_path().string(); return homePath; } + std::filesystem::path getHomePathSTD() + { + // Only construct the homepath once. + if (!homePathSTD.empty()) + return homePathSTD; + +#if defined(_WIN64) + // On Windows we need to check HOMEDRIVE and HOMEPATH. + std::wstring envHomeDrive; + std::wstring envHomePath; +#if defined(_MSC_VER) // MSVC compiler. + wchar_t* buffer; + if (!_wdupenv_s(&buffer, nullptr, L"HOMEDRIVE")) + envHomeDrive = buffer; + if (!_wdupenv_s(&buffer, nullptr, L"HOMEPATH")) + envHomePath = buffer; +#else + envHomeDrive = _wgetenv(L"HOMEDRIVE"); + envHomePath = _wgetenv(L"HOMEPATH"); +#endif + if (envHomeDrive.length() && envHomePath.length()) + homePathSTD = std::filesystem::path { + getGenericPath(Utils::String::wideStringToString(envHomeDrive) + "/" + + Utils::String::wideStringToString(envHomePath))}; + +#else + + std::string envHome; + if (getenv("HOME") != nullptr) + envHome = getenv("HOME"); + if (envHome.length()) + homePathSTD = std::filesystem::path {getGenericPath(envHome)}; +#endif + + // No homepath found, fall back to current working directory. + if (homePathSTD.empty()) + homePathSTD = std::filesystem::current_path(); + + return homePathSTD; + } + std::string getSystemHomeDirectory() { #if defined(_WIN64) @@ -241,18 +284,12 @@ namespace Utils return ""; } - std::string getCWDPath() + std::filesystem::path getESDataDirectory() { - // Return current working directory. - -#if defined(_WIN64) - wchar_t tempWide[512]; - return (_wgetcwd(tempWide, 512) ? - getGenericPath(Utils::String::wideStringToString(tempWide)) : - ""); +#if defined(__ANDROID__) + return getHomePathSTD().append(".emulationstation"); #else - char temp[512]; - return (getcwd(temp, 512) ? getGenericPath(temp) : ""); + return getHomePathSTD().append(".emulationstation"); #endif } @@ -321,56 +358,75 @@ namespace Utils void setExePath(const std::string& path) { + std::string exePathTemp; + std::string esBinaryTemp; + constexpr int pathMax {32767}; #if defined(_WIN64) std::wstring result(pathMax, 0); if (GetModuleFileNameW(nullptr, &result[0], pathMax) != 0) - exePath = Utils::String::wideStringToString(result); + exePathTemp = Utils::String::wideStringToString(result); #else std::string result(pathMax, 0); if (readlink("/proc/self/exe", &result[0], pathMax) != -1) - exePath = result; + exePathTemp = result; #endif - exePath.erase(std::find(exePath.begin(), exePath.end(), '\0'), exePath.end()); - esBinary = exePath; - exePath = getCanonicalPath(exePath); + exePathTemp.erase(std::find(exePathTemp.begin(), exePathTemp.end(), '\0'), + exePathTemp.end()); + esBinaryTemp = exePathTemp; + exePathTemp = getCanonicalPath(exePathTemp); // Fallback to argv[0] if everything else fails. - if (exePath.empty()) { - esBinary = path; - exePath = getCanonicalPath(path); + if (exePathTemp.empty()) { + esBinaryTemp = path; + exePathTemp = getCanonicalPath(path); } - if (isRegularFile(exePath)) - exePath = getParent(exePath); + if (isRegularFile(exePathTemp)) + exePathTemp = getParent(exePathTemp); + + exePath = std::filesystem::path {exePathTemp}; + esBinary = std::filesystem::path {esBinaryTemp}; #if defined(APPIMAGE_BUILD) // We need to check that the APPIMAGE variable is available as the APPIMAGE_BUILD // build flag could have been passed without running as an actual AppImage. if (getenv("APPIMAGE") != nullptr) - esBinary = getenv("APPIMAGE"); + esBinary = std::filesystem::path {getenv("APPIMAGE")}; #endif } std::string getExePath() + { + // Return executable path. + return exePath.string(); + } + + std::filesystem::path getExePathSTD() { // Return executable path. return exePath; } std::string getEsBinary() + { + // Return the absolute path to the ES-DE binary. + return esBinary.string(); + } + + std::filesystem::path getEsBinarySTD() { // Return the absolute path to the ES-DE binary. return esBinary; } - std::string getProgramDataPath() + std::filesystem::path getProgramDataPath() { #if defined(__ANDROID__) return AndroidVariables::sPrivateDataDirectory; #elif defined(__unix__) - return installPrefix + "/share/emulationstation"; + return std::filesystem::path {installPrefix}.append("share").append("emulationstation"); #else - return ""; + return std::filesystem::path {}; #endif } @@ -789,7 +845,7 @@ namespace Utils bool createEmptyFile(const std::filesystem::path& path) { const std::filesystem::path cleanPath {path.lexically_normal().make_preferred()}; - if (exists(path)) { + if (existsSTD(path)) { LOG(LogError) << "Couldn't create target file \"" << cleanPath.string() << "\" as it already exists"; return false; @@ -897,6 +953,22 @@ namespace Utils } } + bool existsSTD(const std::filesystem::path& path) + { + const std::string& genericPath {getGenericPath(path.string())}; + try { +#if defined(_WIN64) + return std::filesystem::exists(Utils::String::stringToWideString(genericPath)); +#else + return std::filesystem::exists(genericPath); +#endif + } + catch (std::filesystem::filesystem_error& error) { + LOG(LogError) << "FileSystemUtil::exists(): " << error.what(); + return false; + } + } + bool driveExists(const std::string& path) { #if defined(_WIN64) diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index fc3353553..13320d93f 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -26,19 +26,23 @@ namespace Utils StringList getPathList(const std::string& path); void setHomePath(const std::string& path); std::string getHomePath(); + std::filesystem::path getHomePathSTD(); std::string getSystemHomeDirectory(); - std::string getCWDPath(); + std::filesystem::path getESDataDirectory(); std::string getPathToBinary(const std::string& executable); void setExePath(const std::string& path); std::string getExePath(); + std::filesystem::path getExePathSTD(); std::string getEsBinary(); - std::string getProgramDataPath(); + std::filesystem::path getEsBinarySTD(); + std::filesystem::path getProgramDataPath(); std::string getPreferredPath(const std::string& path); std::string getGenericPath(const std::string& path); std::string getEscapedPath(const std::string& path); std::string getCanonicalPath(const std::string& path); - std::string getAbsolutePath(const std::string& path, - const std::string& base = getCWDPath()); + std::string getAbsolutePath( + const std::string& path, + const std::string& base = std::filesystem::current_path().string()); std::string getParent(const std::string& path); std::string getFileName(const std::string& path); std::string getStem(const std::string& path); @@ -66,6 +70,7 @@ namespace Utils bool removeDirectory(const std::string& path, bool recursive); bool createDirectory(const std::string& path); bool exists(const std::string& path); + bool existsSTD(const std::filesystem::path& path); bool driveExists(const std::string& path); bool isAbsolute(const std::string& path); bool isRegularFile(const std::string& path); From 79e12e08988d9a508f9935a5af413950bbdee4c5 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 13 Dec 2023 22:07:58 +0100 Subject: [PATCH 046/320] Removed the hardcoded .emulationstation directory from Settings --- es-core/src/Settings.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 5f560076b..2ee7f741e 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -363,8 +363,8 @@ void Settings::setDefaults() void Settings::saveFile() { LOG(LogDebug) << "Settings::saveFile(): Saving settings to es_settings.xml"; - const std::string path = - Utils::FileSystem::getHomePath() + "/.emulationstation/es_settings.xml"; + const std::filesystem::path path { + Utils::FileSystem::getESDataDirectory().append("es_settings.xml")}; pugi::xml_document doc; @@ -383,9 +383,9 @@ void Settings::saveFile() } #if defined(_WIN64) - doc.save_file(Utils::String::stringToWideString(path).c_str()); + doc.save_file(Utils::String::stringToWideString(path.string()).c_str()); #else - doc.save_file(path.c_str()); + doc.save_file(path.string().c_str()); #endif Scripting::fireEvent("config-changed"); @@ -394,18 +394,18 @@ void Settings::saveFile() void Settings::loadFile() { - const std::string configFile {Utils::FileSystem::getHomePath() + - "/.emulationstation/es_settings.xml"}; + std::filesystem::path configFile { + Utils::FileSystem::getESDataDirectory().append("es_settings.xml")}; - if (!Utils::FileSystem::exists(configFile)) + if (!Utils::FileSystem::existsSTD(configFile)) return; pugi::xml_document doc; #if defined(_WIN64) pugi::xml_parse_result result { - doc.load_file(Utils::String::stringToWideString(configFile).c_str())}; + doc.load_file(Utils::String::stringToWideString(configFile.string()).c_str())}; #else - pugi::xml_parse_result result {doc.load_file(configFile.c_str())}; + pugi::xml_parse_result result {doc.load_file(configFile.string().c_str())}; #endif if (!result) { LOG(LogError) << "Couldn't parse the es_settings.xml file: " << result.description(); From 932cb600271157a5c1211818dcf16a7d49519d2a Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 14 Dec 2023 00:25:08 +0100 Subject: [PATCH 047/320] Changed some more FileSystemUtil functions to use std::filesystem facilities --- es-core/src/utils/FileSystemUtil.cpp | 99 ++++++++++++++++++++++++---- es-core/src/utils/FileSystemUtil.h | 7 ++ 2 files changed, 92 insertions(+), 14 deletions(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index d501b8cf1..7f62ebed5 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -100,6 +100,26 @@ namespace Utils return contentList; } + FileList getDirContentSTD(const std::filesystem::path& path, const bool recursive) + { + FileList fileList; + + if (!isDirectorySTD(path)) + return fileList; + + if (recursive) { + for (auto& entry : std::filesystem::recursive_directory_iterator(path)) + fileList.emplace_back(entry); + } + else { + for (auto& entry : std::filesystem::directory_iterator(path)) + fileList.emplace_back(entry); + } + + fileList.sort(); + return fileList; + } + StringList getMatchingFiles(const std::string& pattern) { StringList files; @@ -235,10 +255,10 @@ namespace Utils envHomeDrive = _wgetenv(L"HOMEDRIVE"); envHomePath = _wgetenv(L"HOMEPATH"); #endif - if (envHomeDrive.length() && envHomePath.length()) - homePathSTD = std::filesystem::path { - getGenericPath(Utils::String::wideStringToString(envHomeDrive) + "/" + - Utils::String::wideStringToString(envHomePath))}; + if (envHomeDrive.length() && envHomePath.length()) { + homePathSTD = envHomeDrive; + homePathSTD.append(envHomePath); + } #else @@ -359,7 +379,6 @@ namespace Utils void setExePath(const std::string& path) { std::string exePathTemp; - std::string esBinaryTemp; constexpr int pathMax {32767}; #if defined(_WIN64) @@ -373,19 +392,18 @@ namespace Utils #endif exePathTemp.erase(std::find(exePathTemp.begin(), exePathTemp.end(), '\0'), exePathTemp.end()); - esBinaryTemp = exePathTemp; - exePathTemp = getCanonicalPath(exePathTemp); + esBinary = exePathTemp; + exePath = exePathTemp; + exePath = getCanonicalPathSTD(exePath); // Fallback to argv[0] if everything else fails. - if (exePathTemp.empty()) { - esBinaryTemp = path; - exePathTemp = getCanonicalPath(path); + if (exePath.empty()) { + esBinary = path; + exePath = getCanonicalPathSTD(esBinary); } - if (isRegularFile(exePathTemp)) - exePathTemp = getParent(exePathTemp); - exePath = std::filesystem::path {exePathTemp}; - esBinary = std::filesystem::path {esBinaryTemp}; + if (isRegularFileSTD(exePath)) + exePath = exePath.parent_path(); #if defined(APPIMAGE_BUILD) // We need to check that the APPIMAGE variable is available as the APPIMAGE_BUILD @@ -504,6 +522,9 @@ namespace Utils std::string getCanonicalPath(const std::string& path) { + if (path.empty()) + return ""; + // Hack for builtin resources. if ((path[0] == ':') && (path[1] == '/')) return path; @@ -564,6 +585,18 @@ namespace Utils return canonicalPath; } + std::filesystem::path getCanonicalPathSTD(const std::filesystem::path& path) + { + if (path.empty()) + return path; + + // Hack for builtin resources. + if ((path.string()[0] == ':') && (path.string()[1] == '/')) + return path; + + return std::filesystem::canonical(path); + } + std::string getAbsolutePath(const std::string& path, const std::string& base) { const std::string& absolutePath {getGenericPath(path)}; @@ -601,6 +634,11 @@ namespace Utils return genericPath; } + std::filesystem::path getFileNameSTD(const std::filesystem::path& path) + { + return path.filename(); + } + std::string getStem(const std::string& path) { std::string fileName {getFileName(path)}; @@ -1018,6 +1056,17 @@ namespace Utils } } + bool isRegularFileSTD(const std::filesystem::path& path) + { + try { + return std::filesystem::is_regular_file(path); + } + catch (std::filesystem::filesystem_error& error) { + LOG(LogError) << "FileSystemUtil::isRegularFile(): " << error.what(); + return false; + } + } + bool isDirectory(const std::string& path) { const std::string& genericPath {getGenericPath(path)}; @@ -1035,6 +1084,17 @@ namespace Utils } } + bool isDirectorySTD(const std::filesystem::path& path) + { + try { + return std::filesystem::is_directory(path); + } + catch (std::filesystem::filesystem_error& error) { + LOG(LogError) << "FileSystemUtil::isDirectory(): " << error.what(); + return false; + } + } + bool isSymlink(const std::string& path) { const std::string& genericPath {getGenericPath(path)}; @@ -1051,6 +1111,17 @@ namespace Utils } } + bool isSymlinkSTD(const std::filesystem::path& path) + { + try { + return std::filesystem::is_symlink(path); + } + catch (std::filesystem::filesystem_error& error) { + LOG(LogError) << "FileSystemUtil::isSymlink(): " << error.what(); + return false; + } + } + bool isHidden(const std::string& path) { const std::string& genericPath {getGenericPath(path)}; diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index 13320d93f..89152f589 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -20,8 +20,10 @@ namespace Utils namespace FileSystem { using StringList = std::list; + using FileList = std::list; StringList getDirContent(const std::string& path, const bool recursive = false); + FileList getDirContentSTD(const std::filesystem::path& path, const bool recursive = false); StringList getMatchingFiles(const std::string& pattern); StringList getPathList(const std::string& path); void setHomePath(const std::string& path); @@ -40,11 +42,13 @@ namespace Utils std::string getGenericPath(const std::string& path); std::string getEscapedPath(const std::string& path); std::string getCanonicalPath(const std::string& path); + std::filesystem::path getCanonicalPathSTD(const std::filesystem::path& path); std::string getAbsolutePath( const std::string& path, const std::string& base = std::filesystem::current_path().string()); std::string getParent(const std::string& path); std::string getFileName(const std::string& path); + std::filesystem::path getFileNameSTD(const std::filesystem::path& path); std::string getStem(const std::string& path); std::string getExtension(const std::string& path); long getFileSize(const std::filesystem::path& path); @@ -74,8 +78,11 @@ namespace Utils bool driveExists(const std::string& path); bool isAbsolute(const std::string& path); bool isRegularFile(const std::string& path); + bool isRegularFileSTD(const std::filesystem::path& path); bool isDirectory(const std::string& path); + bool isDirectorySTD(const std::filesystem::path& path); bool isSymlink(const std::string& path); + bool isSymlinkSTD(const std::filesystem::path& path); bool isHidden(const std::string& path); } // namespace FileSystem From 0a2b9f85952532aab346d2636b80f87e14f237e6 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 14 Dec 2023 00:27:44 +0100 Subject: [PATCH 048/320] Changed ThemeData::populateThemes() to use std::filesystem::path --- es-core/src/ThemeData.cpp | 78 ++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 47 deletions(-) diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 6c22ae993..23f55aa6c 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -667,73 +667,61 @@ void ThemeData::populateThemes() // Check for themes first under the user theme directory (which is in the ES-DE home directory // by default), then under the data installation directory (Unix only) and last under the ES-DE // binary directory. - const std::string defaultUserThemeDir {Utils::FileSystem::getHomePath() + - "/.emulationstation/themes"}; - std::string userThemeDirSetting {Utils::FileSystem::expandHomePath( + const std::filesystem::path defaultUserThemeDir { + Utils::FileSystem::getESDataDirectory().append("themes")}; + const std::filesystem::path userThemeDirSetting {Utils::FileSystem::expandHomePath( Settings::getInstance()->getString("UserThemeDirectory"))}; -#if defined(_WIN64) - userThemeDirSetting = Utils::String::replace(userThemeDirSetting, "\\", "/"); -#endif - std::string userThemeDirectory; + std::filesystem::path userThemeDirectory; - if (userThemeDirSetting == "") { + if (userThemeDirSetting.empty()) { userThemeDirectory = defaultUserThemeDir; } - else if (Utils::FileSystem::isDirectory(userThemeDirSetting) || - Utils::FileSystem::isSymlink(userThemeDirSetting)) { + else if (Utils::FileSystem::isDirectorySTD(userThemeDirSetting) || + Utils::FileSystem::isSymlinkSTD(userThemeDirSetting)) { userThemeDirectory = userThemeDirSetting; -#if defined(_WIN64) - LOG(LogInfo) << "Setting user theme directory to \"" - << Utils::String::replace(userThemeDirectory, "/", "\\") << "\""; -#else - LOG(LogInfo) << "Setting user theme directory to \"" << userThemeDirectory << "\""; -#endif + LOG(LogInfo) << "Setting user theme directory to \"" << userThemeDirectory.string() << "\""; } else { - LOG(LogWarning) << "Requested user theme directory \"" << userThemeDirSetting + LOG(LogWarning) << "Requested user theme directory \"" << userThemeDirSetting.string() << "\" does not exist or is not a directory, reverting to \"" - << defaultUserThemeDir << "\""; + << defaultUserThemeDir.string() << "\""; userThemeDirectory = defaultUserThemeDir; } #if defined(__ANDROID__) - const std::vector themePaths { - Utils::FileSystem::getProgramDataPath().string() + "/themes", userThemeDirectory}; + const std::vector themePaths { + Utils::FileSystem::getProgramDataPath().append("themes"), userThemeDirectory}; #elif defined(__APPLE__) - const std::vector themePaths { - Utils::FileSystem::getExePath() + "/themes", - Utils::FileSystem::getExePath() + "/../Resources/themes", userThemeDirectory}; + const std::vector themePaths { + Utils::FileSystem::getExePathSTD().append("themes"), + Utils::FileSystem::getExePathSTD().parent_path().append("Resources").append("themes"), + userThemeDirectory}; #elif defined(_WIN64) || defined(APPIMAGE_BUILD) - const std::vector themePaths {Utils::FileSystem::getExePath() + "/themes", - userThemeDirectory}; + const std::vector themePaths { + Utils::FileSystem::getExePathSTD().append("themes"), userThemeDirectory}; #else - const std::vector themePaths { - Utils::FileSystem::getExePath() + "/themes", - Utils::FileSystem::getProgramDataPath().string() + "/themes", userThemeDirectory}; + const std::vector themePaths { + Utils::FileSystem::getExePathSTD().append("themes"), + Utils::FileSystem::getProgramDataPath().append("themes"), userThemeDirectory}; #endif for (auto path : themePaths) { - if (!Utils::FileSystem::isDirectory(path)) + if (!Utils::FileSystem::isDirectorySTD(path)) continue; - Utils::FileSystem::StringList dirContent {Utils::FileSystem::getDirContent(path)}; + Utils::FileSystem::FileList dirContent {Utils::FileSystem::getDirContentSTD(path)}; - for (Utils::FileSystem::StringList::const_iterator it = dirContent.cbegin(); + for (Utils::FileSystem::FileList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) { - if (Utils::FileSystem::isDirectory(*it)) { - const std::string themeDirName {Utils::FileSystem::getFileName(*it)}; + if (Utils::FileSystem::isDirectorySTD(*it)) { + const std::string themeDirName {Utils::FileSystem::getFileNameSTD(*it).string()}; if (themeDirName == "themes-list" || (themeDirName.length() >= 8 && Utils::String::toLower(themeDirName.substr(themeDirName.length() - 8, 8)) == "disabled")) continue; -#if defined(_WIN64) - LOG(LogDebug) << "Loading theme capabilities for \"" - << Utils::String::replace(*it, "/", "\\") << "\"..."; -#else - LOG(LogDebug) << "Loading theme capabilities for \"" << *it << "\"..."; -#endif - ThemeCapability capabilities {parseThemeCapabilities(*it)}; + LOG(LogDebug) << "Loading theme capabilities for \"" << (*it).string() << "\"..."; + ThemeCapability capabilities {parseThemeCapabilities((*it).string())}; if (!capabilities.validTheme) continue; @@ -742,12 +730,8 @@ void ThemeData::populateThemes() if (capabilities.themeName != "") themeName.append(" (\"").append(capabilities.themeName).append("\")"); -#if defined(_WIN64) - LOG(LogInfo) << "Added theme \"" << Utils::String::replace(*it, "/", "\\") << "\"" - << themeName; -#else - LOG(LogInfo) << "Added theme \"" << *it << "\"" << themeName; -#endif + LOG(LogInfo) << "Added theme \"" << (*it).string() << "\"" << themeName; + int aspectRatios {0}; if (capabilities.aspectRatios.size() > 0) aspectRatios = static_cast(capabilities.aspectRatios.size()) - 1; @@ -759,7 +743,7 @@ void ThemeData::populateThemes() << " and " << capabilities.transitions.size() << " transition" << (capabilities.transitions.size() != 1 ? "s" : ""); - Theme theme {*it, capabilities}; + Theme theme {(*it).string(), capabilities}; sThemes[theme.getName()] = theme; } } From 56ccba81d1d85803b968ddfa5b65d09c6c4d7415 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 15 Dec 2023 18:33:02 +0100 Subject: [PATCH 049/320] Removed all instances of hardcoded application directory entries Also changed some source file headers --- es-app/CMakeLists.txt | 2 +- es-app/src/ApplicationUpdater.cpp | 10 +- es-app/src/ApplicationUpdater.h | 2 +- es-app/src/CollectionSystemsManager.cpp | 7 +- es-app/src/CollectionSystemsManager.h | 2 +- es-app/src/FileData.cpp | 9 +- es-app/src/SystemData.cpp | 77 +++++----- es-app/src/SystemData.h | 2 +- es-app/src/guis/GuiMenu.cpp | 5 +- es-app/src/guis/GuiMenu.h | 2 +- es-app/src/guis/GuiThemeDownloader.cpp | 33 +++-- es-app/src/guis/GuiThemeDownloader.h | 2 +- es-app/src/main.cpp | 133 ++++++++---------- es-app/src/scrapers/GamesDBJSONScraper.cpp | 2 +- es-app/src/scrapers/GamesDBJSONScraper.h | 2 +- .../scrapers/GamesDBJSONScraperResources.cpp | 7 +- .../scrapers/GamesDBJSONScraperResources.h | 4 +- es-app/src/scrapers/Scraper.h | 4 +- es-core/CMakeLists.txt | 2 +- es-core/src/InputManager.cpp | 18 +-- es-core/src/InputManager.h | 2 +- es-core/src/MameNames.cpp | 5 +- es-core/src/MameNames.h | 5 +- es-core/src/Scripting.cpp | 16 +-- es-core/src/Scripting.h | 6 +- es-core/src/Settings.cpp | 8 +- es-core/src/Settings.h | 2 +- es-core/src/ThemeData.cpp | 12 +- es-core/src/ThemeData.h | 2 +- es-core/src/resources/ResourceManager.cpp | 6 +- es-core/src/utils/FileSystemUtil.cpp | 32 ++++- es-core/src/utils/FileSystemUtil.h | 5 +- 32 files changed, 223 insertions(+), 203 deletions(-) diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 48a33fcff..ea5bfc162 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # CMakeLists.txt (es-app) # # CMake configuration for es-app diff --git a/es-app/src/ApplicationUpdater.cpp b/es-app/src/ApplicationUpdater.cpp index 49e2f77d9..eade0ca9b 100644 --- a/es-app/src/ApplicationUpdater.cpp +++ b/es-app/src/ApplicationUpdater.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ApplicationUpdater.cpp // // Checks for application updates. @@ -211,14 +211,14 @@ void ApplicationUpdater::parseFile() #if (LOCAL_TESTING_FILE) LOG(LogWarning) << "ApplicationUpdater: Using local \"latest_release.json\" testing file"; - const std::string localReleaseFile {Utils::FileSystem::getHomePath() + - "/.emulationstation/latest_release.json"}; + const std::filesystem::path localReleaseFile { + Utils::FileSystem::getAppDataDirectory().append("latest_release.json")}; - if (!Utils::FileSystem::exists(localReleaseFile)) + if (!Utils::FileSystem::existsSTD(localReleaseFile)) throw std::runtime_error("Local testing file not found"); const ResourceData& localReleaseFileData { - ResourceManager::getInstance().getFileData(localReleaseFile)}; + ResourceManager::getInstance().getFileData(localReleaseFile.string())}; doc.Parse(reinterpret_cast(localReleaseFileData.ptr.get()), localReleaseFileData.length); #else diff --git a/es-app/src/ApplicationUpdater.h b/es-app/src/ApplicationUpdater.h index 23b1bb48b..17e2ebd8a 100644 --- a/es-app/src/ApplicationUpdater.h +++ b/es-app/src/ApplicationUpdater.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ApplicationUpdater.h // // Checks for application updates. diff --git a/es-app/src/CollectionSystemsManager.cpp b/es-app/src/CollectionSystemsManager.cpp index 0f9491a15..ce98c16b9 100644 --- a/es-app/src/CollectionSystemsManager.cpp +++ b/es-app/src/CollectionSystemsManager.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // CollectionSystemsManager.cpp // // Manages collections of the following two types: @@ -1437,7 +1437,7 @@ std::vector CollectionSystemsManager::getSystemsFromConfig() std::vector configPaths {SystemData::getConfigPath()}; // Here we don't honor the tag which may be present in the custom es_systems.xml - // file under ~/.emulationstation/custom_systems as we really want to include all the themes + // file under /custom_systems as we really want to include all the themes // supported by ES-DE. Otherwise a user may accidentally create a custom collection that // corresponds to a supported theme. for (auto path : configPaths) { @@ -1625,6 +1625,5 @@ std::string CollectionSystemsManager::getCustomCollectionConfigPath( std::string CollectionSystemsManager::getCollectionsFolder() { - return Utils::FileSystem::getGenericPath(Utils::FileSystem::getHomePath() + - "/.emulationstation/collections"); + return Utils::FileSystem::getAppDataDirectory().append("collections").string(); } diff --git a/es-app/src/CollectionSystemsManager.h b/es-app/src/CollectionSystemsManager.h index 344fb969b..35162271e 100644 --- a/es-app/src/CollectionSystemsManager.h +++ b/es-app/src/CollectionSystemsManager.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // CollectionSystemsManager.h // // Manages collections of the following two types: diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 889b26b7e..57233f33a 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -152,6 +152,10 @@ const std::vector FileData::getChildrenRecursive() const const std::string FileData::getROMDirectory() { +#if defined(__ANDROID__) + return AndroidVariables::sROMDirectory.string(); +#endif + const std::string& romDirSetting {Settings::getInstance()->getString("ROMDirectory")}; std::string romDirPath; @@ -184,8 +188,9 @@ const std::string FileData::getMediaDirectory() const std::string& mediaDirSetting {Settings::getInstance()->getString("MediaDirectory")}; std::string mediaDirPath; - if (mediaDirSetting == "") { - mediaDirPath = Utils::FileSystem::getHomePath() + "/.emulationstation/downloaded_media/"; + if (mediaDirSetting.empty()) { + mediaDirPath = + Utils::FileSystem::getAppDataDirectory().append("downloaded_media").string() + "/"; } else { mediaDirPath = mediaDirSetting; diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 12f1c390a..43f419555 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // SystemData.cpp // // Provides data structures for the game systems and populates and indexes them based @@ -41,11 +41,11 @@ FindRules::FindRules() void FindRules::loadFindRules() { - std::vector paths; - std::string filePath {Utils::FileSystem::getHomePath() + "/.emulationstation/custom_systems" + - "/es_find_rules.xml"}; - - if (Utils::FileSystem::exists(filePath)) { + std::vector paths; + std::filesystem::path filePath {Utils::FileSystem::getAppDataDirectory() + .append("custom_systems") + .append("es_find_rules.xml")}; + if (Utils::FileSystem::existsSTD(filePath)) { paths.emplace_back(filePath); LOG(LogInfo) << "Found custom find rules configuration file"; } @@ -64,28 +64,28 @@ void FindRules::loadFindRules() ResourceManager::getInstance().getResourcePath(":/systems/unix/es_find_rules.xml", false); #endif - if (filePath == "" && paths.empty()) { + if (filePath.empty() && paths.empty()) { LOG(LogWarning) << "No find rules configuration file found"; return; } - if (filePath != "") + if (!filePath.empty()) paths.emplace_back(filePath); for (auto& path : paths) { #if defined(_WIN64) LOG(LogInfo) << "Parsing find rules configuration file \"" - << Utils::String::replace(path, "/", "\\") << "\"..."; + << Utils::String::replace(path.string(), "/", "\\") << "\"..."; #else - LOG(LogInfo) << "Parsing find rules configuration file \"" << path << "\"..."; + LOG(LogInfo) << "Parsing find rules configuration file \"" << path.string() << "\"..."; #endif pugi::xml_document doc; #if defined(_WIN64) const pugi::xml_parse_result& res { - doc.load_file(Utils::String::stringToWideString(path).c_str())}; + doc.load_file(Utils::String::stringToWideString(path.string()).c_str())}; #else - const pugi::xml_parse_result& res {doc.load_file(path.c_str())}; + const pugi::xml_parse_result& res {doc.load_file(path.string().c_str())}; #endif if (!res) { LOG(LogError) << "Couldn't parse es_find_rules.xml: " << res.description(); @@ -848,10 +848,10 @@ bool SystemData::loadConfig() void SystemData::loadSortingConfig() { const std::string sortSetting {Settings::getInstance()->getString("SystemsSorting")}; - const std::string customFilePath {Utils::FileSystem::getHomePath() + - "/.emulationstation/custom_systems" + - "/es_systems_sorting.xml"}; - const bool customFileExists {Utils::FileSystem::exists(customFilePath)}; + const std::filesystem::path customFilePath {Utils::FileSystem::getAppDataDirectory() + .append("custom_systems") + .append("es_systems_sorting.xml")}; + const bool customFileExists {Utils::FileSystem::existsSTD(customFilePath)}; std::string path; bool bundledFile {false}; @@ -882,10 +882,10 @@ void SystemData::loadSortingConfig() "bundled file has been selected"; } else if (!bundledFile && customFileExists) { - path = customFilePath; + path = customFilePath.string(); } - if (path == "") { + if (path.empty()) { LOG(LogDebug) << "No systems sorting file loaded"; return; } @@ -957,18 +957,19 @@ std::vector SystemData::getConfigPath() { std::vector paths; - const std::string& customSystemsDirectory {Utils::FileSystem::getHomePath() + - "/.emulationstation/custom_systems"}; + const std::filesystem::path customSystemsDirectory { + Utils::FileSystem::getAppDataDirectory().append("custom_systems")}; - if (!Utils::FileSystem::exists(customSystemsDirectory)) { - LOG(LogInfo) << "Creating custom systems directory \"" << customSystemsDirectory << "\"..."; - Utils::FileSystem::createDirectory(customSystemsDirectory); - if (!Utils::FileSystem::exists(customSystemsDirectory)) { + if (!Utils::FileSystem::existsSTD(customSystemsDirectory)) { + LOG(LogInfo) << "Creating custom systems directory \"" << customSystemsDirectory.string() + << "\"..."; + Utils::FileSystem::createDirectory(customSystemsDirectory.string()); + if (!Utils::FileSystem::existsSTD(customSystemsDirectory)) { LOG(LogError) << "Couldn't create directory, permission problems?"; } } - std::string path {customSystemsDirectory + "/es_systems.xml"}; + std::string path {customSystemsDirectory.string() + "/es_systems.xml"}; if (Utils::FileSystem::exists(path)) { LOG(LogInfo) << "Found custom systems configuration file"; @@ -1307,36 +1308,36 @@ SystemData* SystemData::getPrev() const std::string SystemData::getGamelistPath(bool forWrite) const { - std::string filePath {mRootFolder->getPath() + "/gamelist.xml"}; - const std::string gamelistPath {Utils::FileSystem::getHomePath() + - "/.emulationstation/gamelists/" + mName}; + std::filesystem::path filePath {mRootFolder->getPath() + "/gamelist.xml"}; + const std::filesystem::path gamelistPath { + Utils::FileSystem::getAppDataDirectory().append("gamelists").append(mName)}; - if (Utils::FileSystem::exists(filePath)) { + if (Utils::FileSystem::existsSTD(filePath)) { if (Settings::getInstance()->getBool("LegacyGamelistFileLocation")) { - return filePath; + return filePath.string(); } else { #if defined(_WIN64) LOG(LogWarning) << "Found a gamelist.xml file in \"" << Utils::String::replace(mRootFolder->getPath(), "/", "\\") << "\\\" which will not get loaded, move it to \"" - << Utils::String::replace(gamelistPath, "/", "\\") - << "\\\" or otherwise delete it"; + << gamelistPath.string() << "\\\" or otherwise delete it"; #else LOG(LogWarning) << "Found a gamelist.xml file in \"" << mRootFolder->getPath() - << "/\" which will not get loaded, move it to \"" << gamelistPath - << "/\" or otherwise delete it"; + << "/\" which will not get loaded, move it to \"" + << gamelistPath.string() << "/\" or otherwise delete it"; #endif } } - filePath = gamelistPath + "/gamelist.xml"; + filePath = gamelistPath; + filePath.append("gamelist.xml"); // Make sure the directory exists if we're going to write to it, or crashes will happen. if (forWrite) - Utils::FileSystem::createDirectory(Utils::FileSystem::getParent(filePath)); - if (forWrite || Utils::FileSystem::exists(filePath)) - return filePath; + Utils::FileSystem::createDirectory(Utils::FileSystem::getParent(filePath.string())); + if (forWrite || Utils::FileSystem::existsSTD(filePath)) + return filePath.string(); return ""; } diff --git a/es-app/src/SystemData.h b/es-app/src/SystemData.h index d352b27d8..53b636213 100644 --- a/es-app/src/SystemData.h +++ b/es-app/src/SystemData.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // SystemData.h // // Provides data structures for the game systems and populates and indexes them based diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 8eff03a15..09a6806d5 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiMenu.cpp // // Main menu. @@ -1183,7 +1183,8 @@ void GuiMenu::openOtherOptions() rowMediaDir.addElement(bracketMediaDirectory, false); std::string titleMediaDir {"ENTER GAME MEDIA DIRECTORY"}; std::string mediaDirectoryStaticText {"Default directory:"}; - std::string defaultDirectoryText {"~/.emulationstation/downloaded_media/"}; + std::string defaultDirectoryText { + Utils::FileSystem::getAppDataDirectory().append("downloaded_media").string()}; std::string initValueMediaDir {Settings::getInstance()->getString("MediaDirectory")}; bool multiLineMediaDir {false}; auto updateValMediaDir = [this](const std::string& newVal) { diff --git a/es-app/src/guis/GuiMenu.h b/es-app/src/guis/GuiMenu.h index 924f92137..1c2db4d7c 100644 --- a/es-app/src/guis/GuiMenu.h +++ b/es-app/src/guis/GuiMenu.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiMenu.h // // Main menu. diff --git a/es-app/src/guis/GuiThemeDownloader.cpp b/es-app/src/guis/GuiThemeDownloader.cpp index 018d4ac52..c734b638c 100644 --- a/es-app/src/guis/GuiThemeDownloader.cpp +++ b/es-app/src/guis/GuiThemeDownloader.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiThemeDownloader.cpp // // Theme downloader. @@ -174,28 +174,33 @@ GuiThemeDownloader::GuiThemeDownloader(std::function updateCallback) std::promise().swap(mPromise); mFuture = mPromise.get_future(); - const std::string defaultUserThemeDir {Utils::FileSystem::getHomePath() + - "/.emulationstation/themes"}; - std::string userThemeDirSetting {Utils::FileSystem::expandHomePath( +#if defined(__ANDROID__) + mThemeDirectory = Utils::FileSystem::getInternalAppDataDirectory().append("themes").string(); +#else + const std::filesystem::path defaultUserThemeDir { + Utils::FileSystem::getAppDataDirectory().append("themes")}; + const std::filesystem::path userThemeDirSetting {Utils::FileSystem::expandHomePath( Settings::getInstance()->getString("UserThemeDirectory"))}; + #if defined(_WIN64) mThemeDirectory = Utils::String::replace(mThemeDirectory, "\\", "/"); #endif - if (userThemeDirSetting == "") { - mThemeDirectory = defaultUserThemeDir; + if (userThemeDirSetting.empty()) { + mThemeDirectory = defaultUserThemeDir.string(); } - else if (Utils::FileSystem::isDirectory(userThemeDirSetting) || - Utils::FileSystem::isSymlink(userThemeDirSetting)) { - mThemeDirectory = userThemeDirSetting; + else if (Utils::FileSystem::isDirectorySTD(userThemeDirSetting) || + Utils::FileSystem::isSymlinkSTD(userThemeDirSetting)) { + mThemeDirectory = userThemeDirSetting.string(); } else { LOG(LogWarning) << "GuiThemeDownloader: Requested user theme directory \"" - << userThemeDirSetting + << userThemeDirSetting.string() << "\" does not exist or is not a directory, reverting to \"" - << defaultUserThemeDir << "\""; - mThemeDirectory = defaultUserThemeDir; + << defaultUserThemeDir.string() << "\""; + mThemeDirectory = defaultUserThemeDir.string(); } +#endif // __ANDROID__ if (mThemeDirectory.back() != '/') mThemeDirectory.append("/"); @@ -588,8 +593,8 @@ void GuiThemeDownloader::parseThemesList() #if (LOCAL_TESTING_FILE) LOG(LogWarning) << "GuiThemeDownloader: Using local \"themes.json\" testing file"; - const std::string themesFile {Utils::FileSystem::getHomePath() + - "/.emulationstation/themes.json"}; + const std::string themesFile { + Utils::FileSystem::getAppDataDirectory().append("themes.json").string()}; #else const std::string themesFile {mThemeDirectory + "themes-list/themes.json"}; #endif diff --git a/es-app/src/guis/GuiThemeDownloader.h b/es-app/src/guis/GuiThemeDownloader.h index c8bbec35e..ce1e8dd18 100644 --- a/es-app/src/guis/GuiThemeDownloader.h +++ b/es-app/src/guis/GuiThemeDownloader.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiThemeDownloader.h // // Theme downloader. diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 7681547de..446d66c6f 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -441,25 +441,21 @@ bool parseArguments(const std::vector& arguments) return true; } -bool checkApplicationHomeDirectory() +bool checkApplicationDataDirectory() { - // Check that the application home directory exists, otherwise create it. - std::string home {Utils::FileSystem::getHomePath()}; - std::string applicationHome {home + "/.emulationstation"}; - if (!Utils::FileSystem::exists(applicationHome)) { -#if defined(_WIN64) - std::cout << "First startup, creating application home directory \"" - << Utils::String::replace(applicationHome, "/", "\\") << "\"\n"; -#elif defined(__ANDROID__) + // Check that the application data directory exists, otherwise create it. + const std::filesystem::path applicationData {Utils::FileSystem::getAppDataDirectory()}; + if (!Utils::FileSystem::existsSTD(applicationData)) { +#if defined(__ANDROID__) __android_log_print(ANDROID_LOG_VERBOSE, ANDROID_APPLICATION_ID, - "First startup, creating application home directory \"%s\"", - applicationHome.c_str()); + "First startup, creating application data directory \"%s\"", + applicationData.string().c_str()); #else - std::cout << "First startup, creating application home directory \"" << applicationHome - << "\"\n"; + std::cout << "First startup, creating application data directory \"" + << applicationData.string() << "\"\n"; #endif - Utils::FileSystem::createDirectory(applicationHome); - if (!Utils::FileSystem::exists(applicationHome)) { + Utils::FileSystem::createDirectory(applicationData.string()); + if (!Utils::FileSystem::existsSTD(applicationData)) { #if defined(__ANDROID__) __android_log_print(ANDROID_LOG_ERROR, ANDROID_APPLICATION_ID, "Error: Couldn't create directory, permission problems?"); @@ -535,6 +531,10 @@ int main(int argc, char* argv[]) std::locale::global(std::locale("C")); +#if defined(__ANDROID__) + Utils::Platform::Android::setDataDirectories(); +#endif + #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 @@ -590,8 +590,8 @@ int main(int argc, char* argv[]) FreeImage_Initialise(); #endif - // If ~/.emulationstation doesn't exist and cannot be created, bail. - if (!checkApplicationHomeDirectory()) + // If the application data directory doesn't exist and can't be created, then exit. + if (!checkApplicationDataDirectory()) return 1; // Start the logger. @@ -632,8 +632,8 @@ int main(int argc, char* argv[]) // Check if the configuration file exists, and if not, create it. // This should only happen on first application startup. - if (!Utils::FileSystem::exists(Utils::FileSystem::getHomePath() + - "/.emulationstation/es_settings.xml")) { + if (!Utils::FileSystem::existsSTD( + Utils::FileSystem::getAppDataDirectory().append("es_settings.xml"))) { LOG(LogInfo) << "Settings file es_settings.xml does not exist, creating it..."; Settings::getInstance()->saveFile(); } @@ -659,63 +659,60 @@ int main(int argc, char* argv[]) Settings::getInstance()->saveFile(); } - // Create the gamelists directory in the application home folder. - const std::string gamelistsDir {Utils::FileSystem::getHomePath() + - "/.emulationstation/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)) { + // Create the gamelists folder in the application data directory. + const std::filesystem::path gamelistsDir { + Utils::FileSystem::getAppDataDirectory().append("gamelists")}; + if (!Utils::FileSystem::existsSTD(gamelistsDir)) { + LOG(LogInfo) << "Creating gamelists directory \"" << gamelistsDir.string() << "\"..."; + Utils::FileSystem::createDirectory(gamelistsDir.string()); + if (!Utils::FileSystem::existsSTD(gamelistsDir)) { LOG(LogWarning) << "Couldn't create directory, permission problems?\n"; } } - // Create the themes directory in the application home directory (or elsewhere if the - // UserThemeDirectory setting has been defined). - const std::string defaultUserThemeDir {Utils::FileSystem::getHomePath() + - "/.emulationstation/themes"}; - std::string userThemeDirSetting {Utils::FileSystem::expandHomePath( - Settings::getInstance()->getString("UserThemeDirectory"))}; -#if defined(_WIN64) - userThemeDirSetting = Utils::String::replace(userThemeDirSetting, "\\", "/"); -#endif - std::string userThemeDirectory; +#if defined(__ANDROID__) + const std::filesystem::path themeDir { + Utils::FileSystem::getAppDataDirectory().append("themes")}; + if (!Utils::FileSystem::existsSTD(themeDir)) { + LOG(LogInfo) << "Creating themes directory \"" << themeDir.string() << "\"..."; - if (userThemeDirSetting == "") + Utils::FileSystem::createDirectory(themeDir.string()); + if (!Utils::FileSystem::existsSTD(themeDir)) { + LOG(LogWarning) << "Couldn't create directory, permission problems?"; + } + } +#else + // Create the themes folder in the application data directory (or elsewhere if the + // UserThemeDirectory setting has been defined). + const std::filesystem::path defaultUserThemeDir { + Utils::FileSystem::getAppDataDirectory().append("themes")}; + std::filesystem::path userThemeDirSetting {Utils::FileSystem::expandHomePath( + Settings::getInstance()->getString("UserThemeDirectory"))}; + std::filesystem::path userThemeDirectory; + + if (userThemeDirSetting.empty()) userThemeDirectory = defaultUserThemeDir; else userThemeDirectory = userThemeDirSetting; - if (!Utils::FileSystem::exists(userThemeDirectory)) { -#if defined(_WIN64) - LOG(LogInfo) << "Creating user theme directory \"" - << Utils::String::replace(userThemeDirectory, "/", "\\") << "\"..."; -#else - LOG(LogInfo) << "Creating themes directory \"" << userThemeDirectory << "\"..."; -#endif - Utils::FileSystem::createDirectory(userThemeDirectory); - if (!Utils::FileSystem::exists(userThemeDirectory)) { + if (!Utils::FileSystem::existsSTD(userThemeDirectory)) { + LOG(LogInfo) << "Creating themes directory \"" << userThemeDirectory.string() << "\"..."; + + Utils::FileSystem::createDirectory(userThemeDirectory.string()); + if (!Utils::FileSystem::existsSTD(userThemeDirectory)) { LOG(LogWarning) << "Couldn't create directory, permission problems?"; } } - - // Create the scripts directory in the application home folder. This is only required - // for custom event scripts so it's also created as a convenience. - const std::string scriptsDir {Utils::FileSystem::getHomePath() + "/.emulationstation/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)) { + + // Create the scripts folder in the application data directory. This is only required + // for custom event scripts so it's also created as a convenience. + const std::filesystem::path scriptsDir { + Utils::FileSystem::getAppDataDirectory().append("scripts")}; + if (!Utils::FileSystem::existsSTD(scriptsDir)) { + LOG(LogInfo) << "Creating scripts directory \"" << scriptsDir.string() << "\"..."; + Utils::FileSystem::createDirectory(scriptsDir.string()); + if (!Utils::FileSystem::existsSTD(scriptsDir)) { LOG(LogWarning) << "Couldn't create directory, permission problems?\n"; } } @@ -740,7 +737,6 @@ int main(int argc, char* argv[]) LOG(LogDebug) << "Android storage state: " << SDL_AndroidGetExternalStorageState(); LOG(LogDebug) << "Android internal path: " << SDL_AndroidGetInternalStoragePath(); LOG(LogDebug) << "Android external path: " << SDL_AndroidGetExternalStoragePath(); - Utils::Platform::Android::setPrivateDataDirectory(); { std::string buildIdentifier {PROGRAM_VERSION_STRING}; buildIdentifier.append(" (r") @@ -801,14 +797,7 @@ int main(int argc, char* argv[]) #if defined(__ANDROID__) Utils::Platform::Android::requestStoragePermission(); - - const std::string storageDir {"/sdcard/ES-DE"}; - if (!Utils::FileSystem::exists(storageDir)) { - LOG(LogInfo) << "Creating data directory \"" << storageDir << "\"..."; - if (!Utils::FileSystem::createDirectory(storageDir)) { - LOG(LogError) << "Couldn't create directory, permission problems?"; - } - } + Utils::Platform::Android::setROMDirectory(); #endif MameNames::getInstance(); diff --git a/es-app/src/scrapers/GamesDBJSONScraper.cpp b/es-app/src/scrapers/GamesDBJSONScraper.cpp index 2e6257c51..31525bd3b 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraper.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GamesDBJSONScraper.cpp // // Functions specifically for scraping from thegamesdb.net diff --git a/es-app/src/scrapers/GamesDBJSONScraper.h b/es-app/src/scrapers/GamesDBJSONScraper.h index fedba2ecd..e5c952077 100644 --- a/es-app/src/scrapers/GamesDBJSONScraper.h +++ b/es-app/src/scrapers/GamesDBJSONScraper.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GamesDBJSONScraper.h // // Functions specifically for scraping from thegamesdb.net diff --git a/es-app/src/scrapers/GamesDBJSONScraperResources.cpp b/es-app/src/scrapers/GamesDBJSONScraperResources.cpp index 161c30cd9..e68198344 100644 --- a/es-app/src/scrapers/GamesDBJSONScraperResources.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraperResources.cpp @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GamesDBJSONScraperResources.cpp // // Functions specifically for scraping from thegamesdb.net // Called from GamesDBJSONScraper. // -// Downloads these resource files to ~/.emulationstation/scrapers: +// Downloads these resource files to the scrapers folder in the application data directory: // gamesdb_developers.json // gamesdb_genres.json // gamesdb_publishers.json @@ -64,8 +64,7 @@ namespace std::string getScrapersResouceDir() { - return Utils::FileSystem::getGenericPath(Utils::FileSystem::getHomePath() + - "/.emulationstation/" + SCRAPER_RESOURCES_DIR); + return Utils::FileSystem::getAppDataDirectory().append(SCRAPER_RESOURCES_DIR).string(); } std::string TheGamesDBJSONRequestResources::getApiKey() const { return GamesDBAPIKey; } diff --git a/es-app/src/scrapers/GamesDBJSONScraperResources.h b/es-app/src/scrapers/GamesDBJSONScraperResources.h index 631b85cc6..e567aa364 100644 --- a/es-app/src/scrapers/GamesDBJSONScraperResources.h +++ b/es-app/src/scrapers/GamesDBJSONScraperResources.h @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GamesDBJSONScraperResources.h // // Functions specifically for scraping from thegamesdb.net // Called from GamesDBJSONScraper. // -// Downloads these resource files to ~/.emulationstation/scrapers: +// Downloads these resource files to the scrapers folder in the application data directory: // gamesdb_developers.json // gamesdb_genres.json // gamesdb_publishers.json diff --git a/es-app/src/scrapers/Scraper.h b/es-app/src/scrapers/Scraper.h index d0e105877..660f4bd9b 100644 --- a/es-app/src/scrapers/Scraper.h +++ b/es-app/src/scrapers/Scraper.h @@ -212,8 +212,8 @@ private: bool* mSavedNewMediaPtr; }; -// Downloads to the home directory, using this subdirectory structure: -// ".emulationstation/downloaded_media/[system_name]/[media_type]/[game_name].[file_extension]". +// Downloads media using this subdirectory structure: +// /downloaded_media///. // The subdirectories are automatically created if they do not exist. std::string getSaveAsPath(const ScraperSearchParams& params, const std::string& filetypeSubdirectory, diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 9f60146f7..09a3852dd 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # CMakeLists.txt (es-core) # # CMake configuration for es-core diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index ef18b33dc..a9c38f176 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // InputManager.cpp // // Low-level input handling. @@ -86,14 +86,14 @@ void InputManager::init() // the bundled mapping is incorrect, or the SDL version is a bit older, it makes sense to be // able to customize this. If a controller GUID is present in the mappings file that is // already present inside SDL, the custom mapping will overwrite the bundled one. - std::string mappingsFile {Utils::FileSystem::getHomePath() + "/.emulationstation/" + - "es_controller_mappings.cfg"}; + std::filesystem::path mappingsFile { + Utils::FileSystem::getAppDataDirectory().append("es_controller_mappings.cfg")}; - if (!Utils::FileSystem::exists(mappingsFile)) + if (!Utils::FileSystem::existsSTD(mappingsFile)) mappingsFile = ResourceManager::getInstance().getResourcePath( ":/controllers/es_controller_mappings.cfg"); - int controllerMappings {SDL_GameControllerAddMappingsFromFile(mappingsFile.c_str())}; + int controllerMappings {SDL_GameControllerAddMappingsFromFile(mappingsFile.string().c_str())}; if (controllerMappings != -1 && controllerMappings != 0) { LOG(LogInfo) << "Loaded " << controllerMappings << " controller " @@ -255,16 +255,12 @@ void InputManager::doOnFinish() std::string InputManager::getConfigPath() { - std::string path {Utils::FileSystem::getHomePath()}; - path.append("/.emulationstation/es_input.xml"); - return path; + return Utils::FileSystem::getAppDataDirectory().append("es_input.xml").string(); } std::string InputManager::getTemporaryConfigPath() { - std::string path {Utils::FileSystem::getHomePath()}; - path.append("/.emulationstation/es_temporaryinput.xml"); - return path; + return Utils::FileSystem::getAppDataDirectory().append("es_temporaryinput.xml").string(); } int InputManager::getNumConfiguredDevices() diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index d68fa0b53..0814e5136 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // InputManager.h // // Low-level input handling. diff --git a/es-core/src/MameNames.cpp b/es-core/src/MameNames.cpp index 39e9a2725..6c1683a60 100644 --- a/es-core/src/MameNames.cpp +++ b/es-core/src/MameNames.cpp @@ -1,12 +1,11 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // MameNames.cpp // // Provides expanded game names based on short MAME name arguments. Also contains // functions to check whether a passed argument is a MAME BIOS or a MAME device. -// The data sources are stored in the .emulationstation/resources directory -// as the files mamebioses.xml, mamedevices.xml and mamenames.xml. +// The data sources are stored as the files mamebioses.xml, mamedevices.xml and mamenames.xml. // #include "MameNames.h" diff --git a/es-core/src/MameNames.h b/es-core/src/MameNames.h index 144017010..051de283e 100644 --- a/es-core/src/MameNames.h +++ b/es-core/src/MameNames.h @@ -1,12 +1,11 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // MameNames.h // // Provides expanded game names based on short MAME name arguments. Also contains // functions to check whether a passed argument is a MAME BIOS or a MAME device. -// The data sources are stored in the .emulationstation/resources directory -// as the files mamebioses.xml, mamedevices.xml and mamenames.xml. +// The data sources are stored as the files mamebioses.xml, mamedevices.xml and mamenames.xml. // #ifndef ES_CORE_MAMENAMES_H diff --git a/es-core/src/Scripting.cpp b/es-core/src/Scripting.cpp index a34eab10a..4c32ff35f 100644 --- a/es-core/src/Scripting.cpp +++ b/es-core/src/Scripting.cpp @@ -1,15 +1,15 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Scripting.cpp // // Executes custom scripts for various events. // By calling fireEvent() the scripts inside the directory corresponding to the // argument "eventName" will be executed with arg1, arg2, arg3 and arg4 as arguments. // -// The scripts are searched for in ~/.emulationstation/scripts/ +// The scripts are searched for in /scripts/ // For example, if the event is called "game-start", all scripts inside the directory -// ~/.emulationstation/scripts/game-start/ will be executed. +// /scripts/game-start/ will be executed. // #include "Scripting.h" @@ -37,12 +37,12 @@ namespace Scripting << "\" \"" << arg3 << "\" \"" << arg4 << "\""; std::list scriptDirList; - std::string scriptDir; + std::filesystem::path scriptDir; - // Check in homepath. - scriptDir = Utils::FileSystem::getHomePath() + "/.emulationstation/scripts/" + eventName; - if (Utils::FileSystem::exists(scriptDir)) - scriptDirList.push_back(scriptDir); + // Check in application data directory. + scriptDir = Utils::FileSystem::getAppDataDirectory().append("scripts").append(eventName); + if (Utils::FileSystem::existsSTD(scriptDir)) + scriptDirList.push_back(scriptDir.string()); for (auto dirIt = scriptDirList.cbegin(); dirIt != scriptDirList.cend(); ++dirIt) { std::list scripts {Utils::FileSystem::getDirContent(*dirIt)}; diff --git a/es-core/src/Scripting.h b/es-core/src/Scripting.h index 30f5c6e21..ff88be1c2 100644 --- a/es-core/src/Scripting.h +++ b/es-core/src/Scripting.h @@ -1,15 +1,15 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Scripting.h // // Executes custom scripts for various events. // By calling fireEvent() the scripts inside the directory corresponding to the // argument "eventName" will be executed with arg1, arg2, arg3 and arg4 as arguments. // -// The scripts are searched for in ~/.emulationstation/scripts/ +// The scripts are searched for in /scripts/ // For example, if the event is called "game-start", all scripts inside the directory -// ~/.emulationstation/scripts/game-start/ will be executed. +// /scripts/game-start/ will be executed. // #ifndef ES_CORE_SCRIPTING_H diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 2ee7f741e..0874f607d 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Settings.cpp // // Functions to read from and write to the configuration file es_settings.xml. @@ -326,7 +326,9 @@ void Settings::setDefaults() mBoolMap["DebugSkipMissingThemeFilesCustomCollections"] = {true, true}; mBoolMap["LegacyGamelistFileLocation"] = {false, false}; mStringMap["OpenGLVersion"] = {"", ""}; +#if !defined(__ANDROID__) mStringMap["ROMDirectory"] = {"", ""}; +#endif mStringMap["UIMode_passkey"] = {"uuddlrlrba", "uuddlrlrba"}; mStringMap["UserThemeDirectory"] = {"", ""}; mIntMap["LottieMaxFileCache"] = {150, 150}; @@ -364,7 +366,7 @@ void Settings::saveFile() { LOG(LogDebug) << "Settings::saveFile(): Saving settings to es_settings.xml"; const std::filesystem::path path { - Utils::FileSystem::getESDataDirectory().append("es_settings.xml")}; + Utils::FileSystem::getAppDataDirectory().append("es_settings.xml")}; pugi::xml_document doc; @@ -395,7 +397,7 @@ void Settings::saveFile() void Settings::loadFile() { std::filesystem::path configFile { - Utils::FileSystem::getESDataDirectory().append("es_settings.xml")}; + Utils::FileSystem::getAppDataDirectory().append("es_settings.xml")}; if (!Utils::FileSystem::existsSTD(configFile)) return; diff --git a/es-core/src/Settings.h b/es-core/src/Settings.h index c35d871a2..90b175f2c 100644 --- a/es-core/src/Settings.h +++ b/es-core/src/Settings.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Settings.h // // Functions to read from and write to the configuration file es_settings.xml. diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 23f55aa6c..52a1f99af 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ThemeData.cpp // // Finds available themes on the file system and loads and parses these. @@ -667,8 +667,12 @@ void ThemeData::populateThemes() // Check for themes first under the user theme directory (which is in the ES-DE home directory // by default), then under the data installation directory (Unix only) and last under the ES-DE // binary directory. +#if defined(__ANDROID__) + const std::filesystem::path userThemeDirectory { + Utils::FileSystem::getInternalAppDataDirectory().append("themes")}; +#else const std::filesystem::path defaultUserThemeDir { - Utils::FileSystem::getESDataDirectory().append("themes")}; + Utils::FileSystem::getAppDataDirectory().append("themes")}; const std::filesystem::path userThemeDirSetting {Utils::FileSystem::expandHomePath( Settings::getInstance()->getString("UserThemeDirectory"))}; std::filesystem::path userThemeDirectory; @@ -687,10 +691,12 @@ void ThemeData::populateThemes() << defaultUserThemeDir.string() << "\""; userThemeDirectory = defaultUserThemeDir; } +#endif #if defined(__ANDROID__) const std::vector themePaths { - Utils::FileSystem::getProgramDataPath().append("themes"), userThemeDirectory}; + Utils::FileSystem::getProgramDataPath().append("themes"), userThemeDirectory, + Utils::FileSystem::getAppDataDirectory().append("themes")}; #elif defined(__APPLE__) const std::vector themePaths { Utils::FileSystem::getExePathSTD().append("themes"), diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 7574b0712..3a9ff783e 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ThemeData.h // // Finds available themes on the file system and loads and parses these. diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index 7c8b86eac..941e89c1e 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ResourceManager.cpp // // Handles the application resources (fonts, graphics, sounds etc.). @@ -28,8 +28,8 @@ std::string ResourceManager::getResourcePath(const std::string& path, bool termi if ((path[0] == ':') && (path[1] == '/')) { // Check under the home directory. - std::string testHome {Utils::FileSystem::getHomePath() + "/.emulationstation/resources/" + - &path[2]}; + std::string testHome { + Utils::FileSystem::getAppDataDirectory().append("resources").string() + "/" + &path[2]}; if (Utils::FileSystem::exists(testHome)) return testHome; diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 7f62ebed5..2f305df31 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // FileSystemUtil.cpp // // Low-level filesystem functions. @@ -198,6 +198,11 @@ namespace Utils if (homePath.length()) return homePath; +#if defined(__ANDROID__) + homePath = AndroidVariables::sAppDataDirectory; + return homePath; +#endif + #if defined(_WIN64) // On Windows we need to check HOMEDRIVE and HOMEPATH. if (!homePath.length()) { @@ -241,6 +246,11 @@ namespace Utils if (!homePathSTD.empty()) return homePathSTD; +#if defined(__ANDROID__) + homePathSTD = + std::filesystem::path {getGenericPath(AndroidVariables::sAppDataDirectory)}; + return homePathSTD; +#endif #if defined(_WIN64) // On Windows we need to check HOMEDRIVE and HOMEPATH. std::wstring envHomeDrive; @@ -261,7 +271,6 @@ namespace Utils } #else - std::string envHome; if (getenv("HOME") != nullptr) envHome = getenv("HOME"); @@ -304,15 +313,24 @@ namespace Utils return ""; } - std::filesystem::path getESDataDirectory() + std::filesystem::path getAppDataDirectory() { #if defined(__ANDROID__) - return getHomePathSTD().append(".emulationstation"); + return getHomePathSTD(); #else return getHomePathSTD().append(".emulationstation"); #endif } + std::filesystem::path getInternalAppDataDirectory() + { +#if defined(__ANDROID__) + return AndroidVariables::sExternalDataDirectory; +#else + return std::filesystem::path {}; +#endif + } + std::string getPathToBinary(const std::string& executable) { #if defined(_WIN64) @@ -332,8 +350,8 @@ namespace Utils // Using a temporary file is the only viable solution I've found to communicate // between the sandbox and the outside world. - const std::string& tempFile {Utils::FileSystem::getHomePath() + "/.emulationstation/" + - ".flatpak_emulator_binary_path.tmp"}; + const std::string tempFile {Utils::FileSystem::getAppDataDirectory().string() + + ".flatpak_emulator_binary_path.tmp"}; std::string emulatorPath; @@ -440,7 +458,7 @@ namespace Utils std::filesystem::path getProgramDataPath() { #if defined(__ANDROID__) - return AndroidVariables::sPrivateDataDirectory; + return AndroidVariables::sInternalDataDirectory; #elif defined(__unix__) return std::filesystem::path {installPrefix}.append("share").append("emulationstation"); #else diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index 89152f589..eb382c6d6 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // FileSystemUtil.h // // Low-level filesystem functions. @@ -30,7 +30,8 @@ namespace Utils std::string getHomePath(); std::filesystem::path getHomePathSTD(); std::string getSystemHomeDirectory(); - std::filesystem::path getESDataDirectory(); + std::filesystem::path getAppDataDirectory(); + std::filesystem::path getInternalAppDataDirectory(); std::string getPathToBinary(const std::string& executable); void setExePath(const std::string& path); std::string getExePath(); From 03e9035b7eefa00fec33952b28e751f027342413 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 15 Dec 2023 18:35:02 +0100 Subject: [PATCH 050/320] Changed Log to set the log path once on application startup --- es-core/src/Log.cpp | 14 +++++--------- es-core/src/Log.h | 2 +- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/es-core/src/Log.cpp b/es-core/src/Log.cpp index b3a4dd149..fe0ae4eff 100644 --- a/es-core/src/Log.cpp +++ b/es-core/src/Log.cpp @@ -22,16 +22,12 @@ void Log::setReportingLevel(LogLevel level) sReportingLevel = level; } -std::string Log::getLogPath() -{ - return Utils::FileSystem::getHomePath() + "/.emulationstation/es_log.txt"; -} - void Log::init() { - Utils::FileSystem::removeFile(getLogPath() + ".bak"); + sLogPath = Utils::FileSystem::getAppDataDirectory().append("es_log.txt"); + Utils::FileSystem::removeFile(sLogPath.string() + ".bak"); // Rename the previous log file. - Utils::FileSystem::renameFile(getLogPath(), getLogPath() + ".bak", true); + Utils::FileSystem::renameFile(sLogPath.string(), sLogPath.string() + ".bak", true); return; } @@ -39,9 +35,9 @@ void Log::open() { std::unique_lock lock {sLogMutex}; #if defined(_WIN64) - sFile.open(Utils::String::stringToWideString(getLogPath()).c_str()); + sFile.open(Utils::String::stringToWideString(sLogPath.string()).c_str()); #else - sFile.open(getLogPath().c_str()); + sFile.open(sLogPath.string().c_str()); #endif } diff --git a/es-core/src/Log.h b/es-core/src/Log.h index 41e1f1f1c..487eb404c 100644 --- a/es-core/src/Log.h +++ b/es-core/src/Log.h @@ -47,7 +47,6 @@ public: static void setReportingLevel(LogLevel level); // These functions are not thread safe. - static std::string getLogPath(); static void init(); static void open(); @@ -66,6 +65,7 @@ private: static inline std::ofstream sFile; static inline LogLevel sReportingLevel = LogInfo; static inline std::mutex sLogMutex; + static inline std::filesystem::path sLogPath; LogLevel mMessageLevel; }; From 6b0bfbfc0980717dac8f937dfe1a56c8c559b2e8 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 15 Dec 2023 22:35:28 +0100 Subject: [PATCH 051/320] Changed to a new application data directory structure --- es-app/src/main.cpp | 202 ++++++++++++------ .../scrapers/GamesDBJSONScraperResources.cpp | 6 +- es-core/src/InputManager.cpp | 33 ++- es-core/src/Log.cpp | 7 +- es-core/src/Settings.cpp | 31 ++- es-core/src/utils/FileSystemUtil.cpp | 16 +- es-core/src/utils/FileSystemUtil.h | 6 + 7 files changed, 218 insertions(+), 83 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 446d66c6f..c26cf6d5d 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -594,6 +594,32 @@ int main(int argc, char* argv[]) if (!checkApplicationDataDirectory()) return 1; + { + if (!Settings::getInstance()->getBool("LegacyAppDataDirectory")) { + // Create the logs folder in the application data directory. + const std::filesystem::path logsDir { + Utils::FileSystem::getAppDataDirectory().append("logs")}; + if (!Utils::FileSystem::isDirectorySTD(logsDir)) { +#if defined(__ANDROID__) + __android_log_print(ANDROID_LOG_VERBOSE, ANDROID_APPLICATION_ID, + "Creating logs directory \"%s\"...", logsDir.string().c_str()); +#else + std::cout << "Creating logs directory \"" << logsDir.string() << "\"..." + << std::endl; +#endif + Utils::FileSystem::createDirectory(logsDir.string()); + if (!Utils::FileSystem::isDirectorySTD(logsDir)) { +#if defined(__ANDROID__) + __android_log_print(ANDROID_LOG_ERROR, ANDROID_APPLICATION_ID, + "Couldn't create directory, permission problems?"); +#else + std::cerr << "Couldn't create directory, permission problems?" << std::endl; +#endif + } + } + } + } + // Start the logger. Log::init(); Log::open(); @@ -630,90 +656,138 @@ int main(int argc, char* argv[]) Settings::getInstance()->setInt("ScreenHeight", 720); #endif - // Check if the configuration file exists, and if not, create it. - // This should only happen on first application startup. - if (!Utils::FileSystem::existsSTD( - Utils::FileSystem::getAppDataDirectory().append("es_settings.xml"))) { - LOG(LogInfo) << "Settings file es_settings.xml does not exist, creating it..."; - Settings::getInstance()->saveFile(); - } - else if (settingsNeedSaving) { - LOG(LogInfo) << "Saving settings that were modified by command line options..."; - Settings::getInstance()->saveFile(); + { + if (!Settings::getInstance()->getBool("LegacyAppDataDirectory")) { + // Create the settings folder in the application data directory. + const std::filesystem::path settingsDir { + Utils::FileSystem::getAppDataDirectory().append("settings")}; + if (!Utils::FileSystem::isDirectorySTD(settingsDir)) { + LOG(LogInfo) << "Creating settings directory \"" << settingsDir.string() << "\"..."; + Utils::FileSystem::createDirectory(settingsDir.string()); + if (!Utils::FileSystem::isDirectorySTD(settingsDir)) { + LOG(LogError) << "Couldn't create directory, permission problems?"; + } + } + } } - // Check if the application release number has changed, which would normally mean that the - // user has upgraded to a new version. - int applicationRelease; - if ((applicationRelease = Settings::getInstance()->getInt("ApplicationRelease")) != - PROGRAM_RELEASE_NUMBER) { - if (applicationRelease != 0) { - LOG(LogInfo) << "Application release number changed from previous startup, from \"" - << applicationRelease << "\" to \"" << PROGRAM_RELEASE_NUMBER << "\""; + { + // Check if the configuration file exists, and if not, create it. + std::filesystem::path settingsPath; + if (Settings::getInstance()->getBool("LegacyAppDataDirectory")) + settingsPath = Utils::FileSystem::getAppDataDirectory().append("es_settings.xml"); + else + settingsPath = Utils::FileSystem::getAppDataDirectory() + .append("settings") + .append("es_settings.xml"); + + if (!Utils::FileSystem::existsSTD(settingsPath)) { + LOG(LogInfo) << "Settings file es_settings.xml does not exist, creating it..."; + Settings::getInstance()->saveFile(); } - else { - LOG(LogInfo) << "Application release number setting is blank, changing it to \"" - << PROGRAM_RELEASE_NUMBER << "\""; + else if (settingsNeedSaving) { + LOG(LogInfo) << "Saving settings that were modified by command line options..."; + Settings::getInstance()->saveFile(); } - Settings::getInstance()->setInt("ApplicationRelease", PROGRAM_RELEASE_NUMBER); - Settings::getInstance()->saveFile(); } - // Create the gamelists folder in the application data directory. - const std::filesystem::path gamelistsDir { - Utils::FileSystem::getAppDataDirectory().append("gamelists")}; - if (!Utils::FileSystem::existsSTD(gamelistsDir)) { - LOG(LogInfo) << "Creating gamelists directory \"" << gamelistsDir.string() << "\"..."; - Utils::FileSystem::createDirectory(gamelistsDir.string()); + { + // Check if the application release number has changed, which would normally mean that the + // user has upgraded to a new version. + int applicationRelease; + if ((applicationRelease = Settings::getInstance()->getInt("ApplicationRelease")) != + PROGRAM_RELEASE_NUMBER) { + if (applicationRelease != 0) { + LOG(LogInfo) << "Application release number changed from previous startup, from \"" + << applicationRelease << "\" to \"" << PROGRAM_RELEASE_NUMBER << "\""; + } + else { + LOG(LogInfo) << "Application release number setting is blank, changing it to \"" + << PROGRAM_RELEASE_NUMBER << "\""; + } + Settings::getInstance()->setInt("ApplicationRelease", PROGRAM_RELEASE_NUMBER); + Settings::getInstance()->saveFile(); + } + } + + { + // Create the gamelists folder in the application data directory. + const std::filesystem::path gamelistsDir { + Utils::FileSystem::getAppDataDirectory().append("gamelists")}; if (!Utils::FileSystem::existsSTD(gamelistsDir)) { - LOG(LogWarning) << "Couldn't create directory, permission problems?\n"; + LOG(LogInfo) << "Creating gamelists directory \"" << gamelistsDir.string() << "\"..."; + Utils::FileSystem::createDirectory(gamelistsDir.string()); + if (!Utils::FileSystem::existsSTD(gamelistsDir)) { + LOG(LogWarning) << "Couldn't create directory, permission problems?"; + } } } + { #if defined(__ANDROID__) - const std::filesystem::path themeDir { - Utils::FileSystem::getAppDataDirectory().append("themes")}; - if (!Utils::FileSystem::existsSTD(themeDir)) { - LOG(LogInfo) << "Creating themes directory \"" << themeDir.string() << "\"..."; - - Utils::FileSystem::createDirectory(themeDir.string()); + const std::filesystem::path themeDir { + Utils::FileSystem::getAppDataDirectory().append("themes")}; if (!Utils::FileSystem::existsSTD(themeDir)) { - LOG(LogWarning) << "Couldn't create directory, permission problems?"; + LOG(LogInfo) << "Creating themes directory \"" << themeDir.string() << "\"..."; + + Utils::FileSystem::createDirectory(themeDir.string()); + if (!Utils::FileSystem::existsSTD(themeDir)) { + LOG(LogWarning) << "Couldn't create directory, permission problems?"; + } } - } #else - // Create the themes folder in the application data directory (or elsewhere if the - // UserThemeDirectory setting has been defined). - const std::filesystem::path defaultUserThemeDir { - Utils::FileSystem::getAppDataDirectory().append("themes")}; - std::filesystem::path userThemeDirSetting {Utils::FileSystem::expandHomePath( - Settings::getInstance()->getString("UserThemeDirectory"))}; - std::filesystem::path userThemeDirectory; + // Create the themes folder in the application data directory (or elsewhere if the + // UserThemeDirectory setting has been defined). + const std::filesystem::path defaultUserThemeDir { + Utils::FileSystem::getAppDataDirectory().append("themes")}; + std::filesystem::path userThemeDirSetting {Utils::FileSystem::expandHomePath( + Settings::getInstance()->getString("UserThemeDirectory"))}; + std::filesystem::path userThemeDirectory; - if (userThemeDirSetting.empty()) - userThemeDirectory = defaultUserThemeDir; - else - userThemeDirectory = userThemeDirSetting; + if (userThemeDirSetting.empty()) + userThemeDirectory = defaultUserThemeDir; + else + userThemeDirectory = userThemeDirSetting; - if (!Utils::FileSystem::existsSTD(userThemeDirectory)) { - LOG(LogInfo) << "Creating themes directory \"" << userThemeDirectory.string() << "\"..."; - - Utils::FileSystem::createDirectory(userThemeDirectory.string()); if (!Utils::FileSystem::existsSTD(userThemeDirectory)) { - LOG(LogWarning) << "Couldn't create directory, permission problems?"; + LOG(LogInfo) << "Creating themes directory \"" << userThemeDirectory.string() + << "\"..."; + + Utils::FileSystem::createDirectory(userThemeDirectory.string()); + if (!Utils::FileSystem::existsSTD(userThemeDirectory)) { + LOG(LogWarning) << "Couldn't create directory, permission problems?"; + } + } +#endif + } + + { + // Create the scripts folder in the application data directory. This is only required + // for custom event scripts so it's also created as a convenience. + const std::filesystem::path scriptsDir { + Utils::FileSystem::getAppDataDirectory().append("scripts")}; + if (!Utils::FileSystem::existsSTD(scriptsDir)) { + LOG(LogInfo) << "Creating scripts directory \"" << scriptsDir.string() << "\"..."; + Utils::FileSystem::createDirectory(scriptsDir.string()); + if (!Utils::FileSystem::existsSTD(scriptsDir)) { + LOG(LogWarning) << "Couldn't create directory, permission problems?"; + } } } -#endif - // Create the scripts folder in the application data directory. This is only required - // for custom event scripts so it's also created as a convenience. - const std::filesystem::path scriptsDir { - Utils::FileSystem::getAppDataDirectory().append("scripts")}; - if (!Utils::FileSystem::existsSTD(scriptsDir)) { - LOG(LogInfo) << "Creating scripts directory \"" << scriptsDir.string() << "\"..."; - Utils::FileSystem::createDirectory(scriptsDir.string()); - if (!Utils::FileSystem::existsSTD(scriptsDir)) { - LOG(LogWarning) << "Couldn't create directory, permission problems?\n"; + { + if (!Settings::getInstance()->getBool("LegacyAppDataDirectory")) { + // Create the controllers folder in the application data directory. + const std::filesystem::path controllersDir { + Utils::FileSystem::getAppDataDirectory().append("controllers")}; + if (!Utils::FileSystem::existsSTD(controllersDir)) { + LOG(LogInfo) << "Creating controllers directory \"" << controllersDir.string() + << "\"..."; + Utils::FileSystem::createDirectory(controllersDir.string()); + if (!Utils::FileSystem::existsSTD(controllersDir)) { + LOG(LogWarning) << "Couldn't create directory, permission problems?"; + } + } } } diff --git a/es-app/src/scrapers/GamesDBJSONScraperResources.cpp b/es-app/src/scrapers/GamesDBJSONScraperResources.cpp index e68198344..8477b23c8 100644 --- a/es-app/src/scrapers/GamesDBJSONScraperResources.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraperResources.cpp @@ -41,9 +41,9 @@ namespace constexpr int MAX_WAIT_ITER {MAX_WAIT_MS / POLL_TIME_MS}; constexpr char SCRAPER_RESOURCES_DIR[] {"scrapers"}; - constexpr char DEVELOPERS_JSON_FILE[] {"gamesdb_developers.json"}; - constexpr char PUBLISHERS_JSON_FILE[] {"gamesdb_publishers.json"}; - constexpr char GENRES_JSON_FILE[] {"gamesdb_genres.json"}; + constexpr char DEVELOPERS_JSON_FILE[] {"thegamesdb_developers.json"}; + constexpr char PUBLISHERS_JSON_FILE[] {"thegamesdb_publishers.json"}; + constexpr char GENRES_JSON_FILE[] {"thegamesdb_genres.json"}; constexpr char DEVELOPERS_ENDPOINT[] {"/Developers"}; constexpr char PUBLISHERS_ENDPOINT[] {"/Publishers"}; constexpr char GENRES_ENDPOINT[] {"/Genres"}; diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index a9c38f176..cb859a773 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -86,8 +86,17 @@ void InputManager::init() // the bundled mapping is incorrect, or the SDL version is a bit older, it makes sense to be // able to customize this. If a controller GUID is present in the mappings file that is // already present inside SDL, the custom mapping will overwrite the bundled one. - std::filesystem::path mappingsFile { - Utils::FileSystem::getAppDataDirectory().append("es_controller_mappings.cfg")}; + std::filesystem::path mappingsFile; + + if (Settings::getInstance()->getBool("LegacyAppDataDirectory")) { + mappingsFile = + Utils::FileSystem::getAppDataDirectory().append("es_controller_mappings.cfg"); + } + else { + mappingsFile = Utils::FileSystem::getAppDataDirectory() + .append("controllers") + .append("es_controller_mappings.cfg"); + } if (!Utils::FileSystem::existsSTD(mappingsFile)) mappingsFile = ResourceManager::getInstance().getResourcePath( @@ -255,12 +264,28 @@ void InputManager::doOnFinish() std::string InputManager::getConfigPath() { - return Utils::FileSystem::getAppDataDirectory().append("es_input.xml").string(); + if (Settings::getInstance()->getBool("LegacyAppDataDirectory")) { + return Utils::FileSystem::getAppDataDirectory().append("es_input.xml").string(); + } + else { + return Utils::FileSystem::getAppDataDirectory() + .append("settings") + .append("es_input.xml") + .string(); + } } std::string InputManager::getTemporaryConfigPath() { - return Utils::FileSystem::getAppDataDirectory().append("es_temporaryinput.xml").string(); + if (Settings::getInstance()->getBool("LegacyAppDataDirectory")) { + return Utils::FileSystem::getAppDataDirectory().append("es_temporaryinput.xml").string(); + } + else { + return Utils::FileSystem::getAppDataDirectory() + .append("settings") + .append("es_temporaryinput.xml") + .string(); + } } int InputManager::getNumConfiguredDevices() diff --git a/es-core/src/Log.cpp b/es-core/src/Log.cpp index fe0ae4eff..e26e76f08 100644 --- a/es-core/src/Log.cpp +++ b/es-core/src/Log.cpp @@ -8,6 +8,7 @@ // #include "Log.h" +#include "Settings.h" #include "utils/StringUtil.h" LogLevel Log::getReportingLevel() @@ -24,7 +25,11 @@ void Log::setReportingLevel(LogLevel level) void Log::init() { - sLogPath = Utils::FileSystem::getAppDataDirectory().append("es_log.txt"); + if (Settings::getInstance()->getBool("LegacyAppDataDirectory")) + sLogPath = Utils::FileSystem::getAppDataDirectory().append("es_log.txt"); + else + sLogPath = Utils::FileSystem::getAppDataDirectory().append("logs").append("es_log.txt"); + Utils::FileSystem::removeFile(sLogPath.string() + ".bak"); // Rename the previous log file. Utils::FileSystem::renameFile(sLogPath.string(), sLogPath.string() + ".bak", true); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 0874f607d..853468a24 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -46,6 +46,7 @@ namespace "DebugGrid", "DebugText", "DebugImage", + "LegacyAppDataDirectory", "ScraperFilter", "TransitionsSystemToSystem", "TransitionsSystemToGamelist", @@ -77,6 +78,8 @@ Settings::Settings() { mWasChanged = false; setDefaults(); + if (Utils::FileSystem::getAppDataDirectory().filename().string() == ".emulationstation") + mBoolMap["LegacyAppDataDirectory"] = std::make_pair(true, true); loadFile(); } @@ -347,6 +350,7 @@ void Settings::setDefaults() mBoolMap["DebugGrid"] = {false, false}; mBoolMap["DebugText"] = {false, false}; mBoolMap["DebugImage"] = {false, false}; + mBoolMap["LegacyAppDataDirectory"] = {false, false}; mIntMap["ScraperFilter"] = {0, 0}; mIntMap["TransitionsSystemToSystem"] = {ViewTransitionAnimation::INSTANT, ViewTransitionAnimation::INSTANT}; @@ -364,9 +368,14 @@ void Settings::setDefaults() void Settings::saveFile() { - LOG(LogDebug) << "Settings::saveFile(): Saving settings to es_settings.xml"; - const std::filesystem::path path { - Utils::FileSystem::getAppDataDirectory().append("es_settings.xml")}; + std::filesystem::path path; + if (mBoolMap["LegacyAppDataDirectory"].second == true) { + path = Utils::FileSystem::getAppDataDirectory().append("es_settings.xml"); + } + else { + path = + Utils::FileSystem::getAppDataDirectory().append("settings").append("es_settings.xml"); + } pugi::xml_document doc; @@ -396,18 +405,24 @@ void Settings::saveFile() void Settings::loadFile() { - std::filesystem::path configFile { - Utils::FileSystem::getAppDataDirectory().append("es_settings.xml")}; + std::filesystem::path path; + if (mBoolMap["LegacyAppDataDirectory"].second == true) { + path = Utils::FileSystem::getAppDataDirectory().append("es_settings.xml"); + } + else { + path = + Utils::FileSystem::getAppDataDirectory().append("settings").append("es_settings.xml"); + } - if (!Utils::FileSystem::existsSTD(configFile)) + if (!Utils::FileSystem::existsSTD(path)) return; pugi::xml_document doc; #if defined(_WIN64) pugi::xml_parse_result result { - doc.load_file(Utils::String::stringToWideString(configFile.string()).c_str())}; + doc.load_file(Utils::String::stringToWideString(path.string()).c_str())}; #else - pugi::xml_parse_result result {doc.load_file(configFile.string().c_str())}; + pugi::xml_parse_result result {doc.load_file(path.string().c_str())}; #endif if (!result) { LOG(LogError) << "Couldn't parse the es_settings.xml file: " << result.description(); diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 2f305df31..e09353bad 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -199,7 +199,7 @@ namespace Utils return homePath; #if defined(__ANDROID__) - homePath = AndroidVariables::sAppDataDirectory; + homePath = FileSystemVariables::sAppDataDirectory; return homePath; #endif @@ -248,7 +248,7 @@ namespace Utils #if defined(__ANDROID__) homePathSTD = - std::filesystem::path {getGenericPath(AndroidVariables::sAppDataDirectory)}; + std::filesystem::path {getGenericPath(FileSystemVariables::sAppDataDirectory)}; return homePathSTD; #endif #if defined(_WIN64) @@ -318,7 +318,17 @@ namespace Utils #if defined(__ANDROID__) return getHomePathSTD(); #else - return getHomePathSTD().append(".emulationstation"); + if (FileSystemVariables::sAppDataDirectory.empty()) { + if (Utils::FileSystem::existsSTD(getHomePathSTD().append(".emulationstation"))) { + FileSystemVariables::sAppDataDirectory = + getHomePathSTD().append(".emulationstation"); + } + else { + FileSystemVariables::sAppDataDirectory = getHomePathSTD().append("ES-DE"); + } + } + + return FileSystemVariables::sAppDataDirectory; #endif } diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index eb382c6d6..90a5f819b 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -15,6 +15,12 @@ #include #include +class FileSystemVariables +{ +public: + static inline std::filesystem::path sAppDataDirectory; +}; + namespace Utils { namespace FileSystem From 873ec7ee203f751f46dec0c2e90e6261a59814c3 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 00:00:10 +0100 Subject: [PATCH 052/320] Added automatic configuration file migration from the legacy application data directory structure Also added instruction dialogs regarding the new directory structure and file migration --- es-app/src/main.cpp | 45 ++++++++++++++++++++++++++++- es-app/src/views/ViewController.cpp | 36 +++++++++++++++++++++++ es-app/src/views/ViewController.h | 2 ++ 3 files changed, 82 insertions(+), 1 deletion(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index c26cf6d5d..fcb4f218b 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -656,6 +656,8 @@ int main(int argc, char* argv[]) Settings::getInstance()->setInt("ScreenHeight", 720); #endif + bool migratedSettings {false}; + { if (!Settings::getInstance()->getBool("LegacyAppDataDirectory")) { // Create the settings folder in the application data directory. @@ -668,11 +670,33 @@ int main(int argc, char* argv[]) LOG(LogError) << "Couldn't create directory, permission problems?"; } } + std::filesystem::path settingsPathOld; + std::filesystem::path settingsPathNew; + settingsPathOld = Utils::FileSystem::getAppDataDirectory().append("es_settings.xml"); + settingsPathNew = Utils::FileSystem::getAppDataDirectory() + .append("settings") + .append("es_settings.xml"); + if (!Utils::FileSystem::existsSTD(settingsPathNew) && + Utils::FileSystem::existsSTD(settingsPathOld)) { + Utils::FileSystem::renameFile(settingsPathOld.string(), settingsPathNew.string(), + false); + Settings::getInstance()->loadFile(); + migratedSettings = true; + } + settingsPathOld = Utils::FileSystem::getAppDataDirectory().append("es_input.xml"); + settingsPathNew = + Utils::FileSystem::getAppDataDirectory().append("settings").append("es_input.xml"); + if (!Utils::FileSystem::existsSTD(settingsPathNew) && + Utils::FileSystem::existsSTD(settingsPathOld)) { + Utils::FileSystem::renameFile(settingsPathOld.string(), settingsPathNew.string(), + false); + migratedSettings = true; + } } } { - // Check if the configuration file exists, and if not, create it. + // Check if the es_settings.xml file exists, and if not, create it. std::filesystem::path settingsPath; if (Settings::getInstance()->getBool("LegacyAppDataDirectory")) settingsPath = Utils::FileSystem::getAppDataDirectory().append("es_settings.xml"); @@ -788,6 +812,17 @@ int main(int argc, char* argv[]) LOG(LogWarning) << "Couldn't create directory, permission problems?"; } } + std::filesystem::path configPathOld { + Utils::FileSystem::getAppDataDirectory().append("es_controller_mappings.cfg")}; + std::filesystem::path configPathNew {Utils::FileSystem::getAppDataDirectory() + .append("controllers") + .append("es_controller_mappings.cfg")}; + if (!Utils::FileSystem::existsSTD(configPathNew) && + Utils::FileSystem::existsSTD(configPathOld)) { + Utils::FileSystem::renameFile(configPathOld.string(), configPathNew.string(), + false); + migratedSettings = true; + } } } @@ -951,6 +986,14 @@ int main(int argc, char* argv[]) } #endif + if (Settings::getInstance()->getBool("LegacyAppDataDirectory")) + ViewController::getInstance()->legacyAppDataDialog(); + + if (migratedSettings) { + LOG(LogInfo) << "Migrated settings from a legacy application data directory structure"; + ViewController::getInstance()->migratedAppDataFilesDialog(); + } + LOG(LogInfo) << "Application startup time: " << std::chrono::duration_cast( std::chrono::system_clock::now() - applicationStartTime) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 0ef0208b0..65fe0766a 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -137,6 +137,41 @@ void ViewController::setMenuColors() } } +void ViewController::legacyAppDataDialog() +{ + const std::string upgradeMessage { + "IN 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().string() + "\nTO THE FOLLOWING:\n" + + Utils::FileSystem::getAppDataDirectory().parent_path().append("ES-DE").string()}; + + mWindow->pushGui(new GuiMsgBox( + HelpStyle(), upgradeMessage.c_str(), "OK", [] {}, "", nullptr, "", nullptr, nullptr, true, + true, + (mRenderer->getIsVerticalOrientation() ? + 0.85f : + 0.55f * (1.778f / mRenderer->getScreenAspectRatio())))); +} + +void ViewController::migratedAppDataFilesDialog() +{ + const std::string message {"SETTINGS HAVE BEEN MIGRATED FROM A LEGACY APPLICATION DATA " + "DIRECTORY STRUCTURE, YOU NEED TO RESTART ES-DE TO APPLY " + "THE CONFIGURATION"}; + + mWindow->pushGui(new GuiMsgBox( + HelpStyle(), message.c_str(), "QUIT", + [] { + SDL_Event quit; + quit.type = SDL_QUIT; + SDL_PushEvent(&quit); + }, + "", nullptr, "", nullptr, nullptr, true, true, + (mRenderer->getIsVerticalOrientation() ? + 0.65f : + 0.55f * (1.778f / mRenderer->getScreenAspectRatio())))); +} + void ViewController::unsafeUpgradeDialog() { const std::string upgradeMessage { @@ -146,6 +181,7 @@ void ViewController::unsafeUpgradeDialog() "MAKE SURE TO ALWAYS FOLLOW THE UPGRADE INSTRUCTIONS IN THE " "README.TXT FILE THAT CAN BE FOUND IN THE EMULATIONSTATION-DE " "DIRECTORY."}; + mWindow->pushGui(new GuiMsgBox( HelpStyle(), upgradeMessage.c_str(), "OK", [] {}, "", nullptr, "", nullptr, nullptr, true, true, diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 125ae9ad6..18e65adf7 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -34,6 +34,8 @@ public: // These functions are called from main(). void setMenuColors(); + void legacyAppDataDialog(); + void migratedAppDataFilesDialog(); void unsafeUpgradeDialog(); void invalidSystemsFileDialog(); void noGamesDialog(); From 361bf832e1fe20c2df590373c3c0d2ac4e427a88 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 12:30:13 +0100 Subject: [PATCH 053/320] Changed the application name from EmulationStation Desktop Edition to ES-DE --- .clang-format | 2 +- .gitignore | 36 +++--- CMakeLists.txt | 14 +-- es-app/CMakeLists.txt | 106 +++++++++--------- .../{EmulationStation-DE.icns => ES-DE.icns} | Bin .../{EmulationStation.ico => ES-DE.ico} | Bin .../assets/{EmulationStation.rc => ES-DE.rc} | 14 +-- ...tionStation-DE_DS_Store => ES-DE_DS_Store} | Bin ...Station-DE_Info.plist => ES-DE_Info.plist} | 16 +-- ..._LICENSE_Windows => ES-DE_LICENSE_Windows} | 2 +- ...n-DE_LICENSE_macOS => ES-DE_LICENSE_macOS} | 8 +- es-app/assets/Windows_Portable_README.txt | 16 +-- es-app/assets/emulationstation.6.gz | Bin 1084 -> 0 bytes es-app/assets/es-de.6.gz | Bin 0 -> 1059 bytes ...ata.xml => org.es_de.frontend.appdata.xml} | 8 +- ...-de.desktop => org.es_de.frontend.desktop} | 6 +- ...nstation-de.svg => org.es_de.frontend.svg} | 0 ...nstation-de.yml => org.es_de.frontend.yml} | 8 +- es-app/src/ApplicationUpdater.cpp | 2 +- ...mulationStation.h => ApplicationVersion.h} | 11 +- es-app/src/guis/GuiApplicationUpdater.cpp | 4 +- es-app/src/guis/GuiApplicationUpdater.h | 2 +- es-app/src/guis/GuiMenu.cpp | 16 +-- es-app/src/guis/GuiThemeDownloader.cpp | 2 +- es-app/src/main.cpp | 18 +-- es-app/src/scrapers/ScreenScraper.cpp | 2 +- es-app/src/scrapers/ScreenScraper.h | 4 +- es-app/src/views/ViewController.cpp | 4 +- es-app/src/views/ViewController.h | 2 +- es-core/src/renderers/Renderer.cpp | 13 +-- es-core/src/renderers/Renderer.h | 2 +- es-core/src/renderers/RendererOpenGL.cpp | 6 +- es-core/src/resources/ResourceManager.cpp | 4 +- es-core/src/utils/FileSystemUtil.cpp | 2 +- es-pdf-converter/src/main.cpp | 6 +- external/CMakeLists.txt | 2 +- tools/Windows_dependencies_build_MSVC.bat | 2 +- tools/Windows_dependencies_build_MinGW.sh | 2 +- tools/Windows_dependencies_setup_MSVC.bat | 2 +- tools/Windows_dependencies_setup_MinGW.sh | 2 +- tools/create_AppImage.sh | 22 ++-- tools/create_AppImage_SteamDeck.sh | 18 +-- tools/create_dummy_game_files.sh | 2 +- tools/generate_man_page.sh | 20 ++-- tools/macOS_dependencies_build.sh | 2 +- tools/macOS_dependencies_setup.sh | 2 +- tools/mame_create_index_files.sh | 2 +- tools/mame_merge_index_files.sh | 2 +- tools/reformat_codebase.sh | 2 +- tools/update_version_string.sh | 20 ++-- 50 files changed, 216 insertions(+), 222 deletions(-) rename es-app/assets/{EmulationStation-DE.icns => ES-DE.icns} (100%) rename es-app/assets/{EmulationStation.ico => ES-DE.ico} (100%) rename es-app/assets/{EmulationStation.rc => ES-DE.rc} (64%) rename es-app/assets/{EmulationStation-DE_DS_Store => ES-DE_DS_Store} (100%) rename es-app/assets/{EmulationStation-DE_Info.plist => ES-DE_Info.plist} (76%) rename es-app/assets/{EmulationStation-DE_LICENSE_Windows => ES-DE_LICENSE_Windows} (96%) rename es-app/assets/{EmulationStation-DE_LICENSE_macOS => ES-DE_LICENSE_macOS} (96%) delete mode 100644 es-app/assets/emulationstation.6.gz create mode 100644 es-app/assets/es-de.6.gz rename es-app/assets/{org.es_de.emulationstation-de.appdata.xml => org.es_de.frontend.appdata.xml} (94%) rename es-app/assets/{org.es_de.emulationstation-de.desktop => org.es_de.frontend.desktop} (67%) rename es-app/assets/{org.es_de.emulationstation-de.svg => org.es_de.frontend.svg} (100%) rename es-app/assets/{org.es_de.emulationstation-de.yml => org.es_de.frontend.yml} (93%) rename es-app/src/{EmulationStation.h => ApplicationVersion.h} (79%) diff --git a/.clang-format b/.clang-format index 22f5528ea..5a5d0edec 100644 --- a/.clang-format +++ b/.clang-format @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # .clang-format # # Style configuration file for automatic C++ and Java code formatting using clang-format. diff --git a/.gitignore b/.gitignore index 98650abcb..bf36f803d 100644 --- a/.gitignore +++ b/.gitignore @@ -18,18 +18,18 @@ *.d # Compiled executable -emulationstation -EmulationStation -EmulationStation.exe -es-pdf-convert -es-pdf-convert.exe +/es-de +/ES-DE +/ES-DE.exe +/es-pdf-convert +/es-pdf-convert.exe # Emscripten build -emulationstation.data -emulationstation.html -emulationstation.js -emulationstation.wasm -emulationstation.worker.js +es-de.data +es-de.html +es-de.js +es-de.wasm +es-de.worker.js /index.html /ROMs @@ -42,7 +42,7 @@ AppDir *.AppImage # Core dumps -emulationstation.core +es-de.core # Profiling data callgrind.out.* @@ -64,21 +64,21 @@ CMakeFiles cmake_install.cmake Makefile install_manifest.txt -EmulationStation.exe.manifest +ES-DE.exe.manifest # CPack _CPack_Packages -emulationstation-de*.deb -emulationstation-de*.rpm -EmulationStation-DE*.dmg -EmulationStation-DE*.exe +es-de*.deb +es-de*.rpm +ES-DE*.dmg +ES-DE*.exe # macOS .DS_Store # MSVC -EmulationStation.ilk -EmulationStation.pdb +ES-DE.ilk +ES-DE.pdb es-pdf-convert.ilk es-pdf-convert.pdb lunasvg.exp diff --git a/CMakeLists.txt b/CMakeLists.txt index 606d81387..a5f1006b6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,12 +11,12 @@ cmake_minimum_required(VERSION 3.13) if(APPLE) # Set this to the minimum supported macOS version, and also update - # es-app/assets/EmulationStation-DE_Info.plist accordingly. + # es-app/assets/ES-DE_Info.plist accordingly. set(CMAKE_OSX_DEPLOYMENT_TARGET 10.15 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(emulationstation-de) +project(es-de) # Application version, update this when making a new release. set(ES_VERSION 3.0.0-alpha) @@ -157,12 +157,12 @@ endif() if(CMAKE_CXX_COMPILER_ID MATCHES Clang) message("-- Compiler is Clang/LLVM") if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0.0) - message(SEND_ERROR "You need at least Clang 5.0.0 to compile EmulationStation-DE") + message(SEND_ERROR "You need at least Clang 5.0.0 to compile ES-DE") endif() elseif(CMAKE_CXX_COMPILER_ID MATCHES GNU) message("-- Compiler is GNU/GCC") if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.1) - message(SEND_ERROR "You need at least GCC 7.1 to compile EmulationStation-DE") + message(SEND_ERROR "You need at least GCC 7.1 to compile ES-DE") endif() if(WIN32) set(CMAKE_CXX_FLAGS "-mwindows ${CMAKE_CXX_FLAGS}") @@ -229,8 +229,8 @@ if(EMSCRIPTEN) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s USE_SDL=2 -pthread") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s INITIAL_MEMORY=33554432 -s ALLOW_MEMORY_GROWTH=1 -s WASM=1 -s ASSERTIONS=1 -s EXIT_RUNTIME=1 -s USE_SDL=2 \ -pthread -s PTHREAD_POOL_SIZE=4 -s DEMANGLE_SUPPORT=1 -s USE_WEBGL2=1 -s FULL_ES3=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s ASYNCIFY \ - --preload-file ${PROJECT_SOURCE_DIR}/resources@/home/web_user/.emulationstation/resources/ \ - --preload-file ${PROJECT_SOURCE_DIR}/themes/slate-es-de@/home/web_user/.emulationstation/themes/slate-es-de/ \ + --preload-file ${PROJECT_SOURCE_DIR}/resources@/home/web_user/ES-DE/resources/ \ + --preload-file ${PROJECT_SOURCE_DIR}/themes/slate-es-de@/home/web_user/ES-DE/themes/slate-es-de/ \ --preload-file ${PROJECT_SOURCE_DIR}/ROMs@/home/web_user/ROMs/") endif() @@ -636,7 +636,7 @@ endif() if(APPLE) # See es-app/CMakeLists.txt for an explation for why an extra "Resources" directory # has been added to the install prefix. - set(CMAKE_INSTALL_PREFIX "/Applications/EmulationStation Desktop Edition.app/Contents/Resources") + set(CMAKE_INSTALL_PREFIX "/Applications/ES-DE.app/Contents/Resources") # Set the same rpath links for the install executable as for the build executable. set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index ea5bfc162..0936fe824 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -7,12 +7,12 @@ # Also contains the application packaging configuration. # -project(emulationstation-de) +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/EmulationStation.h ${CMAKE_CURRENT_SOURCE_DIR}/src/FileData.h ${CMAKE_CURRENT_SOURCE_DIR}/src/FileFilterIndex.h ${CMAKE_CURRENT_SOURCE_DIR}/src/FileSorts.h @@ -112,7 +112,7 @@ set(ES_SOURCES ) if(WIN32) - LIST(APPEND ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation.rc) + LIST(APPEND ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/assets/ES-DE.rc) endif() #--------------------------------------------------------------------------------------------------- @@ -121,31 +121,31 @@ endif() # Define target. if(APPLE) include_directories(${COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/src) - add_executable(EmulationStation ${ES_SOURCES} ${ES_HEADERS}) - target_link_libraries(EmulationStation ${COMMON_LIBRARIES} es-core) - set_target_properties(EmulationStation PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) + add_executable(ES-DE ${ES_SOURCES} ${ES_HEADERS}) + target_link_libraries(ES-DE ${COMMON_LIBRARIES} es-core) + set_target_properties(ES-DE PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) if(CMAKE_CXX_COMPILER_VERSION GREATER_EQUAL 15.0.0) - target_link_options(EmulationStation PRIVATE LINKER:-no_warn_duplicate_libraries) + target_link_options(ES-DE PRIVATE LINKER:-no_warn_duplicate_libraries) endif() elseif(WIN32) include_directories(${COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/src) - add_executable(EmulationStation WIN32 ${ES_SOURCES} ${ES_HEADERS}) - target_link_libraries(EmulationStation ${COMMON_LIBRARIES} es-core) - set_target_properties(EmulationStation PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) + add_executable(ES-DE WIN32 ${ES_SOURCES} ${ES_HEADERS}) + target_link_libraries(ES-DE ${COMMON_LIBRARIES} es-core) + set_target_properties(ES-DE PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) elseif(ANDROID) include_directories(${COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/src) add_library(main MODULE ${ES_SOURCES} ${ES_HEADERS}) target_link_libraries(main PRIVATE ${COMMON_LIBRARIES} ${CMAKE_DL_LIBS} es-core es-pdf-convert) else() include_directories(${COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/src) - add_executable(emulationstation ${ES_SOURCES} ${ES_HEADERS}) - target_link_libraries(emulationstation ${COMMON_LIBRARIES} ${CMAKE_DL_LIBS} es-core) - set_target_properties(emulationstation PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) + add_executable(es-de ${ES_SOURCES} ${ES_HEADERS}) + target_link_libraries(es-de ${COMMON_LIBRARIES} ${CMAKE_DL_LIBS} es-core) + set_target_properties(es-de PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) endif() # Setup for installation and package generation. if(WIN32) - install(TARGETS EmulationStation RUNTIME DESTINATION .) + install(TARGETS ES-DE RUNTIME DESTINATION .) install(TARGETS es-pdf-convert RUNTIME DESTINATION es-pdf-converter) if(CMAKE_CXX_COMPILER_ID MATCHES MSVC) set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION .) @@ -278,10 +278,10 @@ elseif(APPLE) # So an extra 'Resources' directory was added to the CMAKE_INSTALL_PREFIX variable as well # to compensate for this. It's a bad solution to the problem and there must surely be a # better way to fix this. - install(TARGETS EmulationStation RUNTIME DESTINATION ../MacOS) + install(TARGETS ES-DE RUNTIME DESTINATION ../MacOS) install(TARGETS es-pdf-convert RUNTIME DESTINATION ../MacOS) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE.icns DESTINATION ../Resources) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE_Info.plist DESTINATION .. RENAME Info.plist) + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/ES-DE.icns DESTINATION ../Resources) + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/ES-DE_Info.plist DESTINATION .. RENAME Info.plist) set(APPLE_DYLIB_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE @@ -330,33 +330,33 @@ elseif(APPLE) install(DIRECTORY ${CMAKE_SOURCE_DIR}/themes/slate-es-de DESTINATION ../Resources/themes) install(DIRECTORY ${CMAKE_SOURCE_DIR}/licenses DESTINATION ../Resources) elseif(NOT ANDROID) - install(TARGETS emulationstation RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) + install(TARGETS es-de RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) install(TARGETS es-pdf-convert RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) if(CMAKE_SYSTEM_NAME MATCHES Linux) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/emulationstation.6.gz + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/es-de.6.gz DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man6) else() - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/emulationstation.6.gz + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/es-de.6.gz DESTINATION ${CMAKE_INSTALL_PREFIX}/man/man6) endif() install(FILES ${CMAKE_SOURCE_DIR}/LICENSE - DESTINATION ${CMAKE_INSTALL_PREFIX}/share/emulationstation) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/org.es_de.emulationstation-de.desktop + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/es-de) + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/org.es_de.frontend.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/org.es_de.emulationstation-de.svg + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/org.es_de.frontend.svg DESTINATION ${CMAKE_INSTALL_PREFIX}/share/pixmaps) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/org.es_de.emulationstation-de.svg + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/org.es_de.frontend.svg DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/org.es_de.emulationstation-de.appdata.xml + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/assets/org.es_de.frontend.appdata.xml DESTINATION ${CMAKE_INSTALL_PREFIX}/share/metainfo) install(DIRECTORY ${CMAKE_SOURCE_DIR}/licenses - DESTINATION ${CMAKE_INSTALL_PREFIX}/share/emulationstation) + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/es-de) install(DIRECTORY ${CMAKE_SOURCE_DIR}/themes/modern-es-de - DESTINATION ${CMAKE_INSTALL_PREFIX}/share/emulationstation/themes) + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/es-de/themes) install(DIRECTORY ${CMAKE_SOURCE_DIR}/themes/slate-es-de - DESTINATION ${CMAKE_INSTALL_PREFIX}/share/emulationstation/themes) + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/es-de/themes) install(DIRECTORY ${CMAKE_SOURCE_DIR}/resources - DESTINATION ${CMAKE_INSTALL_PREFIX}/share/emulationstation) + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/es-de) endif() include(InstallRequiredSystemLibraries) @@ -364,17 +364,17 @@ include(InstallRequiredSystemLibraries) #--------------------------------------------------------------------------------------------------- # General CPack settings. -set(CPACK_PACKAGE_NAME emulationstation-de) +set(CPACK_PACKAGE_NAME es-de) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Emulator frontend") -set(CPACK_PACKAGE_DESCRIPTION "EmulationStation Desktop Edition (ES-DE) is a frontend for browsing and launching games from your multi-platform game collection.") +set(CPACK_PACKAGE_DESCRIPTION "ES-DE (EmulationStation Desktop Edition) is a frontend for browsing and launching games from your multi-platform game collection.") set(CPACK_PACKAGE_VERSION ${ES_VERSION}) if(APPLE) # Shorter line length license file to be able to fit inside the drag-and-drop installer window without introducing extra line breaks. - set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE_LICENSE_macOS) + set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/assets/ES-DE_LICENSE_macOS) elseif(WIN32) # The installer window looks a bit different on Windows so a specific file for this OS is required. - set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE_LICENSE_Windows) + set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/assets/ES-DE_LICENSE_Windows) else() set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENSE) endif() @@ -390,40 +390,40 @@ endif() # Settings per operating system and generator type. if(APPLE) set(CPACK_GENERATOR Bundle) - set(CPACK_PACKAGE_FILE_NAME EmulationStation-DE-${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}) - set(CPACK_DMG_VOLUME_NAME "EmulationStation Desktop Edition ${CPACK_PACKAGE_VERSION}") - set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE.icns) - set(CPACK_DMG_DS_STORE ${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE_DS_Store) - set(CPACK_BUNDLE_NAME "EmulationStation Desktop Edition") - set(CPACK_BUNDLE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE.icns) - set(CPACK_BUNDLE_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation-DE_Info.plist) + set(CPACK_PACKAGE_FILE_NAME ES-DE_${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}) + set(CPACK_DMG_VOLUME_NAME "ES-DE ${CPACK_PACKAGE_VERSION}") + set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/assets/ES-DE.icns) + set(CPACK_DMG_DS_STORE ${CMAKE_CURRENT_SOURCE_DIR}/assets/ES-DE_DS_Store) + set(CPACK_BUNDLE_NAME "ES-DE") + set(CPACK_BUNDLE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/assets/ES-DE.icns) + set(CPACK_BUNDLE_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/assets/ES-DE_Info.plist) if(MACOS_CODESIGN_IDENTITY) set(CPACK_BUNDLE_APPLE_CERT_APP "Developer ID Application: ${MACOS_CODESIGN_IDENTITY}") set(CPACK_BUNDLE_APPLE_CODESIGN_PARAMETER "--deep --force --options runtime") endif() elseif(WIN32) set(CPACK_GENERATOR NSIS) - set(CPACK_PACKAGE_FILE_NAME EmulationStation-DE-${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}) - set(CPACK_PACKAGE_INSTALL_DIRECTORY EmulationStation-DE) - set(CPACK_PACKAGE_EXECUTABLES EmulationStation EmulationStation) + set(CPACK_PACKAGE_FILE_NAME ES-DE_${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}) + set(CPACK_PACKAGE_INSTALL_DIRECTORY ES-DE) + set(CPACK_PACKAGE_EXECUTABLES ES-DE ES-DE) set(CPACK_NSIS_INSTALL_ROOT ${PROGRAMFILES64}) set(CPACK_NSIS_EXECUTABLES_DIRECTORY .) - set(CPACK_NSIS_MUI_ICON ${CMAKE_CURRENT_SOURCE_DIR}/assets/EmulationStation.ico) + set(CPACK_NSIS_MUI_ICON ${CMAKE_CURRENT_SOURCE_DIR}/assets/ES-DE.ico) set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) - set(CPACK_NSIS_DISPLAY_NAME "EmulationStation Desktop Edition ${CPACK_PACKAGE_VERSION}") - set(CPACK_NSIS_PACKAGE_NAME "EmulationStation Desktop Edition") - set(CPACK_NSIS_INSTALLED_ICON_NAME EmulationStation.exe) - set(CPACK_NSIS_WELCOME_TITLE "EmulationStation Desktop Edition Installer") - set(CPACK_NSIS_FINISH_TITLE "EmulationStation Desktop Edition Installation Completed") + set(CPACK_NSIS_DISPLAY_NAME "ES-DE ${CPACK_PACKAGE_VERSION}") + set(CPACK_NSIS_PACKAGE_NAME "ES-DE") + set(CPACK_NSIS_INSTALLED_ICON_NAME ES-DE.exe) + set(CPACK_NSIS_WELCOME_TITLE "ES-DE Installer") + set(CPACK_NSIS_FINISH_TITLE "ES-DE Installation Completed") set(CPACK_NSIS_MANIFEST_DPI_AWARE ON) set(CPACK_NSIS_MENU_LINKS "https://es-de.org" "ES-DE Website" "https://es-de.org" "Please Donate") else() - set(CPACK_PACKAGE_INSTALL_DIRECTORY emulationstation_${CMAKE_PACKAGE_VERSION}) - set(CPACK_PACKAGE_EXECUTABLES emulationstation emulationstation) + set(CPACK_PACKAGE_INSTALL_DIRECTORY es-de_${CMAKE_PACKAGE_VERSION}) + set(CPACK_PACKAGE_EXECUTABLES es-de es-de) if(LINUX_CPACK_GENERATOR MATCHES DEB) set(CPACK_GENERATOR DEB) endif() - set(CPACK_DEBIAN_FILE_NAME emulationstation-de-${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}.deb) + set(CPACK_DEBIAN_FILE_NAME es-de_${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}.deb) set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Leon Styhre ") set(CPACK_DEBIAN_PACKAGE_HOMEPAGE https://es-de.org) set(CPACK_DEBIAN_PACKAGE_SECTION games) @@ -432,7 +432,7 @@ else() if(LINUX_CPACK_GENERATOR MATCHES RPM) set(CPACK_GENERATOR RPM) endif() - set(CPACK_RPM_FILE_NAME emulationstation-de-${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}.rpm) + set(CPACK_RPM_FILE_NAME es-de_${CPACK_PACKAGE_VERSION}-${CPU_ARCHITECTURE}.rpm) set(CPACK_RPM_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION}) set(CPACK_RPM_PACKAGE_LICENSE MIT) list(APPEND CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION ${CMAKE_INSTALL_PREFIX}) diff --git a/es-app/assets/EmulationStation-DE.icns b/es-app/assets/ES-DE.icns similarity index 100% rename from es-app/assets/EmulationStation-DE.icns rename to es-app/assets/ES-DE.icns diff --git a/es-app/assets/EmulationStation.ico b/es-app/assets/ES-DE.ico similarity index 100% rename from es-app/assets/EmulationStation.ico rename to es-app/assets/ES-DE.ico diff --git a/es-app/assets/EmulationStation.rc b/es-app/assets/ES-DE.rc similarity index 64% rename from es-app/assets/EmulationStation.rc rename to es-app/assets/ES-DE.rc index 1bda4149b..584408efa 100644 --- a/es-app/assets/EmulationStation.rc +++ b/es-app/assets/ES-DE.rc @@ -1,4 +1,4 @@ -#include "EmulationStation.h" +#include "ApplicationVersion.h" #include "windows.h" @@ -21,13 +21,13 @@ BEGIN BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "es-de.org\0" - VALUE "FileDescription", "EmulationStation\0" + VALUE "FileDescription", "ES-DE\0" VALUE "FileVersion", RESOURCE_VERSION_STRING - VALUE "InternalName", "emulationstation.exe\0" - VALUE "LegalCopyright", "Copyright (c) 2020-2023 Leon Styhre\0" + VALUE "InternalName", "ES-DE.exe\0" + VALUE "LegalCopyright", "Copyright (c) 2020-2024 Leon Styhre\0" VALUE "LegalTrademarks", "\0" - VALUE "OriginalFilename", "emulationstation.exe\0" - VALUE "ProductName", "EmulationStation\0" + VALUE "OriginalFilename", "ES-DE.exe\0" + VALUE "ProductName", "ES-DE\0" VALUE "ProductVersion", PROGRAM_VERSION_STRING END END @@ -37,4 +37,4 @@ BEGIN END END -IDI_ES_LOGO ICON DISCARDABLE "EmulationStation.ico" +IDI_ES_LOGO ICON DISCARDABLE "ES-DE.ico" diff --git a/es-app/assets/EmulationStation-DE_DS_Store b/es-app/assets/ES-DE_DS_Store similarity index 100% rename from es-app/assets/EmulationStation-DE_DS_Store rename to es-app/assets/ES-DE_DS_Store diff --git a/es-app/assets/EmulationStation-DE_Info.plist b/es-app/assets/ES-DE_Info.plist similarity index 76% rename from es-app/assets/EmulationStation-DE_Info.plist rename to es-app/assets/ES-DE_Info.plist index e46d72fb7..e32145ce7 100644 --- a/es-app/assets/EmulationStation-DE_Info.plist +++ b/es-app/assets/ES-DE_Info.plist @@ -3,19 +3,19 @@ CFBundleIdentifier - org.es-de.EmulationStation + org.es-de.Frontend CFBundleDevelopmentRegion English CFBundleDisplayName - EmulationStation Desktop Edition + ES-DE CFBundleExecutable - EmulationStation + ES-DE CFBundleGetInfoString - EmulationStation Desktop Edition 3.0.0 + ES-DE 3.0.0 CFBundleIconFile - EmulationStation-DE.icns + ES-DE.icns CFBundleName - EmulationStation Desktop Edition + ES-DE CFBundlePackageType APPL CFBundleSignature @@ -37,9 +37,9 @@ NSPrincipalClass NSApplication NSMainNibFile - EmulationStation + ES-DE NSHumanReadableCopyright - Copyright (c) 2020-2023 Leon Styhre + Copyright (c) 2020-2024 Leon Styhre Copyright (c) 2014 Alec Lofquist Licensed under the MIT license diff --git a/es-app/assets/EmulationStation-DE_LICENSE_Windows b/es-app/assets/ES-DE_LICENSE_Windows similarity index 96% rename from es-app/assets/EmulationStation-DE_LICENSE_Windows rename to es-app/assets/ES-DE_LICENSE_Windows index 9469ee561..13deba166 100644 --- a/es-app/assets/EmulationStation-DE_LICENSE_Windows +++ b/es-app/assets/ES-DE_LICENSE_Windows @@ -1,4 +1,4 @@ -Copyright (c) 2020-2023 Leon Styhre +Copyright (c) 2020-2024 Leon Styhre Copyright (c) 2014 Alec Lofquist Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/es-app/assets/EmulationStation-DE_LICENSE_macOS b/es-app/assets/ES-DE_LICENSE_macOS similarity index 96% rename from es-app/assets/EmulationStation-DE_LICENSE_macOS rename to es-app/assets/ES-DE_LICENSE_macOS index f81c6fbe7..de376f344 100644 --- a/es-app/assets/EmulationStation-DE_LICENSE_macOS +++ b/es-app/assets/ES-DE_LICENSE_macOS @@ -1,6 +1,6 @@ -Copyright (c) 2020-2023 Leon Styhre +Copyright (c) 2020-2024 Leon Styhre Copyright (c) 2014 Alec Lofquist - + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without @@ -9,10 +9,10 @@ copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A diff --git a/es-app/assets/Windows_Portable_README.txt b/es-app/assets/Windows_Portable_README.txt index 7a47db3b7..016f32d74 100644 --- a/es-app/assets/Windows_Portable_README.txt +++ b/es-app/assets/Windows_Portable_README.txt @@ -1,4 +1,4 @@ -EmulationStation Desktop Edition (ES-DE) - Portable installation on Windows +ES-DE (EmulationStation Desktop Edition) - Portable installation on Windows --------------------------------------------------------------------------- ES-DE release: @@ -15,18 +15,18 @@ New installation: 1) The ROMs_ALL directory contains all the systems that ES-DE supports, but to decrease application startup time only copy the folders you need to the ROMs directory 2) Place your games into their respective folders in the ROMs directory tree 3) Place your emulators inside the Emulators directory -4) Start ES-DE using EmulationStation.exe and enjoy some retrogaming! +4) Start ES-DE using ES-DE.exe and enjoy some retrogaming! Upgrading from an older release: -1) Rename your old EmulationStation-DE directory, for example to EmulationStation-DE_OLD -2) Move your games from EmulationStation-DE_OLD\ROMs\ to EmulationStation-DE\ROMs\ -3) Move your emulators from EmulationStation-DE_OLD\Emulators\ to EmulationStation-DE\Emulators\ -4) Move the contents of EmulationStation-DE_OLD\.emulationstation\ to EmulationStation-DE\.emulationstation\ +1) Rename your old ES-DE directory, for example to ES-DE_OLD +2) Move your games from ES-DE_OLD\ROMs\ to ES-DE\ROMs\ +3) Move your emulators from ES-DE_OLD\Emulators\ to ES-DE\Emulators\ +4) Move the contents of ES-DE_OLD\ES-DE\ to ES-DE\ES-DE\ This last step includes your settings, custom collections, custom systems, scraped/downloaded media, gamelist.xml files, scripts and themes 5) Update your themes using the theme downloader to get support for all the latest systems and features -In case of issues, check .emulationstation\es_log.txt for clues as to what went wrong. -Enabling the "Debug mode" setting in the "Other settings" menu or starting EmulationStation.exe with the --debug flag will provide additional details. +In case of issues, check ES-DE\es_log.txt for clues as to what went wrong. +Enabling the "Debug mode" setting in the "Other settings" menu or starting ES-DE.exe with the --debug flag will provide additional details. Refer to the FAQ and user guide for more detailed instructions and documentation: https://gitlab.com/es-de/emulationstation-de/-/blob/master/FAQ.md diff --git a/es-app/assets/emulationstation.6.gz b/es-app/assets/emulationstation.6.gz deleted file mode 100644 index 53cf0cc1ff28be2223908b2f0124110047716517..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1084 zcmV-C1jG9uiwFp|l~QE_17&S>Y+-b1Z*FsRVRUJ4ZZ0+eomE?J8aWhx_pdn1%YqaJ zl197RYE_Ar$p$q9#E?o=h6gkDFcvfRtnGo&U%$sTY=EVyv=0OFxqLq7I~PZ33x*ST zoXlZ78IJD0!Tf%dz}@H}{smxUVM`6Hxa68z&S1HNf|vD8MI~HEx9_9th(z;yh{sP4 zgZXIkn9Thjw0>(r>rriZwd5LZ`Zw?J99K(rD3Vn)(E)*ih`0hGArC^6xxjE6q~|bp=9S6sG={3rfKEDjQGwMWK3V+>ufOI7aH2g zK*g70xwG7KV9Bwqkg6@Rg83YyQE3JKmV%lC3CQz}iv#;8!2*tx!2nLp+%=djU6!1o z@r$>9Ifj)Ai->HP0wKvz$zQP(3bjS1Fb=OcRE{;;LE=Da+tlYEP0d^nbhCnI>sKs) z^b>Ym=wNK#fOL~p3S-l*lBJs&lB`7yw6Ur}j4X_v;Z$eE6*wC#CuLz&56;m`RUU(i zl|*`vz!7%jWj@_wH^@cF%}J{xD`~e7jJam?Y9E#(D@cQn-ypdv8P{+4`^9qZ?}aDr zuXM)46gb;Ecl4n?ji6GDyZYXt@`BG=D6{^d(-)_`=*8afVHZ4vtQ)Knj&&|pufE~j z=umH!gSP|5HzGUD5u3|5j@cQ@E4L=KC+4%4@9XS!*vc9gEv~OqghEwe`P3A5Bkt5- zwL1(MK9J4?ocd%T^JU{hj-{Ir@MoXy$v(h3hBa~(mdnO>_kM@$wV0lJ5a{_bac}Xf zr=PK;sc_rl`(tno3jD6HV^%KOW=Z|qF?gEaPiEwSqgi5i1-57V>?P~KpM|xx`Oxce zgNZ~+uX-N|nQ^PtR5<>ts=+s92kn1l7~#4@$N*m}cu@J@4fZ;;kP1cZjNY{)#)mCe)q39%gZtn2{0Y)w$-W{Xk0VK3|jw5W3mZFSebLDk>1t%2T6QJ$lBWIq?=^3g|i%v;xDskI*%q##9tva zP{@?546hhuQo&Nmtrpb^C<+SNRB3KcD;ue`EMYGj1sItTL5<;|Q|Z)@%A(+@y%af_ zPKmp7;;zHs=2MbnpOYX7n9%6B$FShJ4@Sb>f(*T^Tgplp3_0DMrIq z7^DE`*#%osF}ZyWt|TUkJMdlyKH%4X-vfNk?Vr5`nK|wM!_S(c@Qz7PQ^qhSp1&@d z;|0AgK5RjzUIik9tF&Rh3%SMGG&vUVArZgeYoqs7dhL>Vqbm3oqZYgzrO;+PqgWL7 z3RjsYppxzoP0`YUY4L+E$e8Zn+iWmCBpTYtK*^V4xi?(jz>;HGAyr#s1>bXyMk^!m zw-8hxNkE=&Z5&ufF(z;v4+d~)X0O55(q+LJ8tA(vZZ z3gd8!W9C?+ETlG6nWlaT($vh>K#=AWbV1=ZjgzB>x)uHR+1nW zjM-vzY8RFz%S*kFn;@Ai7*}ujyTS6(-w7|uU#gV*F0i)u_UJW@3KtQF+B@ zEu>!m(&-9CX)4q6;vmk7Bm{qU(N&PJT6-fDkrGTda=1g!dEAoFG8LLODNL%^Ng zb1&ur=FyLljvp=?SKWsha?s-Q>_VU~hlyR9Cr{U7aZ}>7$Ni&m3<~@@STQRbZL_3q zcMQJHA0{*M$k8k|`y9*juiThgf9!VMrVFK7bw3d@<3`D;uxyuQgBxTI?Vqw&TNDFa z-w-muWd)Bi`?tYThc>dg5*008+50Wqibo?DJjRn2v4sXqrcH@Kdq}#WqHx?%^YIkq dN*I)e7?qE=%a7RFJ6hQ%@*jd(njeG+006yH{iOf^ literal 0 HcmV?d00001 diff --git a/es-app/assets/org.es_de.emulationstation-de.appdata.xml b/es-app/assets/org.es_de.frontend.appdata.xml similarity index 94% rename from es-app/assets/org.es_de.emulationstation-de.appdata.xml rename to es-app/assets/org.es_de.frontend.appdata.xml index e2f20ea64..6a26e499b 100644 --- a/es-app/assets/org.es_de.emulationstation-de.appdata.xml +++ b/es-app/assets/org.es_de.frontend.appdata.xml @@ -1,13 +1,13 @@ - org.es_de.emulationstation-de - EmulationStation Desktop Edition + org.es_de.frontend + ES-DE Emulator frontend -

EmulationStation Desktop Edition (ES-DE) is a frontend for browsing and +

ES-DE (EmulationStation Desktop Edition) is a frontend for browsing and launching games from your multi-platform game collection.

- org.es_de.emulationstation-de.desktop + org.es_de.frontend.desktop Game Emulator diff --git a/es-app/assets/org.es_de.emulationstation-de.desktop b/es-app/assets/org.es_de.frontend.desktop similarity index 67% rename from es-app/assets/org.es_de.emulationstation-de.desktop rename to es-app/assets/org.es_de.frontend.desktop index 287e61bbb..194ac3f3a 100644 --- a/es-app/assets/org.es_de.emulationstation-de.desktop +++ b/es-app/assets/org.es_de.frontend.desktop @@ -1,12 +1,12 @@ [Desktop Entry] Version=1.0 -Exec=emulationstation -Icon=org.es_de.emulationstation-de +Exec=es-de +Icon=org.es_de.frontend Terminal=false Type=Application StartupNotify=true Hidden=false Categories=Game;Emulator; -Name=EmulationStation Desktop Edition +Name=ES-DE GenericName=Emulator Frontend Keywords=emulator;emulation;front-end;frontend; diff --git a/es-app/assets/org.es_de.emulationstation-de.svg b/es-app/assets/org.es_de.frontend.svg similarity index 100% rename from es-app/assets/org.es_de.emulationstation-de.svg rename to es-app/assets/org.es_de.frontend.svg diff --git a/es-app/assets/org.es_de.emulationstation-de.yml b/es-app/assets/org.es_de.frontend.yml similarity index 93% rename from es-app/assets/org.es_de.emulationstation-de.yml rename to es-app/assets/org.es_de.frontend.yml index 721cab5a0..01b208538 100644 --- a/es-app/assets/org.es_de.emulationstation-de.yml +++ b/es-app/assets/org.es_de.frontend.yml @@ -1,16 +1,16 @@ # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition -# org.es_de.emulationstation-de.yml +# ES-DE +# org.es_de.frontend.yml # # Flatpak manifest file for use with flatpak-builder. # -app-id: org.es_de.emulationstation-de +app-id: org.es_de.frontend-de sdk: org.freedesktop.Sdk runtime: org.freedesktop.Platform runtime-version: '21.08' -command: emulationstation +command: es-de finish-args: - --share=ipc - --socket=x11 diff --git a/es-app/src/ApplicationUpdater.cpp b/es-app/src/ApplicationUpdater.cpp index eade0ca9b..87b2db0b3 100644 --- a/es-app/src/ApplicationUpdater.cpp +++ b/es-app/src/ApplicationUpdater.cpp @@ -9,7 +9,7 @@ #include "ApplicationUpdater.h" -#include "EmulationStation.h" +#include "ApplicationVersion.h" #include "Log.h" #include "Settings.h" #include "resources/ResourceManager.h" diff --git a/es-app/src/EmulationStation.h b/es-app/src/ApplicationVersion.h similarity index 79% rename from es-app/src/EmulationStation.h rename to es-app/src/ApplicationVersion.h index b2d6f695e..e44be5094 100644 --- a/es-app/src/EmulationStation.h +++ b/es-app/src/ApplicationVersion.h @@ -1,12 +1,11 @@ // SPDX-License-Identifier: MIT // -// EmulationStation.h -// -// Version and build information. +// ES-DE +// ApplicationVersion.h // -#ifndef ES_APP_EMULATION_STATION_H -#define ES_APP_EMULATION_STATION_H +#ifndef ES_APP_APPLICATION_VERSION_H +#define ES_APP_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. @@ -23,4 +22,4 @@ #define RESOURCE_VERSION_STRING "3,0,0\0" #define RESOURCE_VERSION PROGRAM_VERSION_MAJOR, PROGRAM_VERSION_MINOR, PROGRAM_VERSION_MAINTENANCE -#endif // ES_APP_EMULATION_STATION_H +#endif // ES_APP_APPLICATION_VERSION_H diff --git a/es-app/src/guis/GuiApplicationUpdater.cpp b/es-app/src/guis/GuiApplicationUpdater.cpp index cad6fca54..39a47e489 100644 --- a/es-app/src/guis/GuiApplicationUpdater.cpp +++ b/es-app/src/guis/GuiApplicationUpdater.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiApplicationUpdater.cpp // // Installs application updates. @@ -9,7 +9,7 @@ #include "guis/GuiApplicationUpdater.h" -#include "EmulationStation.h" +#include "ApplicationVersion.h" #include "guis/GuiTextEditKeyboardPopup.h" #include "guis/GuiTextEditPopup.h" #include "utils/PlatformUtil.h" diff --git a/es-app/src/guis/GuiApplicationUpdater.h b/es-app/src/guis/GuiApplicationUpdater.h index ec6dcb82b..f410052b5 100644 --- a/es-app/src/guis/GuiApplicationUpdater.h +++ b/es-app/src/guis/GuiApplicationUpdater.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiApplicationUpdater.h // // Installs application updates. diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 09a6806d5..25cd61d24 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -14,8 +14,8 @@ #include #endif +#include "ApplicationVersion.h" #include "CollectionSystemsManager.h" -#include "EmulationStation.h" #include "FileFilterIndex.h" #include "FileSorts.h" #include "Scripting.h" @@ -73,12 +73,12 @@ GuiMenu::GuiMenu() if (!Settings::getInstance()->getBool("ForceKiosk") && Settings::getInstance()->getString("UIMode") != "kiosk") { #if defined(__APPLE__) - addEntry("QUIT EMULATIONSTATION", mMenuColorPrimary, false, [this] { openQuitMenu(); }); + addEntry("QUIT ES-DE", mMenuColorPrimary, false, [this] { openQuitMenu(); }); #else if (Settings::getInstance()->getBool("ShowQuitMenu")) addEntry("QUIT", mMenuColorPrimary, true, [this] { openQuitMenu(); }); else - addEntry("QUIT EMULATIONSTATION", mMenuColorPrimary, false, [this] { openQuitMenu(); }); + addEntry("QUIT ES-DE", mMenuColorPrimary, false, [this] { openQuitMenu(); }); #endif } @@ -1789,8 +1789,8 @@ void GuiMenu::openQuitMenu() }, "NO", nullptr)); }); - auto quitText = std::make_shared( - "QUIT EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), mMenuColorPrimary); + auto quitText = std::make_shared("QUIT ES-DE", Font::get(FONT_SIZE_MEDIUM), + mMenuColorPrimary); quitText->setSelectable(true); row.addElement(quitText, true); s->addRow(row); @@ -1840,10 +1840,10 @@ void GuiMenu::addVersionInfo() mVersion.setColor(mMenuColorTertiary); #if defined(IS_PRERELEASE) - mVersion.setText("EMULATIONSTATION-DE V" + Utils::String::toUpper(PROGRAM_VERSION_STRING) + - " (Built " + __DATE__ + ")"); + mVersion.setText("ES-DE V" + Utils::String::toUpper(PROGRAM_VERSION_STRING) + " (Built " + + __DATE__ + ")"); #else - mVersion.setText("EMULATIONSTATION-DE V" + Utils::String::toUpper(PROGRAM_VERSION_STRING)); + mVersion.setText("ES-DE V" + Utils::String::toUpper(PROGRAM_VERSION_STRING)); #endif mVersion.setHorizontalAlignment(ALIGN_CENTER); diff --git a/es-app/src/guis/GuiThemeDownloader.cpp b/es-app/src/guis/GuiThemeDownloader.cpp index c734b638c..ed31f638a 100644 --- a/es-app/src/guis/GuiThemeDownloader.cpp +++ b/es-app/src/guis/GuiThemeDownloader.cpp @@ -8,7 +8,7 @@ #include "guis/GuiThemeDownloader.h" -#include "EmulationStation.h" +#include "ApplicationVersion.h" #include "ThemeData.h" #include "components/MenuComponent.h" #include "resources/ResourceManager.h" diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index fcb4f218b..4b9cd3952 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -13,9 +13,9 @@ // #include "ApplicationUpdater.h" +#include "ApplicationVersion.h" #include "AudioManager.h" #include "CollectionSystemsManager.h" -#include "EmulationStation.h" #include "InputManager.h" #include "Log.h" #include "MameNames.h" @@ -385,15 +385,15 @@ bool parseArguments(const std::vector& arguments) Log::setReportingLevel(LogDebug); } else if (arguments[i] == "--version" || arguments[i] == "-v") { - std::cout << "EmulationStation Desktop Edition v" << PROGRAM_VERSION_STRING << " (r" + std::cout << "ES-DE v" << PROGRAM_VERSION_STRING << " (r" << PROGRAM_RELEASE_NUMBER << ")\n"; return false; } else if (arguments[i] == "--help" || arguments[i] == "-h") { std::cout << // clang-format off -"Usage: emulationstation [options]\n" -"EmulationStation Desktop Edition, Emulator Frontend\n\n" +"Usage: es-de [options]\n" +"ES-DE (EmulationStation Desktop Edition), Emulator Frontend\n\n" "Options:\n" " --display [1 to 4] Display/monitor to use\n" " --resolution [width] [height] Application resolution\n" @@ -428,7 +428,7 @@ bool parseArguments(const std::vector& arguments) else { const std::string argUnknown {arguments[i]}; std::cout << "Unknown option '" << argUnknown << "'.\n"; - std::cout << "Try 'emulationstation --help' for more information.\n"; + std::cout << "Try 'es-de --help' for more information.\n"; return false; } } @@ -540,7 +540,7 @@ int main(int argc, char* argv[]) // macOS which forces a restore of the previous window state. The problem is that this // removes the splash screen on startup and it may have other adverse effects as well. std::string saveStateDir {Utils::FileSystem::expandHomePath( - "~/Library/Saved Application State/org.es-de.EmulationStation.savedState")}; + "~/Library/Saved Application State/org.es-de.Frontend.savedState")}; // Deletion of the state files should normally not be required as there shouldn't be any // files to begin with. But maybe the files can still be created for unknown reasons // as macOS really really loves to restore windows. Let's therefore include this deletion @@ -623,7 +623,7 @@ int main(int argc, char* argv[]) // Start the logger. Log::init(); Log::open(); - LOG(LogInfo) << "EmulationStation Desktop Edition v" << PROGRAM_VERSION_STRING << " (r" + LOG(LogInfo) << "ES-DE v" << PROGRAM_VERSION_STRING << " (r" << PROGRAM_RELEASE_NUMBER << "), built " << PROGRAM_BUILT_STRING; if (portableMode) { LOG(LogInfo) << "Running in portable mode"; @@ -639,7 +639,7 @@ int main(int argc, char* argv[]) if (createSystemDirectories) { if (!SystemData::createSystemDirectories() && !Settings::getInstance()->getBool("Debug")) std::cout << "System directories successfully created" << std::endl; - LOG(LogInfo) << "EmulationStation cleanly shutting down"; + LOG(LogInfo) << "ES-DE cleanly shutting down"; #if defined(_WIN64) FreeConsole(); #endif @@ -1042,7 +1042,7 @@ int main(int argc, char* argv[]) Utils::Platform::processQuitMode(); - LOG(LogInfo) << "EmulationStation cleanly shutting down"; + LOG(LogInfo) << "ES-DE cleanly shutting down"; #if defined(_WIN64) FreeConsole(); diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index 19226591f..425f0a50f 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ScreenScraper.cpp // // Functions specifically for scraping from screenscraper.fr diff --git a/es-app/src/scrapers/ScreenScraper.h b/es-app/src/scrapers/ScreenScraper.h index e132ac173..7444143dd 100644 --- a/es-app/src/scrapers/ScreenScraper.h +++ b/es-app/src/scrapers/ScreenScraper.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ScreenScraper.h // // Functions specifically for scraping from screenscraper.fr @@ -10,7 +10,7 @@ #ifndef ES_APP_SCRAPERS_SCREEN_SCRAPER_H #define ES_APP_SCRAPERS_SCREEN_SCRAPER_H -#include "EmulationStation.h" +#include "ApplicationVersion.h" #include "scrapers/Scraper.h" namespace pugi diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 65fe0766a..e5b6c1adb 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ViewController.cpp // // Handles overall system navigation including animations and transitions. @@ -140,7 +140,7 @@ void ViewController::setMenuColors() void ViewController::legacyAppDataDialog() { const std::string upgradeMessage { - "IN ES-DE 3.0 THE APPLICATION DATA DIRECTORY HAS CHANGED FROM \".emulationstation\" to " + "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().string() + "\nTO THE FOLLOWING:\n" + Utils::FileSystem::getAppDataDirectory().parent_path().append("ES-DE").string()}; diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 18e65adf7..6d99cf5b4 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ViewController.h // // Handles overall system navigation including animations and transitions. diff --git a/es-core/src/renderers/Renderer.cpp b/es-core/src/renderers/Renderer.cpp index ce60b5c94..712ef54fa 100644 --- a/es-core/src/renderers/Renderer.cpp +++ b/es-core/src/renderers/Renderer.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Renderer.cpp // // Generic rendering functions. @@ -221,10 +221,9 @@ bool Renderer::createWindow() windowFlags = SDL_WINDOW_OPENGL; #endif - if ((mSDLWindow = - SDL_CreateWindow("EmulationStation", SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), - SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), mWindowWidth, - mWindowHeight, windowFlags)) == nullptr) { + if ((mSDLWindow = SDL_CreateWindow("ES-DE", SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), + SDL_WINDOWPOS_UNDEFINED_DISPLAY(displayIndex), mWindowWidth, + mWindowHeight, windowFlags)) == nullptr) { LOG(LogError) << "Couldn't create SDL window. " << SDL_GetError(); return false; } @@ -250,7 +249,7 @@ bool Renderer::createWindow() << std::to_string(displayMode.w * scaleFactor) << "x" << std::to_string(displayMode.h * scaleFactor) << ")"; LOG(LogInfo) << "Display refresh rate: " << std::to_string(displayMode.refresh_rate) << " Hz"; - LOG(LogInfo) << "EmulationStation resolution: " << std::to_string(sScreenWidth) << "x" + LOG(LogInfo) << "Application resolution: " << std::to_string(sScreenWidth) << "x" << std::to_string(sScreenHeight) << " (physical resolution " << std::to_string(sScreenWidth * scaleFactor) << "x" << std::to_string(sScreenHeight * scaleFactor) << ")"; @@ -268,7 +267,7 @@ bool Renderer::createWindow() LOG(LogInfo) << "Display resolution: " << std::to_string(displayMode.w) << "x" << std::to_string(displayMode.h); LOG(LogInfo) << "Display refresh rate: " << std::to_string(displayMode.refresh_rate) << " Hz"; - LOG(LogInfo) << "EmulationStation resolution: " << std::to_string(sScreenWidth) << "x" + LOG(LogInfo) << "Application resolution: " << std::to_string(sScreenWidth) << "x" << std::to_string(sScreenHeight); #endif diff --git a/es-core/src/renderers/Renderer.h b/es-core/src/renderers/Renderer.h index 173aa73e6..4ec4d1dfa 100644 --- a/es-core/src/renderers/Renderer.h +++ b/es-core/src/renderers/Renderer.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Renderer.h // // Generic rendering functions. diff --git a/es-core/src/renderers/RendererOpenGL.cpp b/es-core/src/renderers/RendererOpenGL.cpp index ed724fc72..6e60ff90d 100644 --- a/es-core/src/renderers/RendererOpenGL.cpp +++ b/es-core/src/renderers/RendererOpenGL.cpp @@ -241,14 +241,14 @@ bool RendererOpenGL::createContext() #endif #if defined(USE_OPENGLES) - LOG(LogInfo) << "EmulationStation renderer: OpenGL ES " << mMajorGLVersion << "." + LOG(LogInfo) << "Application renderer: OpenGL ES " << mMajorGLVersion << "." << mMinorGLVersion; #else #if defined(_WIN64) - LOG(LogInfo) << "EmulationStation renderer: OpenGL " << mMajorGLVersion << "." + LOG(LogInfo) << "Application renderer: OpenGL " << mMajorGLVersion << "." << mMinorGLVersion << " with GLEW"; #else - LOG(LogInfo) << "EmulationStation renderer: OpenGL " << mMajorGLVersion << "." + LOG(LogInfo) << "Application renderer: OpenGL " << mMajorGLVersion << "." << mMinorGLVersion; #endif #endif diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index 941e89c1e..d4a0c5ead 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -64,7 +64,7 @@ std::string ResourceManager::getResourcePath(const std::string& path, bool termi return testExePath; } // For missing resources, log an error and terminate the application. This should - // indicate that we have a broken EmulationStation installation. If the argument + // indicate that we have a broken ES-DE installation. If the argument // terminateOnFailure is set to false though, then skip this step. else { #endif @@ -80,7 +80,7 @@ std::string ResourceManager::getResourcePath(const std::string& path, bool termi #if !defined(__ANDROID__) LOG(LogError) << testExePath; #endif - LOG(LogError) << "Has EmulationStation been properly installed?"; + LOG(LogError) << "Has ES-DE been properly installed?"; Utils::Platform::emergencyShutdown(); } else { diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index e09353bad..4952eb525 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -470,7 +470,7 @@ namespace Utils #if defined(__ANDROID__) return AndroidVariables::sInternalDataDirectory; #elif defined(__unix__) - return std::filesystem::path {installPrefix}.append("share").append("emulationstation"); + return std::filesystem::path {installPrefix}.append("share").append("es-de"); #else return std::filesystem::path {}; #endif diff --git a/es-pdf-converter/src/main.cpp b/es-pdf-converter/src/main.cpp index 552cf7087..65df7085d 100644 --- a/es-pdf-converter/src/main.cpp +++ b/es-pdf-converter/src/main.cpp @@ -48,7 +48,7 @@ int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmd validArguments = false; if (!validArguments) { - std::cout << "This binary is only intended to be executed by EmulationStation.exe (ES-DE)" + std::cout << "This binary is only intended to be executed by ES-DE.exe" << std::endl; exit(-1); } @@ -79,9 +79,9 @@ int main(int argc, char* argv[]) if (!validArguments) { #if defined(__APPLE__) - std::cout << "This binary is only intended to be executed by EmulationStation (ES-DE)" + std::cout << "This binary is only intended to be executed by ES-DE" #else - std::cout << "This binary is only intended to be executed by emulationstation (ES-DE)" + std::cout << "This binary is only intended to be executed by es-de" #endif << std::endl; exit(-1); diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index e6056f6ce..098fb6daa 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -1,6 +1,6 @@ # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # CMakeLists.txt (external) # # CMake configuration for bundled dependencies built in-tree. diff --git a/tools/Windows_dependencies_build_MSVC.bat b/tools/Windows_dependencies_build_MSVC.bat index 3b58a5442..89d6dcac9 100644 --- a/tools/Windows_dependencies_build_MSVC.bat +++ b/tools/Windows_dependencies_build_MSVC.bat @@ -1,6 +1,6 @@ :: SPDX-License-Identifier: MIT :: -:: EmulationStation Desktop Edition +:: ES-DE :: Windows_dependencies_build_MSVC.bat :: :: Builds the external dependencies in-tree using MSVC. diff --git a/tools/Windows_dependencies_build_MinGW.sh b/tools/Windows_dependencies_build_MinGW.sh index 5ff152e8a..6112d4a63 100644 --- a/tools/Windows_dependencies_build_MinGW.sh +++ b/tools/Windows_dependencies_build_MinGW.sh @@ -1,7 +1,7 @@ #!/bin/sh # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # Windows_dependencies_build_MinGW.sh # # Builds the external dependencies in-tree. diff --git a/tools/Windows_dependencies_setup_MSVC.bat b/tools/Windows_dependencies_setup_MSVC.bat index b1e336103..d85b3c5ac 100644 --- a/tools/Windows_dependencies_setup_MSVC.bat +++ b/tools/Windows_dependencies_setup_MSVC.bat @@ -1,6 +1,6 @@ :: SPDX-License-Identifier: MIT :: -:: EmulationStation Desktop Edition +:: ES-DE :: Windows_dependencies_setup_MSVC.bat :: :: Downloads and prepares the external dependencies for building in-tree using MSVC. diff --git a/tools/Windows_dependencies_setup_MinGW.sh b/tools/Windows_dependencies_setup_MinGW.sh index bc4367e9c..db3737370 100644 --- a/tools/Windows_dependencies_setup_MinGW.sh +++ b/tools/Windows_dependencies_setup_MinGW.sh @@ -1,7 +1,7 @@ #!/bin/sh # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # Windows_dependencies_setup_MinGW.sh # # Downloads and prepares the external dependencies for building in-tree. diff --git a/tools/create_AppImage.sh b/tools/create_AppImage.sh index 458ba1f0d..db6d45243 100755 --- a/tools/create_AppImage.sh +++ b/tools/create_AppImage.sh @@ -1,7 +1,7 @@ #!/usr/bin/bash # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # create_AppImage.sh # # Runs the complete process of building a Linux AppImage. @@ -72,22 +72,18 @@ make clean make -j${JOBS} make install DESTDIR=AppDir cd AppDir -ln -s usr/bin/emulationstation AppRun -ln -s usr/share/pixmaps/emulationstation.svg . -ln -s usr/share/applications/org.es_de.emulationstation-de.desktop . -ln -s emulationstation.svg .DirIcon +ln -s usr/bin/es-de AppRun +ln -s usr/share/pixmaps/es-de.svg . +ln -s usr/share/applications/org.es_de.frontend.desktop . +ln -s es-de.svg .DirIcon cd usr/bin -ln -s ../share/emulationstation/resources . -ln -s ../share/emulationstation/themes . +ln -s ../share/es-de/resources . +ln -s ../share/es-de/themes . cd ../../.. ./linuxdeploy-x86_64.AppImage -l /lib/x86_64-linux-gnu/libOpenGL.so.0 -l /lib/x86_64-linux-gnu/libGLdispatch.so.0 -l /lib/x86_64-linux-gnu/libgio-2.0.so.0 --appdir AppDir cp external/SDL/build/${SDL_SHARED_LIBRARY} AppDir/usr/lib/libSDL2-2.0.so.0 ./appimagetool-x86_64.AppImage AppDir -#VERSION=$(grep PROGRAM_VERSION_STRING es-app/src/EmulationStation.h | cut -f3 -d" " | sed s/\"//g) -#mv EmulationStation_Desktop_Edition-x86_64.AppImage EmulationStation-DE-${VERSION}-x64.AppImage -#echo -e "\nCreated AppImage EmulationStation-DE-${VERSION}-x64.AppImage" - -mv EmulationStation_Desktop_Edition-x86_64.AppImage EmulationStation-DE-x64.AppImage -echo -e "\nCreated AppImage EmulationStation-DE-x64.AppImage" +mv ES-DE-x86_64.AppImage ES-DE_x64.AppImage +echo -e "\nCreated AppImage ES-DE_x64.AppImage" diff --git a/tools/create_AppImage_SteamDeck.sh b/tools/create_AppImage_SteamDeck.sh index 9228e9870..9bc4422b1 100755 --- a/tools/create_AppImage_SteamDeck.sh +++ b/tools/create_AppImage_SteamDeck.sh @@ -1,7 +1,7 @@ #!/usr/bin/bash # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # create_AppImage_SteamDeck.sh # # Runs the complete process of building a Linux AppImage specific to the Valve Steam Deck. @@ -72,18 +72,18 @@ make clean make -j${JOBS} make install DESTDIR=AppDir cd AppDir -ln -s usr/bin/emulationstation AppRun -ln -s usr/share/pixmaps/emulationstation.svg . -ln -s usr/share/applications/org.es_de.emulationstation-de.desktop . -ln -s emulationstation.svg .DirIcon +ln -s usr/bin/es-de AppRun +ln -s usr/share/pixmaps/es-de.svg . +ln -s usr/share/applications/org.es_de.frontend.desktop . +ln -s es-de.svg .DirIcon cd usr/bin -ln -s ../share/emulationstation/resources . -ln -s ../share/emulationstation/themes . +ln -s ../share/es-de/resources . +ln -s ../share/es-de/themes . cd ../../.. ./linuxdeploy-x86_64.AppImage -l /lib/x86_64-linux-gnu/libOpenGL.so.0 -l /lib/x86_64-linux-gnu/libGLdispatch.so.0 -l /lib/x86_64-linux-gnu/libgio-2.0.so.0 --appdir AppDir cp external/SDL/build/${SDL_SHARED_LIBRARY} AppDir/usr/lib/libSDL2-2.0.so.0 ./appimagetool-x86_64.AppImage AppDir -mv EmulationStation_Desktop_Edition-x86_64.AppImage EmulationStation-DE-x64_SteamDeck.AppImage -echo -e "\nCreated AppImage EmulationStation-DE-x64_SteamDeck.AppImage" +mv ES-DE-x86_64.AppImage ES-DE_x64_SteamDeck.AppImage +echo -e "\nCreated AppImage ES-DE_x64_SteamDeck.AppImage" diff --git a/tools/create_dummy_game_files.sh b/tools/create_dummy_game_files.sh index 121f3463b..a13bc8cfd 100755 --- a/tools/create_dummy_game_files.sh +++ b/tools/create_dummy_game_files.sh @@ -1,7 +1,7 @@ #!/usr/bin/bash # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # create_dummy_game_files.sh # # This script generates dummy files for each system in the ROM directory and is intended diff --git a/tools/generate_man_page.sh b/tools/generate_man_page.sh index 814afe4f1..6b4f7008e 100755 --- a/tools/generate_man_page.sh +++ b/tools/generate_man_page.sh @@ -1,7 +1,7 @@ #!/usr/bin/bash # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # generate_man_page.sh # # Generates the Unix manual page. @@ -18,25 +18,25 @@ if [ ! -f ../es-app/CMakeLists.txt ]; then exit fi -ESBINARY=../emulationstation +ESBINARY=../es-de TEMPFILE_INPUT=tempfile_input_$(date +%H%M%S) TEMPFILE_OUTPUT=tempfile_output_$(date +%H%M%S) -TARGET_FILENAME=emulationstation.6 +TARGET_FILENAME=es-de.6 MAN_INCLUDE=" [NAME] -emulationstation - EmulationStation Desktop Edition +es-de - ES-DE (EmulationStation Desktop Edition) [DESCRIPTION] -EmulationStation Desktop Edition (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 game collection. [AUTHOR] -Leon Styhre (Desktop Edition) +Leon Styhre -RetroPie community (RetroPie fork) +RetroPie community (RetroPie EmulationStation fork) -Alec Lofquist (original version) +Alec Lofquist (original EmulationStation) [SEE ALSO] Full documentation available at: @@ -48,13 +48,13 @@ help2man --section 6 --no-info --include $TEMPFILE_INPUT $ESBINARY > $TEMPFILE_O # Manual string replacements, these may need to be modified if changes are made to the # command line --help output. -cat $TEMPFILE_OUTPUT | sed s/"EmulationStation Desktop Edition, Emulator Frontend"/""/g | \ +cat $TEMPFILE_OUTPUT | sed s/"ES\\\-DE (EmulationStation Desktop Edition), Emulator Frontend"/""/g | \ sed s/"Set to at least"/".br\nSet to at least"/ > $TARGET_FILENAME gzip -9 $TARGET_FILENAME mv ${TARGET_FILENAME}.gz ../es-app/assets/ -echo "The man page was generated and saved to ../es-app/assets/emulationstation.6.gz" +echo "The man page was generated and saved to ../es-app/assets/es-de.6.gz" rm $TEMPFILE_INPUT rm $TEMPFILE_OUTPUT diff --git a/tools/macOS_dependencies_build.sh b/tools/macOS_dependencies_build.sh index 0832035c1..1c483395f 100755 --- a/tools/macOS_dependencies_build.sh +++ b/tools/macOS_dependencies_build.sh @@ -1,7 +1,7 @@ #!/bin/sh # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # macOS_dependencies_build.sh # # Builds the external dependencies in-tree. diff --git a/tools/macOS_dependencies_setup.sh b/tools/macOS_dependencies_setup.sh index a5615cdf8..cb0507333 100755 --- a/tools/macOS_dependencies_setup.sh +++ b/tools/macOS_dependencies_setup.sh @@ -1,7 +1,7 @@ #!/bin/sh # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # macOS_dependencies_setup.sh # # Downloads and prepares the external dependencies for building in-tree. diff --git a/tools/mame_create_index_files.sh b/tools/mame_create_index_files.sh index f114d18b8..35aa6ad8d 100755 --- a/tools/mame_create_index_files.sh +++ b/tools/mame_create_index_files.sh @@ -1,7 +1,7 @@ #!/usr/bin/bash # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # mame_create_index_files.sh # # As input, this script takes the MAME driver information XML file from the official diff --git a/tools/mame_merge_index_files.sh b/tools/mame_merge_index_files.sh index 71a844445..feab2c9c5 100755 --- a/tools/mame_merge_index_files.sh +++ b/tools/mame_merge_index_files.sh @@ -1,7 +1,7 @@ #!/usr/bin/bash # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # mame_merge_index_files.sh # # This script merges older ROM index files with newly generated ones. diff --git a/tools/reformat_codebase.sh b/tools/reformat_codebase.sh index c5658dc75..b40b65319 100755 --- a/tools/reformat_codebase.sh +++ b/tools/reformat_codebase.sh @@ -1,7 +1,7 @@ #!/usr/bin/bash # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # reformat_codebase.sh # # Automatically reformats the codebase using clang-format. diff --git a/tools/update_version_string.sh b/tools/update_version_string.sh index 43e9e96be..e44278b22 100755 --- a/tools/update_version_string.sh +++ b/tools/update_version_string.sh @@ -1,10 +1,10 @@ #!/usr/bin/bash # SPDX-License-Identifier: MIT # -# EmulationStation Desktop Edition +# ES-DE # update_version_string.sh # -# Updates the version string for EmulationStation Desktop Edition. +# Updates the version string for ES-DE. # This script takes as arguments the major, minor and patch numbers as well as an optional # alphanumeric suffix and updates all the necessary files to indicate a new software version. # The script has to be run from within the tools directory. @@ -14,8 +14,8 @@ # # The following files are updated by this script: # es-app/CMakeLists.txt -# es-app/src/EmulationStation.h -# es-app/assets/EmulationStation-DE_Info.plist +# es-app/src/ApplicationVersion.h +# es-app/assets/ES-DE.plist # es-app/assets/Windows_Portable_README.txt # # This script is only intended to be used on Linux systems. @@ -50,9 +50,9 @@ NEWSTRING="set(ES_VERSION ${1}.${2}.${3}${SUFFIX})" cat $MODIFYFILE | sed s/"${MODIFYSTRING}"/"${NEWSTRING}"/ > $TEMPFILE mv $TEMPFILE $MODIFYFILE -##### EmulationStation.h +##### ApplicationVersion.h -MODIFYFILE=../es-app/src/EmulationStation.h +MODIFYFILE=../es-app/src/ApplicationVersion.h MODIFYSTRING=$(grep "PROGRAM_VERSION_MAJOR " $MODIFYFILE) NEWSTRING="#define PROGRAM_VERSION_MAJOR ${1}" @@ -94,13 +94,13 @@ NEWSTRING=$(grep "PROGRAM_RELEASE_NUMBER" $MODIFYFILE | sed "s/$OLDRELEASE/$NEWR cat $MODIFYFILE | sed s/"${MODIFYSTRING}"/"${NEWSTRING}"/ > $TEMPFILE mv $TEMPFILE $MODIFYFILE -##### EmulationStation-DE_Info.plist +##### ES-DE_Info.plist -MODIFYFILE=../es-app/assets/EmulationStation-DE_Info.plist -MODIFYSTRING=$(grep "EmulationStation Desktop Edition " $MODIFYFILE) +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="EmulationStation Desktop Edition ${1}.${2}.${3}" +NEWSTRING="ES-DE ${1}.${2}.${3}" cat $MODIFYFILE | sed s/"${MODIFYSTRING}"/"${NEWSTRING}"/ > $TEMPFILE mv $TEMPFILE $MODIFYFILE From 946a783100bad382487573b7eeb5871cf281db23 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 12:37:09 +0100 Subject: [PATCH 054/320] The .emulationstation directory is now ignored if there is already an ES-DE directory --- es-core/src/utils/FileSystemUtil.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 4952eb525..2cce7ba8c 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -319,7 +319,11 @@ namespace Utils return getHomePathSTD(); #else if (FileSystemVariables::sAppDataDirectory.empty()) { - if (Utils::FileSystem::existsSTD(getHomePathSTD().append(".emulationstation"))) { + if (Utils::FileSystem::existsSTD(getHomePathSTD().append("ES-DE"))) { + FileSystemVariables::sAppDataDirectory = getHomePathSTD().append("ES-DE"); + } + else if (Utils::FileSystem::existsSTD( + getHomePathSTD().append(".emulationstation"))) { FileSystemVariables::sAppDataDirectory = getHomePathSTD().append(".emulationstation"); } From 882f7de5187432b3ab4996c653a6440ae4c4978c Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 12:55:40 +0100 Subject: [PATCH 055/320] Small change to the .gitignore file --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index bf36f803d..6e70e3edc 100644 --- a/.gitignore +++ b/.gitignore @@ -22,7 +22,7 @@ /ES-DE /ES-DE.exe /es-pdf-convert -/es-pdf-convert.exe +/es-pdf-converter/es-pdf-convert.exe # Emscripten build es-de.data From a0b4b006a718db3519e2590083c6c58d6d302e30 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 13:15:55 +0100 Subject: [PATCH 056/320] Minor code formatting update --- es-core/src/renderers/RendererOpenGL.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/es-core/src/renderers/RendererOpenGL.cpp b/es-core/src/renderers/RendererOpenGL.cpp index 6e60ff90d..5f1c00003 100644 --- a/es-core/src/renderers/RendererOpenGL.cpp +++ b/es-core/src/renderers/RendererOpenGL.cpp @@ -241,15 +241,13 @@ bool RendererOpenGL::createContext() #endif #if defined(USE_OPENGLES) - LOG(LogInfo) << "Application renderer: OpenGL ES " << mMajorGLVersion << "." - << mMinorGLVersion; + LOG(LogInfo) << "Application renderer: OpenGL ES " << mMajorGLVersion << "." << mMinorGLVersion; #else #if defined(_WIN64) - LOG(LogInfo) << "Application renderer: OpenGL " << mMajorGLVersion << "." - << mMinorGLVersion << " with GLEW"; + LOG(LogInfo) << "Application renderer: OpenGL " << mMajorGLVersion << "." << mMinorGLVersion + << " with GLEW"; #else - LOG(LogInfo) << "Application renderer: OpenGL " << mMajorGLVersion << "." - << mMinorGLVersion; + LOG(LogInfo) << "Application renderer: OpenGL " << mMajorGLVersion << "." << mMinorGLVersion; #endif #endif From 8887b9684cebdeec11636b6211110c9b177d914d Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 13:17:13 +0100 Subject: [PATCH 057/320] Old logs are now deleted when creating the logs folder inside the application data directory --- es-app/src/main.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 4b9cd3952..840849b02 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -385,8 +385,8 @@ bool parseArguments(const std::vector& arguments) Log::setReportingLevel(LogDebug); } else if (arguments[i] == "--version" || arguments[i] == "-v") { - std::cout << "ES-DE v" << PROGRAM_VERSION_STRING << " (r" - << PROGRAM_RELEASE_NUMBER << ")\n"; + std::cout << "ES-DE v" << PROGRAM_VERSION_STRING << " (r" << PROGRAM_RELEASE_NUMBER + << ")\n"; return false; } else if (arguments[i] == "--help" || arguments[i] == "-h") { @@ -616,6 +616,13 @@ int main(int argc, char* argv[]) std::cerr << "Couldn't create directory, permission problems?" << std::endl; #endif } + else { + // Remove any old logs in the root of the directory. + Utils::FileSystem::removeFile( + Utils::FileSystem::getAppDataDirectory().append("es_log.txt").string()); + Utils::FileSystem::removeFile( + Utils::FileSystem::getAppDataDirectory().append("es_log.txt.bak").string()); + } } } } @@ -623,8 +630,8 @@ int main(int argc, char* argv[]) // Start the logger. Log::init(); Log::open(); - LOG(LogInfo) << "ES-DE v" << PROGRAM_VERSION_STRING << " (r" - << PROGRAM_RELEASE_NUMBER << "), built " << PROGRAM_BUILT_STRING; + LOG(LogInfo) << "ES-DE v" << PROGRAM_VERSION_STRING << " (r" << PROGRAM_RELEASE_NUMBER + << "), built " << PROGRAM_BUILT_STRING; if (portableMode) { LOG(LogInfo) << "Running in portable mode"; Settings::getInstance()->setBool("PortableMode", true); From 0887f4c0928a61bf4de8cb50a51de55ac12a183d Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 13:55:07 +0100 Subject: [PATCH 058/320] (macOS) Updated the .DS_Store file for the DMG package --- es-app/assets/ES-DE_DS_Store | Bin 6148 -> 6148 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/es-app/assets/ES-DE_DS_Store b/es-app/assets/ES-DE_DS_Store index c7dd91e90270cb49bcbce019e8ebd80764ae46c5..b449f2df05248f0711240ec9e15a5de0c13916ad 100644 GIT binary patch delta 290 zcmZoMXfc=|#>B)qu~2NHo+2aL#DLw44=^$^vQ6e;)UJY L9Je_@WD7F@TslWf delta 196 zcmZoMXfc=|#>B`mu~2NHo+2aD#DLwC4MbQb^D}AGXEHD_T&XBOaO?knAd7)Pg~62} zm!Xs)har)ngdvk5pCOMS7|25K6c}6>QW=UFvVo%c3 Date: Sat, 16 Dec 2023 14:12:23 +0100 Subject: [PATCH 059/320] Documentation update --- CHANGELOG.md | 8 +++++++- CONTRIBUTING.md | 2 +- CREDITS.md | 7 +++---- FAQ.md | 2 +- INSTALL-DEV.md | 4 ++-- INSTALL.md | 4 ++-- LICENSE | 2 +- README.md | 2 +- ROADMAP.md | 2 +- THEMES-DEV.md | 2 +- THEMES.md | 2 +- USERGUIDE-DEV.md | 2 +- USERGUIDE.md | 2 +- 13 files changed, 23 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64d5ffaae..8f0d62698 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) - Changelog +# ES-DE (EmulationStation Desktop Edition) - Changelog ## Version 3.0.0 (in development) @@ -8,11 +8,17 @@ ### Detailed list of changes +* Renamed the application from EmulationStation Desktop Edition to ES-DE +* Renamed the application data directory from .emulationstation to ES-DE * (Unix) Removed the -Minimized flag from the Visual Pinball launch command * (Windows) Updated the find rules for Visual Pinball to match the actual filenames of the official releases +* Added workarounds for some mobile GPUs which do not support all OpenGL operations when using the BGRA pixel format +* Replaced a number of homecooked functions in FileSystemUtil with those from the C++ Standard Library ### Bug fixes +* Font textures were sometimes updated with empty glyhps which generated OpenGL errors on some mobile GPUs + ## Version 2.2.1 **Release date:** 2023-11-12 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 66fd2d33d..aeeb03431 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) - Contributing +# ES-DE (EmulationStation Desktop Edition) - Contributing ### Help needed diff --git a/CREDITS.md b/CREDITS.md index 60df4ea0a..32c64c72f 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -1,11 +1,10 @@ -# EmulationStation Desktop Edition (ES-DE) - Credits +# ES-DE (EmulationStation Desktop Edition) - Credits # Programming -**Desktop Edition**\ +**ES-DE**\ Leon Styhre \ -Sophia Hadash \ -Joseph Geumlek +Sophia Hadash **RetroPie fork**\ RetroPie community diff --git a/FAQ.md b/FAQ.md index f97782154..922d4a0c6 100644 --- a/FAQ.md +++ b/FAQ.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) - Frequently Asked Questions +# ES-DE (EmulationStation Desktop Edition) - Frequently Asked Questions ## What is this project and how is it related to other EmulationStation forks? diff --git a/INSTALL-DEV.md b/INSTALL-DEV.md index 2ae95beda..0709f81d2 100644 --- a/INSTALL-DEV.md +++ b/INSTALL-DEV.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) v3.0 (development version) - Building and advanced configuration +# ES-DE (EmulationStation Desktop Edition) v3.0 (development version) - Building and advanced configuration This document is only relevant for the current ES-DE development version, if you would like to see the documentation for the latest stable release, refer to [INSTALL.md](INSTALL.md) instead. @@ -1468,7 +1468,7 @@ Here is yet another example with the addition of the `snes` system where some fi This file makes it possible to apply a custom systems sorting without having to modify the es_systems.xml file directly. It should be placed in the custom_systems directory, e.g. `~/.emulationstation/custom_systems/es_systems_sorting.xml` -Note that in order for ES-DE to load this file you'll need to set the _Systems sorting_ option in the _Other settings_ menu to _Full names or custom_. +Note that in order for ES-DE to load this file you'll need to set the _Systems sorting_ option in the _UI settings_ menu to _Full names or custom_. The structure of this file is essentially a simplified version of the es_systems.xml file, but with only the `` and `` tags present per system. diff --git a/INSTALL.md b/INSTALL.md index ab1ec48a2..31967beed 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) v2.2 - Building and advanced configuration +# ES-DE (EmulationStation Desktop Edition) v2.2 - Building and advanced configuration Table of contents: @@ -1466,7 +1466,7 @@ Here is yet another example with the addition of the `snes` system where some fi This file makes it possible to apply a custom systems sorting without having to modify the es_systems.xml file directly. It should be placed in the custom_systems directory, e.g. `~/.emulationstation/custom_systems/es_systems_sorting.xml` -Note that in order for ES-DE to load this file you'll need to set the _Systems sorting_ option in the _Other settings_ menu to _Full names or custom_. +Note that in order for ES-DE to load this file you'll need to set the _Systems sorting_ option in the _UI settings_ menu to _Full names or custom_. The structure of this file is essentially a simplified version of the es_systems.xml file, but with only the `` and `` tags present per system. diff --git a/LICENSE b/LICENSE index 5f27c157e..84a609b0d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2020-2023 Leon Styhre +Copyright (c) 2020-2024 Leon Styhre Copyright (c) 2014 Alec Lofquist Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/README.md b/README.md index f5dbb1713..6f207fde1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) +# ES-DE (EmulationStation Desktop Edition) EmulationStation Desktop Edition is a frontend for browsing and launching games from your multi-platform game collection. diff --git a/ROADMAP.md b/ROADMAP.md index 6e6584f42..6f2898e06 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) - Feature roadmap +# ES-DE (EmulationStation Desktop Edition) - Feature roadmap ES-DE is developed using an agile methodology so which features to include per release is reviewed and adjusted continuously. As such this document is basically a list of the main features that are planned to be added eventually. diff --git a/THEMES-DEV.md b/THEMES-DEV.md index 18491cf6a..90c4aeaea 100644 --- a/THEMES-DEV.md +++ b/THEMES-DEV.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) v3.0 (development version) - Themes +# ES-DE (EmulationStation Desktop Edition) v3.0 (development version) - Themes **Note:** This document is only relevant for the current ES-DE development version, if you would like to see the documentation for the latest stable release, refer to [THEMES.md](THEMES.md) instead. diff --git a/THEMES.md b/THEMES.md index 8cff60738..cf73cd044 100644 --- a/THEMES.md +++ b/THEMES.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) v2.2 - Themes +# ES-DE (EmulationStation Desktop Edition) v2.2 - Themes If creating themes specifically for ES-DE, please add `-es-de` to the repository/directory name, as in `slate-es-de`. Themes made for ES-DE are not compatible with any other EmulationStation forks (and vice versa) and the -es-de extension makes it clear that it's an ES-DE theme. The actual theme name as defined using the `themeName` tag in capabilities.xml does of course not need to include the `-es-de` extension as that's the actual theme name that will be displayed when selecting themes from the _UI Settings_ menu. For example slate-es-de will be listed simply as _Slate_ in this menu. diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index 0b5543f0c..4d5dbc2a1 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) v3.0 (development version) - User guide +# ES-DE (EmulationStation Desktop Edition) v3.0 (development version) - User guide This version of the user guide is only relevant for the current ES-DE development version, if you are using the latest stable release, refer to [USERGUIDE.md](USERGUIDE.md) instead. diff --git a/USERGUIDE.md b/USERGUIDE.md index 63d1276c9..2179da9cc 100644 --- a/USERGUIDE.md +++ b/USERGUIDE.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) v2.2 - User guide +# ES-DE (EmulationStation Desktop Edition) v2.2 - User guide It's generally recommended to read the [Frequently Asked Questions (FAQ)](FAQ.md) document prior to diving into the information in this guide. From a0d636ffb85f6421a84a0b492e52e40b4e05c131 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 19:48:25 +0100 Subject: [PATCH 060/320] Changed the application name to ES-DE in all source file headers --- es-app/src/FileFilterIndex.cpp | 2 +- es-app/src/FileFilterIndex.h | 2 +- es-app/src/FileSorts.cpp | 2 +- es-app/src/FileSorts.h | 2 +- es-app/src/GamelistFileParser.cpp | 2 +- es-app/src/GamelistFileParser.h | 2 +- es-app/src/MediaViewer.cpp | 2 +- es-app/src/MediaViewer.h | 2 +- es-app/src/MetaData.cpp | 2 +- es-app/src/MetaData.h | 2 +- es-app/src/MiximageGenerator.cpp | 2 +- es-app/src/MiximageGenerator.h | 2 +- es-app/src/PDFViewer.cpp | 2 +- es-app/src/PDFViewer.h | 2 +- es-app/src/PlatformId.cpp | 2 +- es-app/src/PlatformId.h | 2 +- es-app/src/Screensaver.cpp | 2 +- es-app/src/Screensaver.h | 2 +- es-app/src/UIModeController.cpp | 2 +- es-app/src/UIModeController.h | 2 +- es-app/src/VolumeControl.cpp | 2 +- es-app/src/VolumeControl.h | 2 +- es-app/src/guis/GuiAlternativeEmulators.cpp | 2 +- es-app/src/guis/GuiAlternativeEmulators.h | 2 +- es-app/src/guis/GuiCollectionSystemsOptions.cpp | 2 +- es-app/src/guis/GuiCollectionSystemsOptions.h | 2 +- es-app/src/guis/GuiGamelistFilter.cpp | 2 +- es-app/src/guis/GuiGamelistFilter.h | 2 +- es-app/src/guis/GuiGamelistOptions.cpp | 2 +- es-app/src/guis/GuiGamelistOptions.h | 2 +- es-app/src/guis/GuiLaunchScreen.cpp | 2 +- es-app/src/guis/GuiLaunchScreen.h | 2 +- es-app/src/guis/GuiMediaViewerOptions.cpp | 2 +- es-app/src/guis/GuiMediaViewerOptions.h | 2 +- es-app/src/guis/GuiMetaDataEd.cpp | 2 +- es-app/src/guis/GuiMetaDataEd.h | 2 +- es-app/src/guis/GuiOfflineGenerator.cpp | 2 +- es-app/src/guis/GuiOfflineGenerator.h | 2 +- es-app/src/guis/GuiScraperMenu.cpp | 2 +- es-app/src/guis/GuiScraperMenu.h | 2 +- es-app/src/guis/GuiScraperMulti.cpp | 2 +- es-app/src/guis/GuiScraperMulti.h | 2 +- es-app/src/guis/GuiScraperSearch.cpp | 2 +- es-app/src/guis/GuiScraperSearch.h | 2 +- es-app/src/guis/GuiScraperSingle.cpp | 2 +- es-app/src/guis/GuiScraperSingle.h | 2 +- es-app/src/guis/GuiScreensaverOptions.cpp | 2 +- es-app/src/guis/GuiScreensaverOptions.h | 2 +- es-app/src/guis/GuiSettings.cpp | 2 +- es-app/src/guis/GuiSettings.h | 2 +- es-app/src/main.cpp | 2 +- es-app/src/scrapers/Scraper.cpp | 2 +- es-app/src/scrapers/Scraper.h | 2 +- es-app/src/views/GamelistBase.cpp | 2 +- es-app/src/views/GamelistBase.h | 2 +- es-app/src/views/GamelistView.cpp | 2 +- es-app/src/views/GamelistView.h | 2 +- es-app/src/views/SystemView.cpp | 2 +- es-app/src/views/SystemView.h | 2 +- es-core/src/AsyncHandle.h | 2 +- es-core/src/AudioManager.cpp | 2 +- es-core/src/AudioManager.h | 2 +- es-core/src/CECInput.cpp | 2 +- es-core/src/CECInput.h | 2 +- es-core/src/GuiComponent.cpp | 2 +- es-core/src/GuiComponent.h | 2 +- es-core/src/HelpPrompt.h | 2 +- es-core/src/HelpStyle.cpp | 2 +- es-core/src/HelpStyle.h | 2 +- es-core/src/HttpReq.cpp | 2 +- es-core/src/HttpReq.h | 2 +- es-core/src/ImageIO.cpp | 2 +- es-core/src/ImageIO.h | 2 +- es-core/src/InputConfig.cpp | 2 +- es-core/src/InputConfig.h | 2 +- es-core/src/Sound.cpp | 2 +- es-core/src/Sound.h | 2 +- es-core/src/animations/Animation.h | 2 +- es-core/src/animations/AnimationController.cpp | 2 +- es-core/src/animations/AnimationController.h | 2 +- es-core/src/animations/LambdaAnimation.h | 2 +- es-core/src/animations/MoveCameraAnimation.h | 2 +- es-core/src/components/AnimatedImageComponent.cpp | 2 +- es-core/src/components/AnimatedImageComponent.h | 2 +- es-core/src/components/BadgeComponent.cpp | 2 +- es-core/src/components/BadgeComponent.h | 2 +- es-core/src/components/BusyComponent.cpp | 2 +- es-core/src/components/BusyComponent.h | 2 +- es-core/src/components/ButtonComponent.cpp | 2 +- es-core/src/components/ButtonComponent.h | 2 +- es-core/src/components/ComponentGrid.cpp | 2 +- es-core/src/components/ComponentGrid.h | 2 +- es-core/src/components/ComponentList.cpp | 2 +- es-core/src/components/ComponentList.h | 2 +- es-core/src/components/DateTimeComponent.cpp | 2 +- es-core/src/components/DateTimeComponent.h | 2 +- es-core/src/components/DateTimeEditComponent.cpp | 2 +- es-core/src/components/DateTimeEditComponent.h | 2 +- es-core/src/components/FlexboxComponent.cpp | 2 +- es-core/src/components/FlexboxComponent.h | 2 +- es-core/src/components/GIFAnimComponent.cpp | 2 +- es-core/src/components/GIFAnimComponent.h | 2 +- es-core/src/components/GameSelectorComponent.h | 2 +- es-core/src/components/HelpComponent.cpp | 2 +- es-core/src/components/HelpComponent.h | 2 +- es-core/src/components/IList.h | 2 +- es-core/src/components/ImageComponent.cpp | 2 +- es-core/src/components/ImageComponent.h | 2 +- es-core/src/components/LottieAnimComponent.cpp | 2 +- es-core/src/components/LottieAnimComponent.h | 2 +- es-core/src/components/MenuComponent.cpp | 2 +- es-core/src/components/MenuComponent.h | 2 +- es-core/src/components/NinePatchComponent.cpp | 2 +- es-core/src/components/NinePatchComponent.h | 2 +- es-core/src/components/OptionListComponent.h | 2 +- es-core/src/components/RatingComponent.cpp | 2 +- es-core/src/components/RatingComponent.h | 2 +- es-core/src/components/ScrollIndicatorComponent.h | 2 +- es-core/src/components/ScrollableContainer.cpp | 2 +- es-core/src/components/ScrollableContainer.h | 2 +- es-core/src/components/SliderComponent.cpp | 2 +- es-core/src/components/SliderComponent.h | 2 +- es-core/src/components/SwitchComponent.cpp | 2 +- es-core/src/components/SwitchComponent.h | 2 +- es-core/src/components/TextComponent.cpp | 2 +- es-core/src/components/TextComponent.h | 2 +- es-core/src/components/TextEditComponent.cpp | 2 +- es-core/src/components/TextEditComponent.h | 2 +- es-core/src/components/VideoComponent.cpp | 2 +- es-core/src/components/VideoComponent.h | 2 +- es-core/src/components/VideoFFmpegComponent.cpp | 2 +- es-core/src/components/VideoFFmpegComponent.h | 2 +- es-core/src/components/primary/CarouselComponent.h | 2 +- es-core/src/components/primary/GridComponent.h | 2 +- es-core/src/components/primary/PrimaryComponent.h | 2 +- es-core/src/components/primary/TextListComponent.h | 2 +- es-core/src/guis/GuiDetectDevice.cpp | 2 +- es-core/src/guis/GuiDetectDevice.h | 2 +- es-core/src/guis/GuiInfoPopup.cpp | 2 +- es-core/src/guis/GuiInfoPopup.h | 2 +- es-core/src/guis/GuiInputConfig.cpp | 2 +- es-core/src/guis/GuiInputConfig.h | 2 +- es-core/src/guis/GuiMsgBox.cpp | 2 +- es-core/src/guis/GuiMsgBox.h | 2 +- es-core/src/guis/GuiTextEditKeyboardPopup.cpp | 2 +- es-core/src/guis/GuiTextEditKeyboardPopup.h | 2 +- es-core/src/guis/GuiTextEditPopup.cpp | 2 +- es-core/src/guis/GuiTextEditPopup.h | 2 +- es-core/src/renderers/ShaderOpenGL.cpp | 2 +- es-core/src/renderers/ShaderOpenGL.h | 2 +- es-core/src/resources/Font.cpp | 2 +- es-core/src/resources/Font.h | 2 +- es-core/src/resources/TextureData.cpp | 2 +- es-core/src/resources/TextureData.h | 2 +- es-core/src/resources/TextureDataManager.cpp | 2 +- es-core/src/resources/TextureDataManager.h | 2 +- es-core/src/resources/TextureResource.cpp | 2 +- es-core/src/resources/TextureResource.h | 2 +- es-core/src/utils/CImgUtil.cpp | 2 +- es-core/src/utils/CImgUtil.h | 2 +- es-core/src/utils/MathUtil.cpp | 2 +- es-core/src/utils/MathUtil.h | 2 +- es-core/src/utils/StringUtil.cpp | 2 +- es-core/src/utils/StringUtil.h | 2 +- es-core/src/utils/TimeUtil.cpp | 2 +- es-core/src/utils/TimeUtil.h | 2 +- 166 files changed, 166 insertions(+), 166 deletions(-) diff --git a/es-app/src/FileFilterIndex.cpp b/es-app/src/FileFilterIndex.cpp index 3c63f03bf..760fb6ef6 100644 --- a/es-app/src/FileFilterIndex.cpp +++ b/es-app/src/FileFilterIndex.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // FileFilterIndex.cpp // // Gamelist filters. diff --git a/es-app/src/FileFilterIndex.h b/es-app/src/FileFilterIndex.h index a034a361e..10dc6e98f 100644 --- a/es-app/src/FileFilterIndex.h +++ b/es-app/src/FileFilterIndex.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // FileFilterIndex.h // // Gamelist filters. diff --git a/es-app/src/FileSorts.cpp b/es-app/src/FileSorts.cpp index 7db7f2e64..48b8b057e 100644 --- a/es-app/src/FileSorts.cpp +++ b/es-app/src/FileSorts.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // FileSorts.cpp // // Gamelist sorting functions. diff --git a/es-app/src/FileSorts.h b/es-app/src/FileSorts.h index e7f84346d..d12725d57 100644 --- a/es-app/src/FileSorts.h +++ b/es-app/src/FileSorts.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // FileSorts.h // // Gamelist sorting functions. diff --git a/es-app/src/GamelistFileParser.cpp b/es-app/src/GamelistFileParser.cpp index 35563cf6e..7958637ba 100644 --- a/es-app/src/GamelistFileParser.cpp +++ b/es-app/src/GamelistFileParser.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GamelistFileParser.cpp // // Parses and updates the gamelist.xml files. diff --git a/es-app/src/GamelistFileParser.h b/es-app/src/GamelistFileParser.h index 465c3e462..b53670711 100644 --- a/es-app/src/GamelistFileParser.h +++ b/es-app/src/GamelistFileParser.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GamelistFileParser.h // // Parses and updates the gamelist.xml files. diff --git a/es-app/src/MediaViewer.cpp b/es-app/src/MediaViewer.cpp index a975f7516..a682ce637 100644 --- a/es-app/src/MediaViewer.cpp +++ b/es-app/src/MediaViewer.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // MediaViewer.cpp // // Fullscreen game media viewer. diff --git a/es-app/src/MediaViewer.h b/es-app/src/MediaViewer.h index d1a8789ec..fb36559cc 100644 --- a/es-app/src/MediaViewer.h +++ b/es-app/src/MediaViewer.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // MediaViewer.h // // Fullscreen game media viewer. diff --git a/es-app/src/MetaData.cpp b/es-app/src/MetaData.cpp index 79d8a9efd..15072160a 100644 --- a/es-app/src/MetaData.cpp +++ b/es-app/src/MetaData.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // MetaData.cpp // // Static data for default metadata values as well as functions diff --git a/es-app/src/MetaData.h b/es-app/src/MetaData.h index 4ae9fabe6..2384e165f 100644 --- a/es-app/src/MetaData.h +++ b/es-app/src/MetaData.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // MetaData.h // // Static data for default metadata values as well as functions diff --git a/es-app/src/MiximageGenerator.cpp b/es-app/src/MiximageGenerator.cpp index 73a39ea0c..75bb65a4b 100644 --- a/es-app/src/MiximageGenerator.cpp +++ b/es-app/src/MiximageGenerator.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // MiximageGenerator.cpp // // Generates miximages from screenshots, marquees, 3D boxes/covers and physical media images. diff --git a/es-app/src/MiximageGenerator.h b/es-app/src/MiximageGenerator.h index ffc7a7cfa..a1f501bcc 100644 --- a/es-app/src/MiximageGenerator.h +++ b/es-app/src/MiximageGenerator.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // MiximageGenerator.h // // Generates miximages from screenshots, marquees, 3D boxes/covers and physical media images. diff --git a/es-app/src/PDFViewer.cpp b/es-app/src/PDFViewer.cpp index 67ef2b28d..a7f539656 100644 --- a/es-app/src/PDFViewer.cpp +++ b/es-app/src/PDFViewer.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // PDFViewer.cpp // // Parses and renders pages using the Poppler library via the external es-pdf-convert binary. diff --git a/es-app/src/PDFViewer.h b/es-app/src/PDFViewer.h index 8a1d82eba..735009a17 100644 --- a/es-app/src/PDFViewer.h +++ b/es-app/src/PDFViewer.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // PDFViewer.h // // Parses and renders pages using the Poppler library via the external es-pdf-convert binary. diff --git a/es-app/src/PlatformId.cpp b/es-app/src/PlatformId.cpp index 9b76d08e5..b427bbd78 100644 --- a/es-app/src/PlatformId.cpp +++ b/es-app/src/PlatformId.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // PlatformId.cpp // // Index of all supported systems/platforms. diff --git a/es-app/src/PlatformId.h b/es-app/src/PlatformId.h index dccaf987f..3520a090c 100644 --- a/es-app/src/PlatformId.h +++ b/es-app/src/PlatformId.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // PlatformId.h // // Index of all supported systems/platforms. diff --git a/es-app/src/Screensaver.cpp b/es-app/src/Screensaver.cpp index 3319922a7..85cc301b7 100644 --- a/es-app/src/Screensaver.cpp +++ b/es-app/src/Screensaver.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Screensaver.cpp // // Screensaver, supporting the following types: diff --git a/es-app/src/Screensaver.h b/es-app/src/Screensaver.h index 30d123ba9..62b8134a8 100644 --- a/es-app/src/Screensaver.h +++ b/es-app/src/Screensaver.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Screensaver.h // // Screensaver, supporting the following types: diff --git a/es-app/src/UIModeController.cpp b/es-app/src/UIModeController.cpp index 38af8c110..d7e62fa74 100644 --- a/es-app/src/UIModeController.cpp +++ b/es-app/src/UIModeController.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // UIModeController.cpp // // Handling of application user interface modes (full, kiosk and kid). diff --git a/es-app/src/UIModeController.h b/es-app/src/UIModeController.h index ccb7e78db..22d22133e 100644 --- a/es-app/src/UIModeController.h +++ b/es-app/src/UIModeController.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // UIModeController.h // // Handling of application user interface modes (full, kiosk and kid). diff --git a/es-app/src/VolumeControl.cpp b/es-app/src/VolumeControl.cpp index 0d240b9cd..3bf54b914 100644 --- a/es-app/src/VolumeControl.cpp +++ b/es-app/src/VolumeControl.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // VolumeControl.cpp // // Controls system audio volume. diff --git a/es-app/src/VolumeControl.h b/es-app/src/VolumeControl.h index 5b031afbb..e0526c34b 100644 --- a/es-app/src/VolumeControl.h +++ b/es-app/src/VolumeControl.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // VolumeControl.h // // Controls system audio volume. diff --git a/es-app/src/guis/GuiAlternativeEmulators.cpp b/es-app/src/guis/GuiAlternativeEmulators.cpp index ff504845c..264fd8622 100644 --- a/es-app/src/guis/GuiAlternativeEmulators.cpp +++ b/es-app/src/guis/GuiAlternativeEmulators.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiAlternativeEmulators.cpp // // User interface to select between alternative emulators per system diff --git a/es-app/src/guis/GuiAlternativeEmulators.h b/es-app/src/guis/GuiAlternativeEmulators.h index 9ac0bed92..c4b5c68f0 100644 --- a/es-app/src/guis/GuiAlternativeEmulators.h +++ b/es-app/src/guis/GuiAlternativeEmulators.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiAlternativeEmulators.h // // User interface to select between alternative emulators per system diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.cpp b/es-app/src/guis/GuiCollectionSystemsOptions.cpp index 675ebe266..9c356c97a 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.cpp +++ b/es-app/src/guis/GuiCollectionSystemsOptions.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiCollectionSystemsOptions.cpp // // User interface for the game collection settings. diff --git a/es-app/src/guis/GuiCollectionSystemsOptions.h b/es-app/src/guis/GuiCollectionSystemsOptions.h index 25317ddbf..2cf478989 100644 --- a/es-app/src/guis/GuiCollectionSystemsOptions.h +++ b/es-app/src/guis/GuiCollectionSystemsOptions.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiCollectionSystemsOptions.h // // User interface for the game collection settings. diff --git a/es-app/src/guis/GuiGamelistFilter.cpp b/es-app/src/guis/GuiGamelistFilter.cpp index fad712ec7..3964c36a0 100644 --- a/es-app/src/guis/GuiGamelistFilter.cpp +++ b/es-app/src/guis/GuiGamelistFilter.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiGamelistFilter.cpp // // User interface for the gamelist filters. diff --git a/es-app/src/guis/GuiGamelistFilter.h b/es-app/src/guis/GuiGamelistFilter.h index 4ba3f92a2..5ed1a1bb9 100644 --- a/es-app/src/guis/GuiGamelistFilter.h +++ b/es-app/src/guis/GuiGamelistFilter.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiGamelistFilter.h // // User interface for the gamelist filters. diff --git a/es-app/src/guis/GuiGamelistOptions.cpp b/es-app/src/guis/GuiGamelistOptions.cpp index e901779b4..e7c1e6a1e 100644 --- a/es-app/src/guis/GuiGamelistOptions.cpp +++ b/es-app/src/guis/GuiGamelistOptions.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiGamelistOptions.cpp // // Gamelist options menu for the 'Jump to...' quick selector, diff --git a/es-app/src/guis/GuiGamelistOptions.h b/es-app/src/guis/GuiGamelistOptions.h index a8292d91f..6cc01f9ba 100644 --- a/es-app/src/guis/GuiGamelistOptions.h +++ b/es-app/src/guis/GuiGamelistOptions.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiGamelistOptions.h // // Gamelist options menu for the 'Jump to...' quick selector, diff --git a/es-app/src/guis/GuiLaunchScreen.cpp b/es-app/src/guis/GuiLaunchScreen.cpp index 3c165b539..d9fc11f68 100644 --- a/es-app/src/guis/GuiLaunchScreen.cpp +++ b/es-app/src/guis/GuiLaunchScreen.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiLaunchScreen.cpp // // Screen shown when launching a game. diff --git a/es-app/src/guis/GuiLaunchScreen.h b/es-app/src/guis/GuiLaunchScreen.h index af24f4329..7f6590a50 100644 --- a/es-app/src/guis/GuiLaunchScreen.h +++ b/es-app/src/guis/GuiLaunchScreen.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiLaunchScreen.h // // Screen shown when launching a game. diff --git a/es-app/src/guis/GuiMediaViewerOptions.cpp b/es-app/src/guis/GuiMediaViewerOptions.cpp index 299471ed5..c6ba51c5b 100644 --- a/es-app/src/guis/GuiMediaViewerOptions.cpp +++ b/es-app/src/guis/GuiMediaViewerOptions.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiMediaViewerOptions.cpp // // User interface for the media viewer options. diff --git a/es-app/src/guis/GuiMediaViewerOptions.h b/es-app/src/guis/GuiMediaViewerOptions.h index 686c6ea12..dda7c362d 100644 --- a/es-app/src/guis/GuiMediaViewerOptions.h +++ b/es-app/src/guis/GuiMediaViewerOptions.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiMediaViewerOptions.h // // User interface for the media viewer options. diff --git a/es-app/src/guis/GuiMetaDataEd.cpp b/es-app/src/guis/GuiMetaDataEd.cpp index b302cd9b0..fffbed815 100644 --- a/es-app/src/guis/GuiMetaDataEd.cpp +++ b/es-app/src/guis/GuiMetaDataEd.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiMetaDataEd.cpp // // Game metadata edit user interface. diff --git a/es-app/src/guis/GuiMetaDataEd.h b/es-app/src/guis/GuiMetaDataEd.h index ca401ba46..f90410f08 100644 --- a/es-app/src/guis/GuiMetaDataEd.h +++ b/es-app/src/guis/GuiMetaDataEd.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiMetaDataEd.h // // Game metadata edit user interface. diff --git a/es-app/src/guis/GuiOfflineGenerator.cpp b/es-app/src/guis/GuiOfflineGenerator.cpp index f90cf8f81..98cde683d 100644 --- a/es-app/src/guis/GuiOfflineGenerator.cpp +++ b/es-app/src/guis/GuiOfflineGenerator.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiOfflineGenerator.cpp // // User interface for the miximage offline generator. diff --git a/es-app/src/guis/GuiOfflineGenerator.h b/es-app/src/guis/GuiOfflineGenerator.h index ff65e2dfc..f1dbd4174 100644 --- a/es-app/src/guis/GuiOfflineGenerator.h +++ b/es-app/src/guis/GuiOfflineGenerator.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiOfflineGenerator.h // // User interface for the miximage offline generator. diff --git a/es-app/src/guis/GuiScraperMenu.cpp b/es-app/src/guis/GuiScraperMenu.cpp index 2e5dc4036..14d120e4f 100644 --- a/es-app/src/guis/GuiScraperMenu.cpp +++ b/es-app/src/guis/GuiScraperMenu.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiScraperMenu.cpp // // Game media scraper, including settings as well as the scraping start button. diff --git a/es-app/src/guis/GuiScraperMenu.h b/es-app/src/guis/GuiScraperMenu.h index 096adffaf..4b2f5d717 100644 --- a/es-app/src/guis/GuiScraperMenu.h +++ b/es-app/src/guis/GuiScraperMenu.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiScraperMenu.h // // Game media scraper, including settings as well as the scraping start button. diff --git a/es-app/src/guis/GuiScraperMulti.cpp b/es-app/src/guis/GuiScraperMulti.cpp index db6aa0aa6..72a42e6e7 100644 --- a/es-app/src/guis/GuiScraperMulti.cpp +++ b/es-app/src/guis/GuiScraperMulti.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiScraperMulti.cpp // // Multiple game scraping user interface. diff --git a/es-app/src/guis/GuiScraperMulti.h b/es-app/src/guis/GuiScraperMulti.h index 1cb8ac4ad..ae0eadf14 100644 --- a/es-app/src/guis/GuiScraperMulti.h +++ b/es-app/src/guis/GuiScraperMulti.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiScraperMulti.h // // Multiple game scraping user interface. diff --git a/es-app/src/guis/GuiScraperSearch.cpp b/es-app/src/guis/GuiScraperSearch.cpp index 694b87f0d..905626eb4 100644 --- a/es-app/src/guis/GuiScraperSearch.cpp +++ b/es-app/src/guis/GuiScraperSearch.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiScraperSearch.cpp // // User interface for the scraper where the user is able to see an overview diff --git a/es-app/src/guis/GuiScraperSearch.h b/es-app/src/guis/GuiScraperSearch.h index 62ecc476d..69675ca46 100644 --- a/es-app/src/guis/GuiScraperSearch.h +++ b/es-app/src/guis/GuiScraperSearch.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiScraperSearch.h // // User interface for the scraper where the user is able to see an overview diff --git a/es-app/src/guis/GuiScraperSingle.cpp b/es-app/src/guis/GuiScraperSingle.cpp index 3675ee75e..00edf0cb6 100644 --- a/es-app/src/guis/GuiScraperSingle.cpp +++ b/es-app/src/guis/GuiScraperSingle.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiScraperSingle.cpp // // Single game scraping user interface. diff --git a/es-app/src/guis/GuiScraperSingle.h b/es-app/src/guis/GuiScraperSingle.h index 293b808e1..6f9b5093c 100644 --- a/es-app/src/guis/GuiScraperSingle.h +++ b/es-app/src/guis/GuiScraperSingle.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiScraperSingle.h // // Single game scraping user interface. diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp index 30b4b8ead..ae061db14 100644 --- a/es-app/src/guis/GuiScreensaverOptions.cpp +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiScreensaverOptions.cpp // // User interface for the screensaver options. diff --git a/es-app/src/guis/GuiScreensaverOptions.h b/es-app/src/guis/GuiScreensaverOptions.h index 74f47112f..a14be386e 100644 --- a/es-app/src/guis/GuiScreensaverOptions.h +++ b/es-app/src/guis/GuiScreensaverOptions.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiScreensaverOptions.h // // User interface for the screensaver options. diff --git a/es-app/src/guis/GuiSettings.cpp b/es-app/src/guis/GuiSettings.cpp index f2ae13079..013042cdb 100644 --- a/es-app/src/guis/GuiSettings.cpp +++ b/es-app/src/guis/GuiSettings.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiSettings.cpp // // User interface template for a settings GUI. diff --git a/es-app/src/guis/GuiSettings.h b/es-app/src/guis/GuiSettings.h index f8a24bf84..b27b85a28 100644 --- a/es-app/src/guis/GuiSettings.h +++ b/es-app/src/guis/GuiSettings.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiSettings.h // // User interface template for a settings GUI. diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 840849b02..3cf0e370a 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -393,7 +393,7 @@ bool parseArguments(const std::vector& arguments) std::cout << // clang-format off "Usage: es-de [options]\n" -"ES-DE (EmulationStation Desktop Edition), Emulator Frontend\n\n" +"ES-DE (ES-DE), Emulator Frontend\n\n" "Options:\n" " --display [1 to 4] Display/monitor to use\n" " --resolution [width] [height] Application resolution\n" diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index c9c6c20ba..eb796c141 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Scraper.cpp // // Main scraper logic. diff --git a/es-app/src/scrapers/Scraper.h b/es-app/src/scrapers/Scraper.h index 660f4bd9b..7bbaff637 100644 --- a/es-app/src/scrapers/Scraper.h +++ b/es-app/src/scrapers/Scraper.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Scraper.h // // Main scraper logic. diff --git a/es-app/src/views/GamelistBase.cpp b/es-app/src/views/GamelistBase.cpp index 980a252f1..caf575399 100644 --- a/es-app/src/views/GamelistBase.cpp +++ b/es-app/src/views/GamelistBase.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GamelistBase.cpp // // Gamelist base class with utility functions and other low-level logic. diff --git a/es-app/src/views/GamelistBase.h b/es-app/src/views/GamelistBase.h index 7453f89fa..be559f6ae 100644 --- a/es-app/src/views/GamelistBase.h +++ b/es-app/src/views/GamelistBase.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GamelistBase.h // // Gamelist base class with utility functions and other low-level logic. diff --git a/es-app/src/views/GamelistView.cpp b/es-app/src/views/GamelistView.cpp index fe7d22ae7..c1784a376 100644 --- a/es-app/src/views/GamelistView.cpp +++ b/es-app/src/views/GamelistView.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GamelistView.cpp // // Main gamelist logic. diff --git a/es-app/src/views/GamelistView.h b/es-app/src/views/GamelistView.h index 44f28a68d..fc6b14c02 100644 --- a/es-app/src/views/GamelistView.h +++ b/es-app/src/views/GamelistView.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GamelistView.h // // Main gamelist logic. diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index dee557371..d6a55df72 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // SystemView.cpp // // Main system view. diff --git a/es-app/src/views/SystemView.h b/es-app/src/views/SystemView.h index e6331cdbc..9c044b40f 100644 --- a/es-app/src/views/SystemView.h +++ b/es-app/src/views/SystemView.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // SystemView.h // // Main system view. diff --git a/es-core/src/AsyncHandle.h b/es-core/src/AsyncHandle.h index 1b4c57349..e17aa1ce7 100644 --- a/es-core/src/AsyncHandle.h +++ b/es-core/src/AsyncHandle.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // AsyncHandle.h // // Asynchronous operations used by GuiScraperSearch and Scraper. diff --git a/es-core/src/AudioManager.cpp b/es-core/src/AudioManager.cpp index bfe69108e..0cf5d023e 100644 --- a/es-core/src/AudioManager.cpp +++ b/es-core/src/AudioManager.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // AudioManager.cpp // // Low-level audio functions (using SDL2). diff --git a/es-core/src/AudioManager.h b/es-core/src/AudioManager.h index d14b3b2a7..d274eb095 100644 --- a/es-core/src/AudioManager.h +++ b/es-core/src/AudioManager.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // AudioManager.h // // Low-level audio functions (using SDL2). diff --git a/es-core/src/CECInput.cpp b/es-core/src/CECInput.cpp index 8a2e2d50a..03d9bc5ad 100644 --- a/es-core/src/CECInput.cpp +++ b/es-core/src/CECInput.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // CECInput.cpp // // CEC (Consumer Electronics Control) input. diff --git a/es-core/src/CECInput.h b/es-core/src/CECInput.h index fbfaf3e3e..ab9643990 100644 --- a/es-core/src/CECInput.h +++ b/es-core/src/CECInput.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // CECInput.h // // CEC (Consumer Electronics Control) input. diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index d21707f15..9673ab874 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiComponent.cpp // // Basic GUI component handling such as placement, rotation, Z-order, rendering and animation. diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index 758229c49..bf83c26b0 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiComponent.h // // Basic GUI component handling such as placement, rotation, Z-order, rendering and animation. diff --git a/es-core/src/HelpPrompt.h b/es-core/src/HelpPrompt.h index d7f3c60b2..8188da2cc 100644 --- a/es-core/src/HelpPrompt.h +++ b/es-core/src/HelpPrompt.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // HelpPrompt.h // // Definition of the pair used by help prompts to display an icon and its mapped function. diff --git a/es-core/src/HelpStyle.cpp b/es-core/src/HelpStyle.cpp index 018ada998..eb0cba977 100644 --- a/es-core/src/HelpStyle.cpp +++ b/es-core/src/HelpStyle.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // HelpStyle.cpp // // Style (colors, position, icons etc.) for the help system. diff --git a/es-core/src/HelpStyle.h b/es-core/src/HelpStyle.h index 54b8f34b7..39f37a5ee 100644 --- a/es-core/src/HelpStyle.h +++ b/es-core/src/HelpStyle.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // HelpStyle.h // // Style (colors, position, icons etc.) for the help system. diff --git a/es-core/src/HttpReq.cpp b/es-core/src/HttpReq.cpp index 53d553f9a..bd82b7263 100644 --- a/es-core/src/HttpReq.cpp +++ b/es-core/src/HttpReq.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // HttpReq.cpp // // HTTP requests using libcurl. diff --git a/es-core/src/HttpReq.h b/es-core/src/HttpReq.h index 30adad51c..5aae2270c 100644 --- a/es-core/src/HttpReq.h +++ b/es-core/src/HttpReq.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // HttpReq.h // // HTTP requests using libcurl. diff --git a/es-core/src/ImageIO.cpp b/es-core/src/ImageIO.cpp index aa9ae36f5..6be6e60ca 100644 --- a/es-core/src/ImageIO.cpp +++ b/es-core/src/ImageIO.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ImageIO.cpp // // Image I/O functions. diff --git a/es-core/src/ImageIO.h b/es-core/src/ImageIO.h index 3fd62e267..dc83de247 100644 --- a/es-core/src/ImageIO.h +++ b/es-core/src/ImageIO.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ImageIO.h // // Image I/O functions. diff --git a/es-core/src/InputConfig.cpp b/es-core/src/InputConfig.cpp index 5959162a6..2cbfced0b 100644 --- a/es-core/src/InputConfig.cpp +++ b/es-core/src/InputConfig.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // InputConfig.cpp // // Input device configuration functions. diff --git a/es-core/src/InputConfig.h b/es-core/src/InputConfig.h index df34b11dd..d458b5ca0 100644 --- a/es-core/src/InputConfig.h +++ b/es-core/src/InputConfig.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // InputConfig.h // // Input device configuration functions. diff --git a/es-core/src/Sound.cpp b/es-core/src/Sound.cpp index 1c0484ee4..23bdad436 100644 --- a/es-core/src/Sound.cpp +++ b/es-core/src/Sound.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Sound.cpp // // Higher-level audio functions. diff --git a/es-core/src/Sound.h b/es-core/src/Sound.h index eefa46ad7..22bae66a3 100644 --- a/es-core/src/Sound.h +++ b/es-core/src/Sound.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Sound.h // // Higher-level audio functions. diff --git a/es-core/src/animations/Animation.h b/es-core/src/animations/Animation.h index 62c5a15f8..ac23926f0 100644 --- a/es-core/src/animations/Animation.h +++ b/es-core/src/animations/Animation.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Animation.h // // Animation base class. diff --git a/es-core/src/animations/AnimationController.cpp b/es-core/src/animations/AnimationController.cpp index f951802ca..7c8533aa0 100644 --- a/es-core/src/animations/AnimationController.cpp +++ b/es-core/src/animations/AnimationController.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // AnimationController.cpp // // Basic animation controls. diff --git a/es-core/src/animations/AnimationController.h b/es-core/src/animations/AnimationController.h index a44d23072..ff64c6209 100644 --- a/es-core/src/animations/AnimationController.h +++ b/es-core/src/animations/AnimationController.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // AnimationController.h // // Basic animation controls. diff --git a/es-core/src/animations/LambdaAnimation.h b/es-core/src/animations/LambdaAnimation.h index a6dea3ec1..c4fddfcbf 100644 --- a/es-core/src/animations/LambdaAnimation.h +++ b/es-core/src/animations/LambdaAnimation.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // LambdaAnimation.h // // Custom animations, expressed as lambdas. diff --git a/es-core/src/animations/MoveCameraAnimation.h b/es-core/src/animations/MoveCameraAnimation.h index ca3e47e3d..728cd2a6c 100644 --- a/es-core/src/animations/MoveCameraAnimation.h +++ b/es-core/src/animations/MoveCameraAnimation.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // MoveCameraAnimation.h // // Animation to play when moving the camera, used by the slide transition style. diff --git a/es-core/src/components/AnimatedImageComponent.cpp b/es-core/src/components/AnimatedImageComponent.cpp index 169be0e63..8e640ca32 100644 --- a/es-core/src/components/AnimatedImageComponent.cpp +++ b/es-core/src/components/AnimatedImageComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // AnimatedImageComponent.cpp // // Creates animation from multiple images files. diff --git a/es-core/src/components/AnimatedImageComponent.h b/es-core/src/components/AnimatedImageComponent.h index 396101afb..81622fcbd 100644 --- a/es-core/src/components/AnimatedImageComponent.h +++ b/es-core/src/components/AnimatedImageComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // AnimatedImageComponent.h // // Creates animation from multiple images files. diff --git a/es-core/src/components/BadgeComponent.cpp b/es-core/src/components/BadgeComponent.cpp index fa5fc95df..6673a7e8b 100644 --- a/es-core/src/components/BadgeComponent.cpp +++ b/es-core/src/components/BadgeComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // BadgeComponent.cpp // // Game badges icons. diff --git a/es-core/src/components/BadgeComponent.h b/es-core/src/components/BadgeComponent.h index e85dd0013..db26bf980 100644 --- a/es-core/src/components/BadgeComponent.h +++ b/es-core/src/components/BadgeComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // BadgeComponent.h // // Game badges icons. diff --git a/es-core/src/components/BusyComponent.cpp b/es-core/src/components/BusyComponent.cpp index 98e761198..56f915526 100644 --- a/es-core/src/components/BusyComponent.cpp +++ b/es-core/src/components/BusyComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // BusyComponent.cpp // // Animated busy indicator. diff --git a/es-core/src/components/BusyComponent.h b/es-core/src/components/BusyComponent.h index 4b7c54b8c..1a3cb5dcb 100644 --- a/es-core/src/components/BusyComponent.h +++ b/es-core/src/components/BusyComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // BusyComponent.h // // Animated busy indicator. diff --git a/es-core/src/components/ButtonComponent.cpp b/es-core/src/components/ButtonComponent.cpp index f7cbad97f..1fc36ff29 100644 --- a/es-core/src/components/ButtonComponent.cpp +++ b/es-core/src/components/ButtonComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ButtonComponent.cpp // // Basic on/off button. diff --git a/es-core/src/components/ButtonComponent.h b/es-core/src/components/ButtonComponent.h index afcbc1e21..af17cc3fc 100644 --- a/es-core/src/components/ButtonComponent.h +++ b/es-core/src/components/ButtonComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ButtonComponent.h // // Basic on/off button. diff --git a/es-core/src/components/ComponentGrid.cpp b/es-core/src/components/ComponentGrid.cpp index 1c6eb508c..507560eee 100644 --- a/es-core/src/components/ComponentGrid.cpp +++ b/es-core/src/components/ComponentGrid.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ComponentGrid.cpp // // Provides basic layout of components in an X*Y grid. diff --git a/es-core/src/components/ComponentGrid.h b/es-core/src/components/ComponentGrid.h index 0de281bee..41a471a4f 100644 --- a/es-core/src/components/ComponentGrid.h +++ b/es-core/src/components/ComponentGrid.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ComponentGrid.h // // Provides basic layout of components in an X*Y grid. diff --git a/es-core/src/components/ComponentList.cpp b/es-core/src/components/ComponentList.cpp index 5648ff6e5..f9debc3f1 100644 --- a/es-core/src/components/ComponentList.cpp +++ b/es-core/src/components/ComponentList.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ComponentList.cpp // // Used to lay out and navigate lists in GUI menus. diff --git a/es-core/src/components/ComponentList.h b/es-core/src/components/ComponentList.h index 489f7143d..c416f0452 100644 --- a/es-core/src/components/ComponentList.h +++ b/es-core/src/components/ComponentList.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ComponentList.h // // Used to lay out and navigate lists in GUI menus. diff --git a/es-core/src/components/DateTimeComponent.cpp b/es-core/src/components/DateTimeComponent.cpp index 72872ca63..6e99ae444 100644 --- a/es-core/src/components/DateTimeComponent.cpp +++ b/es-core/src/components/DateTimeComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // DateTimeComponent.cpp // // Provides the date and time, in absolute (actual date) or relative diff --git a/es-core/src/components/DateTimeComponent.h b/es-core/src/components/DateTimeComponent.h index c6d20a36c..a952e7b34 100644 --- a/es-core/src/components/DateTimeComponent.h +++ b/es-core/src/components/DateTimeComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // DateTimeComponent.h // // Provides the date and time, in absolute (actual date) or relative diff --git a/es-core/src/components/DateTimeEditComponent.cpp b/es-core/src/components/DateTimeEditComponent.cpp index 01d964a51..ca01cf237 100644 --- a/es-core/src/components/DateTimeEditComponent.cpp +++ b/es-core/src/components/DateTimeEditComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // DateTimeEditComponent.cpp // // Date and time edit component. diff --git a/es-core/src/components/DateTimeEditComponent.h b/es-core/src/components/DateTimeEditComponent.h index 4dbf33391..cfb58b7e3 100644 --- a/es-core/src/components/DateTimeEditComponent.h +++ b/es-core/src/components/DateTimeEditComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // DateTimeEditComponent.h // // Date and time edit component. diff --git a/es-core/src/components/FlexboxComponent.cpp b/es-core/src/components/FlexboxComponent.cpp index f086dca14..b7f666bee 100644 --- a/es-core/src/components/FlexboxComponent.cpp +++ b/es-core/src/components/FlexboxComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // FlexboxComponent.cpp // // Flexbox layout component. diff --git a/es-core/src/components/FlexboxComponent.h b/es-core/src/components/FlexboxComponent.h index 19deffe43..549f8a348 100644 --- a/es-core/src/components/FlexboxComponent.h +++ b/es-core/src/components/FlexboxComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // FlexboxComponent.h // // Flexbox layout component. diff --git a/es-core/src/components/GIFAnimComponent.cpp b/es-core/src/components/GIFAnimComponent.cpp index 3d3d3d2b6..bcfbd026e 100644 --- a/es-core/src/components/GIFAnimComponent.cpp +++ b/es-core/src/components/GIFAnimComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GIFAnimComponent.cpp // // Component to play GIF animations. diff --git a/es-core/src/components/GIFAnimComponent.h b/es-core/src/components/GIFAnimComponent.h index bf9fdacaf..d43efdb9e 100644 --- a/es-core/src/components/GIFAnimComponent.h +++ b/es-core/src/components/GIFAnimComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GIFAnimComponent.h // // Component to play GIF animations. diff --git a/es-core/src/components/GameSelectorComponent.h b/es-core/src/components/GameSelectorComponent.h index 2d957dc8a..d856943bc 100644 --- a/es-core/src/components/GameSelectorComponent.h +++ b/es-core/src/components/GameSelectorComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GameSelectorComponent.h // // Makes a selection of games based on theme-controlled criteria. diff --git a/es-core/src/components/HelpComponent.cpp b/es-core/src/components/HelpComponent.cpp index a766c5ebd..3bb36c882 100644 --- a/es-core/src/components/HelpComponent.cpp +++ b/es-core/src/components/HelpComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // HelpComponent.cpp // // Help information in icon and text pairs. diff --git a/es-core/src/components/HelpComponent.h b/es-core/src/components/HelpComponent.h index dfdc36abc..f55acadb8 100644 --- a/es-core/src/components/HelpComponent.h +++ b/es-core/src/components/HelpComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // HelpComponent.h // // Help information in icon and text pairs. diff --git a/es-core/src/components/IList.h b/es-core/src/components/IList.h index 1f85a5bab..fc5145223 100644 --- a/es-core/src/components/IList.h +++ b/es-core/src/components/IList.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // IList.h // // List base class, used by the system view, gamelist view and menu system. diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index 1b34f37c7..c48f5de10 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ImageComponent.cpp // // Handles images: loading, resizing, cropping, color shifting etc. diff --git a/es-core/src/components/ImageComponent.h b/es-core/src/components/ImageComponent.h index ed2747fc4..90c7a385b 100644 --- a/es-core/src/components/ImageComponent.h +++ b/es-core/src/components/ImageComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ImageComponent.h // // Handles images: loading, resizing, cropping, color shifting etc. diff --git a/es-core/src/components/LottieAnimComponent.cpp b/es-core/src/components/LottieAnimComponent.cpp index ce2b57490..8c92e0915 100644 --- a/es-core/src/components/LottieAnimComponent.cpp +++ b/es-core/src/components/LottieAnimComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // LottieAnimComponent.cpp // // Component to play Lottie animations using the rlottie library. diff --git a/es-core/src/components/LottieAnimComponent.h b/es-core/src/components/LottieAnimComponent.h index bae80e309..d96829941 100644 --- a/es-core/src/components/LottieAnimComponent.h +++ b/es-core/src/components/LottieAnimComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // LottieAnimComponent.h // // Component to play Lottie animations using the rlottie library. diff --git a/es-core/src/components/MenuComponent.cpp b/es-core/src/components/MenuComponent.cpp index bda94fced..8b40de4ae 100644 --- a/es-core/src/components/MenuComponent.cpp +++ b/es-core/src/components/MenuComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // MenuComponent.cpp // // Basic component for building a menu. diff --git a/es-core/src/components/MenuComponent.h b/es-core/src/components/MenuComponent.h index 31f1dfbfe..cb6100e5f 100644 --- a/es-core/src/components/MenuComponent.h +++ b/es-core/src/components/MenuComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // MenuComponent.h // // Basic component for building a menu. diff --git a/es-core/src/components/NinePatchComponent.cpp b/es-core/src/components/NinePatchComponent.cpp index 6a3b2ad6d..321422b61 100644 --- a/es-core/src/components/NinePatchComponent.cpp +++ b/es-core/src/components/NinePatchComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // NinePatchComponent.cpp // // Breaks up an image into 3x3 patches to accomodate resizing without distortions. diff --git a/es-core/src/components/NinePatchComponent.h b/es-core/src/components/NinePatchComponent.h index 010c231e5..d7473b5cc 100644 --- a/es-core/src/components/NinePatchComponent.h +++ b/es-core/src/components/NinePatchComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // NinePatchComponent.h // // Breaks up an image into 3x3 patches to accomodate resizing without distortions. diff --git a/es-core/src/components/OptionListComponent.h b/es-core/src/components/OptionListComponent.h index e8a38a908..14106ac6f 100644 --- a/es-core/src/components/OptionListComponent.h +++ b/es-core/src/components/OptionListComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // OptionListComponent.h // // Provides a list of option components. diff --git a/es-core/src/components/RatingComponent.cpp b/es-core/src/components/RatingComponent.cpp index 6523d85a6..6e1b39b21 100644 --- a/es-core/src/components/RatingComponent.cpp +++ b/es-core/src/components/RatingComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // RatingComponent.cpp // // Game rating icons. diff --git a/es-core/src/components/RatingComponent.h b/es-core/src/components/RatingComponent.h index e036e9b31..220f58458 100644 --- a/es-core/src/components/RatingComponent.h +++ b/es-core/src/components/RatingComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // RatingComponent.h // // Game rating icons. diff --git a/es-core/src/components/ScrollIndicatorComponent.h b/es-core/src/components/ScrollIndicatorComponent.h index f9913351b..efc55bb85 100644 --- a/es-core/src/components/ScrollIndicatorComponent.h +++ b/es-core/src/components/ScrollIndicatorComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ScrollIndicatorComponent.h // // Visually indicates whether a menu can be scrolled (up, up/down or down). diff --git a/es-core/src/components/ScrollableContainer.cpp b/es-core/src/components/ScrollableContainer.cpp index f64a1c8b4..14bd609e7 100644 --- a/es-core/src/components/ScrollableContainer.cpp +++ b/es-core/src/components/ScrollableContainer.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ScrollableContainer.cpp // // Component containing scrollable information, used for the game diff --git a/es-core/src/components/ScrollableContainer.h b/es-core/src/components/ScrollableContainer.h index 966b691c3..8b1e14844 100644 --- a/es-core/src/components/ScrollableContainer.h +++ b/es-core/src/components/ScrollableContainer.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ScrollableContainer.h // // Component containing scrollable information, used for the game diff --git a/es-core/src/components/SliderComponent.cpp b/es-core/src/components/SliderComponent.cpp index 00de12644..cbeef8e59 100644 --- a/es-core/src/components/SliderComponent.cpp +++ b/es-core/src/components/SliderComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // SliderComponent.cpp // // Slider to set value in a predefined range. diff --git a/es-core/src/components/SliderComponent.h b/es-core/src/components/SliderComponent.h index b83cb10e1..2f2188d6a 100644 --- a/es-core/src/components/SliderComponent.h +++ b/es-core/src/components/SliderComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // SliderComponent.h // // Slider to set value in a predefined range. diff --git a/es-core/src/components/SwitchComponent.cpp b/es-core/src/components/SwitchComponent.cpp index a7fc3031a..506533370 100644 --- a/es-core/src/components/SwitchComponent.cpp +++ b/es-core/src/components/SwitchComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // SwitchComponent.cpp // // Basic on/off switch used in menus. diff --git a/es-core/src/components/SwitchComponent.h b/es-core/src/components/SwitchComponent.h index 25a2dc8f0..6e02ec0be 100644 --- a/es-core/src/components/SwitchComponent.h +++ b/es-core/src/components/SwitchComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // SwitchComponent.h // // Basic on/off switch used in menus. diff --git a/es-core/src/components/TextComponent.cpp b/es-core/src/components/TextComponent.cpp index 0f4dc1f95..0ef5bb94a 100644 --- a/es-core/src/components/TextComponent.cpp +++ b/es-core/src/components/TextComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // TextComponent.cpp // // Displays text. diff --git a/es-core/src/components/TextComponent.h b/es-core/src/components/TextComponent.h index 7e180746b..d21d16a31 100644 --- a/es-core/src/components/TextComponent.h +++ b/es-core/src/components/TextComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // TextComponent.h // // Displays text. diff --git a/es-core/src/components/TextEditComponent.cpp b/es-core/src/components/TextEditComponent.cpp index a895f01e3..d58ee8499 100644 --- a/es-core/src/components/TextEditComponent.cpp +++ b/es-core/src/components/TextEditComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // TextEditComponent.cpp // // Component for editing text fields in menus. diff --git a/es-core/src/components/TextEditComponent.h b/es-core/src/components/TextEditComponent.h index a9e35fa06..a4c1fcb58 100644 --- a/es-core/src/components/TextEditComponent.h +++ b/es-core/src/components/TextEditComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // TextEditComponent.h // // Component for editing text fields in menus. diff --git a/es-core/src/components/VideoComponent.cpp b/es-core/src/components/VideoComponent.cpp index 8e8b2f9a5..d05e628a6 100644 --- a/es-core/src/components/VideoComponent.cpp +++ b/es-core/src/components/VideoComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // VideoComponent.cpp // // Base class for playing videos. diff --git a/es-core/src/components/VideoComponent.h b/es-core/src/components/VideoComponent.h index ccc4afe12..6095623bc 100644 --- a/es-core/src/components/VideoComponent.h +++ b/es-core/src/components/VideoComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // VideoComponent.h // // Base class for playing videos. diff --git a/es-core/src/components/VideoFFmpegComponent.cpp b/es-core/src/components/VideoFFmpegComponent.cpp index 0d255b373..b4f68bcd0 100644 --- a/es-core/src/components/VideoFFmpegComponent.cpp +++ b/es-core/src/components/VideoFFmpegComponent.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // VideoFFmpegComponent.cpp // // Video player based on FFmpeg. diff --git a/es-core/src/components/VideoFFmpegComponent.h b/es-core/src/components/VideoFFmpegComponent.h index e2294ce69..85ccdcf39 100644 --- a/es-core/src/components/VideoFFmpegComponent.h +++ b/es-core/src/components/VideoFFmpegComponent.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // 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 9b57fce1f..76ba383de 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 // -// EmulationStation Desktop Edition +// ES-DE // CarouselComponent.h // // Carousel, usable in both the system and gamelist views. diff --git a/es-core/src/components/primary/GridComponent.h b/es-core/src/components/primary/GridComponent.h index f2bbd4214..40447e317 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 // -// EmulationStation Desktop Edition +// ES-DE // GridComponent.h // // Grid, usable in both the system and gamelist views. diff --git a/es-core/src/components/primary/PrimaryComponent.h b/es-core/src/components/primary/PrimaryComponent.h index 5af99735c..613c3821e 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 // -// EmulationStation Desktop Edition +// ES-DE // 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 204d4014b..bf2eadd4d 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 // -// EmulationStation Desktop Edition +// ES-DE // TextListComponent.h // // Text list, usable in both the system and gamelist views. diff --git a/es-core/src/guis/GuiDetectDevice.cpp b/es-core/src/guis/GuiDetectDevice.cpp index 86762de32..f7056c90d 100644 --- a/es-core/src/guis/GuiDetectDevice.cpp +++ b/es-core/src/guis/GuiDetectDevice.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiDetectDevice.cpp // // Detect input devices (keyboards, joysticks and gamepads). diff --git a/es-core/src/guis/GuiDetectDevice.h b/es-core/src/guis/GuiDetectDevice.h index df8980cd2..d040e0ad4 100644 --- a/es-core/src/guis/GuiDetectDevice.h +++ b/es-core/src/guis/GuiDetectDevice.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiDetectDevice.h // // Detect input devices (keyboards, joysticks and gamepads). diff --git a/es-core/src/guis/GuiInfoPopup.cpp b/es-core/src/guis/GuiInfoPopup.cpp index c242e75b5..b07767f5b 100644 --- a/es-core/src/guis/GuiInfoPopup.cpp +++ b/es-core/src/guis/GuiInfoPopup.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiInfoPopup.cpp // // Popup window used for user notifications. diff --git a/es-core/src/guis/GuiInfoPopup.h b/es-core/src/guis/GuiInfoPopup.h index 8be3daa98..3f8dc120f 100644 --- a/es-core/src/guis/GuiInfoPopup.h +++ b/es-core/src/guis/GuiInfoPopup.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiInfoPopup.h // // Popup window used for user notifications. diff --git a/es-core/src/guis/GuiInputConfig.cpp b/es-core/src/guis/GuiInputConfig.cpp index ea45fe2fb..66a22d9c4 100644 --- a/es-core/src/guis/GuiInputConfig.cpp +++ b/es-core/src/guis/GuiInputConfig.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiInputConfig.cpp // // Input device configuration GUI (for keyboards, joysticks and gamepads). diff --git a/es-core/src/guis/GuiInputConfig.h b/es-core/src/guis/GuiInputConfig.h index f526c747d..5410cd6da 100644 --- a/es-core/src/guis/GuiInputConfig.h +++ b/es-core/src/guis/GuiInputConfig.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiInputConfig.h // // Input device configuration GUI (for keyboards, joysticks and gamepads). diff --git a/es-core/src/guis/GuiMsgBox.cpp b/es-core/src/guis/GuiMsgBox.cpp index 12ef4a155..eeed306db 100644 --- a/es-core/src/guis/GuiMsgBox.cpp +++ b/es-core/src/guis/GuiMsgBox.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiMsgBox.cpp // // Popup message dialog with a notification text and a choice of one, diff --git a/es-core/src/guis/GuiMsgBox.h b/es-core/src/guis/GuiMsgBox.h index c751eda65..ae60deeac 100644 --- a/es-core/src/guis/GuiMsgBox.h +++ b/es-core/src/guis/GuiMsgBox.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiMsgBox.h // // Popup message dialog with a notification text and a choice of one, diff --git a/es-core/src/guis/GuiTextEditKeyboardPopup.cpp b/es-core/src/guis/GuiTextEditKeyboardPopup.cpp index 43a5dfeed..fec7081fd 100644 --- a/es-core/src/guis/GuiTextEditKeyboardPopup.cpp +++ b/es-core/src/guis/GuiTextEditKeyboardPopup.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiTextEditKeyboardPopup.cpp // // Text edit popup with a virtual keyboard. diff --git a/es-core/src/guis/GuiTextEditKeyboardPopup.h b/es-core/src/guis/GuiTextEditKeyboardPopup.h index 5f6e4e208..b7708b353 100644 --- a/es-core/src/guis/GuiTextEditKeyboardPopup.h +++ b/es-core/src/guis/GuiTextEditKeyboardPopup.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiTextEditKeyboardPopup.h // // Text edit popup with a virtual keyboard. diff --git a/es-core/src/guis/GuiTextEditPopup.cpp b/es-core/src/guis/GuiTextEditPopup.cpp index 1565d23f1..7f975f3c9 100644 --- a/es-core/src/guis/GuiTextEditPopup.cpp +++ b/es-core/src/guis/GuiTextEditPopup.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiTextEditPopup.cpp // // Text edit popup. diff --git a/es-core/src/guis/GuiTextEditPopup.h b/es-core/src/guis/GuiTextEditPopup.h index f215b74b2..d1f29ca8c 100644 --- a/es-core/src/guis/GuiTextEditPopup.h +++ b/es-core/src/guis/GuiTextEditPopup.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // GuiTextEditPopup.h // // Text edit popup. diff --git a/es-core/src/renderers/ShaderOpenGL.cpp b/es-core/src/renderers/ShaderOpenGL.cpp index ffa4fe519..e2f7df5d4 100644 --- a/es-core/src/renderers/ShaderOpenGL.cpp +++ b/es-core/src/renderers/ShaderOpenGL.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ShaderOpenGL.cpp // // OpenGL / OpenGL ES shader functions. diff --git a/es-core/src/renderers/ShaderOpenGL.h b/es-core/src/renderers/ShaderOpenGL.h index 5216b9c9f..d94e3ab79 100644 --- a/es-core/src/renderers/ShaderOpenGL.h +++ b/es-core/src/renderers/ShaderOpenGL.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // ShaderOpenGL.h // // OpenGL / OpenGL ES shader functions. diff --git a/es-core/src/resources/Font.cpp b/es-core/src/resources/Font.cpp index 76e1ac960..5e6c3e00c 100644 --- a/es-core/src/resources/Font.cpp +++ b/es-core/src/resources/Font.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Font.h // // Loading, unloading, caching and rendering of fonts. diff --git a/es-core/src/resources/Font.h b/es-core/src/resources/Font.h index 6e2b3a573..b46d37290 100644 --- a/es-core/src/resources/Font.h +++ b/es-core/src/resources/Font.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // Font.h // // Loading, unloading, caching and rendering of fonts. diff --git a/es-core/src/resources/TextureData.cpp b/es-core/src/resources/TextureData.cpp index b0caf0559..2ae4bd0b8 100644 --- a/es-core/src/resources/TextureData.cpp +++ b/es-core/src/resources/TextureData.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // TextureData.cpp // // Low-level texture data functions. diff --git a/es-core/src/resources/TextureData.h b/es-core/src/resources/TextureData.h index 1443c999c..e86f7a692 100644 --- a/es-core/src/resources/TextureData.h +++ b/es-core/src/resources/TextureData.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // TextureData.h // // Low-level texture data functions. diff --git a/es-core/src/resources/TextureDataManager.cpp b/es-core/src/resources/TextureDataManager.cpp index 321159321..4848d99c1 100644 --- a/es-core/src/resources/TextureDataManager.cpp +++ b/es-core/src/resources/TextureDataManager.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // TextureDataManager.cpp // // Loading and unloading of texture data. diff --git a/es-core/src/resources/TextureDataManager.h b/es-core/src/resources/TextureDataManager.h index 2a26de6ba..4b62e2a19 100644 --- a/es-core/src/resources/TextureDataManager.h +++ b/es-core/src/resources/TextureDataManager.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // TextureDataManager.h // // Loading and unloading of texture data. diff --git a/es-core/src/resources/TextureResource.cpp b/es-core/src/resources/TextureResource.cpp index dd9e1d5e4..dfc36f1b1 100644 --- a/es-core/src/resources/TextureResource.cpp +++ b/es-core/src/resources/TextureResource.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // TextureResource.cpp // // Handles textures including loading, unloading and cache management. diff --git a/es-core/src/resources/TextureResource.h b/es-core/src/resources/TextureResource.h index 2a23cbf6b..76ce69e5c 100644 --- a/es-core/src/resources/TextureResource.h +++ b/es-core/src/resources/TextureResource.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // TextureResource.h // // Handles textures including loading, unloading and cache management. diff --git a/es-core/src/utils/CImgUtil.cpp b/es-core/src/utils/CImgUtil.cpp index b46106abe..80c0bd0e3 100644 --- a/es-core/src/utils/CImgUtil.cpp +++ b/es-core/src/utils/CImgUtil.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // CImgUtil.cpp // // Utility functions using the CImg image processing library. diff --git a/es-core/src/utils/CImgUtil.h b/es-core/src/utils/CImgUtil.h index 50b975958..29c36ea1e 100644 --- a/es-core/src/utils/CImgUtil.h +++ b/es-core/src/utils/CImgUtil.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // CImgUtil.h // // Utility functions using the CImg image processing library. diff --git a/es-core/src/utils/MathUtil.cpp b/es-core/src/utils/MathUtil.cpp index 9749f2c68..e7f65fe3b 100644 --- a/es-core/src/utils/MathUtil.cpp +++ b/es-core/src/utils/MathUtil.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // MathUtil.cpp // // Math utility functions. diff --git a/es-core/src/utils/MathUtil.h b/es-core/src/utils/MathUtil.h index 9a18e046a..f4d70c973 100644 --- a/es-core/src/utils/MathUtil.h +++ b/es-core/src/utils/MathUtil.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // MathUtil.h // // Math utility functions. diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp index 543ac26da..eb4707200 100644 --- a/es-core/src/utils/StringUtil.cpp +++ b/es-core/src/utils/StringUtil.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // StringUtil.cpp // // Low-level string functions. diff --git a/es-core/src/utils/StringUtil.h b/es-core/src/utils/StringUtil.h index 00aa3e5f1..67ef426cb 100644 --- a/es-core/src/utils/StringUtil.h +++ b/es-core/src/utils/StringUtil.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // StringUtil.h // // Low-level string functions. diff --git a/es-core/src/utils/TimeUtil.cpp b/es-core/src/utils/TimeUtil.cpp index 291e0c7dc..57600a48c 100644 --- a/es-core/src/utils/TimeUtil.cpp +++ b/es-core/src/utils/TimeUtil.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // TimeUtil.cpp // // Low-level date and time functions. diff --git a/es-core/src/utils/TimeUtil.h b/es-core/src/utils/TimeUtil.h index 644bdf49f..01089718b 100644 --- a/es-core/src/utils/TimeUtil.h +++ b/es-core/src/utils/TimeUtil.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT // -// EmulationStation Desktop Edition +// ES-DE // TimeUtil.h // // Low-level date and time functions. From 1cf57e01138151ad52391e44880c8c07e04409f6 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 19:56:00 +0100 Subject: [PATCH 061/320] Changed the application name to ES-DE for the ScreenScraper API calls --- es-app/src/scrapers/ScreenScraper.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/es-app/src/scrapers/ScreenScraper.h b/es-app/src/scrapers/ScreenScraper.h index 7444143dd..29539d088 100644 --- a/es-app/src/scrapers/ScreenScraper.h +++ b/es-app/src/scrapers/ScreenScraper.h @@ -72,9 +72,8 @@ public: #else const std::string platformIdentifier {" O"}; #endif - const std::string API_SOFT_NAME = "EmulationStation-DE " + - static_cast(PROGRAM_VERSION_STRING) + - platformIdentifier; + const std::string API_SOFT_NAME = + "ES-DE " + static_cast(PROGRAM_VERSION_STRING) + platformIdentifier; // Which type of image artwork we need. Possible values (not a comprehensive list): // - ss: in-game screenshot From e851f1205f3cb96c3c0beb883342c1b37ef851de Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 19:57:10 +0100 Subject: [PATCH 062/320] Changed two dialog messages to the new application name --- es-app/src/views/ViewController.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index e5b6c1adb..0ba1658df 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -179,8 +179,7 @@ void ViewController::unsafeUpgradeDialog() "UNPACKING THE NEW RELEASE ON TOP OF THE OLD ONE? THIS MAY CAUSE " "VARIOUS PROBLEMS, SOME OF WHICH MAY NOT BE APPARENT IMMEDIATELY. " "MAKE SURE TO ALWAYS FOLLOW THE UPGRADE INSTRUCTIONS IN THE " - "README.TXT FILE THAT CAN BE FOUND IN THE EMULATIONSTATION-DE " - "DIRECTORY."}; + "README.TXT FILE THAT CAN BE FOUND IN THE ES-DE DIRECTORY."}; mWindow->pushGui(new GuiMsgBox( HelpStyle(), upgradeMessage.c_str(), "OK", [] {}, "", nullptr, "", nullptr, nullptr, true, @@ -196,8 +195,8 @@ void ViewController::invalidSystemsFileDialog() "IF YOU HAVE A CUSTOMIZED es_systems.xml FILE, THEN " "SOMETHING IS LIKELY WRONG WITH YOUR XML SYNTAX. " "IF YOU DON'T HAVE A CUSTOM SYSTEMS FILE, THEN THE " - "EMULATIONSTATION INSTALLATION IS BROKEN. SEE THE " - "APPLICATION LOG FILE es_log.txt FOR ADDITIONAL INFO"}; + "ES-DE INSTALLATION IS BROKEN. SEE THE APPLICATION " + "LOG FILE es_log.txt FOR ADDITIONAL INFO"}; mWindow->pushGui(new GuiMsgBox( HelpStyle(), errorMessage.c_str(), "QUIT", From 9283ab71fa518520af5385b040e75ab40c4dd7c1 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 21:03:41 +0100 Subject: [PATCH 063/320] Added support for .webp, .svg and unanimated .gif files to the slideshow screensaver when using a custom image directory Also changed the default slideshow custom image directory from slideshow/custom_images to screensavers/custom_slideshow and improved the menu entry for setting the custom directory. Changed the setting ScreensaverSlideshowImageDir to blank by default --- es-app/src/Screensaver.cpp | 24 +++++++--- es-app/src/guis/GuiScreensaverOptions.cpp | 56 +++++++++++++++++------ es-core/src/Settings.cpp | 3 +- 3 files changed, 61 insertions(+), 22 deletions(-) diff --git a/es-app/src/Screensaver.cpp b/es-app/src/Screensaver.cpp index 85cc301b7..f40567b2e 100644 --- a/es-app/src/Screensaver.cpp +++ b/es-app/src/Screensaver.cpp @@ -464,8 +464,14 @@ void Screensaver::generateVideoList() void Screensaver::generateCustomImageList() { - std::string imageDir = Utils::FileSystem::expandHomePath( - Settings::getInstance()->getString("ScreensaverSlideshowImageDir")); + std::string imageDir {Utils::FileSystem::expandHomePath( + Settings::getInstance()->getString("ScreensaverSlideshowImageDir"))}; + + if (imageDir.empty()) + imageDir = Utils::FileSystem::getAppDataDirectory() + .append("screensavers") + .append("custom_slideshow") + .string(); // This makes it possible to set the custom image directory relative to the ES-DE binary // directory or the ROM directory. @@ -473,19 +479,23 @@ void Screensaver::generateCustomImageList() imageDir = Utils::String::replace(imageDir, "%ROMPATH%", FileData::getROMDirectory()); if (imageDir != "" && Utils::FileSystem::isDirectory(imageDir)) { - std::string imageFilter {".jpg, .JPG, .png, .PNG"}; - Utils::FileSystem::StringList dirContent = Utils::FileSystem::getDirContent( - imageDir, Settings::getInstance()->getBool("ScreensaverSlideshowRecurse")); + const std::vector extList {".jpg", ".JPG", ".png", ".PNG", ".gif", + ".GIF", ".webp", ".WEBP", ".svg", ".SVG"}; + + Utils::FileSystem::StringList dirContent {Utils::FileSystem::getDirContent( + imageDir, Settings::getInstance()->getBool("ScreensaverSlideshowRecurse"))}; for (auto it = dirContent.begin(); it != dirContent.end(); ++it) { if (Utils::FileSystem::isRegularFile(*it)) { - if (imageFilter.find(Utils::FileSystem::getExtension(*it)) != std::string::npos) + if (std::find(extList.cbegin(), extList.cend(), + Utils::FileSystem::getExtension(*it)) != extList.cend()) mImageCustomFiles.push_back(*it); } } } else { - LOG(LogWarning) << "Custom screensaver image directory '" << imageDir << "' does not exist"; + LOG(LogWarning) << "Custom screensaver image directory \"" << imageDir + << "\" does not exist"; } mCustomFilesInventory.insert(mCustomFilesInventory.begin(), mImageCustomFiles.begin(), diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp index ae061db14..ac2e30f7c 100644 --- a/es-app/src/guis/GuiScreensaverOptions.cpp +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -15,6 +15,8 @@ #include "components/SliderComponent.h" #include "components/SwitchComponent.h" #include "guis/GuiMsgBox.h" +#include "guis/GuiTextEditKeyboardPopup.h" +#include "guis/GuiTextEditPopup.h" GuiScreensaverOptions::GuiScreensaverOptions(const std::string& title) : GuiSettings {title} @@ -196,20 +198,48 @@ void GuiScreensaverOptions::openSlideshowScreensaverOptions() }); // Custom image directory. + ComponentListRow rowCustomImageDir; auto screensaverSlideshowImageDir = std::make_shared( - "", Font::get(FONT_SIZE_SMALL), mMenuColorPrimary, ALIGN_RIGHT); - s->addEditableTextComponent( - "CUSTOM IMAGE DIRECTORY", screensaverSlideshowImageDir, - Settings::getInstance()->getString("ScreensaverSlideshowImageDir"), - Settings::getInstance()->getDefaultString("ScreensaverSlideshowImageDir")); - s->addSaveFunc([screensaverSlideshowImageDir, s] { - if (screensaverSlideshowImageDir->getValue() != - Settings::getInstance()->getString("ScreensaverSlideshowImageDir")) { - Settings::getInstance()->setString("ScreensaverSlideshowImageDir", - screensaverSlideshowImageDir->getValue()); - s->setNeedsSaving(); - } - }); + "CUSTOM IMAGE DIRECTORY", Font::get(FONT_SIZE_MEDIUM), mMenuColorPrimary); + auto bracketCustomImageDir = std::make_shared(); + bracketCustomImageDir->setResize( + glm::vec2 {0.0f, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight()}); + bracketCustomImageDir->setImage(":/graphics/arrow.svg"); + bracketCustomImageDir->setColorShift(mMenuColorPrimary); + rowCustomImageDir.addElement(screensaverSlideshowImageDir, true); + rowCustomImageDir.addElement(bracketCustomImageDir, false); + const std::string titleCustomImageDir {"CUSTOM IMAGE DIRECTORY"}; + const std::string defaultImageDirStaticText {"Default directory:"}; + const std::string defaultImageDirText {Utils::FileSystem::getAppDataDirectory() + .append("screensavers") + .append("custom_slideshow") + .string()}; + const std::string initValueMediaDir { + Settings::getInstance()->getString("ScreensaverSlideshowImageDir")}; + const bool multiLineMediaDir {false}; + auto updateValMediaDir = [this, s](const std::string& newVal) { + Settings::getInstance()->setString("ScreensaverSlideshowImageDir", newVal); + s->setNeedsSaving(); + }; + rowCustomImageDir.makeAcceptInputHandler( + [this, s, titleCustomImageDir, defaultImageDirStaticText, defaultImageDirText, + initValueMediaDir, updateValMediaDir, multiLineMediaDir] { + if (Settings::getInstance()->getBool("VirtualKeyboard")) { + mWindow->pushGui(new GuiTextEditKeyboardPopup( + getHelpStyle(), s->getMenu().getPosition().y, titleCustomImageDir, + Settings::getInstance()->getString("ScreensaverSlideshowImageDir"), + updateValMediaDir, multiLineMediaDir, "SAVE", "SAVE CHANGES?", + defaultImageDirStaticText, defaultImageDirText, "load default directory")); + } + else { + mWindow->pushGui(new GuiTextEditPopup( + getHelpStyle(), titleCustomImageDir, + Settings::getInstance()->getString("ScreensaverSlideshowImageDir"), + updateValMediaDir, multiLineMediaDir, "SAVE", "SAVE CHANGES?", + defaultImageDirStaticText, defaultImageDirText, "load default directory")); + } + }); + s->addRow(rowCustomImageDir); s->setSize(mSize); mWindow->pushGui(s); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 853468a24..5f1f0e2c2 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -202,8 +202,7 @@ void Settings::setDefaults() mBoolMap["ScreensaverSlideshowScanlines"] = {false, false}; mBoolMap["ScreensaverSlideshowCustomImages"] = {false, false}; mBoolMap["ScreensaverSlideshowRecurse"] = {false, false}; - mStringMap["ScreensaverSlideshowImageDir"] = {"~/.emulationstation/slideshow/custom_images", - "~/.emulationstation/slideshow/custom_images"}; + mStringMap["ScreensaverSlideshowImageDir"] = {"", ""}; // UI settings -> screensaver settings -> video screensaver settings. mIntMap["ScreensaverSwapVideoTimeout"] = {0, 0}; From 88754a86ed3e306c3d03f83bedb7bcef9a17f76b Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 21:17:05 +0100 Subject: [PATCH 064/320] Changed the custom slideshow screensaver image directory setting from ScreensaverSlideshowImageDir to ScreensaverSlideshowCustomDir --- es-app/src/Screensaver.cpp | 2 +- es-app/src/guis/GuiScreensaverOptions.cpp | 12 ++++++------ es-core/src/Settings.cpp | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/es-app/src/Screensaver.cpp b/es-app/src/Screensaver.cpp index f40567b2e..a6fc22eac 100644 --- a/es-app/src/Screensaver.cpp +++ b/es-app/src/Screensaver.cpp @@ -465,7 +465,7 @@ void Screensaver::generateVideoList() void Screensaver::generateCustomImageList() { std::string imageDir {Utils::FileSystem::expandHomePath( - Settings::getInstance()->getString("ScreensaverSlideshowImageDir"))}; + Settings::getInstance()->getString("ScreensaverSlideshowCustomDir"))}; if (imageDir.empty()) imageDir = Utils::FileSystem::getAppDataDirectory() diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp index ac2e30f7c..2b1d533bf 100644 --- a/es-app/src/guis/GuiScreensaverOptions.cpp +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -199,14 +199,14 @@ void GuiScreensaverOptions::openSlideshowScreensaverOptions() // Custom image directory. ComponentListRow rowCustomImageDir; - auto screensaverSlideshowImageDir = std::make_shared( + auto ScreensaverSlideshowCustomDir = std::make_shared( "CUSTOM IMAGE DIRECTORY", Font::get(FONT_SIZE_MEDIUM), mMenuColorPrimary); auto bracketCustomImageDir = std::make_shared(); bracketCustomImageDir->setResize( glm::vec2 {0.0f, Font::get(FONT_SIZE_MEDIUM)->getLetterHeight()}); bracketCustomImageDir->setImage(":/graphics/arrow.svg"); bracketCustomImageDir->setColorShift(mMenuColorPrimary); - rowCustomImageDir.addElement(screensaverSlideshowImageDir, true); + rowCustomImageDir.addElement(ScreensaverSlideshowCustomDir, true); rowCustomImageDir.addElement(bracketCustomImageDir, false); const std::string titleCustomImageDir {"CUSTOM IMAGE DIRECTORY"}; const std::string defaultImageDirStaticText {"Default directory:"}; @@ -215,10 +215,10 @@ void GuiScreensaverOptions::openSlideshowScreensaverOptions() .append("custom_slideshow") .string()}; const std::string initValueMediaDir { - Settings::getInstance()->getString("ScreensaverSlideshowImageDir")}; + Settings::getInstance()->getString("ScreensaverSlideshowCustomDir")}; const bool multiLineMediaDir {false}; auto updateValMediaDir = [this, s](const std::string& newVal) { - Settings::getInstance()->setString("ScreensaverSlideshowImageDir", newVal); + Settings::getInstance()->setString("ScreensaverSlideshowCustomDir", newVal); s->setNeedsSaving(); }; rowCustomImageDir.makeAcceptInputHandler( @@ -227,14 +227,14 @@ void GuiScreensaverOptions::openSlideshowScreensaverOptions() if (Settings::getInstance()->getBool("VirtualKeyboard")) { mWindow->pushGui(new GuiTextEditKeyboardPopup( getHelpStyle(), s->getMenu().getPosition().y, titleCustomImageDir, - Settings::getInstance()->getString("ScreensaverSlideshowImageDir"), + Settings::getInstance()->getString("ScreensaverSlideshowCustomDir"), updateValMediaDir, multiLineMediaDir, "SAVE", "SAVE CHANGES?", defaultImageDirStaticText, defaultImageDirText, "load default directory")); } else { mWindow->pushGui(new GuiTextEditPopup( getHelpStyle(), titleCustomImageDir, - Settings::getInstance()->getString("ScreensaverSlideshowImageDir"), + Settings::getInstance()->getString("ScreensaverSlideshowCustomDir"), updateValMediaDir, multiLineMediaDir, "SAVE", "SAVE CHANGES?", defaultImageDirStaticText, defaultImageDirText, "load default directory")); } diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 5f1f0e2c2..b585843a1 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -202,7 +202,7 @@ void Settings::setDefaults() mBoolMap["ScreensaverSlideshowScanlines"] = {false, false}; mBoolMap["ScreensaverSlideshowCustomImages"] = {false, false}; mBoolMap["ScreensaverSlideshowRecurse"] = {false, false}; - mStringMap["ScreensaverSlideshowImageDir"] = {"", ""}; + mStringMap["ScreensaverSlideshowCustomDir"] = {"", ""}; // UI settings -> screensaver settings -> video screensaver settings. mIntMap["ScreensaverSwapVideoTimeout"] = {0, 0}; From 0b20fedaf255e8ff365c2a9e175b6fbeccd49054 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 21:18:58 +0100 Subject: [PATCH 065/320] The screensavers and screensavers/custom_slideshow directories are now created on application startup --- es-app/src/main.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 3cf0e370a..d18d2f155 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -806,6 +806,31 @@ int main(int argc, char* argv[]) } } + { + // Create the screensavers and screensavers/custom_slideshow directories. + const std::filesystem::path screensaversDir { + Utils::FileSystem::getAppDataDirectory().append("screensavers")}; + const std::filesystem::path slideshowDir {Utils::FileSystem::getAppDataDirectory() + .append("screensavers") + .append("custom_slideshow")}; + if (!Utils::FileSystem::existsSTD(screensaversDir)) { + LOG(LogInfo) << "Creating screensavers directory \"" << screensaversDir.string() + << "\"..."; + Utils::FileSystem::createDirectory(screensaversDir.string()); + if (!Utils::FileSystem::existsSTD(screensaversDir)) { + LOG(LogWarning) << "Couldn't create directory, permission problems?"; + } + } + if (!Utils::FileSystem::existsSTD(slideshowDir)) { + LOG(LogInfo) << "Creating custom_slideshow directory \"" << slideshowDir.string() + << "\"..."; + Utils::FileSystem::createDirectory(slideshowDir.string()); + if (!Utils::FileSystem::existsSTD(slideshowDir)) { + LOG(LogWarning) << "Couldn't create directory, permission problems?"; + } + } + } + { if (!Settings::getInstance()->getBool("LegacyAppDataDirectory")) { // Create the controllers folder in the application data directory. From 1faa5575d9753fd0f0db9a2640374abd1b673dad Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 22:02:52 +0100 Subject: [PATCH 066/320] Split the es_find_rules.xml and es_systems.xml files for Linux and BSD Unix into separate directories --- es-app/src/SystemData.cpp | 19 +- resources/systems/linux/es_find_rules.xml | 1078 ++++++++ resources/systems/linux/es_systems.xml | 2244 +++++++++++++++++ resources/systems/unix/es_find_rules.xml | 438 +--- resources/systems/unix/es_systems.xml | 70 +- .../{ROMs_ALL_Unix.zip => ROMs_ALL_Linux.zip} | Bin 6 files changed, 3354 insertions(+), 495 deletions(-) create mode 100644 resources/systems/linux/es_find_rules.xml create mode 100644 resources/systems/linux/es_systems.xml rename tools/system-dirs-dummy-files/{ROMs_ALL_Unix.zip => ROMs_ALL_Linux.zip} (100%) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 43f419555..2864cac16 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -50,15 +50,18 @@ void FindRules::loadFindRules() LOG(LogInfo) << "Found custom find rules configuration file"; } -#if defined(_WIN64) +#if defined(__linux__) + filePath = + ResourceManager::getInstance().getResourcePath(":/systems/linux/es_find_rules.xml", false); +#elif defined(__ANDROID__) + filePath = ResourceManager::getInstance().getResourcePath(":/systems/android/es_find_rules.xml", + false); +#elif defined(_WIN64) filePath = ResourceManager::getInstance().getResourcePath(":/systems/windows/es_find_rules.xml", false); #elif defined(__APPLE__) filePath = ResourceManager::getInstance().getResourcePath(":/systems/macos/es_find_rules.xml", false); -#elif defined(__ANDROID__) - filePath = ResourceManager::getInstance().getResourcePath(":/systems/android/es_find_rules.xml", - false); #else filePath = ResourceManager::getInstance().getResourcePath(":/systems/unix/es_find_rules.xml", false); @@ -976,12 +979,14 @@ std::vector SystemData::getConfigPath() paths.emplace_back(path); } -#if defined(_WIN64) +#if defined(__linux__) + path = ResourceManager::getInstance().getResourcePath(":/systems/linux/es_systems.xml", true); +#elif defined(__ANDROID__) + path = ResourceManager::getInstance().getResourcePath(":/systems/android/es_systems.xml", true); +#elif defined(_WIN64) path = ResourceManager::getInstance().getResourcePath(":/systems/windows/es_systems.xml", true); #elif defined(__APPLE__) path = ResourceManager::getInstance().getResourcePath(":/systems/macos/es_systems.xml", true); -#elif defined(__ANDROID__) - path = ResourceManager::getInstance().getResourcePath(":/systems/android/es_systems.xml", true); #else path = ResourceManager::getInstance().getResourcePath(":/systems/unix/es_systems.xml", true); #endif diff --git a/resources/systems/linux/es_find_rules.xml b/resources/systems/linux/es_find_rules.xml new file mode 100644 index 000000000..f078fb3d9 --- /dev/null +++ b/resources/systems/linux/es_find_rules.xml @@ -0,0 +1,1078 @@ + + + + + + + bash + sh + + + + + retroarch + org.libretro.RetroArch + + + ~/Applications/RetroArch-Linux*.AppImage + ~/.local/share/applications/RetroArch-Linux*.AppImage + ~/.local/bin/RetroArch-Linux*.AppImage + ~/bin/RetroArch-Linux*.AppImage + /var/lib/flatpak/exports/bin/org.libretro.RetroArch + ~/.local/share/flatpak/exports/bin/org.libretro.RetroArch + + + + + + ~/.config/retroarch/cores + + ~/Applications/RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores + ~/.local/share/applications/RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores + ~/.local/bin/RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores + ~/bin/RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores + + ~/.var/app/org.libretro.RetroArch/config/retroarch/cores + + ~/snap/retroarch/current/.config/retroarch/cores + + /usr/lib/x86_64-linux-gnu/libretro + + /usr/lib64/libretro + + /usr/lib/libretro + + + + + + ~/Applications/3dSen/3dSen.exe + ~/.local/share/applications/3dSen/3dSen.exe + ~/.local/bin/3dSen/3dSen.exe + ~/bin/3dSen/3dSen.exe + + + + + + advmame + + + ~/Applications/advancemame/advmame + ~/.local/share/applications/advancemame/advmame + ~/.local/bin/advancemame/advmame + ~/bin/advancemame/advmame + + + + + + amiberry + + + ~/Applications/amiberry/amiberry + ~/.local/share/applications/amiberry/amiberry + ~/.local/bin/amiberry/amiberry + ~/bin/amiberry/amiberry + + + + + + ares + dev.ares.ares + + + /var/lib/flatpak/exports/bin/dev.ares.ares + ~/.local/share/flatpak/exports/bin/dev.ares.ares + + + + + + atari800 + atari800-jz.atari800 + + + + + + BasiliskII + net.cebix.basilisk + + + ~/Applications/BasiliskII*.AppImage + ~/.local/share/applications/BasiliskII*.AppImage + ~/.local/bin/BasiliskII*.AppImage + ~/bin/BasiliskII*.AppImage + /var/lib/flatpak/exports/bin/net.cebix.basilisk + ~/.local/share/flatpak/exports/bin/net.cebix.basilisk + + + + + + ~/Applications/BigPEmu/BigPEmu.exe + ~/.local/share/applications/BigPEmu/BigPEmu.exe + ~/.local/bin/BigPEmu/BigPEmu.exe + ~/bin/BigPEmu/BigPEmu.exe + + + + + + blastem + com.retrodev.blastem + + + /var/lib/flatpak/exports/bin/com.retrodev.blastem + ~/.local/share/flatpak/exports/bin/com.retrodev.blastem + + + + + + bsnes + dev.bsnes.bsnes + + + /var/lib/flatpak/exports/bin/dev.bsnes.bsnes + ~/.local/share/flatpak/exports/bin/dev.bsnes.bsnes + + + + + + cemu + Cemu + + + ~/Applications/Cemu*.AppImage + ~/.local/share/applications/Cemu*.AppImage + ~/.local/bin/Cemu*.AppImage + ~/bin/Cemu*.AppImage + ~/Applications/Cemu/Cemu + ~/.local/share/applications/Cemu/Cemu + ~/.local/bin/Cemu/Cemu + ~/bin/Cemu/Cemu + /var/lib/flatpak/exports/bin/info.cemu.Cemu + ~/.local/share/flatpak/exports/bin/info.cemu.Cemu + + + + + + citra + citra-emu.citra-nightly + org.citra_emu.citra + + + ~/Applications/citra-qt*.AppImage + ~/.local/share/applications/citra-qt*.AppImage + ~/.local/bin/citra-qt*.AppImage + ~/bin/citra-qt*.AppImage + ~/.citra/canary/citra-qt.AppImage + ~/.citra/nightly/citra-qt.AppImage + /var/lib/flatpak/exports/bin/org.citra_emu.citra + ~/.local/share/flatpak/exports/bin/org.citra_emu.citra + + + + + + cpcemu + + + ~/Applications/cpcemu/cpcemu + ~/.local/share/applications/cpcemu/cpcemu + ~/.local/bin/cpcemu/cpcemu + ~/bin/cpcemu/cpcemu + + + + + + ~/Applications/CSpect/CSpect.exe + ~/.local/share/applications/CSpect/CSpect.exe + ~/.local/bin/CSpect/CSpect.exe + ~/bin/CSpect/CSpect.exe + + + + + + ~/Applications/demul/demul.exe + ~/.local/share/applications/demul/demul.exe + ~/.local/bin/demul/demul.exe + ~/bin/demul/demul.exe + + + + + + desmume + org.desmume.DeSmuME + + + /var/lib/flatpak/exports/bin/org.desmume.DeSmuME + ~/.local/share/flatpak/exports/bin/org.desmume.DeSmuME + + + + + + dolphin-emu + dolphin-emulator.dolphin-emu + org.DolphinEmu.dolphin-emu + + + ~/Applications/Dolphin_Emulator*.AppImage + ~/.local/share/applications/Dolphin_Emulator*.AppImage + ~/.local/bin/Dolphin_Emulator*.AppImage + ~/bin/Dolphin_Emulator*.AppImage + /var/lib/flatpak/exports/bin/org.DolphinEmu.dolphin-emu + ~/.local/share/flatpak/exports/bin/org.DolphinEmu.dolphin-emu + + + + + + dosbox-staging + io.github.dosbox-staging + + + /var/lib/flatpak/exports/bin/io.github.dosbox-staging + ~/.local/share/flatpak/exports/bin/io.github.dosbox-staging + + + + + + dosbox-x + com.dosbox_x.DOSBox-X + + + /var/lib/flatpak/exports/bin/com.dosbox_x.DOSBox-X + ~/.local/share/flatpak/exports/bin/com.dosbox_x.DOSBox-X + + + + + + duckstation-nogui + duckstation-qt + org.duckstation.DuckStation + + + ~/Applications/DuckStation*.AppImage + ~/.local/share/applications/DuckStation*.AppImage + ~/.local/bin/DuckStation*.AppImage + ~/bin/DuckStation*.AppImage + ~/Applications/duckstation-nogui*.AppImage + ~/.local/share/applications/duckstation-nogui*.AppImage + ~/.local/bin/duckstation-nogui*.AppImage + ~/bin/duckstation-nogui*.AppImage + ~/Applications/duckstation-qt*.AppImage + ~/.local/share/applications/duckstation-qt*.AppImage + ~/.local/bin/duckstation-qt*.AppImage + ~/bin/duckstation-qt*.AppImage + /var/lib/flatpak/exports/bin/org.duckstation.DuckStation + ~/.local/share/flatpak/exports/bin/org.duckstation.DuckStation + + + + + + easyrpg-player + + + ~/Applications/easyrpg/easyrpg-player + ~/.local/share/applications/easyrpg/easyrpg-player + ~/.local/bin/easyrpg/easyrpg-player + ~/bin/easyrpg/easyrpg-player + + + + + + eka2l1_qt + + + ~/Applications/EKA2L1*.AppImage + ~/.local/share/applications/EKA2L1*.AppImage + ~/.local/bin/EKA2L1*.AppImage + ~/bin/EKA2L1*.AppImage + + + + + + ~/Applications/EKA2L1/eka2l1_qt.exe + ~/.local/share/applications/EKA2L1/eka2l1_qt.exe + ~/.local/bin/EKA2L1/eka2l1_qt.exe + ~/bin/EKA2L1/eka2l1_qt.exe + + + + + + fbneo + + + ~/Applications/fbneo/fbneo + ~/.local/share/applications/fbneo/fbneo + ~/.local/bin/fbneo/fbneo + ~/bin/fbneo/fbneo + + + + + + flycast + org.flycast.Flycast + + + ~/Applications/flycast-x86*.AppImage + ~/.local/share/applications/flycast-x86*.AppImage + ~/.local/bin/flycast-x86*.AppImage + ~/bin/flycast-x86*.AppImage + /var/lib/flatpak/exports/bin/org.flycast.Flycast + ~/.local/share/flatpak/exports/bin/org.flycast.Flycast + + + + + + flycast-dojo + + + ~/Applications/flycast-dojo*.AppImage + ~/.local/share/applications/flycast-dojo*.AppImage + ~/.local/bin/flycast-dojo*.AppImage + ~/bin/flycast-dojo*.AppImage + + + + + + fs-uae-launcher + fsuae.launcher + + + /var/lib/flatpak/exports/bin/net.fsuae.FS-UAE|flatpak run --command=fs-uae-launcher net.fsuae.FS-UAE + ~/.local/share/flatpak/exports/bin/net.fsuae.FS-UAE|flatpak run --command=fs-uae-launcher net.fsuae.FS-UAE + + + + + + fuse + net.sf.fuse_emulator + + + /var/lib/flatpak/exports/bin/net.sf.fuse_emulator + ~/.local/share/flatpak/exports/bin/net.sf.fuse_emulator + + + + + + gargoyle + io.github.garglk.Gargoyle + + + ~/Applications/Gargoyle*.AppImage + ~/.local/share/applications/Gargoyle*.AppImage + ~/.local/bin/Gargoyle*.AppImage + ~/bin/Gargoyle*.AppImage + /var/lib/flatpak/exports/bin/io.github.garglk.Gargoyle + ~/.local/share/flatpak/exports/bin/io.github.garglk.Gargoyle + + + + + + gearboy + + + ~/Applications/gearboy/gearboy + ~/.local/share/applications/gearboy/gearboy + ~/.local/bin/gearboy/gearboy + ~/bin/gearboy/gearboy + + + + + + ~/Applications/gopher2600/gopher2600_linux_amd64 + ~/.local/share/applications/gopher2600/gopher2600_linux_amd64 + ~/.local/bin/gopher2600/gopher2600_linux_amd64 + ~/bin/gopher2600/gopher2600_linux_amd64 + + + + + + hatari + org.tuxfamily.hatari + + + /var/lib/flatpak/exports/bin/org.tuxfamily.hatari + ~/.local/share/flatpak/exports/bin/org.tuxfamily.hatari + + + + + + hypseus.bin + + + ~/Applications/hypseus-singe/hypseus.bin + ~/.local/share/applications/hypseus-singe/hypseus.bin + ~/.local/bin/hypseus-singe/hypseus.bin + ~/bin/hypseus-singe/hypseus.bin + + + + + + lightspark + + + ~/Applications/lightspark/lightspark + ~/.local/share/applications/lightspark/lightspark + ~/.local/bin/lightspark/lightspark + ~/bin/lightspark/lightspark + + + + + + linapple + + + ~/Applications/linapple/linapple + ~/.local/share/applications/linapple/linapple + ~/.local/bin/linapple/linapple + ~/bin/linapple/linapple + + + + + + ~/Applications/m2emulator/EMULATOR.EXE + ~/.local/share/applications/m2emulator/EMULATOR.EXE + ~/.local/bin/m2emulator/EMULATOR.EXE + ~/bin/m2emulator/EMULATOR.EXE + + + + + + mame + org.mamedev.MAME + + + /var/lib/flatpak/exports/bin/org.mamedev.MAME + ~/.local/share/flatpak/exports/bin/org.mamedev.MAME + + + + + + mednafen + + + /var/lib/flatpak/exports/bin/com.github.AmatCoder.mednaffe|flatpak run --command=mednafen com.github.AmatCoder.mednaffe + ~/.local/share/flatpak/exports/bin/com.github.AmatCoder.mednaffe|flatpak run --command=mednafen com.github.AmatCoder.mednaffe + + + + + + melonds + melonDS + net.kuribo64.melonDS + + + /var/lib/flatpak/exports/bin/net.kuribo64.melonDS + ~/.local/share/flatpak/exports/bin/net.kuribo64.melonDS + + + + + + mesen2 + + + ~/Applications/Mesen*.AppImage + ~/.local/share/applications/Mesen*.AppImage + ~/.local/bin/Mesen*.AppImage + ~/bin/Mesen*.AppImage + + + + + + mgba + mgba-qt + io.mgba.mGBA + + + ~/Applications/mGBA*.AppImage + ~/.local/share/applications/mGBA*.AppImage + ~/.local/bin/mGBA*.AppImage + ~/bin/mGBA*.AppImage + /var/lib/flatpak/exports/bin/io.mgba.mGBA + ~/.local/share/flatpak/exports/bin/io.mgba.mGBA + + + + + + m64p + io.github.m64p.m64p + + + /var/lib/flatpak/exports/bin/io.github.m64p.m64p + ~/.local/share/flatpak/exports/bin/io.github.m64p.m64p + + + + + + nestopia + ca._0ldsk00l.Nestopia + + + /var/lib/flatpak/exports/bin/ca._0ldsk00l.Nestopia + ~/.local/share/flatpak/exports/bin/ca._0ldsk00l.Nestopia + + + + + + openmsx + org.openmsx.openMSX + + + /var/lib/flatpak/exports/bin/org.openmsx.openMSX + ~/.local/share/flatpak/exports/bin/org.openmsx.openMSX + + + + + + Oricutron + + + ~/Applications/oricutron/Oricutron + ~/.local/share/applications/oricutron/Oricutron + ~/.local/bin/oricutron/Oricutron + ~/bin/oricutron/Oricutron + + + + + + pcsx2-qt + net.pcsx2.PCSX2 + + + ~/Applications/pcsx2*.AppImage + ~/.local/share/applications/pcsx2*.AppImage + ~/.local/bin/pcsx2*.AppImage + ~/bin/pcsx2*.AppImage + /var/lib/flatpak/exports/bin/net.pcsx2.PCSX2 + ~/.local/share/flatpak/exports/bin/net.pcsx2.PCSX2 + + + + + + PCSX2 + pcsx2 + net.pcsx2.PCSX2 + + + /var/lib/flatpak/exports/bin/net.pcsx2.PCSX2 + ~/.local/share/flatpak/exports/bin/net.pcsx2.PCSX2 + + + + + + pico8 + + + ~/Applications/pico-8/pico8 + ~/.local/share/applications/pico-8/pico8 + ~/.local/bin/pico-8/pico8 + ~/bin/pico-8/pico8 + + + + + + org.purei.Play + + + ~/Applications/Play!*.AppImage + ~/.local/share/applications/Play!*.AppImage + ~/.local/bin/Play!*.AppImage + ~/bin/Play!*.AppImage + /var/lib/flatpak/exports/bin/org.purei.Play + ~/.local/share/flatpak/exports/bin/org.purei.Play + + + + + + ppsspp-emu.ppsspp-sdl + PPSSPPSDL + PPSSPPQt + org.ppsspp.PPSSPP + + + /var/lib/flatpak/exports/bin/org.ppsspp.PPSSPP + ~/.local/share/flatpak/exports/bin/org.ppsspp.PPSSPP + + + + + + prboom-plus + + + + + + primehack + io.github.shiiion.primehack + + + /var/lib/flatpak/exports/bin/io.github.shiiion.primehack + ~/.local/share/flatpak/exports/bin/io.github.shiiion.primehack + + + + + + ~/Applications/Proton/wine*.AppImage + ~/.local/share/applications/Proton/wine*.AppImage + ~/.local/bin/Proton/wine*.AppImage + ~/bin/Proton/wine*.AppImage + + + + + + punes + + + ~/Applications/punes/punes + ~/.local/share/applications/punes/punes + ~/.local/bin/punes/punes + ~/bin/punes/punes + + + + + + quasi88 + + + ~/Applications/quasi88/quasi88 + ~/.local/share/applications/quasi88/quasi88 + ~/.local/bin/quasi88/quasi88 + ~/bin/quasi88/quasi88 + + + + + + redream + + + ~/Applications/redream/redream + ~/.local/share/applications/redream/redream + ~/.local/bin/redream/redream + ~/bin/redream/redream + + + + + + RMG + com.github.Rosalie241.RMG + + + ~/Applications/RMG*.AppImage + ~/.local/share/applications/RMG*.AppImage + ~/.local/bin/RMG*.AppImage + ~/bin/RMG*.AppImage + /var/lib/flatpak/exports/bin/com.github.Rosalie241.RMG + ~/.local/share/flatpak/exports/bin/com.github.Rosalie241.RMG + + + + + + rpcs3 + rpcs3-emu.rpcs3 + net.rpcs3.RPCS3 + + + ~/Applications/rpcs3*.AppImage + ~/.local/share/applications/rpcs3*.AppImage + ~/.local/bin/rpcs3*.AppImage + ~/bin/rpcs3*.AppImage + /var/lib/flatpak/exports/bin/net.rpcs3.RPCS3 + ~/.local/share/flatpak/exports/bin/net.rpcs3.RPCS3 + + + + + + ruffle + + + ~/Applications/ruffle/ruffle + ~/.local/share/applications/ruffle/ruffle + ~/.local/bin/ruffle/ruffle + ~/bin/ruffle/ruffle + + + + + + Ryujinx + Ryujinx.Ava + org.ryujinx.Ryujinx + + + /var/lib/flatpak/exports/bin/org.ryujinx.Ryujinx + ~/.local/share/flatpak/exports/bin/org.ryujinx.Ryujinx + ~/Applications/publish/Ryujinx + ~/.local/share/applications/publish/Ryujinx + ~/.local/bin/publish/Ryujinx + ~/bin/publish/Ryujinx + ~/Applications/publish/Ryujinx.Ava + ~/.local/share/applications/publish/Ryujinx.Ava + ~/.local/bin/publish/Ryujinx.Ava + ~/bin/publish/Ryujinx.Ava + + + + + + sameboy + io.github.sameboy.SameBoy + + + /var/lib/flatpak/exports/bin/io.github.sameboy.SameBoy + ~/.local/share/flatpak/exports/bin/io.github.sameboy.SameBoy + + + + + + scummvm + org.scummvm.ScummVM + + + /var/lib/flatpak/exports/bin/org.scummvm.ScummVM + ~/.local/share/flatpak/exports/bin/org.scummvm.ScummVM + + + + + + sdl2trs + + + ~/Applications/sdl2trs/sdl2trs + ~/.local/share/applications/sdl2trs/sdl2trs + ~/.local/bin/sdl2trs/sdl2trs + ~/bin/sdl2trs/sdl2trs + + + + + + SheepShaver + + + ~/Applications/SheepShaver*.AppImage + ~/.local/share/applications/SheepShaver*.AppImage + ~/.local/bin/SheepShaver*.AppImage + ~/bin/SheepShaver*.AppImage + + + + + + simcoupe + + + ~/Applications/simcoupe/simcoupe + ~/.local/share/applications/simcoupe/simcoupe + ~/.local/bin/simcoupe/simcoupe + ~/bin/simcoupe/simcoupe + + + + + + simple64-gui + io.github.simple64.simple64 + + + /var/lib/flatpak/exports/bin/io.github.simple64.simple64 + ~/.local/share/flatpak/exports/bin/io.github.simple64.simple64 + + + + + + SkyEmu + + + ~/Applications/SkyEmu/SkyEmu + ~/.local/share/applications/SkyEmu/SkyEmu + ~/.local/bin/SkyEmu/SkyEmu + ~/bin/SkyEmu/SkyEmu + + + + + + snes9x + snes9x-gtk + com.snes9x.Snes9x + + + ~/Applications/Snes9x*.AppImage + ~/.local/share/applications/Snes9x*.AppImage + ~/.local/bin/Snes9x*.AppImage + ~/bin/Snes9x*.AppImage + /var/lib/flatpak/exports/bin/com.snes9x.Snes9x + ~/.local/share/flatpak/exports/bin/com.snes9x.Snes9x + + + + + + solarus-run + solarus.run + + + /var/lib/flatpak/exports/bin/org.solarus_games.solarus.Launcher|flatpak run --command=solarus-run org.solarus_games.solarus.Launcher + ~/.local/share/flatpak/exports/bin/org.solarus_games.solarus.Launcher|flatpak run --command=solarus-run org.solarus_games.solarus.Launcher + + + + + + steam + + + + + + stella + io.github.stella_emu.Stella + + + /var/lib/flatpak/exports/bin/io.github.stella_emu.Stella + ~/.local/share/flatpak/exports/bin/io.github.stella_emu.Stella + + + + + + supermodel + + + ~/Applications/Supermodel/supermodel + ~/.local/share/applications/Supermodel/supermodel + ~/.local/bin/Supermodel/supermodel + ~/bin/Supermodel/supermodel + /var/lib/flatpak/exports/bin/com.supermodel3.Supermodel + ~/.local/share/flatpak/exports/bin/com.supermodel3.Supermodel + + + + + + tic80 + com.tic80.TIC_80 + + + /var/lib/flatpak/exports/bin/com.tic80.TIC_80 + ~/.local/share/flatpak/exports/bin/com.tic80.TIC_80 + + + + + + dolphin-emu-triforce + + + ~/Applications/dolphin-emu-triforce*.AppImage + ~/.local/share/applications/dolphin-emu-triforce*.AppImage + ~/.local/bin/dolphin-emu-triforce*.AppImage + ~/bin/dolphin-emu-triforce*.AppImage + + + + + + ~/Applications/tsugaru/Tsugaru_CUI + ~/.local/share/applications/tsugaru/Tsugaru_CUI + ~/.local/bin/tsugaru/Tsugaru_CUI + ~/bin/tsugaru/Tsugaru_CUI + + + + + + visualboyadvance-m + + + + + + x64sc + vice-jz.x64sc + net.sf.VICE + + + /var/lib/flatpak/exports/bin/net.sf.VICE + ~/.local/share/flatpak/exports/bin/net.sf.VICE + + + + + + xplus4 + vice-jz.xplus4 + + + /var/lib/flatpak/exports/bin/net.sf.VICE|flatpak run --command=xplus4 net.sf.VICE + ~/.local/share/flatpak/exports/bin/net.sf.VICE|flatpak run --command=xplus4 net.sf.VICE + + + + + + xvic + vice-jz.xvic + + + /var/lib/flatpak/exports/bin/net.sf.VICE|flatpak run --command=xvic net.sf.VICE + ~/.local/share/flatpak/exports/bin/net.sf.VICE|flatpak run --command=xvic net.sf.VICE + + + + + + VPinballX_GL + + + ~/Applications/VPinballX/VPinballX_GL + ~/.local/share/applications/VPinballX/VPinballX_GL + ~/.local/bin/VPinballX/VPinballX_GL + ~/bin/VPinballX/VPinballX_GL + + + + + + vita3k + Vita3K + + + ~/Applications/Vita3K/Vita3K + ~/.local/share/applications/Vita3K/Vita3K + ~/.local/bin/Vita3K/Vita3K + ~/bin/Vita3K/Vita3K + + + + + + xemu + app.xemu.xemu + + + ~/Applications/xemu*.AppImage + ~/.local/share/applications/xemu*.AppImage + ~/.local/bin/xemu*.AppImage + ~/bin/xemu*.AppImage + /var/lib/flatpak/exports/bin/app.xemu.xemu + ~/.local/share/flatpak/exports/bin/app.xemu.xemu + + + + + + ~/Applications/Wine/wine*.AppImage + ~/.local/share/applications/Wine/wine*.AppImage + ~/.local/bin/Wine/wine*.AppImage + ~/bin/Wine/wine*.AppImage + + + + + + ~/Applications/xenia/xenia.exe + ~/.local/share/applications/xenia/xenia.exe + ~/.local/bin/xenia/xenia.exe + ~/bin/xenia/xenia.exe + ~/Applications/xenia/xenia_canary.exe + ~/.local/share/applications/xenia/xenia_canary.exe + ~/.local/bin/xenia/xenia_canary.exe + ~/bin/xenia/xenia_canary.exe + + + + + + xroar + + + ~/Applications/xroar/xroar + ~/.local/share/applications/xroar/xroar + ~/.local/bin/xroar/xroar + ~/bin/xroar/xroar + + + + + + yuzu + org.yuzu_emu.yuzu + + + ~/Applications/yuzu*.AppImage + ~/.local/share/applications/yuzu*.AppImage + ~/.local/bin/yuzu*.AppImage + ~/bin/yuzu*.AppImage + /var/lib/flatpak/exports/bin/org.yuzu_emu.yuzu + ~/.local/share/flatpak/exports/bin/org.yuzu_emu.yuzu + + + + + + zesarux + + + ~/Applications/ZEsarUX/zesarux + ~/.local/share/applications/ZEsarUX/zesarux + ~/.local/bin/ZEsarUX/zesarux + ~/bin/ZEsarUX/zesarux + + + \ No newline at end of file diff --git a/resources/systems/linux/es_systems.xml b/resources/systems/linux/es_systems.xml new file mode 100644 index 000000000..c1ba40807 --- /dev/null +++ b/resources/systems/linux/es_systems.xml @@ -0,0 +1,2244 @@ + + + + + 3do + 3DO Interactive Multiplayer + %ROMPATH%/3do + .bin .BIN .chd .CHD .cue .CUE .iso .ISO .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/opera_libretro.so %ROM% + 3do + 3do + + + adam + 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 + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/adam adam -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/adam adam -cass1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/adam adam -cart1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/adam adam %BASENAME% + adam + adam + + + ags + Adventure Game Studio Game Engine + %ROMPATH%/ags + .desktop .sh + %STARTDIR%=%GAMEDIR% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + pcwindows + ags + + + amiga + Commodore Amiga + %ROMPATH%/amiga + .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% %ROM% + %STARTDIR%=%EMUDIR% %EMULATOR_AMIBERRY% --autoload %ROM% + amiga + amiga + + + amiga1200 + Commodore Amiga 1200 + %ROMPATH%/amiga1200 + .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% %ROM% + %STARTDIR%=%EMUDIR% %EMULATOR_AMIBERRY% --autoload %ROM% + amiga + amiga1200 + + + amiga600 + Commodore Amiga 600 + %ROMPATH%/amiga600 + .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% %ROM% + %STARTDIR%=%EMUDIR% %EMULATOR_AMIBERRY% --autoload %ROM% + amiga + amiga600 + + + amigacd32 + Commodore Amiga CD32 + %ROMPATH%/amigacd32 + .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=CD32 %ROM% + %STARTDIR%=%EMUDIR% %EMULATOR_AMIBERRY% --model CD32 --autoload %ROM% + amigacd32 + amigacd32 + + + amstradcpc + Amstrad CPC + %ROMPATH%/amstradcpc + .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% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/amstradcpc cpc6128 -flop1 %ROM% + amstradcpc + amstradcpc + + + android + Google Android + %ROMPATH%/android + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + android + android + + + apple2 + Apple II + %ROMPATH%/apple2 + .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% + apple2 + apple2 + + + apple2gs + 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% + apple2gs + apple2gs + + + arcade + Arcade + %ROMPATH%/arcade + .cmd .CMD .desktop .sh .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/arcade %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM% + %EMULATOR_FINALBURN-NEO% -fullscreen %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/flycast_libretro.so %ROM% + %EMULATOR_FLYCAST% %ROM% + %EMULATOR_FLYCAST-DOJO% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/kronos_libretro.so %ROM% + %STARTDIR%=%GAMEDIR% %EMULATOR_SUPERMODEL% -log-output=%GAMEDIR%/Config/Supermodel.log %INJECT%=%BASENAME%.commands %ROM% + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + arcade + arcade + + + arcadia + Emerson Arcadia 2001 + %ROMPATH%/arcadia + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "arcadia -rompath \"%GAMEDIRRAW%;%ROMPATH%/arcadia\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/arcadia arcadia -cart %ROM% + arcadia + arcadia + + + archimedes + Acorn Archimedes + %ROMPATH%/archimedes + .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 + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/archimedes aa4401 -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/archimedes aa3000 -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/archimedes aa310 -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/archimedes aa540 -flop1 %ROM% + archimedes + archimedes + + + arduboy + Arduboy Miniature Game System + %ROMPATH%/arduboy + .hex .HEX .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/arduous_libretro.so %ROM% + arduboy + arduboy + + + astrocde + Bally Astrocade + %ROMPATH%/astrocde + .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "astrocde -rompath \"%GAMEDIRRAW%;%ROMPATH%/astrocde\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/astrocde astrocde -cart %BASENAME% + astrocde + astrocade + + + atari2600 + Atari 2600 + %ROMPATH%/atari2600 + .a26 .A26 .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/stella_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/stella2014_libretro.so %ROM% + %EMULATOR_STELLA% %ROM% + %EMULATOR_GOPHER2600% %ROM% + %EMULATOR_ARES% --fullscreen --system "Atari 2600" %ROM% + atari2600 + atari2600 + + + atari5200 + Atari 5200 + %ROMPATH%/atari5200 + .a52 .A52 .atr .ATR .atx .ATX .bin .BIN .car .CAR .cas .CAS .cdm .CDM .rom .ROM .xex .XEX .xfd .XFD .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/a5200_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/atari800_libretro.so %ROM% + %EMULATOR_ATARI800% %ROM% + atari5200 + atari5200 + + + atari7800 + Atari 7800 ProSystem + %ROMPATH%/atari7800 + .a78 .A78 .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/prosystem_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "a7800 -rompath \"%GAMEDIRRAW%;%ROMPATH%/atari7800\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/atari7800 a7800 -cart %ROM% + atari7800 + atari7800 + + + atari800 + Atari 800 + %ROMPATH%/atari800 + .a52 .A52 .atr .ATR .atx .ATX .bin .BIN .car .CAR .cas .CAS .cdm .CDM .rom .ROM .xex .XEX .xfd .XFD .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/atari800_libretro.so %ROM% + %EMULATOR_ATARI800% %ROM% + atari800 + atari800 + + + atarijaguar + Atari Jaguar + %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% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/atarijaguar jaguar -cart %ROM% + %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_BIGPEMU-WINDOWS% %ROM% + %STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_BIGPEMU-WINDOWS% %ROM% + atarijaguar + atarijaguar + + + atarijaguarcd + 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 + %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_BIGPEMU-WINDOWS% %ROM% + %STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_BIGPEMU-WINDOWS% %ROM% + atarijaguarcd + atarijaguarcd + + + atarilynx + Atari Lynx + %ROMPATH%/atarilynx + .lnx .LNX .o .O .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/handy_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_lynx_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module lynx %ROM% + atarilynx + atarilynx + + + atarist + Atari ST + %ROMPATH%/atarist + .st .ST .msa .MSA .stx .STX .dim .DIM .ipf .IPF .m3u .M3U .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/hatari_libretro.so %ROM% + %EMULATOR_HATARI% %ROM% + atarist + atarist + + + 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 + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/atari800_libretro.so %ROM% + %EMULATOR_ATARI800% %ROM% + atarixe + atarixe + + + atomiswave + Sammy Corporation Atomiswave + %ROMPATH%/atomiswave + .bin .BIN .dat .DAT .elf .ELF .lst .LST .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/flycast_libretro.so %ROM% + %EMULATOR_FLYCAST% %ROM% + %EMULATOR_FLYCAST-DOJO% %ROM% + arcade + atomiswave + + + bbcmicro + 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% + bbcmicro + bbcmicro + + + c64 + Commodore 64 + %ROMPATH%/c64 + .bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x64sc_libretro.so %ROM% + %EMULATOR_VICE-X64SC% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x64_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_xscpu64_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_x128_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/frodo_libretro.so %ROM% + c64 + c64 + + + cdimono1 + Philips CD-i + %ROMPATH%/cdimono1 + .chd .CHD .cue .CUE .iso .ISO + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/same_cdi_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/cdi2015_libretro.so %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/cdimono1 cdimono1 -cdrom %ROM% + cdimono1 + cdimono1 + + + 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 + %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% + %STARTDIR%=%EMUDIR% %EMULATOR_AMIBERRY% --model CDTV --autoload %ROM% + cdtv + cdtv + + + chailove + ChaiLove Game Engine + %ROMPATH%/chailove + .chai .CHAI .chailove .CHAILOVE .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/chailove_libretro.so %ROM% + love + chailove + + + channelf + Fairchild Channel F + %ROMPATH%/channelf + .bin .BIN .chf .CHF .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/freechaf_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "channelf -rompath \"%GAMEDIRRAW%;%ROMPATH%/channelf\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/channelf channelf -cart %ROM% + channelf + channelf + + + coco + Tandy Color Computer + %ROMPATH%/coco + .cas .CAS .ccc .CCC .dsk .DSK .rom .ROM + %EMULATOR_XROAR% -fs -default-machine coco2bus %ROM% + %EMULATOR_XROAR% -fs -default-machine coco2b %ROM% + coco + coco + + + colecovision + Coleco ColecoVision + %ROMPATH%/colecovision + .bin .BIN .cas .CAS .col .COL .cv .CV .dsk .DSK .m3u .M3U .mx1 .MX1 .mx2 .MX2 .ri .RI .rom .ROM .sc .SC .sg .SG .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearcoleco_libretro.so %ROM% + %EMULATOR_OPENMSX% -machine ColecoVision_SGM %INJECT%=%BASENAME%.commands -cart %ROM% + %EMULATOR_ARES% --fullscreen --system "ColecoVision" %ROM% + colecovision + colecovision + + + consolearcade + Console Arcade Systems + %ROMPATH%/consolearcade + .arcadedef .desktop .iso .ISO .sh .xbe .XBE .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/consolearcade %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/flycast_libretro.so %ROM% + %EMULATOR_FLYCAST% %ROM% + %EMULATOR_FLYCAST-DOJO% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/kronos_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module ss %ROM% + %EMULATOR_PLAY!% --disc %ROM% + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %INJECT%=%BASENAME%.esprefix %EMULATOR_TRIFORCE% -b -e %ROM% + %INJECT%=%BASENAME%.esprefix %EMULATOR_XEMU% -dvd_path %ROM% + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + arcade + consolearcade + + + cps + Capcom Play System + %ROMPATH%/cps + .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/cps %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM% + %EMULATOR_FINALBURN-NEO% -fullscreen %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps1_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps2_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps3_libretro.so %ROM% + arcade + cps + + + cps1 + Capcom Play System I + %ROMPATH%/cps1 + .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/cps1 %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM% + %EMULATOR_FINALBURN-NEO% -fullscreen %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps1_libretro.so %ROM% + arcade + cps1 + + + cps2 + Capcom Play System II + %ROMPATH%/cps2 + .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/cps2 %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM% + %EMULATOR_FINALBURN-NEO% -fullscreen %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps2_libretro.so %ROM% + arcade + cps2 + + + cps3 + Capcom Play System III + %ROMPATH%/cps3 + .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/cps3 %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM% + %EMULATOR_FINALBURN-NEO% -fullscreen %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps3_libretro.so %ROM% + arcade + cps3 + + + crvision + VTech CreatiVision + %ROMPATH%/crvision + .bin .BIN .rom .ROM .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "crvision -rompath \"%GAMEDIRRAW%;%ROMPATH%/crvision\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/crvision crvision -cart %ROM% + crvision + crvision + + + daphne + Daphne Arcade LaserDisc Emulator + %ROMPATH%/daphne + .daphne .ogv .OGV .singe .7z .7Z .zip .ZIP + %EMULATOR_HYPSEUS-SINGE% %BASENAME% vldp -framefile %GAMEDIR%/%BASENAME%.txt %INJECT%=%BASENAME%.commands + %EMULATOR_HYPSEUS-SINGE% singe vldp -framefile %GAMEDIR%/%BASENAME%.txt -script %GAMEDIR%/%BASENAME%.singe %INJECT%=%BASENAME%.commands + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/daphne %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dirksimple_libretro.so %ROM% + daphne, arcade + daphne + + + desktop + Desktop Applications + %ROMPATH%/desktop + .AppImage .desktop .sh + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %RUNINBACKGROUND% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %EMULATOR_OS-SHELL% -c "%ROM%" + %RUNINBACKGROUND% %EMULATOR_OS-SHELL% -c "%ROM%" + pcwindows + desktop + + + doom + Doom + %ROMPATH%/doom + .desktop .iwad .IWAD .pk4 .PK4 .pwad .PWAD .sh .wad .WAD + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/prboom_libretro.so %ROM% + %EMULATOR_PRBOOM-PLUS% -iwad %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/boom3_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/boom3_xp_libretro.so %ROM% + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + pc, pcwindows + doom + + + dos + DOS (PC) + %ROMPATH%/dos + .bat .BAT .com .COM .conf .CONF .cue .CUE .dosz .DOSZ .exe .EXE .iso .ISO .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dosbox_pure_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dosbox_core_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dosbox_svn_libretro.so %ROM% + %STARTDIR%=%GAMEDIR% %EMULATOR_DOSBOX-X% %ROM% + %STARTDIR%=%GAMEDIR% %EMULATOR_DOSBOX-STAGING% %ROM% + dos + dos + + + dragon32 + Dragon Data Dragon 32 + %ROMPATH%/dragon32 + .cas .CAS .ccc .CCC .dsk .DSK .rom .ROM + %EMULATOR_XROAR% -fs -default-machine dragon32 %ROM% + %EMULATOR_XROAR% -fs -default-machine dragon64 %ROM% + dragon32 + dragon32 + + + dreamcast + Sega Dreamcast + %ROMPATH%/dreamcast + .cdi .CDI .chd .CHD .cue .CUE .dat .DAT .elf .ELF .gdi .GDI .iso .ISO .lst .LST .m3u .M3U .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/flycast_libretro.so %ROM% + %EMULATOR_FLYCAST% %ROM% + %EMULATOR_FLYCAST-DOJO% %ROM% + %EMULATOR_REDREAM% %ROM% + dreamcast + dreamcast + + + easyrpg + EasyRPG Game Engine + %ROMPATH%/easyrpg + .easyrpg .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/easyrpg_libretro.so %ROM% + %STARTDIR%=%GAMEENTRYDIR% %EMULATOR_EASYRPG% + easyrpg + easyrpg + + + electron + Acorn Electron + %ROMPATH%/electron + .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 + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/electron electron64 -autoboot_delay "2" -autoboot_command "*T.\nCH.\"\"\n" -cass1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/electron electron64 -exp plus1 -cart1 seds -autoboot_delay "2" -autoboot_command "*CAT\n\n\n\n\n\n*EXEC !BOOT\n" -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/electron electron64 -exp plus3 -exp:plus3:fdc:1 35dd -autoboot_delay "2" -autoboot_command "*CAT\n\n\n\n\n\n*RUN !BOOT\n" -flop1 %ROM% + electron + electron + + + emulators + Emulators + %ROMPATH%/emulators + .AppImage .desktop .sh + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %RUNINBACKGROUND% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %EMULATOR_OS-SHELL% -c "%ROM%" + %RUNINBACKGROUND% %EMULATOR_OS-SHELL% -c "%ROM%" + pcwindows + emulators + + + epic + Epic Games Store + %ROMPATH%/epic + .desktop .sh + %RUNINBACKGROUND% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + pcwindows + epic + + + famicom + Nintendo Family Computer + %ROMPATH%/famicom + .3dsen .3DSEN .fds .FDS .nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen_libretro.so %ROM% + %EMULATOR_MESEN% --fullscreen %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nestopia_libretro.so %ROM% + %EMULATOR_NESTOPIA-UE% --fullscreen %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fceumm_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/quicknes_libretro.so %ROM% + %EMULATOR_PUNES% -u yes %ROM% + %EMULATOR_MEDNAFEN% -force_module nes %ROM% + %EMULATOR_ARES% --fullscreen --system "Famicom" %ROM% + %EMULATOR_ARES% --fullscreen --system "Famicom Disk System" %ROM% + %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_3DSEN-WINDOWS% -id=%INJECT%=%BASENAME%.3dsen + %STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_3DSEN-WINDOWS% -id=%INJECT%=%BASENAME%.3dsen + famicom + famicom + + + fba + FinalBurn Alpha + %ROMPATH%/fba + .iso .ISO .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_neogeo_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps1_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps2_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_cps3_libretro.so %ROM% + arcade + fba + + + fbneo + FinalBurn Neo + %ROMPATH%/fbneo + .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM% + %EMULATOR_FINALBURN-NEO% -fullscreen %BASENAME% + arcade + fbneo + + + fds + Nintendo Famicom Disk System + %ROMPATH%/fds + .nes .NES .fds .FDS .unf .UNF .UNIF .UNIF .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen_libretro.so %ROM% + %EMULATOR_MESEN% --fullscreen %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nestopia_libretro.so %ROM% + %EMULATOR_NESTOPIA-UE% --fullscreen %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fceumm_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module nes %ROM% + %EMULATOR_ARES% --fullscreen --system "Famicom Disk System" %ROM% + fds + fds + + + flash + Adobe Flash + %ROMPATH%/flash + .swf .SWF + %EMULATOR_RUFFLE% --fullscreen %ROM% + %EMULATOR_LIGHTSPARK% --fullscreen %ROM% + flash + flash + + + fm7 + Fujitsu FM-7 + %ROMPATH%/fm7 + .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 + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/fm7 fm7 -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/fm7 fm7 -autoboot_delay "5" -autoboot_command "load\n\n\nrun\n" -cass1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/fm7 fm7 %BASENAME% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/fm7 fm77av -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/fm7 fm77av -autoboot_delay "5" -autoboot_command "load\n\n\nrun\n" -cass1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/fm7 fm77av %BASENAME% + fm7 + fm7 + + + fmtowns + Fujitsu FM Towns + %ROMPATH%/fmtowns + .cdr .CDR .chd .CHD .cue .CUE .gdi .GDI .iso .ISO + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "fmtownshr -rompath \"%GAMEDIRRAW%;%ROMPATH%/fmtowns\" -cdrom \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/fmtowns fmtownshr -cdrom %ROM% + %EMULATOR_TSUGARU% %EMUDIR%/roms -HOSTSHORTCUT ESC 0 0 FORCEQUIT -FULLSCREEN -CD %ROM% %INJECT%=%BASENAME%.cfg + fmtowns + fmtowns + + + fpinball + Future Pinball + %ROMPATH%/fpinball + .fpt .FPT + PLACEHOLDER %ROM% + fpinball + fpinball + + + gamate + Bit Corporation Gamate + %ROMPATH%/gamate + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "gamate -rompath \"%GAMEDIRRAW%;%ROMPATH%/gamate\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/gamate gamate -cart %ROM% + gamate + gamate + + + gameandwatch + Nintendo Game and Watch + %ROMPATH%/gameandwatch + .mgw .MGW .7z .7Z .zip .ZIP + %STARTDIR%=~/.mame %EMULATOR_MAME% -artpath %ROMPATH%/gameandwatch/artwork -rompath %GAMEDIR%\;%ROMPATH%/gameandwatch %BASENAME% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/gameandwatch %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gw_libretro.so %ROM% + gameandwatch + gameandwatch + + + gamecom + Tiger Electronics Game.com + %ROMPATH%/gamecom + .tgc .TGC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "gamecom -rompath \"%GAMEDIRRAW%;%ROMPATH%/gamecom\" -cartridge1 \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/gamecom gamecom -cartridge1 %ROM% + gamecom + gamecom + + + gamegear + Sega Game Gear + %ROMPATH%/gamegear + .68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearsystem_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/smsplus_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module gg %ROM% + %EMULATOR_ARES% --fullscreen --system "Game Gear" %ROM% + gamegear + gamegear + + + gb + Nintendo Game Boy + %ROMPATH%/gb + .bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gambatte_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/sameboy_libretro.so %ROM% + %EMULATOR_SAMEBOY% -f %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearboy_libretro.so %ROM% + %EMULATOR_GEARBOY% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/tgbdual_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM% + %EMULATOR_MESEN% --fullscreen %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mgba_libretro.so %ROM% + %EMULATOR_MGBA% -f %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vbam_libretro.so %ROM% + %EMULATOR_VBA-M% -f %ROM% + %EMULATOR_ARES% --fullscreen --system "Game Boy" %ROM% + %EMULATOR_SKYEMU% %ROM% + gb + gb + + + gba + Nintendo Game Boy Advance + %ROMPATH%/gba + .agb .AGB .bin .BIN .cgb .CGB .dmg .DMG .gb .GB .gba .GBA .gbc .GBC .sgb .SGB .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mgba_libretro.so %ROM% + %EMULATOR_MGBA% -f %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vbam_libretro.so %ROM% + %EMULATOR_VBA-M% -f %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vba_next_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gpsp_libretro.so %ROM% + %EMULATOR_ARES% --fullscreen --system "Game Boy Advance" %ROM% + %EMULATOR_SKYEMU% %ROM% + gba + gba + + + gbc + Nintendo Game Boy Color + %ROMPATH%/gbc + .bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gambatte_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/sameboy_libretro.so %ROM% + %EMULATOR_SAMEBOY% -f %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearboy_libretro.so %ROM% + %EMULATOR_GEARBOY% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/tgbdual_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM% + %EMULATOR_MESEN% --fullscreen %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mgba_libretro.so %ROM% + %EMULATOR_MGBA% -f %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vbam_libretro.so %ROM% + %EMULATOR_VBA-M% -f %ROM% + %EMULATOR_ARES% --fullscreen --system "Game Boy Color" %ROM% + %EMULATOR_SKYEMU% %ROM% + gbc + gbc + + + gc + Nintendo GameCube + %ROMPATH%/gc + .ciso .CISO .dff .DFF .dol .DOL .elf .ELF .gcm .GCM .gcz .GCZ .iso .ISO .json .JSON .m3u .M3U .rvz .RVZ .tgc .TGC .wad .WAD .wbfs .WBFS .wia .WIA .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dolphin_libretro.so %ROM% + %INJECT%=%BASENAME%.esprefix %EMULATOR_DOLPHIN% -b -e %ROM% + %INJECT%=%BASENAME%.esprefix %EMULATOR_PRIMEHACK% -b -e %ROM% + %INJECT%=%BASENAME%.esprefix %EMULATOR_TRIFORCE% -b -e %ROM% + gc + gc + + + genesis + Sega Genesis + %ROMPATH%/genesis + .32x .32X .68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/blastem_libretro.so %ROM% + %EMULATOR_BLASTEM% -m gen %ROM% + %EMULATOR_MEDNAFEN% -force_module md %ROM% + %EMULATOR_ARES% --fullscreen --system "Mega Drive" %ROM% + genesis + genesis + + + gmaster + Hartung Game Master + %ROMPATH%/gmaster + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "gmaster -rompath \"%GAMEDIRRAW%;%ROMPATH%/gmaster\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/gmaster gmaster -cart %ROM% + gmaster + gmaster + + + gx4000 + Amstrad GX4000 + %ROMPATH%/gx4000 + .bin .BIN .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%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/gx4000 gx4000 -cart %ROM% + gx4000 + gx4000 + + + intellivision + Mattel Electronics Intellivision + %ROMPATH%/intellivision + .bin .BIN .int .INT .rom .ROM .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/freeintv_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "intv -rompath \"%GAMEDIRRAW%;%ROMPATH%/intellivision\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/intellivision intv -cart %ROM% + intellivision + intellivision + + + j2me + Java 2 Micro Edition (J2ME) + %ROMPATH%/j2me + .jar .JAR .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/squirreljme_libretro.so %ROM% + android + j2me + + + kodi + Kodi Home Theatre Software + %ROMPATH%/kodi + .desktop .sh + %RUNINBACKGROUND% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + pcwindows + kodi + + + laserdisc + LaserDisc Games + %ROMPATH%/laserdisc + .daphne .ogv .OGV .singe .7z .7Z .zip .ZIP + %EMULATOR_HYPSEUS-SINGE% %BASENAME% vldp -framefile %GAMEDIR%/%BASENAME%.txt %INJECT%=%BASENAME%.commands + %EMULATOR_HYPSEUS-SINGE% singe vldp -framefile %GAMEDIR%/%BASENAME%.txt -script %GAMEDIR%/%BASENAME%.singe %INJECT%=%BASENAME%.commands + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/laserdisc %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dirksimple_libretro.so %ROM% + daphne, arcade + laserdisc + + + lcdgames + LCD Handheld Games + %ROMPATH%/lcdgames + .mgw .MGW .7z .7Z .zip .ZIP + %STARTDIR%=~/.mame %EMULATOR_MAME% -artpath %ROMPATH%/lcdgames/artwork -rompath %GAMEDIR%\;%ROMPATH%/lcdgames %BASENAME% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/lcdgames %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gw_libretro.so %ROM% + lcdgames, gameandwatch + lcdgames + + + lowresnx + LowRes NX Fantasy Console + %ROMPATH%/lowresnx + .nx .NX + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/lowresnx_libretro.so %ROM% + lowresnx + lowresnx + + + lutris + Lutris Open Gaming Platform + %ROMPATH%/lutris + .desktop .sh + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + pc, pcwindows + lutris + + + lutro + Lutro Game Engine + %ROMPATH%/lutro + .lua .LUA .lutro .LUTRO .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/lutro_libretro.so %ROM% + lutro + lutro + + + macintosh + Apple Macintosh + %ROMPATH%/macintosh + .dsk .DSK .game .GAME + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/macintosh macse -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/macintosh macse -flop1 %GAMEDIR%/boot.dsk -flop2 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/macintosh macplus -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/macintosh macplus -flop1 %GAMEDIR%/boot.dsk -flop2 %ROM% + %EMULATOR_BASILISKII% --nogui true + %EMULATOR_SHEEPSHAVER% --nogui true + macintosh + macintosh + + + mame + Multiple Arcade Machine Emulator + %ROMPATH%/mame + .cmd .CMD .desktop .sh .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2010_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2003_plus_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame2000_libretro.so %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/mame %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM% + %EMULATOR_FINALBURN-NEO% -fullscreen %BASENAME% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbalpha2012_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/flycast_libretro.so %ROM% + %EMULATOR_FLYCAST% %ROM% + %EMULATOR_FLYCAST-DOJO% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/kronos_libretro.so %ROM% + %STARTDIR%=%GAMEDIR% %EMULATOR_SUPERMODEL% -log-output=%GAMEDIR%/Config/Supermodel.log %INJECT%=%BASENAME%.commands %ROM% + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + arcade + mame + + + mame-advmame + AdvanceMAME + %ROMPATH%/mame-advmame + .7z .7Z .zip .ZIP + %STARTDIR%=~/.advance %EMULATOR_ADVANCEMAME% %BASENAME% + arcade + mame-advmame + + + mastersystem + Sega Master System + %ROMPATH%/mastersystem + .68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/smsplus_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearsystem_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module sms %ROM% + %EMULATOR_ARES% --fullscreen --system "Master System" %ROM% + mastersystem + mastersystem + + + megacd + Sega Mega-CD + %ROMPATH%/megacd + .68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM% + %EMULATOR_ARES% --fullscreen --system "Mega CD" %ROM% + segacd + megacd + + + megacdjp + Sega Mega-CD + %ROMPATH%/megacdjp + .68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM% + %EMULATOR_ARES% --fullscreen --system "Mega CD" %ROM% + segacd + megacdjp + + + megadrive + Sega Mega Drive + %ROMPATH%/megadrive + .32x .32X .68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/blastem_libretro.so %ROM% + %EMULATOR_BLASTEM% -m gen %ROM% + %EMULATOR_MEDNAFEN% -force_module md %ROM% + %EMULATOR_ARES% --fullscreen --system "Mega Drive" %ROM% + megadrive + megadrive + + + megadrivejp + Sega Mega Drive + %ROMPATH%/megadrivejp + .32x .32X .68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/blastem_libretro.so %ROM% + %EMULATOR_BLASTEM% -m gen %ROM% + %EMULATOR_MEDNAFEN% -force_module md %ROM% + %EMULATOR_ARES% --fullscreen --system "Mega Drive" %ROM% + megadrive + megadrivejp + + + megaduck + Creatronic Mega Duck + %ROMPATH%/megaduck + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/sameduck_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "megaduck -rompath \"%GAMEDIRRAW%;%ROMPATH%/megaduck\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/megaduck megaduck -cart %ROM% + megaduck + megaduck + + + mess + Multi Emulator Super System + %ROMPATH%/mess + .chd .CHD .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mess2015_libretro.so %ROM% + mess + mess + + + model2 + Sega Model 2 + %ROMPATH%/model2 + .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/model2 %BASENAME% + %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_M2EMULATOR-WINDOWS% %BASENAME% + %STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_M2EMULATOR-WINDOWS% %BASENAME% + arcade + model2 + + + model3 + Sega Model 3 + %ROMPATH%/model3 + .7z .7Z .zip .ZIP + %STARTDIR%=%GAMEDIR% %EMULATOR_SUPERMODEL% -log-output=%GAMEDIR%/Config/Supermodel.log %INJECT%=%BASENAME%.commands %ROM% + arcade + model3 + + + moto + Thomson MO/TO Series + %ROMPATH%/moto + .fd .FD .k7 .K7 .m5 .M5 .m7 .M7 .rom .ROM .sap .SAP .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/theodore_libretro.so %ROM% + moto + moto + + + msx + MSX + %ROMPATH%/msx + .cas .CAS .col .COL .di1 .DI1 .di2 .DI2 .dmk .DMK .dsk .DSK .fd1 .FD1 .fd2 .FD2 .m3u .M3U .mx1 .MX1 .mx2 .MX2 .ogv .OGV .ri .RI .rom .ROM .sc .SC .sg .SG .wav .WAV .xsa .XSA .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fmsx_libretro.so %ROM% + %EMULATOR_OPENMSX% -machine National_CF-3300 %INJECT%=%BASENAME%.commands %ROM% + %EMULATOR_OPENMSX% %INJECT%=%BASENAME%.commands %ROM% + %EMULATOR_ARES% --fullscreen --system "MSX" %ROM% + msx + msx + + + msx1 + MSX1 + %ROMPATH%/msx1 + .cas .CAS .col .COL .di1 .DI1 .di2 .DI2 .dmk .DMK .dsk .DSK .fd1 .FD1 .fd2 .FD2 .m3u .M3U .mx1 .MX1 .mx2 .MX2 .ogv .OGV .ri .RI .rom .ROM .sc .SC .sg .SG .wav .WAV .xsa .XSA .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fmsx_libretro.so %ROM% + %EMULATOR_OPENMSX% -machine National_CF-3300 %INJECT%=%BASENAME%.commands %ROM% + %EMULATOR_OPENMSX% %INJECT%=%BASENAME%.commands %ROM% + %EMULATOR_ARES% --fullscreen --system "MSX" %ROM% + msx + msx1 + + + msx2 + MSX2 + %ROMPATH%/msx2 + .cas .CAS .col .COL .di1 .DI1 .di2 .DI2 .dmk .DMK .dsk .DSK .fd1 .FD1 .fd2 .FD2 .m3u .M3U .mx1 .MX1 .mx2 .MX2 .ogv .OGV .ri .RI .rom .ROM .sc .SC .sg .SG .wav .WAV .xsa .XSA .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fmsx_libretro.so %ROM% + %EMULATOR_OPENMSX% -machine Panasonic_FS-A1WSX %INJECT%=%BASENAME%.commands %ROM% + %EMULATOR_OPENMSX% %INJECT%=%BASENAME%.commands %ROM% + %EMULATOR_ARES% --fullscreen --system "MSX2" %ROM% + msx2 + msx2 + + + msxturbor + MSX Turbo R + %ROMPATH%/msxturbor + .cas .CAS .col .COL .di1 .DI1 .di2 .DI2 .dmk .DMK .dsk .DSK .fd1 .FD1 .fd2 .FD2 .m3u .M3U .mx1 .MX1 .mx2 .MX2 .ogv .OGV .ri .RI .rom .ROM .sc .SC .sg .SG .wav .WAV .xsa .XSA .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.so %ROM% + %EMULATOR_OPENMSX% -machine Panasonic_FS-A1GT %INJECT%=%BASENAME%.commands %ROM% + %EMULATOR_OPENMSX% %INJECT%=%BASENAME%.commands %ROM% + msxturbor + msxturbor + + + mugen + M.U.G.E.N Game Engine + %ROMPATH%/mugen + .mugen + %STARTDIR%=%GAMEDIR% %EMULATOR_OS-SHELL% -c "%ROM%" + mugen + mugen + + + multivision + Othello Multivision + %ROMPATH%/multivision + .bin .BIN .gg .GG .rom .ROM .sg .SG .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearsystem_libretro.so %ROM% + sg-1000 + multivision + + + n3ds + Nintendo 3DS + %ROMPATH%/n3ds + .3ds .3DS .3dsx .3DSX .app .APP .axf .AXF .cci .CCI .cxi .CXI .elf .ELF .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/citra_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/citra2018_libretro.so %ROM% + %EMULATOR_CITRA% %ROM% + n3ds + n3ds + + + n64 + Nintendo 64 + %ROMPATH%/n64 + .bin .BIN .d64 .D64 .n64 .N64 .ndd .NDD .u1 .U1 .v64 .V64 .z64 .Z64 .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mupen64plus_next_libretro.so %ROM% + %EMULATOR_MUPEN64PLUS% --nogui %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/parallel_n64_libretro.so %ROM% + %EMULATOR_SIMPLE64% --nogui %ROM% + %EMULATOR_ROSALIES-MUPEN-GUI% --nogui -q %ROM% + %EMULATOR_ARES% --fullscreen --system "Nintendo 64" %ROM% + n64 + n64 + + + n64dd + Nintendo 64DD + %ROMPATH%/n64dd + .bin .BIN .d64 .D64 .n64 .N64 .ndd .NDD .u1 .U1 .v64 .V64 .z64 .Z64 .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/parallel_n64_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mupen64plus_next_libretro.so %ROM% + %EMULATOR_ROSALIES-MUPEN-GUI% --nogui -q %ROM% + %EMULATOR_ARES% --fullscreen --system "Nintendo 64DD" %ROM% + n64 + n64dd + + + naomi + Sega NAOMI + %ROMPATH%/naomi + .bin .BIN .dat .DAT .elf .ELF .lst .LST .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/flycast_libretro.so %ROM% + %EMULATOR_FLYCAST% %ROM% + %EMULATOR_FLYCAST-DOJO% %ROM% + arcade + naomi + + + naomi2 + Sega NAOMI 2 + %ROMPATH%/naomi2 + .bin .BIN .dat .DAT .elf .ELF .lst .LST .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/flycast_libretro.so %ROM% + %EMULATOR_FLYCAST% %ROM% + %EMULATOR_FLYCAST-DOJO% %ROM% + arcade + naomi2 + + + naomigd + Sega NAOMI GD-ROM + %ROMPATH%/naomigd + .bin .BIN .dat .DAT .elf .ELF .lst .LST .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/flycast_libretro.so %ROM% + %EMULATOR_FLYCAST% %ROM% + %EMULATOR_FLYCAST-DOJO% %ROM% + arcade + naomigd + + + nds + Nintendo DS + %ROMPATH%/nds + .app .APP .bin .BIN .nds .NDS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/desmume_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/desmume2015_libretro.so %ROM% + %EMULATOR_DESMUME% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/melonds_libretro.so %ROM% + %EMULATOR_MELONDS% %ROM% + %EMULATOR_SKYEMU% %ROM% + nds + nds + + + neogeo + SNK Neo Geo + %ROMPATH%/neogeo + .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fbneo_libretro.so %ROM% + %EMULATOR_FINALBURN-NEO% -fullscreen %BASENAME% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/neogeo %BASENAME% + neogeo + neogeo + + + neogeocd + SNK Neo Geo CD + %ROMPATH%/neogeocd + .chd .CHD .cue .CUE + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/neocd_libretro.so %ROM% + %EMULATOR_RETROARCH% --subsystem neocd -L %CORE_RETROARCH%/fbneo_libretro.so %ROM% + %EMULATOR_FINALBURN-NEO% neocdz -fullscreen -cd %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/neogeocd neocdz -cdrm %ROM% + neogeocd + neogeocd + + + neogeocdjp + SNK Neo Geo CD + %ROMPATH%/neogeocdjp + .chd .CHD .cue .CUE + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/neocd_libretro.so %ROM% + %EMULATOR_RETROARCH% --subsystem neocd -L %CORE_RETROARCH%/fbneo_libretro.so %ROM% + %EMULATOR_FINALBURN-NEO% neocdz -fullscreen -cd %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/neogeocdjp neocdz -cdrm %ROM% + neogeocd + neogeocdjp + + + nes + Nintendo Entertainment System + %ROMPATH%/nes + .3dsen .3DSEN .fds .FDS .nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen_libretro.so %ROM% + %EMULATOR_MESEN% --fullscreen %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nestopia_libretro.so %ROM% + %EMULATOR_NESTOPIA-UE% --fullscreen %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fceumm_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/quicknes_libretro.so %ROM% + %EMULATOR_PUNES% -u yes %ROM% + %EMULATOR_MEDNAFEN% -force_module nes %ROM% + %EMULATOR_ARES% --fullscreen --system "Famicom" %ROM% + %EMULATOR_ARES% --fullscreen --system "Famicom Disk System" %ROM% + %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_3DSEN-WINDOWS% -id=%INJECT%=%BASENAME%.3dsen + %STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_3DSEN-WINDOWS% -id=%INJECT%=%BASENAME%.3dsen + nes + nes + + + ngage + Nokia N-Gage + %ROMPATH%/ngage + .ngage .zip .ZIP + %EMULATOR_EKA2L1% --fullscreen --device RH-29 --mount %ROM% --run "%BASENAME%" + %EMULATOR_EKA2L1% --fullscreen --device RH-29 --run "%BASENAME%" + %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_EKA2L1-WINDOWS% --fullscreen --device RH-29 --mount %ROM% --run "%BASENAME%" + %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_EKA2L1-WINDOWS% --fullscreen --device RH-29 --run "%BASENAME%" + ngage + ngage + + + ngp + SNK Neo Geo Pocket + %ROMPATH%/ngp + .ngc .NGC .ngp .NGP .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_ngp_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/race_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module ngp %ROM% + %EMULATOR_ARES% --fullscreen --system "Neo Geo Pocket" %ROM% + ngp + ngp + + + ngpc + SNK Neo Geo Pocket Color + %ROMPATH%/ngpc + .ngc .NGC .ngp .NGP .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_ngp_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/race_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module ngp %ROM% + %EMULATOR_ARES% --fullscreen --system "Neo Geo Pocket Color" %ROM% + ngpc + ngpc + + + odyssey2 + Magnavox Odyssey 2 + %ROMPATH%/odyssey2 + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/o2em_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "odyssey2 -rompath \"%GAMEDIRRAW%;%ROMPATH%/odyssey2\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/odyssey2 odyssey2 -cart %ROM% + odyssey2 + odyssey2 + + + openbor + OpenBOR Game Engine + %ROMPATH%/openbor + .AppImage + %STARTDIR%=%GAMEDIR% %EMULATOR_OS-SHELL% -c "%ROM%" + openbor + openbor + + + oric + Tangerine Computer Systems Oric + %ROMPATH%/oric + .dsk .DSK .ort .ORT .tap .TAP .wav .WAV + %STARTDIR%=%EMUDIR% %EMULATOR_ORICUTRON% %ROM% + oric + oric + + + palm + Palm OS + %ROMPATH%/palm + .img .IMG .pqa .PQA .prc .PRC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mu_libretro.so %ROM% + palm + palm + + + pc + IBM PC + %ROMPATH%/pc + .bat .BAT .com .COM .conf .CONF .cue .CUE .dosz .DOSZ .exe .EXE .iso .ISO .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dosbox_pure_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dosbox_core_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dosbox_svn_libretro.so %ROM% + %STARTDIR%=%GAMEDIR% %EMULATOR_DOSBOX-X% %ROM% + %STARTDIR%=%GAMEDIR% %EMULATOR_DOSBOX-STAGING% %ROM% + pc + pc + + + pc88 + NEC PC-8800 Series + %ROMPATH%/pc88 + .88d .88D .cmt .CMT .d88 .D88 .m3u .M3U .t88 .T88 .u88 .U88 + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/quasi88_libretro.so %ROM% + %EMULATOR_QUASI88% -romdir ~/.quasi88 %ROM% + pc88 + pc88 + + + pc98 + NEC PC-9800 Series + %ROMPATH%/pc98 + .2hd .2HD .88d .88D .98d .98D .d88 .D88 .d98 .D98 .cmd .CMD .dup .DUP .fdd .FDD .fdi .FDI .hdd .HDD .hdi .HDI .hdm .HDM .hdn .HDN .m3u .M3U .nhd .NHD .tfd .TFD .thd .THD .xdf .XDF .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/np2kai_libretro.so %ROM% + %STARTDIR%=%GAMEDIR% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nekop2_libretro.so %ROM% + pc98 + pc98 + + + pcarcade + PC Arcade Systems + %ROMPATH%/pcarcade + .AppImage .desktop .exe .EXE .sh + %STARTDIR%=%GAMEDIR% %EMULATOR_WINE% %ROM% + %STARTDIR%=%GAMEDIR% %EMULATOR_PROTON% %ROM% + %EMULATOR_OS-SHELL% -c "%ROM%" + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + arcade + pcarcade + + + pcengine + NEC PC Engine + %ROMPATH%/pcengine + .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module pce %ROM% + %EMULATOR_MESEN% --fullscreen %ROM% + %EMULATOR_ARES% --fullscreen --system "PC Engine" %ROM% + pcengine + pcengine + + + pcenginecd + NEC PC Engine CD + %ROMPATH%/pcenginecd + .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module pce %ROM% + %EMULATOR_MESEN% --fullscreen %ROM% + %EMULATOR_ARES% --fullscreen --system "PC Engine CD" %ROM% + pcenginecd + pcenginecd + + + pcfx + NEC PC-FX + %ROMPATH%/pcfx + .ccd .CCD .chd .CHD .cue CUE .m3u .M3U .toc .TOC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pcfx_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module pcfx %ROM% + pcfx + pcfx + + + pico8 + PICO-8 Fantasy Console + %ROMPATH%/pico8 + .p8 .P8 .png .PNG + %EMULATOR_PICO-8% -root_path %GAMEDIR% -run %ROM% + %EMULATOR_PICO-8% -root_path %GAMEDIR% -splore + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/retro8_libretro.so %ROM% + pico8 + pico8 + + + plus4 + Commodore Plus/4 + %ROMPATH%/plus4 + .bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_xplus4_libretro.so %ROM% + %EMULATOR_VICE-XPLUS4% %ROM% + plus4 + plus4 + + + pokemini + Nintendo Pokémon Mini + %ROMPATH%/pokemini + .min .MIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pokemini_libretro.so %ROM% + pokemini + pokemini + + + ports + Ports + %ROMPATH%/ports + .AppImage .desktop .exe .EXE .game .GAME .phd .PHD .psx .PSX .sh + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %EMULATOR_OS-SHELL% -c "%ROM%" + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/ecwolf_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nxengine_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/openlara_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/superbroswar_libretro.so %ROM% + pc, pcwindows + ports + + + ps2 + Sony PlayStation 2 + %ROMPATH%/ps2 + .arcadedef .bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM% + %EMULATOR_PCSX2% -batch %ROM% + %EMULATOR_PCSX2-LEGACY% --nogui %ROM% + %EMULATOR_PLAY!% --disc %ROM% + ps2 + ps2 + + + ps3 + Sony PlayStation 3 + %ROMPATH%/ps3 + .desktop .ps3 .PS3 .ps3dir .PS3DIR + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %EMULATOR_RPCS3% --no-gui %ROM% + ps3 + ps3 + + + ps4 + Sony PlayStation 4 + %ROMPATH%/ps4 + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% + ps4 + ps4 + + + psp + Sony PlayStation Portable + %ROMPATH%/psp + .chd .CHD .cso .CSO .elf .ELF .iso .ISO .pbp .PBP .prx .PRX .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/ppsspp_libretro.so %ROM% + %EMULATOR_PPSSPP% %ROM% + psp + psp + + + psvita + Sony PlayStation Vita + %ROMPATH%/psvita + .psvita + %EMULATOR_VITA3K% -r %INJECT%=%BASENAME%.psvita + psvita + psvita + + + psx + Sony PlayStation + %ROMPATH%/psx + .bin .BIN .cbn .CBN .ccd .CCD .chd .CHD .cue .CUE .ecm .ECM .exe .EXE .img .IMG .iso .ISO .m3u .M3U .mdf .MDF .mds .MDS .minipsf .MINIPSF .pbp .PBP .psexe .PSEXE .psf .PSF .toc .TOC .z .Z .znx .ZNX .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_psx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_psx_hw_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx_rearmed_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/swanstation_libretro.so %ROM% + %EMULATOR_DUCKSTATION% -batch %ROM% + %EMULATOR_MEDNAFEN% -force_module psx %ROM% + psx + psx + + + pv1000 + Casio PV-1000 + %ROMPATH%/pv1000 + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "pv1000 -rompath \"%GAMEDIRRAW%;%ROMPATH%/pv1000\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/pv1000 pv1000 -cart %ROM% + pv1000 + pv1000 + + + quake + Quake + %ROMPATH%/quake + .desktop .pak .PAK .pk3 .PK3 .sh + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/tyrquake_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vitaquake2_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vitaquake2-rogue_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vitaquake2-xatrix_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vitaquake2-zaero_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vitaquake3_libretro.so %ROM% + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + pc, pcwindows + quake + + + samcoupe + MGT SAM Coupé + %ROMPATH%/samcoupe + .dsk .DSK .mgt .MGT .sad .SAD .sbt .SBT .7z .7Z .zip .ZIP + %EMULATOR_SIMCOUPE% %ROM% + samcoupe + samcoupe + + + satellaview + Nintendo Satellaview + %ROMPATH%/satellaview + .bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .swc .SWC .st .ST .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.so %ROM% + %EMULATOR_SNES9X% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_hd_beta_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.so %ROM% + %EMULATOR_BSNES% --fullscreen %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM% + %EMULATOR_MESEN% --fullscreen %ROM% + %EMULATOR_ARES% --fullscreen --system "Super Famicom" %ROM% + satellaview + satellaview + + + saturn + Sega Saturn + %ROMPATH%/saturn + .bin .BIN .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .m3u .M3U .mds .MDS .toc .TOC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_saturn_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/kronos_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/yabasanshiro_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/yabause_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module ss %ROM% + saturn + saturn + + + saturnjp + Sega Saturn + %ROMPATH%/saturnjp + .bin .BIN .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .m3u .M3U .mds .MDS .toc .TOC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_saturn_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/kronos_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/yabasanshiro_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/yabause_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module ss %ROM% + saturn + saturnjp + + + scummvm + ScummVM Game Engine + %ROMPATH%/scummvm + .scummvm .SCUMMVM .svm .SVM + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/scummvm_libretro.so %ROM% + %STARTDIR%=%GAMEDIR% %EMULATOR_SCUMMVM% %BASENAME% + scummvm + scummvm + + + scv + Epoch Super Cassette Vision + %ROMPATH%/scv + .0 .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "scv -rompath \"%GAMEDIRRAW%;%ROMPATH%/scv\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/scv scv -cart %ROM% + scv + scv + + + sega32x + Sega Mega Drive 32X + %ROMPATH%/sega32x + .32x .32X .68k .68K .bin .BIN .cue .CUE .gen .GEN .iso .ISO .md .MD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM% + %EMULATOR_ARES% --fullscreen --system "Mega 32X" %ROM% + sega32x + sega32x + + + sega32xjp + Sega Super 32X + %ROMPATH%/sega32xjp + .32x .32X .68k .68K .bin .BIN .cue .CUE .gen .GEN .iso .ISO .md .MD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM% + %EMULATOR_ARES% --fullscreen --system "Mega 32X" %ROM% + sega32x + sega32xjp + + + sega32xna + Sega Genesis 32X + %ROMPATH%/sega32xna + .32x .32X .68k .68K .bin .BIN .cue .CUE .gen .GEN .iso .ISO .md .MD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM% + %EMULATOR_ARES% --fullscreen --system "Mega 32X" %ROM% + sega32x + sega32xna + + + segacd + Sega CD + %ROMPATH%/segacd + .68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/picodrive_libretro.so %ROM% + %EMULATOR_ARES% --fullscreen --system "Mega CD" %ROM% + segacd + segacd + + + sfc + Nintendo SFC (Super Famicom) + %ROMPATH%/sfc + .bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.so %ROM% + %EMULATOR_SNES9X% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_hd_beta_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.so %ROM% + %EMULATOR_BSNES% --fullscreen %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_supafaust_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM% + %EMULATOR_MESEN% --fullscreen %ROM% + %EMULATOR_MEDNAFEN% -force_module snes %ROM% + %EMULATOR_ARES% --fullscreen --system "Super Famicom" %ROM% + snes + sfc + + + sg-1000 + Sega SG-1000 + %ROMPATH%/sg-1000 + .68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .ri .RI .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/genesis_plus_gx_wide_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gearsystem_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.so %ROM% + %EMULATOR_ARES% --fullscreen --system "SG-1000" %ROM% + sg-1000 + sg-1000 + + + sgb + Nintendo Super Game Boy + %ROMPATH%/sgb + .gb .GB .gbc .GBC .sgb .SGB .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM% + %EMULATOR_MESEN% --fullscreen %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/sameboy_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mgba_libretro.so %ROM% + %EMULATOR_MGBA% -f %ROM% + sgb + sgb + + + snes + Nintendo SNES (Super Nintendo) + %ROMPATH%/snes + .bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.so %ROM% + %EMULATOR_SNES9X% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_hd_beta_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.so %ROM% + %EMULATOR_BSNES% --fullscreen %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_supafaust_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM% + %EMULATOR_MESEN% --fullscreen %ROM% + %EMULATOR_MEDNAFEN% -force_module snes %ROM% + %EMULATOR_ARES% --fullscreen --system "Super Famicom" %ROM% + snes + snes + + + snesna + Nintendo SNES (Super Nintendo) + %ROMPATH%/snesna + .bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.so %ROM% + %EMULATOR_SNES9X% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_hd_beta_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.so %ROM% + %EMULATOR_BSNES% --fullscreen %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_supafaust_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen-s_libretro.so %ROM% + %EMULATOR_MESEN% --fullscreen %ROM% + %EMULATOR_MEDNAFEN% -force_module snes %ROM% + %EMULATOR_ARES% --fullscreen --system "Super Famicom" %ROM% + snes + snesna + + + solarus + Solarus Game Engine + %ROMPATH%/solarus + .solarus + %EMULATOR_SOLARUS% %ROM% + solarus + solarus + + + spectravideo + Spectravideo + %ROMPATH%/spectravideo + .cas .CAS .col .COL .dsk .DSK .m3u .M3U .mx1 .MX1 .mx2 .MX2 .ri .RI .rom .ROM .sc .SC .sg .SG .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bluemsx_libretro.so %ROM% + spectravideo + spectravideo + + + steam + Valve Steam + %ROMPATH%/steam + .desktop .sh + %RUNINBACKGROUND% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + steam + steam + + + stv + Sega Titan Video Game System + %ROMPATH%/stv + .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/kronos_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/stv %BASENAME% + %EMULATOR_MEDNAFEN% -force_module ss %ROM% + arcade + stv + + + sufami + Bandai SuFami Turbo + %ROMPATH%/sufami + .bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .st .ST .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/snes9x2010_libretro.so %ROM% + %EMULATOR_SNES9X% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_hd_beta_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/bsnes_mercury_accuracy_libretro.so %ROM% + %EMULATOR_BSNES% --fullscreen %ROM% + %EMULATOR_ARES% --fullscreen --system "Super Famicom" %ROM% + sufami + sufami + + + supergrafx + NEC SuperGrafx + %ROMPATH%/supergrafx + .ccd .CCD .chd .CHD .cue .CUE .pce .PCE .sgx .SGX .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_supergrafx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM% + %EMULATOR_ARES% --fullscreen --system "SuperGrafx" %ROM% + supergrafx + supergrafx + + + supervision + Watara Supervision + %ROMPATH%/supervision + .bin .BIN .sv .SV .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/potator_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "svision -rompath \"%GAMEDIRRAW%;%ROMPATH%/supervision\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/supervision svision -cart %ROM% + supervision + supervision + + + supracan + Funtech Super A'Can + %ROMPATH%/supracan + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "supracan -rompath \"%GAMEDIRRAW%;%ROMPATH%/supracan\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/supracan supracan -cart %ROM% + supracan + supracan + + + switch + Nintendo Switch + %ROMPATH%/switch + .nca .NCA .nro .NRO .nso .NSO .nsp .NSP .xci .XCI + %INJECT%=%BASENAME%.esprefix %EMULATOR_YUZU% -f -g %ROM% + %EMULATOR_RYUJINX% %ROM% + switch + switch + + + symbian + Symbian + %ROMPATH%/symbian + .sis .SIS .sisx .SISX .symbian + %EMULATOR_EKA2L1% --fullscreen --device RH-29 --run "%BASENAME%" + %EMULATOR_EKA2L1% --fullscreen --device RM-84 --run "%BASENAME%" + %EMULATOR_EKA2L1% --fullscreen --device RM-507 --run "%BASENAME%" + %EMULATOR_EKA2L1% --fullscreen --device %INJECT%=%BASENAME%.device --run "%BASENAME%" + ngage + symbian + + + tanodragon + Tano Dragon + %ROMPATH%/tanodragon + .cas .CAS .ccc .CCC .dsk .DSK .rom .ROM + %EMULATOR_XROAR% -fs -default-machine tano %ROM% + dragon32 + tanodragon + + + tg16 + NEC TurboGrafx-16 + %ROMPATH%/tg16 + .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module pce %ROM% + %EMULATOR_MESEN% --fullscreen %ROM% + %EMULATOR_ARES% --fullscreen --system "PC Engine" %ROM% + pcengine + tg16 + + + tg-cd + NEC TurboGrafx-CD + %ROMPATH%/tg-cd + .ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_pce_fast_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module pce %ROM% + %EMULATOR_MESEN% --fullscreen %ROM% + %EMULATOR_ARES% --fullscreen --system "PC Engine CD" %ROM% + pcenginecd + tg-cd + + + ti99 + Texas Instruments TI-99 + %ROMPATH%/ti99 + .rpk .RPK .7z .7Z .zip .ZIP + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/ti99 ti99_4a -ioport peb -ioport:peb:slot3 speech -cart %BASENAME% + ti99 + ti99 + + + tic80 + TIC-80 Fantasy Computer + %ROMPATH%/tic80 + .tic .TIC + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/tic80_libretro.so %ROM% + %EMULATOR_TIC-80% %ROM% --fullscreen + tic80 + tic80 + + + to8 + Thomson TO8 + %ROMPATH%/to8 + .fd .FD .k7 .K7 .m5 .M5 .m7 .M7 .rom .ROM .sap .SAP .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/theodore_libretro.so %ROM% + moto + to8 + + + triforce + Namco-Sega-Nintendo Triforce + %ROMPATH%/triforce + .ciso .CISO .dff .DFF .dol .DOL .elf .ELF .gcm .GCM .gcz .GCZ .iso .ISO .json .JSON .m3u .M3U .rvz .RVZ .tgc .TGC .wad .WAD .wbfs .WBFS .wia .WIA .7z .7Z .zip .ZIP + %INJECT%=%BASENAME%.esprefix %EMULATOR_TRIFORCE% -b -e %ROM% + arcade + triforce + + + trs-80 + Tandy TRS-80 + %ROMPATH%/trs-80 + .cmd .CMD .dsk .DSK + %STARTDIR%=%GAMEDIR% %EMULATOR_SDL2TRS% -rom %ROMPATH%/trs-80/level2.rom -disk0 %ROMPATH%/trs-80/boot.dsk -disk1 %ROM% + %STARTDIR%=%GAMEDIR% %EMULATOR_SDL2TRS% -rom %ROMPATH%/trs-80/level2.rom -disk0 %ROM% + %STARTDIR%=%GAMEDIR% %EMULATOR_SDL2TRS% -rom %ROMPATH%/trs-80/level2.rom %ROM% + trs-80 + trs-80 + + + type-x + Taito Type X + %ROMPATH%/type-x + .AppImage .desktop .exe .EXE .sh + %STARTDIR%=%GAMEDIR% %EMULATOR_WINE% %ROM% + %STARTDIR%=%GAMEDIR% %EMULATOR_PROTON% %ROM% + %EMULATOR_OS-SHELL% -c "%ROM%" + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + arcade + type-x + + + uzebox + Uzebox Open Source Console + %ROMPATH%/uzebox + .uze .UZE .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/uzem_libretro.so %ROM% + uzebox + uzebox + + + vectrex + GCE Vectrex + %ROMPATH%/vectrex + .bin .BIN .gam .GAM .vc .VC .vec .VEC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vecx_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "vectrex -rompath \"%GAMEDIRRAW%;%ROMPATH%/vectrex\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/vectrex vectrex -cart %ROM% + vectrex + vectrex + + + vic20 + Commodore VIC-20 + %ROMPATH%/vic20 + .bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vice_xvic_libretro.so %ROM% + %EMULATOR_VICE-XVIC% %ROM% + vic20 + vic20 + + + videopac + Philips Videopac G7000 + %ROMPATH%/videopac + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/o2em_libretro.so %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "videopac -rompath \"%GAMEDIRRAW%;%ROMPATH%/videopac\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/videopac videopac -cart %ROM% + odyssey2 + videopac + + + virtualboy + Nintendo Virtual Boy + %ROMPATH%/virtualboy + .bin .BIN .vb .VB .vboy .VBOY .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_vb_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module vb %ROM% + virtualboy + virtualboy + + + vpinball + Visual Pinball + %ROMPATH%/vpinball + .vpt .VPT .vpx .VPX + %EMULATOR_VISUAL-PINBALL% -play %ROM% + vpinball + vpinball + + + vsmile + VTech V.Smile + %ROMPATH%/vsmile + .bin .BIN .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so "vsmile -rompath \"%GAMEDIRRAW%;%ROMPATH%/vsmile\" -cart \"%ROMRAW%\"" + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/vsmile vsmile -cart %ROM% + vsmile + vsmile + + + wasm4 + WASM-4 Fantasy Console + %ROMPATH%/wasm4 + .wasm .WASM + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/wasm4_libretro.so %ROM% + wasm4 + wasm4 + + + wii + Nintendo Wii + %ROMPATH%/wii + .ciso .CISO .dff .DFF .dol .DOL .elf .ELF .gcm .GCM .gcz .GCZ .iso .ISO .json .JSON .m3u .M3U .rvz .RVZ .tgc .TGC .wad .WAD .wbfs .WBFS .wia .WIA .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dolphin_libretro.so %ROM% + %INJECT%=%BASENAME%.esprefix %EMULATOR_DOLPHIN% -b -e %ROM% + %INJECT%=%BASENAME%.esprefix %EMULATOR_PRIMEHACK% -b -e %ROM% + wii + wii + + + wiiu + Nintendo Wii U + %ROMPATH%/wiiu + .rpx .RPX .wua .WUA .wud .WUD .wux .WUX + %EMULATOR_CEMU% -g %ROM% + wiiu + wiiu + + + windows + Microsoft Windows + %ROMPATH%/windows + .AppImage .desktop .sh + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %RUNINBACKGROUND% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %EMULATOR_OS-SHELL% -c "%ROM%" + %RUNINBACKGROUND% %EMULATOR_OS-SHELL% -c "%ROM%" + pcwindows + windows + + + windows3x + Microsoft Windows 3.x + %ROMPATH%/windows3x + .AppImage .bat .BAT .desktop .dosz .DOSZ .sh .7z .7Z .zip .ZIP + %STARTDIR%=%GAMEDIR% %EMULATOR_DOSBOX-X% -defaultdir %GAMEDIR% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dosbox_pure_libretro.so %ROM% + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %RUNINBACKGROUND% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %EMULATOR_OS-SHELL% -c "%ROM%" + %RUNINBACKGROUND% %EMULATOR_OS-SHELL% -c "%ROM%" + windows3x + windows3x + + + windows9x + Microsoft Windows 9x + %ROMPATH%/windows9x + .AppImage .bat .BAT .desktop .dosz .DOSZ .sh .7z .7Z .zip .ZIP + %STARTDIR%=%GAMEDIR% %EMULATOR_DOSBOX-X% -defaultdir %GAMEDIR% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dosbox_pure_libretro.so %ROM% + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %RUNINBACKGROUND% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + %EMULATOR_OS-SHELL% -c "%ROM%" + %RUNINBACKGROUND% %EMULATOR_OS-SHELL% -c "%ROM%" + pcwindows + windows9x + + + wonderswan + Bandai WonderSwan + %ROMPATH%/wonderswan + .pc2 .PC2 .ws .WS .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_wswan_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module wswan %ROM% + %EMULATOR_ARES% --fullscreen --system "WonderSwan" %ROM% + %EMULATOR_ARES% --fullscreen --system "Pocket Challenge V2" %ROM% + wonderswan + wonderswan + + + wonderswancolor + Bandai WonderSwan Color + %ROMPATH%/wonderswancolor + .pc2 .PC2 .ws .WS .wsc .WSC .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mednafen_wswan_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module wswan %ROM% + %EMULATOR_ARES% --fullscreen --system "WonderSwan Color" %ROM% + wonderswancolor + wonderswancolor + + + x1 + Sharp X1 + %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 + %STARTDIR%=%GAMEDIR% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/x1_libretro.so %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/x1 x1 -flop1 %ROM% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/x1 x1 -cass1 %ROM% + x1 + x1 + + + x68000 + Sharp X68000 + %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% + %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/x68000 x68000 -flop1 %ROM% + x68000 + x68000 + + + xbox + Microsoft Xbox + %ROMPATH%/xbox + .iso .ISO + %INJECT%=%BASENAME%.esprefix %EMULATOR_XEMU% -dvd_path %ROM% + xbox + xbox + + + xbox360 + Microsoft Xbox 360 + %ROMPATH%/xbox360 + . .desktop .iso .ISO .sh .xex .XEX + %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_XENIA-WINDOWS% %ROM% + %STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_XENIA-WINDOWS% %ROM% + %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + xbox360 + xbox360 + + + zmachine + 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_GARGOYLE% %ROM% + zmachine + zmachine + + + zx81 + Sinclair ZX81 + %ROMPATH%/zx81 + .p .P .tzx .TZX .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/81_libretro.so %ROM% + zx81 + zx81 + + + zxnext + Sinclair ZX Spectrum Next + %ROMPATH%/zxnext + .nex .NEX .sna .SNA + %STARTDIR%=%GAMEDIR% MONO_IOMAP=all mono %EMULATOR_CSPECT% -fullscreen -s28 -vsync -60 -analytics -tv -zxnext -mmc=./ %ROM% + %STARTDIR%=%EMUDIR% %EMULATOR_ZESARUX% --machine tbblue --realvideo --enabletimexvideo --tbblue-fast-boot-mode --enable-esxdos-handler --esxdos-root-dir %GAMEDIR% %ROM% + zxnext + zxnext + + + zxspectrum + Sinclair ZX Spectrum + %ROMPATH%/zxspectrum + .dsk .DSK .gz .GZ .img .IMG .mgt .MGT .rzx .RZX .scl .SCL .sh .SH .sna .SNA .szx .SZX .tap .TAP .trd .TRD .tzx .TZX .udi .UDI .z80 .Z80 .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/fuse_libretro.so %ROM% + %EMULATOR_FUSE% %ROM% + zxspectrum + zxspectrum + + \ No newline at end of file diff --git a/resources/systems/unix/es_find_rules.xml b/resources/systems/unix/es_find_rules.xml index f6848a30d..9c657e59a 100644 --- a/resources/systems/unix/es_find_rules.xml +++ b/resources/systems/unix/es_find_rules.xml @@ -1,5 +1,5 @@ - + @@ -11,51 +11,18 @@ retroarch - org.libretro.RetroArch - - - ~/Applications/RetroArch-Linux*.AppImage - ~/.local/share/applications/RetroArch-Linux*.AppImage - ~/.local/bin/RetroArch-Linux*.AppImage - ~/bin/RetroArch-Linux*.AppImage - /var/lib/flatpak/exports/bin/org.libretro.RetroArch - ~/.local/share/flatpak/exports/bin/org.libretro.RetroArch - + ~/.config/retroarch/cores - - ~/Applications/RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores - ~/.local/share/applications/RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores - ~/.local/bin/RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores - ~/bin/RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores - - ~/.var/app/org.libretro.RetroArch/config/retroarch/cores - - ~/snap/retroarch/current/.config/retroarch/cores - - /usr/lib/x86_64-linux-gnu/libretro - - /usr/lib64/libretro - - /usr/lib/libretro /usr/local/lib/libretro /usr/pkg/lib/libretro - - - - ~/Applications/3dSen/3dSen.exe - ~/.local/share/applications/3dSen/3dSen.exe - ~/.local/bin/3dSen/3dSen.exe - ~/bin/3dSen/3dSen.exe - - @@ -84,64 +51,30 @@ ares - dev.ares.ares - - - /var/lib/flatpak/exports/bin/dev.ares.ares - ~/.local/share/flatpak/exports/bin/dev.ares.ares atari800 - atari800-jz.atari800 BasiliskII - net.cebix.basilisk - - - ~/Applications/BasiliskII*.AppImage - ~/.local/share/applications/BasiliskII*.AppImage - ~/.local/bin/BasiliskII*.AppImage - ~/bin/BasiliskII*.AppImage - /var/lib/flatpak/exports/bin/net.cebix.basilisk - ~/.local/share/flatpak/exports/bin/net.cebix.basilisk - - - - - - ~/Applications/BigPEmu/BigPEmu.exe - ~/.local/share/applications/BigPEmu/BigPEmu.exe - ~/.local/bin/BigPEmu/BigPEmu.exe - ~/bin/BigPEmu/BigPEmu.exe blastem - com.retrodev.blastem - - - /var/lib/flatpak/exports/bin/com.retrodev.blastem - ~/.local/share/flatpak/exports/bin/com.retrodev.blastem bsnes - dev.bsnes.bsnes - - - /var/lib/flatpak/exports/bin/dev.bsnes.bsnes - ~/.local/share/flatpak/exports/bin/dev.bsnes.bsnes @@ -151,34 +84,16 @@ Cemu
- ~/Applications/Cemu*.AppImage - ~/.local/share/applications/Cemu*.AppImage - ~/.local/bin/Cemu*.AppImage - ~/bin/Cemu*.AppImage ~/Applications/Cemu/Cemu ~/.local/share/applications/Cemu/Cemu ~/.local/bin/Cemu/Cemu ~/bin/Cemu/Cemu - /var/lib/flatpak/exports/bin/info.cemu.Cemu - ~/.local/share/flatpak/exports/bin/info.cemu.Cemu
citra - citra-emu.citra-nightly - org.citra_emu.citra - - - ~/Applications/citra-qt*.AppImage - ~/.local/share/applications/citra-qt*.AppImage - ~/.local/bin/citra-qt*.AppImage - ~/bin/citra-qt*.AppImage - ~/.citra/canary/citra-qt.AppImage - ~/.citra/nightly/citra-qt.AppImage - /var/lib/flatpak/exports/bin/org.citra_emu.citra - ~/.local/share/flatpak/exports/bin/org.citra_emu.citra @@ -202,62 +117,28 @@ ~/bin/CSpect/CSpect.exe - - - - ~/Applications/demul/demul.exe - ~/.local/share/applications/demul/demul.exe - ~/.local/bin/demul/demul.exe - ~/bin/demul/demul.exe - - desmume - org.desmume.DeSmuME - - - /var/lib/flatpak/exports/bin/org.desmume.DeSmuME - ~/.local/share/flatpak/exports/bin/org.desmume.DeSmuME dolphin-emu - dolphin-emulator.dolphin-emu - org.DolphinEmu.dolphin-emu - - - ~/Applications/Dolphin_Emulator*.AppImage - ~/.local/share/applications/Dolphin_Emulator*.AppImage - ~/.local/bin/Dolphin_Emulator*.AppImage - ~/bin/Dolphin_Emulator*.AppImage - /var/lib/flatpak/exports/bin/org.DolphinEmu.dolphin-emu - ~/.local/share/flatpak/exports/bin/org.DolphinEmu.dolphin-emu dosbox-staging - io.github.dosbox-staging - - - /var/lib/flatpak/exports/bin/io.github.dosbox-staging - ~/.local/share/flatpak/exports/bin/io.github.dosbox-staging dosbox-x - com.dosbox_x.DOSBox-X - - - /var/lib/flatpak/exports/bin/com.dosbox_x.DOSBox-X - ~/.local/share/flatpak/exports/bin/com.dosbox_x.DOSBox-X @@ -265,23 +146,6 @@ duckstation-nogui duckstation-qt - org.duckstation.DuckStation - - - ~/Applications/DuckStation*.AppImage - ~/.local/share/applications/DuckStation*.AppImage - ~/.local/bin/DuckStation*.AppImage - ~/bin/DuckStation*.AppImage - ~/Applications/duckstation-nogui*.AppImage - ~/.local/share/applications/duckstation-nogui*.AppImage - ~/.local/bin/duckstation-nogui*.AppImage - ~/bin/duckstation-nogui*.AppImage - ~/Applications/duckstation-qt*.AppImage - ~/.local/share/applications/duckstation-qt*.AppImage - ~/.local/bin/duckstation-qt*.AppImage - ~/bin/duckstation-qt*.AppImage - /var/lib/flatpak/exports/bin/org.duckstation.DuckStation - ~/.local/share/flatpak/exports/bin/org.duckstation.DuckStation @@ -301,21 +165,6 @@ eka2l1_qt - - ~/Applications/EKA2L1*.AppImage - ~/.local/share/applications/EKA2L1*.AppImage - ~/.local/bin/EKA2L1*.AppImage - ~/bin/EKA2L1*.AppImage - - - - - - ~/Applications/EKA2L1/eka2l1_qt.exe - ~/.local/share/applications/EKA2L1/eka2l1_qt.exe - ~/.local/bin/EKA2L1/eka2l1_qt.exe - ~/bin/EKA2L1/eka2l1_qt.exe - @@ -333,15 +182,6 @@ flycast - org.flycast.Flycast - - - ~/Applications/flycast-x86*.AppImage - ~/.local/share/applications/flycast-x86*.AppImage - ~/.local/bin/flycast-x86*.AppImage - ~/bin/flycast-x86*.AppImage - /var/lib/flatpak/exports/bin/org.flycast.Flycast - ~/.local/share/flatpak/exports/bin/org.flycast.Flycast @@ -349,12 +189,6 @@ flycast-dojo - - ~/Applications/flycast-dojo*.AppImage - ~/.local/share/applications/flycast-dojo*.AppImage - ~/.local/bin/flycast-dojo*.AppImage - ~/bin/flycast-dojo*.AppImage - @@ -362,35 +196,17 @@ fs-uae-launcher fsuae.launcher - - /var/lib/flatpak/exports/bin/net.fsuae.FS-UAE|flatpak run --command=fs-uae-launcher net.fsuae.FS-UAE - ~/.local/share/flatpak/exports/bin/net.fsuae.FS-UAE|flatpak run --command=fs-uae-launcher net.fsuae.FS-UAE - fuse - net.sf.fuse_emulator - - - /var/lib/flatpak/exports/bin/net.sf.fuse_emulator - ~/.local/share/flatpak/exports/bin/net.sf.fuse_emulator gargoyle - io.github.garglk.Gargoyle - - - ~/Applications/Gargoyle*.AppImage - ~/.local/share/applications/Gargoyle*.AppImage - ~/.local/bin/Gargoyle*.AppImage - ~/bin/Gargoyle*.AppImage - /var/lib/flatpak/exports/bin/io.github.garglk.Gargoyle - ~/.local/share/flatpak/exports/bin/io.github.garglk.Gargoyle @@ -405,24 +221,10 @@ ~/bin/gearboy/gearboy - - - - ~/Applications/gopher2600/gopher2600_linux_amd64 - ~/.local/share/applications/gopher2600/gopher2600_linux_amd64 - ~/.local/bin/gopher2600/gopher2600_linux_amd64 - ~/bin/gopher2600/gopher2600_linux_amd64 - - hatari - org.tuxfamily.hatari - - - /var/lib/flatpak/exports/bin/org.tuxfamily.hatari - ~/.local/share/flatpak/exports/bin/org.tuxfamily.hatari @@ -461,24 +263,10 @@ ~/bin/linapple/linapple - - - - ~/Applications/m2emulator/EMULATOR.EXE - ~/.local/share/applications/m2emulator/EMULATOR.EXE - ~/.local/bin/m2emulator/EMULATOR.EXE - ~/bin/m2emulator/EMULATOR.EXE - - mame - org.mamedev.MAME - - - /var/lib/flatpak/exports/bin/org.mamedev.MAME - ~/.local/share/flatpak/exports/bin/org.mamedev.MAME @@ -486,21 +274,12 @@ mednafen - - /var/lib/flatpak/exports/bin/com.github.AmatCoder.mednaffe|flatpak run --command=mednafen com.github.AmatCoder.mednaffe - ~/.local/share/flatpak/exports/bin/com.github.AmatCoder.mednaffe|flatpak run --command=mednafen com.github.AmatCoder.mednaffe - melonds melonDS - net.kuribo64.melonDS - - - /var/lib/flatpak/exports/bin/net.kuribo64.melonDS - ~/.local/share/flatpak/exports/bin/net.kuribo64.melonDS @@ -508,60 +287,30 @@ mesen2 - - ~/Applications/Mesen*.AppImage - ~/.local/share/applications/Mesen*.AppImage - ~/.local/bin/Mesen*.AppImage - ~/bin/Mesen*.AppImage - mgba mgba-qt - io.mgba.mGBA - - - ~/Applications/mGBA*.AppImage - ~/.local/share/applications/mGBA*.AppImage - ~/.local/bin/mGBA*.AppImage - ~/bin/mGBA*.AppImage - /var/lib/flatpak/exports/bin/io.mgba.mGBA - ~/.local/share/flatpak/exports/bin/io.mgba.mGBA m64p - io.github.m64p.m64p - - - /var/lib/flatpak/exports/bin/io.github.m64p.m64p - ~/.local/share/flatpak/exports/bin/io.github.m64p.m64p nestopia - ca._0ldsk00l.Nestopia - - - /var/lib/flatpak/exports/bin/ca._0ldsk00l.Nestopia - ~/.local/share/flatpak/exports/bin/ca._0ldsk00l.Nestopia openmsx - org.openmsx.openMSX - - - /var/lib/flatpak/exports/bin/org.openmsx.openMSX - ~/.local/share/flatpak/exports/bin/org.openmsx.openMSX @@ -580,27 +329,7 @@ pcsx2-qt - net.pcsx2.PCSX2 - - - ~/Applications/pcsx2*.AppImage - ~/.local/share/applications/pcsx2*.AppImage - ~/.local/bin/pcsx2*.AppImage - ~/bin/pcsx2*.AppImage - /var/lib/flatpak/exports/bin/net.pcsx2.PCSX2 - ~/.local/share/flatpak/exports/bin/net.pcsx2.PCSX2 - - - - - - PCSX2 pcsx2 - net.pcsx2.PCSX2 - - - /var/lib/flatpak/exports/bin/net.pcsx2.PCSX2 - ~/.local/share/flatpak/exports/bin/net.pcsx2.PCSX2 @@ -615,31 +344,12 @@ ~/bin/pico-8/pico8 - - - - org.purei.Play - - - ~/Applications/Play!*.AppImage - ~/.local/share/applications/Play!*.AppImage - ~/.local/bin/Play!*.AppImage - ~/bin/Play!*.AppImage - /var/lib/flatpak/exports/bin/org.purei.Play - ~/.local/share/flatpak/exports/bin/org.purei.Play - - ppsspp-emu.ppsspp-sdl PPSSPPSDL PPSSPPQt - org.ppsspp.PPSSPP - - - /var/lib/flatpak/exports/bin/org.ppsspp.PPSSPP - ~/.local/share/flatpak/exports/bin/org.ppsspp.PPSSPP @@ -652,20 +362,6 @@ primehack - io.github.shiiion.primehack - - - /var/lib/flatpak/exports/bin/io.github.shiiion.primehack - ~/.local/share/flatpak/exports/bin/io.github.shiiion.primehack - - - - - - ~/Applications/Proton/wine*.AppImage - ~/.local/share/applications/Proton/wine*.AppImage - ~/.local/bin/Proton/wine*.AppImage - ~/bin/Proton/wine*.AppImage @@ -708,31 +404,12 @@ RMG - com.github.Rosalie241.RMG - - - ~/Applications/RMG*.AppImage - ~/.local/share/applications/RMG*.AppImage - ~/.local/bin/RMG*.AppImage - ~/bin/RMG*.AppImage - /var/lib/flatpak/exports/bin/com.github.Rosalie241.RMG - ~/.local/share/flatpak/exports/bin/com.github.Rosalie241.RMG rpcs3 - rpcs3-emu.rpcs3 - net.rpcs3.RPCS3 - - - ~/Applications/rpcs3*.AppImage - ~/.local/share/applications/rpcs3*.AppImage - ~/.local/bin/rpcs3*.AppImage - ~/bin/rpcs3*.AppImage - /var/lib/flatpak/exports/bin/net.rpcs3.RPCS3 - ~/.local/share/flatpak/exports/bin/net.rpcs3.RPCS3 @@ -752,11 +429,8 @@ Ryujinx Ryujinx.Ava - org.ryujinx.Ryujinx - /var/lib/flatpak/exports/bin/org.ryujinx.Ryujinx - ~/.local/share/flatpak/exports/bin/org.ryujinx.Ryujinx ~/Applications/publish/Ryujinx ~/.local/share/applications/publish/Ryujinx ~/.local/bin/publish/Ryujinx @@ -771,22 +445,12 @@ sameboy - io.github.sameboy.SameBoy - - - /var/lib/flatpak/exports/bin/io.github.sameboy.SameBoy - ~/.local/share/flatpak/exports/bin/io.github.sameboy.SameBoy scummvm - org.scummvm.ScummVM - - - /var/lib/flatpak/exports/bin/org.scummvm.ScummVM - ~/.local/share/flatpak/exports/bin/org.scummvm.ScummVM @@ -806,12 +470,6 @@ SheepShaver - - ~/Applications/SheepShaver*.AppImage - ~/.local/share/applications/SheepShaver*.AppImage - ~/.local/bin/SheepShaver*.AppImage - ~/bin/SheepShaver*.AppImage - @@ -829,11 +487,6 @@ simple64-gui - io.github.simple64.simple64 - - - /var/lib/flatpak/exports/bin/io.github.simple64.simple64 - ~/.local/share/flatpak/exports/bin/io.github.simple64.simple64 @@ -853,15 +506,6 @@ snes9x snes9x-gtk - com.snes9x.Snes9x - - - ~/Applications/Snes9x*.AppImage - ~/.local/share/applications/Snes9x*.AppImage - ~/.local/bin/Snes9x*.AppImage - ~/bin/Snes9x*.AppImage - /var/lib/flatpak/exports/bin/com.snes9x.Snes9x - ~/.local/share/flatpak/exports/bin/com.snes9x.Snes9x @@ -870,10 +514,6 @@ solarus-run solarus.run - - /var/lib/flatpak/exports/bin/org.solarus_games.solarus.Launcher|flatpak run --command=solarus-run org.solarus_games.solarus.Launcher - ~/.local/share/flatpak/exports/bin/org.solarus_games.solarus.Launcher|flatpak run --command=solarus-run org.solarus_games.solarus.Launcher - @@ -885,11 +525,6 @@ stella - io.github.stella_emu.Stella - - - /var/lib/flatpak/exports/bin/io.github.stella_emu.Stella - ~/.local/share/flatpak/exports/bin/io.github.stella_emu.Stella @@ -902,19 +537,12 @@ ~/.local/share/applications/Supermodel/supermodel ~/.local/bin/Supermodel/supermodel ~/bin/Supermodel/supermodel - /var/lib/flatpak/exports/bin/com.supermodel3.Supermodel - ~/.local/share/flatpak/exports/bin/com.supermodel3.Supermodel tic80 - com.tic80.TIC_80 - - - /var/lib/flatpak/exports/bin/com.tic80.TIC_80 - ~/.local/share/flatpak/exports/bin/com.tic80.TIC_80 @@ -922,12 +550,6 @@ dolphin-emu-triforce - - ~/Applications/dolphin-emu-triforce*.AppImage - ~/.local/share/applications/dolphin-emu-triforce*.AppImage - ~/.local/bin/dolphin-emu-triforce*.AppImage - ~/bin/dolphin-emu-triforce*.AppImage - @@ -948,34 +570,18 @@ x64sc - vice-jz.x64sc - net.sf.VICE - - - /var/lib/flatpak/exports/bin/net.sf.VICE - ~/.local/share/flatpak/exports/bin/net.sf.VICE xplus4 - vice-jz.xplus4 - - - /var/lib/flatpak/exports/bin/net.sf.VICE|flatpak run --command=xplus4 net.sf.VICE - ~/.local/share/flatpak/exports/bin/net.sf.VICE|flatpak run --command=xplus4 net.sf.VICE xvic - vice-jz.xvic - - - /var/lib/flatpak/exports/bin/net.sf.VICE|flatpak run --command=xvic net.sf.VICE - ~/.local/share/flatpak/exports/bin/net.sf.VICE|flatpak run --command=xvic net.sf.VICE @@ -1007,37 +613,6 @@ xemu - app.xemu.xemu - - - ~/Applications/xemu*.AppImage - ~/.local/share/applications/xemu*.AppImage - ~/.local/bin/xemu*.AppImage - ~/bin/xemu*.AppImage - /var/lib/flatpak/exports/bin/app.xemu.xemu - ~/.local/share/flatpak/exports/bin/app.xemu.xemu - - - - - - ~/Applications/Wine/wine*.AppImage - ~/.local/share/applications/Wine/wine*.AppImage - ~/.local/bin/Wine/wine*.AppImage - ~/bin/Wine/wine*.AppImage - - - - - - ~/Applications/xenia/xenia.exe - ~/.local/share/applications/xenia/xenia.exe - ~/.local/bin/xenia/xenia.exe - ~/bin/xenia/xenia.exe - ~/Applications/xenia/xenia_canary.exe - ~/.local/share/applications/xenia/xenia_canary.exe - ~/.local/bin/xenia/xenia_canary.exe - ~/bin/xenia/xenia_canary.exe @@ -1056,15 +631,6 @@ yuzu - org.yuzu_emu.yuzu - - - ~/Applications/yuzu*.AppImage - ~/.local/share/applications/yuzu*.AppImage - ~/.local/bin/yuzu*.AppImage - ~/bin/yuzu*.AppImage - /var/lib/flatpak/exports/bin/org.yuzu_emu.yuzu - ~/.local/share/flatpak/exports/bin/org.yuzu_emu.yuzu diff --git a/resources/systems/unix/es_systems.xml b/resources/systems/unix/es_systems.xml index 9d03ceda0..ea770fcfe 100644 --- a/resources/systems/unix/es_systems.xml +++ b/resources/systems/unix/es_systems.xml @@ -1,5 +1,5 @@ - + 3do @@ -193,7 +193,6 @@ %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/stella_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/stella2014_libretro.so %ROM% %EMULATOR_STELLA% %ROM% - %EMULATOR_GOPHER2600% %ROM% %EMULATOR_ARES% --fullscreen --system "Atari 2600" %ROM% atari2600 atari2600 @@ -237,8 +236,6 @@ .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% %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/atarijaguar jaguar -cart %ROM% - %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_BIGPEMU-WINDOWS% %ROM% - %STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_BIGPEMU-WINDOWS% %ROM% atarijaguar atarijaguar @@ -246,9 +243,8 @@ atarijaguarcd 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 - %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_BIGPEMU-WINDOWS% %ROM% - %STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_BIGPEMU-WINDOWS% %ROM% + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% atarijaguarcd atarijaguarcd @@ -394,7 +390,6 @@ %EMULATOR_FLYCAST-DOJO% %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/kronos_libretro.so %ROM% %EMULATOR_MEDNAFEN% -force_module ss %ROM% - %EMULATOR_PLAY!% --disc %ROM% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% %INJECT%=%BASENAME%.esprefix %EMULATOR_TRIFORCE% -b -e %ROM% %INJECT%=%BASENAME%.esprefix %EMULATOR_XEMU% -dvd_path %ROM% @@ -499,11 +494,9 @@ desktop Desktop Applications %ROMPATH%/desktop - .AppImage .desktop .sh + .desktop .sh %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% %RUNINBACKGROUND% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% - %EMULATOR_OS-SHELL% -c "%ROM%" - %RUNINBACKGROUND% %EMULATOR_OS-SHELL% -c "%ROM%" pcwindows desktop @@ -580,11 +573,9 @@ emulators Emulators %ROMPATH%/emulators - .AppImage .desktop .sh + .desktop .sh %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% %RUNINBACKGROUND% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% - %EMULATOR_OS-SHELL% -c "%ROM%" - %RUNINBACKGROUND% %EMULATOR_OS-SHELL% -c "%ROM%" pcwindows emulators @@ -601,7 +592,7 @@ famicom Nintendo Family Computer %ROMPATH%/famicom - .3dsen .3DSEN .fds .FDS .nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP + .fds .FDS .nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen_libretro.so %ROM% %EMULATOR_MESEN% --fullscreen %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nestopia_libretro.so %ROM% @@ -612,8 +603,6 @@ %EMULATOR_MEDNAFEN% -force_module nes %ROM% %EMULATOR_ARES% --fullscreen --system "Famicom" %ROM% %EMULATOR_ARES% --fullscreen --system "Famicom Disk System" %ROM% - %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_3DSEN-WINDOWS% -id=%INJECT%=%BASENAME%.3dsen - %STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_3DSEN-WINDOWS% -id=%INJECT%=%BASENAME%.3dsen famicom famicom @@ -1076,8 +1065,6 @@ .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% %STARTDIR%=~/.mame %EMULATOR_MAME% -rompath %GAMEDIR%\;%ROMPATH%/model2 %BASENAME% - %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_M2EMULATOR-WINDOWS% %BASENAME% - %STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_M2EMULATOR-WINDOWS% %BASENAME% arcade model2 @@ -1290,7 +1277,7 @@ nes Nintendo Entertainment System %ROMPATH%/nes - .3dsen .3DSEN .fds .FDS .nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP + .fds .FDS .nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mesen_libretro.so %ROM% %EMULATOR_MESEN% --fullscreen %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nestopia_libretro.so %ROM% @@ -1301,8 +1288,6 @@ %EMULATOR_MEDNAFEN% -force_module nes %ROM% %EMULATOR_ARES% --fullscreen --system "Famicom" %ROM% %EMULATOR_ARES% --fullscreen --system "Famicom Disk System" %ROM% - %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_3DSEN-WINDOWS% -id=%INJECT%=%BASENAME%.3dsen - %STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_3DSEN-WINDOWS% -id=%INJECT%=%BASENAME%.3dsen nes nes @@ -1313,8 +1298,6 @@ .ngage .zip .ZIP %EMULATOR_EKA2L1% --fullscreen --device RH-29 --mount %ROM% --run "%BASENAME%" %EMULATOR_EKA2L1% --fullscreen --device RH-29 --run "%BASENAME%" - %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_EKA2L1-WINDOWS% --fullscreen --device RH-29 --mount %ROM% --run "%BASENAME%" - %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_EKA2L1-WINDOWS% --fullscreen --device RH-29 --run "%BASENAME%" ngage ngage @@ -1357,8 +1340,8 @@ openbor OpenBOR Game Engine %ROMPATH%/openbor - .AppImage - %STARTDIR%=%GAMEDIR% %EMULATOR_OS-SHELL% -c "%ROM%" + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% openbor openbor @@ -1417,10 +1400,7 @@ pcarcade PC Arcade Systems %ROMPATH%/pcarcade - .AppImage .desktop .exe .EXE .sh - %STARTDIR%=%GAMEDIR% %EMULATOR_WINE% %ROM% - %STARTDIR%=%GAMEDIR% %EMULATOR_PROTON% %ROM% - %EMULATOR_OS-SHELL% -c "%ROM%" + .desktop .sh %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% arcade pcarcade @@ -1495,9 +1475,8 @@ ports Ports %ROMPATH%/ports - .AppImage .desktop .exe .EXE .game .GAME .phd .PHD .psx .PSX .sh + .desktop .exe .EXE .game .GAME .phd .PHD .psx .PSX .sh %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% - %EMULATOR_OS-SHELL% -c "%ROM%" %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/ecwolf_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nxengine_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/openlara_libretro.so %ROM% @@ -1509,12 +1488,10 @@ ps2 Sony PlayStation 2 %ROMPATH%/ps2 - .arcadedef .bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG + .bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM% %EMULATOR_PCSX2% -batch %ROM% - %EMULATOR_PCSX2-LEGACY% --nogui %ROM% - %EMULATOR_PLAY!% --disc %ROM% ps2 ps2 @@ -1992,10 +1969,7 @@ type-x Taito Type X %ROMPATH%/type-x - .AppImage .desktop .exe .EXE .sh - %STARTDIR%=%GAMEDIR% %EMULATOR_WINE% %ROM% - %STARTDIR%=%GAMEDIR% %EMULATOR_PROTON% %ROM% - %EMULATOR_OS-SHELL% -c "%ROM%" + .desktop .sh %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% arcade type-x @@ -2103,11 +2077,9 @@ windows Microsoft Windows %ROMPATH%/windows - .AppImage .desktop .sh + .desktop .sh %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% %RUNINBACKGROUND% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% - %EMULATOR_OS-SHELL% -c "%ROM%" - %RUNINBACKGROUND% %EMULATOR_OS-SHELL% -c "%ROM%" pcwindows windows @@ -2115,13 +2087,11 @@ windows3x Microsoft Windows 3.x %ROMPATH%/windows3x - .AppImage .bat .BAT .desktop .dosz .DOSZ .sh .7z .7Z .zip .ZIP + .bat .BAT .desktop .dosz .DOSZ .sh .7z .7Z .zip .ZIP %STARTDIR%=%GAMEDIR% %EMULATOR_DOSBOX-X% -defaultdir %GAMEDIR% %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dosbox_pure_libretro.so %ROM% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% %RUNINBACKGROUND% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% - %EMULATOR_OS-SHELL% -c "%ROM%" - %RUNINBACKGROUND% %EMULATOR_OS-SHELL% -c "%ROM%" windows3x windows3x @@ -2129,13 +2099,11 @@ windows9x Microsoft Windows 9x %ROMPATH%/windows9x - .AppImage .bat .BAT .desktop .dosz .DOSZ .sh .7z .7Z .zip .ZIP + .bat .BAT .desktop .dosz .DOSZ .sh .7z .7Z .zip .ZIP %STARTDIR%=%GAMEDIR% %EMULATOR_DOSBOX-X% -defaultdir %GAMEDIR% %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dosbox_pure_libretro.so %ROM% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% %RUNINBACKGROUND% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% - %EMULATOR_OS-SHELL% -c "%ROM%" - %RUNINBACKGROUND% %EMULATOR_OS-SHELL% -c "%ROM%" pcwindows windows9x @@ -2196,10 +2164,8 @@ xbox360 Microsoft Xbox 360 %ROMPATH%/xbox360 - . .desktop .iso .ISO .sh .xex .XEX - %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_XENIA-WINDOWS% %ROM% - %STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_XENIA-WINDOWS% %ROM% - %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% + .7z .7Z .zip .ZIP + PLACEHOLDER %ROM% xbox360 xbox360 diff --git a/tools/system-dirs-dummy-files/ROMs_ALL_Unix.zip b/tools/system-dirs-dummy-files/ROMs_ALL_Linux.zip similarity index 100% rename from tools/system-dirs-dummy-files/ROMs_ALL_Unix.zip rename to tools/system-dirs-dummy-files/ROMs_ALL_Linux.zip From 683b00abcddd2741352f220ac6fff5f4d9d0cdb2 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 22:21:06 +0100 Subject: [PATCH 067/320] Removed an unnecessary lambda capture --- es-app/src/guis/GuiScreensaverOptions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp index 2b1d533bf..0d5bcac1e 100644 --- a/es-app/src/guis/GuiScreensaverOptions.cpp +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -217,7 +217,7 @@ void GuiScreensaverOptions::openSlideshowScreensaverOptions() const std::string initValueMediaDir { Settings::getInstance()->getString("ScreensaverSlideshowCustomDir")}; const bool multiLineMediaDir {false}; - auto updateValMediaDir = [this, s](const std::string& newVal) { + auto updateValMediaDir = [s](const std::string& newVal) { Settings::getInstance()->setString("ScreensaverSlideshowCustomDir", newVal); s->setNeedsSaving(); }; From d259817c59edbd90205a4e0c5021207d93124872 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 22:25:29 +0100 Subject: [PATCH 068/320] Removed one more unnecessary lambda capture --- es-app/src/guis/GuiScreensaverOptions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp index 0d5bcac1e..ca06a827d 100644 --- a/es-app/src/guis/GuiScreensaverOptions.cpp +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -223,7 +223,7 @@ void GuiScreensaverOptions::openSlideshowScreensaverOptions() }; rowCustomImageDir.makeAcceptInputHandler( [this, s, titleCustomImageDir, defaultImageDirStaticText, defaultImageDirText, - initValueMediaDir, updateValMediaDir, multiLineMediaDir] { + initValueMediaDir, updateValMediaDir] { if (Settings::getInstance()->getBool("VirtualKeyboard")) { mWindow->pushGui(new GuiTextEditKeyboardPopup( getHelpStyle(), s->getMenu().getPosition().y, titleCustomImageDir, From ea6f2caf919e5dfc22a52cd98d3d7fa1aa2dc881 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 22:27:17 +0100 Subject: [PATCH 069/320] Small code formatting change --- es-app/src/guis/GuiScreensaverOptions.cpp | 36 +++++++++++------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp index ca06a827d..d7280129e 100644 --- a/es-app/src/guis/GuiScreensaverOptions.cpp +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -221,24 +221,24 @@ void GuiScreensaverOptions::openSlideshowScreensaverOptions() Settings::getInstance()->setString("ScreensaverSlideshowCustomDir", newVal); s->setNeedsSaving(); }; - rowCustomImageDir.makeAcceptInputHandler( - [this, s, titleCustomImageDir, defaultImageDirStaticText, defaultImageDirText, - initValueMediaDir, updateValMediaDir] { - if (Settings::getInstance()->getBool("VirtualKeyboard")) { - mWindow->pushGui(new GuiTextEditKeyboardPopup( - getHelpStyle(), s->getMenu().getPosition().y, titleCustomImageDir, - Settings::getInstance()->getString("ScreensaverSlideshowCustomDir"), - updateValMediaDir, multiLineMediaDir, "SAVE", "SAVE CHANGES?", - defaultImageDirStaticText, defaultImageDirText, "load default directory")); - } - else { - mWindow->pushGui(new GuiTextEditPopup( - getHelpStyle(), titleCustomImageDir, - Settings::getInstance()->getString("ScreensaverSlideshowCustomDir"), - updateValMediaDir, multiLineMediaDir, "SAVE", "SAVE CHANGES?", - defaultImageDirStaticText, defaultImageDirText, "load default directory")); - } - }); + rowCustomImageDir.makeAcceptInputHandler([this, s, titleCustomImageDir, + defaultImageDirStaticText, defaultImageDirText, + initValueMediaDir, updateValMediaDir] { + if (Settings::getInstance()->getBool("VirtualKeyboard")) { + mWindow->pushGui(new GuiTextEditKeyboardPopup( + getHelpStyle(), s->getMenu().getPosition().y, titleCustomImageDir, + Settings::getInstance()->getString("ScreensaverSlideshowCustomDir"), + updateValMediaDir, multiLineMediaDir, "SAVE", "SAVE CHANGES?", + defaultImageDirStaticText, defaultImageDirText, "load default directory")); + } + else { + mWindow->pushGui(new GuiTextEditPopup( + getHelpStyle(), titleCustomImageDir, + Settings::getInstance()->getString("ScreensaverSlideshowCustomDir"), + updateValMediaDir, multiLineMediaDir, "SAVE", "SAVE CHANGES?", + defaultImageDirStaticText, defaultImageDirText, "load default directory")); + } + }); s->addRow(rowCustomImageDir); s->setSize(mSize); From 400ee1b2907f8eb4bc6ca31edac4656c6b2b4dd7 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 22:31:16 +0100 Subject: [PATCH 070/320] Added the .zar file extension to the xbox360 system on Linux and Windows --- resources/systems/linux/es_systems.xml | 2 +- resources/systems/windows/es_systems.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/systems/linux/es_systems.xml b/resources/systems/linux/es_systems.xml index c1ba40807..7394292c8 100644 --- a/resources/systems/linux/es_systems.xml +++ b/resources/systems/linux/es_systems.xml @@ -2196,7 +2196,7 @@ xbox360 Microsoft Xbox 360 %ROMPATH%/xbox360 - . .desktop .iso .ISO .sh .xex .XEX + . .desktop .iso .ISO .sh .xex .XEX .zar .ZAR %STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_XENIA-WINDOWS% %ROM% %STARTDIR%=%EMUDIR% %PRECOMMAND_PROTON% %EMULATOR_XENIA-WINDOWS% %ROM% %ENABLESHORTCUTS% %EMULATOR_OS-SHELL% %ROM% diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index 9f588e0ce..f67c4e087 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -2176,7 +2176,7 @@ xbox360 Microsoft Xbox 360 %ROMPATH%\xbox360 - . .iso .ISO .xex .XEX + . .iso .ISO .xex .XEX .zar .ZAR %STARTDIR%=%EMUDIR% %EMULATOR_XENIA% %ROM% xbox360 xbox360 From fad99faa34c40052c301ccb70b293c3edf453d64 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 22:34:17 +0100 Subject: [PATCH 071/320] Added the .zso file extension to the ps2 system --- resources/systems/linux/es_systems.xml | 2 +- resources/systems/macos/es_systems.xml | 2 +- resources/systems/unix/es_systems.xml | 2 +- resources/systems/windows/es_systems.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/systems/linux/es_systems.xml b/resources/systems/linux/es_systems.xml index 7394292c8..0e1b34fe4 100644 --- a/resources/systems/linux/es_systems.xml +++ b/resources/systems/linux/es_systems.xml @@ -1509,7 +1509,7 @@ ps2 Sony PlayStation 2 %ROMPATH%/ps2 - .arcadedef .bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG + .arcadedef .bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG .zso .ZSO %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM% %EMULATOR_PCSX2% -batch %ROM% diff --git a/resources/systems/macos/es_systems.xml b/resources/systems/macos/es_systems.xml index 142266e64..907adad2f 100644 --- a/resources/systems/macos/es_systems.xml +++ b/resources/systems/macos/es_systems.xml @@ -1443,7 +1443,7 @@ ps2 Sony PlayStation 2 %ROMPATH%/ps2 - .arcadedef .bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG + .arcadedef .bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG .zso .ZSO %EMULATOR_PCSX2% -batch %ROM% %EMULATOR_PCSX2% --nogui %ROM% %EMULATOR_AETHERSX2% -batch %ROM% diff --git a/resources/systems/unix/es_systems.xml b/resources/systems/unix/es_systems.xml index ea770fcfe..1c78a5b5c 100644 --- a/resources/systems/unix/es_systems.xml +++ b/resources/systems/unix/es_systems.xml @@ -1488,7 +1488,7 @@ ps2 Sony PlayStation 2 %ROMPATH%/ps2 - .bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG + .bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG .zso .ZSO %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM% %EMULATOR_PCSX2% -batch %ROM% diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index f67c4e087..ff5448c93 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -1495,7 +1495,7 @@ ps2 Sony PlayStation 2 %ROMPATH%\ps2 - .arcadedef .bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG + .arcadedef .bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG .zso .ZSO %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\pcsx2_libretro.dll %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\pcsx2_libretro.dll %ROM% %EMULATOR_PCSX2% -batch %ROM% From 90bbbe0db6a88573ae6916bb78a3ee2886e7c29e Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 22:44:47 +0100 Subject: [PATCH 072/320] Added the .pk3 and .ipk3 file extensions to the doom system on Linux, Unix and Windows --- resources/systems/linux/es_systems.xml | 2 +- resources/systems/unix/es_systems.xml | 2 +- resources/systems/windows/es_systems.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/systems/linux/es_systems.xml b/resources/systems/linux/es_systems.xml index 0e1b34fe4..f05b6b27f 100644 --- a/resources/systems/linux/es_systems.xml +++ b/resources/systems/linux/es_systems.xml @@ -511,7 +511,7 @@ doom Doom %ROMPATH%/doom - .desktop .iwad .IWAD .pk4 .PK4 .pwad .PWAD .sh .wad .WAD + .desktop .ipk3 .IPK3 .iwad .IWAD .pk3 .PK3 .pk4 .PK4 .pwad .PWAD .sh .wad .WAD %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/prboom_libretro.so %ROM% %EMULATOR_PRBOOM-PLUS% -iwad %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/boom3_libretro.so %ROM% diff --git a/resources/systems/unix/es_systems.xml b/resources/systems/unix/es_systems.xml index 1c78a5b5c..9112797a8 100644 --- a/resources/systems/unix/es_systems.xml +++ b/resources/systems/unix/es_systems.xml @@ -504,7 +504,7 @@ doom Doom %ROMPATH%/doom - .desktop .iwad .IWAD .pk4 .PK4 .pwad .PWAD .sh .wad .WAD + .desktop .ipk3 .IPK3 .iwad .IWAD .pk3 .PK3 .pk4 .PK4 .pwad .PWAD .sh .wad .WAD %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/prboom_libretro.so %ROM% %EMULATOR_PRBOOM-PLUS% -iwad %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/boom3_libretro.so %ROM% diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index ff5448c93..fd5ac2204 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -509,7 +509,7 @@ doom Doom %ROMPATH%\doom - .bat .BAT .iwad .IWAD .lnk .LNK .pk4 .PK4 .pwad .PWAD .wad .WAD + .bat .BAT .ipk3 .IPK3 .iwad .IWAD .lnk .LNK .pk3 .PK3 .pk4 .PK4 .pwad .PWAD .wad .WAD %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\prboom_libretro.dll %ROM% %EMULATOR_PRBOOM-PLUS% -iwad %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\boom3_libretro.dll %ROM% From ef0b760f431d88e2dac0b54b1a3f0effd3e92fdb Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 22:47:06 +0100 Subject: [PATCH 073/320] (Android) Removed some unsupported file extensions --- resources/systems/android/es_systems.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/systems/android/es_systems.xml b/resources/systems/android/es_systems.xml index 38440e877..0e9acc8f5 100644 --- a/resources/systems/android/es_systems.xml +++ b/resources/systems/android/es_systems.xml @@ -109,7 +109,7 @@ arcade Arcade %ROMPATH%/arcade - .cmd .CMD .desktop .sh .7z .7Z .zip .ZIP + .cmd .CMD .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_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2010_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2003_plus_libretro_android.so %EXTRA_ROM%=%ROM% @@ -435,7 +435,7 @@ doom Doom %ROMPATH%/doom - .desktop .iwad .IWAD .pk4 .PK4 .pwad .PWAD .sh .wad .WAD + .iwad .IWAD .pwad .PWAD .wad .WAD %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=prboom_libretro_android.so %EXTRA_ROM%=%ROM% pc, pcwindows doom @@ -797,7 +797,7 @@ mame Multiple Arcade Machine Emulator %ROMPATH%/mame - .cmd .CMD .desktop .sh .7z .7Z .zip .ZIP + .cmd .CMD .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_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2010_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mame2003_plus_libretro_android.so %EXTRA_ROM%=%ROM% @@ -1799,7 +1799,7 @@ windows3x Microsoft Windows 3.x %ROMPATH%/windows3x - .bat .BAT .desktop .dosz .DOSZ .7z .7Z .zip .ZIP + .bat .BAT .dosz .DOSZ .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=dosbox_pure_libretro_android.so %EXTRA_ROM%=%ROM% windows3x windows3x @@ -1808,7 +1808,7 @@ windows9x Microsoft Windows 9x %ROMPATH%/windows9x - .bat .BAT .desktop .dosz .DOSZ .7z .7Z .zip .ZIP + .bat .BAT .dosz .DOSZ .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=dosbox_pure_libretro_android.so %EXTRA_ROM%=%ROM% pcwindows windows9x From 31f287820a723022b95602607548607cba9652fa Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 22:52:44 +0100 Subject: [PATCH 074/320] (Windows) Fixed a compile error --- es-app/src/guis/GuiScreensaverOptions.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp index d7280129e..4c6a559b3 100644 --- a/es-app/src/guis/GuiScreensaverOptions.cpp +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -216,7 +216,6 @@ void GuiScreensaverOptions::openSlideshowScreensaverOptions() .string()}; const std::string initValueMediaDir { Settings::getInstance()->getString("ScreensaverSlideshowCustomDir")}; - const bool multiLineMediaDir {false}; auto updateValMediaDir = [s](const std::string& newVal) { Settings::getInstance()->setString("ScreensaverSlideshowCustomDir", newVal); s->setNeedsSaving(); @@ -228,15 +227,15 @@ void GuiScreensaverOptions::openSlideshowScreensaverOptions() mWindow->pushGui(new GuiTextEditKeyboardPopup( getHelpStyle(), s->getMenu().getPosition().y, titleCustomImageDir, Settings::getInstance()->getString("ScreensaverSlideshowCustomDir"), - updateValMediaDir, multiLineMediaDir, "SAVE", "SAVE CHANGES?", - defaultImageDirStaticText, defaultImageDirText, "load default directory")); + updateValMediaDir, false, "SAVE", "SAVE CHANGES?", defaultImageDirStaticText, + defaultImageDirText, "load default directory")); } else { mWindow->pushGui(new GuiTextEditPopup( getHelpStyle(), titleCustomImageDir, Settings::getInstance()->getString("ScreensaverSlideshowCustomDir"), - updateValMediaDir, multiLineMediaDir, "SAVE", "SAVE CHANGES?", - defaultImageDirStaticText, defaultImageDirText, "load default directory")); + updateValMediaDir, false, "SAVE", "SAVE CHANGES?", defaultImageDirStaticText, + defaultImageDirText, "load default directory")); } }); s->addRow(rowCustomImageDir); From a7fdd0ec660a93f4dbfc4bb790ed6d6836176b73 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 16 Dec 2023 23:02:06 +0100 Subject: [PATCH 075/320] Added the .dirksimple file extension to the daphne and laserdisc systems --- resources/systems/linux/es_systems.xml | 4 ++-- resources/systems/macos/es_systems.xml | 4 ++-- resources/systems/unix/es_systems.xml | 4 ++-- resources/systems/windows/es_systems.xml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/resources/systems/linux/es_systems.xml b/resources/systems/linux/es_systems.xml index f05b6b27f..a967e9c7c 100644 --- a/resources/systems/linux/es_systems.xml +++ b/resources/systems/linux/es_systems.xml @@ -486,7 +486,7 @@ daphne Daphne Arcade LaserDisc Emulator %ROMPATH%/daphne - .daphne .ogv .OGV .singe .7z .7Z .zip .ZIP + .daphne .dirksimple .ogv .OGV .singe .7z .7Z .zip .ZIP %EMULATOR_HYPSEUS-SINGE% %BASENAME% vldp -framefile %GAMEDIR%/%BASENAME%.txt %INJECT%=%BASENAME%.commands %EMULATOR_HYPSEUS-SINGE% singe vldp -framefile %GAMEDIR%/%BASENAME%.txt -script %GAMEDIR%/%BASENAME%.singe %INJECT%=%BASENAME%.commands %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% @@ -888,7 +888,7 @@ laserdisc LaserDisc Games %ROMPATH%/laserdisc - .daphne .ogv .OGV .singe .7z .7Z .zip .ZIP + .daphne .dirksimple .ogv .OGV .singe .7z .7Z .zip .ZIP %EMULATOR_HYPSEUS-SINGE% %BASENAME% vldp -framefile %GAMEDIR%/%BASENAME%.txt %INJECT%=%BASENAME%.commands %EMULATOR_HYPSEUS-SINGE% singe vldp -framefile %GAMEDIR%/%BASENAME%.txt -script %GAMEDIR%/%BASENAME%.singe %INJECT%=%BASENAME%.commands %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% diff --git a/resources/systems/macos/es_systems.xml b/resources/systems/macos/es_systems.xml index 907adad2f..a19a03377 100644 --- a/resources/systems/macos/es_systems.xml +++ b/resources/systems/macos/es_systems.xml @@ -472,7 +472,7 @@ daphne Daphne Arcade LaserDisc Emulator %ROMPATH%/daphne - .daphne .ogv .OGV .singe .7z .7Z .zip .ZIP + .daphne .dirksimple .ogv .OGV .singe .7z .7Z .zip .ZIP %EMULATOR_HYPSEUS-SINGE% %BASENAME% vldp -framefile %GAMEDIR%/%BASENAME%.txt %INJECT%=%BASENAME%.commands %EMULATOR_HYPSEUS-SINGE% singe vldp -framefile %GAMEDIR%/%BASENAME%.txt -script %GAMEDIR%/%BASENAME%.singe %INJECT%=%BASENAME%.commands %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.dylib %ROM% @@ -851,7 +851,7 @@ laserdisc LaserDisc Games %ROMPATH%/laserdisc - .daphne .ogv .OGV .singe .7z .7Z .zip .ZIP + .daphne .dirksimple .ogv .OGV .singe .7z .7Z .zip .ZIP %EMULATOR_HYPSEUS-SINGE% %BASENAME% vldp -framefile %GAMEDIR%/%BASENAME%.txt %INJECT%=%BASENAME%.commands %EMULATOR_HYPSEUS-SINGE% singe vldp -framefile %GAMEDIR%/%BASENAME%.txt -script %GAMEDIR%/%BASENAME%.singe %INJECT%=%BASENAME%.commands %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.dylib %ROM% diff --git a/resources/systems/unix/es_systems.xml b/resources/systems/unix/es_systems.xml index 9112797a8..f371cc215 100644 --- a/resources/systems/unix/es_systems.xml +++ b/resources/systems/unix/es_systems.xml @@ -481,7 +481,7 @@ daphne Daphne Arcade LaserDisc Emulator %ROMPATH%/daphne - .daphne .ogv .OGV .singe .7z .7Z .zip .ZIP + .daphne .dirksimple .ogv .OGV .singe .7z .7Z .zip .ZIP %EMULATOR_HYPSEUS-SINGE% %BASENAME% vldp -framefile %GAMEDIR%/%BASENAME%.txt %INJECT%=%BASENAME%.commands %EMULATOR_HYPSEUS-SINGE% singe vldp -framefile %GAMEDIR%/%BASENAME%.txt -script %GAMEDIR%/%BASENAME%.singe %INJECT%=%BASENAME%.commands %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% @@ -877,7 +877,7 @@ laserdisc LaserDisc Games %ROMPATH%/laserdisc - .daphne .ogv .OGV .singe .7z .7Z .zip .ZIP + .daphne .dirksimple .ogv .OGV .singe .7z .7Z .zip .ZIP %EMULATOR_HYPSEUS-SINGE% %BASENAME% vldp -framefile %GAMEDIR%/%BASENAME%.txt %INJECT%=%BASENAME%.commands %EMULATOR_HYPSEUS-SINGE% singe vldp -framefile %GAMEDIR%/%BASENAME%.txt -script %GAMEDIR%/%BASENAME%.singe %INJECT%=%BASENAME%.commands %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mame_libretro.so %ROM% diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index fd5ac2204..222302676 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -486,7 +486,7 @@ daphne Daphne Arcade LaserDisc Emulator %ROMPATH%\daphne - .daphne .ogv .OGV .singe .7z .7Z .zip .ZIP + .daphne .dirksimple .ogv .OGV .singe .7z .7Z .zip .ZIP %EMULATOR_HYPSEUS-SINGE% %BASENAME% vldp -framefile %GAMEDIR%\%BASENAME%.txt %INJECT%=%BASENAME%.commands %EMULATOR_HYPSEUS-SINGE% singe vldp -framefile %GAMEDIR%\%BASENAME%.txt -script %GAMEDIR%\%BASENAME%.singe %INJECT%=%BASENAME%.commands %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame_libretro.dll %ROM% @@ -882,7 +882,7 @@ laserdisc LaserDisc Games %ROMPATH%\laserdisc - .daphne .ogv .OGV .singe .7z .7Z .zip .ZIP + .daphne .dirksimple .ogv .OGV .singe .7z .7Z .zip .ZIP %EMULATOR_HYPSEUS-SINGE% %BASENAME% vldp -framefile %GAMEDIR%\%BASENAME%.txt %INJECT%=%BASENAME%.commands %EMULATOR_HYPSEUS-SINGE% singe vldp -framefile %GAMEDIR%\%BASENAME%.txt -script %GAMEDIR%\%BASENAME%.singe %INJECT%=%BASENAME%.commands %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\mame_libretro.dll %ROM% From 38975e0cea784e8c67b5e0ee67ab9a11d9ed1daa Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 17 Dec 2023 15:32:38 +0100 Subject: [PATCH 076/320] (macOS) Changed to more aggressive optimizations when building the FreeImage library --- tools/macOS_dependencies_setup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/macOS_dependencies_setup.sh b/tools/macOS_dependencies_setup.sh index cb0507333..40de54f97 100755 --- a/tools/macOS_dependencies_setup.sh +++ b/tools/macOS_dependencies_setup.sh @@ -213,7 +213,7 @@ cat << EOF | patch Makefile.osx - CPP_X86_64 = \$(shell xcrun -find clang++) MACOSX_DEPLOY = -mmacosx-version-min=\$(MACOSX_DEPLOYMENT_TARGET) -COMPILERFLAGS = -Os -fexceptions -fvisibility=hidden -DNO_LCMS -D__ANSI__ -+COMPILERFLAGS = -Os -fexceptions -fvisibility=hidden -DNO_LCMS -D__ANSI__ -DHAVE_UNISTD_H -DDISABLE_PERF_MEASUREMENT -DPNG_ARM_NEON_OPT=0 ++COMPILERFLAGS = -O2 -DNDEBUG -fexceptions -fvisibility=hidden -DNO_LCMS -D__ANSI__ -DHAVE_UNISTD_H -DDISABLE_PERF_MEASUREMENT -DPNG_ARM_NEON_OPT=0 COMPILERFLAGS_I386 = -arch i386 -COMPILERFLAGS_X86_64 = -arch x86_64 +COMPILERFLAGS_X86_64 = -arch arm64 @@ -232,7 +232,7 @@ cat << EOF | patch Makefile.osx - CPP_X86_64 = \$(shell xcrun -find clang++) MACOSX_DEPLOY = -mmacosx-version-min=\$(MACOSX_DEPLOYMENT_TARGET) -COMPILERFLAGS = -Os -fexceptions -fvisibility=hidden -DNO_LCMS -D__ANSI__ -+COMPILERFLAGS = -Os -fexceptions -fvisibility=hidden -DNO_LCMS -D__ANSI__ -DHAVE_UNISTD_H -DDISABLE_PERF_MEASUREMENT ++COMPILERFLAGS = -O2 -DNDEBUG -fexceptions -fvisibility=hidden -DNO_LCMS -D__ANSI__ -DHAVE_UNISTD_H -DDISABLE_PERF_MEASUREMENT COMPILERFLAGS_I386 = -arch i386 COMPILERFLAGS_X86_64 = -arch x86_64 COMPILERPPFLAGS = -Wno-ctor-dtor-privacy -D__ANSI__ -std=c++11 -stdlib=libc++ -Wc++11-narrowing From a0e41d21e99e8114820016cb1a2d3a20f7a26625 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 17 Dec 2023 15:34:30 +0100 Subject: [PATCH 077/320] Documentation update --- CHANGELOG.md | 8 ++ THEMES-DEV.md | 6 +- THEMES.md | 5 +- USERGUIDE-DEV.md | 228 ++++++++++++++++++++++++----------------------- 4 files changed, 130 insertions(+), 117 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f0d62698..045e57871 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,14 @@ * Renamed the application from EmulationStation Desktop Edition to ES-DE * Renamed the application data directory from .emulationstation to ES-DE +* Split the es_find_rules.xml and es_systems.xml files for Linux and BSD Unix into separate directories +* Added support for .webp, .svg and unanimated .gif files to the slideshow screensaver when using a custom image directory +* Changed the default slideshow custom image directory from slideshow/custom_images to screensavers/custom_slideshow +* Changed the custom slideshow image directory setting from ScreensaverSlideshowImageDir to ScreensaverSlideshowCustomDir +* Added the .zso file extension to the ps2 system +* Added the .zar file extension to the xbox360 system on Linux and Windows +* Added the .pk3 and .ipk3 file extensions to the doom system on Linux, Unix and Windows +* Added the .dirksimple file extension to the daphne and laserdisc systems * (Unix) Removed the -Minimized flag from the Visual Pinball launch command * (Windows) Updated the find rules for Visual Pinball to match the actual filenames of the official releases * Added workarounds for some mobile GPUs which do not support all OpenGL operations when using the BGRA pixel format diff --git a/THEMES-DEV.md b/THEMES-DEV.md index 90c4aeaea..ff40a61c4 100644 --- a/THEMES-DEV.md +++ b/THEMES-DEV.md @@ -18,7 +18,7 @@ https://github.com/lilbud/es-de-theme-stuff To test whether your theme includes support for all ES-DE systems, download one of the following archives which contain ROM directory trees fully populated with dummy files: -[ROMs_ALL_Unix.zip](tools/system-dirs-dummy-files/ROMs_ALL_Unix.zip)\ +[ROMs_ALL_Linux.zip](tools/system-dirs-dummy-files/ROMs_ALL_Linux.zip)\ [ROMs_ALL_macOS.zip](tools/system-dirs-dummy-files/ROMs_ALL_macOS.zip)\ [ROMs_ALL_Windows.zip](tools/system-dirs-dummy-files/ROMs_ALL_Windows.zip) @@ -1341,7 +1341,7 @@ For any given step, the configuration is parsed in the exact order that it's def ## Property data types * NORMALIZED_PAIR - two decimal values delimited by a space, for example `0.25 0.5` -* PATH - path to a resource. If the first character is a tilde (`~`) then it will be expanded to the user's home directory (`$HOME` for Unix and macOS and `%HOMEPATH%` for Windows) unless overridden using the --home command line option. If the first character is a dot (`.`) then the resource will be searched for relative to the location of the theme file, for example `./myfont.ttf` or `./../core/fonts/myfont.ttf` +* PATH - path to a resource. If the first character is a tilde (`~`) then it will be expanded to the user's home directory (`$HOME` for Linux, BSD Unix and macOS and `%HOMEPATH%` for Windows) unless overridden using the --home command line option. If the first character is a dot (`.`) then the resource will be searched for relative to the location of the theme file, for example `./myfont.ttf` or `./../core/fonts/myfont.ttf` * BOOLEAN - `true`/`1` or `false`/`0` * COLOR - a hexadecimal RGB or RGBA color value consisting of 6 or 8 digits. If a 6 digit value is used then the alpha channel will be set to `FF` (completely opaque) * UNSIGNED_INTEGER - an unsigned integer value @@ -2988,7 +2988,7 @@ Properties: #### helpsystem -The helpsystem is a special element that displays a context-sensitive list of actions the user can take at any time. You should try and keep the position constant throughout every screen. Note that this element does not have a zIndex value, instead it's always rendered on top of all other elements. +The helpsystem is a special element that displays a context-sensitive list of actions the user can take at any time. You should try and keep the position constant throughout every screen. Note that this element does not have a zIndex value, instead it's always rendered on top of all other elements. It also has to have its name attribute set to `help` or the configuration will not get loaded. It's possible to set this element as right-aligned or center-aligned using a combination of the `pos` and `origin` properties. For example `1 1` and `1 1` will place it in the lower right corner of the screen. diff --git a/THEMES.md b/THEMES.md index cf73cd044..50aee2746 100644 --- a/THEMES.md +++ b/THEMES.md @@ -16,7 +16,7 @@ https://github.com/lilbud/es-de-theme-stuff To test whether your theme includes support for all ES-DE systems, download one of the following archives which contain ROM directory trees fully populated with dummy files: -[ROMs_ALL_Unix.zip](tools/system-dirs-dummy-files/ROMs_ALL_Unix.zip)\ +[ROMs_ALL_Linux.zip](tools/system-dirs-dummy-files/ROMs_ALL_Linux.zip)\ [ROMs_ALL_macOS.zip](tools/system-dirs-dummy-files/ROMs_ALL_macOS.zip)\ [ROMs_ALL_Windows.zip](tools/system-dirs-dummy-files/ROMs_ALL_Windows.zip) @@ -2986,7 +2986,8 @@ Properties: #### helpsystem -The helpsystem is a special element that displays a context-sensitive list of actions the user can take at any time. You should try and keep the position constant throughout every screen. Note that this element does not have a zIndex value, instead it's always rendered on top of all other elements. +The helpsystem is a special element that displays a context-sensitive list of actions the user can take at any time. You should try and keep the position constant throughout every screen. Note that this element does not have a zIndex value, instead it's always rendered on top of all other elements. It also has to have its name attribute set to `help` or the configuration will not get loaded. + It's possible to set this element as right-aligned or center-aligned using a combination of the `pos` and `origin` properties. For example `1 1` and `1 1` will place it in the lower right corner of the screen. diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index 4d5dbc2a1..333767cb9 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -61,7 +61,7 @@ There's not really much to say about these operating systems, just install ES-DE Upon first startup, ES-DE will create its `~/.emulationstation` home directory. -On Unix this means `/home//.emulationstation`, on macOS `/Users//.emulationstation` and on Windows `C:\Users\\.emulationstation` or `EmulationStation-DE\.emulationstation` depending on whether the installer release or the portable release is used. +On Linux this means `/home//.emulationstation`, on macOS `/Users//.emulationstation` and on Windows `C:\Users\\.emulationstation` or `EmulationStation-DE\.emulationstation` depending on whether the installer release or the portable release is used. Also on first startup the configuration file `es_settings.xml` will be generated in the ES-DE home directory, containing all the application settings at their default values. Following this, a file named `es_systems.xml` will be loaded from the resources directory (which is part of the ES-DE installation). This file contains the game system definitions including which emulator to use per platform. For many systems there are also alternative emulators defined which can be applied system-wide or per game. How that works is explained later in this guide. A customized systems configuration file can also be used, as described in the next section below. @@ -71,7 +71,7 @@ There's an application log file created in the ES-DE home directory named `es_lo After ES-DE finds at least one game file, it will populate that game system and the application will start. If there are no game files, a dialog will be shown explaining that you need to install your game files into your ROM directory. You will also be given a choice to change that ROM directory path if you don't want to use the default one. As well you have the option to generate the complete game systems directory structure based on information in es_systems.xml. -When generating the directory structure, a file named systeminfo.txt will be created in each game system folder which will provide you with some information about the system. Here's an example for the _dos_ system as seen on Unix: +When generating the directory structure, a file named systeminfo.txt will be created in each game system folder which will provide you with some information about the system. Here's an example for the _dos_ system as seen on Linux: ``` System name: dos @@ -166,7 +166,7 @@ In theory it's possible to make a custom system entry and hardcode the path to a If you really insist on not placing your games into the ES-DE standard directory structure, a much better solution is to symlink the game directories into the standard directory. In this way you don't need to make a custom es_systems.xml file and any additional emulators and other configuration added to future ES-DE releases will just work after upgrading. -This is an example of symlinking the Super Nintendo game directory on Unix and macOS: +This is an example of symlinking the Super Nintendo game directory on Linux and macOS: ``` cd ~/ROMs ln -s ~/my_games/super_nintendo/ snes @@ -290,12 +290,16 @@ It's also possible to install ES-DE using [EmuDeck](https://www.emudeck.com) whi Unless RetroDECK is used, Flatpak releases of some emulators may need some extra permissions to be able to launch games placed on external devices such as a memory card. This is the case for instance for melonDS and RPCS3. The easiest way to do this is by using [Flatseal](https://flathub.org/apps/details/com.github.tchx84.Flatseal). The option you need to enable is generally _All system files_ in the _Filesystem_ section. If using EmuDeck some of these settings will be applied automatically via their installer. -If you are unfamiliar with Unix operating systems, make sure to at least read up on the concepts of _dotfiles_ (hidden files and directories), _home directories_ (including use of the tilde ~ character) and _symbolic links_ (symlinks): +If you are unfamiliar with Linux/Unix operating systems, make sure to at least read up on the concepts of _dotfiles_ (hidden files and directories), _home directories_ (including use of the tilde ~ character) and _symbolic links_ (symlinks): [https://en.wikipedia.org/wiki/Hidden_file_and_hidden_directory#Unix_and_Unix-like_environments](https://en.wikipedia.org/wiki/Hidden_file_and_hidden_directory#Unix_and_Unix-like_environments) \ [https://en.wikipedia.org/wiki/Home_directory#Unix](https://en.wikipedia.org/wiki/Home_directory#Unix) \ [https://en.wikipedia.org/wiki/Symbolic_link](https://en.wikipedia.org/wiki/Symbolic_link) +## Specific notes for Android + +The Android port of ES-DE is quite different than the other versions, so it has its specifics covered by a dedicated [ANDROID.md](ANDROID.md) document. + ## 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. @@ -310,9 +314,9 @@ In general, 720p works fine with the RPi 4, and 1080p is tolerable but not reall The game systems configuration file `es_systems.xml` is located in the ES-DE resources directory which is part of the application installation. As such this file is not intended to be modified directly. If system customizations are required, a separate es_systems.xml file should instead be placed in the `custom_systems` folder in the ES-DE home directory. -On Unix this means `/home//.emulationstation/custom_systems/es_systems.xml`, on macOS `/Users//.emulationstation/custom_systems/es_systems.xml` and on Windows `C:\Users\\.emulationstation\custom_systems\es_systems.xml` or `EmulationStation-DE\.emulationstation\custom_systems\es_systems.xml` depending on whether the installer release or the portable release is used. +On Linux this means `/home//.emulationstation/custom_systems/es_systems.xml`, on macOS `/Users//.emulationstation/custom_systems/es_systems.xml` and on Windows `C:\Users\\.emulationstation\custom_systems\es_systems.xml` or `EmulationStation-DE\.emulationstation\custom_systems\es_systems.xml` depending on whether the installer release or the portable release is used. -If you're using the AppImage release of ES-DE then the bundled es_systems.xml file is embedded in the AppImage together with the rest of the resources. You can extract it if you need it as a reference when creating your customized entries, or you can find it [here](https://gitlab.com/es-de/emulationstation-de/-/tree/master/resources/systems/unix). +If you're using the AppImage release of ES-DE then the bundled es_systems.xml file is embedded in the AppImage together with the rest of the resources. You can extract it if you need it as a reference when creating your customized entries, or you can find it [here](https://gitlab.com/es-de/emulationstation-de/-/tree/master/resources/systems/linux). Although it's possible to make a copy of the bundled configuration file, to modify it and then place it in this directory, that is not how the system customization is designed to be used. Instead the intention is that the file in `custom_systems` complements the bundled configuration, meaning only systems that are to be customized should be included. @@ -390,7 +394,7 @@ _The Orphaned data cleanup utility after successfully removing some gamelist.xml ES-DE fully supports high resolution displays such as 1440p, 4K, 6K, 8K, ultrawide monitors etc. But many emulators (e.g. RetroArch) will also run using the same resolution which may cause performance problems on slower machines or when using resource intensive shaders. Although some emulator cores will have options to set their internal resolution, they still need to be scaled up to the screen resolution. -A solution to this is to use the custom event scripts functionality to set a temporary resolution upon launching a game that will be reverted when returning to ES-DE. Such a setup is detailed in [INSTALL-DEV.md](INSTALL-DEV.md#custom-event-scripts) for Unix, but should hopefully be possible to implement similarly on Windows. When going for this setup it's important that the setting _Run in background (while game is launched)_ is disabled or ES-DE may not be able to correctly switch to the emulator window when launching games. +A solution to this is to use the custom event scripts functionality to set a temporary resolution upon launching a game that will be reverted when returning to ES-DE. Such a setup is detailed in [INSTALL-DEV.md](INSTALL-DEV.md#custom-event-scripts) for Linux, but should hopefully be possible to implement similarly on Windows. When going for this setup it's important that the setting _Run in background (while game is launched)_ is disabled or ES-DE may not be able to correctly switch to the emulator window when launching games. On macOS it's problematic to change screen resolutions on the fly or on a per-application basis as Apple has seemingly disabled most of this functionality in recent operating system releases. The only real option here is to lower the display resolution prior to launching ES-DE. @@ -541,7 +545,7 @@ _(Delete)_ Starts the media viewer in the gamelist view or the screensaver in the system view (if the _Enable screensaver controls_ setting is enabled). Used by some other minor functions as explained by the help system and/or this guide. **Y button**\ -_(Insert on Unix and Windows, F13 on macOS)_ +_(Insert on Linux and Windows, F13 on macOS)_ Marks games as favorites in the gamelist view (if the _Enable toggle favorites button_ option has been enabled). Used by some other minor functions as explained by the help system and/or this guide. @@ -559,7 +563,7 @@ There are several user-selectable theme options in the _UI Settings_ menu, most Themes are most easily installed using the built-in theme downloader, but you can also manually add them to your ES-DE home directory, i.e. `~/.emulationstation/themes/`. By just adding them there, one folder each, they will be found during startup and you can then choose between them via the _UI Settings_ menu on the main menu. If using the portable release of ES-DE on Windows, the .emulationstation folder can be found in the root of the EmulationStation-DE directory. -Although you should place additional themes in your ES-DE home directory, the default Slate and Modern themes are located in the installation folder as they come bundled with the application. For example this could be `/usr/share/emulationstation/themes/` on Unix, `/Applications/EmulationStation Desktop Edition.app/Contents/Resources/themes/` on macOS or `C:\Program Files\EmulationStation-DE\themes\` on Windows. If using the portable ES-DE release on Windows, the themes folder will be located in the root of the EmulationStation-DE directory. +Although you should place additional themes in your ES-DE home directory, the default Slate and Modern themes are located in the installation folder as they come bundled with the application. For example this could be `/usr/share/emulationstation/themes/` on Linux, `/Applications/EmulationStation Desktop Edition.app/Contents/Resources/themes/` on macOS or `C:\Program Files\EmulationStation-DE\themes\` on Windows. If using the portable ES-DE release on Windows, the themes folder will be located in the root of the EmulationStation-DE directory. Note that if using the AppImage release on Linux, then there is no installation folder as all files are contained inside the AppImage file. @@ -926,9 +930,9 @@ But for some systems a more elaborate setup is required, and the configuration f Let's start with the simple scenario of a single ROM file per game, which is the case for the majority of platforms. For this example we're setting up ES-DE to play Nintendo Entertainment System games. -The supported file extensions are listed in [unix/es_systems.xml](resources/systems/unix/es_systems.xml), [macos/es_systems.xml](resources/systems/macos/es_systems.xml) and [windows/es_systems.xml](resources/systems/windows/es_systems.xml) but if you generated the game system directories on first application startup or later via _Create/update system directories_ in the _Utilities_ menu, then there will be a file named systeminfo.txt in each game system directory that includes the list of supported file extensions. +The supported file extensions are listed in [linux/es_systems.xml](resources/systems/linux/es_systems.xml), [macos/es_systems.xml](resources/systems/macos/es_systems.xml) and [windows/es_systems.xml](resources/systems/windows/es_systems.xml) but if you generated the game system directories on first application startup or later via _Create/update system directories_ in the _Utilities_ menu, then there will be a file named systeminfo.txt in each game system directory that includes the list of supported file extensions. -Here is a simplified example from unix/es_systems.xml: +Here is a simplified example from linux/es_systems.xml: ```xml @@ -951,20 +955,20 @@ It's highly recommended to use filenames that correspond to the full name of the Symlinks are supported for both ROM directories and individual game files, but make sure to never symlink between files within the same system directory or there may be undefined application behavior when scraping, launching games etc. -The default game folder is ~/ROMs. On Unix this defaults to `/home//ROMs`, on macOS `/Users//ROMs` and on Windows `C:\Users\\ROMs` or `EmulationStation-DE\ROMs` depending on whether the installer release or the portable release is used. If the --home command line option was used to start ES-DE, the tilde symbol will resolve to whatever directory was passed as an argument to this option. +The default game folder is ~/ROMs. On Linux this defaults to `/home//ROMs`, on macOS `/Users//ROMs` and on Windows `C:\Users\\ROMs` or `EmulationStation-DE\ROMs` depending on whether the installer release or the portable release is used. If the --home command line option was used to start ES-DE, the tilde symbol will resolve to whatever directory was passed as an argument to this option. Assuming the default ROM directory is used, we need to create a subdirectory corresponding to the \ tag in es_systems.xml, for this example it's `nes`. So it would look something like the following: ``` -/home/myusername/ROMs/nes # Unix/Linux +/home/myusername/ROMs/nes # Linux /Users/myusername/ROMs/nes # macOS C:\Users\myusername\ROMs\nes # Windows installer EmulationStation-DE\ROMs\nes # Windows portable ``` -Now simply copy your game ROMs into this folder, and you should end up with something like this Unix example: +Now simply copy your game ROMs into this folder, and you should end up with something like this Linux example: ``` ~/ROMs/nes/Legend of Zelda, the.zip @@ -972,7 +976,7 @@ Now simply copy your game ROMs into this folder, and you should end up with some ~/ROMs/nes/Super Mario Bros. 3.zip ``` -Note that these directories are case sensitive on Unix, so creating a directory named `Nes` instead of `nes` won't work. +Note that these directories are case sensitive on Linux/Unix, so creating a directory named `Nes` instead of `nes` won't work. That's it, start ES-DE and the NES game system should be populated. You can now scrape information and media for the games, and assuming you've setup RetroArch correctly with the Mesen core, you can launch games. If you instead prefer to use any of the three alternative emulators listed above (Nestopia UE, FCEUmm or QuickNES) then you can install one of those cores instead and change your emulator preference using the _Alternative emulators_ interface in the _Other settings_ menu or on a per-game basis via the metadata editor. Note that alternative emulators are only available for some game systems. @@ -1103,9 +1107,9 @@ Not all systems are as simple to setup as what was described in the previous sec ### Apple II -On Unix/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. +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 Unix/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. +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. Once the LinApple or AppleWin emulator is installed no additional configuration is required, just drop your games into the ~/ROMs/apple2 folder and launch them from inside ES-DE. @@ -1282,7 +1286,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 [BigPEmu](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 [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. 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. @@ -1481,9 +1485,9 @@ Regardless of game setup method, per-game settings can be applied. If using the These computers as well as the Dragon 64 are slight varations of the Tandy Color Computer and as these machines are largely compatible with each other they're all emulated using the [XRoar](http://www.6809.org.uk/xroar) emulator. -This emulator is available for Unix/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. +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. -In order to emulate the Dragon 32 you need the ROM file `d32.rom` and to emulate the Dragon 64 or Tano Dragon you need the `d64rom1.rom` and `d64rom2.rom` files. It's unclear whether `ddos10.rom` will also be needed for some games and applications. Even without these files the emulator will probably start, but you will likely see random character on screen and few if any games will run correctly. On Unix/Linux these files need to be placed into the `~/.xroar/roms` directory and on macOS you need to place them in `~/Library/XRoar/roms`. Note that neither of these directories are automatically created by the emulator so you need to create them yourself. On Windows you simply place the ROM files into the emulator installation directory next to the xroar.exe binary. +In order to emulate the Dragon 32 you need the ROM file `d32.rom` and to emulate the Dragon 64 or Tano Dragon you need the `d64rom1.rom` and `d64rom2.rom` files. It's unclear whether `ddos10.rom` will also be needed for some games and applications. Even without these files the emulator will probably start, but you will likely see random character on screen and few if any games will run correctly. On Linux these files need to be placed into the `~/.xroar/roms` directory and on macOS you need to place them in `~/Library/XRoar/roms`. Note that neither of these directories are automatically created by the emulator so you need to create them yourself. On Windows you simply place the ROM files into the emulator installation directory next to the xroar.exe binary. Following this setup there is not much to it, launching a cartridge or cassette image file will automatically run the game. @@ -1737,7 +1741,7 @@ You could optionally create a .commands file as well to specify some additional The next step is to modify the _\.singe_ file to point to the exact game directory. -So for example on Unix, modify the file `~/ROMs/laserdisc/mononoke.singe/mononoke.singe` by changing the following line: +So for example on Linux, modify the file `~/ROMs/laserdisc/mononoke.singe/mononoke.singe` by changing the following line: ``` MYDIR = "singe/mononoke/" ``` @@ -2262,7 +2266,7 @@ For the _desktop_ system specifically, you can choose to suspend ES-DE while an Shortcuts are very easy to setup, on Windows you can simply copy any .lnk file from the Start Menu into the `ports` or `desktop` system folders and then you can launch them directly from inside ES-DE. You can also create shortcuts manually to any file by right clicking on it in Explorer and selecting _Create shortcut_. -Likewise on Unix you can copy any .desktop shortcut into these system directories and they can then be launched by ES-DE. +Likewise on Linux you can copy any .desktop shortcut into these system directories and they can then be launched by ES-DE. Here's an example on Windows: ``` @@ -2270,7 +2274,7 @@ Here's an example on Windows: ~\ROMs\ports\openxcom.lnk ``` -And here's an example on Unix: +And here's an example on Linux: ``` ~/ROMs/desktop/org.libretro.RetroArch.desktop ~/ROMs/desktop/spotify.desktop @@ -2286,7 +2290,7 @@ Here's an example using alias files on macOS: **Method 2, scripts** -For more advanced setups you may want to use scripts. While it's possible to add these files directly to the root of the system directories it's instead generally recommended to setup a separate directory per game as there may be more than a single file required. For instance you may have multiple game variants or mods or you may want to keep game data files within the ROM directory tree. Only examples for Unix are provided here, but it's the same process for Windows and macOS except that in Windows .bat batch files are used instead of shell scripts. +For more advanced setups you may want to use scripts. While it's possible to add these files directly to the root of the system directories it's instead generally recommended to setup a separate directory per game as there may be more than a single file required. For instance you may have multiple game variants or mods or you may want to keep game data files within the ROM directory tree. Only examples for Linux are provided here, but it's the same process for Windows and macOS except that in Windows .bat batch files are used instead of shell scripts. Here's a setup of GZDoom and vkQuake: ``` @@ -2367,7 +2371,7 @@ Apart from this you need to install the PS3 system firmware to use the emulator, **Method 1, shortcuts** -First install your games inside RPCS3, then right click on each entry and select _Create Shortcut_ followed by _Create Desktop Shortcut_. On Windows this will create shortcuts with the .lnk extension, on macOS they will have the .app extension and on Unix/Linux they will have the .desktop extension. +First install your games inside RPCS3, then right click on each entry and select _Create Shortcut_ followed by _Create Desktop Shortcut_. On Windows this will create shortcuts with the .lnk extension, on macOS they will have the .app extension and on Linux they will have the .desktop extension. Then simply move these files from your desktop to your ~/ROMs/ps3 directory and you're done. Here's an example of what this could look like on Linux: ``` @@ -2436,7 +2440,7 @@ Simply copy the Start Menu entries for your Steam games into the ~\ROMs\steam di ~\ROMs\steam\Undertale.url ``` -**Unix/Linux** +**Linux** Copy the .desktop shortcuts for your games into the ~/ROMs/steam directory. If your desktop environment does not allow you to copy them directly from the application menu then you may need to navigate to `~/.local/share/applications` using your file manager and copy the .desktop files from there. Alternatively you can also create shortcuts from inside Steam by right clicking on a game, selecting _Manage_ and then _Add desktop shortcut_. These file can then be moved from your desktop to your ~/ROMs/steam directory. This is an example of what you could end up with: @@ -2547,9 +2551,9 @@ Finally there's an emulator entry named _EKA2L1 [Custom device] (Standalone)_ wh 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 emulator is available for Unix/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. +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. -In order for XRoar to work correctly you need the ROM files `bas13.rom`, `disk11.rom` and `extbas11.rom`. Even without these files the emulator will probably start, but you will likely see random character on screen and few if any games will run correctly. On Unix/Linux these files need to be placed into the `~/.xroar/roms` directory and on macOS you need to place them in `~/Library/XRoar/roms`. Note that neither of these directories are automatically created by the emulator so you need to create them yourself. On Windows you simply place the ROM files into the emulator installation directory next to the xroar.exe binary. +In order for XRoar to work correctly you need the ROM files `bas13.rom`, `disk11.rom` and `extbas11.rom`. Even without these files the emulator will probably start, but you will likely see random character on screen and few if any games will run correctly. On Linux these files need to be placed into the `~/.xroar/roms` directory and on macOS you need to place them in `~/Library/XRoar/roms`. Note that neither of these directories are automatically created by the emulator so you need to create them yourself. On Windows you simply place the ROM files into the emulator installation directory next to the xroar.exe binary. Following this setup there is not much to it, launching a cartridge or cassette image file will automatically run the game. If launching a diskette image you will probably need to manually run the game file from inside the emulated operating system. Such commands are beyond the scope of this document, but the following [quick reference PDF](https://colorcomputerarchive.com/repo/Documents/Manuals/Hardware/Color%20Computer%20Disk%20System%20-%20Quick%20Reference%20Guide%20(Tandy).pdf) provides a good command overview. @@ -2561,7 +2565,7 @@ Two emulator entries are available for this system, _XRoar CoCo 2 NTSC (Standalo Tandy Corporation made the somewhat dumb decision of naming several unrelated computers as TRS-80 which has caused decades of confusion. The _Tandy TRS-80_ system in ES-DE emulates the original black-and-white TRS-80 Model I. If you want to emulate the TRS-80 Color Computer then you'll want to use the _Tandy Color Computer_ system instead. -The TRS-80 is emulated using [sdl2trs](https://gitlab.com/jengun/sdltrs) which is available for Unix/Linux and Windows, seemingly there is no macOS port. If you use a Debian-based Linux distribution there is a .deb package made by the developers and if you're using an Arch-based distribution you can install it using the AUR. For other distributions you may have to build from source code or download a pre-built binary from some other location. 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 sdl2trs will need to be installed in that case. +The TRS-80 is emulated using [sdl2trs](https://gitlab.com/jengun/sdltrs) which is available for Linux and Windows, seemingly there is no macOS port. If you use a Debian-based Linux distribution there is a .deb package made by the developers and if you're using an Arch-based distribution you can install it using the AUR. For other distributions you may have to build from source code or download a pre-built binary from some other location. 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 sdl2trs will need to be installed in that case. On Windows only the 64-bit release of the emulator is supported, with the filename `sdl2trs64.exe`. @@ -2594,11 +2598,11 @@ 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 Unix and macOS. +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. 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. -Likewise on Unix 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): +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 @@ -2773,7 +2777,7 @@ This directory can however be changed using the _Game media directory_ setting i See the [Supported game systems](USERGUIDE-DEV.md#supported-game-systems) table at the bottom of this guide for a list of all system names. -An example on Unix: +An example on Linux: ``` /home/myusername/.emulationstation/downloaded_media/c64/screenshots/ ``` @@ -2844,7 +2848,7 @@ This is not a bug as these are not really file extensions after all, it's just a For images .jpg and .png file extensions are supported and for videos .avi, .mkv, .mov, .mp4 and .wmv are supported. -Remember that on Unix filenames are case sensitive, and as well the file extensions must be in lower case, such as .png instead of .PNG or .Png or the file won't be found. +Remember that on Linux filenames are case sensitive, and as well the file extensions must be in lower case, such as .png instead of .PNG or .Png or the file won't be found. It's possible to change the game media directory location from within ES-DE, for this see the option _Game media directory_ in the _Other settings_ menu. @@ -3293,7 +3297,7 @@ Whether to search the custom image directory recursively. **Custom image directory** -The directory for custom images. The tilde `~` symbol can be used which will expand to the user home directory. It's also possible to use the %ESPATH% and %ROMPATH% variables which will set the directory relative to the ES-DE binary directory or the ROM directory. +The directory for custom images. The tilde `~` symbol can be used which will expand to the user home directory. It's also possible to use the %ESPATH% and %ROMPATH% variables which will set the directory relative to the ES-DE binary directory or the ROM directory. Images in the .jpg, .png, .webp, .svg and unanimated .gif formats are supported. #### Video screensaver settings @@ -3480,7 +3484,7 @@ If enabled, you will be able to select alternative emulators per game using the **Show hidden files and folders** -If this option is disabled, hidden files and folders within the ROM directory tree are excluded from ES-DE. On Unix and macOS this means those starting with a dot, and on Windows it's those set as hidden by using an NTFS attribute. This setting is only intended for special situations and is not to be confused with the next option below which hides files based on metadata configuration within ES-DE. When changing this setting ES-DE will automatically reload. +If this option is disabled, hidden files and folders within the ROM directory tree are excluded from ES-DE. On Linux and macOS this means those starting with a dot, and on Windows it's those set as hidden by using an NTFS attribute. This setting is only intended for special situations and is not to be confused with the next option below which hides files based on metadata configuration within ES-DE. When changing this setting ES-DE will automatically reload. **Show hidden games** @@ -3498,7 +3502,7 @@ If enabled, only games that have metadata saved to the gamelist.xml files will b MAME software list names for all arcade systems are automatically expanded to their full game names using a bundled MAME name translation file. By default any extra information from this file that is located inside brackets is removed. This includes information like region, version/revision, license, release date and more. By setting this option to disabled that information is retained. Note that this is only applicable for any game names which have not been scraped as the scaper will overwrite the expanded information with whatever value the scraper service returns. It's however possible to disable scraping of game names altogether as covered elsewhere in this guide. -**Disable desktop composition (requires restart)** _(Unix and X11/Xorg only)_ +**Disable desktop composition (requires restart)** _(Linux and X11/Xorg only)_ 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. @@ -3888,9 +3892,9 @@ The **System name** column corresponds to the directory where you should put you For the **Full name** column, text inside square brackets [] are comments and not part of the actual system name. -The **Default emulator** column lists the primary emulator as configured in es_systems.xml. If this differs between Unix, macOS and Windows then it's specified in square brackets, such as [UW] for Unix and Windows and [M] for macOS. +The **Default emulator** column lists the primary emulator as configured in es_systems.xml. If this differs between Linux, macOS and Windows then it's specified in square brackets, such as [LW] for Linux and Windows and [M] for macOS. -The **Alternative emulators** column lists additional emulators configured in es_systems.xml that can be selected per system and per game. In the same manner as the _Default emulator_ column, differences between Unix, macOS and Windows are marked using square brackets. +The **Alternative emulators** column lists additional emulators configured in es_systems.xml that can be selected per system and per game. In the same manner as the _Default emulator_ column, differences between Linux, macOS and Windows are marked using square brackets. The **Needs BIOS** column indicates if any BIOS/system ROMs are required. Additional details should be covered by the emulator documentation. @@ -3916,7 +3920,7 @@ On Windows the following emulators provide a way to inform ES-DE where they have * Yuzu Default emulator/Alternative emulators columns: \ -**[U]**: Unix/Linux, **[M]**: macOS, **[W]**: Windows +**[L]**: Linux, **[M]**: macOS, **[W]**: Windows All emulators are RetroArch cores unless marked as **(Standalone)**, **(Wine)** or **(Proton)** @@ -3927,25 +3931,25 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | 3do | 3DO Interactive Multiplayer | Opera | | Yes | | | adam | Coleco Adam | MAME [Diskette] **(Standalone)** | MAME [Tape] **(Standalone)**,
MAME [Cartridge] **(Standalone)**,
MAME [Software list] **(Standalone)** | Yes | | | ags | Adventure Game Studio Game Engine | _Shortcut or script_ | | No | | -| amiga | Commodore Amiga | PUAE | PUAE 2021,
FS-UAE **(Standalone)**,
Amiberry **(Standalone)** [UM] | 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)** [UM] | 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)** [UM] | 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)** [UM] | Yes | See the specific _Commodore Amiga and CDTV_ section elsewhere in this guide | +| 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 | -| apple2 | Apple II | LinApple **(Standalone)** [U],
Mednafen **(Standalone)** [M],
AppleWin **(Standalone)** [W] | Mednafen **(Standalone)** [UW],
MAME - Current,
MAME **(Standalone)** | Yes for Mednafen and MAME | See the specific _Apple II_ section elsewhere in this guide | +| 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)** [UW],
FB Alpha 2012,
Flycast,
Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Kronos [UW],
Model 2 Emulator **(Standalone)** [W],
Model 2 Emulator [Suspend ES-DE] **(Standalone)** [W],
Supermodel **(Standalone)** [UW],
_Shortcut or script_ | Depends | See the specific _Arcade and Neo Geo_ 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,
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 | | 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 | -| atari2600 | Atari 2600 | Stella | Stella 2014,
Stella **(Standalone)**,
Gopher2600 **(Standalone)** [UW],
ares **(Standalone)** | No | Single archive or ROM file | +| atari2600 | Atari 2600 | Stella | Stella 2014,
Stella **(Standalone)**,
Gopher2600 **(Standalone)** [LW],
ares **(Standalone)** | No | Single archive or ROM file | | 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)** [U],
BigPEmu **(Proton)** [U],
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)** [U] | BigPEmu **(Proton)** [U] | No | See the specific _Atari Jaguar and Atari Jaguar CD_ section elsewhere in this guide | +| 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 | | atarilynx | Atari Lynx | Handy | Beetle Lynx,
Mednafen **(Standalone)** | | | | 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 | | @@ -3953,44 +3957,44 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | bbcmicro | Acorn Computers BBC Micro | MAME **(Standalone)** | | Yes | Single archive or diskette image file | | c64 | Commodore 64 | VICE x64sc Accurate | VICE x64sc Accurate **(Standalone)**,
VICE x64 Fast,
VICE x64 SuperCPU,
VICE x128,
Frodo | 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 | CDi 2015 @,
MAME **(Standalone)** | Yes | Single .bin/.cue pair | -| cdtv | Commodore CDTV | PUAE | PUAE 2021,
FS-UAE **(Standalone)**,
Amiberry **(Standalone)** [UM] | Yes | See the specific _Commodore Amiga and CDTV_ section elsewhere in this guide | +| 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 | -| consolearcade | Console Arcade Systems | MAME - Current | MAME **(Standalone)**,
Flycast,
Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Kronos [UW],
Mednafen [Sega Saturn] **(Standalone)**,
Play! **(Standalone)**,
RPCS3 Shortcut **(Standalone)**,
Triforce **(Standalone)** [UW],
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)** [UW],
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)** [UW],
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)** [UW],
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)** [UW],
FB Alpha 2012,
FB Alpha 2012 CPS-3 | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | +| 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 | | 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)_ [U],
_AppImage (Keep ES-DE running)_ [U] | No | See the specific _Ports and desktop applications_ section elsewhere in this guide | -| doom | Doom | PrBoom | PrBoom+ **(Standalone)**,
Boom 3 [UW],
Boom 3 xp [UW],
_Shortcut or script_ | No | | +| 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 | +| doom | Doom | PrBoom | PrBoom+ **(Standalone)**,
Boom 3 [LW],
Boom 3 xp [LW],
_Shortcut or script_ | No | | | dos | DOS (PC) | DOSBox-Pure | DOSBox-Core,
DOSBox-SVN,
DOSBox-X **(Standalone)**,
DOSBox Staging **(Standalone)** | No | See the specific _DOS / PC_ section elsewhere in this guide | | dragon32 | Dragon Data Dragon 32 | XRoar Dragon 32 **(Standalone)** | XRoar Dragon 64 **(Standalone)** | Yes | See the specific _Dragon 32 and Tano Dragon_ section elsewhere in this guide | | dreamcast | Sega Dreamcast | Flycast | Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Redream **(Standalone)**,
Demul **(Standalone)** [W] | No | In separate folder interpreted as a file, with .m3u playlist if multi-disc game | | easyrpg | EasyRPG Game Engine | EasyRPG | EasyRPG Player **(Standalone)** | No | See the specific _EasyRPG Game Engine_ section elsewhere in this guide | | electron | Acorn Electron | MAME [Tape] **(Standalone)** | MAME [Diskette DFS] **(Standalone)**,
MAME [Diskette ADFS] **(Standalone)** | Yes | Single archive, or single tape or diskette image file | -| emulators | Emulators | _Suspend ES-DE_ | _Keep ES-DE running_,
_AppImage (Suspend ES-DE)_ [U],
_AppImage (Keep ES-DE running)_ [U] | No | See the specific _Ports and desktop applications_ section elsewhere in this guide | +| emulators | Emulators | _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 | | epic | Epic Games Store | Epic Games Store **(Standalone)** | | No | Shortcut (.desktop/.app/.lnk) file | -| famicom | Nintendo Family Computer | Mesen | Mesen **(Standalone)** [UW],
Nestopia UE,
Nestopia UE **(Standalone)** [U],
FCEUmm,
QuickNES,
puNES **(Standalone)** [UW],
Mednafen **(Standalone)**,
ares **(Standalone)**,
ares FDS **(Standalone)**,
3dSen **(Wine)** [U],
3dSen **(Proton)** [U],
3dSen **(Standalone)** [W] | No | Single archive or ROM file. For Famicom games in 3D see the specific _Nintendo NES and Famicom in 3D_ section elsewhere in this guide | +| famicom | Nintendo Family Computer | Mesen | Mesen **(Standalone)** [LW],
Nestopia UE,
Nestopia UE **(Standalone)** [L],
FCEUmm,
QuickNES,
puNES **(Standalone)** [LW],
Mednafen **(Standalone)**,
ares **(Standalone)**,
ares FDS **(Standalone)**,
3dSen **(Wine)** [L],
3dSen **(Proton)** [L],
3dSen **(Standalone)** [W] | No | Single archive or ROM file. For Famicom games in 3D see the specific _Nintendo NES and Famicom in 3D_ section elsewhere in this guide | | 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 | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | -| fbneo | FinalBurn Neo | FinalBurn Neo | FinalBurn Neo **(Standalone)** [UW] | Yes | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | -| fds | Nintendo Famicom Disk System | Mesen | Mesen **(Standalone)** [UW],
Nestopia UE,
Nestopia UE **(Standalone)** [U],
FCEUmm,
Mednafen **(Standalone)**,
ares **(Standalone)** | Yes | Single archive or ROM file | -| flash | Adobe Flash | Ruffle **(Standalone)** | Lightspark **(Standalone)** [U],
ArcadeFlashWeb **(Standalone)** [W] | No | Single .swf file | +| fbneo | FinalBurn Neo | FinalBurn Neo | FinalBurn Neo **(Standalone)** [LW] | Yes | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | +| fds | Nintendo Famicom Disk System | Mesen | Mesen **(Standalone)** [LW],
Nestopia UE,
Nestopia UE **(Standalone)** [L],
FCEUmm,
Mednafen **(Standalone)**,
ares **(Standalone)** | Yes | Single archive or ROM file | +| flash | Adobe Flash | Ruffle **(Standalone)** | Lightspark **(Standalone)** [L],
ArcadeFlashWeb **(Standalone)** [W] | No | Single .swf file | | fm7 | Fujitsu FM-7 | MAME [FM-7 Diskette] **(Standalone)** | MAME [FM-7 Tape] **(Standalone)**,
MAME [FM-7 Software list] **(Standalone)**,
MAME [FM77AV Diskette] **(Standalone)**,
MAME [FM77AV Tape] **(Standalone)**,
MAME [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 | MAME - Current,
MAME **(Standalone)** | Tsugaru **(Standalone)** [UW] | Yes | See the specific _Fujitsu FM Towns_ section elsewhere in this guide | +| fmtowns | Fujitsu FM Towns | MAME - Current,
MAME **(Standalone)** | Tsugaru **(Standalone)** [LW] | Yes | See the specific _Fujitsu FM Towns_ section elsewhere in this guide | | fpinball | Future Pinball | Future Pinball **(Standalone)** [W] | | No | | | gamate | Bit Corporation Gamate | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file | | gameandwatch | Nintendo Game and Watch | MAME Local Artwork **(Standalone)** | MAME **(Standalone)**,
Handheld Electronic (GW) | No | See the specific _LCD handheld games_ section elsewhere in this guide | | gamecom | Tiger Electronics Game.com | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file | | gamegear | Sega Game Gear | Genesis Plus GX | Genesis Plus GX Wide,
Gearsystem,
SMS Plus GX,
PicoDrive,
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | -| gb | Nintendo Game Boy | Gambatte | SameBoy,
SameBoy **(Standalone)**,
Gearboy,
Gearboy **(Standalone)** [UW],
TGB Dual,
Mesen-S,
Mesen **(Standalone)** [UW],
bsnes,
mGBA,
mGBA **(Standalone)**,
VBA-M,
VBA-M **(Standalone)**,
ares **(Standalone)**,
SkyEmu **(Standalone)** | No | Single archive or ROM file | +| gb | Nintendo Game Boy | Gambatte | SameBoy,
SameBoy **(Standalone)**,
Gearboy,
Gearboy **(Standalone)** [LW],
TGB Dual,
Mesen-S,
Mesen **(Standalone)** [LW],
bsnes,
mGBA,
mGBA **(Standalone)**,
VBA-M,
VBA-M **(Standalone)**,
ares **(Standalone)**,
SkyEmu **(Standalone)** | No | Single archive or ROM file | | gba | Nintendo Game Boy Advance | mGBA | mGBA **(Standalone)**,
VBA-M,
VBA-M **(Standalone)**,
VBA Next,
gpSP,
ares **(Standalone)**,
SkyEmu **(Standalone)** | Yes for ares | Single archive or ROM file | -| gbc | Nintendo Game Boy Color | Gambatte | SameBoy,
SameBoy **(Standalone)**,
Gearboy,
Gearboy **(Standalone)** [UW],
TGB Dual,
Mesen-S,
Mesen **(Standalone)** [UW],
bsnes,
mGBA,
mGBA **(Standalone)**,
VBA-M,
VBA-M **(Standalone)**,
ares **(Standalone)**,
SkyEmu **(Standalone)** | No | Single archive or ROM file | -| gc | Nintendo GameCube | Dolphin | Dolphin **(Standalone)**,
PrimeHack **(Standalone)** [UW],
Triforce **(Standalone)** [UW] | 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,
BlastEm,
BlastEm **(Standalone)** [U],
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | +| gbc | Nintendo Game Boy Color | Gambatte | SameBoy,
SameBoy **(Standalone)**,
Gearboy,
Gearboy **(Standalone)** [LW],
TGB Dual,
Mesen-S,
Mesen **(Standalone)** [LW],
bsnes,
mGBA,
mGBA **(Standalone)**,
VBA-M,
VBA-M **(Standalone)**,
ares **(Standalone)**,
SkyEmu **(Standalone)** | No | Single archive or ROM file | +| gc | Nintendo GameCube | Dolphin | Dolphin **(Standalone)**,
PrimeHack **(Standalone)** [LW],
Triforce **(Standalone)** [LW] | 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,
BlastEm,
BlastEm **(Standalone)** [L],
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | | gmaster | Hartung Game Master | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file | | gx4000 | Amstrad GX4000 | Caprice32 | CrocoDS,
MAME **(Standalone)** | No | Single archive or ROM file | | intellivision | Mattel Electronics Intellivision | FreeIntv | MAME - Current,
MAME **(Standalone)** | Yes | Single archive or ROM file | @@ -3999,20 +4003,20 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | laserdisc | LaserDisc Games | Hypseus [Daphne] **(Standalone)** | Hypseus [Singe] **(Standalone)**,
MAME - Current,
MAME **(Standalone)**,
DirkSimple | Depends | See the specific _LaserDisc Games_ section elsewhere in this guide | | lcdgames | LCD Handheld Games | MAME Local Artwork **(Standalone)** | MAME **(Standalone)**,
Handheld Electronic (GW) | No | See the specific _LCD handheld games_ section elsewhere in this guide | | lowresnx | LowRes NX Fantasy Console | LowRes NX | | No | Single ROM file | -| lutris | Lutris Open Gaming Platform | Lutris **(Standalone)** [U] | | No | See the specific _Lutris_ section elsewhere in this guide | +| 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)** [UW],
FB Alpha 2012,
Flycast,
Flycast **(Standalone)**,
Flycast Dojo **(Standalone)**,
Kronos [UW],
Model 2 Emulator **(Standalone)** [W],
Model 2 Emulator [Suspend ES-DE] **(Standalone)** [W],
Supermodel **(Standalone)** [UW],
_Shortcut or script_ | Depends | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | -| mame-advmame | AdvanceMAME | AdvanceMAME **(Standalone)** [UW] | | 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 2000,
MAME **(Standalone)**,
FinalBurn Neo,
FinalBurn Neo **(Standalone)** [LW],
FB Alpha 2012,
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)**,
ares **(Standalone)** | No | Single archive or ROM file | | megacd | Sega Mega-CD | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
ares **(Standalone)** | Yes | | | megacdjp | Sega Mega-CD [Japan] | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
ares **(Standalone)** | Yes | | -| megadrive | Sega Mega Drive | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
BlastEm,
BlastEm **(Standalone)** [U],
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | -| megadrivejp | Sega Mega Drive [Japan] | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
BlastEm,
BlastEm **(Standalone)** [U],
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | +| megadrive | Sega Mega Drive | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
BlastEm,
BlastEm **(Standalone)** [L],
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | +| megadrivejp | Sega Mega Drive [Japan] | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
BlastEm,
BlastEm **(Standalone)** [L],
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | | megaduck | Creatronic Mega Duck | SameDuck | MAME - Current,
MAME **(Standalone)** | No | Single archive or ROM file | | mess | Multi Emulator Super System | MESS 2015 | | | | -| model2 | Sega Model 2 | Model 2 Emulator **(Standalone)** [W],
MAME - Current [UM] | Model 2 Emulator [Suspend ES-DE] **(Standalone)** [W],
MAME - Current [W],
MAME **(Standalone)**,
Model 2 Emulator **(Wine)** [U],
Model 2 Emulator **(Proton)** [U] | Yes for MAME | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | -| model3 | Sega Model 3 | Supermodel **(Standalone)** [UW] | | No | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | +| model2 | Sega Model 2 | Model 2 Emulator **(Standalone)** [W],
MAME - Current [LM] | Model 2 Emulator [Suspend ES-DE] **(Standalone)** [W],
MAME - Current [W],
MAME **(Standalone)**,
Model 2 Emulator **(Wine)** [L],
Model 2 Emulator **(Proton)** [L] | Yes for MAME | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | +| model3 | Sega Model 3 | Supermodel **(Standalone)** [LW] | | No | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | | moto | Thomson MO/TO Series | Theodore | | | | | msx | MSX | blueMSX | fMSX,
openMSX **(Standalone)**,
openMSX No Machine **(Standalone)**,
ares **(Standalone)** | Yes | | | msx1 | MSX1 | blueMSX | fMSX,
openMSX **(Standalone)**,
openMSX No Machine **(Standalone)**,
ares **(Standalone)** | Yes | | @@ -4023,74 +4027,74 @@ 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 [UW],
Citra **(Standalone)** [M] | Citra 2018 [UW],
Citra **(Standalone)** [UW] | No | Single ROM file | -| n64 | Nintendo 64 | Mupen64Plus-Next | Mupen64Plus **(Standalone)**,
ParaLLEl N64,
simple64 **(Standalone)** [UW],
Rosalie's Mupen GUI **(Standalone)** [UW],
Project64 **(Standalone)** [W],
ares **(Standalone)**,
sixtyforce **(Standalone)** [M] | No | Single archive or ROM file | -| n64dd | Nintendo 64DD | ParaLLEl N64 [UW],
Mupen64Plus-Next [M] | Mupen64Plus-Next [UW],
ParaLLEl N64 [M],
Rosalie's Mupen GUI **(Standalone)** [UW],
ares **(Standalone)** | Yes | See the specific _Nintendo 64DD_ section elsewhere in this guide | -| nds | Nintendo DS | DeSmuME | DeSmuME 2015,
DeSmuME **(Standalone)** [U],
melonDS,
melonDS **(Standalone)**,
SkyEmu **(Standalone)** | No | Single archive or ROM file | -| neogeo | SNK Neo Geo | FinalBurn Neo | FinalBurn Neo **(Standalone)** [UW],
MAME **(Standalone)** | Yes | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | -| neogeocd | SNK Neo Geo CD | NeoCD | FinalBurn Neo,
FinalBurn Neo **(Standalone)** [U],
MAME **(Standalone)** | Yes | .chd (NeoCD and MAME only) or .cue file | -| neogeocdjp | SNK Neo Geo CD [Japan] | NeoCD | FinalBurn Neo,
FinalBurn Neo **(Standalone)** [U],
MAME **(Standalone)** | Yes | .chd (NeoCD and MAME only) or .cue file | -| nes | Nintendo Entertainment System | Mesen | Mesen **(Standalone)** [UW],
Nestopia UE,
Nestopia UE **(Standalone)** [U],
FCEUmm,
QuickNES,
puNES **(Standalone)** [UW],
Mednafen **(Standalone)**,
ares **(Standalone)**,
ares FDS **(Standalone)**,
3dSen **(Wine)** [U],
3dSen **(Proton)** [U],
3dSen **(Standalone)** [W] | No | Single archive or ROM file. For NES games in 3D see the specific _Nintendo NES and Famicom in 3D_ section elsewhere in this guide | -| ngage | Nokia N-Gage | EKA2L1 [Mounted] **(Standalone)** | EKA2L1 [Installed] **(Standalone)**,
EKA2L1 [Mounted] **(Wine)** [U],
EKA2L1 [Installed] **(Wine)** [U] | Yes | See the specific _Symbian and Nokia N-Gage_ section elsewhere in this guide | +| n3ds | Nintendo 3DS | Citra [LW],
Citra **(Standalone)** [M] | Citra 2018 [LW],
Citra **(Standalone)** [LW] | 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 | DeSmuME | DeSmuME 2015,
DeSmuME **(Standalone)** [L],
melonDS,
melonDS **(Standalone)**,
SkyEmu **(Standalone)** | No | Single archive or ROM file | +| neogeo | SNK Neo Geo | FinalBurn Neo | FinalBurn Neo **(Standalone)** [LW],
MAME **(Standalone)** | Yes | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | +| neogeocd | SNK Neo Geo CD | NeoCD | FinalBurn Neo,
FinalBurn Neo **(Standalone)** [L],
MAME **(Standalone)** | Yes | .chd (NeoCD and MAME only) or .cue file | +| neogeocdjp | SNK Neo Geo CD [Japan] | NeoCD | FinalBurn Neo,
FinalBurn Neo **(Standalone)** [L],
MAME **(Standalone)** | Yes | .chd (NeoCD and MAME only) or .cue file | +| nes | Nintendo Entertainment System | Mesen | Mesen **(Standalone)** [LW],
Nestopia UE,
Nestopia UE **(Standalone)** [L],
FCEUmm,
QuickNES,
puNES **(Standalone)** [LW],
Mednafen **(Standalone)**,
ares **(Standalone)**,
ares FDS **(Standalone)**,
3dSen **(Wine)** [L],
3dSen **(Proton)** [L],
3dSen **(Standalone)** [W] | No | Single archive or ROM file. For NES games in 3D see the specific _Nintendo NES and Famicom in 3D_ section elsewhere in this guide | +| ngage | Nokia N-Gage | EKA2L1 [Mounted] **(Standalone)** | EKA2L1 [Installed] **(Standalone)**,
EKA2L1 [Mounted] **(Wine)** [L],
EKA2L1 [Installed] **(Wine)** [L] | Yes | See the specific _Symbian and Nokia N-Gage_ section elsewhere in this guide | | ngp | SNK Neo Geo Pocket | Beetle NeoPop | RACE,
Mednafen **(Standalone)**,
ares **(Standalone)** | | | | ngpc | SNK Neo Geo Pocket Color | Beetle NeoPop | RACE,
Mednafen **(Standalone)**,
ares **(Standalone)** | | | | odyssey2 | Magnavox Odyssey 2 | O2EM | MAME - Current,
MAME **(Standalone)** | Yes | Single archive or ROM file | -| openbor | OpenBOR Game Engine | OpenBOR **(Standalone)** [UW] | | No | See the specific _OpenBOR_ section elsewhere in this guide | -| oric | Tangerine Computer Systems Oric | Oricutron **(Standalone)** [UW] | | | See the specific _Tangerine Computer Systems Oric_ section elsewhere in this guide | +| 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 | | 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 | | | pc98 | NEC PC-9800 Series | Neko Project II Kai | Neko Project II | | | -| pcarcade | PC Arcade Systems | Wine **(Standalone)** [U],
_Shortcut or script_ [MW] | Proton **(Standalone)** [U],
_AppImage_ [U],
_Shortcut or script_ [U] | No | | -| pcengine | NEC PC Engine | Beetle PCE | Beetle PCE FAST,
Mednafen **(Standalone)**,
Mesen **(Standalone)** [UW],
ares **(Standalone)** | No | Single archive or ROM file | -| pcenginecd | NEC PC Engine CD | Beetle PCE | Beetle PCE FAST,
Mednafen **(Standalone)**,
Mesen **(Standalone)** [UW],
ares **(Standalone)** | Yes | | +| pcarcade | PC Arcade Systems | Wine **(Standalone)** [L],
_Shortcut or script_ [MW] | Proton **(Standalone)** [L],
_AppImage_ [L],
_Shortcut or script_ [L] | No | | +| pcengine | NEC PC Engine | Beetle PCE | Beetle PCE FAST,
Mednafen **(Standalone)**,
Mesen **(Standalone)** [LW],
ares **(Standalone)** | No | Single archive or ROM file | +| pcenginecd | NEC PC Engine CD | Beetle PCE | Beetle PCE FAST,
Mednafen **(Standalone)**,
Mesen **(Standalone)** [LW],
ares **(Standalone)** | Yes | | | pcfx | NEC PC-FX | Beetle PC-FX | Mednafen **(Standalone)** | Yes | | | pico8 | PICO-8 Fantasy Console | PICO-8 **(Standalone)** | PICO-8 Splore **(Standalone)**,
Retro8 | No | See the specific _PICO-8_ section elsewhere in this guide | | plus4 | Commodore Plus/4 | VICE xplus4 | VICE xplus4 **(Standalone)** | No | Single archive or image file for tape, cartridge or single-diskette games, .m3u playlist for multi-diskette games | | pokemini | Nintendo Pokémon Mini | PokeMini | | No | | -| ports | Ports | _Shortcut or script_ | _AppImage_ [U],
ECWolf (Wolfenstein 3D),
NXEngine (Cave Story),
OpenLara (Tomb Raider) [UW],
Super Bros War | Yes for ECWolf | See the specific _Ports and desktop applications_ section elsewhere in this guide | -| ps2 | Sony PlayStation 2 | LRPS2 [UW],
PCSX2 **(Standalone)** [M] | PCSX2 [UW] @,
PCSX2 **(Standalone)** [UW],
PCSX2 Legacy **(Standalone)** @,
Play! **(Standalone)**,
AetherSX2 **(Standalone)** [M] | Yes except for Play! | | +| ports | Ports | _Shortcut or script_ | _AppImage_ [L],
ECWolf (Wolfenstein 3D),
NXEngine (Cave Story),
OpenLara (Tomb Raider) [LW],
Super Bros War | Yes for ECWolf | See the specific _Ports and desktop applications_ section elsewhere in this guide | +| ps2 | Sony PlayStation 2 | LRPS2 [LW],
PCSX2 **(Standalone)** [M] | PCSX2 [LW] @,
PCSX2 **(Standalone)** [LW],
PCSX2 Legacy **(Standalone)** @,
Play! **(Standalone)**,
AetherSX2 **(Standalone)** [M] | Yes except for Play! | | | ps3 | Sony PlayStation 3 | RPCS3 Shortcut **(Standalone)** | RPCS3 Directory **(Standalone)** | Yes | See the specific _Sony PlayStation 3_ section elsewhere in this guide | | ps4 | Sony PlayStation 4 | _Placeholder_ | | | | | psp | Sony PlayStation Portable | PPSSPP | PPSSPP **(Standalone)** | No | Single disc image file | -| psvita | Sony PlayStation Vita | Vita3K **(Standalone)** [UW] | | Yes | See the specific _Sony PlayStation Vita_ section elsewhere in this guide | +| psvita | Sony PlayStation Vita | Vita3K **(Standalone)** [LW] | | Yes | See the specific _Sony PlayStation Vita_ section elsewhere in this guide | | psx | Sony PlayStation | Beetle PSX | Beetle PSX HW,
PCSX ReARMed,
SwanStation,
DuckStation **(Standalone)**,
Mednafen **(Standalone)** | Yes | .chd file for single-disc games, .m3u playlist for multi-disc games | | pv1000 | Casio PV-1000 | MAME - Current | MAME **(Standalone)** | No | Single archive or ROM file | -| quake | Quake | TyrQuake | vitaQuake 2,
vitaQuake 2 [Rogue],
vitaQuake 2 [Xatrix],
vitaQuake 2 [Zaero],
vitaQuake 3 [UW],
_Shortcut or script_ | No | | +| quake | Quake | TyrQuake | vitaQuake 2,
vitaQuake 2 [Rogue],
vitaQuake 2 [Xatrix],
vitaQuake 2 [Zaero],
vitaQuake 3 [LW],
_Shortcut or script_ | No | | | samcoupe | MGT SAM Coupé | SimCoupé **(Standalone)** | | No | Single archive or ROM file | -| satellaview | Nintendo Satellaview | Snes9x - Current | Snes9x 2010,
Snes9x **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
bsnes **(Standalone)** [UW],
Mesen-S,
Mesen **(Standalone)** [UW],
ares **(Standalone)** | | | -| saturn | Sega Saturn | Beetle Saturn | Kronos [UW],
YabaSanshiro [UW],
Yabause,
Mednafen **(Standalone)**,
SSF **(Standalone)** [W] | Yes | In separate folder interpreted as a file, with .m3u playlist if multi-disc game | -| saturnjp | Sega Saturn [Japan] | Beetle Saturn | Kronos [UW],
YabaSanshiro [UW],
Yabause,
Mednafen **(Standalone)**,
SSF **(Standalone)** [W] | Yes | In separate folder interpreted as a file, with .m3u playlist if multi-disc game | +| satellaview | Nintendo Satellaview | Snes9x - Current | Snes9x 2010,
Snes9x **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
bsnes **(Standalone)** [LW],
Mesen-S,
Mesen **(Standalone)** [LW],
ares **(Standalone)** | | | +| saturn | Sega Saturn | Beetle Saturn | Kronos [LW],
YabaSanshiro [LW],
Yabause,
Mednafen **(Standalone)**,
SSF **(Standalone)** [W] | Yes | In separate folder interpreted as a file, with .m3u playlist if multi-disc game | +| saturnjp | Sega Saturn [Japan] | Beetle Saturn | Kronos [LW],
YabaSanshiro [LW],
Yabause,
Mednafen **(Standalone)**,
SSF **(Standalone)** [W] | Yes | In separate folder interpreted as a file, with .m3u playlist if multi-disc game | | scummvm | ScummVM Game Engine | ScummVM | ScummVM **(Standalone)** | No | See the specific _ScummVM_ section elsewhere in this guide | | scv | Epoch Super Cassette Vision | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file | | sega32x | Sega Mega Drive 32X | PicoDrive | ares **(Standalone)** | No | Single archive or ROM file | | sega32xjp | Sega Super 32X [Japan] | PicoDrive | ares **(Standalone)** | No | Single archive or ROM file | | sega32xna | Sega Genesis 32X [North America] | PicoDrive | ares **(Standalone)** | No | Single archive or ROM file | | segacd | Sega CD | Genesis Plus GX | Genesis Plus GX Wide,
PicoDrive,
ares **(Standalone)** | Yes | | -| sfc | Nintendo SFC (Super Famicom) | Snes9x - Current | Snes9x 2010,
Snes9x **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
bsnes **(Standalone)** [UW],
Beetle Supafaust [UW],
Mesen-S,
Mesen **(Standalone)** [UW],
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | +| sfc | Nintendo SFC (Super Famicom) | Snes9x - Current | Snes9x 2010,
Snes9x **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
bsnes **(Standalone)** [LW],
Beetle Supafaust [LW],
Mesen-S,
Mesen **(Standalone)** [LW],
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | | sg-1000 | Sega SG-1000 | Genesis Plus GX | Genesis Plus GX Wide,
Gearsystem,
blueMSX,
ares **(Standalone)** | No | | -| sgb | Nintendo Super Game Boy | Mesen-S | Mesen **(Standalone)** [UW],
SameBoy,
mGBA,
mGBA **(Standalone)** | | Single archive or ROM file | -| snes | Nintendo SNES (Super Nintendo) | Snes9x - Current | Snes9x 2010,
Snes9x **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
bsnes **(Standalone)** [UW],
Beetle Supafaust [UW],
Mesen-S,
Mesen **(Standalone)** [UW],
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | -| snesna | Nintendo SNES (Super Nintendo) [North America] | Snes9x - Current | Snes9x 2010,
Snes9x **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
bsnes **(Standalone)** [UW],
Beetle Supafaust [UW],
Mesen-S,
Mesen **(Standalone)** [UW],
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | +| sgb | Nintendo Super Game Boy | Mesen-S | Mesen **(Standalone)** [LW],
SameBoy,
mGBA,
mGBA **(Standalone)** | | Single archive or ROM file | +| snes | Nintendo SNES (Super Nintendo) | Snes9x - Current | Snes9x 2010,
Snes9x **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
bsnes **(Standalone)** [LW],
Beetle Supafaust [LW],
Mesen-S,
Mesen **(Standalone)** [LW],
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | +| snesna | Nintendo SNES (Super Nintendo) [North America] | Snes9x - Current | Snes9x 2010,
Snes9x **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
bsnes **(Standalone)** [LW],
Beetle Supafaust [LW],
Mesen-S,
Mesen **(Standalone)** [LW],
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | | solarus | Solarus Game Engine | Solarus **(Standalone)** | | No | Single .solarus game file | | spectravideo | Spectravideo | blueMSX | | | | | steam | Valve Steam | Steam **(Standalone)** | | No | See the specific _Steam_ section elsewhere in this guide | -| stv | Sega Titan Video Game System | Kronos [UW],
MAME - Current [M] | MAME - Current [UW],
MAME **(Standalone)**,
Mednafen **(Standalone)** | Yes | Single archive file | -| sufami | Bandai SuFami Turbo | Snes9x - Current | Snes9x 2010,
Snes9x **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
bsnes **(Standalone)** [UW],
ares **(Standalone)** | | | +| stv | Sega Titan Video Game System | Kronos [LW],
MAME - Current [M] | MAME - Current [LW],
MAME **(Standalone)**,
Mednafen **(Standalone)** | Yes | Single archive file | +| sufami | Bandai SuFami Turbo | Snes9x - Current | Snes9x 2010,
Snes9x **(Standalone)**,
bsnes,
bsnes-hd,
bsnes-mercury Accuracy,
bsnes **(Standalone)** [LW],
ares **(Standalone)** | | | | supergrafx | NEC SuperGrafx | Beetle SuperGrafx | Beetle PCE,
ares **(Standalone)** | | | | 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 | -| switch | Nintendo Switch | Yuzu **(Standalone)** [UW],
Ryujinx **(Standalone)** [M] | Ryujinx **(Standalone)** [UW] | Yes | | +| switch | Nintendo Switch | Yuzu **(Standalone)** [LW],
Ryujinx **(Standalone)** [M] | Ryujinx **(Standalone)** [LW] | 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 | -| tg16 | NEC TurboGrafx-16 | Beetle PCE | Beetle PCE FAST,
Mednafen **(Standalone)**,
Mesen **(Standalone)** [UW],
ares **(Standalone)** | No | Single archive or ROM file | -| tg-cd | NEC TurboGrafx-CD | Beetle PCE | Beetle PCE FAST,
Mednafen **(Standalone)**,
Mesen **(Standalone)** [UW],
ares **(Standalone)** | Yes | | +| tg16 | NEC TurboGrafx-16 | Beetle PCE | Beetle PCE FAST,
Mednafen **(Standalone)**,
Mesen **(Standalone)** [LW],
ares **(Standalone)** | No | Single archive or ROM file | +| tg-cd | NEC TurboGrafx-CD | Beetle PCE | Beetle PCE FAST,
Mednafen **(Standalone)**,
Mesen **(Standalone)** [LW],
ares **(Standalone)** | Yes | | | ti99 | Texas Instruments TI-99 | MAME **(Standalone)** | | Yes | See the specific _Texas Instruments TI-99_ section elsewhere in this guide | | tic80 | TIC-80 Fantasy Computer | TIC-80 | TIC-80 **(Standalone)** | No | Single .tic file | | to8 | Thomson TO8 | Theodore | | | | -| triforce | Namco-Sega-Nintendo Triforce | Triforce **(Standalone)** [UW] | | No | | -| trs-80 | Tandy TRS-80 | sdl2trs DOS Diskette **(Standalone)** [UW] | sdl2trs Bootable Diskette **(Standalone)** [UW],
sdl2trs CMD File **(Standalone)** [UW] | Yes | See the specific _Tandy TRS-80_ section elsewhere in this guide | -| type-x | Taito Type X | Wine **(Standalone)** [U],
_Shortcut or script_ [MW] | Proton **(Standalone)** [U],
_AppImage_ [U],
_Shortcut or script_ [U] | No | | +| triforce | Namco-Sega-Nintendo Triforce | Triforce **(Standalone)** [LW] | | No | | +| trs-80 | Tandy TRS-80 | sdl2trs DOS Diskette **(Standalone)** [LW] | sdl2trs Bootable Diskette **(Standalone)** [LW],
sdl2trs CMD File **(Standalone)** [LW] | Yes | See the specific _Tandy TRS-80_ section elsewhere in this guide | +| type-x | Taito Type X | Wine **(Standalone)** [L],
_Shortcut or script_ [MW] | Proton **(Standalone)** [L],
_AppImage_ [L],
_Shortcut or script_ [L] | No | | | uzebox | Uzebox Open Source Console | Uzem | | | | | vectrex | GCE Vectrex | vecx | MAME - Current,
MAME **(Standalone)** | Yes for MAME | Single archive or ROM file | | vic20 | Commodore VIC-20 | VICE xvic | VICE xvic **(Standalone)** | No | Single archive or tape, cartridge or diskette image file | @@ -4099,18 +4103,18 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | vpinball | Visual Pinball | Visual Pinball **(Standalone)** | | No | See the specific _Visual Pinball_ section elsewhere in this guide | | vsmile | VTech V.Smile | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file | | wasm4 | WASM-4 Fantasy Console | WASM-4 | | No | Single .wasm file | -| wii | Nintendo Wii | Dolphin | Dolphin **(Standalone)**,
PrimeHack **(Standalone)** [UW] | No | | +| wii | Nintendo Wii | Dolphin | Dolphin **(Standalone)**,
PrimeHack **(Standalone)** [LW] | No | | | wiiu | Nintendo Wii U | Cemu **(Standalone)** | | No | See the specific _Nintendo Wii U_ section elsewhere in this guide | -| windows | Microsoft Windows | _Suspend ES-DE_ | _Keep ES-DE running_,
_AppImage (Suspend ES-DE)_ [U],
_AppImage (Keep ES-DE running)_ [U] | No | Shortcut (.desktop/.app/.lnk) file, script or AppImage | -| windows3x | Microsoft Windows 3.x | DOSBox-X **(Standalone)** | DOSBox-Pure,
_Shortcut or script (Suspend ES-DE)_,
_Shortcut or script (Keep ES-DE running)_,
_AppImage (Suspend ES-DE)_ [U],
_AppImage (Keep ES-DE running)_ [U] | No | See the specific _Microsoft Windows 3.x and 9x_ section elsewhere in this guide | -| windows9x | Microsoft Windows 9x | DOSBox-X **(Standalone)** | DOSBox-Pure,
_Shortcut or script (Suspend ES-DE)_,
_Shortcut or script (Keep ES-DE running)_,
_AppImage (Suspend ES-DE)_ [U],
_AppImage (Keep ES-DE running)_ [U] | No | See the specific _Microsoft Windows 3.x and 9x_ section elsewhere in this guide | +| windows | Microsoft Windows | _Suspend ES-DE_ | _Keep ES-DE running_,
_AppImage (Suspend ES-DE)_ [L],
_AppImage (Keep ES-DE running)_ [L] | No | Shortcut (.desktop/.app/.lnk) file, script or AppImage | +| windows3x | Microsoft Windows 3.x | DOSBox-X **(Standalone)** | DOSBox-Pure,
_Shortcut or script (Suspend ES-DE)_,
_Shortcut or script (Keep ES-DE running)_,
_AppImage (Suspend ES-DE)_ [L],
_AppImage (Keep ES-DE running)_ [L] | No | See the specific _Microsoft Windows 3.x and 9x_ section elsewhere in this guide | +| windows9x | Microsoft Windows 9x | DOSBox-X **(Standalone)** | DOSBox-Pure,
_Shortcut or script (Suspend ES-DE)_,
_Shortcut or script (Keep ES-DE running)_,
_AppImage (Suspend ES-DE)_ [L],
_AppImage (Keep ES-DE running)_ [L] | No | See the specific _Microsoft Windows 3.x and 9x_ section elsewhere in this guide | | 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 | | | 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)** [U] | xenia **(Proton)** [U],
_Shortcut or script_ [U] | No | See the specific _Microsoft Xbox 360_ section elsewhere in this guide | +| 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 | | | zx81 | Sinclair ZX81 | EightyOne | | | | -| zxnext | Sinclair ZX Spectrum Next | #CSpect **(Standalone)** [UW],
ZEsarUX **(Standalone)** [M] | ZEsarUX **(Standalone)** [UW] | No | In separate folder interpreted as a file | +| 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 | | From 39d3072994c669fbb058267c75f0621cd2e163e0 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 17 Dec 2023 17:02:52 +0100 Subject: [PATCH 078/320] Minor change to a dialog message --- es-app/src/views/ViewController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 0ba1658df..9a7f069c4 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -140,7 +140,7 @@ void ViewController::setMenuColors() void ViewController::legacyAppDataDialog() { const std::string upgradeMessage { - "AS OF ES-DE 3.0 THE APPLICATION DATA DIRECTORY HAS CHANGED FROM \".emulationstation\" to " + "AS OF ES-DE 3.0.0 THE APPLICATION DATA DIRECTORY HAS CHANGED FROM \".emulationstation\" to " "\"ES-DE\"\nPLEASE RENAME YOUR CURRENT DATA DIRECTORY:\n" + Utils::FileSystem::getAppDataDirectory().string() + "\nTO THE FOLLOWING:\n" + Utils::FileSystem::getAppDataDirectory().parent_path().append("ES-DE").string()}; From d4d41b58fdd0964e5f06ba9d6dbab381209d5c02 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 17 Dec 2023 21:18:08 +0100 Subject: [PATCH 079/320] Small code formatting change --- es-app/src/views/SystemView.cpp | 3 ++- es-app/src/views/ViewController.cpp | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index d6a55df72..789077a63 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -1434,7 +1434,8 @@ void SystemView::renderElements(const glm::mat4& parentTrans, bool abovePrimary) // If it's a gamelist to system transition and these animations are set to slide. if (static_cast(Settings::getInstance()->getInt( "TransitionsGamelistToSystem")) == ViewTransitionAnimation::SLIDE && - viewState.previouslyViewed == ViewController::ViewMode::GAMELIST) + viewState.previouslyViewed == ViewController::ViewMode::GAMELIST && + ViewController::getInstance()->isCameraMoving()) stationaryApplicable = true; for (int i {renderBefore}; i <= renderAfter; ++i) { diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 9a7f069c4..24208fb15 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -140,8 +140,8 @@ void ViewController::setMenuColors() void ViewController::legacyAppDataDialog() { const std::string upgradeMessage { - "AS OF ES-DE 3.0.0 THE APPLICATION DATA DIRECTORY HAS CHANGED FROM \".emulationstation\" to " - "\"ES-DE\"\nPLEASE RENAME YOUR CURRENT DATA DIRECTORY:\n" + + "AS OF ES-DE 3.0.0 THE APPLICATION DATA DIRECTORY HAS CHANGED FROM \".emulationstation\" " + "to \"ES-DE\"\nPLEASE RENAME YOUR CURRENT DATA DIRECTORY:\n" + Utils::FileSystem::getAppDataDirectory().string() + "\nTO THE FOLLOWING:\n" + Utils::FileSystem::getAppDataDirectory().parent_path().append("ES-DE").string()}; From 183862d9741c60cacc4abaf5b7adf32b65ba41ae Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 17 Dec 2023 21:45:42 +0100 Subject: [PATCH 080/320] Added theme engine support for the 1:1 display aspect ratio --- es-core/src/ThemeData.cpp | 6 ++++-- es-core/src/renderers/Renderer.cpp | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 52a1f99af..45d248cc1 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -66,7 +66,8 @@ std::vector> ThemeData::sSupportedAspectRati {"21:9", "21:9"}, {"21:9_vertical", "21:9 vertical"}, {"32:9", "32:0"}, - {"32:9_vertical", "32:9 vertical"}}; + {"32:9_vertical", "32:9 vertical"}, + {"1:1", "1:1"}}; std::map ThemeData::sAspectRatioMap { {"16:9", 1.7777f}, @@ -82,7 +83,8 @@ std::map ThemeData::sAspectRatioMap { {"21:9", 2.3703f}, {"21:9_vertical", 0.4219f}, {"32:9", 3.5555f}, - {"32:9_vertical", 0.2813f}}; + {"32:9_vertical", 0.2813f}, + {"1:1", 1.0f}}; std::map> ThemeData::sPropertyAttributeMap // The data type is defined by the parent property. diff --git a/es-core/src/renderers/Renderer.cpp b/es-core/src/renderers/Renderer.cpp index 712ef54fa..85c285b9c 100644 --- a/es-core/src/renderers/Renderer.cpp +++ b/es-core/src/renderers/Renderer.cpp @@ -163,7 +163,7 @@ bool Renderer::createWindow() sScreenHeight = tempVal; } - if (sScreenHeight > sScreenWidth) + if (sScreenHeight >= sScreenWidth) sIsVerticalOrientation = true; else sIsVerticalOrientation = false; From 3abd8d9035fd20080dd2b4509943b0353ed8fdfb Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 18 Dec 2023 01:16:32 +0100 Subject: [PATCH 081/320] Added a 'renderDuringTransitions' property to the image element --- es-app/src/views/GamelistView.cpp | 26 ++++++++++++++++-- es-app/src/views/SystemView.cpp | 33 +++++++++++++++++++---- es-core/src/GuiComponent.cpp | 1 + es-core/src/GuiComponent.h | 2 ++ es-core/src/ThemeData.cpp | 1 + es-core/src/components/ImageComponent.cpp | 3 +++ 6 files changed, 59 insertions(+), 7 deletions(-) diff --git a/es-app/src/views/GamelistView.cpp b/es-app/src/views/GamelistView.cpp index c1784a376..962e69c87 100644 --- a/es-app/src/views/GamelistView.cpp +++ b/es-app/src/views/GamelistView.cpp @@ -416,6 +416,28 @@ void GamelistView::render(const glm::mat4& parentTrans) const ViewController::State viewState {ViewController::getInstance()->getState()}; bool stationaryApplicable {false}; + auto renderChildFunc = [this, &viewState](int i, glm::mat4 trans) { + if (getChild(i)->getRenderDuringTransitions()) { + getChild(i)->render(trans); + } + else { + bool renderChild {false}; + if (!ViewController::getInstance()->isCameraMoving()) + renderChild = true; + else if (viewState.previouslyViewed == ViewController::ViewMode::NOTHING) + renderChild = true; + else if (viewState.viewing == viewState.previouslyViewed) + renderChild = true; + else if (static_cast(Settings::getInstance()->getInt( + "TransitionsGamelistToSystem")) != ViewTransitionAnimation::SLIDE && + viewState.viewing == ViewController::ViewMode::SYSTEM_SELECT) + renderChild = true; + + if (renderChild) + getChild(i)->render(trans); + } + }; + // If it's the startup animation, then don't apply stationary properties. if (viewState.previouslyViewed == ViewController::ViewMode::NOTHING) stationaryApplicable = false; @@ -467,11 +489,11 @@ void GamelistView::render(const glm::mat4& parentTrans) if (viewState.getSystem() != mRoot->getSystem()) continue; mRenderer->popClipRect(); - getChild(i)->render(mRenderer->getIdentity()); + renderChildFunc(i, mRenderer->getIdentity()); clipRectFunc(); } else { - getChild(i)->render(trans); + renderChildFunc(i, trans); } } diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 789077a63..e54c7263b 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -1476,10 +1476,33 @@ void SystemView::renderElements(const glm::mat4& parentTrans, bool abovePrimary) glm::ivec2 {static_cast(mSize.x), static_cast(mSize.y)}); }; + auto renderChildFunc = [this, &viewState](GuiComponent* child, glm::mat4 trans) { + if (child->getRenderDuringTransitions()) { + child->render(trans); + } + else { + bool renderChild {false}; + if (!ViewController::getInstance()->isCameraMoving()) + renderChild = true; + else if (viewState.previouslyViewed == ViewController::ViewMode::NOTHING) + renderChild = true; + else if (viewState.viewing == viewState.previouslyViewed) + renderChild = true; + else if (static_cast( + Settings::getInstance()->getInt("TransitionsSystemToGamelist")) != + ViewTransitionAnimation::SLIDE && + viewState.viewing == ViewController::ViewMode::GAMELIST) + renderChild = true; + + if (renderChild) + child->render(trans); + } + }; + clipRectFunc(); if (mSystemElements.size() > static_cast(index)) { - for (auto child : mSystemElements[index].children) { + for (GuiComponent* child : mSystemElements[index].children) { bool renderChild {true}; bool childStationary {false}; if (stationaryApplicable) { @@ -1520,11 +1543,11 @@ void SystemView::renderElements(const glm::mat4& parentTrans, bool abovePrimary) if (renderChild) { if (childStationary) { mRenderer->popClipRect(); - child->render(mRenderer->getIdentity()); + renderChildFunc(child, mRenderer->getIdentity()); clipRectFunc(); } else { - child->render(elementTrans); + renderChildFunc(child, elementTrans); } } } @@ -1534,11 +1557,11 @@ void SystemView::renderElements(const glm::mat4& parentTrans, bool abovePrimary) if (renderChild) { if (childStationary) { mRenderer->popClipRect(); - child->render(mRenderer->getIdentity()); + renderChildFunc(child, mRenderer->getIdentity()); clipRectFunc(); } else { - child->render(elementTrans); + renderChildFunc(child, elementTrans); } } } diff --git a/es-core/src/GuiComponent.cpp b/es-core/src/GuiComponent.cpp index 9673ab874..6f36be539 100644 --- a/es-core/src/GuiComponent.cpp +++ b/es-core/src/GuiComponent.cpp @@ -31,6 +31,7 @@ GuiComponent::GuiComponent() , mRotationOrigin {0.5f, 0.5f} , mSize {0.0f, 0.0f} , mStationary {Stationary::NEVER} + , mRenderDuringTransitions {true} , mBrightness {0.0f} , mOpacity {1.0f} , mSaturation {1.0f} diff --git a/es-core/src/GuiComponent.h b/es-core/src/GuiComponent.h index bf83c26b0..261c25fa4 100644 --- a/es-core/src/GuiComponent.h +++ b/es-core/src/GuiComponent.h @@ -117,6 +117,7 @@ public: void setRotationOrigin(glm::vec2 origin) { setRotationOrigin(origin.x, origin.y); } const Stationary getStationary() const { return mStationary; } + const bool getRenderDuringTransitions() const { return mRenderDuringTransitions; } virtual glm::vec2 getSize() const { return mSize; } void setSize(const glm::vec2& size) { setSize(size.x, size.y); } @@ -400,6 +401,7 @@ protected: glm::vec2 mRotationOrigin; glm::vec2 mSize; Stationary mStationary; + bool mRenderDuringTransitions; float mBrightness; float mOpacity; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 45d248cc1..2e4ef0d62 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -275,6 +275,7 @@ std::map> {"rotation", FLOAT}, {"rotationOrigin", NORMALIZED_PAIR}, {"stationary", STRING}, + {"renderDuringTransitions", BOOLEAN}, {"flipHorizontal", BOOLEAN}, {"flipVertical", BOOLEAN}, {"path", PATH}, diff --git a/es-core/src/components/ImageComponent.cpp b/es-core/src/components/ImageComponent.cpp index c48f5de10..37f59a7e0 100644 --- a/es-core/src/components/ImageComponent.cpp +++ b/es-core/src/components/ImageComponent.cpp @@ -557,6 +557,9 @@ void ImageComponent::applyTheme(const std::shared_ptr& theme, << element.substr(6) << "\" defined as \"" << stationary << "\""; } + if (elem->has("renderDuringTransitions")) + mRenderDuringTransitions = elem->get("renderDuringTransitions"); + // Enable linear interpolation by default if element is arbitrarily rotated. if (properties & ThemeFlags::ROTATION && elem->has("rotation")) { const float rotation {std::abs(elem->get("rotation"))}; From c41cc5a94fe4768b0fb9aaaf0a061ce9fc637a79 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 18 Dec 2023 01:19:23 +0100 Subject: [PATCH 082/320] Documentation update --- CHANGELOG.md | 3 +++ THEMES-DEV.md | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 045e57871..e47b8096a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,11 +20,14 @@ * Added the .dirksimple file extension to the daphne and laserdisc systems * (Unix) Removed the -Minimized flag from the Visual Pinball launch command * (Windows) Updated the find rules for Visual Pinball to match the actual filenames of the official releases +* Added a "renderDuringTransitions" property to the image element +* Added support for the 1:1 display aspect ratio * Added workarounds for some mobile GPUs which do not support all OpenGL operations when using the BGRA pixel format * Replaced a number of homecooked functions in FileSystemUtil with those from the C++ Standard Library ### Bug fixes +* Stationary image elements could sometimes glitch out during carousel navigation * Font textures were sometimes updated with empty glyhps which generated OpenGL errors on some mobile GPUs ## Version 2.2.1 diff --git a/THEMES-DEV.md b/THEMES-DEV.md index ff40a61c4..1b7f45c3d 100644 --- a/THEMES-DEV.md +++ b/THEMES-DEV.md @@ -887,6 +887,7 @@ Unlike the types just mentioned, aspectRatio entries can not be set to arbitrary | 5:4 | 5:4_vertical | 1280x1024 | | 21:9 | 21:9_vertical | 2560x1080, 3840x1600, 5120x2160 | | 32:9 | 32:9_vertical | 3840x1080, 5120x1440 | +| 1:1 | 1:1 | Any square resolution | The 21:9 and 32:9 aspect ratios are approximate as monitors of slightly different ratios are collectively marketed using these numbers. @@ -2075,6 +2076,10 @@ Properties: - `always` - Set element as stationary during all transitions. - `never` - Don't set element as stationary during any transitions. - Default is `never` +* `renderDuringTransitions` - type: BOOLEAN + - This special property which is only usable for slide transitions between the system and gamelist views makes it possible to for example have a background image stay seamlessly in place when transitioning, or being able to use semi-transparent stationary elements without having them render on top of each other during transitions. For this to work correctly only define `stationary` for one view and set `renderDuringTransitions` to false for the corresponding element in the other view. This way the element from the former view will keep rendering until the slide animation has been completed, after which the latter view will "take over" by rendering the element normally. + - This property can only be used if slide transitions are used, and only when moving from the system view to the gamelist view, or vice versa. + - Default is `true` * `flipHorizontal` - type: BOOLEAN - Flips the image texture horizontally. - Default is `false` From 97d26718a376a1e5d9df85277a77ba58d8c0c212 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 18 Dec 2023 22:13:01 +0100 Subject: [PATCH 083/320] Small rendering optimization for the system and gamelist views --- es-app/src/views/GamelistView.cpp | 42 ++++++++++++------------ es-app/src/views/SystemView.cpp | 53 +++++++++++++++++-------------- 2 files changed, 50 insertions(+), 45 deletions(-) diff --git a/es-app/src/views/GamelistView.cpp b/es-app/src/views/GamelistView.cpp index 962e69c87..46ce49260 100644 --- a/es-app/src/views/GamelistView.cpp +++ b/es-app/src/views/GamelistView.cpp @@ -416,26 +416,20 @@ void GamelistView::render(const glm::mat4& parentTrans) const ViewController::State viewState {ViewController::getInstance()->getState()}; bool stationaryApplicable {false}; - auto renderChildFunc = [this, &viewState](int i, glm::mat4 trans) { - if (getChild(i)->getRenderDuringTransitions()) { + auto renderChildCondFunc = [this, &viewState](int i, glm::mat4 trans) { + bool renderChild {false}; + if (!ViewController::getInstance()->isCameraMoving()) + renderChild = true; + else if (viewState.previouslyViewed == ViewController::ViewMode::NOTHING) + renderChild = true; + else if (viewState.viewing == viewState.previouslyViewed) + renderChild = true; + else if (static_cast(Settings::getInstance()->getInt( + "TransitionsGamelistToSystem")) != ViewTransitionAnimation::SLIDE && + viewState.viewing == ViewController::ViewMode::SYSTEM_SELECT) + renderChild = true; + if (renderChild) getChild(i)->render(trans); - } - else { - bool renderChild {false}; - if (!ViewController::getInstance()->isCameraMoving()) - renderChild = true; - else if (viewState.previouslyViewed == ViewController::ViewMode::NOTHING) - renderChild = true; - else if (viewState.viewing == viewState.previouslyViewed) - renderChild = true; - else if (static_cast(Settings::getInstance()->getInt( - "TransitionsGamelistToSystem")) != ViewTransitionAnimation::SLIDE && - viewState.viewing == ViewController::ViewMode::SYSTEM_SELECT) - renderChild = true; - - if (renderChild) - getChild(i)->render(trans); - } }; // If it's the startup animation, then don't apply stationary properties. @@ -489,11 +483,17 @@ void GamelistView::render(const glm::mat4& parentTrans) if (viewState.getSystem() != mRoot->getSystem()) continue; mRenderer->popClipRect(); - renderChildFunc(i, mRenderer->getIdentity()); + if (getChild(i)->getRenderDuringTransitions()) + getChild(i)->render(mRenderer->getIdentity()); + else + renderChildCondFunc(i, mRenderer->getIdentity()); clipRectFunc(); } else { - renderChildFunc(i, trans); + if (getChild(i)->getRenderDuringTransitions()) + getChild(i)->render(trans); + else + renderChildCondFunc(i, trans); } } diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index e54c7263b..257b1cc51 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -1476,27 +1476,20 @@ void SystemView::renderElements(const glm::mat4& parentTrans, bool abovePrimary) glm::ivec2 {static_cast(mSize.x), static_cast(mSize.y)}); }; - auto renderChildFunc = [this, &viewState](GuiComponent* child, glm::mat4 trans) { - if (child->getRenderDuringTransitions()) { + auto renderChildCondFunc = [this, &viewState](GuiComponent* child, glm::mat4 trans) { + bool renderChild {false}; + if (!ViewController::getInstance()->isCameraMoving()) + renderChild = true; + else if (viewState.previouslyViewed == ViewController::ViewMode::NOTHING) + renderChild = true; + else if (viewState.viewing == viewState.previouslyViewed) + renderChild = true; + else if (static_cast(Settings::getInstance()->getInt( + "TransitionsSystemToGamelist")) != ViewTransitionAnimation::SLIDE && + viewState.viewing == ViewController::ViewMode::GAMELIST) + renderChild = true; + if (renderChild) child->render(trans); - } - else { - bool renderChild {false}; - if (!ViewController::getInstance()->isCameraMoving()) - renderChild = true; - else if (viewState.previouslyViewed == ViewController::ViewMode::NOTHING) - renderChild = true; - else if (viewState.viewing == viewState.previouslyViewed) - renderChild = true; - else if (static_cast( - Settings::getInstance()->getInt("TransitionsSystemToGamelist")) != - ViewTransitionAnimation::SLIDE && - viewState.viewing == ViewController::ViewMode::GAMELIST) - renderChild = true; - - if (renderChild) - child->render(trans); - } }; clipRectFunc(); @@ -1543,11 +1536,17 @@ void SystemView::renderElements(const glm::mat4& parentTrans, bool abovePrimary) if (renderChild) { if (childStationary) { mRenderer->popClipRect(); - renderChildFunc(child, mRenderer->getIdentity()); + if (child->getRenderDuringTransitions()) + child->render(mRenderer->getIdentity()); + else + renderChildCondFunc(child, mRenderer->getIdentity()); clipRectFunc(); } else { - renderChildFunc(child, elementTrans); + if (child->getRenderDuringTransitions()) + child->render(elementTrans); + else + renderChildCondFunc(child, elementTrans); } } } @@ -1557,11 +1556,17 @@ void SystemView::renderElements(const glm::mat4& parentTrans, bool abovePrimary) if (renderChild) { if (childStationary) { mRenderer->popClipRect(); - renderChildFunc(child, mRenderer->getIdentity()); + if (child->getRenderDuringTransitions()) + child->render(mRenderer->getIdentity()); + else + renderChildCondFunc(child, mRenderer->getIdentity()); clipRectFunc(); } else { - renderChildFunc(child, elementTrans); + if (child->getRenderDuringTransitions()) + child->render(elementTrans); + else + renderChildCondFunc(child, elementTrans); } } } From c3747d4e51b79f6c4d6bcb8f8245668f2c74b314 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 18 Dec 2023 22:55:59 +0100 Subject: [PATCH 084/320] Minor changes to some media lookup functions --- es-app/src/FileData.cpp | 10 ++++------ es-app/src/FileData.h | 13 ++++++------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 57233f33a..9849a684b 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -211,7 +211,6 @@ const std::string FileData::getMediaDirectory() const std::string FileData::getMediafilePath(const std::string& subdirectory) const { - const std::vector extList {".png", ".jpg"}; std::string subFolders; // Extract possible subfolders from the path. @@ -223,8 +222,8 @@ const std::string FileData::getMediafilePath(const std::string& subdirectory) co subFolders + "/" + getDisplayName()}; // Look for an image file in the media directory. - for (size_t i {0}; i < extList.size(); ++i) { - std::string mediaPath {tempPath + extList[i]}; + for (auto& extension : sImageExtensions) { + const std::string mediaPath {tempPath + extension}; if (Utils::FileSystem::exists(mediaPath)) return mediaPath; } @@ -316,7 +315,6 @@ const std::string FileData::getCustomImagePath() const const std::string FileData::getVideoPath() const { - const std::vector extList {".avi", ".mkv", ".mov", ".mp4", ".wmv"}; std::string subFolders; // Extract possible subfolders from the path. @@ -328,8 +326,8 @@ const std::string FileData::getVideoPath() const getDisplayName()}; // Look for media in the media directory. - for (size_t i {0}; i < extList.size(); ++i) { - std::string mediaPath {tempPath + extList[i]}; + for (auto& extension : sVideoExtensions) { + const std::string mediaPath {tempPath + extension}; if (Utils::FileSystem::exists(mediaPath)) return mediaPath; } diff --git a/es-app/src/FileData.h b/es-app/src/FileData.h index 4940d3aa9..a12e5613d 100644 --- a/es-app/src/FileData.h +++ b/es-app/src/FileData.h @@ -40,11 +40,7 @@ public: const std::string& getName() { return metadata.get("name"); } const std::string& getSortName(); // Returns our best guess at the "real" name for this file. - std::string getDisplayName() const - { - const std::string& stem {Utils::FileSystem::getStem(mPath)}; - return stem; - } + std::string getDisplayName() const { return Utils::FileSystem::getStem(mPath); } std::string getCleanName() const { return Utils::String::removeParenthesis(this->getDisplayName()); @@ -112,8 +108,8 @@ public: bool excludeRecursively, bool respectExclusions) const; - void addChild(FileData* file); // Error if mType != FOLDER - void removeChild(FileData* file); // Error if mType != FOLDER + void addChild(FileData* file); + void removeChild(FileData* file); virtual std::string getKey() { return getFileName(); } const bool isArcadeAsset() const; @@ -175,6 +171,9 @@ private: std::vector mChildrenLastPlayed; std::vector mChildrenMostPlayed; std::function mUpdateListCallback; + static inline std::vector sImageExtensions {".png", ".jpg"}; + static inline std::vector sVideoExtensions {".mp4", ".mkv", ".avi", + ".mp4", ".wmv", ".mov"}; // The pair includes all games, and favorite games. std::pair mGameCount; bool mOnlyFolders; From 116d73c62a58a139d07e2a47bfffdfe02deed53f Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 19 Dec 2023 17:35:58 +0100 Subject: [PATCH 085/320] Removed some std::filesystem code Also fixed an issue with launching emulators not defined via find rules --- es-app/src/ApplicationUpdater.cpp | 8 +- es-app/src/CollectionSystemsManager.cpp | 3 +- es-app/src/FileData.cpp | 19 +- es-app/src/Screensaver.cpp | 5 +- es-app/src/SystemData.cpp | 68 +++-- es-app/src/guis/GuiMenu.cpp | 4 +- es-app/src/guis/GuiScreensaverOptions.cpp | 6 +- es-app/src/guis/GuiThemeDownloader.cpp | 37 ++- es-app/src/main.cpp | 193 +++++++-------- .../scrapers/GamesDBJSONScraperResources.cpp | 2 +- es-app/src/views/SystemView.cpp | 2 +- es-app/src/views/ViewController.cpp | 4 +- es-core/src/InputManager.cpp | 40 ++- es-core/src/Log.cpp | 12 +- es-core/src/Log.h | 2 +- es-core/src/Scripting.cpp | 8 +- es-core/src/Settings.cpp | 34 ++- es-core/src/ThemeData.cpp | 78 +++--- es-core/src/resources/ResourceManager.cpp | 5 +- es-core/src/utils/FileSystemUtil.cpp | 232 ++++-------------- es-core/src/utils/FileSystemUtil.h | 25 +- 21 files changed, 304 insertions(+), 483 deletions(-) diff --git a/es-app/src/ApplicationUpdater.cpp b/es-app/src/ApplicationUpdater.cpp index 87b2db0b3..e1f9b20a6 100644 --- a/es-app/src/ApplicationUpdater.cpp +++ b/es-app/src/ApplicationUpdater.cpp @@ -211,14 +211,14 @@ void ApplicationUpdater::parseFile() #if (LOCAL_TESTING_FILE) LOG(LogWarning) << "ApplicationUpdater: Using local \"latest_release.json\" testing file"; - const std::filesystem::path localReleaseFile { - Utils::FileSystem::getAppDataDirectory().append("latest_release.json")}; + const std::string localReleaseFile {Utils::FileSystem::getAppDataDirectory() + + "/latest_release.json"}; - if (!Utils::FileSystem::existsSTD(localReleaseFile)) + if (!Utils::FileSystem::exists(localReleaseFile)) throw std::runtime_error("Local testing file not found"); const ResourceData& localReleaseFileData { - ResourceManager::getInstance().getFileData(localReleaseFile.string())}; + ResourceManager::getInstance().getFileData(localReleaseFile)}; doc.Parse(reinterpret_cast(localReleaseFileData.ptr.get()), localReleaseFileData.length); #else diff --git a/es-app/src/CollectionSystemsManager.cpp b/es-app/src/CollectionSystemsManager.cpp index ce98c16b9..6f93ca2a0 100644 --- a/es-app/src/CollectionSystemsManager.cpp +++ b/es-app/src/CollectionSystemsManager.cpp @@ -1625,5 +1625,6 @@ std::string CollectionSystemsManager::getCustomCollectionConfigPath( std::string CollectionSystemsManager::getCollectionsFolder() { - return Utils::FileSystem::getAppDataDirectory().append("collections").string(); + return Utils::FileSystem::getGenericPath(Utils::FileSystem::getAppDataDirectory() + + "/collections"); } diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index 9849a684b..f46b82d89 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -153,7 +153,7 @@ const std::vector FileData::getChildrenRecursive() const const std::string FileData::getROMDirectory() { #if defined(__ANDROID__) - return AndroidVariables::sROMDirectory.string(); + return AndroidVariables::sROMDirectory; #endif const std::string& romDirSetting {Settings::getInstance()->getString("ROMDirectory")}; @@ -189,8 +189,7 @@ const std::string FileData::getMediaDirectory() std::string mediaDirPath; if (mediaDirSetting.empty()) { - mediaDirPath = - Utils::FileSystem::getAppDataDirectory().append("downloaded_media").string() + "/"; + mediaDirPath = Utils::FileSystem::getAppDataDirectory() + "/downloaded_media/"; } else { mediaDirPath = mediaDirSetting; @@ -879,8 +878,13 @@ void FileData::launchGame() } } else { - LOG(LogDebug) << "FileData::launchGame(): Using default emulator \"" - << mEnvData->mLaunchCommands.front().second << "\""; + if (!mEnvData->mLaunchCommands.front().second.empty()) { + LOG(LogDebug) << "FileData::launchGame(): Using default emulator \"" + << mEnvData->mLaunchCommands.front().second << "\""; + } + else { + LOG(LogDebug) << "FileData::launchGame(): Using default emulator"; + } } if (command.empty()) @@ -2295,7 +2299,10 @@ const std::pair FileData::findEmulato } #endif - return std::make_pair(exePath, FileData::findEmulatorResult::NOT_FOUND); + if (exePath.empty()) + return std::make_pair("", FileData::findEmulatorResult::NOT_FOUND); + else + return std::make_pair(exePath, FileData::findEmulatorResult::FOUND_FILE); } CollectionFileData::CollectionFileData(FileData* file, SystemData* system) diff --git a/es-app/src/Screensaver.cpp b/es-app/src/Screensaver.cpp index a6fc22eac..be15e5088 100644 --- a/es-app/src/Screensaver.cpp +++ b/es-app/src/Screensaver.cpp @@ -468,10 +468,7 @@ void Screensaver::generateCustomImageList() Settings::getInstance()->getString("ScreensaverSlideshowCustomDir"))}; if (imageDir.empty()) - imageDir = Utils::FileSystem::getAppDataDirectory() - .append("screensavers") - .append("custom_slideshow") - .string(); + imageDir = Utils::FileSystem::getAppDataDirectory() + "/screensavers/custom_slideshow"; // This makes it possible to set the custom image directory relative to the ES-DE binary // directory or the ROM directory. diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 2864cac16..6a44bb396 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -41,11 +41,10 @@ FindRules::FindRules() void FindRules::loadFindRules() { - std::vector paths; - std::filesystem::path filePath {Utils::FileSystem::getAppDataDirectory() - .append("custom_systems") - .append("es_find_rules.xml")}; - if (Utils::FileSystem::existsSTD(filePath)) { + std::vector paths; + std::string filePath {Utils::FileSystem::getAppDataDirectory() + + "/custom_systems/es_find_rules.xml"}; + if (Utils::FileSystem::exists(filePath)) { paths.emplace_back(filePath); LOG(LogInfo) << "Found custom find rules configuration file"; } @@ -78,17 +77,17 @@ void FindRules::loadFindRules() for (auto& path : paths) { #if defined(_WIN64) LOG(LogInfo) << "Parsing find rules configuration file \"" - << Utils::String::replace(path.string(), "/", "\\") << "\"..."; + << Utils::String::replace(path, "/", "\\") << "\"..."; #else - LOG(LogInfo) << "Parsing find rules configuration file \"" << path.string() << "\"..."; + LOG(LogInfo) << "Parsing find rules configuration file \"" << path << "\"..."; #endif pugi::xml_document doc; #if defined(_WIN64) const pugi::xml_parse_result& res { - doc.load_file(Utils::String::stringToWideString(path.string()).c_str())}; + doc.load_file(Utils::String::stringToWideString(path).c_str())}; #else - const pugi::xml_parse_result& res {doc.load_file(path.string().c_str())}; + const pugi::xml_parse_result& res {doc.load_file(path.c_str())}; #endif if (!res) { LOG(LogError) << "Couldn't parse es_find_rules.xml: " << res.description(); @@ -851,10 +850,9 @@ bool SystemData::loadConfig() void SystemData::loadSortingConfig() { const std::string sortSetting {Settings::getInstance()->getString("SystemsSorting")}; - const std::filesystem::path customFilePath {Utils::FileSystem::getAppDataDirectory() - .append("custom_systems") - .append("es_systems_sorting.xml")}; - const bool customFileExists {Utils::FileSystem::existsSTD(customFilePath)}; + const std::string customFilePath {Utils::FileSystem::getAppDataDirectory() + + "/custom_systems/es_systems_sorting.xml"}; + const bool customFileExists {Utils::FileSystem::exists(customFilePath)}; std::string path; bool bundledFile {false}; @@ -885,7 +883,7 @@ void SystemData::loadSortingConfig() "bundled file has been selected"; } else if (!bundledFile && customFileExists) { - path = customFilePath.string(); + path = customFilePath; } if (path.empty()) { @@ -960,19 +958,18 @@ std::vector SystemData::getConfigPath() { std::vector paths; - const std::filesystem::path customSystemsDirectory { - Utils::FileSystem::getAppDataDirectory().append("custom_systems")}; + const std::string customSystemsDirectory {Utils::FileSystem::getAppDataDirectory() + + "/custom_systems"}; - if (!Utils::FileSystem::existsSTD(customSystemsDirectory)) { - LOG(LogInfo) << "Creating custom systems directory \"" << customSystemsDirectory.string() - << "\"..."; - Utils::FileSystem::createDirectory(customSystemsDirectory.string()); - if (!Utils::FileSystem::existsSTD(customSystemsDirectory)) { + if (!Utils::FileSystem::exists(customSystemsDirectory)) { + LOG(LogInfo) << "Creating custom systems directory \"" << customSystemsDirectory << "\"..."; + Utils::FileSystem::createDirectory(customSystemsDirectory); + if (!Utils::FileSystem::exists(customSystemsDirectory)) { LOG(LogError) << "Couldn't create directory, permission problems?"; } } - std::string path {customSystemsDirectory.string() + "/es_systems.xml"}; + std::string path {customSystemsDirectory + "/es_systems.xml"}; if (Utils::FileSystem::exists(path)) { LOG(LogInfo) << "Found custom systems configuration file"; @@ -1313,36 +1310,35 @@ SystemData* SystemData::getPrev() const std::string SystemData::getGamelistPath(bool forWrite) const { - std::filesystem::path filePath {mRootFolder->getPath() + "/gamelist.xml"}; - const std::filesystem::path gamelistPath { - Utils::FileSystem::getAppDataDirectory().append("gamelists").append(mName)}; + std::string filePath {mRootFolder->getPath() + "/gamelist.xml"}; + const std::string gamelistPath {Utils::FileSystem::getAppDataDirectory() + "/gamelists/" + + mName}; - if (Utils::FileSystem::existsSTD(filePath)) { + if (Utils::FileSystem::exists(filePath)) { if (Settings::getInstance()->getBool("LegacyGamelistFileLocation")) { - return filePath.string(); + return filePath; } else { #if defined(_WIN64) LOG(LogWarning) << "Found a gamelist.xml file in \"" << Utils::String::replace(mRootFolder->getPath(), "/", "\\") - << "\\\" which will not get loaded, move it to \"" - << gamelistPath.string() << "\\\" or otherwise delete it"; + << "\\\" which will not get loaded, move it to \"" << gamelistPath + << "\\\" or otherwise delete it"; #else LOG(LogWarning) << "Found a gamelist.xml file in \"" << mRootFolder->getPath() - << "/\" which will not get loaded, move it to \"" - << gamelistPath.string() << "/\" or otherwise delete it"; + << "/\" which will not get loaded, move it to \"" << gamelistPath + << "/\" or otherwise delete it"; #endif } } - filePath = gamelistPath; - filePath.append("gamelist.xml"); + filePath = gamelistPath + "/gamelist.xml"; // Make sure the directory exists if we're going to write to it, or crashes will happen. if (forWrite) - Utils::FileSystem::createDirectory(Utils::FileSystem::getParent(filePath.string())); - if (forWrite || Utils::FileSystem::existsSTD(filePath)) - return filePath.string(); + Utils::FileSystem::createDirectory(Utils::FileSystem::getParent(filePath)); + if (forWrite || Utils::FileSystem::exists(filePath)) + return filePath; return ""; } diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 25cd61d24..86a6fac89 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1183,8 +1183,8 @@ void GuiMenu::openOtherOptions() rowMediaDir.addElement(bracketMediaDirectory, false); std::string titleMediaDir {"ENTER GAME MEDIA DIRECTORY"}; std::string mediaDirectoryStaticText {"Default directory:"}; - std::string defaultDirectoryText { - Utils::FileSystem::getAppDataDirectory().append("downloaded_media").string()}; + std::string defaultDirectoryText {Utils::FileSystem::getAppDataDirectory() + + "/downloaded_media"}; std::string initValueMediaDir {Settings::getInstance()->getString("MediaDirectory")}; bool multiLineMediaDir {false}; auto updateValMediaDir = [this](const std::string& newVal) { diff --git a/es-app/src/guis/GuiScreensaverOptions.cpp b/es-app/src/guis/GuiScreensaverOptions.cpp index 4c6a559b3..f97af6e1f 100644 --- a/es-app/src/guis/GuiScreensaverOptions.cpp +++ b/es-app/src/guis/GuiScreensaverOptions.cpp @@ -210,10 +210,8 @@ void GuiScreensaverOptions::openSlideshowScreensaverOptions() rowCustomImageDir.addElement(bracketCustomImageDir, false); const std::string titleCustomImageDir {"CUSTOM IMAGE DIRECTORY"}; const std::string defaultImageDirStaticText {"Default directory:"}; - const std::string defaultImageDirText {Utils::FileSystem::getAppDataDirectory() - .append("screensavers") - .append("custom_slideshow") - .string()}; + const std::string defaultImageDirText {Utils::FileSystem::getAppDataDirectory() + + "/screensavers/custom_slideshow"}; const std::string initValueMediaDir { Settings::getInstance()->getString("ScreensaverSlideshowCustomDir")}; auto updateValMediaDir = [s](const std::string& newVal) { diff --git a/es-app/src/guis/GuiThemeDownloader.cpp b/es-app/src/guis/GuiThemeDownloader.cpp index ed31f638a..93906889d 100644 --- a/es-app/src/guis/GuiThemeDownloader.cpp +++ b/es-app/src/guis/GuiThemeDownloader.cpp @@ -175,32 +175,30 @@ GuiThemeDownloader::GuiThemeDownloader(std::function updateCallback) mFuture = mPromise.get_future(); #if defined(__ANDROID__) - mThemeDirectory = Utils::FileSystem::getInternalAppDataDirectory().append("themes").string(); + mThemeDirectory = Utils::FileSystem::getInternalAppDataDirectory() + "/themes"; #else - const std::filesystem::path defaultUserThemeDir { - Utils::FileSystem::getAppDataDirectory().append("themes")}; - const std::filesystem::path userThemeDirSetting {Utils::FileSystem::expandHomePath( + const std::string defaultUserThemeDir {Utils::FileSystem::getAppDataDirectory() + "/themes"}; + const std::string userThemeDirSetting {Utils::FileSystem::expandHomePath( Settings::getInstance()->getString("UserThemeDirectory"))}; #if defined(_WIN64) mThemeDirectory = Utils::String::replace(mThemeDirectory, "\\", "/"); #endif - if (userThemeDirSetting.empty()) { - mThemeDirectory = defaultUserThemeDir.string(); + mThemeDirectory = defaultUserThemeDir; } - else if (Utils::FileSystem::isDirectorySTD(userThemeDirSetting) || - Utils::FileSystem::isSymlinkSTD(userThemeDirSetting)) { - mThemeDirectory = userThemeDirSetting.string(); + else if (Utils::FileSystem::isDirectory(userThemeDirSetting) || + Utils::FileSystem::isSymlink(userThemeDirSetting)) { + mThemeDirectory = userThemeDirSetting; } else { LOG(LogWarning) << "GuiThemeDownloader: Requested user theme directory \"" - << userThemeDirSetting.string() + << userThemeDirSetting << "\" does not exist or is not a directory, reverting to \"" - << defaultUserThemeDir.string() << "\""; - mThemeDirectory = defaultUserThemeDir.string(); + << defaultUserThemeDir << "\""; + mThemeDirectory = defaultUserThemeDir; } -#endif // __ANDROID__ +#endif if (mThemeDirectory.back() != '/') mThemeDirectory.append("/"); @@ -593,8 +591,7 @@ void GuiThemeDownloader::parseThemesList() #if (LOCAL_TESTING_FILE) LOG(LogWarning) << "GuiThemeDownloader: Using local \"themes.json\" testing file"; - const std::string themesFile { - Utils::FileSystem::getAppDataDirectory().append("themes.json").string()}; + const std::string themesFile {Utils::FileSystem::getAppDataDirectory() + "/themes.json"}; #else const std::string themesFile {mThemeDirectory + "themes-list/themes.json"}; #endif @@ -1191,15 +1188,15 @@ bool GuiThemeDownloader::input(InputConfig* config, Input input) "PROCEED", [this] { #if defined(_WIN64) - const std::filesystem::path themeDirectory { + const std::string themeDirectory { Utils::String::replace(mThemeDirectory, "/", "\\") + mThemes[mList->getCursorId()].reponame}; #else - const std::filesystem::path themeDirectory {mThemeDirectory + - mThemes[mList->getCursorId()].reponame}; + const std::string themeDirectory {mThemeDirectory + + mThemes[mList->getCursorId()].reponame}; #endif - LOG(LogInfo) << "Deleting theme directory \"" << themeDirectory.string() << "\""; - if (!Utils::FileSystem::removeDirectory(themeDirectory.string(), true)) { + LOG(LogInfo) << "Deleting theme directory \"" << themeDirectory << "\""; + if (!Utils::FileSystem::removeDirectory(themeDirectory, true)) { mWindow->pushGui(new GuiMsgBox( getHelpStyle(), "COULDN'T DELETE THEME, PERMISSION PROBLEMS?", "OK", [] { return; }, "", nullptr, "", nullptr, nullptr, true)); diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index d18d2f155..9091a3e99 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -444,18 +444,18 @@ bool parseArguments(const std::vector& arguments) bool checkApplicationDataDirectory() { // Check that the application data directory exists, otherwise create it. - const std::filesystem::path applicationData {Utils::FileSystem::getAppDataDirectory()}; - if (!Utils::FileSystem::existsSTD(applicationData)) { + const std::string applicationData {Utils::FileSystem::getAppDataDirectory()}; + if (!Utils::FileSystem::exists(applicationData)) { #if defined(__ANDROID__) __android_log_print(ANDROID_LOG_VERBOSE, ANDROID_APPLICATION_ID, "First startup, creating application data directory \"%s\"", - applicationData.string().c_str()); + applicationData.c_str()); #else - std::cout << "First startup, creating application data directory \"" - << applicationData.string() << "\"\n"; + std::cout << "First startup, creating application data directory \"" << applicationData + << "\"\n"; #endif - Utils::FileSystem::createDirectory(applicationData.string()); - if (!Utils::FileSystem::existsSTD(applicationData)) { + Utils::FileSystem::createDirectory(applicationData); + if (!Utils::FileSystem::exists(applicationData)) { #if defined(__ANDROID__) __android_log_print(ANDROID_LOG_ERROR, ANDROID_APPLICATION_ID, "Error: Couldn't create directory, permission problems?"); @@ -597,18 +597,16 @@ int main(int argc, char* argv[]) { if (!Settings::getInstance()->getBool("LegacyAppDataDirectory")) { // Create the logs folder in the application data directory. - const std::filesystem::path logsDir { - Utils::FileSystem::getAppDataDirectory().append("logs")}; - if (!Utils::FileSystem::isDirectorySTD(logsDir)) { + const std::string logsDir {Utils::FileSystem::getAppDataDirectory() + "/logs"}; + if (!Utils::FileSystem::isDirectory(logsDir)) { #if defined(__ANDROID__) __android_log_print(ANDROID_LOG_VERBOSE, ANDROID_APPLICATION_ID, - "Creating logs directory \"%s\"...", logsDir.string().c_str()); + "Creating logs directory \"%s\"...", logsDir.c_str()); #else - std::cout << "Creating logs directory \"" << logsDir.string() << "\"..." - << std::endl; + std::cout << "Creating logs directory \"" << logsDir << "\"..." << std::endl; #endif - Utils::FileSystem::createDirectory(logsDir.string()); - if (!Utils::FileSystem::isDirectorySTD(logsDir)) { + Utils::FileSystem::createDirectory(logsDir); + if (!Utils::FileSystem::isDirectory(logsDir)) { #if defined(__ANDROID__) __android_log_print(ANDROID_LOG_ERROR, ANDROID_APPLICATION_ID, "Couldn't create directory, permission problems?"); @@ -618,10 +616,10 @@ int main(int argc, char* argv[]) } else { // Remove any old logs in the root of the directory. - Utils::FileSystem::removeFile( - Utils::FileSystem::getAppDataDirectory().append("es_log.txt").string()); - Utils::FileSystem::removeFile( - Utils::FileSystem::getAppDataDirectory().append("es_log.txt.bak").string()); + Utils::FileSystem::removeFile(Utils::FileSystem::getAppDataDirectory() + + "/es_log.txt"); + Utils::FileSystem::removeFile(Utils::FileSystem::getAppDataDirectory() + + "/es_log.txt.bak"); } } } @@ -668,35 +666,30 @@ int main(int argc, char* argv[]) { if (!Settings::getInstance()->getBool("LegacyAppDataDirectory")) { // Create the settings folder in the application data directory. - const std::filesystem::path settingsDir { - Utils::FileSystem::getAppDataDirectory().append("settings")}; - if (!Utils::FileSystem::isDirectorySTD(settingsDir)) { - LOG(LogInfo) << "Creating settings directory \"" << settingsDir.string() << "\"..."; - Utils::FileSystem::createDirectory(settingsDir.string()); - if (!Utils::FileSystem::isDirectorySTD(settingsDir)) { + const std::string settingsDir {Utils::FileSystem::getAppDataDirectory() + "/settings"}; + if (!Utils::FileSystem::isDirectory(settingsDir)) { + LOG(LogInfo) << "Creating settings directory \"" << settingsDir << "\"..."; + Utils::FileSystem::createDirectory(settingsDir); + if (!Utils::FileSystem::isDirectory(settingsDir)) { LOG(LogError) << "Couldn't create directory, permission problems?"; } } - std::filesystem::path settingsPathOld; - std::filesystem::path settingsPathNew; - settingsPathOld = Utils::FileSystem::getAppDataDirectory().append("es_settings.xml"); - settingsPathNew = Utils::FileSystem::getAppDataDirectory() - .append("settings") - .append("es_settings.xml"); - if (!Utils::FileSystem::existsSTD(settingsPathNew) && - Utils::FileSystem::existsSTD(settingsPathOld)) { - Utils::FileSystem::renameFile(settingsPathOld.string(), settingsPathNew.string(), - false); + std::string settingsPathOld; + std::string settingsPathNew; + settingsPathOld = Utils::FileSystem::getAppDataDirectory() + "/es_settings.xml"; + settingsPathNew = + Utils::FileSystem::getAppDataDirectory() + "/settings/es_settings.xml"; + if (!Utils::FileSystem::exists(settingsPathNew) && + Utils::FileSystem::exists(settingsPathOld)) { + Utils::FileSystem::renameFile(settingsPathOld, settingsPathNew, false); Settings::getInstance()->loadFile(); migratedSettings = true; } - settingsPathOld = Utils::FileSystem::getAppDataDirectory().append("es_input.xml"); - settingsPathNew = - Utils::FileSystem::getAppDataDirectory().append("settings").append("es_input.xml"); - if (!Utils::FileSystem::existsSTD(settingsPathNew) && - Utils::FileSystem::existsSTD(settingsPathOld)) { - Utils::FileSystem::renameFile(settingsPathOld.string(), settingsPathNew.string(), - false); + settingsPathOld = Utils::FileSystem::getAppDataDirectory() + "/es_input.xml"; + settingsPathNew = Utils::FileSystem::getAppDataDirectory() + "/settings/es_input.xml"; + if (!Utils::FileSystem::exists(settingsPathNew) && + Utils::FileSystem::exists(settingsPathOld)) { + Utils::FileSystem::renameFile(settingsPathOld, settingsPathNew, false); migratedSettings = true; } } @@ -704,15 +697,13 @@ int main(int argc, char* argv[]) { // Check if the es_settings.xml file exists, and if not, create it. - std::filesystem::path settingsPath; + std::string settingsPath; if (Settings::getInstance()->getBool("LegacyAppDataDirectory")) - settingsPath = Utils::FileSystem::getAppDataDirectory().append("es_settings.xml"); + settingsPath = Utils::FileSystem::getAppDataDirectory() + "/es_settings.xml"; else - settingsPath = Utils::FileSystem::getAppDataDirectory() - .append("settings") - .append("es_settings.xml"); + settingsPath = Utils::FileSystem::getAppDataDirectory() + "/settings/es_settings.xml"; - if (!Utils::FileSystem::existsSTD(settingsPath)) { + if (!Utils::FileSystem::exists(settingsPath)) { LOG(LogInfo) << "Settings file es_settings.xml does not exist, creating it..."; Settings::getInstance()->saveFile(); } @@ -743,12 +734,11 @@ int main(int argc, char* argv[]) { // Create the gamelists folder in the application data directory. - const std::filesystem::path gamelistsDir { - Utils::FileSystem::getAppDataDirectory().append("gamelists")}; - if (!Utils::FileSystem::existsSTD(gamelistsDir)) { - LOG(LogInfo) << "Creating gamelists directory \"" << gamelistsDir.string() << "\"..."; - Utils::FileSystem::createDirectory(gamelistsDir.string()); - if (!Utils::FileSystem::existsSTD(gamelistsDir)) { + const std::string gamelistsDir {Utils::FileSystem::getAppDataDirectory() + "/gamelists"}; + if (!Utils::FileSystem::exists(gamelistsDir)) { + LOG(LogInfo) << "Creating gamelists directory \"" << gamelistsDir << "\"..."; + Utils::FileSystem::createDirectory(gamelistsDir); + if (!Utils::FileSystem::exists(gamelistsDir)) { LOG(LogWarning) << "Couldn't create directory, permission problems?"; } } @@ -756,36 +746,34 @@ int main(int argc, char* argv[]) { #if defined(__ANDROID__) - const std::filesystem::path themeDir { - Utils::FileSystem::getAppDataDirectory().append("themes")}; - if (!Utils::FileSystem::existsSTD(themeDir)) { - LOG(LogInfo) << "Creating themes directory \"" << themeDir.string() << "\"..."; + const std::string themeDir {Utils::FileSystem::getAppDataDirectory() + "/themes"}; + if (!Utils::FileSystem::exists(themeDir)) { + LOG(LogInfo) << "Creating themes directory \"" << themeDir << "\"..."; - Utils::FileSystem::createDirectory(themeDir.string()); - if (!Utils::FileSystem::existsSTD(themeDir)) { + Utils::FileSystem::createDirectory(themeDir); + if (!Utils::FileSystem::exists(themeDir)) { LOG(LogWarning) << "Couldn't create directory, permission problems?"; } } #else // Create the themes folder in the application data directory (or elsewhere if the // UserThemeDirectory setting has been defined). - const std::filesystem::path defaultUserThemeDir { - Utils::FileSystem::getAppDataDirectory().append("themes")}; - std::filesystem::path userThemeDirSetting {Utils::FileSystem::expandHomePath( + const std::string defaultUserThemeDir {Utils::FileSystem::getAppDataDirectory() + + "/themes"}; + std::string userThemeDirSetting {Utils::FileSystem::expandHomePath( Settings::getInstance()->getString("UserThemeDirectory"))}; - std::filesystem::path userThemeDirectory; + std::string userThemeDirectory; if (userThemeDirSetting.empty()) userThemeDirectory = defaultUserThemeDir; else userThemeDirectory = userThemeDirSetting; - if (!Utils::FileSystem::existsSTD(userThemeDirectory)) { - LOG(LogInfo) << "Creating themes directory \"" << userThemeDirectory.string() - << "\"..."; + if (!Utils::FileSystem::exists(userThemeDirectory)) { + LOG(LogInfo) << "Creating themes directory \"" << userThemeDirectory << "\"..."; - Utils::FileSystem::createDirectory(userThemeDirectory.string()); - if (!Utils::FileSystem::existsSTD(userThemeDirectory)) { + Utils::FileSystem::createDirectory(userThemeDirectory); + if (!Utils::FileSystem::exists(userThemeDirectory)) { LOG(LogWarning) << "Couldn't create directory, permission problems?"; } } @@ -795,12 +783,11 @@ int main(int argc, char* argv[]) { // Create the scripts folder in the application data directory. This is only required // for custom event scripts so it's also created as a convenience. - const std::filesystem::path scriptsDir { - Utils::FileSystem::getAppDataDirectory().append("scripts")}; - if (!Utils::FileSystem::existsSTD(scriptsDir)) { - LOG(LogInfo) << "Creating scripts directory \"" << scriptsDir.string() << "\"..."; - Utils::FileSystem::createDirectory(scriptsDir.string()); - if (!Utils::FileSystem::existsSTD(scriptsDir)) { + const std::string scriptsDir {Utils::FileSystem::getAppDataDirectory() + "/scripts"}; + if (!Utils::FileSystem::exists(scriptsDir)) { + LOG(LogInfo) << "Creating scripts directory \"" << scriptsDir << "\"..."; + Utils::FileSystem::createDirectory(scriptsDir); + if (!Utils::FileSystem::exists(scriptsDir)) { LOG(LogWarning) << "Couldn't create directory, permission problems?"; } } @@ -808,24 +795,21 @@ int main(int argc, char* argv[]) { // Create the screensavers and screensavers/custom_slideshow directories. - const std::filesystem::path screensaversDir { - Utils::FileSystem::getAppDataDirectory().append("screensavers")}; - const std::filesystem::path slideshowDir {Utils::FileSystem::getAppDataDirectory() - .append("screensavers") - .append("custom_slideshow")}; - if (!Utils::FileSystem::existsSTD(screensaversDir)) { - LOG(LogInfo) << "Creating screensavers directory \"" << screensaversDir.string() - << "\"..."; - Utils::FileSystem::createDirectory(screensaversDir.string()); - if (!Utils::FileSystem::existsSTD(screensaversDir)) { + const std::string screensaversDir {Utils::FileSystem::getAppDataDirectory() + + "/screensavers"}; + const std::string slideshowDir {Utils::FileSystem::getAppDataDirectory() + + "/screensavers/custom_slideshow"}; + if (!Utils::FileSystem::exists(screensaversDir)) { + LOG(LogInfo) << "Creating screensavers directory \"" << screensaversDir << "\"..."; + Utils::FileSystem::createDirectory(screensaversDir); + if (!Utils::FileSystem::exists(screensaversDir)) { LOG(LogWarning) << "Couldn't create directory, permission problems?"; } } - if (!Utils::FileSystem::existsSTD(slideshowDir)) { - LOG(LogInfo) << "Creating custom_slideshow directory \"" << slideshowDir.string() - << "\"..."; - Utils::FileSystem::createDirectory(slideshowDir.string()); - if (!Utils::FileSystem::existsSTD(slideshowDir)) { + if (!Utils::FileSystem::exists(slideshowDir)) { + LOG(LogInfo) << "Creating custom_slideshow directory \"" << slideshowDir << "\"..."; + Utils::FileSystem::createDirectory(slideshowDir); + if (!Utils::FileSystem::exists(slideshowDir)) { LOG(LogWarning) << "Couldn't create directory, permission problems?"; } } @@ -834,25 +818,22 @@ int main(int argc, char* argv[]) { if (!Settings::getInstance()->getBool("LegacyAppDataDirectory")) { // Create the controllers folder in the application data directory. - const std::filesystem::path controllersDir { - Utils::FileSystem::getAppDataDirectory().append("controllers")}; - if (!Utils::FileSystem::existsSTD(controllersDir)) { - LOG(LogInfo) << "Creating controllers directory \"" << controllersDir.string() - << "\"..."; - Utils::FileSystem::createDirectory(controllersDir.string()); - if (!Utils::FileSystem::existsSTD(controllersDir)) { + const std::string controllersDir {Utils::FileSystem::getAppDataDirectory() + + "/controllers"}; + if (!Utils::FileSystem::exists(controllersDir)) { + LOG(LogInfo) << "Creating controllers directory \"" << controllersDir << "\"..."; + Utils::FileSystem::createDirectory(controllersDir); + if (!Utils::FileSystem::exists(controllersDir)) { LOG(LogWarning) << "Couldn't create directory, permission problems?"; } } - std::filesystem::path configPathOld { - Utils::FileSystem::getAppDataDirectory().append("es_controller_mappings.cfg")}; - std::filesystem::path configPathNew {Utils::FileSystem::getAppDataDirectory() - .append("controllers") - .append("es_controller_mappings.cfg")}; - if (!Utils::FileSystem::existsSTD(configPathNew) && - Utils::FileSystem::existsSTD(configPathOld)) { - Utils::FileSystem::renameFile(configPathOld.string(), configPathNew.string(), - false); + std::string configPathOld {Utils::FileSystem::getAppDataDirectory() + + "/es_controller_mappings.cfg"}; + std::string configPathNew {Utils::FileSystem::getAppDataDirectory() + + "/controllers/es_controller_mappings.cfg"}; + if (!Utils::FileSystem::exists(configPathNew) && + Utils::FileSystem::exists(configPathOld)) { + Utils::FileSystem::renameFile(configPathOld, configPathNew, false); migratedSettings = true; } } diff --git a/es-app/src/scrapers/GamesDBJSONScraperResources.cpp b/es-app/src/scrapers/GamesDBJSONScraperResources.cpp index 8477b23c8..417749d60 100644 --- a/es-app/src/scrapers/GamesDBJSONScraperResources.cpp +++ b/es-app/src/scrapers/GamesDBJSONScraperResources.cpp @@ -64,7 +64,7 @@ namespace std::string getScrapersResouceDir() { - return Utils::FileSystem::getAppDataDirectory().append(SCRAPER_RESOURCES_DIR).string(); + return Utils::FileSystem::getAppDataDirectory() + "/" + SCRAPER_RESOURCES_DIR; } std::string TheGamesDBJSONRequestResources::getApiKey() const { return GamesDBAPIKey; } diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 257b1cc51..a40a3cb75 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -1476,7 +1476,7 @@ void SystemView::renderElements(const glm::mat4& parentTrans, bool abovePrimary) glm::ivec2 {static_cast(mSize.x), static_cast(mSize.y)}); }; - auto renderChildCondFunc = [this, &viewState](GuiComponent* child, glm::mat4 trans) { + auto renderChildCondFunc = [&viewState](GuiComponent* child, glm::mat4 trans) { bool renderChild {false}; if (!ViewController::getInstance()->isCameraMoving()) renderChild = true; diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 24208fb15..db91a6d23 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -142,8 +142,8 @@ void ViewController::legacyAppDataDialog() const std::string upgradeMessage { "AS OF ES-DE 3.0.0 THE APPLICATION DATA DIRECTORY HAS CHANGED FROM \".emulationstation\" " "to \"ES-DE\"\nPLEASE RENAME YOUR CURRENT DATA DIRECTORY:\n" + - Utils::FileSystem::getAppDataDirectory().string() + "\nTO THE FOLLOWING:\n" + - Utils::FileSystem::getAppDataDirectory().parent_path().append("ES-DE").string()}; + Utils::FileSystem::getAppDataDirectory() + "\nTO THE FOLLOWING:\n" + + Utils::FileSystem::getParent(Utils::FileSystem::getAppDataDirectory()) + "/ES-DE"}; mWindow->pushGui(new GuiMsgBox( HelpStyle(), upgradeMessage.c_str(), "OK", [] {}, "", nullptr, "", nullptr, nullptr, true, diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index cb859a773..580a56da8 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -86,23 +86,21 @@ void InputManager::init() // the bundled mapping is incorrect, or the SDL version is a bit older, it makes sense to be // able to customize this. If a controller GUID is present in the mappings file that is // already present inside SDL, the custom mapping will overwrite the bundled one. - std::filesystem::path mappingsFile; + std::string mappingsFile; if (Settings::getInstance()->getBool("LegacyAppDataDirectory")) { - mappingsFile = - Utils::FileSystem::getAppDataDirectory().append("es_controller_mappings.cfg"); + mappingsFile = Utils::FileSystem::getAppDataDirectory() + "/es_controller_mappings.cfg"; } else { - mappingsFile = Utils::FileSystem::getAppDataDirectory() - .append("controllers") - .append("es_controller_mappings.cfg"); + mappingsFile = + Utils::FileSystem::getAppDataDirectory() + "/controllers/es_controller_mappings.cfg"; } - if (!Utils::FileSystem::existsSTD(mappingsFile)) + if (!Utils::FileSystem::exists(mappingsFile)) mappingsFile = ResourceManager::getInstance().getResourcePath( ":/controllers/es_controller_mappings.cfg"); - int controllerMappings {SDL_GameControllerAddMappingsFromFile(mappingsFile.string().c_str())}; + int controllerMappings {SDL_GameControllerAddMappingsFromFile(mappingsFile.c_str())}; if (controllerMappings != -1 && controllerMappings != 0) { LOG(LogInfo) << "Loaded " << controllerMappings << " controller " @@ -264,28 +262,18 @@ void InputManager::doOnFinish() std::string InputManager::getConfigPath() { - if (Settings::getInstance()->getBool("LegacyAppDataDirectory")) { - return Utils::FileSystem::getAppDataDirectory().append("es_input.xml").string(); - } - else { - return Utils::FileSystem::getAppDataDirectory() - .append("settings") - .append("es_input.xml") - .string(); - } + if (Settings::getInstance()->getBool("LegacyAppDataDirectory")) + return Utils::FileSystem::getAppDataDirectory() + "/es_input.xml"; + else + return Utils::FileSystem::getAppDataDirectory() + "/settings/es_input.xml"; } std::string InputManager::getTemporaryConfigPath() { - if (Settings::getInstance()->getBool("LegacyAppDataDirectory")) { - return Utils::FileSystem::getAppDataDirectory().append("es_temporaryinput.xml").string(); - } - else { - return Utils::FileSystem::getAppDataDirectory() - .append("settings") - .append("es_temporaryinput.xml") - .string(); - } + if (Settings::getInstance()->getBool("LegacyAppDataDirectory")) + return Utils::FileSystem::getAppDataDirectory() + "/es_temporaryinput.xml"; + else + return Utils::FileSystem::getAppDataDirectory() + "/settings/es_temporaryinput.xml"; } int InputManager::getNumConfiguredDevices() diff --git a/es-core/src/Log.cpp b/es-core/src/Log.cpp index e26e76f08..48d679f7c 100644 --- a/es-core/src/Log.cpp +++ b/es-core/src/Log.cpp @@ -26,13 +26,13 @@ void Log::setReportingLevel(LogLevel level) void Log::init() { if (Settings::getInstance()->getBool("LegacyAppDataDirectory")) - sLogPath = Utils::FileSystem::getAppDataDirectory().append("es_log.txt"); + sLogPath = Utils::FileSystem::getAppDataDirectory() + "/es_log.txt"; else - sLogPath = Utils::FileSystem::getAppDataDirectory().append("logs").append("es_log.txt"); + sLogPath = Utils::FileSystem::getAppDataDirectory() + "/logs/es_log.txt"; - Utils::FileSystem::removeFile(sLogPath.string() + ".bak"); + Utils::FileSystem::removeFile(sLogPath + ".bak"); // Rename the previous log file. - Utils::FileSystem::renameFile(sLogPath.string(), sLogPath.string() + ".bak", true); + Utils::FileSystem::renameFile(sLogPath, sLogPath + ".bak", true); return; } @@ -40,9 +40,9 @@ void Log::open() { std::unique_lock lock {sLogMutex}; #if defined(_WIN64) - sFile.open(Utils::String::stringToWideString(sLogPath.string()).c_str()); + sFile.open(Utils::String::stringToWideString(sLogPath).c_str()); #else - sFile.open(sLogPath.string().c_str()); + sFile.open(sLogPath.c_str()); #endif } diff --git a/es-core/src/Log.h b/es-core/src/Log.h index 487eb404c..8219db00f 100644 --- a/es-core/src/Log.h +++ b/es-core/src/Log.h @@ -65,7 +65,7 @@ private: static inline std::ofstream sFile; static inline LogLevel sReportingLevel = LogInfo; static inline std::mutex sLogMutex; - static inline std::filesystem::path sLogPath; + static inline std::string sLogPath; LogLevel mMessageLevel; }; diff --git a/es-core/src/Scripting.cpp b/es-core/src/Scripting.cpp index 4c32ff35f..cf575a62f 100644 --- a/es-core/src/Scripting.cpp +++ b/es-core/src/Scripting.cpp @@ -37,12 +37,12 @@ namespace Scripting << "\" \"" << arg3 << "\" \"" << arg4 << "\""; std::list scriptDirList; - std::filesystem::path scriptDir; + std::string scriptDir; // Check in application data directory. - scriptDir = Utils::FileSystem::getAppDataDirectory().append("scripts").append(eventName); - if (Utils::FileSystem::existsSTD(scriptDir)) - scriptDirList.push_back(scriptDir.string()); + scriptDir = Utils::FileSystem::getAppDataDirectory() + "/scripts/" + eventName; + if (Utils::FileSystem::exists(scriptDir)) + scriptDirList.push_back(scriptDir); for (auto dirIt = scriptDirList.cbegin(); dirIt != scriptDirList.cend(); ++dirIt) { std::list scripts {Utils::FileSystem::getDirContent(*dirIt)}; diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index b585843a1..919516ca8 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -78,7 +78,8 @@ Settings::Settings() { mWasChanged = false; setDefaults(); - if (Utils::FileSystem::getAppDataDirectory().filename().string() == ".emulationstation") + if (Utils::FileSystem::getFileName(Utils::FileSystem::getAppDataDirectory()) == + ".emulationstation") mBoolMap["LegacyAppDataDirectory"] = std::make_pair(true, true); loadFile(); } @@ -367,13 +368,12 @@ void Settings::setDefaults() void Settings::saveFile() { - std::filesystem::path path; + std::string path; if (mBoolMap["LegacyAppDataDirectory"].second == true) { - path = Utils::FileSystem::getAppDataDirectory().append("es_settings.xml"); + path = Utils::FileSystem::getAppDataDirectory() + "/es_settings.xml"; } else { - path = - Utils::FileSystem::getAppDataDirectory().append("settings").append("es_settings.xml"); + path = Utils::FileSystem::getAppDataDirectory() + "/settings/es_settings.xml"; } pugi::xml_document doc; @@ -393,9 +393,9 @@ void Settings::saveFile() } #if defined(_WIN64) - doc.save_file(Utils::String::stringToWideString(path.string()).c_str()); + doc.save_file(Utils::String::stringToWideString(path).c_str()); #else - doc.save_file(path.string().c_str()); + doc.save_file(path.c_str()); #endif Scripting::fireEvent("config-changed"); @@ -404,24 +404,20 @@ void Settings::saveFile() void Settings::loadFile() { - std::filesystem::path path; - if (mBoolMap["LegacyAppDataDirectory"].second == true) { - path = Utils::FileSystem::getAppDataDirectory().append("es_settings.xml"); - } - else { - path = - Utils::FileSystem::getAppDataDirectory().append("settings").append("es_settings.xml"); - } + std::string path; + if (mBoolMap["LegacyAppDataDirectory"].second == true) + path = Utils::FileSystem::getAppDataDirectory() + "/es_settings.xml"; + else + path = Utils::FileSystem::getAppDataDirectory() + "/settings/es_settings.xml"; - if (!Utils::FileSystem::existsSTD(path)) + if (!Utils::FileSystem::exists(path)) return; pugi::xml_document doc; #if defined(_WIN64) - pugi::xml_parse_result result { - doc.load_file(Utils::String::stringToWideString(path.string()).c_str())}; + pugi::xml_parse_result result {doc.load_file(Utils::String::stringToWideString(path).c_str())}; #else - pugi::xml_parse_result result {doc.load_file(path.string().c_str())}; + pugi::xml_parse_result result {doc.load_file(path.c_str())}; #endif if (!result) { LOG(LogError) << "Couldn't parse the es_settings.xml file: " << result.description(); diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 2e4ef0d62..0c8289d75 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -671,66 +671,74 @@ void ThemeData::populateThemes() // by default), then under the data installation directory (Unix only) and last under the ES-DE // binary directory. #if defined(__ANDROID__) - const std::filesystem::path userThemeDirectory { - Utils::FileSystem::getInternalAppDataDirectory().append("themes")}; + const std::string userThemeDirectory {Utils::FileSystem::getInternalAppDataDirectory() + + "/themes"}; #else - const std::filesystem::path defaultUserThemeDir { - Utils::FileSystem::getAppDataDirectory().append("themes")}; - const std::filesystem::path userThemeDirSetting {Utils::FileSystem::expandHomePath( + const std::string defaultUserThemeDir {Utils::FileSystem::getAppDataDirectory() + "/themes"}; + const std::string userThemeDirSetting {Utils::FileSystem::expandHomePath( Settings::getInstance()->getString("UserThemeDirectory"))}; - std::filesystem::path userThemeDirectory; + std::string userThemeDirectory; if (userThemeDirSetting.empty()) { userThemeDirectory = defaultUserThemeDir; } - else if (Utils::FileSystem::isDirectorySTD(userThemeDirSetting) || - Utils::FileSystem::isSymlinkSTD(userThemeDirSetting)) { + else if (Utils::FileSystem::isDirectory(userThemeDirSetting) || + Utils::FileSystem::isSymlink(userThemeDirSetting)) { userThemeDirectory = userThemeDirSetting; - LOG(LogInfo) << "Setting user theme directory to \"" << userThemeDirectory.string() << "\""; +#if defined(_WIN64) + LOG(LogInfo) << "Setting user theme directory to \"" + << Utils::String::replace(userThemeDirectory, "/", "\\") << "\""; +#else + LOG(LogInfo) << "Setting user theme directory to \"" << userThemeDirectory << "\""; +#endif } else { - LOG(LogWarning) << "Requested user theme directory \"" << userThemeDirSetting.string() + LOG(LogWarning) << "Requested user theme directory \"" << userThemeDirSetting << "\" does not exist or is not a directory, reverting to \"" - << defaultUserThemeDir.string() << "\""; + << defaultUserThemeDir << "\""; userThemeDirectory = defaultUserThemeDir; } #endif #if defined(__ANDROID__) - const std::vector themePaths { - Utils::FileSystem::getProgramDataPath().append("themes"), userThemeDirectory, - Utils::FileSystem::getAppDataDirectory().append("themes")}; + const std::vector themePaths { + Utils::FileSystem::getProgramDataPath() + "/themes", userThemeDirectory, + Utils::FileSystem::getAppDataDirectory() + "/themes"}; #elif defined(__APPLE__) - const std::vector themePaths { - Utils::FileSystem::getExePathSTD().append("themes"), - Utils::FileSystem::getExePathSTD().parent_path().append("Resources").append("themes"), - userThemeDirectory}; + const std::vector themePaths { + Utils::FileSystem::getExePath() + "/themes", + Utils::FileSystem::getExePath() + "/../Resources/themes", userThemeDirectory}; #elif defined(_WIN64) || defined(APPIMAGE_BUILD) - const std::vector themePaths { - Utils::FileSystem::getExePathSTD().append("themes"), userThemeDirectory}; + const std::vector themePaths {Utils::FileSystem::getExePath() + "/themes", + userThemeDirectory}; #else - const std::vector themePaths { - Utils::FileSystem::getExePathSTD().append("themes"), - Utils::FileSystem::getProgramDataPath().append("themes"), userThemeDirectory}; + const std::vector themePaths {Utils::FileSystem::getExePath() + "/themes", + Utils::FileSystem::getProgramDataPath() + "/themes", + userThemeDirectory}; #endif for (auto path : themePaths) { - if (!Utils::FileSystem::isDirectorySTD(path)) + if (!Utils::FileSystem::isDirectory(path)) continue; - Utils::FileSystem::FileList dirContent {Utils::FileSystem::getDirContentSTD(path)}; + Utils::FileSystem::StringList dirContent {Utils::FileSystem::getDirContent(path)}; - for (Utils::FileSystem::FileList::const_iterator it = dirContent.cbegin(); + for (Utils::FileSystem::StringList::const_iterator it = dirContent.cbegin(); it != dirContent.cend(); ++it) { - if (Utils::FileSystem::isDirectorySTD(*it)) { - const std::string themeDirName {Utils::FileSystem::getFileNameSTD(*it).string()}; + if (Utils::FileSystem::isDirectory(*it)) { + const std::string themeDirName {Utils::FileSystem::getFileName(*it)}; if (themeDirName == "themes-list" || (themeDirName.length() >= 8 && Utils::String::toLower(themeDirName.substr(themeDirName.length() - 8, 8)) == "disabled")) continue; - LOG(LogDebug) << "Loading theme capabilities for \"" << (*it).string() << "\"..."; - ThemeCapability capabilities {parseThemeCapabilities((*it).string())}; +#if defined(_WIN64) + LOG(LogDebug) << "Loading theme capabilities for \"" + << Utils::String::replace(*it, "/", "\\") << "\"..."; +#else + LOG(LogDebug) << "Loading theme capabilities for \"" << *it << "\"..."; +#endif + ThemeCapability capabilities {parseThemeCapabilities((*it))}; if (!capabilities.validTheme) continue; @@ -739,8 +747,12 @@ void ThemeData::populateThemes() if (capabilities.themeName != "") themeName.append(" (\"").append(capabilities.themeName).append("\")"); - LOG(LogInfo) << "Added theme \"" << (*it).string() << "\"" << themeName; - +#if defined(_WIN64) + LOG(LogInfo) << "Added theme \"" << Utils::String::replace(*it, "/", "\\") << "\"" + << themeName; +#else + LOG(LogInfo) << "Added theme \"" << *it << "\"" << themeName; +#endif int aspectRatios {0}; if (capabilities.aspectRatios.size() > 0) aspectRatios = static_cast(capabilities.aspectRatios.size()) - 1; @@ -752,7 +764,7 @@ void ThemeData::populateThemes() << " and " << capabilities.transitions.size() << " transition" << (capabilities.transitions.size() != 1 ? "s" : ""); - Theme theme {(*it).string(), capabilities}; + Theme theme {*it, capabilities}; sThemes[theme.getName()] = theme; } } diff --git a/es-core/src/resources/ResourceManager.cpp b/es-core/src/resources/ResourceManager.cpp index d4a0c5ead..5041193e7 100644 --- a/es-core/src/resources/ResourceManager.cpp +++ b/es-core/src/resources/ResourceManager.cpp @@ -28,8 +28,7 @@ std::string ResourceManager::getResourcePath(const std::string& path, bool termi if ((path[0] == ':') && (path[1] == '/')) { // Check under the home directory. - std::string testHome { - Utils::FileSystem::getAppDataDirectory().append("resources").string() + "/" + &path[2]}; + std::string testHome {Utils::FileSystem::getAppDataDirectory() + "/resources/" + &path[2]}; if (Utils::FileSystem::exists(testHome)) return testHome; @@ -43,7 +42,7 @@ std::string ResourceManager::getResourcePath(const std::string& path, bool termi } #elif (defined(__unix__) && !defined(APPIMAGE_BUILD)) || defined(__ANDROID__) // Check in the program data directory. - std::string testDataPath {Utils::FileSystem::getProgramDataPath().string() + "/resources/" + + std::string testDataPath {Utils::FileSystem::getProgramDataPath() + "/resources/" + &path[2]}; if (Utils::FileSystem::exists(testDataPath)) return testDataPath; diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 2cce7ba8c..588d5ca77 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -42,14 +42,14 @@ // build environment is broken. #if defined(__unix__) #if defined(ES_INSTALL_PREFIX) -const std::filesystem::path installPrefix {ES_INSTALL_PREFIX}; +const std::string installPrefix {ES_INSTALL_PREFIX}; #else #if defined(__linux__) -const std::filesystem::path installPrefix {"/usr"}; +const std::string installPrefix {"/usr"}; #elif defined(__NetBSD__) -const std::filesystem::path installPrefix {"/usr/pkg"}; +const std::string installPrefix {"/usr/pkg"}; #else -const std::filesystem::path installPrefix {"/usr/local"}; +const std::string installPrefix {"/usr/local"}; #endif #endif #endif @@ -59,9 +59,8 @@ namespace Utils namespace FileSystem { static std::string homePath; - static std::filesystem::path homePathSTD; - static std::filesystem::path exePath; - static std::filesystem::path esBinary; + static std::string exePath; + static std::string esBinary; StringList getDirContent(const std::string& path, const bool recursive) { @@ -100,26 +99,6 @@ namespace Utils return contentList; } - FileList getDirContentSTD(const std::filesystem::path& path, const bool recursive) - { - FileList fileList; - - if (!isDirectorySTD(path)) - return fileList; - - if (recursive) { - for (auto& entry : std::filesystem::recursive_directory_iterator(path)) - fileList.emplace_back(entry); - } - else { - for (auto& entry : std::filesystem::directory_iterator(path)) - fileList.emplace_back(entry); - } - - fileList.sort(); - return fileList; - } - StringList getMatchingFiles(const std::string& pattern) { StringList files; @@ -189,7 +168,6 @@ namespace Utils { // Set home path. homePath = getGenericPath(path); - homePathSTD = std::filesystem::path {homePath}; } std::string getHomePath() @@ -235,56 +213,11 @@ namespace Utils // No homepath found, fall back to current working directory. if (!homePath.length()) - homePath = std::filesystem::current_path().string(); + homePath = getCWDPath(); return homePath; } - std::filesystem::path getHomePathSTD() - { - // Only construct the homepath once. - if (!homePathSTD.empty()) - return homePathSTD; - -#if defined(__ANDROID__) - homePathSTD = - std::filesystem::path {getGenericPath(FileSystemVariables::sAppDataDirectory)}; - return homePathSTD; -#endif -#if defined(_WIN64) - // On Windows we need to check HOMEDRIVE and HOMEPATH. - std::wstring envHomeDrive; - std::wstring envHomePath; -#if defined(_MSC_VER) // MSVC compiler. - wchar_t* buffer; - if (!_wdupenv_s(&buffer, nullptr, L"HOMEDRIVE")) - envHomeDrive = buffer; - if (!_wdupenv_s(&buffer, nullptr, L"HOMEPATH")) - envHomePath = buffer; -#else - envHomeDrive = _wgetenv(L"HOMEDRIVE"); - envHomePath = _wgetenv(L"HOMEPATH"); -#endif - if (envHomeDrive.length() && envHomePath.length()) { - homePathSTD = envHomeDrive; - homePathSTD.append(envHomePath); - } - -#else - std::string envHome; - if (getenv("HOME") != nullptr) - envHome = getenv("HOME"); - if (envHome.length()) - homePathSTD = std::filesystem::path {getGenericPath(envHome)}; -#endif - - // No homepath found, fall back to current working directory. - if (homePathSTD.empty()) - homePathSTD = std::filesystem::current_path(); - - return homePathSTD; - } - std::string getSystemHomeDirectory() { #if defined(_WIN64) @@ -313,22 +246,20 @@ namespace Utils return ""; } - std::filesystem::path getAppDataDirectory() + std::string getAppDataDirectory() { #if defined(__ANDROID__) - return getHomePathSTD(); + return getHomePath(); #else if (FileSystemVariables::sAppDataDirectory.empty()) { - if (Utils::FileSystem::existsSTD(getHomePathSTD().append("ES-DE"))) { - FileSystemVariables::sAppDataDirectory = getHomePathSTD().append("ES-DE"); + if (Utils::FileSystem::exists(getHomePath() + "/ES-DE")) { + FileSystemVariables::sAppDataDirectory = getHomePath() + "/ES-DE"; } - else if (Utils::FileSystem::existsSTD( - getHomePathSTD().append(".emulationstation"))) { - FileSystemVariables::sAppDataDirectory = - getHomePathSTD().append(".emulationstation"); + else if (Utils::FileSystem::exists(getHomePath() + "/.emulationstation")) { + FileSystemVariables::sAppDataDirectory = getHomePath() + "/.emulationstation"; } else { - FileSystemVariables::sAppDataDirectory = getHomePathSTD().append("ES-DE"); + FileSystemVariables::sAppDataDirectory = getHomePath() + "/ES-DE"; } } @@ -336,12 +267,27 @@ namespace Utils #endif } - std::filesystem::path getInternalAppDataDirectory() + std::string getInternalAppDataDirectory() { #if defined(__ANDROID__) return AndroidVariables::sExternalDataDirectory; #else - return std::filesystem::path {}; + return ""; +#endif + } + + std::string getCWDPath() + { + // Return current working directory. + +#if defined(_WIN64) + wchar_t tempWide[512]; + return (_wgetcwd(tempWide, 512) ? + getGenericPath(Utils::String::wideStringToString(tempWide)) : + ""); +#else + char temp[512]; + return (getcwd(temp, 512) ? getGenericPath(temp) : ""); #endif } @@ -364,8 +310,8 @@ namespace Utils // Using a temporary file is the only viable solution I've found to communicate // between the sandbox and the outside world. - const std::string tempFile {Utils::FileSystem::getAppDataDirectory().string() + - ".flatpak_emulator_binary_path.tmp"}; + const std::string& tempFile {Utils::FileSystem::getAppDataDirectory() + + "/.flatpak_emulator_binary_path.tmp"}; std::string emulatorPath; @@ -410,73 +356,56 @@ namespace Utils void setExePath(const std::string& path) { - std::string exePathTemp; - constexpr int pathMax {32767}; #if defined(_WIN64) std::wstring result(pathMax, 0); if (GetModuleFileNameW(nullptr, &result[0], pathMax) != 0) - exePathTemp = Utils::String::wideStringToString(result); + exePath = Utils::String::wideStringToString(result); #else std::string result(pathMax, 0); if (readlink("/proc/self/exe", &result[0], pathMax) != -1) - exePathTemp = result; + exePath = result; #endif - exePathTemp.erase(std::find(exePathTemp.begin(), exePathTemp.end(), '\0'), - exePathTemp.end()); - esBinary = exePathTemp; - exePath = exePathTemp; - exePath = getCanonicalPathSTD(exePath); + exePath.erase(std::find(exePath.begin(), exePath.end(), '\0'), exePath.end()); + esBinary = exePath; + exePath = getCanonicalPath(exePath); // Fallback to argv[0] if everything else fails. if (exePath.empty()) { esBinary = path; - exePath = getCanonicalPathSTD(esBinary); + exePath = getCanonicalPath(path); } - - if (isRegularFileSTD(exePath)) - exePath = exePath.parent_path(); + if (isRegularFile(exePath)) + exePath = getParent(exePath); #if defined(APPIMAGE_BUILD) // We need to check that the APPIMAGE variable is available as the APPIMAGE_BUILD // build flag could have been passed without running as an actual AppImage. if (getenv("APPIMAGE") != nullptr) - esBinary = std::filesystem::path {getenv("APPIMAGE")}; + esBinary = getenv("APPIMAGE"); #endif } std::string getExePath() - { - // Return executable path. - return exePath.string(); - } - - std::filesystem::path getExePathSTD() { // Return executable path. return exePath; } std::string getEsBinary() - { - // Return the absolute path to the ES-DE binary. - return esBinary.string(); - } - - std::filesystem::path getEsBinarySTD() { // Return the absolute path to the ES-DE binary. return esBinary; } - std::filesystem::path getProgramDataPath() + std::string getProgramDataPath() { #if defined(__ANDROID__) return AndroidVariables::sInternalDataDirectory; #elif defined(__unix__) - return std::filesystem::path {installPrefix}.append("share").append("es-de"); + return installPrefix + "/share/es-de"; #else - return std::filesystem::path {}; + return ""; #endif } @@ -554,9 +483,6 @@ namespace Utils std::string getCanonicalPath(const std::string& path) { - if (path.empty()) - return ""; - // Hack for builtin resources. if ((path[0] == ':') && (path[1] == '/')) return path; @@ -617,18 +543,6 @@ namespace Utils return canonicalPath; } - std::filesystem::path getCanonicalPathSTD(const std::filesystem::path& path) - { - if (path.empty()) - return path; - - // Hack for builtin resources. - if ((path.string()[0] == ':') && (path.string()[1] == '/')) - return path; - - return std::filesystem::canonical(path); - } - std::string getAbsolutePath(const std::string& path, const std::string& base) { const std::string& absolutePath {getGenericPath(path)}; @@ -666,11 +580,6 @@ namespace Utils return genericPath; } - std::filesystem::path getFileNameSTD(const std::filesystem::path& path) - { - return path.filename(); - } - std::string getStem(const std::string& path) { std::string fileName {getFileName(path)}; @@ -915,7 +824,7 @@ namespace Utils bool createEmptyFile(const std::filesystem::path& path) { const std::filesystem::path cleanPath {path.lexically_normal().make_preferred()}; - if (existsSTD(path)) { + if (exists(path)) { LOG(LogError) << "Couldn't create target file \"" << cleanPath.string() << "\" as it already exists"; return false; @@ -1023,22 +932,6 @@ namespace Utils } } - bool existsSTD(const std::filesystem::path& path) - { - const std::string& genericPath {getGenericPath(path.string())}; - try { -#if defined(_WIN64) - return std::filesystem::exists(Utils::String::stringToWideString(genericPath)); -#else - return std::filesystem::exists(genericPath); -#endif - } - catch (std::filesystem::filesystem_error& error) { - LOG(LogError) << "FileSystemUtil::exists(): " << error.what(); - return false; - } - } - bool driveExists(const std::string& path) { #if defined(_WIN64) @@ -1088,17 +981,6 @@ namespace Utils } } - bool isRegularFileSTD(const std::filesystem::path& path) - { - try { - return std::filesystem::is_regular_file(path); - } - catch (std::filesystem::filesystem_error& error) { - LOG(LogError) << "FileSystemUtil::isRegularFile(): " << error.what(); - return false; - } - } - bool isDirectory(const std::string& path) { const std::string& genericPath {getGenericPath(path)}; @@ -1116,17 +998,6 @@ namespace Utils } } - bool isDirectorySTD(const std::filesystem::path& path) - { - try { - return std::filesystem::is_directory(path); - } - catch (std::filesystem::filesystem_error& error) { - LOG(LogError) << "FileSystemUtil::isDirectory(): " << error.what(); - return false; - } - } - bool isSymlink(const std::string& path) { const std::string& genericPath {getGenericPath(path)}; @@ -1143,17 +1014,6 @@ namespace Utils } } - bool isSymlinkSTD(const std::filesystem::path& path) - { - try { - return std::filesystem::is_symlink(path); - } - catch (std::filesystem::filesystem_error& error) { - LOG(LogError) << "FileSystemUtil::isSymlink(): " << error.what(); - return false; - } - } - bool isHidden(const std::string& path) { const std::string& genericPath {getGenericPath(path)}; diff --git a/es-core/src/utils/FileSystemUtil.h b/es-core/src/utils/FileSystemUtil.h index 90a5f819b..24a2a247e 100644 --- a/es-core/src/utils/FileSystemUtil.h +++ b/es-core/src/utils/FileSystemUtil.h @@ -18,7 +18,7 @@ class FileSystemVariables { public: - static inline std::filesystem::path sAppDataDirectory; + static inline std::string sAppDataDirectory; }; namespace Utils @@ -26,36 +26,29 @@ namespace Utils namespace FileSystem { using StringList = std::list; - using FileList = std::list; StringList getDirContent(const std::string& path, const bool recursive = false); - FileList getDirContentSTD(const std::filesystem::path& path, const bool recursive = false); StringList getMatchingFiles(const std::string& pattern); StringList getPathList(const std::string& path); void setHomePath(const std::string& path); std::string getHomePath(); - std::filesystem::path getHomePathSTD(); + std::string getAppDataDirectory(); + std::string getInternalAppDataDirectory(); std::string getSystemHomeDirectory(); - std::filesystem::path getAppDataDirectory(); - std::filesystem::path getInternalAppDataDirectory(); + std::string getCWDPath(); std::string getPathToBinary(const std::string& executable); void setExePath(const std::string& path); std::string getExePath(); - std::filesystem::path getExePathSTD(); std::string getEsBinary(); - std::filesystem::path getEsBinarySTD(); - std::filesystem::path getProgramDataPath(); + std::string getProgramDataPath(); std::string getPreferredPath(const std::string& path); std::string getGenericPath(const std::string& path); std::string getEscapedPath(const std::string& path); std::string getCanonicalPath(const std::string& path); - std::filesystem::path getCanonicalPathSTD(const std::filesystem::path& path); - std::string getAbsolutePath( - const std::string& path, - const std::string& base = std::filesystem::current_path().string()); + std::string getAbsolutePath(const std::string& path, + const std::string& base = getCWDPath()); std::string getParent(const std::string& path); std::string getFileName(const std::string& path); - std::filesystem::path getFileNameSTD(const std::filesystem::path& path); std::string getStem(const std::string& path); std::string getExtension(const std::string& path); long getFileSize(const std::filesystem::path& path); @@ -81,15 +74,11 @@ namespace Utils bool removeDirectory(const std::string& path, bool recursive); bool createDirectory(const std::string& path); bool exists(const std::string& path); - bool existsSTD(const std::filesystem::path& path); bool driveExists(const std::string& path); bool isAbsolute(const std::string& path); bool isRegularFile(const std::string& path); - bool isRegularFileSTD(const std::filesystem::path& path); bool isDirectory(const std::string& path); - bool isDirectorySTD(const std::filesystem::path& path); bool isSymlink(const std::string& path); - bool isSymlinkSTD(const std::filesystem::path& path); bool isHidden(const std::string& path); } // namespace FileSystem From 717dce004d6965bd81ef847d49a1dc742de50308 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 19 Dec 2023 17:38:21 +0100 Subject: [PATCH 086/320] (Windows) Removed support for building the application using MinGW --- CMakeLists.txt | 63 ++---- es-app/CMakeLists.txt | 159 ++++----------- es-pdf-converter/CMakeLists.txt | 11 +- external/CMakeLists.txt | 5 - ...SVC.bat => Windows_dependencies_build.bat} | 2 +- tools/Windows_dependencies_build_MinGW.sh | 93 --------- ...SVC.bat => Windows_dependencies_setup.bat} | 2 +- tools/Windows_dependencies_setup_MinGW.sh | 188 ------------------ 8 files changed, 66 insertions(+), 457 deletions(-) rename tools/{Windows_dependencies_build_MSVC.bat => Windows_dependencies_build.bat} (97%) delete mode 100644 tools/Windows_dependencies_build_MinGW.sh rename tools/{Windows_dependencies_setup_MSVC.bat => Windows_dependencies_setup.bat} (99%) delete mode 100644 tools/Windows_dependencies_setup_MinGW.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index a5f1006b6..cdfd87f8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,8 +127,7 @@ if(APPLE) endif() find_package(CURL REQUIRED) elseif(WIN32) - if(NOT EXISTS ${PROJECT_SOURCE_DIR}/external/pugixml/libpugixml.dll AND # MinGW - NOT EXISTS ${PROJECT_SOURCE_DIR}/external/pugixml/pugixml.dll) # MSVC + if(NOT EXISTS ${PROJECT_SOURCE_DIR}/external/pugixml/pugixml.dll) message(FATAL_ERROR "-- You need to build the dependencies in ./external first") endif() elseif(NOT EMSCRIPTEN AND NOT ANDROID) @@ -164,12 +163,9 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES GNU) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.1) message(SEND_ERROR "You need at least GCC 7.1 to compile ES-DE") endif() - if(WIN32) - set(CMAKE_CXX_FLAGS "-mwindows ${CMAKE_CXX_FLAGS}") - endif() elseif(CMAKE_CXX_COMPILER_ID MATCHES MSVC) message("-- Compiler is MSVC") - # If using the MSVC compiler on Windows, disable the built-in min() and max() macros. + # Disable the built-in min() and max() macros. add_compile_definitions(NOMINMAX) endif() @@ -525,44 +521,23 @@ if(APPLE) ${PROJECT_SOURCE_DIR}/libpugixml.a ${PROJECT_SOURCE_DIR}/libSDL2-2.0.0.dylib) elseif(WIN32) - if(CMAKE_CXX_COMPILER_ID MATCHES MSVC) - set(COMMON_LIBRARIES ${PROJECT_SOURCE_DIR}/avcodec.lib - ${PROJECT_SOURCE_DIR}/avfilter.lib - ${PROJECT_SOURCE_DIR}/avformat.lib - ${PROJECT_SOURCE_DIR}/avutil.lib - ${PROJECT_SOURCE_DIR}/swresample.lib - ${PROJECT_SOURCE_DIR}/swscale.lib - ${PROJECT_SOURCE_DIR}/FreeImage.lib - ${PROJECT_SOURCE_DIR}/git2.lib - ${PROJECT_SOURCE_DIR}/glew32.lib - ${PROJECT_SOURCE_DIR}/libcurl-x64.lib - ${PROJECT_SOURCE_DIR}/freetype.lib - ${PROJECT_SOURCE_DIR}/lunasvg.lib - ${PROJECT_SOURCE_DIR}/pugixml.lib - ${PROJECT_SOURCE_DIR}/rlottie.lib - ${PROJECT_SOURCE_DIR}/SDL2main.lib - ${PROJECT_SOURCE_DIR}/SDL2.lib - Winmm.dll) - else() - set(COMMON_LIBRARIES ${PROJECT_SOURCE_DIR}/avcodec-60.dll - ${PROJECT_SOURCE_DIR}/avfilter-9.dll - ${PROJECT_SOURCE_DIR}/avformat-60.dll - ${PROJECT_SOURCE_DIR}/avutil-58.dll - ${PROJECT_SOURCE_DIR}/swresample-4.dll - ${PROJECT_SOURCE_DIR}/swscale-7.dll - ${PROJECT_SOURCE_DIR}/FreeImage.dll - ${PROJECT_SOURCE_DIR}/libgit2.dll - ${PROJECT_SOURCE_DIR}/glew32.dll - ${PROJECT_SOURCE_DIR}/libcurl-x64.dll - ${PROJECT_SOURCE_DIR}/libfreetype.dll - ${PROJECT_SOURCE_DIR}/liblunasvg.dll - ${PROJECT_SOURCE_DIR}/libpugixml.dll - ${PROJECT_SOURCE_DIR}/libSDL2main.a - ${PROJECT_SOURCE_DIR}/librlottie.dll - ${PROJECT_SOURCE_DIR}/SDL2.dll - mingw32 - Winmm.dll) - endif() + set(COMMON_LIBRARIES ${PROJECT_SOURCE_DIR}/avcodec.lib + ${PROJECT_SOURCE_DIR}/avfilter.lib + ${PROJECT_SOURCE_DIR}/avformat.lib + ${PROJECT_SOURCE_DIR}/avutil.lib + ${PROJECT_SOURCE_DIR}/swresample.lib + ${PROJECT_SOURCE_DIR}/swscale.lib + ${PROJECT_SOURCE_DIR}/FreeImage.lib + ${PROJECT_SOURCE_DIR}/git2.lib + ${PROJECT_SOURCE_DIR}/glew32.lib + ${PROJECT_SOURCE_DIR}/libcurl-x64.lib + ${PROJECT_SOURCE_DIR}/freetype.lib + ${PROJECT_SOURCE_DIR}/lunasvg.lib + ${PROJECT_SOURCE_DIR}/pugixml.lib + ${PROJECT_SOURCE_DIR}/rlottie.lib + ${PROJECT_SOURCE_DIR}/SDL2main.lib + ${PROJECT_SOURCE_DIR}/SDL2.lib + Winmm.dll) elseif(ANDROID) set(COMMON_LIBRARIES ${COMMON_LIBRARIES} # FFmpeg libraries. diff --git a/es-app/CMakeLists.txt b/es-app/CMakeLists.txt index 0936fe824..db54eca85 100644 --- a/es-app/CMakeLists.txt +++ b/es-app/CMakeLists.txt @@ -147,124 +147,49 @@ endif() if(WIN32) install(TARGETS ES-DE RUNTIME DESTINATION .) install(TARGETS es-pdf-convert RUNTIME DESTINATION es-pdf-converter) - if(CMAKE_CXX_COMPILER_ID MATCHES MSVC) - set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION .) - if(CMAKE_BUILD_TYPE MATCHES Debug) - set(CMAKE_INSTALL_DEBUG_LIBRARIES TRUE) - endif() - install(FILES ../avcodec-60.dll - ../avfilter-9.dll - ../avformat-60.dll - ../avutil-58.dll - ../postproc-57.dll - ../swresample-4.dll - ../swscale-7.dll - ../FreeImage.dll - ../freetype.dll - ../git2.dll - ../glew32.dll - ../libcrypto-1_1-x64.dll - ../libcurl-x64.dll - ../libssl-1_1-x64.dll - ../lunasvg.dll - ../pugixml.dll - ../rlottie.dll - ../SDL2.dll - ../vcomp140.dll - DESTINATION .) - install(FILES ../es-pdf-converter/charset.dll - ../es-pdf-converter/deflate.dll - ../es-pdf-converter/freetype.dll - ../es-pdf-converter/iconv.dll - ../es-pdf-converter/jpeg8.dll - ../es-pdf-converter/lcms2.dll - ../es-pdf-converter/Lerc.dll - ../es-pdf-converter/libcrypto-3-x64.dll - ../es-pdf-converter/libcurl.dll - ../es-pdf-converter/liblzma.dll - ../es-pdf-converter/libpng16.dll - ../es-pdf-converter/libssh2.dll - ../es-pdf-converter/openjp2.dll - ../es-pdf-converter/poppler.dll - ../es-pdf-converter/poppler-cpp.dll - ../es-pdf-converter/tiff.dll - ../es-pdf-converter/zlib.dll - ../es-pdf-converter/zstd.dll - DESTINATION es-pdf-converter) - else() - install(FILES ../avcodec-60.dll - ../avfilter-9.dll - ../avformat-60.dll - ../avutil-58.dll - ../postproc-57.dll - ../swresample-4.dll - ../swscale-7.dll - ../FreeImage.dll - ../glew32.dll - ../libcrypto-1_1-x64.dll - ../libcurl-x64.dll - ../libfreetype.dll - ../libgit2.dll - ../liblunasvg.dll - ../libpugixml.dll - ../librlottie.dll - ../libssl-1_1-x64.dll - ../SDL2.dll - ../vcomp140.dll - DESTINATION .) - install(FILES ../es-pdf-converter/libbrotlicommon.dll - ../es-pdf-converter/libbrotlidec.dll - ../es-pdf-converter/libbz2-1.dll - ../es-pdf-converter/libcairo-2.dll - ../es-pdf-converter/libcrypto-3-x64.dll - ../es-pdf-converter/libcurl-4.dll - ../es-pdf-converter/libdeflate.dll - ../es-pdf-converter/libexpat-1.dll - ../es-pdf-converter/libffi-8.dll - ../es-pdf-converter/libfontconfig-1.dll - ../es-pdf-converter/libfreetype-6.dll - ../es-pdf-converter/libgcc_s_seh-1.dll - ../es-pdf-converter/libgio-2.0-0.dll - ../es-pdf-converter/libglib-2.0-0.dll - ../es-pdf-converter/libgmodule-2.0-0.dll - ../es-pdf-converter/libgobject-2.0-0.dll - ../es-pdf-converter/libgraphite2.dll - ../es-pdf-converter/libharfbuzz-0.dll - ../es-pdf-converter/libiconv-2.dll - ../es-pdf-converter/libidn2-0.dll - ../es-pdf-converter/libintl-8.dll - ../es-pdf-converter/libjbig-0.dll - ../es-pdf-converter/libjpeg-8.dll - ../es-pdf-converter/liblcms2-2.dll - ../es-pdf-converter/libLerc.dll - ../es-pdf-converter/liblzma-5.dll - ../es-pdf-converter/libnghttp2-14.dll - ../es-pdf-converter/libnspr4.dll - ../es-pdf-converter/libopenjp2-7.dll - ../es-pdf-converter/libpcre2-8-0.dll - ../es-pdf-converter/libpixman-1-0.dll - ../es-pdf-converter/libplc4.dll - ../es-pdf-converter/libplds4.dll - ../es-pdf-converter/libpng16-16.dll - ../es-pdf-converter/libpoppler-129.dll - ../es-pdf-converter/libpoppler-cpp-0.dll - ../es-pdf-converter/libpoppler-glib-8.dll - ../es-pdf-converter/libpsl-5.dll - ../es-pdf-converter/libsharpyuv-0.dll - ../es-pdf-converter/libssh2-1.dll - ../es-pdf-converter/libssl-3-x64.dll - ../es-pdf-converter/libstdc++-6.dll - ../es-pdf-converter/libtiff-6.dll - ../es-pdf-converter/libunistring-5.dll - ../es-pdf-converter/libwebp-7.dll - ../es-pdf-converter/libwinpthread-1.dll - ../es-pdf-converter/libzstd.dll - ../es-pdf-converter/nss3.dll - ../es-pdf-converter/nssutil3.dll - ../es-pdf-converter/smime3.dll - ../es-pdf-converter/zlib1.dll - DESTINATION es-pdf-converter) + set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION .) + if(CMAKE_BUILD_TYPE MATCHES Debug) + set(CMAKE_INSTALL_DEBUG_LIBRARIES TRUE) endif() + install(FILES ../avcodec-60.dll + ../avfilter-9.dll + ../avformat-60.dll + ../avutil-58.dll + ../postproc-57.dll + ../swresample-4.dll + ../swscale-7.dll + ../FreeImage.dll + ../freetype.dll + ../git2.dll + ../glew32.dll + ../libcrypto-1_1-x64.dll + ../libcurl-x64.dll + ../libssl-1_1-x64.dll + ../lunasvg.dll + ../pugixml.dll + ../rlottie.dll + ../SDL2.dll + ../vcomp140.dll + DESTINATION .) + install(FILES ../es-pdf-converter/charset.dll + ../es-pdf-converter/deflate.dll + ../es-pdf-converter/freetype.dll + ../es-pdf-converter/iconv.dll + ../es-pdf-converter/jpeg8.dll + ../es-pdf-converter/lcms2.dll + ../es-pdf-converter/Lerc.dll + ../es-pdf-converter/libcrypto-3-x64.dll + ../es-pdf-converter/libcurl.dll + ../es-pdf-converter/liblzma.dll + ../es-pdf-converter/libpng16.dll + ../es-pdf-converter/libssh2.dll + ../es-pdf-converter/openjp2.dll + ../es-pdf-converter/poppler.dll + ../es-pdf-converter/poppler-cpp.dll + ../es-pdf-converter/tiff.dll + ../es-pdf-converter/zlib.dll + ../es-pdf-converter/zstd.dll + DESTINATION es-pdf-converter) install(FILES ../LICENSE DESTINATION .) install(DIRECTORY ${CMAKE_SOURCE_DIR}/licenses DESTINATION .) diff --git a/es-pdf-converter/CMakeLists.txt b/es-pdf-converter/CMakeLists.txt index 23ed46a90..3857bdd47 100644 --- a/es-pdf-converter/CMakeLists.txt +++ b/es-pdf-converter/CMakeLists.txt @@ -10,14 +10,9 @@ project(es-pdf-convert) if(WIN32) set(POPPLER_CPP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/Library/include/poppler/cpp) - if(CMAKE_CXX_COMPILER_ID MATCHES MSVC) - set(POPPLER_CPP_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/poppler-cpp.lib) - # Disable DLL interface warnings. - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4251") - else() - set(POPPLER_CPP_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/libpoppler-cpp-0.dll) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -municode") - endif() + set(POPPLER_CPP_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/poppler-cpp.lib) + # Disable DLL interface warnings. + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4251") elseif(APPLE) set(POPPLER_CPP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/cpp ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/build/cpp) set(POPPLER_CPP_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/../libpoppler-cpp.0.dylib) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 098fb6daa..666d4d83c 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -27,11 +27,6 @@ endif() unset(CMAKE_CXX_FLAGS) unset(CMAKE_EXE_LINKER_FLAGS) -# Strip the DLL files when building with MinGW. -if(WIN32 AND NOT CMAKE_CXX_COMPILER_ID MATCHES MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s") -endif() - if (WIN32) set(BUILD_SHARED_LIBS ON) else() diff --git a/tools/Windows_dependencies_build_MSVC.bat b/tools/Windows_dependencies_build.bat similarity index 97% rename from tools/Windows_dependencies_build_MSVC.bat rename to tools/Windows_dependencies_build.bat index 89d6dcac9..58d98fb06 100644 --- a/tools/Windows_dependencies_build_MSVC.bat +++ b/tools/Windows_dependencies_build.bat @@ -1,7 +1,7 @@ :: SPDX-License-Identifier: MIT :: :: ES-DE -:: Windows_dependencies_build_MSVC.bat +:: Windows_dependencies_build.bat :: :: Builds the external dependencies in-tree using MSVC. :: The Windows_dependencies_setup_MSVC.bat script must have been executed prior to this. diff --git a/tools/Windows_dependencies_build_MinGW.sh b/tools/Windows_dependencies_build_MinGW.sh deleted file mode 100644 index 6112d4a63..000000000 --- a/tools/Windows_dependencies_build_MinGW.sh +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/sh -# SPDX-License-Identifier: MIT -# -# ES-DE -# Windows_dependencies_build_MinGW.sh -# -# Builds the external dependencies in-tree. -# The Windows_dependencies_setup_MinGW.sh script must have been executed prior to this. -# All libraries will be recompiled from scratch every time. -# -# This script needs to run from the root of the repository. -# - -# How many CPU threads to use for the compilation. -JOBS=4 - -if [ ! -f .clang-format ]; then - echo "You need to run this script from the root of the repository." - exit -fi - -cd external - -if [ ! -d pugixml ]; then - echo "You need to first run tools/Windows_dependencies_setup_MinGW.sh to download and configure the dependencies." - exit -fi - -echo "Building all dependencies in the ./external directory..." - -echo -e "\nBuilding GLEW" - -if [ ! -d glew ]; then - echo "GLEW directory is missing, aborting." - exit -fi - -cd glew -make clean -make -j${JOBS} 2>/dev/null -cp lib/glew32.dll ../.. -cd .. - -echo -e "\nBuilding FreeType" - -if [ ! -d freetype/build ]; then - echo "FreeType directory is missing, aborting." - exit -fi - -cd freetype/build -rm -f CMakeCache.txt -cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON .. -make clean -make -j${JOBS} -strip libfreetype.dll -cp libfreetype.dll ../../.. -cd ../.. - -echo -e "\nBuilding libgit2" - -if [ ! -d libgit2/build ]; then - echo "libgit2 directory is missing, aborting." - exit -fi - -cd libgit2/build -rm -f CMakeCache.txt -cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF .. -make clean -make -j${JOBS} -strip libgit2.dll -cp libgit2.dll ../../.. -cd ../.. - -echo -e "\nBuilding pugixml" - -if [ ! -d pugixml ]; then - echo "pugixml directory is missing, aborting." - exit -fi - -cd pugixml -rm -f CMakeCache.txt -cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON . -make clean -make -j${JOBS} -strip libpugixml.dll -cp libpugixml.dll ../.. -cd .. - -echo -echo "Done building all dependencies." diff --git a/tools/Windows_dependencies_setup_MSVC.bat b/tools/Windows_dependencies_setup.bat similarity index 99% rename from tools/Windows_dependencies_setup_MSVC.bat rename to tools/Windows_dependencies_setup.bat index d85b3c5ac..179e70d0b 100644 --- a/tools/Windows_dependencies_setup_MSVC.bat +++ b/tools/Windows_dependencies_setup.bat @@ -1,7 +1,7 @@ :: SPDX-License-Identifier: MIT :: :: ES-DE -:: Windows_dependencies_setup_MSVC.bat +:: Windows_dependencies_setup.bat :: :: Downloads and prepares the external dependencies for building in-tree using MSVC. :: If the directories already exist they will be removed and the libraries will be downloaded again. diff --git a/tools/Windows_dependencies_setup_MinGW.sh b/tools/Windows_dependencies_setup_MinGW.sh deleted file mode 100644 index db3737370..000000000 --- a/tools/Windows_dependencies_setup_MinGW.sh +++ /dev/null @@ -1,188 +0,0 @@ -#!/bin/sh -# SPDX-License-Identifier: MIT -# -# ES-DE -# Windows_dependencies_setup_MinGW.sh -# -# Downloads and prepares the external dependencies for building in-tree. -# If the directories already exist they will be removed and the libraries will be downloaded again. -# -# This script needs to run from the root of the repository. -# - -if [ ! -f .clang-format ]; then - echo "You need to run this script from the root of the repository." - exit -fi - -echo -e "Setting up dependencies in the ./external directory..." - -cd external - -echo -e "\nSetting up curl" -rm -rf curl* - -curl -O https://curl.se/windows/dl-8.2.1_11/curl-8.2.1_11-win64-mingw.zip -unzip curl-8.2.1_11-win64-mingw.zip - -if [ ! -d curl-8.2.1_11-win64-mingw ]; then - echo "curl directory is missing, aborting." - exit -fi - -# Needed due to some kind of file system race condition that sometimes occurs on Windows. -sleep 3 - -mv curl-8.2.1_11-win64-mingw curl - -cp -p curl/bin/libcurl-x64.dll .. - -echo -e "\nSetting up GLEW" -rm -rf glew* - -curl -LO https://sourceforge.net/projects/glew/files/glew/2.1.0/glew-2.1.0.zip -unzip glew-2.1.0.zip - -if [ ! -d glew-2.1.0 ]; then - echo "GLEW directory is missing, aborting." - exit -fi - -sleep 3 - -mv glew-2.1.0 glew - -echo -e "\nSetting up FreeType" -rm -rf freetype - -git clone https://github.com/freetype/freetype.git - -if [ ! -d freetype ]; then - echo "FreeType directory is missing, aborting." - exit -fi - -cd freetype -git checkout VER-2-13-0 -mkdir build -cd .. - -echo -e "\nSetting up FreeImage" -rm -rf FreeImage* - -curl -LO https://downloads.sourceforge.net/project/freeimage/Binary%20Distribution/3.18.0/FreeImage3180Win32Win64.zip -unzip FreeImage3180Win32Win64.zip - -if [ ! -d FreeImage ]; then - echo "FreeImage directory is missing, aborting." - exit -fi - -cp -p FreeImage/Dist/x64/FreeImage.dll .. - -echo -e "\nSetting up libgit2" -rm -rf libgit2 - -git clone https://github.com/libgit2/libgit2.git - -if [ ! -d libgit2 ]; then - echo "libgit2 directory is missing, aborting." - exit -fi - -cd libgit2 -git checkout v1.7.1 -mkdir build -cd .. - -echo -e "\nSetting up Poppler" -rm -rf [pP]oppler* - -curl -JO https://gitlab.com/es-de/emulationstation-de/-/package_files/83268133/download -unzip Poppler_Windows_MinGW_23.06.0-1.zip - -if [ ! -d poppler ]; then - echo "Poppler directory is missing, aborting." - exit -fi - -cp -p poppler/Library/bin/*.dll ../es-pdf-converter - -echo -e "\nSetting up pugixml" -rm -rf pugixml - -git clone https://github.com/zeux/pugixml.git - -if [ ! -d pugixml ]; then - echo "pugixml directory is missing, aborting." - exit -fi - -cd pugixml -git checkout v1.13 -cd .. - -echo -e "\nSetting up SDL" -rm -rf SDL2* - -curl -O https://libsdl.org/release/SDL2-devel-2.28.5-mingw.tar.gz - -tar xvzf SDL2-devel-2.28.5-mingw.tar.gz - -if [ ! -d SDL2-2.28.5 ]; then - echo "SDL directory is missing, aborting." - exit -fi - -sleep 3 - -mv SDL2-2.28.5 SDL2 - -mv SDL2/x86_64-w64-mingw32/include/SDL2 SDL2/ -cp -p SDL2/x86_64-w64-mingw32/lib/libSDL2main.a .. -cp -p SDL2/x86_64-w64-mingw32/bin/SDL2.dll .. - -echo -e "\nSetting up FFmpeg" -rm -rf ffmpeg* - -# This package should be available for download for two years. -curl -LO https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2023-05-31-12-47/ffmpeg-n6.0-22-g549430e14d-win64-gpl-shared-6.0.zip -unzip ffmpeg-n6.0-22-g549430e14d-win64-gpl-shared-6.0.zip - -if [ ! -d ffmpeg-n6.0-22-g549430e14d-win64-gpl-shared-6.0 ]; then - echo "FFmpeg directory is missing, aborting." - exit -fi - -sleep 3 - -mv ffmpeg-n6.0-22-g549430e14d-win64-gpl-shared-6.0 ffmpeg - -cp -p ffmpeg/bin/avcodec-60.dll .. -cp -p ffmpeg/bin/avfilter-9.dll .. -cp -p ffmpeg/bin/avformat-60.dll .. -cp -p ffmpeg/bin/avutil-58.dll .. -cp -p ffmpeg/bin/postproc-57.dll .. -cp -p ffmpeg/bin/swresample-4.dll .. -cp -p ffmpeg/bin/swscale-7.dll .. - -echo -e "\nSetting up OpenSSL" - -if [ ! -f /c/Program\ Files/OpenSSL-Win64/libcrypto-1_1-x64.dll ]; then - curl -O https://slproweb.com/download/Win64OpenSSL_Light-1_1_1m.exe - # Run the installer. - ./Win64OpenSSL_Light-1_1_1m.exe -fi - -# Return to the root of the repository. -cd .. - -cp -p /c/Program\ Files/OpenSSL-Win64/libcrypto-1_1-x64.dll . -cp -p /c/Program\ Files/OpenSSL-Win64/libssl-1_1-x64.dll . - -echo -e "\nCopying DLL files from Windows\System32" - -cp /c/Windows/System32/vcomp140.dll . - -echo -echo "Done setting up all dependencies." From bf8ca47669a3b5fe81b80b7ff5c7b753a735ae1a Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 19 Dec 2023 17:39:16 +0100 Subject: [PATCH 087/320] (Windows) Added the %RUNINBACKGROUND% variable for the epic system --- resources/systems/windows/es_systems.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index 222302676..98693fb49 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -590,7 +590,7 @@ Epic Games Store %ROMPATH%\epic .bat .BAT .lnk .LNK .url .URL - %HIDEWINDOW% %ESCAPESPECIALS% %EMULATOR_OS-SHELL% /C %ROM% + %HIDEWINDOW% %ESCAPESPECIALS% %RUNINBACKGROUND% %EMULATOR_OS-SHELL% /C %ROM% pcwindows epic
From 8ab3697c10dcd1e3edaee5d989784505828ad00a Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 19 Dec 2023 17:40:44 +0100 Subject: [PATCH 088/320] Documentation update --- CHANGELOG.md | 3 +- INSTALL-DEV.md | 939 +++++++++++++++++++++++++---------------------- USERGUIDE-DEV.md | 118 +++--- 3 files changed, 562 insertions(+), 498 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e47b8096a..85b297615 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,10 +20,11 @@ * Added the .dirksimple file extension to the daphne and laserdisc systems * (Unix) Removed the -Minimized flag from the Visual Pinball launch command * (Windows) Updated the find rules for Visual Pinball to match the actual filenames of the official releases +* (Windows) Added the %RUNINBACKGROUND% variable for the epic system +* (Windows) Removed support for building the application using MinGW * Added a "renderDuringTransitions" property to the image element * Added support for the 1:1 display aspect ratio * Added workarounds for some mobile GPUs which do not support all OpenGL operations when using the BGRA pixel format -* Replaced a number of homecooked functions in FileSystemUtil with those from the C++ Standard Library ### Bug fixes diff --git a/INSTALL-DEV.md b/INSTALL-DEV.md index 0709f81d2..376fddb8e 100644 --- a/INSTALL-DEV.md +++ b/INSTALL-DEV.md @@ -162,7 +162,7 @@ make -j8 ``` Due to buggy AMD GPU drivers it could be a good idea to use the `LSAN_suppressions` file included in the repository to avoid reports of a lot of irrelevant issue, for example: ``` -LSAN_OPTIONS="suppressions=tools/LSAN_suppressions" ./emulationstation --debug --resolution 2560 1440 +LSAN_OPTIONS="suppressions=tools/LSAN_suppressions" ./es-de --debug --resolution 2560 1440 ``` This applies to LeakSanitizer specifically, which is integrated into AddressSanitizer. @@ -175,7 +175,7 @@ make -j8 It could also be a good idea to use the `TSAN_suppressions` file included in the repository to suppress issues reported by some third party libraries, for example: ``` -TSAN_OPTIONS="suppressions=tools/TSAN_suppressions" ./emulationstation --debug --resolution 2560 1440 +TSAN_OPTIONS="suppressions=tools/TSAN_suppressions" ./es-de --debug --resolution 2560 1440 ``` To enable UndefinedBehaviorSanitizer which helps with identifying bugs that may otherwise be hard to find, build with the UBSAN option: @@ -196,17 +196,17 @@ As for advanced debugging, Valgrind is a very powerful and useful tool which can The most common tool is Memcheck to check for memory leaks, which you run like this: ``` -valgrind --tool=memcheck --leak-check=full --log-file=../valgrind_run_01 ./emulationstation +valgrind --tool=memcheck --leak-check=full --log-file=../valgrind_run_01 ./es-de ``` There are numerous flags that can be used, for example this will also track reachable memory which could indicate further leaks: ``` -valgrind --tool=memcheck --leak-check=full --track-origins=yes --show-reachable=yes --log-file=../valgrind_run_01 ./emulationstation +valgrind --tool=memcheck --leak-check=full --track-origins=yes --show-reachable=yes --log-file=../valgrind_run_01 ./es-de ``` Another helpful tool is the Callgrind call-graph analyzer: ``` -valgrind --tool=callgrind --log-file=../valgrind_run_01 ./emulationstation +valgrind --tool=callgrind --log-file=../valgrind_run_01 ./es-de ``` The output file can be loaded into an application such as KCachegrind for data analysis. @@ -215,7 +215,7 @@ The output file can be loaded into an application such as KCachegrind for data a Yet another very useful Valgrind tool is the Massif heap profiler, which can be run like this: ``` -valgrind --tool=massif --massif-out-file=../massif.out.01 ./emulationstation +valgrind --tool=massif --massif-out-file=../massif.out.01 ./es-de ``` The output file can be loaded into an application such as Massif-Visualizer for analysis. @@ -303,35 +303,35 @@ sudo make install Assuming the default installation prefix /usr has been used, this is the directory structure for the installation: ``` -/usr/bin/emulationstation +/usr/bin/es-de /usr/bin/es-pdf-convert -/usr/share/applications/org.es_de.emulationstation-de.desktop -/usr/share/emulationstation/licenses/* -/usr/share/emulationstation/resources/* -/usr/share/emulationstation/themes/* -/usr/share/emulationstation/LICENSE -/usr/share/icons/hicolor/scalable/apps/org.es_de.emulationstation-de.svg -/usr/share/man/man6/emulationstation.6.gz -/usr/share/metainfo/org.es_de.emulationstation-de.appdata.xml -/usr/share/pixmaps/org.es_de.emulationstation-de.svg +/usr/share/applications/org.es_de.frontend.desktop +/usr/share/es-de/licenses/* +/usr/share/es-de/resources/* +/usr/share/es-de/themes/* +/usr/share/es-de/LICENSE +/usr/share/icons/hicolor/scalable/apps/org.es_de.frontend.svg +/usr/share/man/man6/es-de.6.gz +/usr/share/metainfo/org.es_de.frontend.appdata.xml +/usr/share/pixmaps/org.es_de.frontend.svg ``` However, when installing manually instead of building a package, it's recommended to change the install prefix to /usr/local instead of /usr. -Be aware that if using the GNOME desktop environment, /usr/share/pixmaps/emulationstation.svg must exist in order for the ES-DE icon to be shown in the Dash and task switcher. +Be aware that if using the GNOME desktop environment, /usr/share/pixmaps/org.es_de.frontend.svg must exist in order for the ES-DE icon to be shown in the Dash and task switcher. ES-DE will look in the following locations for application resources, in the listed order: -* \/.emulationstation/resources/ -* \/share/emulationstation/resources/ +* \/ES-DE/resources/ +* \/share/es-de/resources/ * \/resources/ The resources directory is critical, without it the application won't start. As well the following locations will be searched for themes, also in the listed order: -* \/.emulationstation/themes/ -* \/share/emulationstation/themes/ +* \/ES-DE/themes/ +* \/share/es-de/themes/ * \/themes/ A theme is not mandatory to start the application, but ES-DE will be basically useless without it. @@ -346,23 +346,23 @@ Creation of Debian .deb packages is enabled by default, simply run `cpack` to ge myusername@computer:~/emulationstation-de$ cpack CPack: Create package using DEB CPack: Install projects -CPack: - Run preinstall target for: emulationstation-de -CPack: - Install project: emulationstation-de [] +CPack: - Run preinstall target for: es-de +CPack: - Install project: es-de [] CPack: Create package CPackDeb: - Generating dependency list -CPack: - package: /home/myusername/emulationstation-de/emulationstation-de-2.2.0-x64.deb generated. +CPack: - package: /home/myusername/emulationstation-de/es-de_3.0.0-x64.deb generated. ``` You may want to check that the dependencies look fine, as they're (mostly) automatically generated by CMake: ``` -dpkg -I ./emulationstation-de-2.2.0-x64.deb +dpkg -I ./es-de_3.0.0-x64.deb ``` The package can now be installed using a package manager, for example apt: ``` -sudo apt install ./emulationstation-de-2.2.0-x64.deb +sudo apt install ./es-de_3.0.0-x64.deb ``` To build an RPM package instead, set the flag LINUX_CPACK_GENERATOR to RPM when running cmake, for example: @@ -377,11 +377,11 @@ Then simply run `cpack`: myusername@computer:~/emulationstation-de$ cpack CPack: Create package using RPM CPack: Install projects -CPack: - Run preinstall target for: emulationstation-de -CPack: - Install project: emulationstation-de [] +CPack: - Run preinstall target for: es-de +CPack: - Install project: es-de [] CPack: Create package -CPackRPM: Will use GENERATED spec file: /home/myusername/emulationstation-de/_CPack_Packages/Linux/RPM/SPECS/emulationstation-de.spec -CPack: - package: /home/myusername/emulationstation-de/emulationstation-de-2.2.0-x64.rpm generated. +CPackRPM: Will use GENERATED spec file: /home/myusername/emulationstation-de/_CPack_Packages/Linux/RPM/SPECS/es-de.spec +CPack: - package: /home/myusername/emulationstation-de/es-de_3.0.0-x64.rpm generated ``` On Fedora, you need to install rpmbuild before this command can be run: @@ -391,17 +391,17 @@ sudo dnf install rpm-build After the package generation you can check that the metadata looks fine using the `rpm` command: ``` -rpm -qi ./emulationstation-de-2.2.0-x64.rpm +rpm -qi ./es-de_3.0.0-x64.rpm ``` To see the automatically generated dependencies, run this: ``` -rpm -q --requires ./emulationstation-de-2.2.0-x64.rpm +rpm -q --requires ./es-de_3.0.0-x64.rpm ``` And of course, you can also install the package: ``` -sudo dnf install ./emulationstation-de-2.2.0-x64.rpm +sudo dnf install ./es-de_3.0.0-x64.rpm ``` **Creating an AppImage** @@ -576,37 +576,37 @@ make install This will be the directory structure for the installation: ``` -/Applications/EmulationStation Desktop Edition.app/Contents/Info.plist -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/EmulationStation -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/es-pdf-convert -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libSDL2-2.0.0.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libavcodec.60.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libavfilter.9.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libavformat.60.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libavutil.58.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libfontconfig.1.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libfreetype.6.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libgit2.1.6.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libjpeg.62.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libopenjp2.7.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libpoppler-cpp.0.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libpoppler.129.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libpostproc.57.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libswresample.4.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libswscale.7.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libtiff.6.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libvorbis.0.4.9.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/MacOS/libvorbisenc.2.0.12.dylib -/Applications/EmulationStation Desktop Edition.app/Contents/Resources/EmulationStation-DE.icns -/Applications/EmulationStation Desktop Edition.app/Contents/Resources/LICENSE -/Applications/EmulationStation Desktop Edition.app/Contents/Resources/licenses/* -/Applications/EmulationStation Desktop Edition.app/Contents/Resources/resources/* -/Applications/EmulationStation Desktop Edition.app/Contents/Resources/themes/* +/Applications/ES-DE.app/Contents/Info.plist +/Applications/ES-DE.app/Contents/MacOS/ES-DE +/Applications/ES-DE.app/Contents/MacOS/es-pdf-convert +/Applications/ES-DE.app/Contents/MacOS/libSDL2-2.0.0.dylib +/Applications/ES-DE.app/Contents/MacOS/libavcodec.60.dylib +/Applications/ES-DE.app/Contents/MacOS/libavfilter.9.dylib +/Applications/ES-DE.app/Contents/MacOS/libavformat.60.dylib +/Applications/ES-DE.app/Contents/MacOS/libavutil.58.dylib +/Applications/ES-DE.app/Contents/MacOS/libfontconfig.1.dylib +/Applications/ES-DE.app/Contents/MacOS/libfreetype.6.dylib +/Applications/ES-DE.app/Contents/MacOS/libgit2.1.6.dylib +/Applications/ES-DE.app/Contents/MacOS/libjpeg.62.dylib +/Applications/ES-DE.app/Contents/MacOS/libopenjp2.7.dylib +/Applications/ES-DE.app/Contents/MacOS/libpoppler-cpp.0.dylib +/Applications/ES-DE.app/Contents/MacOS/libpoppler.129.dylib +/Applications/ES-DE.app/Contents/MacOS/libpostproc.57.dylib +/Applications/ES-DE.app/Contents/MacOS/libswresample.4.dylib +/Applications/ES-DE.app/Contents/MacOS/libswscale.7.dylib +/Applications/ES-DE.app/Contents/MacOS/libtiff.6.dylib +/Applications/ES-DE.app/Contents/MacOS/libvorbis.0.4.9.dylib +/Applications/ES-DE.app/Contents/MacOS/libvorbisenc.2.0.12.dylib +/Applications/ES-DE.app/Contents/Resources/ES-DE.icns +/Applications/ES-DE.app/Contents/Resources/LICENSE +/Applications/ES-DE.app/Contents/Resources/licenses/* +/Applications/ES-DE.app/Contents/Resources/resources/* +/Applications/ES-DE.app/Contents/Resources/themes/* ``` ES-DE will look in the following locations for application resources, in the listed order: -* \/.emulationstation/resources/ +* \/ES-DE/resources/ * \/../Resources/resources/ * \/resources/ @@ -614,7 +614,7 @@ The resources directory is critical, without it the application won't start. As well the following locations will be searched for themes, also in the listed order: -* \/.emulationstation/themes/ +* \/ES-DE/themes/ * \/../Resources/themes/ * \/themes/ @@ -630,19 +630,15 @@ Simply run `cpack` to build a .dmg disk image/installer: myusername@computer:~/emulationstation-de$ cpack CPack: Create package using Bundle CPack: Install projects -CPack: - Run preinstall target for: emulationstation-de -CPack: - Install project: emulationstation-de [] +CPack: - Run preinstall target for: es-de +CPack: - Install project: es-de [] CPack: Create package -CPack: - package: /Users/myusername/emulationstation-de/EmulationStation-DE-2.2.0-x64.dmg generated. +CPack: - package: /Users/myusername/emulationstation-de/ES-DE_3.0.0-arm64.dmg generated. ``` ## Building on Windows -Although both Microsoft Visual C++ (MSVC) and GCC (MinGW) have historically been supported for building ES-DE on Windows, as of the 2.2.0 release MinGW is no longer recommended and support for it will likely be dropped in future releases. - -Although MinGW produces much higher quality code than MSVC with ES-DE running around 10% to 25% faster it's unfortunately not sustainable to keep using it. There are multiple technical issues with third party libraries like severe threading issues with FFmpeg and some libraries like Poppler not being readily available. Debugging with MinGW is also a very slow and tedious process compared to MSVC. MinGW up to 9.2.0 works more or less fine but anything more modern than this introduces issues like FFmpeg's avfilter_graph_free() call taking up to 7000 times longer to complete which makes video playback unusable. Setting filter graphs to use single threads solves some but not all issues. As well libgit2 has (probably) a race condition that causes random repository corruption that is likely only present when using MinGW. - -Clang/LLVM has also been evaluated but it suffers from at least the same threading issues as MinGW, likely because it uses libraries from the latter. It also fails to build some of the third party libraries needed by ES-DE. +Only the Microsoft Visual C++ (MSVC) compiler is supported on Windows. Although MinGW/GCC produces higher quality code with ES-DE running around 10% to 25% faster it's unfortunately not sustainable to use it. There are multiple technical issues with third party libraries like severe threading issues with FFmpeg and some libraries like Poppler not being readily available. **MSVC setup** @@ -679,21 +675,6 @@ The way the MSVC environment works is that a specific developer shell is provide It's important to choose the x64-specific shell and not the x86 variant, as ES-DE will only compile as a 64-bit application. -**MinGW (GCC) setup** - -Download the following packages and install them: - -[https://gitforwindows.org](https://gitforwindows.org) - -[https://cmake.org/download](https://cmake.org/download) - -Download the _MinGW-w64 based_ version of GCC: \ -[https://jmeubank.github.io/tdm-gcc](https://jmeubank.github.io/tdm-gcc) - -After installation, make a copy of `TDM-GCC-64\bin\mingw32-make` to `make` for your convenience. - -Only version 9.2.0 of MinGW has been confirmed to work correctly, anything newer introduces severe problems and MSVC should instead be used if a more modern compiler is required. - **Other preparations** In order to get clang-format onto the system you need to download and install Clang/LLVM: \ @@ -709,7 +690,7 @@ Configure Git. Details about its setup is beyond the scope of this document, but It's strongly recommended to set line breaks to Unix-style (line feed only) directly in the code editor. But if not done, lines breaks will anyway be converted when running clang-format on the code, as explained [here](INSTALL-DEV.md#using-clang-format-for-automatic-code-formatting). -The instructions below assume all build steps for MSVC are done in the MSVC developer console (x64 Native Tools Command Prompt for VS) and all MinGW build steps are done using the Git Bash shell. +The instructions below assume all build steps for MSVC are done in the MSVC developer console (x64 Native Tools Command Prompt for VS). **Cloning and setting up dependencies** @@ -726,29 +707,21 @@ cd emulationstation-de git checkout stable-2.2 ``` -On Windows all dependencies are kept in-tree in the `external` directory tree. Most of the libraries can be downloaded in binary form, but a few need to be built from source code. There are four scripts in the tools directory that automate this entirely. Two of them are used for the MSVC compiler and the other two for MinGW. +On Windows all dependencies are kept in-tree in the `external` directory tree. Most of the libraries can be downloaded in binary form, but a few need to be built from source code. There are two scripts in the tools directory that automate this entirely. You run them like this: -For MSVC, you run them like this: ``` cd emulationstation-de -tools\Windows_dependencies_setup_MSVC.bat -tools\Windows_dependencies_build_MSVC.bat -``` - -And for MinGW like the following: -``` -cd emulationstation-de -tools/Windows_dependencies_setup_MinGW.sh -tools/Windows_dependencies_build_MinGW.sh +tools\Windows_dependencies_setup.bat +tools\Windows_dependencies_build.bat ``` Re-running the setup script will delete and download all dependencies again, and re-running the build script will clean and rebuild from scratch. -The setup scripts for both MSVC and MinGW will download and launch an installer for OpenSSL for Windows if this has not already been installed on the build machine. Just run through the installer using the default settings and everything should work fine. +The setup scripts will download and launch an installer for OpenSSL for Windows if this has not already been installed on the build machine. Just run through the installer using the default settings and everything should work fine. Following these preparations, ES-DE should be ready to be compiled. -**Building ES-DE using MSVC** +**Building ES-DE** It's assumed that [Jom](https://wiki.qt.io/Jom) is used, but if instead using nmake then just remove _JOM_ from the -G flag argument and remove the -j flag as nmake does not support building in parallel. @@ -777,31 +750,7 @@ nmake ThreadSanitizer and UndefinedBehaviorSanitizer aren't available for the MSVC compiler. -There are a number of compiler warnings for the bundled rlottie library when building with MSVC. Unfortunately these need to be resolved upstream, but everything should still work fine so the warnings can be ignored for now. - -**Building ES-DE using MinGW** - -For a release build: - -``` -cmake -G "MinGW Makefiles" . -make -j8 -``` - -Or for a debug build: - -``` -cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug . -make -j8 -``` - -Change the -j flag to whatever amount of parallel threads you want to use for the compilation. - -Unfortunately AddressSanitizer, ThreadSanitizer and UndefinedBehaviorSanitizer do not seem to be supported with MinGW. - -You run a parallel build using multiple CPU cores with the `-j` flag, for example, `make -j6`. - -Note that compilation time is much longer than on Unix/Linux or macOS, and linking is incredibly slow for a debug build (around 10 times longer compared to Linux). The debug binary is also much larger than on Unix. +There are a number of compiler warnings for the bundled rlottie library. Unfortunately these need to be resolved upstream, but everything should still work fine so the warnings can be ignored for now. **TLS/SSL certificates** @@ -829,24 +778,24 @@ After the installation has been completed, go to the emulationstation-de directo $ cpack CPack: Create package using NSIS CPack: Install projects -CPack: - Run preinstall target for: emulationstation-de -CPack: - Install project: emulationstation-de [] +CPack: - Run preinstall target for: es-de +CPack: - Install project: es-de [] CPack: Create package -CPack: - package: C:/Programming/emulationstation-de/EmulationStation-DE-2.2.0-x64.exe generated. +CPack: - package: C:/Programming/emulationstation-de/ES-DE_3.0.0-x64.exe generated. ``` -The default installation directory suggested by the installer is `C:\Program Files\EmulationStation-DE` but this can of course be changed by the user. +The default installation directory suggested by the installer is `C:\Program Files\ES-DE` but this can of course be changed by the user. ES-DE will look in the following locations for application resources, in the listed order: -* \\\.emulationstation\resources\ +* \\\ES-DE\resources\ * \\resources\ The resources directory is critical, without it the application won't start. As well the following locations will be searched for themes, also in the listed order: -* \\\.emulationstation\themes\ +* \\\ES-DE\themes\ * \\themes\ A theme is not mandatory to start the application, but ES-DE will be basically useless without it. @@ -1017,9 +966,9 @@ The reason to not simply replace the BIOS and devices files with the new version ## Configuration -**~/.emulationstation/es_settings.xml** +**~/ES-DE/settings/es_settings.xml** -When ES-DE is first started, a configuration file will be created as `~/.emulationstation/es_settings.xml` +When ES-DE is first started, a configuration file will be created as `~/ES-DE/settings/es_settings.xml` This file will contain all supported settings at their default values. Normally you shouldn't need to modify this file manually, instead you should be able to use the menu inside ES-DE to update all the necessary settings. @@ -1051,11 +1000,11 @@ There is also support to add the variable %ESPATH% to the ROM directory setting, ``` -**~/.emulationstation/es_input.xml** +**~/ES-DE/settings/es_input.xml** As ES-DE auto-configures the keyboard and controllers, neither the input configuration step or manual adjustments to the es_input.xml file should normally be needed. Actually, unless the button layout has been customized using the input configurator, the es_input.xml file will not even exist. -But if you have customized your button layout and your controller or keyboard stop working, you can delete the `~/.emulationstation/es_input.xml` file to remove the customizations, or you can start ES-DE with the `--force-input-config` command line option to make the input configurator appear. +But if you have customized your button layout and your controller or keyboard stop working, you can delete the `~/ES-DE/settings/es_input.xml` file to remove the customizations, or you can start ES-DE with the `--force-input-config` command line option to make the input configurator appear. The input configuration is described in the [User guide](USERGUIDE-DEV.md#input-device-configuration). @@ -1091,7 +1040,7 @@ You can use **--help** or **-h** to view the list of command line options, as sh _The --anti-aliasing option is not available if ES-DE is built using the OpenGL ES renderer and the --no-update-check option is not available for builds where the application updater is disabled._ -As you can see above, you can override the home directory path using the `--home` flag. So by running for instance the command `emulationstation --home ~/games/emulation`, ES-DE will use `~/games/emulation/.emulationstation` as its application home directory. Be aware that this option completely replaces what is considered the home directory, meaning the default ROM directory ~/ROMs would be resolved to ~/games/emulation/ROMs. The same is true for the emulator core locations if es_find_rules.xml is configured to look for them relative to the home directory. So of course RetroArch and other emulators would also need to be configured to use ~/games/emulation as its base directory in this instance. +As you can see above, you can override the home directory path using the `--home` flag. So by running for instance the command `es-de --home ~/games/emulation`, ES-DE will use `~/games/emulation/ES-DE` as its application data directory. Be aware that this option completely replaces what is considered the home directory, meaning the default ROM directory ~/ROMs would be resolved to ~/games/emulation/ROMs. The same is true for the emulator core locations if es_find_rules.xml is configured to look for them relative to the home directory. So of course RetroArch and other emulators would also need to be configured to use ~/games/emulation as its base directory in this instance. Setting --resolution to a lower or higher value than the display resolution will add a border to the application window. The exception is if defining a lower resolution than the display resolution in combination with the --fullscreen-padding flag as this will pad the screen contents on a black background. This can be combined with the --screenoffset option for exact positioning on displays where bezels or similar may obstruct part of the viewable area. @@ -1132,7 +1081,7 @@ Enabling this will skip all debug messages about missing files specifically for **LegacyGamelistFileLocation** -As of ES-DE 2.0.0 any gamelist.xml files stored in the game system directories (e.g. under `~/ROMs/`) will not get loaded, they are instead required to be placed in the `~/.emulationstation/gamelists/` directory tree. By setting this option to `true` it's however possible to retain the old behavior of first looking for gamelist.xml files in the system directories on startup. Note that even if this setting is enabled ES-DE will still always create new gamelist.xml files under `~/.emulationstation/gamelists/` which was the case also for the 1.x.x releases. +As of ES-DE 2.0.0 any gamelist.xml files stored in the game system directories (e.g. under `~/ROMs/`) will not get loaded, they are instead required to be placed in the `~/ES-DE/gamelists/` directory tree. By setting this option to `true` it's however possible to retain the old behavior of first looking for gamelist.xml files in the system directories on startup. Note that even if this setting is enabled ES-DE will still always create new gamelist.xml files under `~/ES-DE/gamelists/` which was the case also for the 1.x.x releases. **LottieMaxFileCache** @@ -1160,7 +1109,261 @@ The passkey to use to change from the _Kiosk_ or _Kid_ UI modes to the _Full_ UI **UserThemeDirectory** -Sets the user theme directory. If left blank it will default to `~/.emulationstation/themes/` +Sets the user theme directory. If left blank it will default to `~/ES-DE/themes/` + +## es_find_rules.xml + +This file makes it possible to define rules for where to search for the emulator binaries and emulator cores. + +The file is located in the resources directory in the same location as the es_systems.xml file, but a customized copy can be placed in ~/ES-DE/custom_systems, which will complement the bundled file. + +Here's an example es_find_rules.xml file for Linux (this is not the complete file shipped with ES-DE as that would be too large to include here): +```xml + + + + + + + bash + sh + + + + + retroarch + org.libretro.RetroArch + + + ~/Applications/RetroArch-Linux*.AppImage + ~/.local/bin/RetroArch-Linux*.AppImage + ~/bin/RetroArch-Linux*.AppImage + /var/lib/flatpak/exports/bin/org.libretro.RetroArch + ~/.local/share/flatpak/exports/bin/org.libretro.RetroArch + + + + + + ~/snap/retroarch/current/.config/retroarch/cores + + ~/.var/app/org.libretro.RetroArch/config/retroarch/cores + + ~/.config/retroarch/cores + + /usr/lib/x86_64-linux-gnu/libretro + + /usr/lib64/libretro + + /usr/lib/libretro + + + + + + dosbox-staging + io.github.dosbox-staging + + + /var/lib/flatpak/exports/bin/io.github.dosbox-staging + ~/.local/share/flatpak/exports/bin/io.github.dosbox-staging + + + + + + yuzu + org.yuzu_emu.yuzu + + + ~/Applications/yuzu*.AppImage + ~/.local/bin/yuzu*.AppImage + ~/bin/yuzu*.AppImage + /var/lib/flatpak/exports/bin/org.yuzu_emu.yuzu + ~/.local/share/flatpak/exports/bin/org.yuzu_emu.yuzu + + + +``` + +It's pretty straightforward, there are currently four rules supported for finding emulators, `winregistrypath`, `winregistryvalue`, `systempath` and `staticpath` and there is one rule supported for finding the emulator cores, `corepath`. + +Of these, `winregistrypath` and `winregistryvalue` are only available on Windows, and attempting to use the rule on any other operating system will generate a warning in the log file when processing the es_find_rules.xml file. + +The `name` attribute must correspond to the command tags in es_systems.xml, take for example this line: +```xml +%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dosbox_core_libretro.so %ROM% +``` + +Here %EMULATOR_ and %CORE_ are followed by the string RETROARCH which corresponds to the name attribute in es_find_rules.xml. The name is case sensitive but it's recommended to use uppercase names to make the variables feel consistent (%EMULATOR_retroarch% doesn't look so pretty). + +Of course this makes it possible to add any number of emulators to the configuration file. + +The find rules can also be used by the %PRECOMMAND_ variable, which is for instance useful for running Windows emulators on Linux using Wine or Proton. In the following example two separate find rules are used, one for the %PRECOMMAND_ variable and another one for the %EMULATOR_ variable: +```xml +%STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_XENIA-WINDOWS% %ROM% +``` + +The `winregistrypath` rule searches the Windows Registry "App Paths" keys for the emulators defined in the `` tags. If for example this tag is set to `retroarch.exe`, a search will be performed for the key `SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\retroarch.exe`. HKEY_CURRENT_USER is tried first, and if no key is found there, HKEY_LOCAL_MACHINE is tried as well. In addition to this, ES-DE will check that the binary defined in the default value for the key actually exists. If not, it will proceed with the next rule. Be aware that the App Paths keys are added by the emulators during their installation, and although RetroArch does add this key, not all emulators do. + +The `winregistryvalue` rule will search for the specific registry value, and if it exists, it will use that value as the path to the emulator binary. HKEY_CURRENT_USER will be tried first, followed by HKEY_LOCAL_MACHINE. In the same manner as `winregistrypath`, ES-DE will check that the binary defined in the registry value actually exists. If not, it will proceed with the next rule. For example, if setting the `` tag for this rule to `SOFTWARE\Valve\Steam\SteamExe`, the emulator binary would be set to `c:\program files (x86)\steam\steam.exe`, assuming that's where Steam has been installed. As this rule can be used to query any value in the Registry, it's a quite powerful tool to locate various emulators and applications. In addition to this it's posssible to append an arbitrary string to the key value if it's found and use that as the emulator binary path. This is accomplished by using the pipe sign, so for example the entry `SOFTWARE\PCSX2\Install_Dir|\pcsx2.exe` will look for the key `SOFTWARE\PCSX2\Install_Dir` and if it's found it will take the value of that key and append the string `\pcsx2.exe` to it. This could for example result in `C:\Program Files (x86)\PCSX2\pcsx2.exe`. Also for this setup, ES-DE will check that the emulator binary actually exists, or it will proceed to the next rule. + +The other rules are probably self-explanatory with `systempath` searching the PATH environment variable for the binary names defined by the `` tags and `staticpath` defines absolute paths to the emulators. For staticpath, the actual emulator binary must be included in the entry tag. Wildcards (*) are supported for the emulator binary, but not for directories. Wildcards are very useful for AppImages which often embed version information into the filenames. Note that if multiple files match a wildcard pattern, the first file returned by the operating system will be selected. + +```xml + + + ~/Applications/yuzu*.AppImage + + ~/Applications/yuzu*.App* + + ~/App*/yuzu*.AppImage + +``` + +There is also support for substituting the emulator binary in a staticpath rule with an explicit command. To accomplish this add a pipe (|) character after the emulator entry followed by the command to execute. This is for example useful for Flatpaks when you want to check the presence of a package while still launching a specific command inside the package using the --command option. For example: + +``` xml + + /var/lib/flatpak/exports/bin/com.github.AmatCoder.mednaffe|flatpak run --command=mednafen com.github.AmatCoder.mednaffe + ~/.local/share/flatpak/exports/bin/com.github.AmatCoder.mednaffe|flatpak run --command=mednafen com.github.AmatCoder.mednaffe + +``` + +This will execute the regular logic of checking if the Mednaffe Flatpak is installed but will actually run the command after the pipe character when launching the game. Note that no checks or controls are in place for the explicitly defined command, it's just blindly executed. + +The winregistrypath rules are always processed first, followed by winregistryvalue, then systempath and finally staticpath. This is done regardless of which order they are defined in the es_find_rules.xml file. + +As for `corepath` this rule is simply a path to search for the emulator core. + +Each rule supports multiple entry tags which are tried in the order that they are defined in the file. + +The %ESPATH% and %ROMPATH% variables can be used inside the staticpath rules and the %ESPATH% and %EMUPATH% variables can be used inside the corepath rules. + +The tilde symbol `~` is supported for the staticpath and corepath rules and will expand to the user home directory. Be aware that if ES-DE has been started with the --home command line option, the home directory is considered to be whatever path was passed as an argument to that option. The same is true if using a portable.txt file. + +All these options combined makes it possible to create quite powerful find rules. + +For reference, here are also example es_find_rules.xml files for macOS and Windows: + +```xml + + + + + + + zsh + bash + + + + + /Applications/RetroArch.app/Contents/MacOS/RetroArch + + + + + + ~/Library/Application Support/RetroArch/cores + + /Applications/RetroArch.app/Contents/Resources/cores + + + + + + /Applications/dosbox-staging.app/Contents/MacOS/dosbox + /opt/homebrew/bin/dosbox-staging + /usr/local/bin/dosbox-staging + + + + + + /Applications/mupen64plus.app/Contents/MacOS/mupen64plus + /usr/local/bin/mupen64plus + + + + + + /Applications/PCSX2.app/Contents/MacOS/PCSX2 + + + +``` + +```xml + + + + + + + cmd.exe + + + + + + retroarch.exe + + + + retroarch.exe + + + + C:\RetroArch-Win64\retroarch.exe + C:\RetroArch\retroarch.exe + ~\AppData\Roaming\RetroArch\retroarch.exe + C:\Program Files\RetroArch-Win64\retroarch.exe + C:\Program Files\RetroArch\retroarch.exe + C:\Program Files (x86)\RetroArch-Win64\retroarch.exe + C:\Program Files (x86)\RetroArch\retroarch.exe + + C:\Program Files (x86)\Steam\steamapps\common\RetroArch\retroarch.exe + D:\Program Files (x86)\Steam\steamapps\common\RetroArch\retroarch.exe + C:\Program Files\Steam\steamapps\common\RetroArch\retroarch.exe + D:\Program Files\Steam\steamapps\common\RetroArch\retroarch.exe + + %ESPATH%\Emulators\RetroArch-Win64\retroarch.exe + %ESPATH%\Emulators\RetroArch\retroarch.exe + %ESPATH%\..\Emulators\RetroArch-Win64\retroarch.exe + %ESPATH%\..\Emulators\RetroArch\retroarch.exe + + + + + %EMUPATH%\cores + + + + + + pcsx2-qt.exe + pcsx2-qtx64.exe + pcsx2-qtx64-avx2.exe + + + %ESPATH%\Emulators\PCSX2-Qt\pcsx2-qt*.exe + %ESPATH%\..\Emulators\PCSX2-Qt\pcsx2-qt*.exe + + + + + + yuzu.exe + + + ~\AppData\Local\yuzu\yuzu-windows-msvc\yuzu.exe + %ESPATH%\Emulators\yuzu\yuzu-windows-msvc\yuzu.exe + %ESPATH%\..\Emulators\yuzu\yuzu-windows-msvc\yuzu.exe + + + +``` ## es_systems.xml @@ -1168,11 +1371,11 @@ The es_systems.xml file contains the game systems configuration data for ES-DE, ES-DE ships with a comprehensive `es_systems.xml` file and most users will probably never need to make any customizations. But there may be special circumstances such as wanting to use different emulators for some game systems or perhaps to add additional systems altogether. -To accomplish this, ES-DE supports customizations via a separate es_systems.xml file that is to be placed in the `custom_systems` folder in the application home directory, i.e. `~/.emulationstation/custom_systems/es_systems.xml`. (The tilde symbol `~` translates to `$HOME` on Unix and macOS, and to `%HOMEPATH%` on Windows unless overridden via the --home command line option.) +To accomplish this, ES-DE supports customizations via a separate es_systems.xml file that is to be placed in the `custom_systems` folder in the application home directory, i.e. `~/ES-DE/custom_systems/es_systems.xml`. (The tilde symbol `~` translates to `$HOME` on Unix and macOS, and to `%HOMEPATH%` on Windows unless overridden via the --home command line option.) This custom file functionality is designed to be complementary to the bundled es_systems.xml file, meaning you should only add entries to the custom configuration file for game systems that you actually want to add or override. So to for example customize a single system, this file should only contain a single `` tag. The structure of the custom file is identical to the bundled file with the exception of an additional optional tag named ``. If this is placed in the custom es_systems.xml file, ES-DE will not load the bundled file. This is normally not recommended and should only be used for special situations. At the end of this section you can find an example of a custom es_systems.xml file. -The bundled es_systems.xml file is located in the resources directory that is part of the application installation. For example this could be `/usr/share/emulationstation/resources/systems/unix/es_systems.xml` on Unix, `/Applications/EmulationStation Desktop Edition.app/Contents/Resources/resources/systems/macos/es_systems.xml` on macOS or `C:\Program Files\EmulationStation-DE\resources\systems\windows\es_systems.xml` on Windows. The actual location may differ from these examples of course, depending on where ES-DE has been installed. +The bundled es_systems.xml file is located in the resources directory that is part of the application installation. For example this could be `/usr/share/es-de/resources/systems/linux/es_systems.xml` on Linux, `/Applications/ES-DE.app/Contents/Resources/resources/systems/macos/es_systems.xml` on macOS or `C:\Program Files\ES-DE\resources\systems\windows\es_systems.xml` on Windows. The actual location may differ from these examples of course, depending on where ES-DE has been installed. If you're using the AppImage release of ES-DE then the bundled es_systems.xml file is embedded in the AppImage together with the rest of the resources. @@ -1398,10 +1601,10 @@ And finally one for Windows: ``` -As well, here's an example for Unix of a custom es_systems.xml file placed in ~/.emulationstation/custom_systems/ that overrides a single game system from the bundled configuration file: +As well, here's an example for Linux of a custom es_systems.xml file placed in ~/ES-DE/custom_systems/ that overrides a single game system from the bundled configuration file: ```xml - + nes @@ -1464,9 +1667,130 @@ Here is yet another example with the addition of the `snes` system where some fi ``` +## es_find_rules.xml and es_systems.xml on Android + +ES-DE works a bit differently on Android which is also reflected in the es_find_rules.xml and es_systems.xml configuration. Emulators on Android are launched via so-called _Intents_ which is an API rather than the typical command line approach used on Unix systems. Although ES-DE on Windows also uses an API call to launch emulators it's still closely connected to the regular operating system paradigms on how to start binaries and pass application options so the systems configuration still looks quite traditional. On Android this is not the case and there is therefore a heavy use of variables to reflect the Intent API functionality. + +To better understand the configuration in this section it could be a good idea to refer the official Android documentation:\ +https://developer.android.com/reference/android/content/Intent + +There is a command line tool in Android named _am_ which implements the _Intent_ API and can be used to test emulator launching, but this is not intended to be used by other applications and therefore ES-DE implements direct (albeit partial) support for the Intent API. Testing the modern FileProvider interface using the _am_ utility may also be difficult, or maybe impossible. + +**es_find_rules.xml** + +The es_find_rules.xml file is structured the same as for the other operating systems but there'a special _androidpackage_ find rule where you define the name of the emulator package as well as optionally which _activity_ to launch. If the activity is not defined then the default one for the package will be used. Although this may work in some instances it's usually a good idea to explicity set it. Apart from that the find rules work as on the other platforms, i.e. they will be traversed in the order they are defined. So by adding multiple _androidpackage_ entries for an emulator it's possible to look for multiple releases or forks without having to create separate emulator entries in es_systems.xml. It's also possible to override find rules by adding an ES-DE/custom_systems/es_find_rules.xml file, again the same logic applies as for all other platforms. + +The _androidpackage_ find rule entries are structured as `packagename/activity` and if only a package is defined then the forward slash can be omitted, i.e. only `packagename` is needed. + +Here's an example es_find_rules.xml file defining two emulators: + +```xml + + + + + + com.retroarch.aarch64/com.retroarch.browser.retroactivity.RetroActivityFuture + com.retroarch.ra32/com.retroarch.browser.retroactivity.RetroActivityFuture + com.retroarch/com.retroarch.browser.retroactivity.RetroActivityFuture + + + + + + org.yuzu.yuzu_emu.ea/org.yuzu.yuzu_emu.activities.EmulationActivity + org.yuzu.yuzu_emu/org.yuzu.yuzu_emu.activities.EmulationActivity + + + +``` + +**es_systems.xml** + +The es_systems.xml file on Android utilizes variables heavily to implement the _Intent_ API and these variables are covered in detail below. It's possible to override the systems configuration by adding an ES-DE/custom_systems/es_systems.xml file, the same logic applies as for all other platforms. + +`%EMULATOR_` - This utilizes the emulator find rules as defined in `es_find_rules.xml`. This is the only way to configure the launch command on Android and it works identically to the other platforms. + +`%ACTION%` - The general Intent action to be performed, you need to assign its value using an equal sign. + +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 + +There are three approaches to passing game ROMs to emulators by using the following variables: + +`%ROM%` - Replaced with the absolute path to the selected ROM. This is a traditional method to provide the game ROM and its use will likely decrease or go away completely long term as emulators move to more modern methods. + +`%ROMSAF%` - Replaced with an Android Storage Access Framework (SAF) document URI which always starts with the _content://com.android.externalstorage.documents/_ string. You can read more about the SAF here:\ +https://developer.android.com/guide/topics/providers/document-provider + +`%ROMPROVIDER%` - This is the most modern approach to passing game ROMs to emulators. It uses the _FileProvider_ API to provide permissions to the file. This means that you don't need to setup the emulator upfront to have access to the directory where the game file is stored, access is instead temporarily granted by ES-DE. You can read more about the FileProvider API here:\ +https://developer.android.com/reference/androidx/core/content/FileProvider + +The `%ROM%` and `%ROMSAF%` variables can be used with both the `%DATA%` and `%EXTRA_` variables, but `%ROMPROVIDER%` can only be used with the `%DATA%` variable. For the `%DATA%` variable you'll just assign the ROM variable with an equal sign as there can only be a single _setData()_ API call per Intent. For the `%EXTRA_` variable you need to specify a name of the extra and then define it using an equal sign as an arbitrary amount of _putExtra()_ API calls can be used for an Intent. There is also a special `%EXTRABOOL_` variable that specifically passes boolean values (true/false) to emulators that support such arguments. + +Here are some examples to clarify how this works: +``` +%DATA%=%ROM% +%DATA%=%ROMSAF% +%DATA%=%ROMPROVIDER% +%EXTRA_ROM%=%ROM% +%EXTRA_bootPath%=%ROMSAF% +%EXTRABOOL_resumeState%=false +``` + +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 + +The descriptions below are taken from the official documentation just linked above: + +`%ACTIVITY_CLEAR_TASK%` - If set in an Intent passed to Context.startActivity(), this flag will cause any existing task that would be associated with the activity to be cleared before the activity is started. That is, the activity becomes the new root of an otherwise empty task, and any old activities are finished. + +`%ACTIVITY_CLEAR_TOP%` - If set, and the activity being launched is already running in the current task, then instead of launching a new instance of that activity, all of the other activities on top of it will be closed and this Intent will be delivered to the (now on top) old activity as a new Intent. + +`%ACTIVITY_NO_HISTORY%` - If set, the new activity is not kept in the history stack. As soon as the user navigates away from it, the activity is finished. This may also be set with the noHistory attribute. If set, onActivityResult() is never invoked when the current activity starts a new activity which sets a result and finishes. + +Here's an example es_systems.xml file for Android: +```xml + + + + + gc + Nintendo GameCube + %ROMPATH%/gc + .ciso .CISO .dff .DFF .dol .DOL .elf .ELF .gcm .GCM .gcz .GCZ .iso .ISO .json .JSON .m3u .M3U .rvz .RVZ .tgc .TGC .wad .WAD .wbfs .WBFS .wia .WIA .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/dolphin_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_DOLPHIN% %ACTION%=android.intent.action.MAIN %DATA%=%ROMPROVIDER% + gc + gc + + + n3ds + Nintendo 3DS + %ROMPATH%/n3ds + .3ds .3DS .3dsx .3DSX .app .APP .axf .AXF .cci .CCI .cxi .CXI .elf .ELF .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=/data/data/%ANDROIDPACKAGE%/cores/citra_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_CITRA% %ACTIVITY_NO_HISTORY% %EXTRA_SelectedGame%=%ROMSAF% + %EMULATOR_CITRA-MMJ% %EXTRA_GamePath%=%ROM% + n3ds + n3ds + + + psx + Sony PlayStation + %ROMPATH%/psx + .bin .BIN .cbn .CBN .ccd .CCD .chd .CHD .cue .CUE .ecm .ECM .exe .EXE .img .IMG .iso .ISO .m3u .M3U .mdf .MDF .mds .MDS .minipsf .MINIPSF .pbp .PBP .psexe .PSEXE .psf .PSF .toc .TOC .z .Z .znx .ZNX .7z .7Z .zip .ZIP + %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=mednafen_psx_libretro_android.so %EXTRA_ROM%=%ROM% + %EMULATOR_DUCKSTATION% %EXTRABOOL_resumeState%=false %EXTRA_bootPath%=%ROMSAF% + psx + psx + + +``` + ## es_systems_sorting.xml -This file makes it possible to apply a custom systems sorting without having to modify the es_systems.xml file directly. It should be placed in the custom_systems directory, e.g. `~/.emulationstation/custom_systems/es_systems_sorting.xml` +This file makes it possible to apply custom systems sorting without having to modify the es_systems.xml file directly. It should be placed in the custom_systems directory, e.g. `~/ES-DE/custom_systems/es_systems_sorting.xml` Note that in order for ES-DE to load this file you'll need to set the _Systems sorting_ option in the _UI settings_ menu to _Full names or custom_. @@ -1507,272 +1831,14 @@ These files include all systems supported by ES-DE and provide the following sor You can apply any of these sorting files via the _Systems sorting_ option in the _Other settings_ menu. Note that in order to load a es_systems_sorting.xml file placed in the custom_systems directory you'll need to set this option to _Full names or custom_. -## es_find_rules.xml - -This file makes it possible to define rules for where to search for the emulator binaries and emulator cores. - -The file is located in the resources directory in the same location as the es_systems.xml file, but a customized copy can be placed in ~/.emulationstation/custom_systems, which will complement the bundled file. - -Here's an example es_find_rules.xml file for Unix (this is not the complete file shipped with ES-DE as that would be too large to include here): -```xml - - - - - - - bash - sh - - - - - retroarch - org.libretro.RetroArch - - - ~/Applications/RetroArch-Linux*.AppImage - ~/.local/bin/RetroArch-Linux*.AppImage - ~/bin/RetroArch-Linux*.AppImage - /var/lib/flatpak/exports/bin/org.libretro.RetroArch - ~/.local/share/flatpak/exports/bin/org.libretro.RetroArch - - - - - - ~/snap/retroarch/current/.config/retroarch/cores - - ~/.var/app/org.libretro.RetroArch/config/retroarch/cores - - ~/.config/retroarch/cores - - /usr/lib/x86_64-linux-gnu/libretro - - /usr/lib64/libretro - - /usr/lib/libretro - - /usr/local/lib/libretro - - /usr/pkg/lib/libretro - - - - - - dosbox-staging - io.github.dosbox-staging - - - /var/lib/flatpak/exports/bin/io.github.dosbox-staging - ~/.local/share/flatpak/exports/bin/io.github.dosbox-staging - - - - - - yuzu - org.yuzu_emu.yuzu - - - ~/Applications/yuzu*.AppImage - ~/.local/bin/yuzu*.AppImage - ~/bin/yuzu*.AppImage - /var/lib/flatpak/exports/bin/org.yuzu_emu.yuzu - ~/.local/share/flatpak/exports/bin/org.yuzu_emu.yuzu - - - -``` - -It's pretty straightforward, there are currently four rules supported for finding emulators, `winregistrypath`, `winregistryvalue`, `systempath` and `staticpath` and there is one rule supported for finding the emulator cores, `corepath`. - -Of these, `winregistrypath` and `winregistryvalue` are only available on Windows, and attempting to use the rule on any other operating system will generate a warning in the log file when processing the es_find_rules.xml file. - -The `name` attribute must correspond to the command tags in es_systems.xml, take for example this line: -```xml -%EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dosbox_core_libretro.so %ROM% -``` - -Here %EMULATOR_ and %CORE_ are followed by the string RETROARCH which corresponds to the name attribute in es_find_rules.xml. The name is case sensitive but it's recommended to use uppercase names to make the variables feel consistent (%EMULATOR_retroarch% doesn't look so pretty). - -Of course this makes it possible to add any number of emulators to the configuration file. - -The find rules can also be used by the %PRECOMMAND_ variable, which is for instance useful for running Windows emulators on Linux using Wine or Proton. In the following example two separate find rules are used, one for the %PRECOMMAND_ variable and another one for the %EMULATOR_ variable: -```xml -%STARTDIR%=%EMUDIR% %PRECOMMAND_WINE% %EMULATOR_XENIA-WINDOWS% %ROM% -``` - -The `winregistrypath` rule searches the Windows Registry "App Paths" keys for the emulators defined in the `` tags. If for example this tag is set to `retroarch.exe`, a search will be performed for the key `SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\retroarch.exe`. HKEY_CURRENT_USER is tried first, and if no key is found there, HKEY_LOCAL_MACHINE is tried as well. In addition to this, ES-DE will check that the binary defined in the default value for the key actually exists. If not, it will proceed with the next rule. Be aware that the App Paths keys are added by the emulators during their installation, and although RetroArch does add this key, not all emulators do. - -The `winregistryvalue` rule will search for the specific registry value, and if it exists, it will use that value as the path to the emulator binary. HKEY_CURRENT_USER will be tried first, followed by HKEY_LOCAL_MACHINE. In the same manner as `winregistrypath`, ES-DE will check that the binary defined in the registry value actually exists. If not, it will proceed with the next rule. For example, if setting the `` tag for this rule to `SOFTWARE\Valve\Steam\SteamExe`, the emulator binary would be set to `c:\program files (x86)\steam\steam.exe`, assuming that's where Steam has been installed. As this rule can be used to query any value in the Registry, it's a quite powerful tool to locate various emulators and applications. In addition to this it's posssible to append an arbitrary string to the key value if it's found and use that as the emulator binary path. This is accomplished by using the pipe sign, so for example the entry `SOFTWARE\PCSX2\Install_Dir|\pcsx2.exe` will look for the key `SOFTWARE\PCSX2\Install_Dir` and if it's found it will take the value of that key and append the string `\pcsx2.exe` to it. This could for example result in `C:\Program Files (x86)\PCSX2\pcsx2.exe`. Also for this setup, ES-DE will check that the emulator binary actually exists, or it will proceed to the next rule. - -The other rules are probably self-explanatory with `systempath` searching the PATH environment variable for the binary names defined by the `` tags and `staticpath` defines absolute paths to the emulators. For staticpath, the actual emulator binary must be included in the entry tag. Wildcards (*) are supported for the emulator binary, but not for directories. Wildcards are very useful for AppImages which often embed version information into the filenames. Note that if multiple files match a wildcard pattern, the first file returned by the operating system will be selected. - -```xml - - - ~/Applications/yuzu*.AppImage - - ~/Applications/yuzu*.App* - - ~/App*/yuzu*.AppImage - -``` - -There is also support for substituting the emulator binary in a staticpath rule with an explicit command. To accomplish this add a pipe (|) character after the emulator entry followed by the command to execute. This is for example useful for Flatpaks when you want to check the presence of a package while still launching a specific command inside the package using the --command option. For example: - -``` xml - - /var/lib/flatpak/exports/bin/com.github.AmatCoder.mednaffe|flatpak run --command=mednafen com.github.AmatCoder.mednaffe - ~/.local/share/flatpak/exports/bin/com.github.AmatCoder.mednaffe|flatpak run --command=mednafen com.github.AmatCoder.mednaffe - -``` - -This will execute the regular logic of checking if the Mednaffe Flatpak is installed but will actually run the command after the pipe character when launching the game. Note that no checks or controls are in place for the explicitly defined command, it's just blindly executed. - -The winregistrypath rules are always processed first, followed by winregistryvalue, then systempath and finally staticpath. This is done regardless of which order they are defined in the es_find_rules.xml file. - -As for `corepath` this rule is simply a path to search for the emulator core. - -Each rule supports multiple entry tags which are tried in the order that they are defined in the file. - -The %ESPATH% and %ROMPATH% variables can be used inside the staticpath rules and the %ESPATH% and %EMUPATH% variables can be used inside the corepath rules. - -The tilde symbol `~` is supported for the staticpath and corepath rules and will expand to the user home directory. Be aware that if ES-DE has been started with the --home command line option, the home directory is considered to be whatever path was passed as an argument to that option. The same is true if using a portable.txt file. - -All these options combined makes it possible to create quite powerful find rules. - -For reference, here are also example es_find_rules.xml files for macOS and Windows: - -```xml - - - - - - - zsh - bash - - - - - /Applications/RetroArch.app/Contents/MacOS/RetroArch - - - - - - ~/Library/Application Support/RetroArch/cores - - /Applications/RetroArch.app/Contents/Resources/cores - - - - - - /Applications/dosbox-staging.app/Contents/MacOS/dosbox - /opt/homebrew/bin/dosbox-staging - /usr/local/bin/dosbox-staging - - - - - - /Applications/mupen64plus.app/Contents/MacOS/mupen64plus - /usr/local/bin/mupen64plus - - - - - - /Applications/PCSX2.app/Contents/MacOS/PCSX2 - - - -``` - -```xml - - - - - - - cmd.exe - - - - - - retroarch.exe - - - - retroarch.exe - - - - C:\RetroArch-Win64\retroarch.exe - C:\RetroArch\retroarch.exe - ~\AppData\Roaming\RetroArch\retroarch.exe - C:\Program Files\RetroArch-Win64\retroarch.exe - C:\Program Files\RetroArch\retroarch.exe - C:\Program Files (x86)\RetroArch-Win64\retroarch.exe - C:\Program Files (x86)\RetroArch\retroarch.exe - - C:\Program Files (x86)\Steam\steamapps\common\RetroArch\retroarch.exe - D:\Program Files (x86)\Steam\steamapps\common\RetroArch\retroarch.exe - C:\Program Files\Steam\steamapps\common\RetroArch\retroarch.exe - D:\Program Files\Steam\steamapps\common\RetroArch\retroarch.exe - - %ESPATH%\Emulators\RetroArch-Win64\retroarch.exe - %ESPATH%\Emulators\RetroArch\retroarch.exe - %ESPATH%\..\Emulators\RetroArch-Win64\retroarch.exe - %ESPATH%\..\Emulators\RetroArch\retroarch.exe - - - - - %EMUPATH%\cores - - - - - - pcsx2-qt.exe - pcsx2-qtx64.exe - pcsx2-qtx64-avx2.exe - - - %ESPATH%\Emulators\PCSX2-Qt\pcsx2-qt*.exe - %ESPATH%\..\Emulators\PCSX2-Qt\pcsx2-qt*.exe - - - - - - yuzu.exe - - - ~\AppData\Local\yuzu\yuzu-windows-msvc\yuzu.exe - %ESPATH%\Emulators\yuzu\yuzu-windows-msvc\yuzu.exe - %ESPATH%\..\Emulators\yuzu\yuzu-windows-msvc\yuzu.exe - - - -``` - ## gamelist.xml The gamelist.xml file for a system defines the metadata for its entries, such as the game names, descriptions, release dates and ratings. -As of the fork to EmulationStation Desktop Edition, game media information no longer needs to be defined in the gamelist.xml files. Instead the application will look for any media matching the ROM filename. The media path where to look for game media is configurable either manually in `es_settings.xml` or via the GUI. If configured manually in es_settings.xml, it looks something like this: +As of the fork to ES-DE, game media information no longer needs to be defined in the gamelist.xml files. Instead the application will look for any media matching the ROM filename. The media path where to look for game media is configurable either manually in `es_settings.xml` or via the GUI. If configured manually in es_settings.xml, it looks something like this: ```xml - + ``` There is also support to add the variable %ESPATH% to the media directory setting, this will expand to the path where the ES-DE executable is started from. You should normally not need this, but the option is there for special cases. For example: @@ -1781,17 +1847,17 @@ There is also support to add the variable %ESPATH% to the media directory settin ``` -The default media directory is `~/.emulationstation/downloaded_media` +The default media directory is `~/ES-DE/downloaded_media` You can use ES-DE's scrapers to populate the gamelist.xml files, or manually update individual entries using the metadata editor. All of this is explained in the [User guide](USERGUIDE-DEV.md). -The gamelist.xml files are searched for in the ES-DE home directory, i.e. `~/.emulationstation/gamelists//gamelist.xml` +The gamelist.xml files are searched for in the ES-DE home directory, i.e. `~/ES-DE/gamelists//gamelist.xml` For example: ``` -~/.emulationstation/gamelists/c64/gamelist.xml -~/.emulationstation/gamelists/megadrive/gamelist.xml +~/ES-DE/gamelists/c64/gamelist.xml +~/ES-DE/gamelists/megadrive/gamelist.xml ``` **gamelist.xml file structure** @@ -1922,7 +1988,7 @@ Before attempting to add a custom profile for your controller you need to check ES-DE uses the [SDL](https://www.libsdl.org) (Simple DirectMedia Layer) library to handle controller input, so in order for a controller to work in ES-DE, it has to be supported by SDL. There is however a possibility to add custom controller profiles to SDL which in some cases could enable devices in ES-DE that would otherwise not be supported. This is generally a temporary solution though, as controller support is constantly getting improved natively in SDL. As a first step it's therefore recommended to open a request at the SDL [issue tracker](https://github.com/libsdl-org/SDL/issues) to have your specific controller added to a future SDL release. -Assuming the controller works in other applications than ES-DE, you can attempt to add a custom profile by creating the file `~/.emulationstation/es_controller_mappings.cfg` and enter the appropriate configuration inside this file. +Assuming the controller works in other applications than ES-DE, you can attempt to add a custom profile by creating the file `~/ES-DE/controllers/es_controller_mappings.cfg` and enter the appropriate configuration inside this file. The required format is described here:\ https://github.com/gabomdq/SDL_GameControllerDB @@ -1932,7 +1998,7 @@ https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontro But just do this as a first step to see whether you controller gets enabled. If it does, then you should remove all entries that are not relevant. That is important as this file will take precedence over the built-in controller profiles in the SDL library, so any future controller bug fixes and similar would not apply. In the past the gamecontrollerdb.txt file has also included some invalid configuration entries, so even though it may make your controller work, it could actually break some other controllers that you may want to use now or in the future. -Therefore only keep the entries in the es_controller_mappings.cfg file that are relevant for your devices. You can find each relevant controller GUID by starting ES-DE and then looking in the ~/.emulationstation/es_log.txt file. You should see entries such as the following: +Therefore only keep the entries in the es_controller_mappings.cfg file that are relevant for your devices. You can find each relevant controller GUID by starting ES-DE and then looking in the `~/ES-DE/logs/es_log.txt` file. You should see entries such as the following: ``` May 16 18:26:17 Info: Added controller with custom configuration: "X360 Controller" (GUID: 030000005e0400008e02000010010000, instance ID: 0, device index: 0) ``` @@ -1954,26 +2020,26 @@ For this example, let's assume that the removable media has the device name `F:\ These are the steps to perform: * Install ES-DE -* Copy the EmulationStation-DE installation directory to F:\ -* Create a directory named F:\EmulationStation-DE\Emulators -* Copy your emulator directories to F:\EmulationStation-DE\Emulators\ -* Copy your ROMs directory to F:\EmulationStation-DE\ -* Create an empty file named portable.txt in F:\EmulationStation-DE\ +* Copy the ES-DE installation directory to F:\ +* Create a directory named F:\ES-DE\Emulators +* Copy your emulator directories to F:\ES-DE\Emulators\ +* Copy your ROMs directory to F:\ES-DE\ +* Create an empty file named portable.txt in F:\ES-DE\ You should end up with something like this: ``` -F:\EmulationStation-DE\ -F:\EmulationStation-DE\Emulators\dosbox-staging\ -F:\EmulationStation-DE\Emulators\RetroArch-Win64\ -F:\EmulationStation-DE\Emulators\RPCS3\ -F:\EmulationStation-DE\Emulators\xemu\ -F:\EmulationStation-DE\ROMs\ -F:\EmulationStation-DE\portable.txt +F:\ES-DE\ +F:\ES-DE\Emulators\dosbox-staging\ +F:\ES-DE\Emulators\RetroArch-Win64\ +F:\ES-DE\Emulators\RPCS3\ +F:\ES-DE\Emulators\xemu\ +F:\ES-DE\ROMs\ +F:\ES-DE\portable.txt ``` -This is just an example as you may of course not use these specific emulators. There are also many more emulators supported as detailed in the `es_find_rules.xml` configuration file. As well there will be many more files and directories than those listed above inside the F:\EmulationStation-DE folder. +This is just an example as you may of course not use these specific emulators. There are also many more emulators supported as detailed in the `es_find_rules.xml` configuration file. As well there will be many more files and directories than those listed above inside the F:\ES-DE folder. -How the portable setup works is that when ES-DE finds a file named portable.txt in its executable directory, it will by default locate the .emulationstation directory directly inside this folder. It's also possible to modify portable.txt with a path relative to the ES-DE executable directory. For instance if two dots `..` are placed inside the portable.txt file, then the .emulationstation directory will be located in the parent folder, which would be directly under F:\ for this example. +How the portable setup works is that when ES-DE finds a file named portable.txt in its executable directory, it will by default locate the ES-DE application data directory directly inside this folder. It's also possible to modify portable.txt with a path relative to the ES-DE executable directory. For instance if two dots `..` are placed inside the portable.txt file, then the ES-DE application data directory will be located in the parent folder, which would be directly under F:\ for this example. If the --home command line parameter is passed when starting ES-DE, that will override the portable.txt file. @@ -1982,12 +2048,12 @@ Start ES-DE from the F:\ device and check that everything works as expected. Jus Following this, optionally copy any existing gamelist.xml files, game media files etc. to the removable media. For example: ``` -F:\EmulationStation-DE\.emulationstation\collections\ -F:\EmulationStation-DE\.emulationstation\downloaded_media\ -F:\EmulationStation-DE\.emulationstation\gamelists\ +F:\ES-DE\ES-DE\collections\ +F:\ES-DE\ES-DE\downloaded_media\ +F:\ES-DE\ES-DE\gamelists\ ``` -You could alternatively copy over your entire .emulationstation directory, but in this case make sure that you have no settings in es_settings.xml that point to a specific location on your local filesystem, such as the game ROMs or game media directories. +You could alternatively copy over your entire ES-DE application data directory, but in this case make sure that you have no settings in es_settings.xml that point to a specific location on your local filesystem, such as the game ROMs or game media directories. You now have a fully functional portable retrogaming installation! @@ -2030,7 +2096,7 @@ The following examples are for Unix systems, but it works the same way on macOS As can be seen in the table above, the events executed when a game starts and ends are named _game-start_ and _game-end_ -So let's create the folders for these events in the scripts directory. The location is `~/.emulationstation/scripts` +So let's create the folders for these events in the scripts directory. The location is `~/ES-DE/scripts` **Game log** @@ -2041,7 +2107,7 @@ Let's name the start script `game_start_logging.sh` with the following contents: ``` #!/bin/bash TIMESTAMP=$(date +%Y-%m-%d' '%H:%M:%S) -echo Starting game "\""${2}"\"" "\""${4}"\"" "(\""${1}"\")" at $TIMESTAMP >> ~/.emulationstation/game_playlog.txt +echo Starting game "\""${2}"\"" "\""${4}"\"" "(\""${1}"\")" at $TIMESTAMP >> ~/ES-DE/logs/game_playlog.txt ``` And let's name the end script `game_end_logging.sh` with the following contents: @@ -2049,14 +2115,14 @@ And let's name the end script `game_end_logging.sh` with the following contents: ``` #!/bin/bash TIMESTAMP=$(date +%Y-%m-%d' '%H:%M:%S) -echo "Ending game " "\""${2}"\"" "\""${4}"\"" "(\""${1}"\")" at $TIMESTAMP >> ~/.emulationstation/game_playlog.txt +echo "Ending game " "\""${2}"\"" "\""${4}"\"" "(\""${1}"\")" at $TIMESTAMP >> ~/ES-DE/logs/game_playlog.txt ``` After creating the two scripts, you should have something like this on the filesystem: ``` -~/.emulationstation/scripts/game-start/game_start_logging.sh -~/.emulationstation/scripts/game-end/game_end_logging.sh +~/ES-DE/scripts/game-start/game_start_logging.sh +~/ES-DE/scripts/game-end/game_end_logging.sh ``` Don't forget to make the scripts executable (e.g. "chmod 755 ./game_start_logging.sh"). @@ -2065,15 +2131,14 @@ If we now start ES-DE with the debug flag and launch a game, something like the ``` Aug 05 14:19:24 Debug: Scripting::fireEvent(): game-start "/home/myusername/ROMs/nes/Legend\ of\ Zelda,\ The.zip" "The Legend Of Zelda" "nes" "Nintendo Entertainment System" -Aug 05 14:19:24 Debug: Executing: /home/myusername/.emulationstation/scripts/game-start/game_start_logging.sh "/home/myusername/ROMs/nes/Legend\ of\ Zelda,\ The.zip" "The Legend Of Zelda" "nes" "Nintendo Entertainment System" +Aug 05 14:19:24 Debug: Executing: /home/myusername/ES-DE/scripts/game-start/game_start_logging.sh "/home/myusername/ROMs/nes/Legend\ of\ Zelda,\ The.zip" "The Legend Of Zelda" "nes" "Nintendo Entertainment System" . . Aug 05 14:27:15 Debug: Scripting::fireEvent(): game-end "/home/myusername/ROMs/nes/Legend\ of\ Zelda,\ The.zip" "The Legend Of Zelda" "nes" "Nintendo Entertainment System" "" -Aug 05 14:27:15 Debug: Executing: /home/myusername/.emulationstation/scripts/game-end/game_end_logging.sh "/home/myusername/ROMs/nes/Legend\ of\ Zelda,\ The.zip" "The Legend Of Zelda" "nes" "Nintendo Entertainment System" - +Aug 05 14:27:15 Debug: Executing: /home/myusername/ES-DE/scripts/game-end/game_end_logging.sh "/home/myusername/ROMs/nes/Legend\ of\ Zelda,\ The.zip" "The Legend Of Zelda" "nes" "Nintendo Entertainment System" ``` -Finally after running some games, ~/.emulationstation/game_playlog.txt should contain something like the following: +Finally after running some games, ~/ES-DE/logs/game_playlog.txt should contain something like the following: ``` Starting game "The Legend Of Zelda" "Nintendo Entertainment System" ("/home/myusername/ROMs/nes/Legend\ of\ Zelda,\ The.zip") at 2020-08-05 14:19:24 @@ -2101,7 +2166,7 @@ Then create the end script, which we'll name `set_resolution_4K.sh`: #!/bin/sh xrandr -s 3840x2160 sleep 0.3 -xdotool search --class emulationstation windowactivate +xdotool search --class es-de windowactivate ``` The last two lines are optional, they're used to set the focus back to ES-DE in case you're running attention-seeking applications such as Kodi which may steal focus after resolution changes. You may need to adjust the sleep time to get this to work reliably though, as the timing may differ between different computers and graphics drivers. @@ -2109,8 +2174,8 @@ The last two lines are optional, they're used to set the focus back to ES-DE in After creating the two scripts, you should have something like this on the filesystem: ``` -~/.emulationstation/scripts/game-start/set_resolution_1080p.sh -~/.emulationstation/scripts/game-end/set_resolution_4K.sh +~/ES-DE/scripts/game-start/set_resolution_1080p.sh +~/ES-DE/scripts/game-end/set_resolution_4K.sh ``` Don't forget to make the scripts executable (e.g. "chmod 755 ./set_resolution_1080p.sh"). diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index 333767cb9..99272de9d 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -38,12 +38,12 @@ The installation procedure is just covered briefly here and may differ a bit for The AppImage release should be usable on most modern x86 64-bit Linux distributions. After download you may have to set the file as executable, such as this: ``` -chmod +x EmulationStation-DE-x64.AppImage +chmod +x ES-DE_x64.AppImage ``` Or if you're using the Steam Deck AppImage: ``` -chmod +x EmulationStation-DE-x64_SteamDeck.AppImage +chmod +x ES-DE_x64_SteamDeck.AppImage ``` To run AppImage files you need libfuse2 installed, but some newer distributions like Ubuntu 22.04 LTS no longer ship with this library preinstalled. You can however easily install it like this: @@ -59,11 +59,11 @@ There's not really much to say about these operating systems, just install ES-DE **On first application startup** -Upon first startup, ES-DE will create its `~/.emulationstation` home directory. +Upon first startup, ES-DE will create its `~/ES-DE` application data directory. -On Linux this means `/home//.emulationstation`, on macOS `/Users//.emulationstation` and on Windows `C:\Users\\.emulationstation` or `EmulationStation-DE\.emulationstation` depending on whether the installer release or the portable release is used. +On Linux this means `/home//ES-DE`, on macOS `/Users//ES-DE` and on Windows `C:\Users\\ES-DE` or `ES-DE\ES-DE` depending on whether the installer release or the portable release is used. -Also on first startup the configuration file `es_settings.xml` will be generated in the ES-DE home directory, containing all the application settings at their default values. Following this, a file named `es_systems.xml` will be loaded from the resources directory (which is part of the ES-DE installation). This file contains the game system definitions including which emulator to use per platform. For many systems there are also alternative emulators defined which can be applied system-wide or per game. How that works is explained later in this guide. A customized systems configuration file can also be used, as described in the next section below. +Also on first startup the configuration file `es_settings.xml` will be generated in the `ES-DE/settings` directory, containing all the application settings at their default values. Following this, a file named `es_systems.xml` will be loaded from the resources directory (which is part of the ES-DE installation). This file contains the game system definitions including which emulator to use per platform. For many systems there are also alternative emulators defined which can be applied system-wide or per game. How that works is explained later in this guide. A customized systems configuration file can also be used, as described in the next section below. In addition to es_systems.xml there's an `es_find_rules.xml` file that gets loaded as well and which contains rules on how to locate the emulators, i.e. how to find out where they've been installed. @@ -113,18 +113,18 @@ epic: Epic Games Store famicom: Nintendo Family Computer ``` -If a custom es_systems.xml file is present in ~/.emulationstation/custom_systems/ any entries from this file will have their names trailed by the text _(custom system)_. So if the _dos_ system in the example above would be present in the custom systems configuration file, the system would be shown as _dos (custom system)_ instead of simply _dos_. This is only applicable for the systems.txt and systeminfo.txt files, the trailing text is not applied or used anywhere else in the application. +If a custom es_systems.xml file is present in ~/ES-DE/custom_systems/ any entries from this file will have their names trailed by the text _(custom system)_. So if the _dos_ system in the example above would be present in the custom systems configuration file, the system would be shown as _dos (custom system)_ instead of simply _dos_. This is only applicable for the systems.txt and systeminfo.txt files, the trailing text is not applied or used anywhere else in the application. ![alt text](images/es-de_ui_easy_setup.png "ES-DE Easy Setup") _This is the dialog shown if no game files were found. It lets you configure the ROM directory if you don't want to use the default one, and you can also generate the game systems directory structure. Note that the directory is the physical path, and that your operating system may present this as a localized path if you are using a language other than English._ ## Upgrading to a newer release -**Note:** Before upgrading ES-DE, make sure that you have not made any system customizations anywhere in the installation directory structure as these files will be overwritten during the upgrade process. All customizations should go into ~/.emulationstation/custom_systems/ as described elsewhere in this guide. None of the upgrade methods mentioned below will ever touch any files inside your .emulationstation directory tree. +**Note:** Before upgrading ES-DE, make sure that you have not made any system customizations anywhere in the installation directory structure as these files will be overwritten during the upgrade process. All customizations should go into ~/ES-DE/custom_systems/ as described elsewhere in this guide. None of the upgrade methods mentioned below will ever touch any files inside your ES-DE directory tree. -There is a built-in application updater that can automatically update the Linux AppImage releases, and as of ES-DE 2.2.0 there is also support for downloading the Windows and macOS packages. Just be aware that these will still need to be manually installed. Using the application updater is straightforward, just follow the on-screen instructions. For the AppImage releases the old file is retained by renaming it, adding its version to the filename followed by the .OLD extension, for example `EmulationStation-DE-x64_SteamDeck.AppImage_2.1.0.OLD` +There is a built-in application updater that can automatically update the Linux AppImage releases, and as of ES-DE 2.2.0 there is also support for downloading the Windows and macOS packages. Just be aware that these will still need to be manually installed. Using the application updater is straightforward, just follow the on-screen instructions. For the AppImage releases the old file is retained by renaming it, adding its version to the filename followed by the .OLD extension, for example `ES-DE_x64_SteamDeck.AppImage_3.0.0.OLD` -Note that the updater will keep whatever filename you had for your running AppImage file, which could potentially be confusing if you for example added version information to the filename. It's always recommend to keep the default AppImage filenames, i.e. `EmulationStation-DE-x64.AppImage` and `EmulationStation-DE-x64_SteamDeck.AppImage` +Note that the updater will keep whatever filename you had for your running AppImage file, which could potentially be confusing if you for example added version information to the filename. It's always recommend to keep the default AppImage filenames, i.e. `ES-DE_x64.AppImage` and `ES-DE_x64_SteamDeck.AppImage` On Windows and macOS you can specify to which directory you want to save the downloaded file. The default is `C:\Users\myusername\Downloads` on Windows and `/Users/myusername/Downloads` on macOS. @@ -145,7 +145,7 @@ AUR upgrades should be automatically handled via your package manager and it sho **macOS** -Open _Applications_ in Finder and right click on _EmulationStation Desktop Edition_ and choose _Move to Trash_. Then simply install the new release using the .dmg drag-and-drop installer. +Open _Applications_ in Finder and right click on _ES-DE_ and choose _Move to Trash_. Then simply install the new release using the .dmg drag-and-drop installer. **Windows installer** @@ -191,7 +191,7 @@ Note that if the setting _Only show games from gamelist.xml files_ has been enab ## Placing games and other resources on network shares -Although ES-DE does support placing game ROMs, the `.emulationstation` home directory and the `downloaded_media` directory on network shares, this can lead to serious performance problems in some instances. Especially problematic is the Microsoft SMB protocol as it offers abysmal performance for some disk operations on which ES-DE relies heavily. For small game libraries this can still be acceptable, but for libraries with hundreds or thousands of games the application startup time and overall usage will be very painful or even unusable. Similar issues could occur when using file hosting services like Google Drive. +Although ES-DE does support placing game ROMs, the `ES-DE` application data directory and the `downloaded_media` directory on network shares, this can lead to serious performance problems in some instances. Especially problematic is the Microsoft SMB protocol as it offers abysmal performance for some disk operations on which ES-DE relies heavily. For small game libraries this can still be acceptable, but for libraries with hundreds or thousands of games the application startup time and overall usage will be very painful or even unusable. Similar issues could occur when using file hosting services like Google Drive. A general recommendation is to place all game files and other data on drives connected directly to the machine where ES-DE is running. Even using low speed technology like USB thumb drives, SD cards etc. is generally fine and leads to acceptable performance in most instances. @@ -233,7 +233,7 @@ In order for ES-DE to run, graphics drivers with OpenGL support have to be insta On some GPUs with buggy drivers, ES-DE may only display a black screen on startup or when launching a game. The problem can be worked around by specifying a window size for ES-DE that is a single pixel wider than the actual screen resolution. So for example for a 1280x800 display, the resolution can be set to 1281x800 and then rendering should work correctly. This is applied using the --resolution command line option, for example: ``` -EmulationStation.exe --resolution 1281 800 +ES-DE.exe --resolution 1281 800 ``` Some computers using Intel Iris Xe GPUs refuse to start ES-DE or display excessive graphics corruption. These problems are seemingly caused by driver bugs and do not occur when using Linux with the same hardware. There is no known solution or workaround to this issue other than switching to Linux or waiting for Intel to resolve the problem with a driver update. @@ -254,7 +254,7 @@ If you want to create your own portable intallation from scratch or customize th A number of systems have alternative emulator entries named _Shortcut or script_ which allows the direct execution of .lnk shortcut files or .bat batch files. It's not possible by default to directly launch .ps1 PowerShell scripts. As running PowerShell scripts is not even enabled by default on Windows they are for sure not recommended. If you still want to use them the best approach is to execute them via either a .lnk shortcut file or a .bat wrapper script where you explicitly call powershell.exe with the -command flag. If you instead insist on running them directly from ES-DE, you'll need to add a custom system or find rule configuration where you execute powershell.exe instead of cmd.exe and you'll also need to add .ps1 as a file extension for each relevant system. -Some disk operations can have abysmal performance on Windows, and this may be especially obvious for the theme downloader. This is often caused by anti-virus software like Microsoft Defender. If it takes say 30 seconds rather than 300 milliseconds to open the theme downloader then it may be a good idea to add an exlusion for the .emulationstation\themes\ directory to Microsoft Defender. The same may also be true for other directories like the ROMs folder if disk performance is terrible. Refer to your anti-virus software documentation on how to setup such exclusions. +Some disk operations can have abysmal performance on Windows, and this may be especially obvious for the theme downloader. This is often caused by anti-virus software like Microsoft Defender. If it takes say 30 seconds rather than 300 milliseconds to open the theme downloader then it may be a good idea to add an exlusion for the ES-DE\themes\ directory to Microsoft Defender. The same may also be true for other directories like the ROMs folder if disk performance is terrible. Refer to your anti-virus software documentation on how to setup such exclusions. ## Specific notes for macOS @@ -270,13 +270,11 @@ At the time of writing there is an additional issue with the ARM release of Retr The first time you launch a RetroArch-emulated game from within ES-DE the operating system will present you with a security option with the following description: -`"EmulationStation Desktop Edition" would like to access files in your Documents folder.` +`"ES-DE" would like to access files in your Documents folder.` If you don't allow this, you will not be able to place system BIOS ROMs in the RetroArch default system directory `~/Documents/RetroArch/system` even if you've already given RetroArch access to this folder. This is so because RetroArch runs as a subprocess to ES-DE and therefore inherits the security settings from the parent application. Attempting to launch a game without enabling the access will simply display an error message in the emulator that the BIOS files are missing. This of course only applies to emulators that require BIOS ROMs, all other games should work fine regardless of this security setting. -If you accidentally refused ES-DE the folder access, you can fix this by opening _System Settings_, selecting _Privacy & Security_ and within the GUI choose _Files and Folders_. The option you need to enable is _Documents Folder_ under _EmulationStation Desktop Edition_. - -By default files and directories starting with a dot are hidden on macOS, so to show the .emulationstation directory in your home directory you need to enable hidden files in Finder. You do this using the keyboard combination Shift + Command + . (dot). +If you accidentally refused ES-DE the folder access, you can fix this by opening _System Settings_, selecting _Privacy & Security_ and within the GUI choose _Files and Folders_. The option you need to enable is _Documents Folder_ under _ES-DE_. A minor annoyance is that macOS creates metadata files starting with ._ in the filename when placing game/ROM files on some filesystem types such as exFAT. This means that you will see double entries inside ES-DE for all such games. To hide these extra files, the option _Show hidden files and folders (requires restart)_ in the _Other settings_ menu can be set to disabled. @@ -314,7 +312,7 @@ In general, 720p works fine with the RPi 4, and 1080p is tolerable but not reall The game systems configuration file `es_systems.xml` is located in the ES-DE resources directory which is part of the application installation. As such this file is not intended to be modified directly. If system customizations are required, a separate es_systems.xml file should instead be placed in the `custom_systems` folder in the ES-DE home directory. -On Linux this means `/home//.emulationstation/custom_systems/es_systems.xml`, on macOS `/Users//.emulationstation/custom_systems/es_systems.xml` and on Windows `C:\Users\\.emulationstation\custom_systems\es_systems.xml` or `EmulationStation-DE\.emulationstation\custom_systems\es_systems.xml` depending on whether the installer release or the portable release is used. +On Linux this means `/home//ES-DE/custom_systems/es_systems.xml`, on macOS `/Users//ES-DE/custom_systems/es_systems.xml` and on Windows `C:\Users\\ES-DE\custom_systems\es_systems.xml` or `ES-DE\ES-DE\custom_systems\es_systems.xml` depending on whether the installer release or the portable release is used. If you're using the AppImage release of ES-DE then the bundled es_systems.xml file is embedded in the AppImage together with the rest of the resources. You can extract it if you need it as a reference when creating your customized entries, or you can find it [here](https://gitlab.com/es-de/emulationstation-de/-/tree/master/resources/systems/linux). @@ -335,11 +333,11 @@ ES-DE is designed to be backward compatible to a certain degree. That is, it sho Due to this, always make backups of at least the following directories before testing ES-DE for the first time: ``` -~/.emulationstation/gameslists/ -~/.emulationstation/collections/ +~/ES-DE/gameslists/ +~/ES-DE/collections/ ``` -If you have gamelist.xml files in your ROMs directory tree then ES-DE will ignore those by default, so you need to move them to the ~/.emulationstation/gamelists/ tree. +If you have gamelist.xml files in your ROMs directory tree then ES-DE will ignore those by default, so you need to move them to the ~/ES-DE/gamelists/ tree. It's also strongly adviced to not rename an old es_settings.cfg file to es_settings.xml for use in ES-DE as it may cause undefined behavior and crashes. @@ -361,7 +359,7 @@ Example of a correct path tag readable by ES-DE: Manually removing game files from the ROMs directory tree instead of deleting them from ES-DE using the metadata editor will make any corresponding scraped media files, gamelist.xml entries and custom collection entries orphaned, i.e. they will refer to non-existent files. Although this is correctly handled by ES-DE and is not causing any serious issues, it does lead to unnecessary disk space usage and it does produce log warnings in es_log.txt on application startup. If a huge amount of game files have been manually removed it can also lead to performance problems. -In order to remove such unnecessary media files and configuration file entries, the _Orphaned data cleanup_ utility in the _Utilities_ menu can be used. This tool should be largely self-explanatory. And although it should generally be safe to use, unforeseen issues can occur so make sure to make backups of at least your `.emulationstation/gamelists` and `.emulationstation/collections` directories before attempting to use this tool. +In order to remove such unnecessary media files and configuration file entries, the _Orphaned data cleanup_ utility in the _Utilities_ menu can be used. This tool should be largely self-explanatory. And although it should generally be safe to use, unforeseen issues can occur so make sure to make backups of at least your `ES-DE/gamelists` and `ES-DE/collections` directories before attempting to use this tool. It's recommended to run this utility with the _Show hidden games_ setting enabled as orphaned gamelist.xml folder entries may otherwise not get purged. @@ -371,17 +369,17 @@ Note that there are no guarantees that any processed gamelist.xml files will be If the utility finds any data to be removed, a backup of the old files will be made. This will end up in a `CLEANUP` directory and will contain a date and time stamp. For example: ``` -~/.emulationstation/gamelists/CLEANUP/2023-07-27_142830/dos/gamelist.xml -~/.emulationstation/gamelists/CLEANUP/2023-07-27_142830/ports/gamelist.xml -~/.emulationstation/collections/CLEANUP/2023-07-27_143216/custom-Action.cfg -~/.emulationstation/collections/CLEANUP/2023-07-27_143216/custom-Fighting.cfg -~/.emulationstation/downloaded_media/CLEANUP/2023-07-27_123406/atari2600/titlescreens/H.E.R.O..png -~/.emulationstation/downloaded_media/CLEANUP/2023-07-27_123406/c64/3dboxes/Minerer 2049.crt.png +~/ES-DE/gamelists/CLEANUP/2023-07-27_142830/dos/gamelist.xml +~/ES-DE/gamelists/CLEANUP/2023-07-27_142830/ports/gamelist.xml +~/ES-DE/collections/CLEANUP/2023-07-27_143216/custom-Action.cfg +~/ES-DE/collections/CLEANUP/2023-07-27_143216/custom-Fighting.cfg +~/ES-DE/downloaded_media/CLEANUP/2023-07-27_123406/atari2600/titlescreens/H.E.R.O..png +~/ES-DE/downloaded_media/CLEANUP/2023-07-27_123406/c64/3dboxes/Minerer 2049.crt.png ``` This means that you will need to manually delete these backup directories to free up disk space when you are certain that you no longer need the data. -All files and entries that are removed are logged to `~/.emulationstation/es_log.txt` so it could be a good idea to make a backup copy of this file after running the cleanup, for future reference. +All files and entries that are removed are logged to `~/ES-DE/logs/es_log.txt` so it could be a good idea to make a backup copy of this file after running the cleanup, for future reference. Any media directories that are empty after the cleanup will also be removed by this utility. @@ -408,22 +406,22 @@ Below are some examples. For consistency it's assumed that the display resolutio Running at a lower application resolution in a window: ``` -emulationstation --resolution 1280 720 +es-de --resolution 1280 720 ``` Running at a lower application resolution in padded fullscreen mode: ``` -emulationstation --resolution 1824 1026 --fullscreen-padding 1 +es-de --resolution 1824 1026 --fullscreen-padding 1 ``` Same as above but also offsetting the screen slightly to the left and downwards: ``` -emulationstation --resolution 1824 1026 --fullscreen-padding 1 --screenoffset -40 22 +es-de --resolution 1824 1026 --fullscreen-padding 1 --screenoffset -40 22 ``` Rotate application screen contents 90 degrees while running at the native 1920x1080 screen resolution: ``` -emulationstation --screenrotate 90 +es-de --screenrotate 90 ``` ## Input device configuration @@ -436,7 +434,7 @@ The actual procedure to map the inputs should be self-explanatory, just follow t Any custom configuration is applied per unique device ID (GUID). So if two identical controllers are used with ES-DE, both will have the same configuration applied. If connecting controllers of the same type but of different revisions, the GUID may differ and therefore the custom configuration would need to be applied to each device individually. -If you have issues with your input configuration, as a last resort you can reset all mappings by deleting or renaming the file `~/.emulationstation/es_input.xml` +If you have issues with your input configuration, as a last resort you can reset all mappings by deleting or renaming the file `~/ES-DE/settings/es_input.xml` ## System view (main screen) @@ -561,13 +559,13 @@ As of ES-DE 2.2.0 no legacy EmulationStation themes are supported, such as those There are several user-selectable theme options in the _UI Settings_ menu, most notably _Theme variant_ which is essentially a form of theme profile. This could be anything, like different ways to navigate the themes, different layouts and designs etc. Additionally the _Theme color scheme_ setting makes it possible to select between different color schemes, if supported by the theme. The two remaining options _Theme aspect ratio_ and _Theme transitions_ are also important but you can normally leave them at their default _Automatic_ values, especially the _Theme aspect ratio_ option as it will be automatically detected. Be aware that all these theme settings are optional, it's up to the theme developer whether to add support for them to their themes. -Themes are most easily installed using the built-in theme downloader, but you can also manually add them to your ES-DE home directory, i.e. `~/.emulationstation/themes/`. By just adding them there, one folder each, they will be found during startup and you can then choose between them via the _UI Settings_ menu on the main menu. If using the portable release of ES-DE on Windows, the .emulationstation folder can be found in the root of the EmulationStation-DE directory. +Themes are most easily installed using the built-in theme downloader, but you can also manually add them to your ES-DE home directory, i.e. `~/ES-DE/themes/`. By just adding them there, one folder each, they will be found during startup and you can then choose between them via the _UI Settings_ menu on the main menu. If using the portable release of ES-DE on Windows, the ES-DE application data can be found in the root of the ES-DE directory. -Although you should place additional themes in your ES-DE home directory, the default Slate and Modern themes are located in the installation folder as they come bundled with the application. For example this could be `/usr/share/emulationstation/themes/` on Linux, `/Applications/EmulationStation Desktop Edition.app/Contents/Resources/themes/` on macOS or `C:\Program Files\EmulationStation-DE\themes\` on Windows. If using the portable ES-DE release on Windows, the themes folder will be located in the root of the EmulationStation-DE directory. +Although you should place additional themes in your ES-DE home directory, the default Slate and Modern themes are located in the installation folder as they come bundled with the application. For example this could be `/usr/share/es-de/themes/` on Linux, `/Applications/ES-DE.app/Contents/Resources/themes/` on macOS or `C:\Program Files\ES-DE\themes\` on Windows. If using the portable ES-DE release on Windows, the themes folder will be located in the root of the ES-DE directory. Note that if using the AppImage release on Linux, then there is no installation folder as all files are contained inside the AppImage file. -If you would like to customize the Slate or Modern themes, simply make a copy of their directories to `~/.emulationstation/themes/` and then those copies will take precedence over the ones in the application installation directory. +If you would like to customize the Slate or Modern themes, simply make a copy of their directories to `~/ES-DE/themes/` and then those copies will take precedence over the ones in the application installation directory. Refer to the official themes list for a selection of high-quality themes (these are also available via the built-in theme downloader):\ https://gitlab.com/es-de/themes/themes-list @@ -589,7 +587,7 @@ If you have manually downloaded any of the themes from the [official themes list If you have customized a theme by for instance modifying any of its XML files, then this will be highlighted with an exclamation mark and the text _LOCAL CHANGES_ in the theme downloader interface. If you attempt to fetch updates for such a theme you will be asked a question of whether to overwrite your local changes, or whether to cancel. If you have however added additional files to the theme that are not included in the theme repository, then these will not interfere and you can go ahead and fetch theme updates without any risk of having your local files being deleted. But there is a special (although unlikely) situation, if you add files that are not part of the theme repository but that are later added by the theme developer as well, then your local copies of any such files will be ovewritten when fetching theme updates. -In worst case there could be a situation where a repository is corrupted and the theme downloader can't properly identify or handle the corruption. In this case you will have to rename or delete that directory. This could also apply to the actual themes list repository. The latter is named _themes-list_ so by just deleting this directory (i.e. `~/.emulationstation/themes/themes-list`) you'll reset the theme downloader to its initial state. +In worst case there could be a situation where a repository is corrupted and the theme downloader can't properly identify or handle the corruption. In this case you will have to rename or delete that directory. This could also apply to the actual themes list repository. The latter is named _themes-list_ so by just deleting this directory (i.e. `~/ES-DE/themes/themes-list`) you'll reset the theme downloader to its initial state. Note that the exFAT filesystem can't be used as it makes the theme downloader fail. But using this filesystem is strongly discouraged anyway as it offers very poor disk I/O performance which makes ES-DE run really slowly. @@ -736,7 +734,7 @@ There is however a workaround available to launch the Flatpak first, should you For example if using the ES-DE AppImage release, this would be the command to execute: ``` -PATH=/var/lib/flatpak/exports/bin:~/.local/share/flatpak/exports/bin:$PATH ./EmulationStation-DE-x64.AppImage +PATH=/var/lib/flatpak/exports/bin:~/.local/share/flatpak/exports/bin:$PATH ./ES-DE_x64.AppImage ``` Obviously you would need to change the path to the AppImage if it's not in your current working directory. @@ -955,7 +953,7 @@ It's highly recommended to use filenames that correspond to the full name of the Symlinks are supported for both ROM directories and individual game files, but make sure to never symlink between files within the same system directory or there may be undefined application behavior when scraping, launching games etc. -The default game folder is ~/ROMs. On Linux this defaults to `/home//ROMs`, on macOS `/Users//ROMs` and on Windows `C:\Users\\ROMs` or `EmulationStation-DE\ROMs` depending on whether the installer release or the portable release is used. If the --home command line option was used to start ES-DE, the tilde symbol will resolve to whatever directory was passed as an argument to this option. +The default game folder is ~/ROMs. On Linux this defaults to `/home//ROMs`, on macOS `/Users//ROMs` and on Windows `C:\Users\\ROMs` or `ES-DE\ROMs` depending on whether the installer release or the portable release is used. If the --home command line option was used to start ES-DE, the tilde symbol will resolve to whatever directory was passed as an argument to this option. Assuming the default ROM directory is used, we need to create a subdirectory corresponding to the \ tag in es_systems.xml, for this example it's `nes`. @@ -965,7 +963,7 @@ So it would look something like the following: /home/myusername/ROMs/nes # Linux /Users/myusername/ROMs/nes # macOS C:\Users\myusername\ROMs\nes # Windows installer -EmulationStation-DE\ROMs\nes # Windows portable +ES-DE\ROMs\nes # Windows portable ``` Now simply copy your game ROMs into this folder, and you should end up with something like this Linux example: @@ -2771,7 +2769,7 @@ Apart from this, hopefully the scraping process should be self-explanatory. If you already have a library of game media (images, videos and PDF manuals) you can manually copy these files into ES-DE. The same procedure applies if you want to add media for individual games, for instance when the scraper did not return any results or if you didn't like the media it provided. -The default media directory is `~/.emulationstation/downloaded_media//` +The default media directory is `~/ES-DE/downloaded_media//` This directory can however be changed using the _Game media directory_ setting in the _Other settings_ menu so make sure to check this setting before attempting to follow the instructions below. If the setting is blank, then the default directory is in use. @@ -2779,25 +2777,25 @@ See the [Supported game systems](USERGUIDE-DEV.md#supported-game-systems) table An example on Linux: ``` -/home/myusername/.emulationstation/downloaded_media/c64/screenshots/ +/home/myusername/ES-DE/downloaded_media/c64/screenshots/ ``` An example on macOS: ``` -/Users/myusername/.emulationstation/downloaded_media/c64/screenshots/ +/Users/myusername/ES-DE/downloaded_media/c64/screenshots/ ``` An example on Windows (installer release): ``` -C:\Users\Myusername\.emulationstation\downloaded_media\c64\screenshots\ +C:\Users\Myusername\ES-DE\downloaded_media\c64\screenshots\ ``` An example on Windows (portable release): ``` -EmulationStation-DE\.emulationstation\downloaded_media\c64\screenshots\ +ES-DE\ES-DE\downloaded_media\c64\screenshots\ ``` The media directories per game system are: @@ -2828,8 +2826,8 @@ The media files must correspond exactly to the game files. Take for example this For this example, the filename structure needs to look like the following: ``` -~/.emulationstation/downloaded_media/c64/screenshots/Multidisk/Last Ninja 2/Last Ninja 2.jpg -~/.emulationstation/downloaded_media/c64/videos/Multidisk/Last Ninja 2/Last Ninja 2.mp4 +~/ES-DE/downloaded_media/c64/screenshots/Multidisk/Last Ninja 2/Last Ninja 2.jpg +~/ES-DE/downloaded_media/c64/videos/Multidisk/Last Ninja 2/Last Ninja 2.mp4 ``` Note that there is seemingly an exception to this logic if the _Directories interpreted as files_ functionality has been used, in which case the "file extension" added to the directory is also included in the game media filenames. Take for example the following ScummVM game: @@ -2840,8 +2838,8 @@ Note that there is seemingly an exception to this logic if the _Directories inte The media files for this directory which is interpreted as a file will be: ``` -~/.emulationstation/downloaded_media/scummvm/screenshots/dig.scummvm.png -~/.emulationstation/downloaded_media/scummvm/videos/dig.scummvm.mp4 +~/ES-DE/downloaded_media/scummvm/screenshots/dig.scummvm.png +~/ES-DE/downloaded_media/scummvm/videos/dig.scummvm.mp4 ``` This is not a bug as these are not really file extensions after all, it's just a directory with a dot in the filename that happens to look like a file extension because that's how the _Directories interpreted as files_ logic works. @@ -3141,7 +3139,7 @@ If set to _None_, the system view will be displayed on startup. Any other value **Systems sorting** -The order in which to sort the game systems. The default option is _Full names or custom_ which will sort by full system names, unless there is a ~/.emulationstation/custom_systems/es_systems_sorting.xml file present which will then be used instead. The other options are using the bundled sorting configuration files for _Release year_ or _Manufacturer, release year_ or _HW type, release year_ or _Manufacturer, HW type, release year_. If using any of these bundled sorting files, then any ~/.emulationstation/custom_systems/es_systems_sorting.xml will be ignored. When changing this setting ES-DE will automatically reload. +The order in which to sort the game systems. The default option is _Full names or custom_ which will sort by full system names, unless there is a ~/ES-DE/custom_systems/es_systems_sorting.xml file present which will then be used instead. The other options are using the bundled sorting configuration files for _Release year_ or _Manufacturer, release year_ or _HW type, release year_ or _Manufacturer, HW type, release year_. If using any of these bundled sorting files, then any ~/ES-DE/custom_systems/es_systems_sorting.xml will be ignored. When changing this setting ES-DE will automatically reload. **Game default sort order** @@ -3373,7 +3371,7 @@ If enabling this option, only the first controller detected during startup will **Ignore keyboard input** -If this setting is enabled then all keyboard input will be ignored, except the quit shortcut used to shut down the application. The main reason for ignoring keyboard input is if running Steam in parallel to ES-DE and you need to use the Steam Input's _Desktop Layout_ functionality to send keyboard input using the controller. In this case double or conflicting input will be sent to ES-DE as both the controller and keyboard events are read by the application. It's however generally a better idea to disable this functionality altogether in Steam and leave the ES-DE setting untouched. If you accidentally enable this setting when using a keyboard as input device, then you'll either need to plug in a controller to disable it again, or you'll need to modify the _InputIgnoreKeyboard_ entry in the ~/.emulationstation/es_settings.xml configuration file. +If this setting is enabled then all keyboard input will be ignored, except the quit shortcut used to shut down the application. The main reason for ignoring keyboard input is if running Steam in parallel to ES-DE and you need to use the Steam Input's _Desktop Layout_ functionality to send keyboard input using the controller. In this case double or conflicting input will be sent to ES-DE as both the controller and keyboard events are read by the application. It's however generally a better idea to disable this functionality altogether in Steam and leave the ES-DE setting untouched. If you accidentally enable this setting when using a keyboard as input device, then you'll either need to plug in a controller to disable it again, or you'll need to modify the _InputIgnoreKeyboard_ entry in the ~/ES-DE/settings/es_settings.xml configuration file. **Configure keyboard and controllers** @@ -3432,7 +3430,7 @@ _The system-wide alternative emulators interface. An entry in bold and with a ge **Game media directory** -This setting defines the directory for game media, i.e. images, videos and PDF manuals that have normally been downloaded by the scraper. The default location is _~/.emulationstation/downloaded_media_ +This setting defines the directory for game media, i.e. images, videos and PDF manuals that have normally been downloaded by the scraper. The default location is _~/ES-DE/downloaded_media_ **VRAM limit** @@ -3538,15 +3536,15 @@ This utility will create all game system directories inside your ROM directory t This utility will rescan the ROM directory for any changes such as added or removed games and systems without having to restart the application. But don't use this utility to reload changes to gamelist.xml files that you have made outside ES-DE as this can lead to data corruption. If you need to manually edit your gamelist.xml files then do this while ES-DE is shut down. -### Quit / Quit EmulationStation +### Quit / Quit ES-DE -The _Quit_ menu or _Quit EmulationStation_ entry as described by the _Show quit menu (reboot and power off entries)_ option above. +The _Quit_ menu or _Quit ES-DE_ entry as described by the _Show quit menu (reboot and power off entries)_ option above. If the menu is enabled, these are its entries: -**Quit EmulationStation** +**Quit ES-DE** -If the option _When to save game metadata_ has been set to _On exit_, the gamelist.xml files will be updated at this point. This applies also if the Quit menu is disabled and replaced by the _Quit EmulationStation_ entry. +If the option _When to save game metadata_ has been set to _On exit_, the gamelist.xml files will be updated at this point. This applies also if the Quit menu is disabled and replaced by the _Quit ES-DE_ entry. **Reboot system** _(All operating systems except macOS)_ @@ -3854,9 +3852,9 @@ _Example of custom collections, here configured as genres._ _When editing a custom collection and the theme uses a textlist, then a tick symbol will be displayed for any game that is part of the collection._ -The way that custom collections are implemented is very simple. There is a single configuration file per collection inside the folder `~/.emulationstation/collections` +The way that custom collections are implemented is very simple. There is a single configuration file per collection inside the folder `~/ES-DE/collections` -For this example a file will have been created named `~/.emulationstation/collections/custom-Platform.cfg` +For this example a file will have been created named `~/ES-DE/collections/custom-Platform.cfg` The file contents is simply a list of ROM files, such as the following: @@ -3872,7 +3870,7 @@ The file contents is simply a list of ROM files, such as the following: Any changes to custom collections, for example adding or removing a game, will be immediately written to the corresponding collection configuration file. -If you copy or migrate a collection from a previous version of EmulationStation or if you're setting up ES-DE on a new computer, the collection will not be enabled by just copying its configuration file to the `~/.emulationstation/collections` directory. You always need to explicitly enable each collection via the menu. +If you copy or migrate a collection from a previous version of EmulationStation or if you're setting up ES-DE on a new computer, the collection will not be enabled by just copying its configuration file to the `~/ES-DE/collections` directory. You always need to explicitly enable each collection via the menu. If you're migrating from a previous version of EmulationStation that has absolute paths in the collection files, then these will be rewritten with the %ROMPATH% variable the first time you make a change to the collection. From 9b96e4b69f6004d479ef6b46849952fc5b68aed9 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 19 Dec 2023 17:58:12 +0100 Subject: [PATCH 089/320] (Android) Fixed an issue where the wrong system configuration files were selected --- es-app/src/SystemData.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 6a44bb396..c6e3cebf6 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -49,12 +49,12 @@ void FindRules::loadFindRules() LOG(LogInfo) << "Found custom find rules configuration file"; } -#if defined(__linux__) - filePath = - ResourceManager::getInstance().getResourcePath(":/systems/linux/es_find_rules.xml", false); -#elif defined(__ANDROID__) +#if defined(__ANDROID__) filePath = ResourceManager::getInstance().getResourcePath(":/systems/android/es_find_rules.xml", false); +#elif defined(__linux__) + filePath = + ResourceManager::getInstance().getResourcePath(":/systems/linux/es_find_rules.xml", false); #elif defined(_WIN64) filePath = ResourceManager::getInstance().getResourcePath(":/systems/windows/es_find_rules.xml", false); @@ -976,10 +976,10 @@ std::vector SystemData::getConfigPath() paths.emplace_back(path); } -#if defined(__linux__) - path = ResourceManager::getInstance().getResourcePath(":/systems/linux/es_systems.xml", true); -#elif defined(__ANDROID__) +#if defined(__ANDROID__) path = ResourceManager::getInstance().getResourcePath(":/systems/android/es_systems.xml", true); +#elif defined(__linux__) + path = ResourceManager::getInstance().getResourcePath(":/systems/linux/es_systems.xml", true); #elif defined(_WIN64) path = ResourceManager::getInstance().getResourcePath(":/systems/windows/es_systems.xml", true); #elif defined(__APPLE__) From 6c78cad77d3413c8dc5db70b77f0dec81d0d383c Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 19 Dec 2023 18:41:35 +0100 Subject: [PATCH 090/320] Added support for more extreme vertical resolution than previously allowed --- es-app/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 9091a3e99..8648fafa4 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -243,7 +243,7 @@ bool parseArguments(const std::vector& arguments) const int width {stoi(arguments[i + 1])}; const int height {stoi(arguments[i + 2])}; if (width < 224 || height < 224 || width > 7680 || height > 7680 || - height < width / 4 || width < height / 2) { + height < width / 4 || width < height / 3) { std::cerr << "Error: Unsupported resolution " << width << "x" << height << " supplied\n"; return false; From d73c308a5cb141c7f4682deb275632a37294252e Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 19 Dec 2023 18:48:12 +0100 Subject: [PATCH 091/320] Added support for the 19.5:9 display aspect ratio --- es-core/src/ThemeData.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 0c8289d75..33bcc46a4 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -63,6 +63,8 @@ std::vector> ThemeData::sSupportedAspectRati {"4:3_vertical", "4:3 vertical"}, {"5:4", "5:4"}, {"5:4_vertical", "5:4 vertical"}, + {"19.5:9", "19.5:9"}, + {"19.5:9_vertical", "19.5:9_vertical"}, {"21:9", "21:9"}, {"21:9_vertical", "21:9 vertical"}, {"32:9", "32:0"}, @@ -80,6 +82,8 @@ std::map ThemeData::sAspectRatioMap { {"4:3_vertical", 0.75f}, {"5:4", 1.25f}, {"5:4_vertical", 0.8f}, + {"19.5:9", 2.1667f}, + {"19.5:9_vertical", 0.4615f}, {"21:9", 2.3703f}, {"21:9_vertical", 0.4219f}, {"32:9", 3.5555f}, From 79bca7505042cd4c8e7dbfc13ed52b37a7a10888 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 19 Dec 2023 19:00:10 +0100 Subject: [PATCH 092/320] Added support for the 20:9 display aspect ratio --- es-core/src/ThemeData.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 33bcc46a4..f40f11d07 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -64,7 +64,9 @@ std::vector> ThemeData::sSupportedAspectRati {"5:4", "5:4"}, {"5:4_vertical", "5:4 vertical"}, {"19.5:9", "19.5:9"}, - {"19.5:9_vertical", "19.5:9_vertical"}, + {"19.5:9_vertical", "19.5:9 vertical"}, + {"20:9", "20:9"}, + {"20:9_vertical", "20:9 vertical"}, {"21:9", "21:9"}, {"21:9_vertical", "21:9 vertical"}, {"32:9", "32:0"}, @@ -84,6 +86,8 @@ std::map ThemeData::sAspectRatioMap { {"5:4_vertical", 0.8f}, {"19.5:9", 2.1667f}, {"19.5:9_vertical", 0.4615f}, + {"20:9", 2.2222f}, + {"20:9_vertical", 0.45f}, {"21:9", 2.3703f}, {"21:9_vertical", 0.4219f}, {"32:9", 3.5555f}, From b9b4ea67f13336e728c9dd9f891588a563ab78b2 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 19 Dec 2023 20:34:54 +0100 Subject: [PATCH 093/320] Added Mednafen standalone as an alternative emulator for the gb, gba and gbc systems --- resources/systems/linux/es_systems.xml | 3 +++ resources/systems/macos/es_systems.xml | 3 +++ resources/systems/windows/es_systems.xml | 3 +++ 3 files changed, 9 insertions(+) diff --git a/resources/systems/linux/es_systems.xml b/resources/systems/linux/es_systems.xml index a967e9c7c..bea24b464 100644 --- a/resources/systems/linux/es_systems.xml +++ b/resources/systems/linux/es_systems.xml @@ -763,6 +763,7 @@ %EMULATOR_MGBA% -f %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vbam_libretro.so %ROM% %EMULATOR_VBA-M% -f %ROM% + %EMULATOR_MEDNAFEN% -force_module gb %ROM% %EMULATOR_ARES% --fullscreen --system "Game Boy" %ROM% %EMULATOR_SKYEMU% %ROM% gb @@ -779,6 +780,7 @@ %EMULATOR_VBA-M% -f %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vba_next_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gpsp_libretro.so %ROM% + %EMULATOR_MEDNAFEN% -force_module gba %ROM% %EMULATOR_ARES% --fullscreen --system "Game Boy Advance" %ROM% %EMULATOR_SKYEMU% %ROM% gba @@ -802,6 +804,7 @@ %EMULATOR_MGBA% -f %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vbam_libretro.so %ROM% %EMULATOR_VBA-M% -f %ROM% + %EMULATOR_MEDNAFEN% -force_module gb %ROM% %EMULATOR_ARES% --fullscreen --system "Game Boy Color" %ROM% %EMULATOR_SKYEMU% %ROM% gbc diff --git a/resources/systems/macos/es_systems.xml b/resources/systems/macos/es_systems.xml index a19a03377..8fd76d1a2 100644 --- a/resources/systems/macos/es_systems.xml +++ b/resources/systems/macos/es_systems.xml @@ -731,6 +731,7 @@ %EMULATOR_MGBA% -f %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vbam_libretro.dylib %ROM% %EMULATOR_VBA-M% -f %ROM% + %EMULATOR_MEDNAFEN% -force_module gb %ROM% %EMULATOR_ARES% --fullscreen --system "Game Boy" %ROM% %EMULATOR_SKYEMU% %ROM% gb @@ -747,6 +748,7 @@ %EMULATOR_VBA-M% -f %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vba_next_libretro.dylib %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/gpsp_libretro.dylib %ROM% + %EMULATOR_MEDNAFEN% -force_module gba %ROM% %EMULATOR_ARES% --fullscreen --system "Game Boy Advance" %ROM% %EMULATOR_SKYEMU% %ROM% gba @@ -768,6 +770,7 @@ %EMULATOR_MGBA% -f %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/vbam_libretro.dylib %ROM% %EMULATOR_VBA-M% -f %ROM% + %EMULATOR_MEDNAFEN% -force_module gb %ROM% %EMULATOR_ARES% --fullscreen --system "Game Boy Color" %ROM% %EMULATOR_SKYEMU% %ROM% gbc diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index 98693fb49..545685173 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -757,6 +757,7 @@ %EMULATOR_MGBA% -f %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vbam_libretro.dll %ROM% %EMULATOR_VBA-M% /f %ROM% + %EMULATOR_MEDNAFEN% -force_module gb %ROM% %EMULATOR_ARES% --fullscreen --system "Game Boy" %ROM% %EMULATOR_SKYEMU% %ROM% gb @@ -773,6 +774,7 @@ %EMULATOR_VBA-M% /f %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vba_next_libretro.dll %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\gpsp_libretro.dll %ROM% + %EMULATOR_MEDNAFEN% -force_module gba %ROM% %EMULATOR_ARES% --fullscreen --system "Game Boy Advance" %ROM% %EMULATOR_SKYEMU% %ROM% gba @@ -796,6 +798,7 @@ %EMULATOR_MGBA% -f %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\vbam_libretro.dll %ROM% %EMULATOR_VBA-M% /f %ROM% + %EMULATOR_MEDNAFEN% -force_module gb %ROM% %EMULATOR_ARES% --fullscreen --system "Game Boy Color" %ROM% %EMULATOR_SKYEMU% %ROM% gbc From e54c52e77e802c8b0e859beb221d3b1e8028ffe4 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Tue, 19 Dec 2023 21:35:10 +0100 Subject: [PATCH 094/320] Documentation update --- CHANGELOG.md | 4 +++- THEMES-DEV.md | 22 ++++++++++++---------- USERGUIDE-DEV.md | 6 +++--- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 85b297615..7af2f6ed7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ * Added support for .webp, .svg and unanimated .gif files to the slideshow screensaver when using a custom image directory * Changed the default slideshow custom image directory from slideshow/custom_images to screensavers/custom_slideshow * Changed the custom slideshow image directory setting from ScreensaverSlideshowImageDir to ScreensaverSlideshowCustomDir +* Added Mednafen standalone as an alternative emulator for the gb, gba and gbc systems * Added the .zso file extension to the ps2 system * Added the .zar file extension to the xbox360 system on Linux and Windows * Added the .pk3 and .ipk3 file extensions to the doom system on Linux, Unix and Windows @@ -23,7 +24,8 @@ * (Windows) Added the %RUNINBACKGROUND% variable for the epic system * (Windows) Removed support for building the application using MinGW * Added a "renderDuringTransitions" property to the image element -* Added support for the 1:1 display aspect ratio +* Added support for more extreme vertical resolutions than previously allowed +* Added support for the 19.5:9, 20:9 and 1:1 display aspect ratios * Added workarounds for some mobile GPUs which do not support all OpenGL operations when using the BGRA pixel format ### Bug fixes diff --git a/THEMES-DEV.md b/THEMES-DEV.md index 1b7f45c3d..a87fa410b 100644 --- a/THEMES-DEV.md +++ b/THEMES-DEV.md @@ -878,16 +878,18 @@ The variant, color scheme and transitions names as well as their labels can be s Unlike the types just mentioned, aspectRatio entries can not be set to arbitrary values, instead they have to use a value from the _horizontal name_ or _vertical name_ columns in the following table: -| Horizontal name | Vertical name | Common resolutions | -| :--------------- | :------------- | :--------------------------------------------- | -| 16:9 | 16:9_vertical | 1280x720, 1920x1080, 2560x1440, 3840x2160 | -| 16:10 | 16:10_vertical | 1280x800, 1440x900, 1920x1200 | -| 3:2 | 3:2_vertical | 2160x1440 | -| 4:3 | 4:3_vertical | 320x240, 640x480, 800x600, 1024x768, 1600x1200 | -| 5:4 | 5:4_vertical | 1280x1024 | -| 21:9 | 21:9_vertical | 2560x1080, 3840x1600, 5120x2160 | -| 32:9 | 32:9_vertical | 3840x1080, 5120x1440 | -| 1:1 | 1:1 | Any square resolution | +| Horizontal name | Vertical name | Common resolutions | +| :--------------- | :-------------- | :--------------------------------------------- | +| 16:9 | 16:9_vertical | 1280x720, 1920x1080, 2560x1440, 3840x2160 | +| 16:10 | 16:10_vertical | 1280x800, 1440x900, 1920x1200 | +| 3:2 | 3:2_vertical | 2160x1440 | +| 4:3 | 4:3_vertical | 320x240, 640x480, 800x600, 1024x768, 1600x1200 | +| 5:4 | 5:4_vertical | 1280x1024 | +| 19.5:9 | 19.5:9_vertical | 2340x1080, 2532x1170 | +| 20:9 | 20:9_vertical | 2400x1080, 1600x720 | +| 21:9 | 21:9_vertical | 2560x1080, 3840x1600, 5120x2160 | +| 32:9 | 32:9_vertical | 3840x1080, 5120x1440 | +| 1:1 | 1:1 | Any square resolution | The 21:9 and 32:9 aspect ratios are approximate as monitors of slightly different ratios are collectively marketed using these numbers. diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index 99272de9d..52447e6ec 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -3988,9 +3988,9 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | gameandwatch | Nintendo Game and Watch | MAME Local Artwork **(Standalone)** | MAME **(Standalone)**,
Handheld Electronic (GW) | No | See the specific _LCD handheld games_ section elsewhere in this guide | | gamecom | Tiger Electronics Game.com | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file | | gamegear | Sega Game Gear | Genesis Plus GX | Genesis Plus GX Wide,
Gearsystem,
SMS Plus GX,
PicoDrive,
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | -| gb | Nintendo Game Boy | Gambatte | SameBoy,
SameBoy **(Standalone)**,
Gearboy,
Gearboy **(Standalone)** [LW],
TGB Dual,
Mesen-S,
Mesen **(Standalone)** [LW],
bsnes,
mGBA,
mGBA **(Standalone)**,
VBA-M,
VBA-M **(Standalone)**,
ares **(Standalone)**,
SkyEmu **(Standalone)** | No | Single archive or ROM file | -| gba | Nintendo Game Boy Advance | mGBA | mGBA **(Standalone)**,
VBA-M,
VBA-M **(Standalone)**,
VBA Next,
gpSP,
ares **(Standalone)**,
SkyEmu **(Standalone)** | Yes for ares | Single archive or ROM file | -| gbc | Nintendo Game Boy Color | Gambatte | SameBoy,
SameBoy **(Standalone)**,
Gearboy,
Gearboy **(Standalone)** [LW],
TGB Dual,
Mesen-S,
Mesen **(Standalone)** [LW],
bsnes,
mGBA,
mGBA **(Standalone)**,
VBA-M,
VBA-M **(Standalone)**,
ares **(Standalone)**,
SkyEmu **(Standalone)** | No | Single archive or ROM file | +| gb | Nintendo Game Boy | Gambatte | SameBoy,
SameBoy **(Standalone)**,
Gearboy,
Gearboy **(Standalone)** [LW],
TGB Dual,
Mesen-S,
Mesen **(Standalone)** [LW],
bsnes,
mGBA,
mGBA **(Standalone)**,
VBA-M,
VBA-M **(Standalone)**,
Mednafen **(Standalone)**,
ares **(Standalone)**,
SkyEmu **(Standalone)** | No | Single archive or ROM file | +| gba | Nintendo Game Boy Advance | mGBA | mGBA **(Standalone)**,
VBA-M,
VBA-M **(Standalone)**,
VBA Next,
gpSP,
Mednafen **(Standalone)**,
ares **(Standalone)**,
SkyEmu **(Standalone)** | Yes for ares | Single archive or ROM file | +| gbc | Nintendo Game Boy Color | Gambatte | SameBoy,
SameBoy **(Standalone)**,
Gearboy,
Gearboy **(Standalone)** [LW],
TGB Dual,
Mesen-S,
Mesen **(Standalone)** [LW],
bsnes,
mGBA,
mGBA **(Standalone)**,
VBA-M,
VBA-M **(Standalone)**,
Mednafen **(Standalone)**,
ares **(Standalone)**,
SkyEmu **(Standalone)** | No | Single archive or ROM file | | gc | Nintendo GameCube | Dolphin | Dolphin **(Standalone)**,
PrimeHack **(Standalone)** [LW],
Triforce **(Standalone)** [LW] | 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,
BlastEm,
BlastEm **(Standalone)** [L],
Mednafen **(Standalone)**,
ares **(Standalone)** | No | Single archive or ROM file | | gmaster | Hartung Game Master | MAME - Current | MAME **(Standalone)** | Yes | Single archive or ROM file | From 10d9fa9a7cf93b07a49f9ac8aded50fef2f874ba Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 20 Dec 2023 21:58:40 +0100 Subject: [PATCH 095/320] Added support for defining font sizes from the theme configuration and selecting these from the UI settings menu --- es-app/src/guis/GuiMenu.cpp | 56 +++++++++++++++++++ es-core/src/Settings.cpp | 1 + es-core/src/ThemeData.cpp | 108 ++++++++++++++++++++++++++++++++++++ es-core/src/ThemeData.h | 7 +++ 4 files changed, 172 insertions(+) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 86a6fac89..93e12ac42 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -286,6 +286,47 @@ void GuiMenu::openUIOptions() themeColorSchemesFunc(Settings::getInstance()->getString("Theme"), Settings::getInstance()->getString("ThemeColorScheme")); + // Theme font sizes. + auto themeFontSize = std::make_shared>( + getHelpStyle(), "THEME FONT SIZE", false); + s->addWithLabel("THEME FONT SIZE", themeFontSize); + s->addSaveFunc([themeFontSize, s] { + if (themeFontSize->getSelected() != Settings::getInstance()->getString("ThemeFontSize")) { + Settings::getInstance()->setString("ThemeFontSize", themeFontSize->getSelected()); + s->setNeedsSaving(); + s->setNeedsReloading(); + s->setInvalidateCachedBackground(); + } + }); + + auto themeFontSizeFunc = [=](const std::string& selectedTheme, + const std::string& selectedFontSize) { + std::map::const_iterator + currentSet {themes.find(selectedTheme)}; + if (currentSet == themes.cend()) + return; + // We need to recreate the OptionListComponent entries. + themeFontSize->clearEntries(); + if (currentSet->second.capabilities.fontSizes.size() > 0) { + for (auto& fontSize : currentSet->second.capabilities.fontSizes) + themeFontSize->add(ThemeData::getFontSizeLabel(fontSize), fontSize, + fontSize == selectedFontSize); + if (themeFontSize->getSelectedObjects().size() == 0) + themeFontSize->selectEntry(0); + } + else { + themeFontSize->add("None defined", "none", true); + themeFontSize->setEnabled(false); + themeFontSize->setOpacity(DISABLED_OPACITY); + themeFontSize->getParent() + ->getChild(themeFontSize->getChildIndex() - 1) + ->setOpacity(DISABLED_OPACITY); + } + }; + + themeFontSizeFunc(Settings::getInstance()->getString("Theme"), + Settings::getInstance()->getString("ThemeFontSize")); + // Theme aspect ratios. auto themeAspectRatio = std::make_shared>( getHelpStyle(), "THEME ASPECT RATIO", false); @@ -889,6 +930,7 @@ void GuiMenu::openUIOptions() if (!firstRun) { themeVariantsFunc(themeName, themeVariant->getSelected()); themeColorSchemesFunc(themeName, themeColorScheme->getSelected()); + themeFontSizeFunc(themeName, themeFontSize->getSelected()); themeAspectRatiosFunc(themeName, themeAspectRatio->getSelected()); themeTransitionsFunc(themeName, themeTransitions->getSelected()); } @@ -925,6 +967,20 @@ void GuiMenu::openUIOptions() ->getChild(themeColorScheme->getChildIndex() - 1) ->setOpacity(DISABLED_OPACITY); } + if (selectedTheme->second.capabilities.fontSizes.size() > 0) { + themeFontSize->setEnabled(true); + themeFontSize->setOpacity(1.0f); + themeFontSize->getParent() + ->getChild(themeFontSize->getChildIndex() - 1) + ->setOpacity(1.0f); + } + else { + themeFontSize->setEnabled(false); + themeFontSize->setOpacity(DISABLED_OPACITY); + themeFontSize->getParent() + ->getChild(themeFontSize->getChildIndex() - 1) + ->setOpacity(DISABLED_OPACITY); + } if (selectedTheme->second.capabilities.aspectRatios.size() > 0) { themeAspectRatio->setEnabled(true); themeAspectRatio->setOpacity(1.0f); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 919516ca8..f5b69bafa 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -165,6 +165,7 @@ void Settings::setDefaults() mStringMap["Theme"] = {"slate-es-de", "slate-es-de"}; mStringMap["ThemeVariant"] = {"", ""}; mStringMap["ThemeColorScheme"] = {"", ""}; + mStringMap["ThemeFontSize"] = {"", ""}; mStringMap["ThemeAspectRatio"] = {"", ""}; mStringMap["ThemeTransitions"] = {"automatic", "automatic"}; mStringMap["QuickSystemSelect"] = {"leftrightshoulders", "leftrightshoulders"}; diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index f40f11d07..589063468 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -51,6 +51,13 @@ std::vector ThemeData::sSupportedTransitionAnimations { {"builtin-slide"}, {"builtin-fade"}}; +std::vector> ThemeData::sSupportedFontSizes { + {"medium", "medium"}, + {"large", "large"}, + {"small", "small"}, + {"x-large", "extra large"}, + {"x-small", "extra small"}}; + std::vector> ThemeData::sSupportedAspectRatios { {"automatic", "automatic"}, {"16:9", "16:9"}, @@ -596,6 +603,17 @@ void ThemeData::loadFile(const std::map& sysDataMap, mSelectedColorScheme = mColorSchemes.front(); } + if (sCurrentTheme->second.capabilities.fontSizes.size() > 0) { + for (auto& fontSize : sCurrentTheme->second.capabilities.fontSizes) + mFontSizes.emplace_back(fontSize); + + if (std::find(mFontSizes.cbegin(), mFontSizes.cend(), + Settings::getInstance()->getString("ThemeFontSize")) != mFontSizes.cend()) + mSelectedFontSize = Settings::getInstance()->getString("ThemeFontSize"); + else + mSelectedFontSize = mFontSizes.front(); + } + sAspectRatioMatch = false; if (sCurrentTheme->second.capabilities.aspectRatios.size() > 0) { @@ -633,6 +651,7 @@ void ThemeData::loadFile(const std::map& sysDataMap, parseVariables(root); parseColorSchemes(root); + parseFontSizes(root); parseIncludes(root); parseViews(root); if (root.child("feature") != nullptr) @@ -768,6 +787,8 @@ void ThemeData::populateThemes() << " variant" << (capabilities.variants.size() != 1 ? "s" : "") << ", " << capabilities.colorSchemes.size() << " color scheme" << (capabilities.colorSchemes.size() != 1 ? "s" : "") << ", " + << capabilities.fontSizes.size() << " font size" + << (capabilities.fontSizes.size() != 1 ? "s" : "") << ", " << aspectRatios << " aspect ratio" << (aspectRatios != 1 ? "s" : "") << " and " << capabilities.transitions.size() << " transition" << (capabilities.transitions.size() != 1 ? "s" : ""); @@ -819,6 +840,18 @@ const std::string ThemeData::getSystemThemeFile(const std::string& system) return theme->second.getThemePath(system); } +const std::string ThemeData::getFontSizeLabel(const std::string& fontSize) +{ + auto it = std::find_if(sSupportedFontSizes.cbegin(), sSupportedFontSizes.cend(), + [&fontSize](const std::pair& entry) { + return entry.first == fontSize; + }); + if (it != sSupportedFontSizes.cend()) + return it->second; + else + return "invalid font size"; +} + const std::string ThemeData::getAspectRatioLabel(const std::string& aspectRatio) { auto it = std::find_if(sSupportedAspectRatios.cbegin(), sSupportedAspectRatios.cend(), @@ -980,6 +1013,7 @@ ThemeData::ThemeCapability ThemeData::parseThemeCapabilities(const std::string& { ThemeCapability capabilities; std::vector aspectRatiosTemp; + std::vector fontSizesTemp; bool hasTriggers {false}; const std::string capFile {path + "/capabilities.xml"}; @@ -1034,6 +1068,29 @@ ThemeData::ThemeCapability ThemeData::parseThemeCapabilities(const std::string& } } + for (pugi::xml_node fontSize {themeCapabilities.child("fontSize")}; fontSize; + fontSize = fontSize.next_sibling("fontSize")) { + const std::string& value {fontSize.text().get()}; + if (std::find_if(sSupportedFontSizes.cbegin(), sSupportedFontSizes.cend(), + [&value](const std::pair& entry) { + return entry.first == value; + }) == sSupportedFontSizes.cend()) { + LOG(LogWarning) << "Declared font size \"" << value + << "\" is not supported, ignoring entry in \"" << capFile << "\""; + } + else { + if (std::find(fontSizesTemp.cbegin(), fontSizesTemp.cend(), value) != + fontSizesTemp.cend()) { + LOG(LogWarning) + << "Font size \"" << value + << "\" is declared multiple times, ignoring entry in \"" << capFile << "\""; + } + else { + fontSizesTemp.emplace_back(value); + } + } + } + for (pugi::xml_node variant {themeCapabilities.child("variant")}; variant; variant = variant.next_sibling("variant")) { ThemeVariant readVariant; @@ -1411,6 +1468,17 @@ ThemeData::ThemeCapability ThemeData::parseThemeCapabilities(const std::string& } } + // Add the font sizes in the order they are defined in sSupportedFontSizes so they always + // show up in the same order in the UI Settings menu. + if (!fontSizesTemp.empty()) { + for (auto& fontSize : sSupportedFontSizes) { + if (std::find(fontSizesTemp.cbegin(), fontSizesTemp.cend(), fontSize.first) != + fontSizesTemp.cend()) { + capabilities.fontSizes.emplace_back(fontSize.first); + } + } + } + if (hasTriggers) { for (auto& variant : capabilities.variants) { for (auto it = variant.overrides.begin(); it != variant.overrides.end();) { @@ -1500,6 +1568,7 @@ void ThemeData::parseIncludes(const pugi::xml_node& root) parseTransitions(theme); parseVariables(theme); parseColorSchemes(theme); + parseFontSizes(theme); parseIncludes(theme); parseViews(theme); if (theme.child("feature") != nullptr) @@ -1549,6 +1618,7 @@ void ThemeData::parseVariants(const pugi::xml_node& root) parseTransitions(node); parseVariables(node); parseColorSchemes(node); + parseFontSizes(node); parseIncludes(node); parseViews(node); parseAspectRatios(node); @@ -1596,6 +1666,43 @@ void ThemeData::parseColorSchemes(const pugi::xml_node& root) } } +void ThemeData::parseFontSizes(const pugi::xml_node& root) +{ + if (sCurrentTheme == sThemes.end()) + return; + + if (mSelectedFontSize == "") + return; + + ThemeException error; + error << "ThemeData::parseFontSizes(): "; + error.setFiles(mPaths); + + for (pugi::xml_node node {root.child("fontSize")}; node; node = node.next_sibling("fontSize")) { + if (!node.attribute("name")) + throw error << ": tag missing \"name\" attribute"; + + const std::string delim {" \t\r\n,"}; + const std::string nameAttr {node.attribute("name").as_string()}; + size_t prevOff {nameAttr.find_first_not_of(delim, 0)}; + size_t off {nameAttr.find_first_of(delim, prevOff)}; + std::string viewKey; + while (off != std::string::npos || prevOff != std::string::npos) { + viewKey = nameAttr.substr(prevOff, off - prevOff); + prevOff = nameAttr.find_first_not_of(delim, off); + off = nameAttr.find_first_of(delim, prevOff); + + if (std::find(mFontSizes.cbegin(), mFontSizes.cend(), viewKey) == mFontSizes.cend()) { + throw error << ": value \"" << viewKey + << "\" is not defined in capabilities.xml"; + } + + if (mSelectedFontSize == viewKey) + parseVariables(node); + } + } +} + void ThemeData::parseAspectRatios(const pugi::xml_node& root) { if (sCurrentTheme == sThemes.end()) @@ -1633,6 +1740,7 @@ void ThemeData::parseAspectRatios(const pugi::xml_node& root) if (sSelectedAspectRatio == viewKey) { parseVariables(node); parseColorSchemes(node); + parseFontSizes(node); parseIncludes(node); parseViews(node); } diff --git a/es-core/src/ThemeData.h b/es-core/src/ThemeData.h index 3a9ff783e..d6ed87fa3 100644 --- a/es-core/src/ThemeData.h +++ b/es-core/src/ThemeData.h @@ -184,6 +184,7 @@ public: std::string themeName; std::vector variants; std::vector colorSchemes; + std::vector fontSizes; std::vector aspectRatios; std::vector transitions; std::vector suppressedTransitionProfiles; @@ -222,6 +223,7 @@ public: static void populateThemes(); const static std::map& getThemes() { return sThemes; } const static std::string getSystemThemeFile(const std::string& system); + const static std::string getFontSizeLabel(const std::string& fontSize); const static std::string getAspectRatioLabel(const std::string& aspectRatio); static void setThemeTransitions(); @@ -251,6 +253,7 @@ private: void parseIncludes(const pugi::xml_node& root); void parseVariants(const pugi::xml_node& root); void parseColorSchemes(const pugi::xml_node& root); + void parseFontSizes(const pugi::xml_node& root); void parseAspectRatios(const pugi::xml_node& root); void parseTransitions(const pugi::xml_node& root); void parseVariables(const pugi::xml_node& root); @@ -264,6 +267,8 @@ private: static std::vector sSupportedMediaTypes; static std::vector sSupportedTransitions; static std::vector sSupportedTransitionAnimations; + + static std::vector> sSupportedFontSizes; static std::vector> sSupportedAspectRatios; static std::map sAspectRatioMap; @@ -278,9 +283,11 @@ private: std::deque mPaths; std::vector mVariants; std::vector mColorSchemes; + std::vector mFontSizes; std::string mSelectedVariant; std::string mOverrideVariant; std::string mSelectedColorScheme; + std::string mSelectedFontSize; static inline std::string sSelectedAspectRatio; static inline bool sAspectRatioMatch {false}; bool mCustomCollection; From 830e57a65a0dcd3ddfeda0b9d0ad43738c5685d1 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 20 Dec 2023 22:04:29 +0100 Subject: [PATCH 096/320] Documentation update --- CHANGELOG.md | 1 + THEMES-DEV.md | 98 ++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 95 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7af2f6ed7..12c26f596 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ * Renamed the application from EmulationStation Desktop Edition to ES-DE * Renamed the application data directory from .emulationstation to ES-DE * Split the es_find_rules.xml and es_systems.xml files for Linux and BSD Unix into separate directories +* Added support for defining font sizes from the theme configuration and selecting these from the UI settings menu * Added support for .webp, .svg and unanimated .gif files to the slideshow screensaver when using a custom image directory * Changed the default slideshow custom image directory from slideshow/custom_images to screensavers/custom_slideshow * Changed the custom slideshow image directory setting from ScreensaverSlideshowImageDir to ScreensaverSlideshowCustomDir diff --git a/THEMES-DEV.md b/THEMES-DEV.md index a87fa410b..020d16d38 100644 --- a/THEMES-DEV.md +++ b/THEMES-DEV.md @@ -653,6 +653,95 @@ Here's an example configuration: ``` +## Font sizes + +The optional font sizes functionality makes it possible to use a set of predefined size options and connect these to theme variables that can be used to apply different text sizes and related design changes. The font sizes declared for the theme can be selected via the _Theme font size_ setting in the _UI Settings_ menu. + +To understand the basics on how to use variables, make sure to read the _Theme variables_ section elsewhere in this document. + +To use the font size entries you first need to declare them using `` tag pairs in the `capabilities.xml` file. The following sizes are available: + +| capabilities.xml name | UI Settings label | +| :-------------------- | :--------------- | +| medium | medium | +| large | large | +| small | small | +| x-large | extra large | +| x-small | extra small | + +The options will always be listed in the above order in the _UI Settings_ menu. + +Here's an example of a theme that implements three of these sizes: + +```xml + + + My theme + + medium + small + x-small + +``` + +In the theme configuration you'll also use a `` tag pair combined with a `` tag pair to define the variables you want to apply per font size. + +These `` tag pairs can be placed directly inside the `` tags, inside the `` tags or inside the `` tags. + +The mandatory name attribute is used to specificy which font size to use, and multiple values can be specified at the same time by separating them by commas or by whitespace characters (tabs, spaces or line breaks). + +Here's an example configuration: + +```xml + + + + 0.025 + 0.5 0.6437 + 0.022 + 0.016 + + + + + 0.015 + 0.45 0.6437 + 0.013 + + + + + 0.008 + 0.4 0.6437 + 0.006 + + + + 0.011 + + + + + + ${gameCounterPos} + 1 0.056 + ${gameCounterFontSize} + + + + 0.2 0.3412 + 0.2 0.040 + ${gameNameFontSize} + + + 0.33 0.3412 + 0.18 0.040 + ${publisherFontSize} + + + +``` + ## Aspect ratios The aspect ratio support works almost identically to the variants and color schemes with the main difference that the available aspect ratios are hardcoded into ES-DE. The theme can still decide which of the aspect ratios to support (or none at all in which case the theme aspect ratio is left undefined) but it can't create entirely new aspect ratio entries. @@ -1332,10 +1421,11 @@ It's important to understand how the theme configuration files are parsed in ord 1) Transitions 2) Variables 3) Color schemes -4) Included files -5) "General" (non-variant) configuration -6) Variants -7) Aspect ratios +4) Font sizes +5) Included files +6) "General" (non-variant) configuration +7) Variants +8) Aspect ratios When including a file using the `` tag (i.e. step 4 above) then all steps listed above are executed for that included file prior to continuing to the next line after the `` tag. From c87d92a16dc7786baaf3e33336c5f21a9af83148 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 20 Dec 2023 22:30:11 +0100 Subject: [PATCH 097/320] Added the theme font size count to the theme downloader interface --- es-app/src/guis/GuiThemeDownloader.cpp | 16 ++++++++++++---- es-app/src/guis/GuiThemeDownloader.h | 5 +++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/es-app/src/guis/GuiThemeDownloader.cpp b/es-app/src/guis/GuiThemeDownloader.cpp index 93906889d..f6623e51b 100644 --- a/es-app/src/guis/GuiThemeDownloader.cpp +++ b/es-app/src/guis/GuiThemeDownloader.cpp @@ -67,9 +67,9 @@ GuiThemeDownloader::GuiThemeDownloader(std::function updateCallback) std::make_shared("", Font::get(fontSizeSmall), mMenuColorTitle, ALIGN_LEFT); mCenterGrid->setEntry(mAspectRatiosLabel, glm::ivec2 {3, 0}, false, true, glm::ivec2 {1, 1}); - mFutureUseLabel = + mFontSizesLabel = std::make_shared("", Font::get(fontSizeSmall), mMenuColorTitle, ALIGN_LEFT); - mCenterGrid->setEntry(mFutureUseLabel, glm::ivec2 {3, 1}, false, true, glm::ivec2 {1, 1}); + mCenterGrid->setEntry(mFontSizesLabel, glm::ivec2 {3, 1}, false, true, glm::ivec2 {1, 1}); mCenterGrid->setEntry(std::make_shared(), glm::ivec2 {5, 0}, false, false, glm::ivec2 {1, 5}); @@ -86,9 +86,9 @@ GuiThemeDownloader::GuiThemeDownloader(std::function updateCallback) "", Font::get(fontSizeSmall, FONT_PATH_LIGHT), mMenuColorTitle, ALIGN_LEFT); mCenterGrid->setEntry(mAspectRatiosCount, glm::ivec2 {4, 0}, false, true, glm::ivec2 {1, 1}); - mFutureUseCount = std::make_shared("", Font::get(fontSizeSmall, FONT_PATH_LIGHT), + mFontSizesCount = std::make_shared("", Font::get(fontSizeSmall, FONT_PATH_LIGHT), mMenuColorTitle, ALIGN_LEFT); - mCenterGrid->setEntry(mFutureUseCount, glm::ivec2 {4, 1}, false, true, glm::ivec2 {1, 1}); + mCenterGrid->setEntry(mFontSizesCount, glm::ivec2 {4, 1}, false, true, glm::ivec2 {1, 1}); mDownloadStatus = std::make_shared("", Font::get(fontSizeSmall, FONT_PATH_BOLD), mMenuColorTitle, ALIGN_LEFT); @@ -674,6 +674,12 @@ void GuiThemeDownloader::parseThemesList() themeEntry.aspectRatios.emplace_back(aspectRatios[i].GetString()); } + if (theme.HasMember("fontSizes") && theme["fontSizes"].IsArray()) { + const rapidjson::Value& fontSizes {theme["fontSizes"]}; + for (int i {0}; i < static_cast(fontSizes.Size()); ++i) + themeEntry.fontSizes.emplace_back(fontSizes[i].GetString()); + } + if (theme.HasMember("transitions") && theme["transitions"].IsArray()) { const rapidjson::Value& transitions {theme["transitions"]}; for (int i {0}; i < static_cast(transitions.Size()); ++i) @@ -855,6 +861,7 @@ void GuiThemeDownloader::populateGUI() mVariantsLabel->setText("VARIANTS:"); mColorSchemesLabel->setText("COLOR SCHEMES:"); mAspectRatiosLabel->setText("ASPECT RATIOS:"); + mFontSizesLabel->setText("FONT SIZES:"); updateInfoPane(); updateHelpPrompts(); @@ -930,6 +937,7 @@ void GuiThemeDownloader::updateInfoPane() mVariantCount->setText(std::to_string(mThemes[mList->getCursorId()].variants.size())); 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)); } diff --git a/es-app/src/guis/GuiThemeDownloader.h b/es-app/src/guis/GuiThemeDownloader.h index ce1e8dd18..2a807756e 100644 --- a/es-app/src/guis/GuiThemeDownloader.h +++ b/es-app/src/guis/GuiThemeDownloader.h @@ -64,6 +64,7 @@ private: std::vector variants; std::vector colorSchemes; std::vector aspectRatios; + std::vector fontSizes; std::vector transitions; std::vector screenshots; bool newEntry; @@ -165,12 +166,12 @@ private: std::shared_ptr mVariantsLabel; std::shared_ptr mColorSchemesLabel; std::shared_ptr mAspectRatiosLabel; - std::shared_ptr mFutureUseLabel; + std::shared_ptr mFontSizesLabel; std::shared_ptr mAuthor; std::shared_ptr mVariantCount; std::shared_ptr mColorSchemesCount; std::shared_ptr mAspectRatiosCount; - std::shared_ptr mFutureUseCount; + std::shared_ptr mFontSizesCount; }; #endif // ES_APP_GUIS_GUI_THEME_DOWNLOADER_H From 086755da7cf450d1ad6874fdc18bc92d22880cec Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 20 Dec 2023 22:43:59 +0100 Subject: [PATCH 098/320] (Linux) Added support for the AppImage release of Vita3K --- resources/systems/linux/es_find_rules.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/systems/linux/es_find_rules.xml b/resources/systems/linux/es_find_rules.xml index f078fb3d9..33accf568 100644 --- a/resources/systems/linux/es_find_rules.xml +++ b/resources/systems/linux/es_find_rules.xml @@ -993,6 +993,10 @@ Vita3K + ~/Applications/Vita3K*.AppImage + ~/.local/share/applications/Vita3K*.AppImage + ~/.local/bin/Vita3K*.AppImage + ~/bin/Vita3K*.AppImage ~/Applications/Vita3K/Vita3K ~/.local/share/applications/Vita3K/Vita3K ~/.local/bin/Vita3K/Vita3K From 2a5830e54e1c93ca771039311129f6720ddc765a Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 21 Dec 2023 17:02:44 +0100 Subject: [PATCH 099/320] Minor update to an information dialog message --- es-app/src/views/ViewController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index db91a6d23..6d89232a7 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -140,7 +140,7 @@ void ViewController::setMenuColors() void ViewController::legacyAppDataDialog() { const std::string upgradeMessage { - "AS OF ES-DE 3.0.0 THE APPLICATION DATA DIRECTORY HAS CHANGED FROM \".emulationstation\" " + "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"}; From c6c3990661534631da1d4e72f840b91748aa63e9 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 21 Dec 2023 17:06:41 +0100 Subject: [PATCH 100/320] (slate-es-de) Added support for medium and large font sizes --- .../aspect-ratio-16-9-vertical.xml | 89 ++++++++++++++----- themes/slate-es-de/aspect-ratio-16-9.xml | 89 ++++++++++++++----- .../slate-es-de/aspect-ratio-4-3-vertical.xml | 89 ++++++++++++++----- themes/slate-es-de/aspect-ratio-4-3.xml | 89 ++++++++++++++----- themes/slate-es-de/capabilities.xml | 3 + 5 files changed, 275 insertions(+), 84 deletions(-) diff --git a/themes/slate-es-de/aspect-ratio-16-9-vertical.xml b/themes/slate-es-de/aspect-ratio-16-9-vertical.xml index d2e2fe077..44a975f26 100644 --- a/themes/slate-es-de/aspect-ratio-16-9-vertical.xml +++ b/themes/slate-es-de/aspect-ratio-16-9-vertical.xml @@ -1,9 +1,56 @@ + + + 0.025 + 0.70 0.03 + 0.023 + 0.05 0.675 + 0.05 0.690 + 0.05 0.705 + 0.05 0.720 + 0.05 0.750 + 0.05 0.765 + 0.05 0.780 + 0.05 0.795 + 0.05 0.810 + 0.05 0.825 + 0.0264 + 0.026 + 0.026 + 0.026 + 0 0.02 + 0.11 0.235 + + + + + 0.027 + 0.70 0.03 + 0.027 + 0.05 0.675 + 0.05 0.692 + 0.05 0.709 + 0.05 0.726 + 0.05 0.756 + 0.05 0.773 + 0.05 0.790 + 0.05 0.807 + 0.05 0.824 + 0.05 0.841 + 0.0326 + 0.03 + 0.0315 + 0.028 + 0 0.02 + 0.11 0.235 + + + 0.012 0.98 - 0.025 + ${helpsystemFontSize} @@ -17,7 +64,7 @@ - 0.0264 + ${gamelistFontSize} 0.35 0.12 @@ -47,38 +94,38 @@ 0.12 0.14 - 0.70 0.03 - 0.023 + ${systemInfoSize} + ${systemInfoFontSize} - 0.05 0.675 + ${systemInfoPos1} - 0.05 0.690 + ${systemInfoPos2} - 0.05 0.705 + ${systemInfoPos3} - 0.05 0.720 + ${systemInfoPos4} - 0.05 0.750 + ${systemInfoPos5} - 0.05 0.765 + ${systemInfoPos6} - 0.05 0.780 + ${systemInfoPos7} - 0.05 0.795 + ${systemInfoPos8} - 0.05 0.810 + ${systemInfoPos9} - 0.05 0.825 + ${systemInfoPos10} @@ -98,7 +145,7 @@ 0.155 0.02 - 0.026 + ${metadataFontSize} 0.454 0.535 @@ -106,7 +153,7 @@ 0.454 0.558 0.155 0.02 - 0.026 + ${metadataFontSize} 0.62 0.535 @@ -138,24 +185,24 @@ 0.79 0.613 0.155 0.02 - 0.026 + ${metadataFontSize} 0.454 0.655 0.384 0.262 - 0.026 + ${descriptionFontSize} - 0 0.02 + ${ratingSize} 0.723 0.192 0.24 0.042 - 0.026 + ${gamelistInfoFontSize} 0.96 0.655 - 0.11 0.235 + ${badgesSize} 1 0 5 2 diff --git a/themes/slate-es-de/aspect-ratio-16-9.xml b/themes/slate-es-de/aspect-ratio-16-9.xml index 31ad0a623..348665df2 100644 --- a/themes/slate-es-de/aspect-ratio-16-9.xml +++ b/themes/slate-es-de/aspect-ratio-16-9.xml @@ -1,9 +1,56 @@ + + + 0.035 + 0.40 0.03 + 0.021 + 0.38 0.695 + 0.38 0.716 + 0.38 0.737 + 0.38 0.758 + 0.38 0.800 + 0.38 0.821 + 0.38 0.842 + 0.38 0.863 + 0.38 0.884 + 0.38 0.905 + 0.025 + 0.025 + 0.0195 + 0.0195 + 0 0.03 + 0.13 0.235 + + + + + 0.035 + 0.40 0.03 + 0.024 + 0.38 0.680 + 0.38 0.705 + 0.38 0.730 + 0.38 0.755 + 0.38 0.795 + 0.38 0.820 + 0.38 0.845 + 0.38 0.870 + 0.38 0.895 + 0.38 0.920 + 0.03165 + 0.028 + 0.025 + 0.0235 + 0 0.03 + 0.13 0.235 + + + 0.012 0.955 - 0.035 + ${helpsystemFontSize} @@ -17,7 +64,7 @@ - 0.025 + ${gamelistFontSize} 0.4 0.15 @@ -47,38 +94,38 @@ 0.12 0.28 - 0.40 0.03 - 0.021 + ${systemInfoSize} + ${systemInfoFontSize} - 0.38 0.695 + ${systemInfoPos1} - 0.38 0.716 + ${systemInfoPos2} - 0.38 0.737 + ${systemInfoPos3} - 0.38 0.758 + ${systemInfoPos4} - 0.38 0.800 + ${systemInfoPos5} - 0.38 0.821 + ${systemInfoPos6} - 0.38 0.842 + ${systemInfoPos7} - 0.38 0.863 + ${systemInfoPos8} - 0.38 0.884 + ${systemInfoPos9} - 0.38 0.905 + ${systemInfoPos10} @@ -98,7 +145,7 @@ 0.14 0.02 - 0.0195 + ${metadataFontSize} 0.815 0.2755 @@ -106,7 +153,7 @@ 0.83 0.3005 0.14 0.02 - 0.0195 + ${metadataFontSize} 0.815 0.3355 @@ -138,24 +185,24 @@ 0.83 0.6005 0.14 0.02 - 0.0195 + ${metadataFontSize} 0.454 0.675 0.346 0.242 - 0.0195 + ${descriptionFontSize} - 0 0.03 + ${ratingSize} 0.773 0.192 0.2 0.042 - 0.025 + ${gamelistInfoFontSize} 0.815 0.675 - 0.13 0.235 + ${badgesSize} 0 0 3 3 diff --git a/themes/slate-es-de/aspect-ratio-4-3-vertical.xml b/themes/slate-es-de/aspect-ratio-4-3-vertical.xml index 36adc3390..5e3d4f3eb 100644 --- a/themes/slate-es-de/aspect-ratio-4-3-vertical.xml +++ b/themes/slate-es-de/aspect-ratio-4-3-vertical.xml @@ -1,9 +1,56 @@ + + + 0.025 + 0.70 0.03 + 0.023 + 0.05 0.675 + 0.05 0.694 + 0.05 0.713 + 0.05 0.732 + 0.05 0.770 + 0.05 0.789 + 0.05 0.808 + 0.05 0.827 + 0.05 0.846 + 0.05 0.865 + 0.0264 + 0.026 + 0.026 + 0.026 + 0 0.02 + 0.11 0.245 + + + + + 0.027 + 0.70 0.03 + 0.027 + 0.05 0.675 + 0.05 0.696 + 0.05 0.717 + 0.05 0.738 + 0.05 0.778 + 0.05 0.799 + 0.05 0.820 + 0.05 0.841 + 0.05 0.862 + 0.05 0.883 + 0.0335 + 0.030 + 0.0318 + 0.0285 + 0 0.022 + 0.11 0.245 + + + 0.012 0.975 - 0.025 + ${helpsystemFontSize} @@ -17,7 +64,7 @@ - 0.0264 + ${gamelistFontSize} 0.35 0.12 @@ -47,38 +94,38 @@ 0.12 0.17 - 0.70 0.03 - 0.023 + ${systemInfoSize} + ${systemInfoFontSize} - 0.05 0.675 + ${systemInfoPos1} - 0.05 0.694 + ${systemInfoPos2} - 0.05 0.713 + ${systemInfoPos3} - 0.05 0.732 + ${systemInfoPos4} - 0.05 0.770 + ${systemInfoPos5} - 0.05 0.789 + ${systemInfoPos6} - 0.05 0.808 + ${systemInfoPos7} - 0.05 0.827 + ${systemInfoPos8} - 0.05 0.846 + ${systemInfoPos9} - 0.05 0.865 + ${systemInfoPos10} @@ -98,7 +145,7 @@ 0.155 0.02 - 0.026 + ${metadataFontSize} 0.454 0.535 @@ -106,7 +153,7 @@ 0.454 0.558 0.155 0.02 - 0.026 + ${metadataFontSize} 0.62 0.535 @@ -138,24 +185,24 @@ 0.79 0.613 0.155 0.02 - 0.026 + ${metadataFontSize} 0.454 0.655 0.384 0.262 - 0.026 + ${descriptionFontSize} - 0 0.02 + ${ratingSize} 0.723 0.192 0.24 0.042 - 0.026 + ${gamelistInfoFontSize} 0.96 0.655 - 0.11 0.245 + ${badgesSize} 1 0 5 2 diff --git a/themes/slate-es-de/aspect-ratio-4-3.xml b/themes/slate-es-de/aspect-ratio-4-3.xml index f23b1c6da..2ebf458ae 100644 --- a/themes/slate-es-de/aspect-ratio-4-3.xml +++ b/themes/slate-es-de/aspect-ratio-4-3.xml @@ -1,9 +1,56 @@ + + + 0.034 + 0.44 0.03 + 0.021 + 0.34 0.695 + 0.34 0.716 + 0.34 0.737 + 0.34 0.758 + 0.34 0.799 + 0.34 0.820 + 0.34 0.841 + 0.34 0.862 + 0.34 0.883 + 0.34 0.904 + 0.025 + 0.025 + 0.0195 + 0.0195 + 0 0.03 + 0.13 0.235 + + + + + 0.034 + 0.46 0.03 + 0.0238 + 0.34 0.680 + 0.34 0.705 + 0.34 0.730 + 0.34 0.755 + 0.34 0.795 + 0.34 0.820 + 0.34 0.845 + 0.34 0.870 + 0.34 0.895 + 0.34 0.920 + 0.03165 + 0.029 + 0.025 + 0.0235 + 0 0.03 + 0.14 0.235 + + + 0.012 0.955 - 0.034 + ${helpsystemFontSize} @@ -17,7 +64,7 @@ - 0.025 + ${gamelistFontSize} 0.4 0.15 @@ -47,38 +94,38 @@ 0.12 0.28 - 0.44 0.03 - 0.021 + ${systemInfoSize} + ${systemInfoFontSize} - 0.34 0.695 + ${systemInfoPos1} - 0.34 0.716 + ${systemInfoPos2} - 0.34 0.737 + ${systemInfoPos3} - 0.34 0.758 + ${systemInfoPos4} - 0.34 0.799 + ${systemInfoPos5} - 0.34 0.820 + ${systemInfoPos6} - 0.34 0.841 + ${systemInfoPos7} - 0.34 0.862 + ${systemInfoPos8} - 0.34 0.883 + ${systemInfoPos9} - 0.34 0.904 + ${systemInfoPos10} @@ -98,7 +145,7 @@ 0.14 0.02 - 0.0195 + ${metadataFontSize} 0.815 0.2755 @@ -106,7 +153,7 @@ 0.83 0.3005 0.14 0.02 - 0.0195 + ${metadataFontSize} 0.815 0.3355 @@ -138,24 +185,24 @@ 0.83 0.6005 0.14 0.02 - 0.0195 + ${metadataFontSize} 0.454 0.675 0.346 0.242 - 0.0195 + ${descriptionFontSize} - 0 0.03 + ${ratingSize} 0.773 0.192 0.2 0.042 - 0.025 + ${gamelistInfoFontSize} 0.815 0.675 - 0.13 0.235 + ${badgesSize} 0 0 3 3 diff --git a/themes/slate-es-de/capabilities.xml b/themes/slate-es-de/capabilities.xml index 26ce9b218..8c5b70b8f 100644 --- a/themes/slate-es-de/capabilities.xml +++ b/themes/slate-es-de/capabilities.xml @@ -10,6 +10,9 @@ 4:3 4:3_vertical + medium + large + From 2432f14d9e76048f4b43e3270b556b1fd8bb97ed Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 21 Dec 2023 17:13:38 +0100 Subject: [PATCH 101/320] (slate-es-de) Small adjustment to the large font size option --- themes/slate-es-de/aspect-ratio-16-9.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/slate-es-de/aspect-ratio-16-9.xml b/themes/slate-es-de/aspect-ratio-16-9.xml index 348665df2..46bb1b1ea 100644 --- a/themes/slate-es-de/aspect-ratio-16-9.xml +++ b/themes/slate-es-de/aspect-ratio-16-9.xml @@ -37,7 +37,7 @@ 0.38 0.870 0.38 0.895 0.38 0.920 - 0.03165 + 0.0296 0.028 0.025 0.0235 From ab1e13d57980e36fe075f9f3bbe98228dc076890 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 21 Dec 2023 21:45:17 +0100 Subject: [PATCH 102/320] (modern-es-de) Added support for medium and large font sizes --- themes/modern-es-de/capabilities.xml | 3 + themes/modern-es-de/theme.xml | 109 ++++++++++++++++++++------- 2 files changed, 83 insertions(+), 29 deletions(-) diff --git a/themes/modern-es-de/capabilities.xml b/themes/modern-es-de/capabilities.xml index 567309c43..9c6c01c2c 100644 --- a/themes/modern-es-de/capabilities.xml +++ b/themes/modern-es-de/capabilities.xml @@ -10,6 +10,9 @@ 4:3 21:9 + medium + large + diff --git a/themes/modern-es-de/theme.xml b/themes/modern-es-de/theme.xml index 0c6c61beb..ba32eb245 100644 --- a/themes/modern-es-de/theme.xml +++ b/themes/modern-es-de/theme.xml @@ -14,6 +14,57 @@ ./assets/fonts/nswitchui.ttf + + + + 0.032 + 0.04 + + 0.03 + 0.030 + 1.9 + -0.0015 + 0.03 + 0.03 + 1.2 + 0.02 + 0.03 + 0.70 0.532 + 0.8453 0.532 + 0.70 0.608 + 0.8453 0.608 + 0.70 0.684 + 0.70 0.760 + 0.04 0.03 + 0.1267 0.185 + + + + + + 0.036 + 0.045 + + 0.04 + 0.0368 + 1.7 + 0.0025 + 0.036 + 0.037 + 1.15 + 0.025 + 0.036 + 0.70 0.527 + 0.8453 0.527 + 0.70 0.602 + 0.8453 0.602 + 0.70 0.679 + 0.70 0.760 + 0 0.035 + 0.1267 0.205 + + + ./aspect-ratio-16-9.xml @@ -99,7 +150,7 @@ 0.5 0.5 gamecount ${mainFont} - 0.032 + ${gameCounterFontSize} center ${mainColor} capitalize @@ -117,7 +168,7 @@ 0.743 0.035 0 0.5 ${mainFont} - 0.04 + ${systemNameFontSize} left ${mainColor} @@ -149,18 +200,18 @@ 0.31 0.68 0 0 0.075 - -0.0015 + ${gamelistSelectorVerticalOffset} ${mainColor} ./assets/selector.png ${mainColor} ${secondaryColor} ${tertiaryColor} ${mainFont} - 0.030 + ${gamelistFontSize} left 0.01 none - 1.9 + ${gamelistLineSpacing} 0.5 0.13 @@ -174,7 +225,7 @@ 0.034 0.065 0.743 0.031 ${mainFont} - 0.03 + ${gamelistSystemNameFontSize} left ${secondaryColor} capitalize @@ -200,10 +251,10 @@ 0.966 0.065 - 0.2 0.031 + 0.25 0.031 1 0 ${mainFont} - 0.03 + ${gamelistInfoFontSize} right ${secondaryColor} @@ -244,85 +295,85 @@ 1 4.5 7 - 0.03 - 1.2 + ${descriptionFontSize} + ${descriptionLineSpacing} - 0.70 0.532 + ${publisherLabelPos} 0.13125 0.02 Publisher: true - 0.02 + ${metadataLabelFontSize} 0.70 0.552 0.13125 0.03 publisher Unknown - 0.03 + ${metadataValueFontSize} - 0.8453 0.532 + ${developerLabelPos} 0.13125 0.02 Developer: true - 0.02 + ${metadataLabelFontSize} 0.8453 0.552 0.13125 0.03 developer Unknown - 0.03 + ${metadataValueFontSize} - 0.70 0.608 + ${releaseDateLabelPos} 0.13125 0.02 Released: true - 0.02 + ${metadataLabelFontSize} 0.70 0.628 0.13125 0.03 releasedate Unknown - 0.03 + ${metadataValueFontSize} - 0.8453 0.608 + ${playersLabelPos} 0.13125 0.02 Players: true - 0.02 + ${metadataLabelFontSize} 0.8453 0.628 0.13125 0.03 players Unknown - 0.03 + ${metadataValueFontSize} - 0.70 0.684 + ${genreLabelPos} 0.13125 0.02 Genre: true - 0.02 + ${metadataLabelFontSize} 0.70 0.704 0.13125 0.03 genre Unknown - 0.03 + ${metadataValueFontSize} - 0.70 0.760 + ${ratingLabelPos} 0.13125 0.02 Rating: true - 0.02 + ${metadataLabelFontSize} @@ -336,13 +387,13 @@ 0.70 0.785 - 0.04 0.03 + ${ratingSize} ./assets/star-filled.svg ./assets/${colorSchemeName}/star-unfilled.svg 0.8423 0.685 - 0.1267 0.185 + ${badgesSize} 0 0 column collection, folder, favorite, completed, kidgame, broken, controller, altemulator, manual From d38a5726d7d638c7cbb00982f432a29555803d22 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 21 Dec 2023 21:46:10 +0100 Subject: [PATCH 103/320] (slate-es-de) Small adjustment to the large font size option --- themes/slate-es-de/aspect-ratio-16-9.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/slate-es-de/aspect-ratio-16-9.xml b/themes/slate-es-de/aspect-ratio-16-9.xml index 46bb1b1ea..aa49d30a3 100644 --- a/themes/slate-es-de/aspect-ratio-16-9.xml +++ b/themes/slate-es-de/aspect-ratio-16-9.xml @@ -25,7 +25,7 @@ 0.035 - 0.40 0.03 + 0.416 0.03 0.024 0.38 0.680 0.38 0.705 From 573b0859e10e443d84ee9aed6fda3a3945fec21c Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 23 Dec 2023 10:53:46 +0100 Subject: [PATCH 104/320] (Android) Added some more verbose log messages regarding storage states on application startup --- es-app/src/main.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 8648fafa4..4ebe44269 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -856,9 +856,18 @@ int main(int argc, char* argv[]) #if defined(__ANDROID__) LOG(LogDebug) << "Android API level: " << SDL_GetAndroidSDKVersion(); - LOG(LogDebug) << "Android storage state: " << SDL_AndroidGetExternalStorageState(); - LOG(LogDebug) << "Android internal path: " << SDL_AndroidGetInternalStoragePath(); - LOG(LogDebug) << "Android external path: " << SDL_AndroidGetExternalStoragePath(); + int storageState {SDL_AndroidGetExternalStorageState()}; + if (storageState == 0) { + LOG(LogError) << "Android external storage state: " << SDL_GetError(); + } + else if (storageState == 1) { + LOG(LogWarning) << "Android external storage state: mounted read-only"; + } + else { + LOG(LogDebug) << "Android external storage state: mounted read/write"; + } + LOG(LogDebug) << "Android internal directory: " << AndroidVariables::sInternalDataDirectory; + LOG(LogDebug) << "Android external directory: " << AndroidVariables::sExternalDataDirectory; { std::string buildIdentifier {PROGRAM_VERSION_STRING}; buildIdentifier.append(" (r") From 5fcf2ea49ac69aee053dc32550fc67f69b860e17 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 23 Dec 2023 10:57:34 +0100 Subject: [PATCH 105/320] The SDL error message is now printed to the log if a controller could not be added --- es-core/src/InputManager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 580a56da8..7ae99d955 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -635,7 +635,8 @@ void InputManager::addControllerByDeviceIndex(Window* window, int deviceIndex) SDL_GameController* controller {SDL_GameControllerOpen(deviceIndex)}; if (controller == nullptr) { - LOG(LogError) << "Couldn't add controller with device index " << deviceIndex; + LOG(LogError) << "Couldn't add controller with device index " << deviceIndex << " (" + << SDL_GetError() << ")"; return; } From 3310b23b6fdc4598fb0afbe7c3a82f0e6098af6b Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 23 Dec 2023 10:59:44 +0100 Subject: [PATCH 106/320] (Android) Fixed an issue where random garbage was sometimes briefly rendered on application startup --- es-core/src/renderers/Renderer.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/es-core/src/renderers/Renderer.cpp b/es-core/src/renderers/Renderer.cpp index 85c285b9c..c0b3c9bc0 100644 --- a/es-core/src/renderers/Renderer.cpp +++ b/es-core/src/renderers/Renderer.cpp @@ -305,10 +305,12 @@ bool Renderer::createWindow() setIcon(); setSwapInterval(); -#if defined(_WIN64) +#if defined(_WIN64) || defined(__ANDROID__) // It seems as if Windows needs this to avoid a brief white screen flash on startup. // Possibly this is driver-specific rather than OS-specific. There is additional code // in init() to work around the white screen flash issue on all operating systems. + // On Android the swap is also necessary to avoid displaying random garbage when + // the rendering starts. swapBuffers(); #endif From 0c3f6f509b6b0f758f2aed6980fe553ec37a6ae9 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 23 Dec 2023 18:53:26 +0100 Subject: [PATCH 107/320] (Android) Removed a debug test message --- es-pdf-converter/src/ConvertPDF.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/es-pdf-converter/src/ConvertPDF.cpp b/es-pdf-converter/src/ConvertPDF.cpp index a665a2db6..6d9a7b93f 100644 --- a/es-pdf-converter/src/ConvertPDF.cpp +++ b/es-pdf-converter/src/ConvertPDF.cpp @@ -140,10 +140,6 @@ int ConvertPDF::processFile( return (-1); } -#if defined(__ANDROID__) - __android_log_print(ANDROID_LOG_ERROR, "org.es_de.frontend", "PDF CONVERTING BREAK 10"); -#endif - const poppler::page* page {document->create_page(pageNum - 1)}; if (page == nullptr) { From 1d1732306e5a4c8b2a1cc440657aa8343e5b0de0 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 23 Dec 2023 19:29:43 +0100 Subject: [PATCH 108/320] Changed the OpenGL ES GLSL precision qualifiers from mediump to highp to fix some mobile GPU postprocessing rendering issues --- resources/shaders/glsl/blur_horizontal.glsl | 2 +- resources/shaders/glsl/blur_vertical.glsl | 2 +- resources/shaders/glsl/core.glsl | 2 +- resources/shaders/glsl/scanlines.glsl | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/shaders/glsl/blur_horizontal.glsl b/resources/shaders/glsl/blur_horizontal.glsl index 75b208ff2..a7170cca4 100644 --- a/resources/shaders/glsl/blur_horizontal.glsl +++ b/resources/shaders/glsl/blur_horizontal.glsl @@ -24,7 +24,7 @@ void main() #elif defined(FRAGMENT) #ifdef GL_ES -precision mediump float; +precision highp float; #endif uniform uint shaderFlags; diff --git a/resources/shaders/glsl/blur_vertical.glsl b/resources/shaders/glsl/blur_vertical.glsl index 2f4d00825..0a3637d5d 100644 --- a/resources/shaders/glsl/blur_vertical.glsl +++ b/resources/shaders/glsl/blur_vertical.glsl @@ -24,7 +24,7 @@ void main() #elif defined(FRAGMENT) #ifdef GL_ES -precision mediump float; +precision highp float; #endif uniform uint shaderFlags; diff --git a/resources/shaders/glsl/core.glsl b/resources/shaders/glsl/core.glsl index 0c56f2991..65286846a 100644 --- a/resources/shaders/glsl/core.glsl +++ b/resources/shaders/glsl/core.glsl @@ -30,7 +30,7 @@ void main(void) #elif defined(FRAGMENT) #ifdef GL_ES -precision mediump float; +precision highp float; #endif in vec2 position; diff --git a/resources/shaders/glsl/scanlines.glsl b/resources/shaders/glsl/scanlines.glsl index ae5cef003..5e0ff5120 100644 --- a/resources/shaders/glsl/scanlines.glsl +++ b/resources/shaders/glsl/scanlines.glsl @@ -24,7 +24,7 @@ #if defined(VERTEX) #ifdef GL_ES -precision mediump float; +precision highp float; #endif uniform mat4 MVPMatrix; @@ -53,7 +53,7 @@ void main() #elif defined(FRAGMENT) #ifdef GL_ES -precision mediump float; +precision highp float; #endif uniform vec2 texSize; From 3d4dcadc47668395ec3c4511a1e02c3f22d9f8e0 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 23 Dec 2023 20:26:33 +0100 Subject: [PATCH 109/320] (Android) Disabled command line option parsing as there are no such options on Android --- es-app/src/main.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 4ebe44269..f9afa8715 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -563,6 +563,7 @@ int main(int argc, char* argv[]) outputToConsole(); #endif +#if !defined(__ANDROID__) { std::vector arguments; for (int i {0}; i < argc; ++i) @@ -578,6 +579,7 @@ int main(int argc, char* argv[]) } #endif } +#endif if (!Settings::getInstance()->getBool("DebugFlag") && Settings::getInstance()->getBool("DebugMode")) { From c42c009c593c97db8716c5d7fa4f6e90d832b85f Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 23 Dec 2023 20:53:30 +0100 Subject: [PATCH 110/320] (Android) Added device info as debug log output on application startup --- es-app/src/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index f9afa8715..5af07c970 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -858,6 +858,7 @@ int main(int argc, char* argv[]) #if defined(__ANDROID__) LOG(LogDebug) << "Android API level: " << SDL_GetAndroidSDKVersion(); + Utils::Platform::Android::printDeviceInfo(); int storageState {SDL_AndroidGetExternalStorageState()}; if (storageState == 0) { LOG(LogError) << "Android external storage state: " << SDL_GetError(); From e1322d711b8305cb5e4d9a34cda566bc47b4532e Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 23 Dec 2023 21:14:59 +0100 Subject: [PATCH 111/320] (Android) Added support for running custom event scripts --- es-core/src/Scripting.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/es-core/src/Scripting.cpp b/es-core/src/Scripting.cpp index cf575a62f..7eff423d9 100644 --- a/es-core/src/Scripting.cpp +++ b/es-core/src/Scripting.cpp @@ -89,7 +89,11 @@ namespace Scripting .append(arg4) .append(arg4Quotation); LOG(LogDebug) << "Executing: " << script; +#if defined(__ANDROID__) + Utils::Platform::runSystemCommand("sh " + script); +#else Utils::Platform::runSystemCommand(script); +#endif } } } From e3387c90166433baed0a99b862e35d91692c4b49 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 23 Dec 2023 23:03:40 +0100 Subject: [PATCH 112/320] Changed the game launch state to be kept in Window instead of ViewController --- es-app/src/FileData.cpp | 10 ++++++++-- es-app/src/views/ViewController.cpp | 16 ++++++++++------ es-app/src/views/ViewController.h | 2 -- es-core/src/Window.h | 8 +++++--- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/es-app/src/FileData.cpp b/es-app/src/FileData.cpp index f46b82d89..9ca0c7f7c 100644 --- a/es-app/src/FileData.cpp +++ b/es-app/src/FileData.cpp @@ -915,6 +915,12 @@ void FileData::launchGame() const std::string fileName {baseName + Utils::FileSystem::getExtension(romPath)}; const std::string esPath {Utils::FileSystem::getExePath()}; + +#if defined(__ANDROID__) + // On Android we always run in the background, although the logic is a bit different + // as we don't need to wake up the application manually. + bool runInBackground {true}; +#else bool runInBackground {false}; // In addition to the global RunInBackground setting it's possible to define this flag @@ -933,6 +939,7 @@ void FileData::launchGame() // The global setting always applies. if (Settings::getInstance()->getBool("RunInBackground")) runInBackground = true; +#endif #if !defined(_WIN64) // Whether to parse .desktop files on Unix or open apps or alias files on macOS. @@ -1893,8 +1900,7 @@ returnValue = Utils::Platform::launchGameUnix(command, startDirectory, runInBack getSourceFileData()->getSystem()->getFullName()); } else { - std::vector& gameEndParams { - ViewController::getInstance()->getGameEndEventParams()}; + std::vector& gameEndParams {window->getGameEndEventParams()}; gameEndParams.emplace_back("game-end"); gameEndParams.emplace_back(romPath); gameEndParams.emplace_back(getSourceFileData()->metadata.get("name")); diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 6d89232a7..510d6cc71 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -1109,7 +1109,10 @@ bool ViewController::input(InputConfig* config, Input input) // If we're in this state and then register some input, it means that the user is back in ES-DE. // Therefore unset the game launch flag and update all the GUI components. This will re-enable // the video player and scrolling of game names and game descriptions as well as letting the - // screensaver start on schedule. + // screensaver start on schedule. On Android the onResume() method will call the native onResume + // function which will perform the same steps as shown below (on Android we always keep running + // when launching games). +#if !defined(__ANDROID__) if (mWindow->getGameLaunchedState()) { mWindow->setAllowTextScrolling(true); mWindow->setAllowFileAnimation(true); @@ -1119,13 +1122,14 @@ bool ViewController::input(InputConfig* config, Input input) if (config->isMappedTo("a", input) && input.value != 0) return true; // Trigger the game-end event. - if (mGameEndEventParams.size() == 5) { - Scripting::fireEvent(mGameEndEventParams[0], mGameEndEventParams[1], - mGameEndEventParams[2], mGameEndEventParams[3], - mGameEndEventParams[4]); - mGameEndEventParams.clear(); + auto& eventParams = mWindow->getGameEndEventParams(); + if (eventParams.size() == 5) { + Scripting::fireEvent(eventParams[0], eventParams[1], eventParams[2], eventParams[3], + eventParams[4]); + eventParams.clear(); } } +#endif // Open the main menu. if (!(UIModeController::getInstance()->isUIModeKid() && diff --git a/es-app/src/views/ViewController.h b/es-app/src/views/ViewController.h index 6d99cf5b4..f2a5c7107 100644 --- a/es-app/src/views/ViewController.h +++ b/es-app/src/views/ViewController.h @@ -93,7 +93,6 @@ public: mWindow->setBlockInput(true); }; const bool getGameLaunchTriggered() { return (mGameToLaunch != nullptr); } - std::vector& getGameEndEventParams() { return mGameEndEventParams; } bool input(InputConfig* config, Input input) override; void update(int deltaTime) override; @@ -184,7 +183,6 @@ private: std::shared_ptr mSystemListView; ViewTransitionAnimation mLastTransitionAnim; - std::vector mGameEndEventParams; FileData* mGameToLaunch; State mState; diff --git a/es-core/src/Window.h b/es-core/src/Window.h index 8ea2f4fbd..ebfa3b4a5 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -156,6 +156,7 @@ public: void invalidateCachedBackground(); bool isInvalidatingCachedBackground() { return mInvalidateCacheTimer > 0; } + std::vector& getGameEndEventParams() { return mGameEndEventParams; } bool getGameLaunchedState() { return mGameLaunchedState; } void setAllowTextScrolling(bool value) { mAllowTextScrolling = value; } bool getAllowTextScrolling() { return mAllowTextScrolling; } @@ -207,6 +208,7 @@ private: std::queue> mInfoPopupQueue; std::shared_ptr mPostprocessedBackground; + std::vector mGameEndEventParams; std::string mListScrollText; std::shared_ptr mListScrollFont; float mListScrollOpacity; @@ -223,9 +225,9 @@ private: bool mRenderMediaViewer; bool mRenderLaunchScreen; bool mRenderPDFViewer; - bool mGameLaunchedState; - bool mAllowTextScrolling; - bool mAllowFileAnimation; + std::atomic mGameLaunchedState; + std::atomic mAllowTextScrolling; + std::atomic mAllowFileAnimation; bool mCachedBackground; bool mInvalidatedCachedBackground; bool mInitiateCacheTimer; From 193f98cc1e03a3ac13bd261f090beec641920d36 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 23 Dec 2023 23:14:25 +0100 Subject: [PATCH 113/320] (Android) Disabled the RunInBackground setting and corresponding menu option --- es-app/src/guis/GuiMenu.cpp | 2 ++ es-core/src/Settings.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 93e12ac42..b10551a9f 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1472,6 +1472,7 @@ void GuiMenu::openOtherOptions() }); #endif +#if !defined(__ANDROID__) // Run ES in the background when a game has been launched. auto runInBackground = std::make_shared(); runInBackground->setState(Settings::getInstance()->getBool("RunInBackground")); @@ -1482,6 +1483,7 @@ void GuiMenu::openOtherOptions() s->setNeedsSaving(); } }); +#endif #if defined(VIDEO_HW_DECODING) // Whether to enable hardware decoding for the FFmpeg video player. diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index f5b69bafa..9fa11edd0 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -275,7 +275,9 @@ void Settings::setDefaults() #if defined(_WIN64) mBoolMap["HideTaskbar"] = {false, false}; #endif +#if !defined(__ANDROID__) mBoolMap["RunInBackground"] = {false, false}; +#endif #if defined(VIDEO_HW_DECODING) mBoolMap["VideoHardwareDecoding"] = {false, false}; #endif From c5caab290eb8cb7539644bd9b1c05b927dc3cc38 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 23 Dec 2023 23:28:22 +0100 Subject: [PATCH 114/320] (Android) Disabled the quit menu --- es-app/src/guis/GuiMenu.cpp | 4 ++-- es-core/src/Settings.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index b10551a9f..d110f7d83 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -72,7 +72,7 @@ GuiMenu::GuiMenu() if (!Settings::getInstance()->getBool("ForceKiosk") && Settings::getInstance()->getString("UIMode") != "kiosk") { -#if defined(__APPLE__) +#if defined(__APPLE__) || defined(__ANDROID__) addEntry("QUIT ES-DE", mMenuColorPrimary, false, [this] { openQuitMenu(); }); #else if (Settings::getInstance()->getBool("ShowQuitMenu")) @@ -1669,7 +1669,7 @@ void GuiMenu::openOtherOptions() // macOS requires root privileges to reboot and power off so it doesn't make much // sense to enable this setting and menu entry for that operating system. -#if !defined(__APPLE__) +#if !defined(__APPLE__) && !defined(__ANDROID__) // Whether to show the quit menu with the options to reboot and shutdown the computer. auto showQuitMenu = std::make_shared(); showQuitMenu->setState(Settings::getInstance()->getBool("ShowQuitMenu")); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 9fa11edd0..081a4b65d 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -300,7 +300,7 @@ void Settings::setDefaults() mBoolMap["EnableMenuKidMode"] = {false, false}; // macOS requires root privileges to reboot and power off so it doesn't make much // sense to enable this setting and menu entry for that operating system. -#if !defined(__APPLE__) +#if !defined(__APPLE__) && !defined(__ANDROID__) mBoolMap["ShowQuitMenu"] = {false, false}; #endif From 458560bcd9254307faaf813ddb00320bdfd19d4b Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 23 Dec 2023 23:41:51 +0100 Subject: [PATCH 115/320] (Android) Changed the theme directory parsing order --- es-core/src/ThemeData.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 589063468..22b3eea60 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -728,9 +728,9 @@ void ThemeData::populateThemes() #endif #if defined(__ANDROID__) - const std::vector themePaths { - Utils::FileSystem::getProgramDataPath() + "/themes", userThemeDirectory, - Utils::FileSystem::getAppDataDirectory() + "/themes"}; + const std::vector themePaths {Utils::FileSystem::getProgramDataPath() + "/themes", + Utils::FileSystem::getAppDataDirectory() + "/themes", + userThemeDirectory}; #elif defined(__APPLE__) const std::vector themePaths { Utils::FileSystem::getExePath() + "/themes", From 10be1e110443d94cbe1ac563c8335bdbe04cee5b Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 24 Dec 2023 00:05:39 +0100 Subject: [PATCH 116/320] (Android) Disabled the system volume slider in the Sound Settings menu --- es-app/src/guis/GuiMenu.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index d110f7d83..aaff8dcde 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1008,9 +1008,9 @@ void GuiMenu::openSoundOptions() { auto s = new GuiSettings("SOUND SETTINGS"); -// TODO: Hide the volume slider on macOS and BSD Unix until the volume control logic has been -// implemented for these operating systems. -#if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) +// TODO: Implement volume slider logic for macOS and Android. +#if !defined(__APPLE__) && !defined(__ANDROID__) && !defined(__FreeBSD__) && \ + !defined(__OpenBSD__) && !defined(__NetBSD__) // System volume. // The reason to create the VolumeControl object every time instead of making it a singleton // is that this is the easiest way to detect new default audio devices or changes to the From 7b6e16b79d992335c615a26046879e64c6a73673 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 24 Dec 2023 00:06:43 +0100 Subject: [PATCH 117/320] Changed a code comment --- es-app/src/guis/GuiMenu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index aaff8dcde..a4ced34a3 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1008,7 +1008,7 @@ void GuiMenu::openSoundOptions() { auto s = new GuiSettings("SOUND SETTINGS"); -// TODO: Implement volume slider logic for macOS and Android. +// TODO: Implement system volume support for macOS and Android. #if !defined(__APPLE__) && !defined(__ANDROID__) && !defined(__FreeBSD__) && \ !defined(__OpenBSD__) && !defined(__NetBSD__) // System volume. From 5ffd06736ad84708fd51dd44fffa71bb15ea4c9f Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 24 Dec 2023 00:30:24 +0100 Subject: [PATCH 118/320] (Android) Fixed an issue where the Alt+F4 keyboard quit shortcut wouldn't work --- es-core/src/InputManager.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 7ae99d955..dd0555381 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -453,15 +453,25 @@ bool InputManager::parseEvent(const SDL_Event& event) // There is no need to handle the OS-default quit shortcut (Alt + F4 on Windows and // Linux and Command + Q on macOS) as that's taken care of by the window manager. + // The exception is Android as there are are no default quit shortcuts on this OS. std::string quitShortcut {Settings::getInstance()->getString("KeyboardQuitShortcut")}; #if defined(__APPLE__) if (quitShortcut != "CmdQ") { +#elif defined(__ANDROID__) + if (true) { #else if (quitShortcut != "AltF4") { #endif bool quitES {false}; +#if defined(__ANDROID__) + if (quitShortcut == "AltF4" && event.key.keysym.sym == SDLK_F4 && + (event.key.keysym.mod & KMOD_LALT)) + quitES = true; + else if (quitShortcut == "F4" && event.key.keysym.sym == SDLK_F4 && +#else if (quitShortcut == "F4" && event.key.keysym.sym == SDLK_F4 && - !(event.key.keysym.mod & KMOD_LALT)) +#endif + !(event.key.keysym.mod & KMOD_LALT)) quitES = true; else if (quitShortcut == "CtrlQ" && event.key.keysym.sym == SDLK_q && event.key.keysym.mod & KMOD_CTRL) From b8638613990a0d1399450e6ca558d3bf62a07b9b Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 24 Dec 2023 00:37:42 +0100 Subject: [PATCH 119/320] (Android) Disabled the DisableComposition setting and corresponding menu option --- es-app/src/guis/GuiMenu.cpp | 2 +- es-core/src/Settings.cpp | 2 +- es-core/src/renderers/Renderer.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index a4ced34a3..5bddf78dd 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1595,7 +1595,7 @@ void GuiMenu::openOtherOptions() } }); -#if defined(__unix__) +#if defined(__unix__) && !defined(__ANDROID__) // Whether to disable desktop composition. auto disableComposition = std::make_shared(); disableComposition->setState(Settings::getInstance()->getBool("DisableComposition")); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 081a4b65d..09f415db4 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -292,7 +292,7 @@ void Settings::setDefaults() mBoolMap["CustomEventScripts"] = {false, false}; mBoolMap["ParseGamelistOnly"] = {false, false}; mBoolMap["MAMENameStripExtraInfo"] = {true, true}; -#if defined(__unix__) +#if defined(__unix__) && !defined(__ANDROID__) mBoolMap["DisableComposition"] = {false, false}; #endif mBoolMap["DebugMode"] = {false, false}; diff --git a/es-core/src/renderers/Renderer.cpp b/es-core/src/renderers/Renderer.cpp index c0b3c9bc0..33624d07c 100644 --- a/es-core/src/renderers/Renderer.cpp +++ b/es-core/src/renderers/Renderer.cpp @@ -172,7 +172,7 @@ bool Renderer::createWindow() // games or when manually switching windows using the task switcher). SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, "0"); -#if defined(__unix__) +#if defined(__unix__) && !defined(__ANDROID__) // Disabling desktop composition can lead to better framerates and a more fluid user // interface, but with some drivers it can cause strange behaviors when returning to // the desktop. From 0d845ba4af04a20bff260ec76b6fae5b970ed599 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 24 Dec 2023 00:41:28 +0100 Subject: [PATCH 120/320] Documentation update --- CHANGELOG.md | 4 ++++ INSTALL-DEV.md | 2 ++ USERGUIDE-DEV.md | 13 +++++++++---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12c26f596..4928ad587 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,10 +12,13 @@ * Renamed the application data directory from .emulationstation to ES-DE * Split the es_find_rules.xml and es_systems.xml files for Linux and BSD Unix into separate directories * Added support for defining font sizes from the theme configuration and selecting these from the UI settings menu +* Added the theme font sizes count to the theme downloader interface +* Added support for medium and large font sizes to the Slate and Modern themes * Added support for .webp, .svg and unanimated .gif files to the slideshow screensaver when using a custom image directory * Changed the default slideshow custom image directory from slideshow/custom_images to screensavers/custom_slideshow * Changed the custom slideshow image directory setting from ScreensaverSlideshowImageDir to ScreensaverSlideshowCustomDir * Added Mednafen standalone as an alternative emulator for the gb, gba and gbc systems +* (Linux) Added support for the AppImage release of Vita3K * Added the .zso file extension to the ps2 system * Added the .zar file extension to the xbox360 system on Linux and Windows * Added the .pk3 and .ipk3 file extensions to the doom system on Linux, Unix and Windows @@ -27,6 +30,7 @@ * Added a "renderDuringTransitions" property to the image element * Added support for more extreme vertical resolutions than previously allowed * Added support for the 19.5:9, 20:9 and 1:1 display aspect ratios +* The SDL error message is now printed to the log if a controller could not be added * Added workarounds for some mobile GPUs which do not support all OpenGL operations when using the BGRA pixel format ### Bug fixes diff --git a/INSTALL-DEV.md b/INSTALL-DEV.md index 376fddb8e..81f91cfd7 100644 --- a/INSTALL-DEV.md +++ b/INSTALL-DEV.md @@ -1010,6 +1010,8 @@ The input configuration is described in the [User guide](USERGUIDE-DEV.md#input- ## Command line options +_There are no command line options available on Android as this operating system works completely differently than all other supported platforms._ + You can use **--help** or **-h** to view the list of command line options, as shown here. ``` diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index 52447e6ec..ed12a70ba 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -688,6 +688,7 @@ The following emulators are supported in AppImage format when using the bundled | ps2 | PCSX2 | pcsx2*.AppImage | | ps2 | Play! | Play!*.AppImage | | ps3 | RPCS3 | rpcs3*.AppImage | +| psvita | Vita3K | Vita3K*.AppImage | | psx | DuckStation | DuckStation*.AppImage | | snes | Snes9x | Snes9x*.AppImage | | switch | Yuzu | yuzu*.AppImage | @@ -3121,6 +3122,10 @@ Themes optionally support variants which are a type of theme profiles defined by If the theme author has included multiple color schemes, then these can be selected between using this menu option. +**Theme font size** + +If the theme author has included support for multiple font/text sizes, then these can be selected between using this menu option. Possible choices are _medium, large, small, extra large_ and _extra small_. What layout changes these font size options actually make is completely up to the theme author. + **Theme aspect ratio** Themes could optionally be optimized for different screen aspect ratios. ES-DE supports 16:9, 16:10, 3:2, 4:3, 5:4, 21:9 and 32:9 in both horizontal and vertical orientation, but it's completely up to the theme author which of these are actually supported by the theme. It's normally best to leave this setting at _Automatic_ in which case ES-DE will automatically select the aspect ratio that most closely matches the screen resolution. The _Automatic_ option is however only available if the theme supports at least two aspect ratios. @@ -3468,7 +3473,7 @@ For platforms and package formats where the previous setting above is available With this setting enabled, the taskbar will be hidden when launching ES-DE, and it will be restored when the application exits. This can make for a more seamless experience as the taskbar could otherwise flash by briefly when launching and returning from games. -**Run in background (while game is launched)** +**Run in background (while game is launched)** _(All operating systems except Android)_ Enabling this option makes ES-DE continue to run while a game is launched. This is normally not recommended as it leads to a slightly strange application behavior and it also removes the ability to capture return codes and log output from the emulators. Generally this option should only be enabled if there are issues with launching games while suspending ES-DE. Note however that some systems like Valve Steam will always keep ES-DE running in the background because they require it for technical reasons (i.e. those systems will override this menu option). @@ -3516,7 +3521,7 @@ Displays the framerate and VRAM statistics as an overlay. This can be useful to Enabling or disabling the menu when the UI mode is set to _Kid_. Mostly intended for testing purposes as it's not recommended to enable the menu in this restricted mode. -**Show quit menu (reboot and power off entries)** _(All operating systems except macOS)_ +**Show quit menu (reboot and power off entries)** _(All operating systems except macOS and Android)_ With this setting enabled, there is a Quit menu shown as the last entry on the main menu which provides options to quit ES-DE, to reboot the computer or to power off the computer. With this setting disabled, there will simply be an entry to quit the application instead of the complete quit menu. @@ -3546,11 +3551,11 @@ If the menu is enabled, these are its entries: If the option _When to save game metadata_ has been set to _On exit_, the gamelist.xml files will be updated at this point. This applies also if the Quit menu is disabled and replaced by the _Quit ES-DE_ entry. -**Reboot system** _(All operating systems except macOS)_ +**Reboot system** _(All operating systems except macOS and Android)_ Self explanatory. -**Power off system** _(All operating systems except macOS)_ +**Power off system** _(All operating systems except macOS and Android)_ Self explanatory. From cfb71c378f38a0e8dbc124c0bf69cf07da6fd578 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 24 Dec 2023 11:48:14 +0100 Subject: [PATCH 121/320] The HTTP error code will now be shown on scraper errors instead of the 'File is smaller than 350 bytes' message --- es-core/src/HttpReq.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/es-core/src/HttpReq.cpp b/es-core/src/HttpReq.cpp index bd82b7263..9b6fb043e 100644 --- a/es-core/src/HttpReq.cpp +++ b/es-core/src/HttpReq.cpp @@ -194,6 +194,14 @@ HttpReq::HttpReq(const std::string& url, bool scraperRequest) return; } + // Fail on HTTP status codes >= 400. + err = curl_easy_setopt(mHandle, CURLOPT_FAILONERROR, 1L); + if (err != CURLE_OK) { + mStatus = REQ_IO_ERROR; + onError(curl_easy_strerror(err)); + return; + } + // Add the handle to our multi. CURLMcode merr {curl_multi_add_handle(sMultiHandle, mHandle)}; if (merr != CURLM_OK) { @@ -250,6 +258,12 @@ HttpReq::Status HttpReq::status() req->mStatus = REQ_FAILED_VERIFICATION; req->onError(curl_easy_strerror(msg->data.result)); } + else if (msg->data.result == CURLE_HTTP_RETURNED_ERROR) { + req->mStatus = REQ_BAD_STATUS_CODE; + long responseCode; + curl_easy_getinfo(msg->easy_handle, CURLINFO_RESPONSE_CODE, &responseCode); + 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)); From 80a462abb32a1bf7de154a6abe01db8d517fac33 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 25 Dec 2023 12:06:31 +0100 Subject: [PATCH 122/320] Fixed an issue where attempting to create the system directories with invalid entries in es_systems.xml could crash the application --- es-app/src/SystemData.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index c6e3cebf6..2b52757b4 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -1122,6 +1122,18 @@ bool SystemData::createSystemDirectories() return (std::isspace(character) || character == ','); }) != platform.cend()}; + if (name.empty()) { + LOG(LogError) + << "A system in the es_systems.xml file has no name defined, skipping entry"; + continue; + } + else if (fullname.empty() || path.empty() || extensions.empty() || commands.empty()) { + LOG(LogError) << "System \"" << name + << "\" is missing the fullname, path, " + "extension, or command tag, skipping entry"; + continue; + } + themeFolder = system.child("theme").text().as_string(name.c_str()); // Check that the %ROMPATH% variable is actually used for the path element. @@ -1203,7 +1215,10 @@ bool SystemData::createSystemDirectories() } systemInfoFile << "Platform" << (multiplePlatforms ? "s" : "") << " (for scraping):" << std::endl; - systemInfoFile << platform << std::endl << std::endl; + if (platform.empty()) + systemInfoFile << "None defined" << std::endl << std::endl; + else + systemInfoFile << platform << std::endl << std::endl; systemInfoFile << "Theme folder:" << std::endl; systemInfoFile << themeFolder << std::endl; systemInfoFile.close(); From 476230606bda372d3aafdbd2b1d4dc473206ed3f Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 25 Dec 2023 13:12:14 +0100 Subject: [PATCH 123/320] Placeholder entries in es_systems.xml are now skipped by default when creating the system directories and systemsinfo.txt files Also added a CreatePlaceholderSystemDirectories option that can be manually set in es_settings.xml to still create placeholder directories --- es-app/src/SystemData.cpp | 13 +++++++++++++ es-core/src/Settings.cpp | 1 + 2 files changed, 14 insertions(+) diff --git a/es-app/src/SystemData.cpp b/es-app/src/SystemData.cpp index 2b52757b4..81c340a17 100644 --- a/es-app/src/SystemData.cpp +++ b/es-app/src/SystemData.cpp @@ -1134,6 +1134,19 @@ bool SystemData::createSystemDirectories() continue; } + if (commands.size() == 1 && + Utils::String::toLower(commands.front()).find("placeholder") != std::string::npos) { + if (Settings::getInstance()->getBool("CreatePlaceholderSystemDirectories")) { + LOG(LogInfo) << "System \"" << name + << "\" is a placeholder but creating directory anyway as " + "CreatePlaceholderSystemDirectories is set to true"; + } + else { + LOG(LogInfo) << "System \"" << name << "\" is a placeholder, skipping entry"; + continue; + } + } + themeFolder = system.child("theme").text().as_string(name.c_str()); // Check that the %ROMPATH% variable is actually used for the path element. diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 09f415db4..43b6d180c 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -331,6 +331,7 @@ void Settings::setDefaults() mBoolMap["DebugSkipMissingThemeFiles"] = {false, false}; mBoolMap["DebugSkipMissingThemeFilesCustomCollections"] = {true, true}; mBoolMap["LegacyGamelistFileLocation"] = {false, false}; + mBoolMap["CreatePlaceholderSystemDirectories"] = {false, false}; mStringMap["OpenGLVersion"] = {"", ""}; #if !defined(__ANDROID__) mStringMap["ROMDirectory"] = {"", ""}; From 2687db1e17d3d8fe4539da7f584b1d2e6681da64 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 25 Dec 2023 13:16:44 +0100 Subject: [PATCH 124/320] Documentation update --- CHANGELOG.md | 6 +++++- INSTALL-DEV.md | 13 ++++++++++++- USERGUIDE-DEV.md | 2 +- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4928ad587..7d401b9e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ * Added support for .webp, .svg and unanimated .gif files to the slideshow screensaver when using a custom image directory * Changed the default slideshow custom image directory from slideshow/custom_images to screensavers/custom_slideshow * Changed the custom slideshow image directory setting from ScreensaverSlideshowImageDir to ScreensaverSlideshowCustomDir +* The HTTP error code will now be shown on scraper errors instead of the "File is smaller than 350 bytes" message * Added Mednafen standalone as an alternative emulator for the gb, gba and gbc systems * (Linux) Added support for the AppImage release of Vita3K * Added the .zso file extension to the ps2 system @@ -28,13 +29,16 @@ * (Windows) Added the %RUNINBACKGROUND% variable for the epic system * (Windows) Removed support for building the application using MinGW * Added a "renderDuringTransitions" property to the image element +* Placeholder entries in es_systems.xml are now skipped by default when creating the system directories and systemsinfo.txt files +* Added a CreatePlaceholderSystemDirectories option that can be manually set in es_settings.xml to still create placeholder directories * Added support for more extreme vertical resolutions than previously allowed * Added support for the 19.5:9, 20:9 and 1:1 display aspect ratios -* The SDL error message is now printed to the log if a controller could not be added +* The relevant SDL error message is now printed to the log if a controller could not be added * Added workarounds for some mobile GPUs which do not support all OpenGL operations when using the BGRA pixel format ### Bug fixes +* Attempting to create the system directories with invalid entries in es_systems.xml could crash the application * Stationary image elements could sometimes glitch out during carousel navigation * Font textures were sometimes updated with empty glyhps which generated OpenGL errors on some mobile GPUs diff --git a/INSTALL-DEV.md b/INSTALL-DEV.md index 81f91cfd7..a98a978bc 100644 --- a/INSTALL-DEV.md +++ b/INSTALL-DEV.md @@ -1048,7 +1048,7 @@ Setting --resolution to a lower or higher value than the display resolution will The --no-update-check option only disabled the application updater for the current startup. To permanently disable this functionality use the _Check for application updates_ option in the _Other settings_ menu. The command line option is primarily intended for the unlikely event that the application updater breaks the application and makes it impossible to start. -Running with the --create-system-dirs option will generate all the game system directories in the ROMs folder. This is equivalent to starting ES-DE with no game ROMs present and pressing the _Create directories_ button. Detailed output for the directory creation will be available in es_log.txt and the application will quit immediately after the directories have been created. +Running with the --create-system-dirs option will generate all the game system directories in the ROMs folder. This is equivalent to starting ES-DE with no game ROMs present and pressing the _Create directories_ button. Detailed output for the directory creation will be available in es_log.txt and the application will quit immediately after the directories have been created. By default placeholder entries will be skipped, if you want to still create these directories then set the CreatePlaceholderSystemDirectories option to true in es_settings.xml. For the following options, the es_settings.xml file is immediately updated/saved when passing the parameter: ``` @@ -1069,6 +1069,10 @@ The --ignore-gamelist option is only active during the program session and is no There are some settings which are not configurable via the GUI as modifying these should normally not be required. To still change these, edit the es_settings.xml file directly. +**CreatePlaceholderSystemDirectories** + +If a system in es_systems.xml has a single command tag with the text _PLACEHOLDER_ anywhere in the tag (regardless of letter case) then its directory and _systeminfo.txt_ file will not get created when running with the --create-system-dirs command line option, or when using the _Create/update system directories_ entry in the _Utilities_ menu or when pressing the _Create directories_ button in the no-games startup dialog. However setting this option to true will override the behavior so the placeholder directories will still be created. + **DebugSkipInputLogging** Enabling this will skip all input event logging (button and key presses). Default value is false. @@ -1500,6 +1504,13 @@ Below is an overview of the file layout with various examples. For the command t and %ESCAPESPECIALS% escapes the characters &()^=;, that cmd.exe can't otherwise handle. --> %HIDEWINDOW% %ESCAPESPECIALS% %RUNINBACKGROUND% cmd.exe /C %ROM% + + PLACEHOLDER %ROM% + +# UTF8-CPP: UTF-8 with C++ in a Portable Way + + + +## Introduction + +C++ developers still miss an easy and portable way of handling Unicode encoded strings. The original C++ standard (known as C++98 or C++03) is Unicode agnostic. Some progress has been made in the later editions of the standard, but it is still hard to work with Unicode using only the standard facilities. + +I came up with a small, C++98 compatible generic library in order to handle UTF-8 encoded strings. For anybody used to work with STL algorithms and iterators, it should be easy and natural to use. The code is freely available for any purpose - check out the [license](./LICENSE). The library has been used a lot since the first release in 2006 both in commercial and open-source projects and proved to be stable and useful. + +## Table of Contents + +- [UTF8-CPP: UTF-8 with C++ in a Portable Way](#utf8-cpp-utf-8-with-c-in-a-portable-way) + * [Introduction](#introduction) + * [Installation](#installation) + * [Examples of use](#examples-of-use) + + [Introductory Sample](#introductory-sample) + + [Checking if a file contains valid UTF-8 text](#checking-if-a-file-contains-valid-utf-8-text) + + [Ensure that a string contains valid UTF-8 text](#ensure-that-a-string-contains-valid-utf-8-text) + * [Points of interest](#points-of-interest) + - [Design goals and decisions](#design-goals-and-decisions) + - [Alternatives](#alternatives) + * [Reference](#reference) + + [Functions From utf8 Namespace](#functions-from-utf8-namespace) + - [utf8::append](#utf8append) + * [octet_iterator append(utfchar32_t cp, octet_iterator result)](#octet_iterator-appendutfchar32_t-cp-octet_iterator-result) + * [void append(utfchar32_t cp, std::string& s);](#void-appendutfchar32_t-cp-stdstring-s) + - [utf8::append16](#utf8append16) + * [word_iterator append16(utfchar32_t cp, word_iterator result)](#word_iterator-append16utfchar32_t-cp-word_iterator-result) + * [void append(utfchar32_t cp, std::u16string& s)](#void-appendutfchar32_t-cp-stdu16string-s) + - [utf8::next](#utf8next) + - [utf8::next16](#utf8next16) + - [utf8::peek_next](#utf8peek_next) + - [utf8::prior](#utf8prior) + - [utf8::advance](#utf8advance) + - [utf8::distance](#utf8distance) + - [utf8::utf16to8](#utf8utf16to8) + * [octet_iterator utf16to8 (u16bit_iterator start, u16bit_iterator end, octet_iterator result)](#octet_iterator-utf16to8-u16bit_iterator-start-u16bit_iterator-end-octet_iterator-result) + * [std::string utf16to8(const std::u16string& s)](#stdstring-utf16to8const-stdu16string-s) + * [std::string utf16to8(std::u16string_view s)](#stdstring-utf16to8stdu16string_view-s) + - [utf8::utf16tou8](#utf8utf16tou8) + * [std::u8string utf16tou8(const std::u16string& s)](#stdu8string-utf16tou8const-stdu16string-s) + * [std::u8string utf16tou8(const std::u16string_view& s)](#stdu8string-utf16tou8const-stdu16string_view-s) + - [utf8::utf8to16](#utf8utf8to16) + * [u16bit_iterator utf8to16 (octet_iterator start, octet_iterator end, u16bit_iterator result)](#u16bit_iterator-utf8to16-octet_iterator-start-octet_iterator-end-u16bit_iterator-result) + * [std::u16string utf8to16(const std::string& s)](#stdu16string-utf8to16const-stdstring-s) + * [std::u16string utf8to16(std::string_view s)](#stdu16string-utf8to16stdstring_view-s) + * [std::u16string utf8to16(std::u8string& s)](#stdu16string-utf8to16stdu8string-s) + * [std::u16string utf8to16(std::u8string_view& s)](#stdu16string-utf8to16stdu8string_view-s) + - [utf8::utf32to8](#utf8utf32to8) + * [octet_iterator utf32to8 (u32bit_iterator start, u32bit_iterator end, octet_iterator result)](#octet_iterator-utf32to8-u32bit_iterator-start-u32bit_iterator-end-octet_iterator-result) + * [std::string utf32to8(const std::u32string& s)](#stdstring-utf32to8const-stdu32string-s) + * [std::u8string utf32to8(const std::u32string& s)](#stdu8string-utf32to8const-stdu32string-s) + * [std::u8string utf32to8(const std::u32string_view& s)](#stdu8string-utf32to8const-stdu32string_view-s) + * [std::string utf32to8(const std::u32string& s)](#stdstring-utf32to8const-stdu32string-s-1) + * [std::string utf32to8(std::u32string_view s)](#stdstring-utf32to8stdu32string_view-s) + - [utf8::utf8to32](#utf8utf8to32) + * [u32bit_iterator utf8to32 (octet_iterator start, octet_iterator end, u32bit_iterator result)](#u32bit_iterator-utf8to32-octet_iterator-start-octet_iterator-end-u32bit_iterator-result) + * [std::u32string utf8to32(const std::u8string& s)](#stdu32string-utf8to32const-stdu8string-s) + * [std::u32string utf8to32(const std::u8string_view& s)](#stdu32string-utf8to32const-stdu8string_view-s) + * [std::u32string utf8to32(const std::string& s)](#stdu32string-utf8to32const-stdstring-s) + * [std::u32string utf8to32(std::string_view s)](#stdu32string-utf8to32stdstring_view-s) + - [utf8::find_invalid](#utf8find_invalid) + * [octet_iterator find_invalid(octet_iterator start, octet_iterator end)](#octet_iterator-find_invalidoctet_iterator-start-octet_iterator-end) + * [const char* find_invalid(const char* str)](#const-char-find_invalidconst-char-str) + * [std::size_t find_invalid(const std::string& s)](#stdsize_t-find_invalidconst-stdstring-s) + * [std::size_t find_invalid(std::string_view s)](#stdsize_t-find_invalidstdstring_view-s) + - [utf8::is_valid](#utf8is_valid) + * [bool is_valid(octet_iterator start, octet_iterator end)](#bool-is_validoctet_iterator-start-octet_iterator-end) + * [bool is_valid(const char* str)](#bool-is_validconst-char-str) + * [bool is_valid(const std::string& s)](#bool-is_validconst-stdstring-s) + * [bool is_valid(std::string_view s)](#bool-is_validstdstring_view-s) + - [utf8::replace_invalid](#utf8replace_invalid) + * [output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, utfchar32_t replacement)](#output_iterator-replace_invalidoctet_iterator-start-octet_iterator-end-output_iterator-out-utfchar32_t-replacement) + * [std::string replace_invalid(const std::string& s, utfchar32_t replacement)](#stdstring-replace_invalidconst-stdstring-s-utfchar32_t-replacement) + * [std::string replace_invalid(std::string_view s, char32_t replacement)](#stdstring-replace_invalidstdstring_view-s-char32_t-replacement) + - [utf8::starts_with_bom](#utf8starts_with_bom) + * [bool starts_with_bom (octet_iterator it, octet_iterator end)](#bool-starts_with_bom-octet_iterator-it-octet_iterator-end) + * [bool starts_with_bom(const std::string& s)](#bool-starts_with_bomconst-stdstring-s) + * [bool starts_with_bom(std::string_view s)](#bool-starts_with_bomstdstring_view-s) + + [Types From utf8 Namespace](#types-from-utf8-namespace) + - [utf8::exception](#utf8exception) + - [utf8::invalid_code_point](#utf8invalid_code_point) + - [utf8::invalid_utf8](#utf8invalid_utf8) + - [utf8::invalid_utf16](#utf8invalid_utf16) + - [utf8::not_enough_room](#utf8not_enough_room) + - [utf8::iterator](#utf8iterator) + * [Member functions](#member-functions) + + [Functions From utf8::unchecked Namespace](#functions-from-utf8unchecked-namespace) + - [utf8::unchecked::append](#utf8uncheckedappend) + - [utf8::unchecked::append16](#utf8uncheckedappend16) + - [utf8::unchecked::next](#utf8uncheckednext) + - [utf8::next16](#utf8next16-1) + - [utf8::unchecked::peek_next](#utf8uncheckedpeek_next) + - [utf8::unchecked::prior](#utf8uncheckedprior) + - [utf8::unchecked::advance](#utf8uncheckedadvance) + - [utf8::unchecked::distance](#utf8uncheckeddistance) + - [utf8::unchecked::utf16to8](#utf8uncheckedutf16to8) + - [utf8::unchecked::utf8to16](#utf8uncheckedutf8to16) + - [utf8::unchecked::utf32to8](#utf8uncheckedutf32to8) + - [utf8::unchecked::utf8to32](#utf8uncheckedutf8to32) + - [utf8::unchecked::replace_invalid](#utf8uncheckedreplace_invalid) + + [Types From utf8::unchecked Namespace](#types-from-utf8unchecked-namespace) + - [utf8::iterator](#utf8iterator-1) + * [Member functions](#member-functions-1) + + + + + +## Installation + +This is a header-only library and the supported way of deploying it is: +- Download a release from https://github.com/nemtrif/utfcpp/releases into a temporary directory +- Unzip the release +- Copy the content of utfcpp/source file into the directory where you keep include files for your project + + +The CMakeList.txt file was originally made for testing purposes only, but unfortunately over time I accepted contributions that added install target. *This is not a supported way of installing the utfcpp library* and I am considering removing the CMakeList.txt in a future release. + + +## Examples of use + + +### Introductory Sample + +To illustrate the use of the library, let's start with a small but complete program that opens a file containing UTF-8 encoded text, reads it line by line, checks each line for invalid UTF-8 byte sequences, and converts it to UTF-16 encoding and back to UTF-8: + +```cpp +#include +#include +#include +#include +#include "utf8.h" +using namespace std; +int main(int argc, char** argv) +{ + if (argc != 2) { + cout << "\nUsage: docsample filename\n"; + return 0; + } + const char* test_file_path = argv[1]; + // Open the test file (must be UTF-8 encoded) + ifstream fs8(test_file_path); + if (!fs8.is_open()) { + cout << "Could not open " << test_file_path << endl; + return 0; + } + + unsigned line_count = 1; + string line; + // Play with all the lines in the file + while (getline(fs8, line)) { + // check for invalid utf-8 (for a simple yes/no check, there is also utf8::is_valid function) +#if __cplusplus >= 201103L // C++ 11 or later + auto end_it = utf8::find_invalid(line.begin(), line.end()); +#else + string::iterator end_it = utf8::find_invalid(line.begin(), line.end()); +#endif // C++ 11 + if (end_it != line.end()) { + cout << "Invalid UTF-8 encoding detected at line " << line_count << "\n"; + cout << "This part is fine: " << string(line.begin(), end_it) << "\n"; + } + // Get the line length (at least for the valid part) + int length = utf8::distance(line.begin(), end_it); + cout << "Length of line " << line_count << " is " << length << "\n"; + + // Convert it to utf-16 +#if __cplusplus >= 201103L // C++ 11 or later + u16string utf16line = utf8::utf8to16(line); +#else + vector utf16line; + utf8::utf8to16(line.begin(), end_it, back_inserter(utf16line)); +#endif // C++ 11 + // And back to utf-8; +#if __cplusplus >= 201103L // C++ 11 or later + string utf8line = utf8::utf16to8(utf16line); +#else + string utf8line; + utf8::utf16to8(utf16line.begin(), utf16line.end(), back_inserter(utf8line)); +#endif // C++ 11 + // Confirm that the conversion went OK: + if (utf8line != string(line.begin(), end_it)) + cout << "Error in UTF-16 conversion at line: " << line_count << "\n"; + + line_count++; + } + + return 0; +} +``` + +In the previous code sample, for each line we performed a detection of invalid UTF-8 sequences with `find_invalid`; the number of characters (more precisely - the number of Unicode code points, including the end of line and even BOM if there is one) in each line was determined with a use of `utf8::distance`; finally, we have converted each line to UTF-16 encoding with `utf8to16` and back to UTF-8 with `utf16to8`. + +Note a different pattern of usage for old compilers. For instance, this is how we convert +a UTF-8 encoded string to a UTF-16 encoded one with a pre - C++11 compiler: +```cpp + vector utf16line; + utf8::utf8to16(line.begin(), end_it, back_inserter(utf16line)); +``` + +With a more modern compiler, the same operation would look like: +```cpp + u16string utf16line = utf8::utf8to16(line); +``` +If `__cplusplus` macro points to a C++ 11 or later, the library exposes API that takes into +account C++ standard Unicode strings and move semantics. With an older compiler, it is still +possible to use the same functionality, just in a little less convenient way + +In case you do not trust the `__cplusplus` macro or, for instance, do not want to include +the C++ 11 helper functions even with a modern compiler, define `UTF_CPP_CPLUSPLUS` macro +before including `utf8.h` and assign it a value for the standard you want to use - the values are the same as for the `__cplusplus` macro. This can be also useful with compilers that are conservative in setting the `__cplusplus` macro even if they have a good support for a recent standard edition - Microsoft's Visual C++ is one example. + + +### Checking if a file contains valid UTF-8 text + +Here is a function that checks whether the content of a file is valid UTF-8 encoded text without reading the content into the memory: + +```cpp +bool valid_utf8_file(const char* file_name) +{ + ifstream ifs(file_name); + if (!ifs) + return false; // even better, throw here + + istreambuf_iterator it(ifs.rdbuf()); + istreambuf_iterator eos; + + return utf8::is_valid(it, eos); +} +``` + +Because the function `utf8::is_valid()` works with input iterators, we were able to pass an `istreambuf_iterator` to `it` and read the content of the file directly without loading it to the memory first. + +Note that other functions that take input iterator arguments can be used in a similar way. For instance, to read the content of a UTF-8 encoded text file and convert the text to UTF-16, just do something like: + +```cpp + utf8::utf8to16(it, eos, back_inserter(u16string)); +``` + + +### Ensure that a string contains valid UTF-8 text + +If we have some text that "probably" contains UTF-8 encoded text and we want to replace any invalid UTF-8 sequence with a replacement character, something like the following function may be used: + +```cpp +void fix_utf8_string(std::string& str) +{ + std::string temp; + utf8::replace_invalid(str.begin(), str.end(), back_inserter(temp)); + str = temp; +} +``` + +The function will replace any invalid UTF-8 sequence with a Unicode replacement character. There is an overloaded function that enables the caller to supply their own replacement character. + + + +## Points of interest + + +#### Design goals and decisions + +The library was designed to be: + +1. Generic: for better or worse, there are many C++ string classes out there, and the library should work with as many of them as possible. +2. Portable: the library should be portable both across different platforms and compilers. The only non-portable code is a small section that declares unsigned integers of different sizes: three typedefs. They can be changed by the users of the library if they don't match their platform. The default setting should work for Windows (both 32 and 64 bit), and most 32 bit and 64 bit Unix derivatives. Support for post C++03 language features is included for modern compilers at API level only, so the library should work even with pretty old compilers. +3. Lightweight: follow the "pay only for what you use" guideline. +4. Unintrusive: avoid forcing any particular design or even programming style on the user. This is a library, not a framework. + + +#### Alternatives + +For alternatives and comparisons, I recommend the following article: [The Wonderfully Terrible World of C and C++ Encoding APIs (with Some Rust)](https://thephd.dev/the-c-c++-rust-string-text-encoding-api-landscape), by JeanHeyd Meneide. In the article, this library is compared with: + +- [simdutf](https://github.com/simdutf/simdutf) +- [iconv](https://www.gnu.org/software/libiconv/) +- [boost.text](https://github.com/tzlaine/text) +- [ICU](https://unicode-org.github.io/icu/userguide/conversion/converters.html) +- [encoding_rs](https://github.com/hsivonen/encoding_rs) +- [Windows API functions for converting text between encodings](https://learn.microsoft.com/en-us/windows/win32/api/stringapiset/) +- [ztd.text](https://github.com/soasis/text/) + +The article presents author's view of the quality of the API design, but also some speed benchmarks. + + +## Reference + + +### Functions From utf8 Namespace + + +#### utf8::append + + +##### octet_iterator append(utfchar32_t cp, octet_iterator result) + +Available in version 1.0 and later. + +Encodes a 32 bit code point as a UTF-8 sequence of octets and appends the sequence to a UTF-8 string. + +```cpp +template +octet_iterator append(utfchar32_t cp, octet_iterator result); +``` + +`octet_iterator`: an output iterator. +`cp`: a 32 bit integer representing a code point to append to the sequence. +`result`: an output iterator to the place in the sequence where to append the code point. +Return value: an iterator pointing to the place after the newly appended sequence. + +Example of use: + +```cpp +unsigned char u[5] = {0,0,0,0,0}; +unsigned char* end = append(0x0448, u); +assert (u[0] == 0xd1 && u[1] == 0x88 && u[2] == 0 && u[3] == 0 && u[4] == 0); +``` + +Note that `append` does not allocate any memory - it is the burden of the caller to make sure there is enough memory allocated for the operation. To make things more interesting, `append` can add anywhere between 1 and 4 octets to the sequence. In practice, you would most often want to use `std::back_inserter` to ensure that the necessary memory is allocated. + +In case of an invalid code point, a `utf8::invalid_code_point` exception is thrown. + + + +##### void append(utfchar32_t cp, std::string& s); + +Available in version 3.0 and later. Prior to 4.0 it required a C++ 11 compiler; the requirement is lifted with 4.0. + +Encodes a 32 bit code point as a UTF-8 sequence of octets and appends the sequence to a UTF-8 string. + +```cpp +void append(utfchar32_t cp, std::string& s); +``` + +`cp`: a code point to append to the string. +`s`: a utf-8 encoded string to append the code point to. + +Example of use: + +```cpp +std::string u; +append(0x0448, u); +assert (u[0] == char(0xd1) && u[1] == char(0x88) && u.length() == 2); +``` + +In case of an invalid code point, a `utf8::invalid_code_point` exception is thrown. + + +#### utf8::append16 + +##### word_iterator append16(utfchar32_t cp, word_iterator result) + +Available in version 4.0 and later. + +Encodes a 32 bit code point as a UTF-16 sequence of words and appends the sequence to a UTF-16 string. + +```cpp +template +word_iterator append16(utfchar32_t cp, word_iterator result); +``` + +`word_iterator`: an output iterator. +`cp`: a 32 bit integer representing a code point to append to the sequence. +`result`: an output iterator to the place in the sequence where to append the code point. +Return value: an iterator pointing to the place after the newly appended sequence. + +Example of use: + +```cpp +unsigned short u[2] = {0,0}; +unsigned short* end = append16(0x0448, u); +assert (u[0] == 0x0448 && u[1] == 0); +``` + +Note that `append16` does not allocate any memory - it is the burden of the caller to make sure there is enough memory allocated for the operation. To make things more interesting, `append16` can add either one or two words to the sequence. In practice, you would most often want to use `std::back_inserter` to ensure that the necessary memory is allocated. + +In case of an invalid code point, a `utf8::invalid_code_point` exception is thrown. + + + +##### void append(utfchar32_t cp, std::u16string& s) + +Available in version 4.0 and later. Requires a C++11 compliant compiler. + +Encodes a 32 bit code point as a UTF-16 sequence of words and appends the sequence to a UTF-16 string. + +```cpp +void append(utfchar32_t cp, std::u16string& s); +``` + +`cp`: a code point to append to the string. +`s`: a utf-16 encoded string to append the code point to. + +Example of use: + +```cpp +std::u16string u; +append(0x0448, u); +assert (u[0] == 0x0448 && u.length() == 1); +``` + +In case of an invalid code point, a `utf8::invalid_code_point` exception is thrown. + + + +#### utf8::next + +Available in version 1.0 and later. + +Given the iterator to the beginning of the UTF-8 sequence, it returns the code point and moves the iterator to the next position. + +```cpp +template +utfchar32_t next(octet_iterator& it, octet_iterator end); +``` + +`octet_iterator`: an input iterator. +`it`: a reference to an iterator pointing to the beginning of an UTF-8 encoded code point. After the function returns, it is incremented to point to the beginning of the next code point. +`end`: end of the UTF-8 sequence to be processed. If `it` gets equal to `end` during the extraction of a code point, an `utf8::not_enough_room` exception is thrown. +Return value: the 32 bit representation of the processed UTF-8 code point. + +Example of use: + +```cpp +char* twochars = "\xe6\x97\xa5\xd1\x88"; +char* w = twochars; +int cp = next(w, twochars + 6); +assert (cp == 0x65e5); +assert (w == twochars + 3); +``` + +This function is typically used to iterate through a UTF-8 encoded string. + +In case of an invalid UTF-8 sequence, a `utf8::invalid_utf8` exception is thrown. + + +#### utf8::next16 + +Available in version 4.0 and later. + +Given the iterator to the beginning of the UTF-16 sequence, it returns the code point and moves the iterator to the next position. + +```cpp +template +utfchar32_t next16(word_iterator& it, word_iterator end); +``` + +`word_iterator`: an input iterator. +`it`: a reference to an iterator pointing to the beginning of an UTF-16 encoded code point. After the function returns, it is incremented to point to the beginning of the next code point. +`end`: end of the UTF-16 sequence to be processed. If `it` gets equal to `end` during the extraction of a code point, an `utf8::not_enough_room` exception is thrown. +Return value: the 32 bit representation of the processed UTF-16 code point. + +Example of use: + +```cpp +const unsigned short u[3] = {0x65e5, 0xd800, 0xdf46}; +const unsigned short* w = u; +int cp = next16(w, w + 3); +assert (cp, 0x65e5); +assert (w, u + 1); +``` + +This function is typically used to iterate through a UTF-16 encoded string. + +In case of an invalid UTF-16 sequence, a `utf8::invalid_utf8` exception is thrown. + + + +#### utf8::peek_next + +Available in version 2.1 and later. + +Given the iterator to the beginning of the UTF-8 sequence, it returns the code point for the following sequence without changing the value of the iterator. + +```cpp +template +utfchar32_t peek_next(octet_iterator it, octet_iterator end); +``` + + +`octet_iterator`: an input iterator. +`it`: an iterator pointing to the beginning of an UTF-8 encoded code point. +`end`: end of the UTF-8 sequence to be processed. If `it` gets equal to `end` during the extraction of a code point, an `utf8::not_enough_room` exception is thrown. +Return value: the 32 bit representation of the processed UTF-8 code point. + +Example of use: + +```cpp +char* twochars = "\xe6\x97\xa5\xd1\x88"; +char* w = twochars; +int cp = peek_next(w, twochars + 6); +assert (cp == 0x65e5); +assert (w == twochars); +``` + +In case of an invalid UTF-8 sequence, a `utf8::invalid_utf8` exception is thrown. + + +#### utf8::prior + +Available in version 1.02 and later. + +Given a reference to an iterator pointing to an octet in a UTF-8 sequence, it decreases the iterator until it hits the beginning of the previous UTF-8 encoded code point and returns the 32 bits representation of the code point. + +```cpp +template +utfchar32_t prior(octet_iterator& it, octet_iterator start); +``` + +`octet_iterator`: a bidirectional iterator. +`it`: a reference pointing to an octet within a UTF-8 encoded string. After the function returns, it is decremented to point to the beginning of the previous code point. +`start`: an iterator to the beginning of the sequence where the search for the beginning of a code point is performed. It is a safety measure to prevent passing the beginning of the string in the search for a UTF-8 lead octet. + Return value: the 32 bit representation of the previous code point. + +Example of use: + +```cpp +char* twochars = "\xe6\x97\xa5\xd1\x88"; +unsigned char* w = twochars + 3; +int cp = prior (w, twochars); +assert (cp == 0x65e5); +assert (w == twochars); +``` + +This function has two purposes: one is two iterate backwards through a UTF-8 encoded string. Note that it is usually a better idea to iterate forward instead, since `utf8::next` is faster. The second purpose is to find a beginning of a UTF-8 sequence if we have a random position within a string. Note that in that case `utf8::prior` may not detect an invalid UTF-8 sequence in some scenarios: for instance if there are superfluous trail octets, it will just skip them. + +`it` will typically point to the beginning of a code point, and `start` will point to the beginning of the string to ensure we don't go backwards too far. `it` is decreased until it points to a lead UTF-8 octet, and then the UTF-8 sequence beginning with that octet is decoded to a 32 bit representation and returned. + +In case `start` is reached before a UTF-8 lead octet is hit, or if an invalid UTF-8 sequence is started by the lead octet, an `invalid_utf8` exception is thrown. + +In case `start` equals `it`, a `not_enough_room` exception is thrown. + + +#### utf8::advance +Available in version 1.0 and later. + +Advances an iterator by the specified number of code points within an UTF-8 sequence. + +```cpp +template +void advance (octet_iterator& it, distance_type n, octet_iterator end); +``` + +`octet_iterator`: an input iterator. +`distance_type`: an integral type convertible to `octet_iterator`'s difference type. +`it`: a reference to an iterator pointing to the beginning of an UTF-8 encoded code point. After the function returns, it is incremented to point to the nth following code point. +`n`: number of code points `it` should be advanced. A negative value means decrement. +`end`: limit of the UTF-8 sequence to be processed. If `n` is positive and `it` gets equal to `end` during the extraction of a code point, an `utf8::not_enough_room` exception is thrown. If `n` is negative and `it` reaches `end` while `it` points t a trail byte of a UTF-8 sequence, a `utf8::invalid_code_point` exception is thrown. + +Example of use: + +```cpp +char* twochars = "\xe6\x97\xa5\xd1\x88"; +unsigned char* w = twochars; +advance (w, 2, twochars + 6); +assert (w == twochars + 5); +advance (w, -2, twochars); +assert (w == twochars); +``` + +In case of an invalid code point, a `utf8::invalid_code_point` exception is thrown. + + +#### utf8::distance + +Available in version 1.0 and later. + +Given the iterators to two UTF-8 encoded code points in a sequence, returns the number of code points between them. + +```cpp +template +typename std::iterator_traits::difference_type distance (octet_iterator first, octet_iterator last); +``` + +`octet_iterator`: an input iterator. +`first`: an iterator to a beginning of a UTF-8 encoded code point. +`last`: an iterator to a "post-end" of the last UTF-8 encoded code point in the sequence we are trying to determine the length. It can be the beginning of a new code point, or not. + Return value the distance between the iterators, in code points. + +Example of use: + +```cpp +char* twochars = "\xe6\x97\xa5\xd1\x88"; +size_t dist = utf8::distance(twochars, twochars + 5); +assert (dist == 2); +``` + +This function is used to find the length (in code points) of a UTF-8 encoded string. The reason it is called _distance_, rather than, say, _length_ is mainly because developers are used that _length_ is an O(1) function. Computing the length of an UTF-8 string is a linear operation, and it looked better to model it after `std::distance` algorithm. + +In case of an invalid UTF-8 sequence, a `utf8::invalid_utf8` exception is thrown. If `last` does not point to the past-of-end of a UTF-8 sequence, a `utf8::not_enough_room` exception is thrown. + + +#### utf8::utf16to8 + +##### octet_iterator utf16to8 (u16bit_iterator start, u16bit_iterator end, octet_iterator result) + +Available in version 1.0 and later. + +Converts a UTF-16 encoded string to UTF-8. + +```cpp +template +octet_iterator utf16to8 (u16bit_iterator start, u16bit_iterator end, octet_iterator result); +``` + +`u16bit_iterator`: an input iterator. +`octet_iterator`: an output iterator. +`start`: an iterator pointing to the beginning of the UTF-16 encoded string to convert. +`end`: an iterator pointing to pass-the-end of the UTF-16 encoded string to convert. +`result`: an output iterator to the place in the UTF-8 string where to append the result of conversion. +Return value: An iterator pointing to the place after the appended UTF-8 string. + +Example of use: + +```cpp +unsigned short utf16string[] = {0x41, 0x0448, 0x65e5, 0xd834, 0xdd1e}; +vector utf8result; +utf16to8(utf16string, utf16string + 5, back_inserter(utf8result)); +assert (utf8result.size() == 10); +``` + +In case of invalid UTF-16 sequence, a `utf8::invalid_utf16` exception is thrown. + + + +##### std::string utf16to8(const std::u16string& s) + +Available in version 3.0 and later. Requires a C++ 11 compliant compiler. + +Converts a UTF-16 encoded string to UTF-8. + +```cpp +std::string utf16to8(const std::u16string& s); +``` + +`s`: a UTF-16 encoded string. +Return value: A UTF-8 encoded string. + +Example of use: + +```cpp + u16string utf16string = {0x41, 0x0448, 0x65e5, 0xd834, 0xdd1e}; + string u = utf16to8(utf16string); + assert (u.size() == 10); +``` + +In case of invalid UTF-16 sequence, a `utf8::invalid_utf16` exception is thrown. + + +##### std::string utf16to8(std::u16string_view s) + +Available in version 3.2 and later. Requires a C++ 17 compliant compiler. + +Converts a UTF-16 encoded string to UTF-8. + +```cpp +std::string utf16to8(std::u16string_view s); +``` + +`s`: a UTF-16 encoded string. +Return value: A UTF-8 encoded string. + +Example of use: + +```cpp + u16string utf16string = {0x41, 0x0448, 0x65e5, 0xd834, 0xdd1e}; + u16string_view utf16stringview(u16string); + string u = utf16to8(utf16string); + assert (u.size() == 10); +``` + +In case of invalid UTF-16 sequence, a `utf8::invalid_utf16` exception is thrown. + + +#### utf8::utf16tou8 + +##### std::u8string utf16tou8(const std::u16string& s) + +Available in version 4.0 and later. Requires a C++ 20 compliant compiler. + +Converts a UTF-16 encoded string to UTF-8. + +```cpp +std::u8string utf16tou8(const std::u16string& s); +``` + +`s`: a UTF-16 encoded string. +Return value: A UTF-8 encoded string. + +Example of use: + +```cpp + u16string utf16string = {0x41, 0x0448, 0x65e5, 0xd834, 0xdd1e}; + u8string u = utf16tou8(utf16string); + assert (u.size() == 10); +``` + +In case of invalid UTF-16 sequence, a `utf8::invalid_utf16` exception is thrown. + + +##### std::u8string utf16tou8(const std::u16string_view& s) + +Available in version 4.0 and later. Requires a C++ 20 compliant compiler. + +Converts a UTF-16 encoded string to UTF-8. + +```cpp +std::u8string utf16tou8(const std::u16string_view& s); +``` + +`s`: a UTF-16 encoded string. +Return value: A UTF-8 encoded string. + +Example of use: + +```cpp + u16string utf16string = {0x41, 0x0448, 0x65e5, 0xd834, 0xdd1e}; + u16string_view utf16stringview(u16string); + u8string u = utf16tou8(utf16string); + assert (u.size() == 10); +``` + +In case of invalid UTF-16 sequence, a `utf8::invalid_utf16` exception is thrown. + + +#### utf8::utf8to16 + +##### u16bit_iterator utf8to16 (octet_iterator start, octet_iterator end, u16bit_iterator result) + +Available in version 1.0 and later. + +Converts an UTF-8 encoded string to UTF-16 + +```cpp +template +u16bit_iterator utf8to16 (octet_iterator start, octet_iterator end, u16bit_iterator result); +``` + +`octet_iterator`: an input iterator. +`u16bit_iterator`: an output iterator. +`start`: an iterator pointing to the beginning of the UTF-8 encoded string to convert. +`end`: an iterator pointing to pass-the-end of the UTF-8 encoded string to convert. +`result`: an output iterator to the place in the UTF-16 string where to append the result of conversion. +Return value: An iterator pointing to the place after the appended UTF-16 string. + +Example of use: + +```cpp +char utf8_with_surrogates[] = "\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"; +vector utf16result; +utf8to16(utf8_with_surrogates, utf8_with_surrogates + 9, back_inserter(utf16result)); +assert (utf16result.size() == 4); +assert (utf16result[2] == 0xd834); +assert (utf16result[3] == 0xdd1e); +``` + +In case of an invalid UTF-8 sequence, a `utf8::invalid_utf8` exception is thrown. If `end` does not point to the past-of-end of a UTF-8 sequence, a `utf8::not_enough_room` exception is thrown. + + + + +##### std::u16string utf8to16(const std::string& s) + +Available in version 3.0 and later. Requires a C++ 11 compliant compiler. + +Converts an UTF-8 encoded string to UTF-16. + +```cpp +std::u16string utf8to16(const std::string& s); +``` + +`s`: an UTF-8 encoded string to convert. +Return value: A UTF-16 encoded string + +Example of use: + +```cpp +string utf8_with_surrogates = "\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"; +u16string utf16result = utf8to16(utf8_with_surrogates); +assert (utf16result.length() == 4); +assert (utf16result[2] == 0xd834); +assert (utf16result[3] == 0xdd1e); +``` + +In case of an invalid UTF-8 sequence, a `utf8::invalid_utf8` exception is thrown. + + + +##### std::u16string utf8to16(std::string_view s) + +Available in version 3.2 and later. Requires a C++ 17 compliant compiler. + +Converts an UTF-8 encoded string to UTF-16. + +```cpp +std::u16string utf8to16(std::string_view s); +``` + +`s`: an UTF-8 encoded string to convert. +Return value: A UTF-16 encoded string + +Example of use: + +```cpp +string_view utf8_with_surrogates = "\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"; +u16string utf16result = utf8to16(utf8_with_surrogates); +assert (utf16result.length() == 4); +assert (utf16result[2] == 0xd834); +assert (utf16result[3] == 0xdd1e); +``` + +In case of an invalid UTF-8 sequence, a `utf8::invalid_utf8` exception is thrown. + + + +##### std::u16string utf8to16(std::u8string& s) + +Available in version 4.0 and later. Requires a C++ 20 compliant compiler. + +Converts an UTF-8 encoded string to UTF-16. + +```cpp +std::u16string utf8to16(std::u8string& s); +``` + +`s`: an UTF-8 encoded string to convert. +Return value: A UTF-16 encoded string + +Example of use: + +```cpp +std::u8string utf8_with_surrogates = "\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"; +std::u16string utf16result = utf8to16(utf8_with_surrogates); +assert (utf16result.length() == 4); +assert (utf16result[2] == 0xd834); +assert (utf16result[3] == 0xdd1e); +``` + +In case of an invalid UTF-8 sequence, a `utf8::invalid_utf8` exception is thrown. + + + +##### std::u16string utf8to16(std::u8string_view& s) + +Available in version 4.0 and later. Requires a C++ 20 compliant compiler. + +Converts an UTF-8 encoded string to UTF-16. + +```cpp +std::u16string utf8to16(std::u8string_view& s); +``` + +`s`: an UTF-8 encoded string to convert. +Return value: A UTF-16 encoded string + +Example of use: + +```cpp +std::u8string utf8_with_surrogates = "\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"; +std::u8string_view utf8stringview {utf8_with_surrogates} +std::u16string utf16result = utf8to16(utf8stringview); +assert (utf16result.length() == 4); +assert (utf16result[2] == 0xd834); +assert (utf16result[3] == 0xdd1e); +``` + +In case of an invalid UTF-8 sequence, a `utf8::invalid_utf8` exception is thrown. + + +#### utf8::utf32to8 + +##### octet_iterator utf32to8 (u32bit_iterator start, u32bit_iterator end, octet_iterator result) + +Available in version 1.0 and later. + +Converts a UTF-32 encoded string to UTF-8. + +```cpp +template +octet_iterator utf32to8 (u32bit_iterator start, u32bit_iterator end, octet_iterator result); +``` + +`octet_iterator`: an output iterator. +`u32bit_iterator`: an input iterator. +`start`: an iterator pointing to the beginning of the UTF-32 encoded string to convert. +`end`: an iterator pointing to pass-the-end of the UTF-32 encoded string to convert. +`result`: an output iterator to the place in the UTF-8 string where to append the result of conversion. +Return value: An iterator pointing to the place after the appended UTF-8 string. + +Example of use: + +```cpp +int utf32string[] = {0x448, 0x65E5, 0x10346, 0}; +vector utf8result; +utf32to8(utf32string, utf32string + 3, back_inserter(utf8result)); +assert (utf8result.size() == 9); +``` + +In case of invalid UTF-32 string, a `utf8::invalid_code_point` exception is thrown. + + + +##### std::string utf32to8(const std::u32string& s) + +Available in version 3.0 and later. Requires a C++ 11 compliant compiler. + +Converts a UTF-32 encoded string to UTF-8. + +```cpp +std::string utf32to8(const std::u32string& s); +``` + +`s`: a UTF-32 encoded string. +Return value: a UTF-8 encoded string. + +Example of use: + +```cpp +u32string utf32string = {0x448, 0x65E5, 0x10346}; +string utf8result = utf32to8(utf32string); +assert (utf8result.size() == 9); +``` + +In case of invalid UTF-32 string, a `utf8::invalid_code_point` exception is thrown. + + +##### std::u8string utf32to8(const std::u32string& s) + +Available in version 4.0 and later. Requires a C++ 20 compliant compiler. + +Converts a UTF-32 encoded string to UTF-8. + +```cpp +std::u8string utf32to8(const std::u32string& s); +``` + +`s`: a UTF-32 encoded string. +Return value: a UTF-8 encoded string. + +Example of use: + +```cpp +u32string utf32string = {0x448, 0x65E5, 0x10346}; +u8string utf8result = utf32to8(utf32string); +assert (utf8result.size() == 9); +``` + +In case of invalid UTF-32 string, a `utf8::invalid_code_point` exception is thrown. + + + +##### std::u8string utf32to8(const std::u32string_view& s) + +Available in version 4.0 and later. Requires a C++ 20 compliant compiler. + +Converts a UTF-32 encoded string to UTF-8. + +```cpp +std::u8string utf32to8(const std::u32string_view& s); +``` + +`s`: a UTF-32 encoded string. +Return value: a UTF-8 encoded string. + +Example of use: + +```cpp +u32string utf32string = {0x448, 0x65E5, 0x10346}; +u32string_view utf32stringview(utf32string); +u8string utf8result = utf32to8(utf32stringview); +assert (utf8result.size() == 9); +``` + +In case of invalid UTF-32 string, a `utf8::invalid_code_point` exception is thrown. + + + +##### std::string utf32to8(const std::u32string& s) + +Available in version 3.0 and later. Requires a C++ 11 compliant compiler. + +Converts a UTF-32 encoded string to UTF-8. + +```cpp +std::string utf32to8(const std::u32string& s); +``` + +`s`: a UTF-32 encoded string. +Return value: a UTF-8 encoded string. + +Example of use: + +```cpp +u32string utf32string = {0x448, 0x65E5, 0x10346}; +string utf8result = utf32to8(utf32string); +assert (utf8result.size() == 9); +``` + +In case of invalid UTF-32 string, a `utf8::invalid_code_point` exception is thrown. + + +##### std::string utf32to8(std::u32string_view s) + +Available in version 3.2 and later. Requires a C++ 17 compliant compiler. + +Converts a UTF-32 encoded string to UTF-8. + +```cpp +std::string utf32to8(std::u32string_view s); +``` + +`s`: a UTF-32 encoded string. +Return value: a UTF-8 encoded string. + +Example of use: + +```cpp +u32string utf32string = {0x448, 0x65E5, 0x10346}; +u32string_view utf32stringview(utf32string); +string utf8result = utf32to8(utf32stringview); +assert (utf8result.size() == 9); +``` + +In case of invalid UTF-32 string, a `utf8::invalid_code_point` exception is thrown. + + + +#### utf8::utf8to32 + +##### u32bit_iterator utf8to32 (octet_iterator start, octet_iterator end, u32bit_iterator result) + +Available in version 1.0 and later. + +Converts a UTF-8 encoded string to UTF-32. + +```cpp +template +u32bit_iterator utf8to32 (octet_iterator start, octet_iterator end, u32bit_iterator result); +``` + +`octet_iterator`: an input iterator. +`u32bit_iterator`: an output iterator. +`start`: an iterator pointing to the beginning of the UTF-8 encoded string to convert. +`end`: an iterator pointing to pass-the-end of the UTF-8 encoded string to convert. +`result`: an output iterator to the place in the UTF-32 string where to append the result of conversion. +Return value: An iterator pointing to the place after the appended UTF-32 string. + +Example of use: + +```cpp +char* twochars = "\xe6\x97\xa5\xd1\x88"; +vector utf32result; +utf8to32(twochars, twochars + 5, back_inserter(utf32result)); +assert (utf32result.size() == 2); +``` + +In case of an invalid UTF-8 sequence, a `utf8::invalid_utf8` exception is thrown. If `end` does not point to the past-of-end of a UTF-8 sequence, a `utf8::not_enough_room` exception is thrown. + + + + +##### std::u32string utf8to32(const std::u8string& s) + +Available in version 4.0 and later. Requires a C++ 20 compliant compiler. + +Converts a UTF-8 encoded string to UTF-32. + +```cpp +std::u32string utf8to32(const std::u8string& s); +``` + +`s`: a UTF-8 encoded string. +Return value: a UTF-32 encoded string. + +Example of use: + +```cpp +const std::u8string* twochars = u8"\xe6\x97\xa5\xd1\x88"; +u32string utf32result = utf8to32(twochars); +assert (utf32result.size() == 2); +``` + +In case of an invalid UTF-8 sequence, a `utf8::invalid_utf8` exception is thrown. + + + +##### std::u32string utf8to32(const std::u8string_view& s) + +Available in version 4.0 and later. Requires a C++ 20 compliant compiler. + +Converts a UTF-8 encoded string to UTF-32. + +```cpp +std::u32string utf8to32(const std::u8string_view& s); +``` + +`s`: a UTF-8 encoded string. +Return value: a UTF-32 encoded string. + +Example of use: + +```cpp +const u8string* twochars = u8"\xe6\x97\xa5\xd1\x88"; +const u8string_view stringview{twochars}; +u32string utf32result = utf8to32(stringview); +assert (utf32result.size() == 2); +``` + +In case of an invalid UTF-8 sequence, a `utf8::invalid_utf8` exception is thrown. + + + +##### std::u32string utf8to32(const std::string& s) + +Available in version 3.0 and later. Requires a C++ 11 compliant compiler. + +Converts a UTF-8 encoded string to UTF-32. + +```cpp +std::u32string utf8to32(const std::string& s); +``` + +`s`: a UTF-8 encoded string. +Return value: a UTF-32 encoded string. + +Example of use: + +```cpp +const char* twochars = "\xe6\x97\xa5\xd1\x88"; +u32string utf32result = utf8to32(twochars); +assert (utf32result.size() == 2); +``` + +In case of an invalid UTF-8 sequence, a `utf8::invalid_utf8` exception is thrown. + + +##### std::u32string utf8to32(std::string_view s) + +Available in version 3.2 and later. Requires a C++ 17 compliant compiler. + +Converts a UTF-8 encoded string to UTF-32. + +```cpp +std::u32string utf8to32(std::string_view s); +``` + +`s`: a UTF-8 encoded string. +Return value: a UTF-32 encoded string. + +Example of use: + +```cpp +string_view twochars = "\xe6\x97\xa5\xd1\x88"; +u32string utf32result = utf8to32(twochars); +assert (utf32result.size() == 2); +``` + +In case of an invalid UTF-8 sequence, a `utf8::invalid_utf8` exception is thrown. + + +#### utf8::find_invalid + +##### octet_iterator find_invalid(octet_iterator start, octet_iterator end) + +Available in version 1.0 and later. + +Detects an invalid sequence within a UTF-8 string. + +```cpp +template +octet_iterator find_invalid(octet_iterator start, octet_iterator end); +``` + +`octet_iterator`: an input iterator. +`start`: an iterator pointing to the beginning of the UTF-8 string to test for validity. +`end`: an iterator pointing to pass-the-end of the UTF-8 string to test for validity. +Return value: an iterator pointing to the first invalid octet in the UTF-8 string. In case none were found, equals `end`. + +Example of use: + +```cpp +char utf_invalid[] = "\xe6\x97\xa5\xd1\x88\xfa"; +char* invalid = find_invalid(utf_invalid, utf_invalid + 6); +assert (invalid == utf_invalid + 5); +``` + +This function is typically used to make sure a UTF-8 string is valid before processing it with other functions. It is especially important to call it if before doing any of the _unchecked_ operations on it. + + + +##### const char* find_invalid(const char* str) + +Available in version 4.0 and later. + +Detects an invalid sequence within a C-style UTF-8 string. + +```cpp +const char* find_invalid(const char* str); +``` + +`str`: a UTF-8 encoded string. +Return value: a pointer to the first invalid octet in the UTF-8 string. In case none were found, points to the trailing zero byte. + +Example of use: + +```cpp +const char* utf_invalid = "\xe6\x97\xa5\xd1\x88\xfa"; +const char* invalid = find_invalid(utf_invalid); +assert ((invalid - utf_invalid) == 5); +``` + +This function is typically used to make sure a UTF-8 string is valid before processing it with other functions. It is especially important to call it if before doing any of the _unchecked_ operations on it. + + +##### std::size_t find_invalid(const std::string& s) + +Available in version 3.0 and later. Prior to 4.0 it required a C++ 11 compiler; the requirement is lifted with 4.0 + +Detects an invalid sequence within a UTF-8 string. + +```cpp +std::size_t find_invalid(const std::string& s); +``` + +`s`: a UTF-8 encoded string. +Return value: the index of the first invalid octet in the UTF-8 string. In case none were found, equals `std::string::npos`. + +Example of use: + +```cpp +string utf_invalid = "\xe6\x97\xa5\xd1\x88\xfa"; +auto invalid = find_invalid(utf_invalid); +assert (invalid == 5); +``` + +This function is typically used to make sure a UTF-8 string is valid before processing it with other functions. It is especially important to call it if before doing any of the _unchecked_ operations on it. + + +##### std::size_t find_invalid(std::string_view s) + +Available in version 3.2 and later. Requires a C++ 17 compliant compiler. + +Detects an invalid sequence within a UTF-8 string. + +```cpp +std::size_t find_invalid(std::string_view s); +``` + +`s`: a UTF-8 encoded string. +Return value: the index of the first invalid octet in the UTF-8 string. In case none were found, equals `std::string_view::npos`. + +Example of use: + +```cpp +string_view utf_invalid = "\xe6\x97\xa5\xd1\x88\xfa"; +auto invalid = find_invalid(utf_invalid); +assert (invalid == 5); +``` + +This function is typically used to make sure a UTF-8 string is valid before processing it with other functions. It is especially important to call it if before doing any of the _unchecked_ operations on it. + + +#### utf8::is_valid + +##### bool is_valid(octet_iterator start, octet_iterator end) + +Available in version 1.0 and later. + +Checks whether a sequence of octets is a valid UTF-8 string. + +```cpp +template +bool is_valid(octet_iterator start, octet_iterator end); +``` + +`octet_iterator`: an input iterator. +`start`: an iterator pointing to the beginning of the UTF-8 string to test for validity. +`end`: an iterator pointing to pass-the-end of the UTF-8 string to test for validity. +Return value: `true` if the sequence is a valid UTF-8 string; `false` if not. + +Example of use: + +```cpp +char utf_invalid[] = "\xe6\x97\xa5\xd1\x88\xfa"; +bool bvalid = is_valid(utf_invalid, utf_invalid + 6); +assert (bvalid == false); +``` + +`is_valid` is a shorthand for `find_invalid(start, end) == end;`. You may want to use it to make sure that a byte sequence is a valid UTF-8 string without the need to know where it fails if it is not valid. + + + +##### bool is_valid(const char* str) + +Available in version 4.0 and later. + +Checks whether a C-style string contains valid UTF-8 encoded text. + +```cpp +bool is_valid(const char* str); +``` + +`str`: a UTF-8 encoded string. +Return value: `true` if the string contains valid UTF-8 encoded text; `false` if not. + +Example of use: + +```cpp +char utf_invalid[] = "\xe6\x97\xa5\xd1\x88\xfa"; +bool bvalid = is_valid(utf_invalid); +assert (bvalid == false); +``` + +You may want to use `is_valid` to make sure that a string contains valid UTF-8 text without the need to know where it fails if it is not valid. + + + +##### bool is_valid(const std::string& s) + +Available in version 3.0 and later. Prior to 4.0 it required a C++ 11 compiler; the requirement is lifted with 4.0 + +Checks whether a string object contains valid UTF-8 encoded text. + +```cpp +bool is_valid(const std::string& s); +``` + +`s`: a UTF-8 encoded string. +Return value: `true` if the string contains valid UTF-8 encoded text; `false` if not. + +Example of use: + +```cpp +char utf_invalid[] = "\xe6\x97\xa5\xd1\x88\xfa"; +bool bvalid = is_valid(utf_invalid); +assert (bvalid == false); +``` + +You may want to use `is_valid` to make sure that a string contains valid UTF-8 text without the need to know where it fails if it is not valid. + + +##### bool is_valid(std::string_view s) + +Available in version 3.2 and later. Requires a C++ 17 compliant compiler. + +Checks whether a string object contains valid UTF-8 encoded text. + +```cpp +bool is_valid(std::string_view s); +``` + +`s`: a UTF-8 encoded string. +Return value: `true` if the string contains valid UTF-8 encoded text; `false` if not. + +Example of use: + +```cpp +string_view utf_invalid = "\xe6\x97\xa5\xd1\x88\xfa"; +bool bvalid = is_valid(utf_invalid); +assert (bvalid == false); +``` + +You may want to use `is_valid` to make sure that a string contains valid UTF-8 text without the need to know where it fails if it is not valid. + + +#### utf8::replace_invalid + +##### output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, utfchar32_t replacement) + +Available in version 2.0 and later. + +Replaces all invalid UTF-8 sequences within a string with a replacement marker. + +```cpp +template +output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, utfchar32_t replacement); +template +output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out); +``` + +`octet_iterator`: an input iterator. +`output_iterator`: an output iterator. +`start`: an iterator pointing to the beginning of the UTF-8 string to look for invalid UTF-8 sequences. +`end`: an iterator pointing to pass-the-end of the UTF-8 string to look for invalid UTF-8 sequences. +`out`: An output iterator to the range where the result of replacement is stored. +`replacement`: A Unicode code point for the replacement marker. The version without this parameter assumes the value `0xfffd` +Return value: An iterator pointing to the place after the UTF-8 string with replaced invalid sequences. + +Example of use: + +```cpp +char invalid_sequence[] = "a\x80\xe0\xa0\xc0\xaf\xed\xa0\x80z"; +vector replace_invalid_result; +replace_invalid (invalid_sequence, invalid_sequence + sizeof(invalid_sequence), back_inserter(replace_invalid_result), '?'); +bvalid = is_valid(replace_invalid_result.begin(), replace_invalid_result.end()); +assert (bvalid); +char* fixed_invalid_sequence = "a????z"; +assert (std::equal(replace_invalid_result.begin(), replace_invalid_result.end(), fixed_invalid_sequence)); +``` + +`replace_invalid` does not perform in-place replacement of invalid sequences. Rather, it produces a copy of the original string with the invalid sequences replaced with a replacement marker. Therefore, `out` must not be in the `[start, end]` range. + + + +##### std::string replace_invalid(const std::string& s, utfchar32_t replacement) + +Available in version 3.0 and later. Prior to 4.0 it required a C++ 11 compiler; the requirement is lifted with 4.0 + +Replaces all invalid UTF-8 sequences within a string with a replacement marker. + +```cpp +std::string replace_invalid(const std::string& s, utfchar32_t replacement); +std::string replace_invalid(const std::string& s); +``` + +`s`: a UTF-8 encoded string. +`replacement`: A Unicode code point for the replacement marker. The version without this parameter assumes the value `0xfffd` +Return value: A UTF-8 encoded string with replaced invalid sequences. + +Example of use: + +```cpp +string invalid_sequence = "a\x80\xe0\xa0\xc0\xaf\xed\xa0\x80z"; +string replace_invalid_result = replace_invalid(invalid_sequence, '?'); +bvalid = is_valid(replace_invalid_result); +assert (bvalid); +const string fixed_invalid_sequence = "a????z"; +assert (fixed_invalid_sequence == replace_invalid_result); +``` + + +##### std::string replace_invalid(std::string_view s, char32_t replacement) + +Available in version 3.2 and later. Requires a C++ 17 compliant compiler. + +Replaces all invalid UTF-8 sequences within a string with a replacement marker. + +```cpp +std::string replace_invalid(std::string_view s, char32_t replacement); +std::string replace_invalid(std::string_view s); +``` + +`s`: a UTF-8 encoded string. +`replacement`: A Unicode code point for the replacement marker. The version without this parameter assumes the value `0xfffd` +Return value: A UTF-8 encoded string with replaced invalid sequences. + +Example of use: + +```cpp +string_view invalid_sequence = "a\x80\xe0\xa0\xc0\xaf\xed\xa0\x80z"; +string replace_invalid_result = replace_invalid(invalid_sequence, '?'); +bool bvalid = is_valid(replace_invalid_result); +assert (bvalid); +const string fixed_invalid_sequence = "a????z"; +assert(fixed_invalid_sequence, replace_invalid_result); +``` + + +#### utf8::starts_with_bom + +##### bool starts_with_bom (octet_iterator it, octet_iterator end) + +Available in version 2.3 and later. + +Checks whether an octet sequence starts with a UTF-8 byte order mark (BOM) + +```cpp +template +bool starts_with_bom (octet_iterator it, octet_iterator end); +``` + +`octet_iterator`: an input iterator. +`it`: beginning of the octet sequence to check +`end`: pass-end of the sequence to check +Return value: `true` if the sequence starts with a UTF-8 byte order mark; `false` if not. + +Example of use: + +```cpp +unsigned char byte_order_mark[] = {0xef, 0xbb, 0xbf}; +bool bbom = starts_with_bom(byte_order_mark, byte_order_mark + sizeof(byte_order_mark)); +assert (bbom == true); +``` + +The typical use of this function is to check the first three bytes of a file. If they form the UTF-8 BOM, we want to skip them before processing the actual UTF-8 encoded text. + + + +##### bool starts_with_bom(const std::string& s) + +Available in version 3.0 and later. Prior to 4.0 it required a C++ 11 compiler; the requirement is lifted with 4.0 + +Checks whether a string starts with a UTF-8 byte order mark (BOM) + +```cpp +bool starts_with_bom(const std::string& s); +``` + +`s`: a UTF-8 encoded string. +Return value: `true` if the string starts with a UTF-8 byte order mark; `false` if not. + +Example of use: + +```cpp +string byte_order_mark = {char(0xef), char(0xbb), char(0xbf)}; +bool bbom = starts_with_bom(byte_order_mark); +assert (bbom == true); +string threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; +bool no_bbom = starts_with_bom(threechars); +assert (no_bbom == false); + ``` + +The typical use of this function is to check the first three bytes of a file. If they form the UTF-8 BOM, we want to skip them before processing the actual UTF-8 encoded text. + + + +##### bool starts_with_bom(std::string_view s) + +Available in version 3.2 and later. Requires a C++ 17 compliant compiler. + +Checks whether a string starts with a UTF-8 byte order mark (BOM) + +```cpp +bool starts_with_bom(std::string_view s); +``` + +`s`: a UTF-8 encoded string. +Return value: `true` if the string starts with a UTF-8 byte order mark; `false` if not. + +Example of use: + +```cpp +string byte_order_mark = {char(0xef), char(0xbb), char(0xbf)}; +string_view byte_order_mark_view(byte_order_mark); +bool bbom = starts_with_bom(byte_order_mark_view); +assert (bbom); +string_view threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; +bool no_bbom = starts_with_bom(threechars); +assert (!no_bbom); + ``` + +The typical use of this function is to check the first three bytes of a file. If they form the UTF-8 BOM, we want to skip them before processing the actual UTF-8 encoded text. + + + +### Types From utf8 Namespace + + +#### utf8::exception + +Available in version 2.3 and later. + +Base class for the exceptions thrown by UTF CPP library functions. + +```cpp +class exception : public std::exception {}; +``` + +Example of use: + +```cpp +try { + code_that_uses_utf_cpp_library(); +} +catch(const utf8::exception& utfcpp_ex) { + cerr << utfcpp_ex.what(); +} +``` + + +#### utf8::invalid_code_point + +Available in version 1.0 and later. + +Thrown by UTF8 CPP functions such as `advance` and `next` if an UTF-8 sequence represents and invalid code point. + +```cpp +class invalid_code_point : public exception { +public: + utfchar32_t code_point() const; +}; +``` + +Member function `code_point()` can be used to determine the invalid code point that caused the exception to be thrown. + + +#### utf8::invalid_utf8 + +Available in version 1.0 and later. + +Thrown by UTF8 CPP functions such as `next` and `prior` if an invalid UTF-8 sequence is detected during decoding. + +```cpp +class invalid_utf8 : public exception { +public: + utfchar8_t utf8_octet() const; +}; +``` + +Member function `utf8_octet()` can be used to determine the beginning of the byte sequence that caused the exception to be thrown. + + +#### utf8::invalid_utf16 + +Available in version 1.0 and later. + +Thrown by UTF8 CPP function `utf16to8` if an invalid UTF-16 sequence is detected during decoding. + +```cpp +class invalid_utf16 : public exception { +public: + utfchar16_t utf16_word() const; +}; +``` + +Member function `utf16_word()` can be used to determine the UTF-16 code unit that caused the exception to be thrown. + + +#### utf8::not_enough_room + +Available in version 1.0 and later. + +Thrown by UTF8 CPP functions such as `next` if the end of the decoded UTF-8 sequence was reached before the code point was decoded. + +```cpp +class not_enough_room : public exception {}; +``` + + +#### utf8::iterator + +Available in version 2.0 and later. + +Adapts the underlying octet iterator to iterate over the sequence of code points, rather than raw octets. + +```cpp +template +class iterator; +``` + + +##### Member functions + +`iterator();` the default constructor; the underlying octet_iterator is constructed with its default constructor. + +`explicit iterator (const octet_iterator& octet_it, const octet_iterator& range_start, const octet_iterator& range_end);` a constructor that initializes the underlying octet_iterator with octet_it and sets the range in which the iterator is considered valid. + +`octet_iterator base () const;` returns the underlying octet_iterator. + +`utfchar32_t operator * () const;` decodes the utf-8 sequence the underlying octet_iterator is pointing to and returns the code point. + +`bool operator == (const iterator& rhs) const;` returns `true` if the two underlying iterators are equal. + +`bool operator != (const iterator& rhs) const;` returns `true` if the two underlying iterators are not equal. + +`iterator& operator ++ ();` the prefix increment - moves the iterator to the next UTF-8 encoded code point. + +`iterator operator ++ (int);` the postfix increment - moves the iterator to the next UTF-8 encoded code point and returns the current one. + +`iterator& operator -- ();` the prefix decrement - moves the iterator to the previous UTF-8 encoded code point. + +`iterator operator -- (int);` the postfix decrement - moves the iterator to the previous UTF-8 encoded code point and returns the current one. + +Example of use: + +```cpp +char* threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; +utf8::iterator it(threechars, threechars, threechars + 9); +utf8::iterator it2 = it; +assert (it2 == it); +assert (*it == 0x10346); +assert (*(++it) == 0x65e5); +assert ((*it++) == 0x65e5); +assert (*it == 0x0448); +assert (it != it2); +utf8::iterator endit (threechars + 9, threechars, threechars + 9); +assert (++it == endit); +assert (*(--it) == 0x0448); +assert ((*it--) == 0x0448); +assert (*it == 0x65e5); +assert (--it == utf8::iterator(threechars, threechars, threechars + 9)); +assert (*it == 0x10346); +``` + +The purpose of `utf8::iterator` adapter is to enable easy iteration as well as the use of STL algorithms with UTF-8 encoded strings. Increment and decrement operators are implemented in terms of `utf8::next()` and `utf8::prior()` functions. + +Note that `utf8::iterator` adapter is a checked iterator. It operates on the range specified in the constructor; any attempt to go out of that range will result in an exception. Even the comparison operators require both iterator object to be constructed against the same range - otherwise an exception is thrown. Typically, the range will be determined by sequence container functions `begin` and `end`, i.e.: + +```cpp +std::string s = "example"; +utf8::iterator i (s.begin(), s.begin(), s.end()); +``` + + +### Functions From utf8::unchecked Namespace + + +#### utf8::unchecked::append + +Available in version 1.0 and later. + +Encodes a 32 bit code point as a UTF-8 sequence of octets and appends the sequence to a UTF-8 string. + +```cpp +template +octet_iterator append(utfchar32_t cp, octet_iterator result); +``` + +`cp`: A 32 bit integer representing a code point to append to the sequence. +`result`: An output iterator to the place in the sequence where to append the code point. +Return value: An iterator pointing to the place after the newly appended sequence. + +Example of use: + +```cpp +unsigned char u[5] = {0,0,0,0,0}; +unsigned char* end = unchecked::append(0x0448, u); +assert (u[0] == 0xd1 && u[1] == 0x88 && u[2] == 0 && u[3] == 0 && u[4] == 0); +``` + +This is a faster but less safe version of `utf8::append`. It does not check for validity of the supplied code point, and may produce an invalid UTF-8 sequence. + + +#### utf8::unchecked::append16 + +Available in version 4.0 and later. + +Encodes a 32 bit code point as a UTF-16 sequence of words and appends the sequence to a UTF-16 string. + +```cpp +template +word_iterator append16(utfchar32_t cp, word_iterator result) +``` + +`cp`: A 32 bit integer representing a code point to append to the sequence. +`result`: An output iterator to the place in the sequence where to append the code point. +Return value: An iterator pointing to the place after the newly appended sequence. + +Example of use: + +```cpp +unsigned short u[5] = {0,0}; +utf8::unchecked::append16(0x0448, u); +assert(u[0], 0x0448); +assert(u[1], 0x0000); +``` + +This is a faster but less safe version of `utf8::append`. It does not check for validity of the supplied code point, and may produce an invalid UTF-8 sequence. + + + +#### utf8::unchecked::next + +Available in version 1.0 and later. + +Given the iterator to the beginning of a UTF-8 sequence, it returns the code point and moves the iterator to the next position. + +```cpp +template +utfchar32_t next(octet_iterator& it); +``` + +`it`: a reference to an iterator pointing to the beginning of an UTF-8 encoded code point. After the function returns, it is incremented to point to the beginning of the next code point. + Return value: the 32 bit representation of the processed UTF-8 code point. + +Example of use: + +```cpp +char* twochars = "\xe6\x97\xa5\xd1\x88"; +char* w = twochars; +int cp = unchecked::next(w); +assert (cp == 0x65e5); +assert (w == twochars + 3); +``` + +This is a faster but less safe version of `utf8::next`. It does not check for validity of the supplied UTF-8 sequence. + + +#### utf8::next16 + +Available in version 4.0 and later. + +Given the iterator to the beginning of the UTF-16 sequence, it returns the code point and moves the iterator to the next position. + +```cpp +template +utfchar32_t next16(word_iterator& it); +``` + +`word_iterator`: an input iterator. +`it`: a reference to an iterator pointing to the beginning of an UTF-16 encoded code point. After the function returns, it is incremented to point to the beginning of the next code point. + +Return value: the 32 bit representation of the processed UTF-16 code point. + +Example of use: + +```cpp +const unsigned short u[3] = {0x65e5, 0xd800, 0xdf46}; +const unsigned short* w = u; +int cp = unchecked::next16(w); +assert (cp, 0x65e5); +assert (w, u + 1); +``` + +This function is typically used to iterate through a UTF-16 encoded string. + +This is a faster but less safe version of `utf8::next16`. It does not check for validity of the supplied UTF-8 sequence. + + + +#### utf8::unchecked::peek_next + +Available in version 2.1 and later. + +Given the iterator to the beginning of a UTF-8 sequence, it returns the code point. + +```cpp +template +utfchar32_t peek_next(octet_iterator it); +``` + +`it`: an iterator pointing to the beginning of an UTF-8 encoded code point. +Return value: the 32 bit representation of the processed UTF-8 code point. + +Example of use: + +```cpp +char* twochars = "\xe6\x97\xa5\xd1\x88"; +char* w = twochars; +int cp = unchecked::peek_next(w); +assert (cp == 0x65e5); +assert (w == twochars); +``` + +This is a faster but less safe version of `utf8::peek_next`. It does not check for validity of the supplied UTF-8 sequence. + + +#### utf8::unchecked::prior + +Available in version 1.02 and later. + +Given a reference to an iterator pointing to an octet in a UTF-8 sequence, it decreases the iterator until it hits the beginning of the previous UTF-8 encoded code point and returns the 32 bits representation of the code point. + +```cpp +template +utfchar32_t prior(octet_iterator& it); +``` + +`it`: a reference pointing to an octet within a UTF-8 encoded string. After the function returns, it is decremented to point to the beginning of the previous code point. + Return value: the 32 bit representation of the previous code point. + +Example of use: + +```cpp +char* twochars = "\xe6\x97\xa5\xd1\x88"; +char* w = twochars + 3; +int cp = unchecked::prior (w); +assert (cp == 0x65e5); +assert (w == twochars); +``` + +This is a faster but less safe version of `utf8::prior`. It does not check for validity of the supplied UTF-8 sequence and offers no boundary checking. + + +#### utf8::unchecked::advance + +Available in version 1.0 and later. + +Advances an iterator by the specified number of code points within an UTF-8 sequence. + +```cpp +template +void advance (octet_iterator& it, distance_type n); +``` + +`it`: a reference to an iterator pointing to the beginning of an UTF-8 encoded code point. After the function returns, it is incremented to point to the nth following code point. +`n`: number of code points `it` should be advanced. A negative value means decrement. + +Example of use: + +```cpp +char* twochars = "\xe6\x97\xa5\xd1\x88"; +char* w = twochars; +unchecked::advance (w, 2); +assert (w == twochars + 5); +``` + +This is a faster but less safe version of `utf8::advance`. It does not check for validity of the supplied UTF-8 sequence and offers no boundary checking. + + +#### utf8::unchecked::distance + +Available in version 1.0 and later. + +Given the iterators to two UTF-8 encoded code points in a sequence, returns the number of code points between them. + +```cpp +template +typename std::iterator_traits::difference_type distance (octet_iterator first, octet_iterator last); +``` + +`first`: an iterator to a beginning of a UTF-8 encoded code point. +`last`: an iterator to a "post-end" of the last UTF-8 encoded code point in the sequence we are trying to determine the length. It can be the beginning of a new code point, or not. +Return value: the distance between the iterators, in code points. + +Example of use: + +```cpp +char* twochars = "\xe6\x97\xa5\xd1\x88"; +size_t dist = utf8::unchecked::distance(twochars, twochars + 5); +assert (dist == 2); +``` + +This is a faster but less safe version of `utf8::distance`. It does not check for validity of the supplied UTF-8 sequence. + + +#### utf8::unchecked::utf16to8 + +Available in version 1.0 and later. + +Converts a UTF-16 encoded string to UTF-8. + +```cpp +template +octet_iterator utf16to8 (u16bit_iterator start, u16bit_iterator end, octet_iterator result); +``` + +`start`: an iterator pointing to the beginning of the UTF-16 encoded string to convert. +`end`: an iterator pointing to pass-the-end of the UTF-16 encoded string to convert. +`result`: an output iterator to the place in the UTF-8 string where to append the result of conversion. +Return value: An iterator pointing to the place after the appended UTF-8 string. + +Example of use: + +```cpp +unsigned short utf16string[] = {0x41, 0x0448, 0x65e5, 0xd834, 0xdd1e}; +vector utf8result; +unchecked::utf16to8(utf16string, utf16string + 5, back_inserter(utf8result)); +assert (utf8result.size() == 10); +``` + +This is a faster but less safe version of `utf8::utf16to8`. It does not check for validity of the supplied UTF-16 sequence. + + +#### utf8::unchecked::utf8to16 + +Available in version 1.0 and later. + +Converts an UTF-8 encoded string to UTF-16 + +```cpp +template +u16bit_iterator utf8to16 (octet_iterator start, octet_iterator end, u16bit_iterator result); +``` + +`start`: an iterator pointing to the beginning of the UTF-8 encoded string to convert. +`end`: an iterator pointing to pass-the-end of the UTF-8 encoded string to convert. +`result`: an output iterator to the place in the UTF-16 string where to append the result of conversion. +Return value: An iterator pointing to the place after the appended UTF-16 string. + +Example of use: + +```cpp +char utf8_with_surrogates[] = "\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"; +vector utf16result; +unchecked::utf8to16(utf8_with_surrogates, utf8_with_surrogates + 9, back_inserter(utf16result)); +assert (utf16result.size() == 4); +assert (utf16result[2] == 0xd834); +assert (utf16result[3] == 0xdd1e); +``` + +This is a faster but less safe version of `utf8::utf8to16`. It does not check for validity of the supplied UTF-8 sequence. + + +#### utf8::unchecked::utf32to8 + +Available in version 1.0 and later. + +Converts a UTF-32 encoded string to UTF-8. + +```cpp +template +octet_iterator utf32to8 (u32bit_iterator start, u32bit_iterator end, octet_iterator result); +``` + +`start`: an iterator pointing to the beginning of the UTF-32 encoded string to convert. +`end`: an iterator pointing to pass-the-end of the UTF-32 encoded string to convert. +`result`: an output iterator to the place in the UTF-8 string where to append the result of conversion. +Return value: An iterator pointing to the place after the appended UTF-8 string. + +Example of use: + +```cpp +int utf32string[] = {0x448, 0x65e5, 0x10346, 0}; +vector utf8result; +utf32to8(utf32string, utf32string + 3, back_inserter(utf8result)); +assert (utf8result.size() == 9); +``` + +This is a faster but less safe version of `utf8::utf32to8`. It does not check for validity of the supplied UTF-32 sequence. + + +#### utf8::unchecked::utf8to32 + +Available in version 1.0 and later. + +Converts a UTF-8 encoded string to UTF-32. + +```cpp +template +u32bit_iterator utf8to32 (octet_iterator start, octet_iterator end, u32bit_iterator result); +``` + +`start`: an iterator pointing to the beginning of the UTF-8 encoded string to convert. +`end`: an iterator pointing to pass-the-end of the UTF-8 encoded string to convert. +`result`: an output iterator to the place in the UTF-32 string where to append the result of conversion. +Return value: An iterator pointing to the place after the appended UTF-32 string. + +Example of use: + +```cpp +char* twochars = "\xe6\x97\xa5\xd1\x88"; +vector utf32result; +unchecked::utf8to32(twochars, twochars + 5, back_inserter(utf32result)); +assert (utf32result.size() == 2); +``` + +This is a faster but less safe version of `utf8::utf8to32`. It does not check for validity of the supplied UTF-8 sequence. + + +#### utf8::unchecked::replace_invalid + +Available in version 3.1 and later. + +Replaces all invalid UTF-8 sequences within a string with a replacement marker. + +```cpp +template +output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, utfchar32_t replacement); +template +output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out); +``` + +`octet_iterator`: an input iterator. +`output_iterator`: an output iterator. +`start`: an iterator pointing to the beginning of the UTF-8 string to look for invalid UTF-8 sequences. +`end`: an iterator pointing to pass-the-end of the UTF-8 string to look for invalid UTF-8 sequences. +`out`: An output iterator to the range where the result of replacement is stored. +`replacement`: A Unicode code point for the replacement marker. The version without this parameter assumes the value `0xfffd` +Return value: An iterator pointing to the place after the UTF-8 string with replaced invalid sequences. + +Example of use: + +```cpp +char invalid_sequence[] = "a\x80\xe0\xa0\xc0\xaf\xed\xa0\x80z"; +vector replace_invalid_result; +unchecked::replace_invalid (invalid_sequence, invalid_sequence + sizeof(invalid_sequence), back_inserter(replace_invalid_result), '?'); +bvalid = utf8::is_valid(replace_invalid_result.begin(), replace_invalid_result.end()); +assert (bvalid); +char* fixed_invalid_sequence = "a????z"; +assert (std::equal(replace_invalid_result.begin(), replace_invalid_result.end(), fixed_invalid_sequence)); +``` + +`replace_invalid` does not perform in-place replacement of invalid sequences. Rather, it produces a copy of the original string with the invalid sequences replaced with a replacement marker. Therefore, `out` must not be in the `[start, end]` range. + +Unlike `utf8::replace_invalid`, this function does not verify validity of the replacement marker. + + +### Types From utf8::unchecked Namespace + + +#### utf8::iterator + +Available in version 2.0 and later. + +Adapts the underlying octet iterator to iterate over the sequence of code points, rather than raw octets. + +```cpp +template +class iterator; +``` + + +##### Member functions + +`iterator();` the default constructor; the underlying octet_iterator is constructed with its default constructor. + +`explicit iterator (const octet_iterator& octet_it);` a constructor that initializes the underlying octet_iterator with `octet_it`. + +`octet_iterator base () const;` returns the underlying octet_iterator. + +`utfchar32_t operator * () const;` decodes the utf-8 sequence the underlying octet_iterator is pointing to and returns the code point. + +`bool operator == (const iterator& rhs) const;` returns `true` if the two underlying iterators are equal. + +`bool operator != (const iterator& rhs) const;` returns `true` if the two underlying iterators are not equal. + +`iterator& operator ++ ();` the prefix increment - moves the iterator to the next UTF-8 encoded code point. + +`iterator operator ++ (int);` the postfix increment - moves the iterator to the next UTF-8 encoded code point and returns the current one. + +`iterator& operator -- ();` the prefix decrement - moves the iterator to the previous UTF-8 encoded code point. + +`iterator operator -- (int);` the postfix decrement - moves the iterator to the previous UTF-8 encoded code point and returns the current one. + +Example of use: + +```cpp +char* threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; +utf8::unchecked::iterator un_it(threechars); +utf8::unchecked::iterator un_it2 = un_it; +assert (un_it2 == un_it); +assert (*un_it == 0x10346); +assert (*(++un_it) == 0x65e5); +assert ((*un_it++) == 0x65e5); +assert (*un_it == 0x0448); +assert (un_it != un_it2); +utf8::::unchecked::iterator un_endit (threechars + 9); +assert (++un_it == un_endit); +assert (*(--un_it) == 0x0448); +assert ((*un_it--) == 0x0448); +assert (*un_it == 0x65e5); +assert (--un_it == utf8::unchecked::iterator(threechars)); +assert (*un_it == 0x10346); +``` + +This is an unchecked version of `utf8::iterator`. It is faster in many cases, but offers no validity or range checks. + diff --git a/extern/ftest b/extern/ftest new file mode 160000 index 000000000..c4ad4af09 --- /dev/null +++ b/extern/ftest @@ -0,0 +1 @@ +Subproject commit c4ad4af0946b73ce1a40cbc72205d15d196c7e06 diff --git a/source/utf8.h b/source/utf8.h new file mode 100644 index 000000000..b51353093 --- /dev/null +++ b/source/utf8.h @@ -0,0 +1,46 @@ +// Copyright 2006 Nemanja Trifunovic + +/* +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + + +#ifndef UTF8_FOR_CPP_2675DCD0_9480_4c0c_B92A_CC14C027B731 +#define UTF8_FOR_CPP_2675DCD0_9480_4c0c_B92A_CC14C027B731 + +/* +To control the C++ language version used by the library, you can define UTF_CPP_CPLUSPLUS macro +and set it to one of the values used by the __cplusplus predefined macro. + +For instance, + #define UTF_CPP_CPLUSPLUS 199711L +will cause the UTF-8 CPP library to use only types and language features available in the C++ 98 standard. +Some library features will be disabled. + +If you leave UTF_CPP_CPLUSPLUS undefined, it will be internally assigned to __cplusplus. +*/ + +#include "utf8/checked.h" +#include "utf8/unchecked.h" + +#endif // header guard diff --git a/source/utf8/checked.h b/source/utf8/checked.h new file mode 100644 index 000000000..98949f8bc --- /dev/null +++ b/source/utf8/checked.h @@ -0,0 +1,359 @@ +// Copyright 2006-2016 Nemanja Trifunovic + +/* +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + + +#ifndef UTF8_FOR_CPP_CHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 +#define UTF8_FOR_CPP_CHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 + +#include "core.h" +#include + +namespace utf8 +{ + // Base for the exceptions that may be thrown from the library + class exception : public ::std::exception { + }; + + // Exceptions that may be thrown from the library functions. + class invalid_code_point : public exception { + utfchar32_t cp; + public: + invalid_code_point(utfchar32_t codepoint) : cp(codepoint) {} + virtual const char* what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE { return "Invalid code point"; } + utfchar32_t code_point() const {return cp;} + }; + + class invalid_utf8 : public exception { + utfchar8_t u8; + public: + invalid_utf8 (utfchar8_t u) : u8(u) {} + invalid_utf8 (char c) : u8(static_cast(c)) {} + virtual const char* what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE { return "Invalid UTF-8"; } + utfchar8_t utf8_octet() const {return u8;} + }; + + class invalid_utf16 : public exception { + utfchar16_t u16; + public: + invalid_utf16 (utfchar16_t u) : u16(u) {} + virtual const char* what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE { return "Invalid UTF-16"; } + utfchar16_t utf16_word() const {return u16;} + }; + + class not_enough_room : public exception { + public: + virtual const char* what() const UTF_CPP_NOEXCEPT UTF_CPP_OVERRIDE { return "Not enough space"; } + }; + + /// The library API - functions intended to be called by the users + + template + octet_iterator append(utfchar32_t cp, octet_iterator result) + { + if (!utf8::internal::is_code_point_valid(cp)) + throw invalid_code_point(cp); + + return internal::append(cp, result); + } + + inline void append(utfchar32_t cp, std::string& s) + { + append(cp, std::back_inserter(s)); + } + + template + word_iterator append16(utfchar32_t cp, word_iterator result) + { + if (!utf8::internal::is_code_point_valid(cp)) + throw invalid_code_point(cp); + + return internal::append16(cp, result); + } + + template + output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, utfchar32_t replacement) + { + while (start != end) { + octet_iterator sequence_start = start; + internal::utf_error err_code = utf8::internal::validate_next(start, end); + switch (err_code) { + case internal::UTF8_OK : + for (octet_iterator it = sequence_start; it != start; ++it) + *out++ = *it; + break; + case internal::NOT_ENOUGH_ROOM: + out = utf8::append (replacement, out); + start = end; + break; + case internal::INVALID_LEAD: + out = utf8::append (replacement, out); + ++start; + break; + case internal::INCOMPLETE_SEQUENCE: + case internal::OVERLONG_SEQUENCE: + case internal::INVALID_CODE_POINT: + out = utf8::append (replacement, out); + ++start; + // just one replacement mark for the sequence + while (start != end && utf8::internal::is_trail(*start)) + ++start; + break; + } + } + return out; + } + + template + inline output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out) + { + static const utfchar32_t replacement_marker = utf8::internal::mask16(0xfffd); + return utf8::replace_invalid(start, end, out, replacement_marker); + } + + inline std::string replace_invalid(const std::string& s, utfchar32_t replacement) + { + std::string result; + replace_invalid(s.begin(), s.end(), std::back_inserter(result), replacement); + return result; + } + + inline std::string replace_invalid(const std::string& s) + { + std::string result; + replace_invalid(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + template + utfchar32_t next(octet_iterator& it, octet_iterator end) + { + utfchar32_t cp = 0; + internal::utf_error err_code = utf8::internal::validate_next(it, end, cp); + switch (err_code) { + case internal::UTF8_OK : + break; + case internal::NOT_ENOUGH_ROOM : + throw not_enough_room(); + case internal::INVALID_LEAD : + case internal::INCOMPLETE_SEQUENCE : + case internal::OVERLONG_SEQUENCE : + throw invalid_utf8(static_cast(*it)); + case internal::INVALID_CODE_POINT : + throw invalid_code_point(cp); + } + return cp; + } + + template + utfchar32_t next16(word_iterator& it, word_iterator end) + { + utfchar32_t cp = 0; + internal::utf_error err_code = utf8::internal::validate_next16(it, end, cp); + if (err_code == internal::NOT_ENOUGH_ROOM) + throw not_enough_room(); + return cp; + } + + template + utfchar32_t peek_next(octet_iterator it, octet_iterator end) + { + return utf8::next(it, end); + } + + template + utfchar32_t prior(octet_iterator& it, octet_iterator start) + { + // can't do much if it == start + if (it == start) + throw not_enough_room(); + + octet_iterator end = it; + // Go back until we hit either a lead octet or start + while (utf8::internal::is_trail(*(--it))) + if (it == start) + throw invalid_utf8(*it); // error - no lead byte in the sequence + return utf8::peek_next(it, end); + } + + template + void advance (octet_iterator& it, distance_type n, octet_iterator end) + { + const distance_type zero(0); + if (n < zero) { + // backward + for (distance_type i = n; i < zero; ++i) + utf8::prior(it, end); + } else { + // forward + for (distance_type i = zero; i < n; ++i) + utf8::next(it, end); + } + } + + template + typename std::iterator_traits::difference_type + distance (octet_iterator first, octet_iterator last) + { + typename std::iterator_traits::difference_type dist; + for (dist = 0; first < last; ++dist) + utf8::next(first, last); + return dist; + } + + template + octet_iterator utf16to8 (u16bit_iterator start, u16bit_iterator end, octet_iterator result) + { + while (start != end) { + utfchar32_t cp = utf8::internal::mask16(*start++); + // Take care of surrogate pairs first + if (utf8::internal::is_lead_surrogate(cp)) { + if (start != end) { + const utfchar32_t trail_surrogate = utf8::internal::mask16(*start++); + if (utf8::internal::is_trail_surrogate(trail_surrogate)) + cp = (cp << 10) + trail_surrogate + internal::SURROGATE_OFFSET; + else + throw invalid_utf16(static_cast(trail_surrogate)); + } + else + throw invalid_utf16(static_cast(cp)); + + } + // Lone trail surrogate + else if (utf8::internal::is_trail_surrogate(cp)) + throw invalid_utf16(static_cast(cp)); + + result = utf8::append(cp, result); + } + return result; + } + + template + u16bit_iterator utf8to16 (octet_iterator start, octet_iterator end, u16bit_iterator result) + { + while (start < end) { + const utfchar32_t cp = utf8::next(start, end); + if (cp > 0xffff) { //make a surrogate pair + *result++ = static_cast((cp >> 10) + internal::LEAD_OFFSET); + *result++ = static_cast((cp & 0x3ff) + internal::TRAIL_SURROGATE_MIN); + } + else + *result++ = static_cast(cp); + } + return result; + } + + template + octet_iterator utf32to8 (u32bit_iterator start, u32bit_iterator end, octet_iterator result) + { + while (start != end) + result = utf8::append(*(start++), result); + + return result; + } + + template + u32bit_iterator utf8to32 (octet_iterator start, octet_iterator end, u32bit_iterator result) + { + while (start < end) + (*result++) = utf8::next(start, end); + + return result; + } + + // The iterator class + template + class iterator { + octet_iterator it; + octet_iterator range_start; + octet_iterator range_end; + public: + typedef utfchar32_t value_type; + typedef utfchar32_t* pointer; + typedef utfchar32_t& reference; + typedef std::ptrdiff_t difference_type; + typedef std::bidirectional_iterator_tag iterator_category; + iterator () {} + explicit iterator (const octet_iterator& octet_it, + const octet_iterator& rangestart, + const octet_iterator& rangeend) : + it(octet_it), range_start(rangestart), range_end(rangeend) + { + if (it < range_start || it > range_end) + throw std::out_of_range("Invalid utf-8 iterator position"); + } + // the default "big three" are OK + octet_iterator base () const { return it; } + utfchar32_t operator * () const + { + octet_iterator temp = it; + return utf8::next(temp, range_end); + } + bool operator == (const iterator& rhs) const + { + if (range_start != rhs.range_start || range_end != rhs.range_end) + throw std::logic_error("Comparing utf-8 iterators defined with different ranges"); + return (it == rhs.it); + } + bool operator != (const iterator& rhs) const + { + return !(operator == (rhs)); + } + iterator& operator ++ () + { + utf8::next(it, range_end); + return *this; + } + iterator operator ++ (int) + { + iterator temp = *this; + utf8::next(it, range_end); + return temp; + } + iterator& operator -- () + { + utf8::prior(it, range_start); + return *this; + } + iterator operator -- (int) + { + iterator temp = *this; + utf8::prior(it, range_start); + return temp; + } + }; // class iterator + +} // namespace utf8 + +#if UTF_CPP_CPLUSPLUS >= 202002L // C++ 20 or later +#include "cpp20.h" +#elif UTF_CPP_CPLUSPLUS >= 201703L // C++ 17 or later +#include "cpp17.h" +#elif UTF_CPP_CPLUSPLUS >= 201103L // C++ 11 or later +#include "cpp11.h" +#endif // C++ 11 or later + +#endif //header guard + diff --git a/source/utf8/core.h b/source/utf8/core.h new file mode 100644 index 000000000..4494c538e --- /dev/null +++ b/source/utf8/core.h @@ -0,0 +1,492 @@ +// Copyright 2006 Nemanja Trifunovic + +/* +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + + +#ifndef UTF8_FOR_CPP_CORE_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 +#define UTF8_FOR_CPP_CORE_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 + +#include +#include +#include + +// Determine the C++ standard version. +// If the user defines UTF_CPP_CPLUSPLUS, use that. +// Otherwise, trust the unreliable predefined macro __cplusplus + +#if !defined UTF_CPP_CPLUSPLUS + #define UTF_CPP_CPLUSPLUS __cplusplus +#endif + +#if UTF_CPP_CPLUSPLUS >= 201103L // C++ 11 or later + #define UTF_CPP_OVERRIDE override + #define UTF_CPP_NOEXCEPT noexcept +#else // C++ 98/03 + #define UTF_CPP_OVERRIDE + #define UTF_CPP_NOEXCEPT throw() +#endif // C++ 11 or later + + +namespace utf8 +{ +// The typedefs for 8-bit, 16-bit and 32-bit code units +#if UTF_CPP_CPLUSPLUS >= 201103L // C++ 11 or later + #if UTF_CPP_CPLUSPLUS >= 202002L // C++ 20 or later + typedef char8_t utfchar8_t; + #else // C++ 11/14/17 + typedef unsigned char utfchar8_t; + #endif + typedef char16_t utfchar16_t; + typedef char32_t utfchar32_t; +#else // C++ 98/03 + typedef unsigned char utfchar8_t; + typedef unsigned short utfchar16_t; + typedef unsigned int utfchar32_t; +#endif // C++ 11 or later + +// Helper code - not intended to be directly called by the library users. May be changed at any time +namespace internal +{ + // Unicode constants + // Leading (high) surrogates: 0xd800 - 0xdbff + // Trailing (low) surrogates: 0xdc00 - 0xdfff + const utfchar16_t LEAD_SURROGATE_MIN = 0xd800u; + const utfchar16_t LEAD_SURROGATE_MAX = 0xdbffu; + const utfchar16_t TRAIL_SURROGATE_MIN = 0xdc00u; + const utfchar16_t TRAIL_SURROGATE_MAX = 0xdfffu; + const utfchar16_t LEAD_OFFSET = 0xd7c0u; // LEAD_SURROGATE_MIN - (0x10000 >> 10) + const utfchar32_t SURROGATE_OFFSET = 0xfca02400u; // 0x10000u - (LEAD_SURROGATE_MIN << 10) - TRAIL_SURROGATE_MIN + + // Maximum valid value for a Unicode code point + const utfchar32_t CODE_POINT_MAX = 0x0010ffffu; + + template + inline utfchar8_t mask8(octet_type oc) + { + return static_cast(0xff & oc); + } + template + inline utfchar16_t mask16(u16_type oc) + { + return static_cast(0xffff & oc); + } + + template + inline bool is_trail(octet_type oc) + { + return ((utf8::internal::mask8(oc) >> 6) == 0x2); + } + + inline bool is_lead_surrogate(utfchar32_t cp) + { + return (cp >= LEAD_SURROGATE_MIN && cp <= LEAD_SURROGATE_MAX); + } + + inline bool is_trail_surrogate(utfchar32_t cp) + { + return (cp >= TRAIL_SURROGATE_MIN && cp <= TRAIL_SURROGATE_MAX); + } + + inline bool is_surrogate(utfchar32_t cp) + { + return (cp >= LEAD_SURROGATE_MIN && cp <= TRAIL_SURROGATE_MAX); + } + + inline bool is_code_point_valid(utfchar32_t cp) + { + return (cp <= CODE_POINT_MAX && !utf8::internal::is_surrogate(cp)); + } + + inline bool is_in_bmp(utfchar32_t cp) + { + return cp < utfchar32_t(0x10000); + } + + template + int sequence_length(octet_iterator lead_it) + { + const utfchar8_t lead = utf8::internal::mask8(*lead_it); + if (lead < 0x80) + return 1; + else if ((lead >> 5) == 0x6) + return 2; + else if ((lead >> 4) == 0xe) + return 3; + else if ((lead >> 3) == 0x1e) + return 4; + else + return 0; + } + + inline bool is_overlong_sequence(utfchar32_t cp, int length) + { + if (cp < 0x80) { + if (length != 1) + return true; + } + else if (cp < 0x800) { + if (length != 2) + return true; + } + else if (cp < 0x10000) { + if (length != 3) + return true; + } + return false; + } + + enum utf_error {UTF8_OK, NOT_ENOUGH_ROOM, INVALID_LEAD, INCOMPLETE_SEQUENCE, OVERLONG_SEQUENCE, INVALID_CODE_POINT}; + + /// Helper for get_sequence_x + template + utf_error increase_safely(octet_iterator& it, const octet_iterator end) + { + if (++it == end) + return NOT_ENOUGH_ROOM; + + if (!utf8::internal::is_trail(*it)) + return INCOMPLETE_SEQUENCE; + + return UTF8_OK; + } + + #define UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(IT, END) {utf_error ret = increase_safely(IT, END); if (ret != UTF8_OK) return ret;} + + /// get_sequence_x functions decode utf-8 sequences of the length x + template + utf_error get_sequence_1(octet_iterator& it, octet_iterator end, utfchar32_t& code_point) + { + if (it == end) + return NOT_ENOUGH_ROOM; + + code_point = utf8::internal::mask8(*it); + + return UTF8_OK; + } + + template + utf_error get_sequence_2(octet_iterator& it, octet_iterator end, utfchar32_t& code_point) + { + if (it == end) + return NOT_ENOUGH_ROOM; + + code_point = utf8::internal::mask8(*it); + + UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) + + code_point = ((code_point << 6) & 0x7ff) + ((*it) & 0x3f); + + return UTF8_OK; + } + + template + utf_error get_sequence_3(octet_iterator& it, octet_iterator end, utfchar32_t& code_point) + { + if (it == end) + return NOT_ENOUGH_ROOM; + + code_point = utf8::internal::mask8(*it); + + UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) + + code_point = ((code_point << 12) & 0xffff) + ((utf8::internal::mask8(*it) << 6) & 0xfff); + + UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) + + code_point += (*it) & 0x3f; + + return UTF8_OK; + } + + template + utf_error get_sequence_4(octet_iterator& it, octet_iterator end, utfchar32_t& code_point) + { + if (it == end) + return NOT_ENOUGH_ROOM; + + code_point = utf8::internal::mask8(*it); + + UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) + + code_point = ((code_point << 18) & 0x1fffff) + ((utf8::internal::mask8(*it) << 12) & 0x3ffff); + + UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) + + code_point += (utf8::internal::mask8(*it) << 6) & 0xfff; + + UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR(it, end) + + code_point += (*it) & 0x3f; + + return UTF8_OK; + } + + #undef UTF8_CPP_INCREASE_AND_RETURN_ON_ERROR + + template + utf_error validate_next(octet_iterator& it, octet_iterator end, utfchar32_t& code_point) + { + if (it == end) + return NOT_ENOUGH_ROOM; + + // Save the original value of it so we can go back in case of failure + // Of course, it does not make much sense with i.e. stream iterators + octet_iterator original_it = it; + + utfchar32_t cp = 0; + // Determine the sequence length based on the lead octet + const int length = utf8::internal::sequence_length(it); + + // Get trail octets and calculate the code point + utf_error err = UTF8_OK; + switch (length) { + case 0: + return INVALID_LEAD; + case 1: + err = utf8::internal::get_sequence_1(it, end, cp); + break; + case 2: + err = utf8::internal::get_sequence_2(it, end, cp); + break; + case 3: + err = utf8::internal::get_sequence_3(it, end, cp); + break; + case 4: + err = utf8::internal::get_sequence_4(it, end, cp); + break; + } + + if (err == UTF8_OK) { + // Decoding succeeded. Now, security checks... + if (utf8::internal::is_code_point_valid(cp)) { + if (!utf8::internal::is_overlong_sequence(cp, length)){ + // Passed! Return here. + code_point = cp; + ++it; + return UTF8_OK; + } + else + err = OVERLONG_SEQUENCE; + } + else + err = INVALID_CODE_POINT; + } + + // Failure branch - restore the original value of the iterator + it = original_it; + return err; + } + + template + inline utf_error validate_next(octet_iterator& it, octet_iterator end) { + utfchar32_t ignored; + return utf8::internal::validate_next(it, end, ignored); + } + + template + utf_error validate_next16(word_iterator& it, word_iterator end, utfchar32_t& code_point) + { + if (it == end) + return NOT_ENOUGH_ROOM; + // Save the original value of it so we can go back in case of failure + // Of course, it does not make much sense with i.e. stream iterators + word_iterator original_it = it; + + utf_error err = UTF8_OK; + + const utfchar16_t first_word = *it++; + if (!is_surrogate(first_word)) { + code_point = first_word; + return UTF8_OK; + } + else { + if (it == end) + err = NOT_ENOUGH_ROOM; + else if (is_lead_surrogate(first_word)) { + const utfchar16_t second_word = *it++; + if (is_trail_surrogate(second_word)) { + code_point = (first_word << 10) + second_word + SURROGATE_OFFSET; + return UTF8_OK; + } else + err = INCOMPLETE_SEQUENCE; + + } else { + err = INVALID_LEAD; + } + } + // error branch + it = original_it; + return err; + } + + // Internal implementation of both checked and unchecked append() function + // This function will be invoked by the overloads below, as they will know + // the octet_type. + template + octet_iterator append(utfchar32_t cp, octet_iterator result) { + if (cp < 0x80) // one octet + *(result++) = static_cast(cp); + else if (cp < 0x800) { // two octets + *(result++) = static_cast((cp >> 6) | 0xc0); + *(result++) = static_cast((cp & 0x3f) | 0x80); + } + else if (cp < 0x10000) { // three octets + *(result++) = static_cast((cp >> 12) | 0xe0); + *(result++) = static_cast(((cp >> 6) & 0x3f) | 0x80); + *(result++) = static_cast((cp & 0x3f) | 0x80); + } + else { // four octets + *(result++) = static_cast((cp >> 18) | 0xf0); + *(result++) = static_cast(((cp >> 12) & 0x3f)| 0x80); + *(result++) = static_cast(((cp >> 6) & 0x3f) | 0x80); + *(result++) = static_cast((cp & 0x3f) | 0x80); + } + return result; + } + + // One of the following overloads will be invoked from the API calls + + // A simple (but dangerous) case: the caller appends byte(s) to a char array + inline char* append(utfchar32_t cp, char* result) { + return append(cp, result); + } + + // Hopefully, most common case: the caller uses back_inserter + // i.e. append(cp, std::back_inserter(str)); + template + std::back_insert_iterator append + (utfchar32_t cp, std::back_insert_iterator result) { + return append, + typename container_type::value_type>(cp, result); + } + + // The caller uses some other kind of output operator - not covered above + // Note that in this case we are not able to determine octet_type + // so we assume it's utfchar8_t; that can cause a conversion warning if we are wrong. + template + octet_iterator append(utfchar32_t cp, octet_iterator result) { + return append(cp, result); + } + + // Internal implementation of both checked and unchecked append16() function + // This function will be invoked by the overloads below, as they will know + // the word_type. + template + word_iterator append16(utfchar32_t cp, word_iterator result) { + if (is_in_bmp(cp)) + *(result++) = static_cast(cp); + else { + // Code points from the supplementary planes are encoded via surrogate pairs + *(result++) = static_cast(LEAD_OFFSET + (cp >> 10)); + *(result++) = static_cast(TRAIL_SURROGATE_MIN + (cp & 0x3FF)); + } + return result; + } + + // Hopefully, most common case: the caller uses back_inserter + // i.e. append16(cp, std::back_inserter(str)); + template + std::back_insert_iterator append16 + (utfchar32_t cp, std::back_insert_iterator result) { + return append16, + typename container_type::value_type>(cp, result); + } + + // The caller uses some other kind of output operator - not covered above + // Note that in this case we are not able to determine word_type + // so we assume it's utfchar16_t; that can cause a conversion warning if we are wrong. + template + word_iterator append16(utfchar32_t cp, word_iterator result) { + return append16(cp, result); + } + +} // namespace internal + + /// The library API - functions intended to be called by the users + + // Byte order mark + const utfchar8_t bom[] = {0xef, 0xbb, 0xbf}; + + template + octet_iterator find_invalid(octet_iterator start, octet_iterator end) + { + octet_iterator result = start; + while (result != end) { + utf8::internal::utf_error err_code = utf8::internal::validate_next(result, end); + if (err_code != internal::UTF8_OK) + return result; + } + return result; + } + + inline const char* find_invalid(const char* str) + { + const char* end = str + std::strlen(str); + return find_invalid(str, end); + } + + inline std::size_t find_invalid(const std::string& s) + { + std::string::const_iterator invalid = find_invalid(s.begin(), s.end()); + return (invalid == s.end()) ? std::string::npos : static_cast(invalid - s.begin()); + } + + template + inline bool is_valid(octet_iterator start, octet_iterator end) + { + return (utf8::find_invalid(start, end) == end); + } + + inline bool is_valid(const char* str) + { + return (*(utf8::find_invalid(str)) == '\0'); + } + + inline bool is_valid(const std::string& s) + { + return is_valid(s.begin(), s.end()); + } + + + + template + inline bool starts_with_bom (octet_iterator it, octet_iterator end) + { + return ( + ((it != end) && (utf8::internal::mask8(*it++)) == bom[0]) && + ((it != end) && (utf8::internal::mask8(*it++)) == bom[1]) && + ((it != end) && (utf8::internal::mask8(*it)) == bom[2]) + ); + } + + inline bool starts_with_bom(const std::string& s) + { + return starts_with_bom(s.begin(), s.end()); + } +} // namespace utf8 + +#endif // header guard + + diff --git a/source/utf8/cpp11.h b/source/utf8/cpp11.h new file mode 100644 index 000000000..691633c84 --- /dev/null +++ b/source/utf8/cpp11.h @@ -0,0 +1,70 @@ +// Copyright 2018 Nemanja Trifunovic + +/* +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + + +#ifndef UTF8_FOR_CPP_a184c22c_d012_11e8_a8d5_f2801f1b9fd1 +#define UTF8_FOR_CPP_a184c22c_d012_11e8_a8d5_f2801f1b9fd1 + +#include "checked.h" + +namespace utf8 +{ + inline void append16(utfchar32_t cp, std::u16string& s) + { + append16(cp, std::back_inserter(s)); + } + + inline std::string utf16to8(const std::u16string& s) + { + std::string result; + utf16to8(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::u16string utf8to16(const std::string& s) + { + std::u16string result; + utf8to16(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::string utf32to8(const std::u32string& s) + { + std::string result; + utf32to8(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::u32string utf8to32(const std::string& s) + { + std::u32string result; + utf8to32(s.begin(), s.end(), std::back_inserter(result)); + return result; + } +} // namespace utf8 + +#endif // header guard + diff --git a/source/utf8/cpp17.h b/source/utf8/cpp17.h new file mode 100644 index 000000000..6e2fcc238 --- /dev/null +++ b/source/utf8/cpp17.h @@ -0,0 +1,96 @@ +// Copyright 2018 Nemanja Trifunovic + +/* +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + + +#ifndef UTF8_FOR_CPP_7e906c01_03a3_4daf_b420_ea7ea952b3c9 +#define UTF8_FOR_CPP_7e906c01_03a3_4daf_b420_ea7ea952b3c9 + +#include "cpp11.h" + +namespace utf8 +{ + inline std::string utf16to8(std::u16string_view s) + { + std::string result; + utf16to8(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::u16string utf8to16(std::string_view s) + { + std::u16string result; + utf8to16(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::string utf32to8(std::u32string_view s) + { + std::string result; + utf32to8(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::u32string utf8to32(std::string_view s) + { + std::u32string result; + utf8to32(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::size_t find_invalid(std::string_view s) + { + std::string_view::const_iterator invalid = find_invalid(s.begin(), s.end()); + return (invalid == s.end()) ? std::string_view::npos : static_cast(invalid - s.begin()); + } + + inline bool is_valid(std::string_view s) + { + return is_valid(s.begin(), s.end()); + } + + inline std::string replace_invalid(std::string_view s, char32_t replacement) + { + std::string result; + replace_invalid(s.begin(), s.end(), std::back_inserter(result), replacement); + return result; + } + + inline std::string replace_invalid(std::string_view s) + { + std::string result; + replace_invalid(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline bool starts_with_bom(std::string_view s) + { + return starts_with_bom(s.begin(), s.end()); + } + +} // namespace utf8 + +#endif // header guard + diff --git a/source/utf8/cpp20.h b/source/utf8/cpp20.h new file mode 100644 index 000000000..07b61d0fb --- /dev/null +++ b/source/utf8/cpp20.h @@ -0,0 +1,124 @@ +// Copyright 2022 Nemanja Trifunovic + +/* +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + + +#ifndef UTF8_FOR_CPP_207e906c01_03a3_4daf_b420_ea7ea952b3c9 +#define UTF8_FOR_CPP_207e906c01_03a3_4daf_b420_ea7ea952b3c9 + +#include "cpp17.h" + +namespace utf8 +{ + inline std::u8string utf16tou8(const std::u16string& s) + { + std::u8string result; + utf16to8(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::u8string utf16tou8(std::u16string_view s) + { + std::u8string result; + utf16to8(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::u16string utf8to16(const std::u8string& s) + { + std::u16string result; + utf8to16(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::u16string utf8to16(const std::u8string_view& s) + { + std::u16string result; + utf8to16(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::u8string utf32tou8(const std::u32string& s) + { + std::u8string result; + utf32to8(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::u8string utf32tou8(const std::u32string_view& s) + { + std::u8string result; + utf32to8(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::u32string utf8to32(const std::u8string& s) + { + std::u32string result; + utf8to32(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::u32string utf8to32(const std::u8string_view& s) + { + std::u32string result; + utf8to32(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline std::size_t find_invalid(const std::u8string& s) + { + std::u8string::const_iterator invalid = find_invalid(s.begin(), s.end()); + return (invalid == s.end()) ? std::string_view::npos : static_cast(invalid - s.begin()); + } + + inline bool is_valid(const std::u8string& s) + { + return is_valid(s.begin(), s.end()); + } + + inline std::u8string replace_invalid(const std::u8string& s, char32_t replacement) + { + std::u8string result; + replace_invalid(s.begin(), s.end(), std::back_inserter(result), replacement); + return result; + } + + inline std::u8string replace_invalid(const std::u8string& s) + { + std::u8string result; + replace_invalid(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + inline bool starts_with_bom(const std::u8string& s) + { + return starts_with_bom(s.begin(), s.end()); + } + +} // namespace utf8 + +#endif // header guard + diff --git a/source/utf8/unchecked.h b/source/utf8/unchecked.h new file mode 100644 index 000000000..65d4948f2 --- /dev/null +++ b/source/utf8/unchecked.h @@ -0,0 +1,287 @@ +// Copyright 2006 Nemanja Trifunovic + +/* +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + + +#ifndef UTF8_FOR_CPP_UNCHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 +#define UTF8_FOR_CPP_UNCHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 + +#include "core.h" + +namespace utf8 +{ + namespace unchecked + { + template + octet_iterator append(utfchar32_t cp, octet_iterator result) + { + return internal::append(cp, result); + } + + template + word_iterator append16(utfchar32_t cp, word_iterator result) + { + return internal::append16(cp, result); + } + + template + output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out, utfchar32_t replacement) + { + while (start != end) { + octet_iterator sequence_start = start; + internal::utf_error err_code = utf8::internal::validate_next(start, end); + switch (err_code) { + case internal::UTF8_OK : + for (octet_iterator it = sequence_start; it != start; ++it) + *out++ = *it; + break; + case internal::NOT_ENOUGH_ROOM: + out = utf8::unchecked::append(replacement, out); + start = end; + break; + case internal::INVALID_LEAD: + out = utf8::unchecked::append(replacement, out); + ++start; + break; + case internal::INCOMPLETE_SEQUENCE: + case internal::OVERLONG_SEQUENCE: + case internal::INVALID_CODE_POINT: + out = utf8::unchecked::append(replacement, out); + ++start; + // just one replacement mark for the sequence + while (start != end && utf8::internal::is_trail(*start)) + ++start; + break; + } + } + return out; + } + + template + inline output_iterator replace_invalid(octet_iterator start, octet_iterator end, output_iterator out) + { + static const utfchar32_t replacement_marker = utf8::internal::mask16(0xfffd); + return utf8::unchecked::replace_invalid(start, end, out, replacement_marker); + } + + inline std::string replace_invalid(const std::string& s, utfchar32_t replacement) + { + std::string result; + replace_invalid(s.begin(), s.end(), std::back_inserter(result), replacement); + return result; + } + + inline std::string replace_invalid(const std::string& s) + { + std::string result; + replace_invalid(s.begin(), s.end(), std::back_inserter(result)); + return result; + } + + template + utfchar32_t next(octet_iterator& it) + { + utfchar32_t cp = utf8::internal::mask8(*it); + switch (utf8::internal::sequence_length(it)) { + case 1: + break; + case 2: + it++; + cp = ((cp << 6) & 0x7ff) + ((*it) & 0x3f); + break; + case 3: + ++it; + cp = ((cp << 12) & 0xffff) + ((utf8::internal::mask8(*it) << 6) & 0xfff); + ++it; + cp += (*it) & 0x3f; + break; + case 4: + ++it; + cp = ((cp << 18) & 0x1fffff) + ((utf8::internal::mask8(*it) << 12) & 0x3ffff); + ++it; + cp += (utf8::internal::mask8(*it) << 6) & 0xfff; + ++it; + cp += (*it) & 0x3f; + break; + } + ++it; + return cp; + } + + template + utfchar32_t peek_next(octet_iterator it) + { + return utf8::unchecked::next(it); + } + + template + utfchar32_t next16(word_iterator& it) + { + utfchar32_t cp = utf8::internal::mask16(*it++); + if (utf8::internal::is_lead_surrogate(cp)) + return (cp << 10) + *it++ + utf8::internal::SURROGATE_OFFSET; + return cp; + } + + template + utfchar32_t prior(octet_iterator& it) + { + while (utf8::internal::is_trail(*(--it))) ; + octet_iterator temp = it; + return utf8::unchecked::next(temp); + } + + template + void advance(octet_iterator& it, distance_type n) + { + const distance_type zero(0); + if (n < zero) { + // backward + for (distance_type i = n; i < zero; ++i) + utf8::unchecked::prior(it); + } else { + // forward + for (distance_type i = zero; i < n; ++i) + utf8::unchecked::next(it); + } + } + + template + typename std::iterator_traits::difference_type + distance(octet_iterator first, octet_iterator last) + { + typename std::iterator_traits::difference_type dist; + for (dist = 0; first < last; ++dist) + utf8::unchecked::next(first); + return dist; + } + + template + octet_iterator utf16to8(u16bit_iterator start, u16bit_iterator end, octet_iterator result) + { + while (start != end) { + utfchar32_t cp = utf8::internal::mask16(*start++); + // Take care of surrogate pairs first + if (utf8::internal::is_lead_surrogate(cp)) { + if (start == end) + return result; + utfchar32_t trail_surrogate = utf8::internal::mask16(*start++); + cp = (cp << 10) + trail_surrogate + internal::SURROGATE_OFFSET; + } + result = utf8::unchecked::append(cp, result); + } + return result; + } + + template + u16bit_iterator utf8to16(octet_iterator start, octet_iterator end, u16bit_iterator result) + { + while (start < end) { + utfchar32_t cp = utf8::unchecked::next(start); + if (cp > 0xffff) { //make a surrogate pair + *result++ = static_cast((cp >> 10) + internal::LEAD_OFFSET); + *result++ = static_cast((cp & 0x3ff) + internal::TRAIL_SURROGATE_MIN); + } + else + *result++ = static_cast(cp); + } + return result; + } + + template + octet_iterator utf32to8(u32bit_iterator start, u32bit_iterator end, octet_iterator result) + { + while (start != end) + result = utf8::unchecked::append(*(start++), result); + + return result; + } + + template + u32bit_iterator utf8to32(octet_iterator start, octet_iterator end, u32bit_iterator result) + { + while (start < end) + (*result++) = utf8::unchecked::next(start); + + return result; + } + + // The iterator class + template + class iterator { + octet_iterator it; + public: + typedef utfchar32_t value_type; + typedef utfchar32_t* pointer; + typedef utfchar32_t& reference; + typedef std::ptrdiff_t difference_type; + typedef std::bidirectional_iterator_tag iterator_category; + iterator () {} + explicit iterator (const octet_iterator& octet_it): it(octet_it) {} + // the default "big three" are OK + octet_iterator base () const { return it; } + utfchar32_t operator * () const + { + octet_iterator temp = it; + return utf8::unchecked::next(temp); + } + bool operator == (const iterator& rhs) const + { + return (it == rhs.it); + } + bool operator != (const iterator& rhs) const + { + return !(operator == (rhs)); + } + iterator& operator ++ () + { + ::std::advance(it, utf8::internal::sequence_length(it)); + return *this; + } + iterator operator ++ (int) + { + iterator temp = *this; + ::std::advance(it, utf8::internal::sequence_length(it)); + return temp; + } + iterator& operator -- () + { + utf8::unchecked::prior(it); + return *this; + } + iterator operator -- (int) + { + iterator temp = *this; + utf8::unchecked::prior(it); + return temp; + } + }; // class iterator + + } // namespace utf8::unchecked +} // namespace utf8 + + +#endif // header guard + diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 000000000..8a00a6a08 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,56 @@ +cmake_minimum_required (VERSION 3.5) +project(utfcpptests LANGUAGES CXX) +enable_testing() + +add_library(${PROJECT_NAME} INTERFACE) + +include_directories("${PROJECT_SOURCE_DIR}/../source") + +add_executable(negative negative.cpp) +add_executable(cpp11 test_cpp11.cpp) +add_executable(cpp17 test_cpp17.cpp) +add_executable(cpp20 test_cpp20.cpp) +add_executable(apitests apitests.cpp) + +add_executable(noexceptionstests noexceptionstests.cpp) + + + +target_compile_options(${PROJECT_NAME} INTERFACE + $<$:/W4> + $<$>:-Wall -Wextra -Wpedantic -Wconversion>) + +target_compile_options(noexceptionstests PUBLIC -fno-exceptions) + +set_target_properties(negative apitests noexceptionstests + PROPERTIES + CXX_STANDARD 98 + CXX_STANDARD_REQUIRED YES + CXX_EXTENSIONS NO) + +set_target_properties(cpp11 + PROPERTIES + CXX_STANDARD 11 + CXX_STANDARD_REQUIRED YES + CXX_EXTENSIONS NO) + +set_target_properties(cpp17 + PROPERTIES + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED YES + CXX_EXTENSIONS NO) + +set_target_properties(cpp20 + PROPERTIES + CXX_STANDARD 20 + CXX_STANDARD_REQUIRED YES + CXX_EXTENSIONS NO) + + +add_test(negative_test negative ${PROJECT_SOURCE_DIR}/test_data/utf8_invalid.txt) +add_test(cpp11_test cpp11) +add_test(cpp17_test cpp17) +add_test(cpp20_test cpp20) +add_test(api_test apitests) +add_test(noexceptions_test noexceptionstests) + diff --git a/tests/apitests.cpp b/tests/apitests.cpp new file mode 100644 index 000000000..083266d7d --- /dev/null +++ b/tests/apitests.cpp @@ -0,0 +1,6 @@ +#include "../extern/ftest/ftest.h" + +#include "test_checked_api.h" +#include "test_checked_iterator.h" +#include "test_unchecked_api.h" +#include "test_unchecked_iterator.h" diff --git a/tests/docker/Dockerfile b/tests/docker/Dockerfile new file mode 100644 index 000000000..dcdd47d1d --- /dev/null +++ b/tests/docker/Dockerfile @@ -0,0 +1,5 @@ +FROM gcc:12.2 + +RUN apt-get update \ + && apt-get install -y make g++ cmake git \ + && rm -rf /var/lib/apt/lists/* diff --git a/tests/negative.cpp b/tests/negative.cpp new file mode 100644 index 000000000..f1bcc993e --- /dev/null +++ b/tests/negative.cpp @@ -0,0 +1,59 @@ +#include "utf8.h" +using namespace utf8; + +#include +#include +#include +#include +using namespace std; + +const unsigned INVALID_LINES[] = { 75, 76, 83, 84, 85, 93, 102, 103, 105, 106, 107, 108, 109, 110, 114, 115, 116, 117, 124, 125, 130, 135, 140, 145, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 169, 175, 176, 177, 207, 208, 209, 210, 211, 220, 221, 222, 223, 224, 232, 233, 234, 235, 236, 247, 248, 249, 250, 251, 252, 253, 257, 258, 259, 260, 261, 262, 263, 264}; +const unsigned* INVALID_LINES_END = INVALID_LINES + sizeof(INVALID_LINES)/sizeof(unsigned); + +int main(int argc, char** argv) +{ + string test_file_path; + if (argc == 2) + test_file_path = argv[1]; + else { + cout << "Wrong number of arguments" << endl; + return 1; + } + // Open the test file + ifstream fs8(test_file_path.c_str()); + if (!fs8.is_open()) { + cout << "Could not open " << test_file_path << endl; + return 1; + } + + // Read it line by line + unsigned int line_count = 0; + char byte; + while (!fs8.eof()) { + string line; + while ((byte = static_cast(fs8.get())) != '\n' && !fs8.eof()) + line.push_back(byte); + + line_count++; + bool expected_valid = (find(INVALID_LINES, INVALID_LINES_END, line_count) == INVALID_LINES_END); + // Print out lines that contain unexpected invalid UTF-8 + if (!is_valid(line.begin(), line.end())) { + if (expected_valid) { + cout << "Unexpected invalid utf-8 at line " << line_count << '\n'; + return 1; + } + + // try fixing it: + string fixed_line; + replace_invalid(line.begin(), line.end(), back_inserter(fixed_line)); + if (!is_valid(fixed_line.begin(), fixed_line.end())) { + cout << "replace_invalid() resulted in an invalid utf-8 at line " << line_count << '\n'; + return 1; + } + } + else if (!expected_valid) { + cout << "Invalid utf-8 NOT detected at line " << line_count << '\n'; + return 1; + } + } +} diff --git a/tests/noexceptionstests.cpp b/tests/noexceptionstests.cpp new file mode 100644 index 000000000..108ee750c --- /dev/null +++ b/tests/noexceptionstests.cpp @@ -0,0 +1,4 @@ +#include "../extern/ftest/ftest.h" + +#include "test_unchecked_api.h" +#include "test_unchecked_iterator.h" diff --git a/tests/test_checked_api.h b/tests/test_checked_api.h new file mode 100644 index 000000000..54e9cf8f0 --- /dev/null +++ b/tests/test_checked_api.h @@ -0,0 +1,233 @@ +#ifndef UTF8_FOR_CPP_TEST_CHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 +#define UTF8_FOR_CPP_TEST_CHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 + +#include "utf8.h" + +#include +#include +using namespace utf8; +using namespace std; + + +TEST(CheckedAPITests, test_append) +{ + unsigned char u[5] = {0,0,0,0,0}; + append(0x0448, u); + EXPECT_EQ (u[0], 0xd1); + EXPECT_EQ (u[1], 0x88); + EXPECT_EQ (u[2], 0); + EXPECT_EQ (u[3], 0); + EXPECT_EQ (u[4], 0); + + append(0x65e5, u); + EXPECT_EQ (u[0], 0xe6); + EXPECT_EQ (u[1], 0x97); + EXPECT_EQ (u[2], 0xa5); + EXPECT_EQ (u[3], 0); + EXPECT_EQ (u[4], 0); + + append(0x3044, u); + EXPECT_EQ (u[0], 0xe3); + EXPECT_EQ (u[1], 0x81); + EXPECT_EQ (u[2], 0x84); + EXPECT_EQ (u[3], 0); + EXPECT_EQ (u[4], 0); + + append(0x10346, u); + EXPECT_EQ (u[0], 0xf0); + EXPECT_EQ (u[1], 0x90); + EXPECT_EQ (u[2], 0x8d); + EXPECT_EQ (u[3], 0x86); + EXPECT_EQ (u[4], 0); + + // Ensure no warnings with plain char + char c[2] = {0,0}; + append('a', c); + EXPECT_EQ (c[0], 'a'); + EXPECT_EQ (c[1], 0); +} + +TEST(CheckedAPITests, test_append16) +{ + utfchar16_t u[5] = {0,0}; + append16(0x0448, u); + EXPECT_EQ (u[0], 0x0448); + EXPECT_EQ (u[1], 0x0000); + + append16(0x65e5, u); + EXPECT_EQ (u[0], 0x65e5); + EXPECT_EQ (u[1], 0x0000); + + append16(0x10346, u); + EXPECT_EQ (u[0], 0xd800); + EXPECT_EQ (u[1], 0xdf46); +} + +TEST(CheckedAPITests, test_next) +{ + const char* twochars = "\xe6\x97\xa5\xd1\x88"; + const char* w = twochars; + unsigned int cp = next(w, twochars + 6); + EXPECT_EQ (cp, 0x65e5); + EXPECT_EQ (w, twochars + 3); + + const char* threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; + w = threechars; + + cp = next(w, threechars + 9); + EXPECT_EQ (cp, 0x10346); + EXPECT_EQ (w, threechars + 4); + + cp = next(w, threechars + 9); + EXPECT_EQ (cp, 0x65e5); + EXPECT_EQ (w, threechars + 7); + + cp = next(w, threechars + 9); + EXPECT_EQ (cp, 0x0448); + EXPECT_EQ (w, threechars + 9); +} + +TEST(CheckedAPITests, test_next16) +{ + const utfchar16_t u[3] = {0x65e5, 0xd800, 0xdf46}; + const utfchar16_t* w = u; + utf8::utfchar32_t cp = next16(w, w + 3); + EXPECT_EQ (cp, 0x65e5); + EXPECT_EQ (w, u + 1); + + cp = next16(w, w + 2); + EXPECT_EQ (cp, 0x10346); + EXPECT_EQ (w, u + 3); +} + +TEST(CheckedAPITests, test_peek_next) +{ + const char* const cw = "\xe6\x97\xa5\xd1\x88"; + unsigned int cp = peek_next(cw, cw + 6); + EXPECT_EQ (cp, 0x65e5); +} + +TEST(CheckedAPITests, test_prior) +{ + const char* twochars = "\xe6\x97\xa5\xd1\x88"; + const char* w = twochars + 3; + unsigned int cp = prior (w, twochars); + EXPECT_EQ (cp, 0x65e5); + EXPECT_EQ (w, twochars); + + const char* threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; + w = threechars + 9; + cp = prior(w, threechars); + EXPECT_EQ (cp, 0x0448); + EXPECT_EQ (w, threechars + 7); + cp = prior(w, threechars); + EXPECT_EQ (cp, 0x65e5); + EXPECT_EQ (w, threechars + 4); + cp = prior(w, threechars); + EXPECT_EQ (cp, 0x10346); + EXPECT_EQ (w, threechars); +} + +TEST(CheckedAPITests, test_advance) +{ + const char* threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; + const char* w = threechars; + advance(w, 2, threechars + 9); + EXPECT_EQ(w, threechars + 7); + advance(w, -2, threechars); + EXPECT_EQ(w, threechars); + advance(w, 3, threechars + 9); + EXPECT_EQ(w, threechars + 9); + advance(w, -2, threechars); + EXPECT_EQ(w, threechars + 4); + advance(w, -1, threechars); + EXPECT_EQ(w, threechars); +} + +TEST(CheckedAPITests, test_distance) +{ + const char* twochars = "\xe6\x97\xa5\xd1\x88"; + size_t dist = static_cast(utf8::distance(twochars, twochars + 5)); + EXPECT_EQ (dist, 2); +} + +TEST(CheckedAPITests, test_utf32to8) +{ + unsigned int utf32string[] = {0x448, 0x65E5, 0x10346, 0}; + string utf8result; + utf32to8(utf32string, utf32string + 3, back_inserter(utf8result)); + EXPECT_EQ (utf8result.size(), 9); +} + +TEST(CheckedAPITests, test_utf8to32) +{ + const char* twochars = "\xe6\x97\xa5\xd1\x88"; + vector utf32result; + utf8to32(twochars, twochars + 5, back_inserter(utf32result)); + EXPECT_EQ (utf32result.size(), 2); +} + +TEST(CheckedAPITests, test_utf16to8) +{ + unsigned short utf16string[] = {0x41, 0x0448, 0x65e5, 0xd834, 0xdd1e}; + string utf8result; + utf16to8(utf16string, utf16string + 5, back_inserter(utf8result)); + EXPECT_EQ (utf8result.size(), 10); +} + +TEST(CheckedAPITests, test_utf8to16) +{ + char utf8_with_surrogates[] = "\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"; + vector utf16result; + utf8to16(utf8_with_surrogates, utf8_with_surrogates + 9, back_inserter(utf16result)); + EXPECT_EQ (utf16result.size(), 4); + EXPECT_EQ (utf16result[2], 0xd834); + EXPECT_EQ (utf16result[3], 0xdd1e); +} + +TEST(CheckedAPITests, test_replace_invalid) +{ + char invalid_sequence[] = "a\x80\xe0\xa0\xc0\xaf\xed\xa0\x80z"; + vector replace_invalid_result; + replace_invalid (invalid_sequence, invalid_sequence + sizeof(invalid_sequence), std::back_inserter(replace_invalid_result), '?'); + bool bvalid = is_valid(replace_invalid_result.begin(), replace_invalid_result.end()); + EXPECT_TRUE (bvalid); + const char fixed_invalid_sequence[] = "a????z"; + EXPECT_EQ (sizeof(fixed_invalid_sequence), replace_invalid_result.size()); + EXPECT_TRUE (std::equal(replace_invalid_result.begin(), replace_invalid_result.begin() + sizeof(fixed_invalid_sequence), fixed_invalid_sequence)); +} + +TEST(CheckedAPITests, test_find_invalid) +{ + char utf_invalid[] = "\xe6\x97\xa5\xd1\x88\xfa"; + const char* invalid = find_invalid(utf_invalid, utf_invalid + 6); + EXPECT_EQ (invalid, utf_invalid + 5); + invalid = find_invalid(utf_invalid); + EXPECT_EQ (invalid, utf_invalid + 5); +} + +TEST(CheckedAPITests, test_is_valid) +{ + char utf_invalid[] = "\xe6\x97\xa5\xd1\x88\xfa"; + bool bvalid = is_valid(utf_invalid, utf_invalid + 6); + EXPECT_FALSE (bvalid); + bvalid = is_valid(utf_invalid); + EXPECT_FALSE (bvalid); + char utf8_with_surrogates[] = "\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"; + bvalid = is_valid(utf8_with_surrogates, utf8_with_surrogates + 9); + EXPECT_TRUE (bvalid); + bvalid = is_valid(utf8_with_surrogates); + EXPECT_TRUE (bvalid); +} + +TEST(CheckedAPITests, test_starts_with_bom) +{ + unsigned char byte_order_mark[] = {0xef, 0xbb, 0xbf}; + bool bbom = starts_with_bom(byte_order_mark, byte_order_mark + sizeof(byte_order_mark)); + EXPECT_TRUE (bbom); + const char* threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; + bool no_bbom = starts_with_bom(threechars, threechars + sizeof(threechars)); + EXPECT_FALSE (no_bbom); +} + +#endif diff --git a/tests/test_checked_iterator.h b/tests/test_checked_iterator.h new file mode 100644 index 000000000..2829a734e --- /dev/null +++ b/tests/test_checked_iterator.h @@ -0,0 +1,35 @@ +#ifndef UTF8_FOR_CPP_TEST_CHECKED_ITERATOR_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 +#define UTF8_FOR_CPP_TEST_CHECKED_ITERATOR_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 + +#include "utf8.h" + +using namespace utf8; + + +TEST(CheckedIteratrTests, test_increment) +{ + const char* threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; + utf8::iterator it(threechars, threechars, threechars + 9); + utf8::iterator it2 = it; + EXPECT_EQ (it2, it); + EXPECT_EQ (*it, 0x10346); + EXPECT_EQ (*(++it), 0x65e5); + EXPECT_EQ ((*it++), 0x65e5); + EXPECT_EQ (*it, 0x0448); + EXPECT_NE (it, it2); + utf8::iterator endit (threechars + 9, threechars, threechars + 9); + EXPECT_EQ (++it, endit); +} + +TEST(CheckedIteratrTests, test_decrement) +{ + const char* threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; + utf8::iterator it(threechars+9, threechars, threechars + 9); + EXPECT_EQ (*(--it), 0x0448); + EXPECT_EQ ((*it--), 0x0448); + EXPECT_EQ (*it, 0x65e5); + EXPECT_EQ (--it, utf8::iterator(threechars, threechars, threechars + 9)); + EXPECT_EQ (*it, 0x10346); +} + +#endif diff --git a/tests/test_cpp11.cpp b/tests/test_cpp11.cpp new file mode 100644 index 000000000..e52196682 --- /dev/null +++ b/tests/test_cpp11.cpp @@ -0,0 +1,122 @@ +#include "../extern/ftest/ftest.h" +#include "utf8.h" +#include +using namespace utf8; +using namespace std; + +#if __cplusplus >= 201103L // C++ 11 or later + +TEST(CPP11APITests, test_append) +{ + string u; + append(0x0448, u); + EXPECT_EQ (u[0], char(0xd1)); + EXPECT_EQ (u[1], char(0x88)); + EXPECT_EQ (u.length(), 2); + + u.clear(); + append(0x65e5, u); + EXPECT_EQ (u[0], char(0xe6)); + EXPECT_EQ (u[1], char(0x97)); + EXPECT_EQ (u[2], char(0xa5)); + EXPECT_EQ (u.length(), 3); + + u.clear(); + append(0x3044, u); + EXPECT_EQ (u[0], char(0xe3)); + EXPECT_EQ (u[1], char(0x81)); + EXPECT_EQ (u[2], char(0x84)); + EXPECT_EQ (u.length(), 3); + + u.clear(); + append(0x10346, u); + EXPECT_EQ (u[0], char(0xf0)); + EXPECT_EQ (u[1], char(0x90)); + EXPECT_EQ (u[2], char(0x8d)); + EXPECT_EQ (u[3], char(0x86)); + EXPECT_EQ (u.length(), 4); +} + +TEST(CPP11APITests, test_append16) +{ + u16string u; + append16(0x0448, u); + EXPECT_EQ (u[0], char16_t(0x0448)); + EXPECT_EQ (u.length(), 1); +} + +TEST(CPP11APITests, test_utf16to8) +{ + u16string utf16string = {0x41, 0x0448, 0x65e5, 0xd834, 0xdd1e}; + string u = utf16to8(utf16string); + EXPECT_EQ (u.size(), 10); + + u16string h16 = u"h!"; + string h8; + utf8::unchecked::utf16to8(h16.begin(), h16.end(), std::back_inserter(h8)); + EXPECT_EQ (h8, "h!"); +} + +TEST(CPP11APITests, test_utf8to16) +{ + string utf8_with_surrogates = "\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"; + u16string utf16result = utf8to16(utf8_with_surrogates); + EXPECT_EQ (utf16result.size(), 4); + EXPECT_EQ (utf16result[2], 0xd834); + EXPECT_EQ (utf16result[3], 0xdd1e); + // Just to make sure it compiles with string literals + utf8to16(u8"simple"); + utf8to16("simple"); +} + +TEST(CPP11APITests, test_utf32to8) +{ + u32string utf32string = {0x448, 0x65E5, 0x10346}; + string utf8result = utf32to8(utf32string); + EXPECT_EQ (utf8result.size(), 9); +} + +TEST(CPP11APITests, test_utf8to32) +{ + const char* twochars = "\xe6\x97\xa5\xd1\x88"; + u32string utf32result = utf8to32(twochars); + EXPECT_EQ (utf32result.size(), 2); +} + +TEST(CPP11APITests, test_find_invalid) +{ + string utf_invalid = "\xe6\x97\xa5\xd1\x88\xfa"; + auto invalid = find_invalid(utf_invalid); + EXPECT_EQ (invalid, 5); +} + +TEST(CPP11APITests, test_is_valid) +{ + string utf_invalid = "\xe6\x97\xa5\xd1\x88\xfa"; + bool bvalid = is_valid(utf_invalid); + EXPECT_FALSE (bvalid); + string utf8_with_surrogates = "\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"; + bvalid = is_valid(utf8_with_surrogates); + EXPECT_TRUE (bvalid); +} + +TEST(CPP11APITests, test_replace_invalid) +{ + string invalid_sequence = "a\x80\xe0\xa0\xc0\xaf\xed\xa0\x80z"; + string replace_invalid_result = replace_invalid(invalid_sequence, '?'); + bool bvalid = is_valid(replace_invalid_result); + EXPECT_TRUE (bvalid); + const string fixed_invalid_sequence = "a????z"; + EXPECT_EQ(fixed_invalid_sequence, replace_invalid_result); +} + +TEST(CPP11APITests, test_starts_with_bom) +{ + string byte_order_mark = {char(0xef), char(0xbb), char(0xbf)}; + bool bbom = starts_with_bom(byte_order_mark); + EXPECT_TRUE (bbom); + string threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; + bool no_bbom = starts_with_bom(threechars); + EXPECT_FALSE (no_bbom); +} +#endif // C++ 11 or later diff --git a/tests/test_cpp17.cpp b/tests/test_cpp17.cpp new file mode 100644 index 000000000..a38e6f716 --- /dev/null +++ b/tests/test_cpp17.cpp @@ -0,0 +1,88 @@ +#include "../extern/ftest/ftest.h" +#include "utf8.h" +#include +using namespace utf8; +using namespace std; + +#if __cplusplus >= 201703L // C++ 17 or later + + +TEST(CPP17APITests, test_utf16to8) +{ + u16string utf16string = {0x41, 0x0448, 0x65e5, 0xd834, 0xdd1e}; + u16string_view utf16stringview(utf16string); + string u = utf16to8(utf16stringview); + EXPECT_EQ (u.size(), 10); +} + +TEST(CPP17APITests, test_utf8to16) +{ + string_view utf8_with_surrogates = "\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"; + u16string utf16result = utf8to16(utf8_with_surrogates); + EXPECT_EQ (utf16result.size(), 4); + EXPECT_EQ (utf16result[2], 0xd834); + EXPECT_EQ (utf16result[3], 0xdd1e); +} + +TEST(CPP17APITests, test_utf32to8) +{ + u32string utf32string = {0x448, 0x65E5, 0x10346}; + u32string_view utf32stringview(utf32string); + string utf8result = utf32to8(utf32stringview); + EXPECT_EQ (utf8result.size(), 9); +} + +TEST(CPP17APITests, test_utf8to32) +{ + string_view twochars = "\xe6\x97\xa5\xd1\x88"; + u32string utf32result = utf8to32(twochars); + EXPECT_EQ (utf32result.size(), 2); +} + +TEST(CPP17APITests, test_find_invalid) +{ + string_view utf_invalid = "\xe6\x97\xa5\xd1\x88\xfa"; + auto invalid = find_invalid(utf_invalid); + EXPECT_EQ (invalid, 5); +} + +TEST(CPP17APITests, test_is_valid) +{ + string_view utf_invalid = "\xe6\x97\xa5\xd1\x88\xfa"; + bool bvalid = is_valid(utf_invalid); + EXPECT_FALSE (bvalid); + string_view utf8_with_surrogates = "\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"; + bvalid = is_valid(utf8_with_surrogates); + EXPECT_TRUE (bvalid); +} + +TEST(CPP17APITests, test_replace_invalid) +{ + string_view invalid_sequence = "a\x80\xe0\xa0\xc0\xaf\xed\xa0\x80z"; + string replace_invalid_result = replace_invalid(invalid_sequence, '?'); + bool bvalid = is_valid(replace_invalid_result); + EXPECT_TRUE (bvalid); + const string fixed_invalid_sequence = "a????z"; + EXPECT_EQ(fixed_invalid_sequence, replace_invalid_result); +} + +TEST(CPP17APITests, test_starts_with_bom) +{ + string byte_order_mark = {char(0xef), char(0xbb), char(0xbf)}; + string_view byte_order_mark_view(byte_order_mark); + bool bbom = starts_with_bom(byte_order_mark_view); + EXPECT_TRUE (bbom); + string_view threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; + bool no_bbom = starts_with_bom(threechars); + EXPECT_FALSE (no_bbom); +} + +TEST(CPP17APITests, string_class_and_literals) +{ + const char* twochars = u8"ab"; + EXPECT_TRUE (is_valid(twochars)); + const string two_chars_string(twochars); + EXPECT_TRUE (is_valid(two_chars_string)); +} + +#endif // C++ 11 or later diff --git a/tests/test_cpp20.cpp b/tests/test_cpp20.cpp new file mode 100644 index 000000000..50dbe30ac --- /dev/null +++ b/tests/test_cpp20.cpp @@ -0,0 +1,77 @@ +#include "../extern/ftest/ftest.h" +#define UTF_CPP_CPLUSPLUS 202002L +#include "utf8.h" +#include +using namespace utf8; +using namespace std; + +TEST(CPP20APITests, test_utf16tou8) +{ + u16string utf16string = {0x41, 0x0448, 0x65e5, 0xd834, 0xdd1e}; + u16string_view utf16stringview{utf16string}; + u8string u = utf16tou8(utf16string); + EXPECT_EQ (u.size(), 10); + u = utf16tou8(utf16stringview); + EXPECT_EQ (u.size(), 10); +} + +TEST(CPP20APITests, tes20t_utf8to16) +{ + u8string utf8_with_surrogates{u8"\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"}; + u16string utf16result = utf8to16(utf8_with_surrogates); + EXPECT_EQ (utf16result.size(), 4); + EXPECT_EQ (utf16result[2], 0xd834); + EXPECT_EQ (utf16result[3], 0xdd1e); +} + +TEST(CPP20APITests, test_utf32tou8) +{ + u32string utf32string = {0x448, 0x65E5, 0x10346}; + u32string_view utf32stringview{utf32string}; + u8string utf8result = utf32tou8(utf32stringview); + EXPECT_EQ (utf8result.size(), 9); +} + +TEST(CPP20APITests, test_utf8to32) +{ + u8string twochars = u8"\xe6\x97\xa5\xd1\x88"; + u32string utf32result = utf8to32(twochars); + EXPECT_EQ (utf32result.size(), 2); +} + +TEST(CPP20APITests, test_find_invalid) +{ + u8string utf_invalid = u8"\xe6\x97\xa5\xd1\x88\xfa"; + auto invalid = find_invalid(utf_invalid); + EXPECT_EQ (invalid, 5); +} + +TEST(CPP20APITests, test_is_valid) +{ + u8string utf_invalid = u8"\xe6\x97\xa5\xd1\x88\xfa"; + bool bvalid = is_valid(utf_invalid); + EXPECT_FALSE (bvalid); + u8string utf8_with_surrogates = u8"\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"; + bvalid = is_valid(utf8_with_surrogates); + EXPECT_TRUE (bvalid); +} + +TEST(CPP20APITests, test_replace_invalid) +{ + u8string invalid_sequence = u8"a\x80\xe0\xa0\xc0\xaf\xed\xa0\x80z"; + u8string replace_invalid_result = replace_invalid(invalid_sequence, u8'?'); + bool bvalid = is_valid(replace_invalid_result); + EXPECT_TRUE (bvalid); + const u8string fixed_invalid_sequence = u8"a????z"; + EXPECT_EQ(fixed_invalid_sequence, replace_invalid_result); +} + +TEST(CPP20APITests, test_starts_with_bom) +{ + u8string byte_order_mark = u8"\xef\xbb\xbf"; + bool bbom = starts_with_bom(byte_order_mark); + EXPECT_TRUE (bbom); + u8string threechars = u8"\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; + bool no_bbom = starts_with_bom(threechars); + EXPECT_FALSE (no_bbom); +} diff --git a/tests/test_data/utf8_invalid.txt b/tests/test_data/utf8_invalid.txt new file mode 100644 index 0000000000000000000000000000000000000000..ae83159328313d3ba57b4f51ccb96db3dbfd79f1 GIT binary patch literal 20010 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 VE;t6T_-vE^`IE6xPXA%#{2v5ASmOWy literal 0 HcmV?d00001 diff --git a/tests/test_unchecked_api.h b/tests/test_unchecked_api.h new file mode 100644 index 000000000..aa0cf697b --- /dev/null +++ b/tests/test_unchecked_api.h @@ -0,0 +1,198 @@ +#ifndef UTF8_FOR_CPP_TEST_UNCHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 +#define UTF8_FOR_CPP_TEST_UNCHECKED_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 + +#include "utf8/unchecked.h" + +#include +#include + +using namespace std; + +TEST(UnCheckedAPITests, test_append) +{ + unsigned char u[5] = {0,0,0,0,0}; + utf8::unchecked::append(0x0448, u); + EXPECT_EQ (u[0], 0xd1); + EXPECT_EQ (u[1], 0x88); + EXPECT_EQ (u[2], 0); + EXPECT_EQ (u[3], 0); + EXPECT_EQ (u[4], 0); + + utf8::unchecked::append(0x65e5, u); + EXPECT_EQ (u[0], 0xe6); + EXPECT_EQ (u[1], 0x97); + EXPECT_EQ (u[2], 0xa5); + EXPECT_EQ (u[3], 0); + EXPECT_EQ (u[4], 0); + + utf8::unchecked::append(0x3044, u); + EXPECT_EQ (u[0], 0xe3); + EXPECT_EQ (u[1], 0x81); + EXPECT_EQ (u[2], 0x84); + EXPECT_EQ (u[3], 0); + EXPECT_EQ (u[4], 0); + + utf8::unchecked::append(0x10346, u); + EXPECT_EQ (u[0], 0xf0); + EXPECT_EQ (u[1], 0x90); + EXPECT_EQ (u[2], 0x8d); + EXPECT_EQ (u[3], 0x86); + EXPECT_EQ (u[4], 0); +} + +TEST(UnCheckedAPITests, test_append16) +{ + unsigned short u[5] = {0,0}; + utf8::unchecked::append16(0x0448, u); + EXPECT_EQ (u[0], 0x0448); + EXPECT_EQ (u[1], 0x0000); + + utf8::unchecked::append16(0x65e5, u); + EXPECT_EQ (u[0], 0x65e5); + EXPECT_EQ (u[1], 0x0000); + + utf8::unchecked::append16(0x10346, u); + EXPECT_EQ (u[0], 0xd800); + EXPECT_EQ (u[1], 0xdf46); +} + +TEST(UnCheckedAPITests, test_next) +{ + const char* twochars = "\xe6\x97\xa5\xd1\x88"; + const char* w = twochars; + unsigned int cp = utf8::unchecked::next(w); + EXPECT_EQ (cp, 0x65e5); + EXPECT_EQ (w, twochars + 3); + + const char* threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; + w = threechars; + + cp = utf8::unchecked::next(w); + EXPECT_EQ (cp, 0x10346); + EXPECT_EQ (w, threechars + 4); + + cp = utf8::unchecked::next(w); + EXPECT_EQ (cp, 0x65e5); + EXPECT_EQ (w, threechars + 7); + + cp = utf8::unchecked::next(w); + EXPECT_EQ (cp, 0x0448); + EXPECT_EQ (w, threechars + 9); +} + +TEST(UnCheckedAPITests, test_next16) +{ + const utf8::utfchar16_t u[3] = {0x65e5, 0xd800, 0xdf46}; + const utf8::utfchar16_t* w = u; + utf8::utfchar32_t cp = utf8::unchecked::next16(w); + EXPECT_EQ (cp, 0x65e5); + EXPECT_EQ (w, u + 1); + + cp = utf8::unchecked::next16(w); + EXPECT_EQ (cp, 0x10346); + EXPECT_EQ (w, u + 3); +} + +TEST(UnCheckedAPITests, test_peek_next) +{ + const char* const cw = "\xe6\x97\xa5\xd1\x88"; + unsigned int cp = utf8::unchecked::peek_next(cw); + EXPECT_EQ (cp, 0x65e5); +} + +TEST(UnCheckedAPITests, test_prior) +{ + const char* twochars = "\xe6\x97\xa5\xd1\x88"; + const char* w = twochars + 3; + unsigned int cp = utf8::unchecked::prior (w); + EXPECT_EQ (cp, 0x65e5); + EXPECT_EQ (w, twochars); + + const char* threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; + w = threechars + 9; + cp = utf8::unchecked::prior(w); + EXPECT_EQ (cp, 0x0448); + EXPECT_EQ (w, threechars + 7); + cp = utf8::unchecked::prior(w); + EXPECT_EQ (cp, 0x65e5); + EXPECT_EQ (w, threechars + 4); + cp = utf8::unchecked::prior(w); + EXPECT_EQ (cp, 0x10346); + EXPECT_EQ (w, threechars); +} + +TEST(UnCheckedAPITests, test_advance) +{ + const char* threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; + const char* w = threechars; + utf8::unchecked::advance(w, 2); + EXPECT_EQ(w, threechars + 7); + utf8::unchecked::advance(w, -2); + EXPECT_EQ(w, threechars); + utf8::unchecked::advance(w, 3); + EXPECT_EQ(w, threechars + 9); + utf8::unchecked::advance(w, -2); + EXPECT_EQ(w, threechars + 4); + utf8::unchecked::advance(w, -1); + EXPECT_EQ(w, threechars); +} + +TEST(UnCheckedAPITests, test_distance) +{ + const char* twochars = "\xe6\x97\xa5\xd1\x88"; + size_t dist = static_cast(utf8::unchecked::distance(twochars, twochars + 5)); + EXPECT_EQ (dist, 2); +} + +TEST(UnCheckedAPITests, test_utf32to8) +{ + unsigned int utf32string[] = {0x448, 0x65E5, 0x10346, 0}; + string utf8result; + utf8::unchecked::utf32to8(utf32string, utf32string + 3, back_inserter(utf8result)); + EXPECT_EQ (utf8result.size(), 9); +} + +TEST(UnCheckedAPITests, test_utf8to32) +{ + const char* twochars = "\xe6\x97\xa5\xd1\x88"; + vector utf32result; + utf8::unchecked::utf8to32(twochars, twochars + 5, back_inserter(utf32result)); + EXPECT_EQ (utf32result.size(), 2); +} + +TEST(UnCheckedAPITests, test_utf16to8) +{ + unsigned short utf16string[] = {0x41, 0x0448, 0x65e5, 0xd834, 0xdd1e}; + string utf8result; + utf8::unchecked::utf16to8(utf16string, utf16string + 5, back_inserter(utf8result)); + EXPECT_EQ (utf8result.size(), 10); + + utf8result.clear(); + unsigned short highsurrogateonly[] = {0xd800}; + utf8::unchecked::utf16to8(highsurrogateonly, highsurrogateonly + 1, back_inserter(utf8result)); + EXPECT_TRUE(true); // we didn't crash +} + +TEST(UnCheckedAPITests, test_utf8to16) +{ + char utf8_with_surrogates[] = "\xe6\x97\xa5\xd1\x88\xf0\x9d\x84\x9e"; + vector utf16result; + utf8::unchecked::utf8to16(utf8_with_surrogates, utf8_with_surrogates + 9, back_inserter(utf16result)); + EXPECT_EQ (utf16result.size(), 4); + EXPECT_EQ (utf16result[2], 0xd834); + EXPECT_EQ (utf16result[3], 0xdd1e); +} + +TEST(UnCheckedAPITests, test_replace_invalid) +{ + char invalid_sequence[] = "a\x80\xe0\xa0\xc0\xaf\xed\xa0\x80z"; + vector replace_invalid_result; + utf8::unchecked::replace_invalid (invalid_sequence, invalid_sequence + sizeof(invalid_sequence), std::back_inserter(replace_invalid_result), '?'); + bool bvalid = utf8::is_valid(replace_invalid_result.begin(), replace_invalid_result.end()); + EXPECT_TRUE (bvalid); + const char fixed_invalid_sequence[] = "a????z"; + EXPECT_EQ (sizeof(fixed_invalid_sequence), replace_invalid_result.size()); + EXPECT_TRUE (std::equal(replace_invalid_result.begin(), replace_invalid_result.begin() + sizeof(fixed_invalid_sequence), fixed_invalid_sequence)); +} + +#endif diff --git a/tests/test_unchecked_iterator.h b/tests/test_unchecked_iterator.h new file mode 100644 index 000000000..4294232d6 --- /dev/null +++ b/tests/test_unchecked_iterator.h @@ -0,0 +1,36 @@ +#ifndef UTF8_FOR_CPP_TEST_UNCHECKED_ITERATOR_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 +#define UTF8_FOR_CPP_TEST_UNCHECKED_ITERATOR_H_2675DCD0_9480_4c0c_B92A_CC14C027B731 + +#include "utf8/unchecked.h" + +using namespace utf8::unchecked; + + +TEST(UnCheckedIteratrTests, test_increment) +{ + const char* threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; + utf8::unchecked::iterator it(threechars); + utf8::unchecked::iterator it2 = it; + EXPECT_EQ (it2, it); + EXPECT_EQ (*it, 0x10346); + EXPECT_EQ (*(++it), 0x65e5); + EXPECT_EQ ((*it++), 0x65e5); + EXPECT_EQ (*it, 0x0448); + EXPECT_NE (it, it2); + utf8::unchecked::iterator endit (threechars + 9); + EXPECT_EQ (++it, endit); +} + +TEST(UnCheckedIteratrTests, test_decrement) +{ + const char* threechars = "\xf0\x90\x8d\x86\xe6\x97\xa5\xd1\x88"; + utf8::unchecked::iterator it(threechars+9); + EXPECT_EQ (*(--it), 0x0448); + EXPECT_EQ ((*it--), 0x0448); + EXPECT_EQ (*it, 0x65e5); + EXPECT_EQ (--it, utf8::unchecked::iterator(threechars)); + EXPECT_EQ (*it, 0x10346); + +} + +#endif diff --git a/utf8cppConfig.cmake.in b/utf8cppConfig.cmake.in new file mode 100644 index 000000000..4bdb9c419 --- /dev/null +++ b/utf8cppConfig.cmake.in @@ -0,0 +1,8 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") +check_required_components("@PROJECT_NAME@") + +if(NOT TARGET utf8::cpp) + add_library(utf8::cpp ALIAS utf8cpp::utf8cpp) +endif() From b296180af37914b92380b17c4f2e3249e2bad165 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 3 Jan 2024 17:26:54 +0100 Subject: [PATCH 139/320] Added a license file for UTF8-CPP --- licenses/UTF8-CPP | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 licenses/UTF8-CPP diff --git a/licenses/UTF8-CPP b/licenses/UTF8-CPP new file mode 100644 index 000000000..36b7cd93c --- /dev/null +++ b/licenses/UTF8-CPP @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. From d934cfb48f767fb38514efc3d8dade4c54f1c066 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 3 Jan 2024 17:29:22 +0100 Subject: [PATCH 140/320] Added support for filtering UTF-8 strings using UTF8-CPP --- CMakeLists.txt | 1 + es-core/src/utils/StringUtil.cpp | 7 +++++++ es-core/src/utils/StringUtil.h | 3 +++ 3 files changed, 11 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0dda9b4cc..02a2b25b4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -449,6 +449,7 @@ set(COMMON_INCLUDE_DIRS ${CURL_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/external/lunasvg/include ${CMAKE_CURRENT_SOURCE_DIR}/external/rapidjson/include ${CMAKE_CURRENT_SOURCE_DIR}/external/rlottie/inc + ${CMAKE_CURRENT_SOURCE_DIR}/external/utfcpp/source ${CMAKE_CURRENT_SOURCE_DIR}/es-core/src ${CMAKE_CURRENT_SOURCE_DIR}/es-pdf-converter/src) diff --git a/es-core/src/utils/StringUtil.cpp b/es-core/src/utils/StringUtil.cpp index eb4707200..756ceafb3 100644 --- a/es-core/src/utils/StringUtil.cpp +++ b/es-core/src/utils/StringUtil.cpp @@ -569,6 +569,13 @@ namespace Utils return line; } + std::string filterUtf8(const std::string& stringArg) + { + std::string tempString; + utf8::replace_invalid(stringArg.begin(), stringArg.end(), back_inserter(tempString)); + return tempString; + } + std::string trim(const std::string& stringArg) { std::string trimString = stringArg; diff --git a/es-core/src/utils/StringUtil.h b/es-core/src/utils/StringUtil.h index 67ef426cb..4284cab3f 100644 --- a/es-core/src/utils/StringUtil.h +++ b/es-core/src/utils/StringUtil.h @@ -14,6 +14,8 @@ #include #include +#include "utf8.h" + namespace Utils { namespace String @@ -28,6 +30,7 @@ namespace Utils std::string toLower(const std::string& stringArg); std::string toUpper(const std::string& stringArg); std::string toCapitalized(const std::string& stringArg); + std::string filterUtf8(const std::string& stringArg); std::string trim(const std::string& stringArg); std::string replace(const std::string& stringArg, const std::string& from, From 83ff89acb246583f97b9b5a06f5125f6ac6a9105 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 3 Jan 2024 17:32:04 +0100 Subject: [PATCH 141/320] (Android) Removed support for using the SAF to list directory contents --- es-core/src/utils/FileSystemUtil.cpp | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/es-core/src/utils/FileSystemUtil.cpp b/es-core/src/utils/FileSystemUtil.cpp index 8b8d8fa90..588d5ca77 100644 --- a/es-core/src/utils/FileSystemUtil.cpp +++ b/es-core/src/utils/FileSystemUtil.cpp @@ -70,28 +70,6 @@ namespace Utils if (!isDirectory(genericPath)) return contentList; -#if defined(__ANDROID__) - if (path.substr(0, FileSystemVariables::sAppDataDirectory.length()) == - FileSystemVariables::sAppDataDirectory) { - Utils::Platform::Android::getDirContent( - path.substr(FileSystemVariables::sAppDataDirectory.length() + 1), - FileSystemVariables::sAppDataDirectory, AndroidVariables::sAppDataPathID, - recursive, contentList); - contentList.sort(); - return contentList; - } - - if (path.substr(0, AndroidVariables::sROMDirectory.length()) == - AndroidVariables::sROMDirectory) { - Utils::Platform::Android::getDirContent( - path.substr(AndroidVariables::sROMDirectory.length()), - AndroidVariables::sROMDirectory, AndroidVariables::sRomPathID, recursive, - contentList); - contentList.sort(); - return contentList; - } -#endif - if (recursive) { #if defined(_WIN64) for (auto& entry : std::filesystem::recursive_directory_iterator( From 0deec0865d0ab214d210d47700d46eead3d7a1e3 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 3 Jan 2024 17:33:59 +0100 Subject: [PATCH 142/320] (Android) Reverted to requiring full filesystem access for the application --- es-app/src/main.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 6a65f1890..716e224fb 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -546,10 +546,6 @@ int main(int argc, char* argv[]) std::locale::global(std::locale("C")); -#if defined(__ANDROID__) - Utils::Platform::Android::setDataDirectories(); -#endif - #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 @@ -596,19 +592,22 @@ int main(int argc, char* argv[]) } #endif +#if defined(__ANDROID__) + Utils::Platform::Android::requestStoragePermission(); + + while (AndroidVariables::sHold) + SDL_Delay(20); + + Utils::Platform::Android::setDataDirectories(); + Utils::Platform::Android::setROMDirectory(); +#endif + if (!Settings::getInstance()->getBool("DebugFlag") && Settings::getInstance()->getBool("DebugMode")) { Settings::getInstance()->setBool("Debug", true); Log::setReportingLevel(LogDebug); } -#if defined(__ANDROID__) - Utils::Platform::Android::startConfigurator(); - while (AndroidVariables::sHold) - SDL_Delay(20); - Utils::Platform::Android::setROMDirectory(); -#endif - #if defined(FREEIMAGE_LIB) // Call this ONLY when linking with FreeImage as a static library. FreeImage_Initialise(); From ea8148bbf5e4db4eb910f4a9c6fd5754d25e1dec Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 3 Jan 2024 17:52:43 +0100 Subject: [PATCH 143/320] Documentation update --- CHANGELOG.md | 5 +++-- CREDITS.md | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d401b9e2..f43175c68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,12 +29,13 @@ * (Windows) Added the %RUNINBACKGROUND% variable for the epic system * (Windows) Removed support for building the application using MinGW * Added a "renderDuringTransitions" property to the image element -* Placeholder entries in es_systems.xml are now skipped by default when creating the system directories and systemsinfo.txt files +* Placeholder entries in es_systems.xml are now skipped by default when creating the system directories and systeminfo.txt files * Added a CreatePlaceholderSystemDirectories option that can be manually set in es_settings.xml to still create placeholder directories * Added support for more extreme vertical resolutions than previously allowed * Added support for the 19.5:9, 20:9 and 1:1 display aspect ratios * The relevant SDL error message is now printed to the log if a controller could not be added -* Added workarounds for some mobile GPUs which do not support all OpenGL operations when using the BGRA pixel format +* Added rendering workarounds for some mobile GPUs which do not support all OpenGL operations when using the BGRA pixel format +* Added the UTF8-CPP library as a dependency ### Bug fixes diff --git a/CREDITS.md b/CREDITS.md index 32c64c72f..02c14c5a9 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -73,6 +73,9 @@ https://github.com/Samsung/rlottie SDL \ https://www.libsdl.org +UTF8-CPP \ +https://github.com/nemtrif/utfcpp + Vorbis \ https://gitlab.xiph.org/xiph/vorbis From 1437207e91033ae9035f66013f5f90de5495d47f Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 4 Jan 2024 21:38:46 +0100 Subject: [PATCH 144/320] (Android) Added proper configurator behavior on application startup --- es-app/src/main.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 716e224fb..2d9f8ace8 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -593,11 +593,15 @@ int main(int argc, char* argv[]) #endif #if defined(__ANDROID__) - Utils::Platform::Android::requestStoragePermission(); + if (Utils::Platform::Android::checkConfigurationNeeded()) + Utils::Platform::Android::startConfigurator(); while (AndroidVariables::sHold) SDL_Delay(20); + if (Utils::Platform::Android::checkConfigurationNeeded()) + exit(0); + Utils::Platform::Android::setDataDirectories(); Utils::Platform::Android::setROMDirectory(); #endif @@ -916,6 +920,8 @@ int main(int argc, char* argv[]) } } } + if (Utils::Platform::Android::getCreateSystemDirectories()) + SystemData::createSystemDirectories(); #endif #if defined(APPLICATION_UPDATER) From 9cd35bed3dc59ad5d2623d546218ec1e24efc894 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 4 Jan 2024 21:40:51 +0100 Subject: [PATCH 145/320] (Android) Pressing the back button now closes the application --- es-core/src/InputManager.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index dd0555381..33c56e108 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -451,6 +451,15 @@ bool InputManager::parseEvent(const SDL_Event& event) if (event.key.repeat) return false; +#if defined(__ANDROID__) + // Quit application if the back button is pressed. + if (event.key.keysym.sym == SDLK_AC_BACK) { + SDL_Event quit; + quit.type = SDL_QUIT; + SDL_PushEvent(&quit); + return false; + } +#endif // There is no need to handle the OS-default quit shortcut (Alt + F4 on Windows and // Linux and Command + Q on macOS) as that's taken care of by the window manager. // The exception is Android as there are are no default quit shortcuts on this OS. From 6bad84a27a371248a3761e3eadf8fcca8e406caa Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 5 Jan 2024 10:42:28 +0100 Subject: [PATCH 146/320] Fixed a number of potential issues where SDL_Event unions were not properly initialized --- es-app/src/views/ViewController.cpp | 10 +++++----- es-core/src/CECInput.cpp | 2 +- es-core/src/InputManager.cpp | 4 ++-- es-core/src/InputManager.h | 1 - es-core/src/utils/PlatformUtil.cpp | 2 +- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index 510d6cc71..a3f86f49f 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -162,7 +162,7 @@ void ViewController::migratedAppDataFilesDialog() mWindow->pushGui(new GuiMsgBox( HelpStyle(), message.c_str(), "QUIT", [] { - SDL_Event quit; + SDL_Event quit {}; quit.type = SDL_QUIT; SDL_PushEvent(&quit); }, @@ -201,7 +201,7 @@ void ViewController::invalidSystemsFileDialog() mWindow->pushGui(new GuiMsgBox( HelpStyle(), errorMessage.c_str(), "QUIT", [] { - SDL_Event quit; + SDL_Event quit {}; quit.type = SDL_QUIT; SDL_PushEvent(&quit); }, @@ -318,7 +318,7 @@ void ViewController::noGamesDialog() }, "QUIT", [] { - SDL_Event quit; + SDL_Event quit {}; quit.type = SDL_QUIT; SDL_PushEvent(&quit); }, @@ -1462,7 +1462,7 @@ void ViewController::rescanROMDirectory() SystemData::loadConfig(); if (SystemData::sStartupExitSignal) { - SDL_Event quit; + SDL_Event quit {}; quit.type = SDL_QUIT; SDL_PushEvent(&quit); return; @@ -1477,7 +1477,7 @@ void ViewController::rescanROMDirectory() else { preload(); if (SystemData::sStartupExitSignal) { - SDL_Event quit; + SDL_Event quit {}; quit.type = SDL_QUIT; SDL_PushEvent(&quit); return; diff --git a/es-core/src/CECInput.cpp b/es-core/src/CECInput.cpp index 03d9bc5ad..fc4fdfe8b 100644 --- a/es-core/src/CECInput.cpp +++ b/es-core/src/CECInput.cpp @@ -48,7 +48,7 @@ static void onKeyPress(void* /*cbParam*/, const CEC::cec_keypress* key) { LOG(LogDebug) << "CECInput::onKeyPress keycode: " << CECInput::getKeyCodeString(key->keycode); - SDL_Event event; + SDL_Event event {}; event.type = (key->duration > 0) ? SDL_USER_CECBUTTONUP : SDL_USER_CECBUTTONDOWN; event.user.code = key->keycode; SDL_PushEvent(&event); diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 33c56e108..a830a1bf5 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -454,7 +454,7 @@ bool InputManager::parseEvent(const SDL_Event& event) #if defined(__ANDROID__) // Quit application if the back button is pressed. if (event.key.keysym.sym == SDLK_AC_BACK) { - SDL_Event quit; + SDL_Event quit {}; quit.type = SDL_QUIT; SDL_PushEvent(&quit); return false; @@ -490,7 +490,7 @@ bool InputManager::parseEvent(const SDL_Event& event) quitES = true; if (quitES) { - SDL_Event quit; + SDL_Event quit {}; quit.type = SDL_QUIT; SDL_PushEvent(&quit); return false; diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index 0814e5136..d9f3c921d 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -22,7 +22,6 @@ class InputConfig; class Window; -union SDL_Event; class InputManager { diff --git a/es-core/src/utils/PlatformUtil.cpp b/es-core/src/utils/PlatformUtil.cpp index 255926072..a36213539 100644 --- a/es-core/src/utils/PlatformUtil.cpp +++ b/es-core/src/utils/PlatformUtil.cpp @@ -330,7 +330,7 @@ namespace Utils { sQuitMode = mode; - SDL_Event quit; + SDL_Event quit {}; quit.type = SDL_QUIT; SDL_PushEvent(&quit); return 0; From c2201da47ad4342b09c7803b2580c755d53864dd Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 6 Jan 2024 12:55:29 +0100 Subject: [PATCH 147/320] (Android) Added a system directories creation state to the splash screen --- es-app/src/main.cpp | 7 ++++++- es-core/src/Window.cpp | 7 +++++++ es-core/src/Window.h | 4 +++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 2d9f8ace8..f36c59967 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -903,6 +903,7 @@ int main(int argc, char* argv[]) } LOG(LogDebug) << "Android internal directory: " << AndroidVariables::sInternalDataDirectory; LOG(LogDebug) << "Android external directory: " << AndroidVariables::sExternalDataDirectory; + { std::string buildIdentifier {PROGRAM_VERSION_STRING}; buildIdentifier.append(" (r") @@ -920,8 +921,12 @@ int main(int argc, char* argv[]) } } } - if (Utils::Platform::Android::getCreateSystemDirectories()) + + if (Utils::Platform::Android::getCreateSystemDirectories()) { + if (Settings::getInstance()->getBool("SplashScreen")) + window->renderSplashScreen(Window::SplashScreenState::DIR_CREATION, 0.0f); SystemData::createSystemDirectories(); + } #endif #if defined(APPLICATION_UPDATER) diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 890c72a4a..1321bdd38 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -146,6 +146,8 @@ bool Window::init() mDefaultFonts.at(1)->buildTextCache("Reloading...", 0.0f, 0.0f, 0x777777FF)); mSplashTextResourceCopy = std::unique_ptr( mDefaultFonts.at(1)->buildTextCache("Copying resources...", 0.0f, 0.0f, 0x777777FF)); + mSplashTextDirCreation = std::unique_ptr(mDefaultFonts.at(1)->buildTextCache( + "Creating system directories...", 0.0f, 0.0f, 0x777777FF)); mSplashTextPositions.x = (mRenderer->getScreenWidth() - mSplashTextScanning->metrics.size.x) / 2.0f; @@ -703,6 +705,9 @@ void Window::renderSplashScreen(SplashScreenState state, float progress) else if (state == SplashScreenState::RESOURCE_COPY) { textPosX = (mRenderer->getScreenWidth() - mSplashTextResourceCopy->metrics.size.x) / 2.0f; } + else if (state == SplashScreenState::DIR_CREATION) { + textPosX = (mRenderer->getScreenWidth() - mSplashTextDirCreation->metrics.size.x) / 2.0f; + } trans = glm::translate(trans, glm::round(glm::vec3 {textPosX, textPosY, 0.0f})); mRenderer->setMatrix(trans); @@ -715,6 +720,8 @@ void Window::renderSplashScreen(SplashScreenState state, float progress) mDefaultFonts.at(1)->renderTextCache(mSplashTextReloading.get()); else if (state == SplashScreenState::RESOURCE_COPY) mDefaultFonts.at(1)->renderTextCache(mSplashTextResourceCopy.get()); + else if (state == SplashScreenState::DIR_CREATION) + mDefaultFonts.at(1)->renderTextCache(mSplashTextDirCreation.get()); mRenderer->swapBuffers(); } diff --git a/es-core/src/Window.h b/es-core/src/Window.h index ebfa3b4a5..95d166933 100644 --- a/es-core/src/Window.h +++ b/es-core/src/Window.h @@ -110,7 +110,8 @@ public: SCANNING, POPULATING, RELOADING, - RESOURCE_COPY + RESOURCE_COPY, + DIR_CREATION }; void renderSplashScreen(SplashScreenState state, float progress); @@ -191,6 +192,7 @@ private: std::unique_ptr mSplashTextPopulating; std::unique_ptr mSplashTextReloading; std::unique_ptr mSplashTextResourceCopy; + std::unique_ptr mSplashTextDirCreation; glm::vec4 mSplashTextPositions; std::vector mProgressBarRectangles; From 2c850ba325098c4e06a22289b7d85194e8c879c6 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 6 Jan 2024 12:57:00 +0100 Subject: [PATCH 148/320] Fixed an issue on Android and macOS where attempting to access a non-existent setting --- es-app/src/guis/GuiMenu.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 30e7b4a22..0b4949505 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1832,7 +1832,11 @@ void GuiMenu::openUtilities() void GuiMenu::openQuitMenu() { +#if defined(__APPLE__) || defined(__ANDROID__) + if (true) { +#else if (!Settings::getInstance()->getBool("ShowQuitMenu")) { +#endif mWindow->pushGui(new GuiMsgBox( this->getHelpStyle(), "REALLY QUIT?", "YES", [this] { From 2356bd248fe8993d717e7de97dfc823fe0d345b3 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 8 Jan 2024 18:27:27 +0100 Subject: [PATCH 149/320] (Android) Eliminated an unnecessary configurator check --- es-app/src/main.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index f36c59967..66a5ea13e 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -593,14 +593,15 @@ int main(int argc, char* argv[]) #endif #if defined(__ANDROID__) - if (Utils::Platform::Android::checkConfigurationNeeded()) + if (Utils::Platform::Android::checkConfigurationNeeded()) { Utils::Platform::Android::startConfigurator(); - while (AndroidVariables::sHold) - SDL_Delay(20); + while (AndroidVariables::sHold) + SDL_Delay(20); - if (Utils::Platform::Android::checkConfigurationNeeded()) - exit(0); + if (Utils::Platform::Android::checkConfigurationNeeded()) + exit(0); + } Utils::Platform::Android::setDataDirectories(); Utils::Platform::Android::setROMDirectory(); From 39bb28e353461ee9e462ffc15f09f0bd0834b084 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 8 Jan 2024 21:25:33 +0100 Subject: [PATCH 150/320] Fixed an issue where controllers were sometimes not added correctly when there was a mix of supported and unsupported devices present --- es-core/src/InputManager.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index a830a1bf5..127ea996d 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -110,12 +110,10 @@ void InputManager::init() int numJoysticks {SDL_NumJoysticks()}; // Make sure that every joystick is actually supported by the GameController API. - for (int i {0}; i < numJoysticks; ++i) - if (!SDL_IsGameController(i)) - --numJoysticks; - - for (int i {0}; i < numJoysticks; ++i) - addControllerByDeviceIndex(nullptr, i); + for (int i {0}; i < numJoysticks; ++i) { + if (SDL_IsGameController(i)) + addControllerByDeviceIndex(nullptr, i); + } SDL_USER_CECBUTTONDOWN = SDL_RegisterEvents(2); SDL_USER_CECBUTTONUP = SDL_USER_CECBUTTONDOWN + 1; From 88e4ed38fee5bf493e02d10997bc07c05f453d26 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 10 Jan 2024 23:21:08 +0100 Subject: [PATCH 151/320] Changed the ScreenScraper URL from https://www.screenscraper.fr/api2 to https://api.screenscraper.fr/api2 --- es-app/src/scrapers/ScreenScraper.cpp | 2 +- es-app/src/scrapers/ScreenScraper.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/es-app/src/scrapers/ScreenScraper.cpp b/es-app/src/scrapers/ScreenScraper.cpp index 425f0a50f..04f247f75 100644 --- a/es-app/src/scrapers/ScreenScraper.cpp +++ b/es-app/src/scrapers/ScreenScraper.cpp @@ -26,7 +26,7 @@ using namespace PlatformIds; namespace { // List of systems and their IDs from: - // https://www.screenscraper.fr/api/systemesListe.php?devid=xxx&devpassword=yyy&softname=zzz&output=XML + // https://api.screenscraper.fr/api/systemesListe.php?devid=xxx&devpassword=yyy&softname=zzz&output=XML const std::map screenscraper_platformid_map { {THREEDO, 29}, {ACORN_ELECTRON, 85}, diff --git a/es-app/src/scrapers/ScreenScraper.h b/es-app/src/scrapers/ScreenScraper.h index 29539d088..31f4dd39f 100644 --- a/es-app/src/scrapers/ScreenScraper.h +++ b/es-app/src/scrapers/ScreenScraper.h @@ -50,7 +50,7 @@ public: const std::string API_DEV_P = {32, 70, 46, 54, 12, 5, 13, 120, 50, 66, 25}; const std::string API_DEV_KEY = {67, 112, 72, 120, 121, 77, 119, 74, 84, 56, 75, 122, 78, 98, 69, 86, 56, 120, 120, 49}; - const std::string API_URL_BASE = "https://www.screenscraper.fr/api2"; + const std::string API_URL_BASE = "https://api.screenscraper.fr/api2"; #if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) const std::string platformIdentifier {" B"}; #elif defined(STEAM_DECK) From ee0f2be819a7a239bc82586beddd31662275e458 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 11 Jan 2024 00:46:11 +0100 Subject: [PATCH 152/320] Added a ScraperIgnoreHTTP404Errors option to specifically ignore 404 errors (resource not found) --- es-app/src/scrapers/Scraper.cpp | 7 +++++++ es-core/src/HttpReq.cpp | 17 +++++++++++++---- es-core/src/HttpReq.h | 8 +++++--- es-core/src/Settings.cpp | 1 + 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index eb796c141..8500b4703 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -168,6 +168,13 @@ void ScraperHttpRequest::update() if (status == HttpReq::REQ_IN_PROGRESS) return; + if (status == HttpReq::REQ_RESOURCE_NOT_FOUND) { + LOG(LogWarning) + << "ScraperHttpRequest: Server returned HTTP error code 404 (resource not found)"; + setStatus(ASYNC_DONE); + return; + } + // Everything else is some sort of error. LOG(LogError) << "ScraperHttpRequest network error (status: " << status << ") - " << mReq->getErrorMsg(); diff --git a/es-core/src/HttpReq.cpp b/es-core/src/HttpReq.cpp index 9b6fb043e..691e640bd 100644 --- a/es-core/src/HttpReq.cpp +++ b/es-core/src/HttpReq.cpp @@ -41,6 +41,7 @@ HttpReq::HttpReq(const std::string& url, bool scraperRequest) , 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 @@ -81,7 +82,7 @@ HttpReq::HttpReq(const std::string& url, bool scraperRequest) long connectionTimeout; - if (scraperRequest) { + if (mScraperRequest) { connectionTimeout = static_cast(Settings::getInstance()->getInt("ScraperConnectionTimeout")); @@ -103,7 +104,7 @@ HttpReq::HttpReq(const std::string& url, bool scraperRequest) long transferTimeout; - if (scraperRequest) { + if (mScraperRequest) { transferTimeout = static_cast(Settings::getInstance()->getInt("ScraperTransferTimeout")); @@ -259,10 +260,18 @@ HttpReq::Status HttpReq::status() req->onError(curl_easy_strerror(msg->data.result)); } else if (msg->data.result == CURLE_HTTP_RETURNED_ERROR) { - req->mStatus = REQ_BAD_STATUS_CODE; long responseCode; curl_easy_getinfo(msg->easy_handle, CURLINFO_RESPONSE_CODE, &responseCode); - req->onError("Server returned HTTP error code " + std::to_string(responseCode)); + + 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; diff --git a/es-core/src/HttpReq.h b/es-core/src/HttpReq.h index 5aae2270c..0de59915a 100644 --- a/es-core/src/HttpReq.h +++ b/es-core/src/HttpReq.h @@ -25,10 +25,11 @@ public: enum Status { // clang-format off REQ_IN_PROGRESS, // Request is in progress. - REQ_SUCCESS, // Request completed successfully, get it with getContent(). - REQ_IO_ERROR, // Some error happened, get it with getErrorMsg(). + REQ_SUCCESS, // Request completed successfully. + REQ_IO_ERROR, // An error occured. REQ_FAILED_VERIFICATION, // Peer's certificate or fingerprint wasn't verified correctly. - REQ_BAD_STATUS_CODE, // Some invalid HTTP response status code happened (non-200). + REQ_BAD_STATUS_CODE, // HTTP error response >= 400. + REQ_RESOURCE_NOT_FOUND, // HTTP error code 404 specifically. REQ_INVALID_RESPONSE, // The HTTP response was invalid. REQ_UNDEFINED_ERROR // clang-format on @@ -69,6 +70,7 @@ private: std::string mErrorMsg; std::atomic mTotalBytes; std::atomic mDownloadedBytes; + bool mScraperRequest; }; #endif // ES_CORE_HTTP_REQ_H diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 43b6d180c..f2edc2493 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -150,6 +150,7 @@ void Settings::setDefaults() mIntMap["ScraperSearchFileHashMaxSize"] = {384, 384}; mBoolMap["ScraperOverwriteData"] = {true, true}; mBoolMap["ScraperHaltOnInvalidMedia"] = {true, true}; + mBoolMap["ScraperIgnoreHTTP404Errors"] = {true, true}; mBoolMap["ScraperSearchFileHash"] = {true, true}; mBoolMap["ScraperSearchMetadataName"] = {true, true}; mBoolMap["ScraperIncludeFolders"] = {true, true}; From 3fca7b25677aed430beaecd818185d946cc99945 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 11 Jan 2024 00:51:49 +0100 Subject: [PATCH 153/320] Changed the scraper 404 status code log output messages from type warning to debug --- es-app/src/scrapers/Scraper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index 8500b4703..ad5d590de 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -169,7 +169,7 @@ void ScraperHttpRequest::update() return; if (status == HttpReq::REQ_RESOURCE_NOT_FOUND) { - LOG(LogWarning) + LOG(LogDebug) << "ScraperHttpRequest: Server returned HTTP error code 404 (resource not found)"; setStatus(ASYNC_DONE); return; From 0535f0d3338e7d3d590f8439b0e309836cfb5fc7 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 11 Jan 2024 01:02:35 +0100 Subject: [PATCH 154/320] Removed the ScraperHaltOnInvalidMedia option and corresponding menu entry --- es-app/src/guis/GuiScraperMenu.cpp | 14 -------- es-app/src/scrapers/Scraper.cpp | 57 ------------------------------ es-core/src/Settings.cpp | 1 - 3 files changed, 72 deletions(-) diff --git a/es-app/src/guis/GuiScraperMenu.cpp b/es-app/src/guis/GuiScraperMenu.cpp index 14d120e4f..5d3974bf4 100644 --- a/es-app/src/guis/GuiScraperMenu.cpp +++ b/es-app/src/guis/GuiScraperMenu.cpp @@ -950,20 +950,6 @@ void GuiScraperMenu::openOtherOptions() } }); - // Halt scraping on invalid media files. - auto scraperHaltOnInvalidMedia = std::make_shared(); - scraperHaltOnInvalidMedia->setState( - Settings::getInstance()->getBool("ScraperHaltOnInvalidMedia")); - s->addWithLabel("HALT ON INVALID MEDIA FILES", scraperHaltOnInvalidMedia); - s->addSaveFunc([scraperHaltOnInvalidMedia, s] { - if (scraperHaltOnInvalidMedia->getState() != - Settings::getInstance()->getBool("ScraperHaltOnInvalidMedia")) { - Settings::getInstance()->setBool("ScraperHaltOnInvalidMedia", - scraperHaltOnInvalidMedia->getState()); - s->setNeedsSaving(); - } - }); - // Search using file hashes for non-interactive mode. auto scraperSearchFileHash = std::make_shared(); scraperSearchFileHash->setState(Settings::getInstance()->getBool("ScraperSearchFileHash")); diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index ad5d590de..ce9367b20 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -315,34 +315,6 @@ MDResolveHandle::MDResolveHandle(const ScraperSearchResult& result, // If the image is cached already as the thumbnail, then we don't need // to download it again, in this case just save it to disk and resize it. if (mResult.thumbnailImageUrl == it->fileURL && mResult.thumbnailImageData.size() > 0) { - // This is just a temporary workaround to avoid saving media files to disk that - // are actually just containing error messages from the scraper service. The - // proper solution is to implement file checksum checks to determine if the - // server response contains valid media. As for the current approach, if the - // file is less than 350 bytes, we check if FreeImage can actually detect a - // valid format, and if not, we present an error message. Black/empty images - // are sometimes returned from the scraper service and these can actually be - // less than 350 bytes in size. - if (Settings::getInstance()->getBool("ScraperHaltOnInvalidMedia") && - mResult.thumbnailImageData.size() < 350) { - - FIMEMORY* memoryStream { - FreeImage_OpenMemory(reinterpret_cast(&mResult.thumbnailImageData.at(0)), - static_cast(mResult.thumbnailImageData.size()))}; - - FREE_IMAGE_FORMAT imageFormat {FreeImage_GetFileTypeFromMemory(memoryStream, 0)}; - FreeImage_CloseMemory(memoryStream); - - if (imageFormat == FIF_UNKNOWN) { - setError( - "The file \"" + Utils::FileSystem::getFileName(filePath) + - "\" returned by the scraper seems to be invalid as it's less than " + - "350 bytes in size", - true); - return; - } - } - // Remove any existing media file before attempting to write a new one. // This avoids the problem where there's already a file for this media type // with a different format/extension (e.g. game.jpg and we're going to write @@ -542,35 +514,6 @@ void MediaDownloadHandle::update() } } - // This is just a temporary workaround to avoid saving media files to disk that are - // actually just containing error messages from the scraper service. The proper solution - // is to implement file checksum checks to determine if the server response contains valid - // media. As for the current approach, if the file is less than 350 bytes, we check if - // FreeImage can actually detect a valid format, and if not, we present an error message. - // Black/empty images are sometimes returned from the scraper service and these can actually - // be less than 350 bytes in size. - if (Settings::getInstance()->getBool("ScraperHaltOnInvalidMedia") && - mReq->getContent().size() < 350) { - - FREE_IMAGE_FORMAT imageFormat {FIF_UNKNOWN}; - - if (mMediaType != "videos") { - std::string imageData {mReq->getContent()}; - FIMEMORY* memoryStream {FreeImage_OpenMemory(reinterpret_cast(&imageData.at(0)), - static_cast(imageData.size()))}; - imageFormat = FreeImage_GetFileTypeFromMemory(memoryStream, 0); - FreeImage_CloseMemory(memoryStream); - } - - if (imageFormat == FIF_UNKNOWN) { - setError("The " + mMediaType + " file \"" + Utils::FileSystem::getFileName(mSavePath) + - "\" returned by the scraper seems to be invalid as it's less than " + - "350 bytes in size", - true); - return; - } - } - // Remove any existing media file before attempting to write a new one. // This avoids the problem where there's already a file for this media type // with a different format/extension (e.g. game.jpg and we're going to write diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index f2edc2493..9165b975f 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -149,7 +149,6 @@ void Settings::setDefaults() mIntMap["ScraperRetryOnErrorTimer"] = {3, 3}; mIntMap["ScraperSearchFileHashMaxSize"] = {384, 384}; mBoolMap["ScraperOverwriteData"] = {true, true}; - mBoolMap["ScraperHaltOnInvalidMedia"] = {true, true}; mBoolMap["ScraperIgnoreHTTP404Errors"] = {true, true}; mBoolMap["ScraperSearchFileHash"] = {true, true}; mBoolMap["ScraperSearchMetadataName"] = {true, true}; From d4c6760bf2506cd6c9b14bc3645acc60ab27fe41 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 11 Jan 2024 01:04:42 +0100 Subject: [PATCH 155/320] Documentation update --- CHANGELOG.md | 4 ++++ INSTALL-DEV.md | 4 ++++ USERGUIDE-DEV.md | 4 ---- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f43175c68..1b3109a0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ * Changed the default slideshow custom image directory from slideshow/custom_images to screensavers/custom_slideshow * Changed the custom slideshow image directory setting from ScreensaverSlideshowImageDir to ScreensaverSlideshowCustomDir * The HTTP error code will now be shown on scraper errors instead of the "File is smaller than 350 bytes" message +* Removed the ScraperHaltOnInvalidMedia option as it has been superseded by the HTTP error code logic +* Added a ScraperIgnoreHTTP404Errors option that can be manually set in es_settings.xml to ignore 404 errors (resource not found) * Added Mednafen standalone as an alternative emulator for the gb, gba and gbc systems * (Linux) Added support for the AppImage release of Vita3K * Added the .zso file extension to the ps2 system @@ -31,6 +33,7 @@ * Added a "renderDuringTransitions" property to the image element * Placeholder entries in es_systems.xml are now skipped by default when creating the system directories and systeminfo.txt files * Added a CreatePlaceholderSystemDirectories option that can be manually set in es_settings.xml to still create placeholder directories +* Changed the ScreenScraper URL from https://www.screenscraper.fr/api2 to https://api.screenscraper.fr/api2 * Added support for more extreme vertical resolutions than previously allowed * Added support for the 19.5:9, 20:9 and 1:1 display aspect ratios * The relevant SDL error message is now printed to the log if a controller could not be added @@ -40,6 +43,7 @@ ### Bug fixes * Attempting to create the system directories with invalid entries in es_systems.xml could crash the application +* Sometimes controllers were not added correctly when there was a mix of supported and unsupported devices present * Stationary image elements could sometimes glitch out during carousel navigation * Font textures were sometimes updated with empty glyhps which generated OpenGL errors on some mobile GPUs diff --git a/INSTALL-DEV.md b/INSTALL-DEV.md index a98a978bc..8ff4a4a40 100644 --- a/INSTALL-DEV.md +++ b/INSTALL-DEV.md @@ -1109,6 +1109,10 @@ Sets the server connection timeout for the scraper. Minimum value is 0 seconds ( Sets the transfer timeout per HTTPS request. Minimum value is 0 seconds (infinity) and maximum value is 300 seconds. Default value is 120 seconds. +**ScraperIgnoreHTTP404Errors** + +Normally the scraper will stop whenever an HTTP error code with value 400 or above is returned from the scraper service, but by default there is an exception for 404 errors (resource not found). Changing this setting to _false_ will make the scraper handle 404 errors as all other error codes, meaning it will run through the configured retry attempts and then display an error notification dialog if the resource could not be retrieved. + **UIMode_passkey** The passkey to use to change from the _Kiosk_ or _Kid_ UI modes to the _Full_ UI mode. diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index b252b5da7..1b115656d 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -3058,10 +3058,6 @@ If file hash searching is enabled, then this specifies the maximum allowed file Affects both overwriting of metadata as well as actual game media files on the filesystem. Even with this option disabled, metadata entries which are set to their default values will be populated by the scraper. In other words, this option only affects overwriting of previously scraped data, or data manually entered via the metadata editor. Game names are considered as set to their default values if either corresponding to the physical game file on disk minus the extension (e.g. the entry _Commando_ if the file is named _Commando.zip_), or for arcade games if corresponding to the MAME names as defined in the bundled mamenames.xml. Note that this setting does not affect generated miximages, that is instead controlled by the setting _Overwrite miximages (scraper/offline generator)_ found in the miximage settings menu. -**Halt on invalid media files** - -With this setting enabled, if any media files returned by the scraper seem to be invalid, the scraping is halted and an error message is presented where it's possible to retry or cancel the scraping of the specific game. In the case of multi-scraping it's also possible to skip the game and proceed to the next one in the queue. With this setting disabled, all media files will always be accepted and saved to disk. The file verification is quite basic and future versions may improve on this by using file checksums or other file integrity checks. There is an exception in place for box back covers when using ScreenScraper. As many of these specific images are broken, there is an automatic filter built in that is always active and which removes blank images and those containing only a few lines of pixels. - **Search using file hashes (non-interactive mode)** _(ScreenScraper only)_ When running the non-interactive scraper it's possible to search using a hash value calculated from the actual game file. Assuming ScreenScraper has a match for your file in their database, this will lead to 100% accuracy as the game name will be completely ignored. If there is no match for the hash value, then a fallback will be made to the game name and the normal search logic applies. The maximum allowed file size to apply this type of search to can be set using the _Hash searches max file size_ slider. Note that file hash searching can increase scraping times significantly if applied to large game files as the entire file needs to be read and processed to calculate its hash value. And obviously file hash searching will not work for directories, scripts, shortcuts, .m3u files and so on which will have no matching entries in the ScreenScraper database. From d50a062f5e3d713885aed94ee02f74d97c0475df Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 11 Jan 2024 01:09:17 +0100 Subject: [PATCH 156/320] Small cosmetic change to a scraper debug message --- es-app/src/scrapers/Scraper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-app/src/scrapers/Scraper.cpp b/es-app/src/scrapers/Scraper.cpp index ce9367b20..aaec7aad6 100644 --- a/es-app/src/scrapers/Scraper.cpp +++ b/es-app/src/scrapers/Scraper.cpp @@ -169,8 +169,8 @@ void ScraperHttpRequest::update() return; if (status == HttpReq::REQ_RESOURCE_NOT_FOUND) { - LOG(LogDebug) - << "ScraperHttpRequest: Server returned HTTP error code 404 (resource not found)"; + LOG(LogDebug) << "ScraperHttpRequest::update(): Server returned HTTP error code 404 " + "(resource not found)"; setStatus(ASYNC_DONE); return; } From e91512a5193eca9a8c7679c3deae8f82ba5f6f0d Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 13 Jan 2024 16:14:46 +0100 Subject: [PATCH 157/320] (Android) Added initial touch overlay support --- .gitignore | 1 + es-app/src/guis/GuiMenu.cpp | 14 +++ es-app/src/main.cpp | 3 + es-core/CMakeLists.txt | 2 + es-core/src/InputConfig.h | 4 +- es-core/src/InputManager.cpp | 111 ++++++++++++++++++++- es-core/src/InputManager.h | 6 ++ es-core/src/Settings.cpp | 3 + es-core/src/Window.cpp | 9 ++ resources/graphics/overlay/button_a.svg | 22 ++++ resources/graphics/overlay/button_b.svg | 22 ++++ resources/graphics/overlay/button_dpad.svg | 16 +++ resources/graphics/overlay/button_x.svg | 22 ++++ resources/graphics/overlay/button_y.svg | 22 ++++ 14 files changed, 253 insertions(+), 4 deletions(-) create mode 100644 resources/graphics/overlay/button_a.svg create mode 100644 resources/graphics/overlay/button_b.svg create mode 100644 resources/graphics/overlay/button_dpad.svg create mode 100644 resources/graphics/overlay/button_x.svg create mode 100644 resources/graphics/overlay/button_y.svg diff --git a/.gitignore b/.gitignore index 7c10a7a3a..48b3a92b6 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,7 @@ es-de.worker.js # Android /android /logback.log +es-core/src/InputOverlay.* es-core/src/utils/PlatformUtilAndroid.* # AppImage diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 0b4949505..f6f1309f2 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1144,6 +1144,20 @@ void GuiMenu::openInputDeviceOptions() } }); +#if defined(__ANDROID__) + // Whether to enable the touch overlay. + auto inputTouchOverlay = std::make_shared(); + inputTouchOverlay->setState(Settings::getInstance()->getBool("InputTouchOverlay")); + s->addWithLabel("ENABLE TOUCH OVERLAY", inputTouchOverlay); + s->addSaveFunc([inputTouchOverlay, s] { + if (Settings::getInstance()->getBool("InputTouchOverlay") != + inputTouchOverlay->getState()) { + Settings::getInstance()->setBool("InputTouchOverlay", inputTouchOverlay->getState()); + s->setNeedsSaving(); + } + }); +#endif + // Whether to only accept input from the first controller. auto inputOnlyFirstController = std::make_shared(); inputOnlyFirstController->setState( diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index 66a5ea13e..c5ccb0043 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -38,6 +38,7 @@ #include #if defined(__ANDROID__) +#include "InputOverlay.h" #include "utils/PlatformUtilAndroid.h" #endif @@ -890,6 +891,8 @@ int main(int argc, char* argv[]) } #if defined(__ANDROID__) + InputOverlay::getInstance(); + LOG(LogDebug) << "Android API level: " << SDL_GetAndroidSDKVersion(); Utils::Platform::Android::printDeviceInfo(); int storageState {SDL_AndroidGetExternalStorageState()}; diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 09a3852dd..1ed7ba8f7 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -170,7 +170,9 @@ set(CORE_SOURCES ) if(ANDROID) + set(CORE_HEADERS ${CORE_HEADERS} ${CMAKE_CURRENT_SOURCE_DIR}/src/InputOverlay.h) set(CORE_HEADERS ${CORE_HEADERS} ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/PlatformUtilAndroid.h) + set(CORE_HEADERS ${CORE_HEADERS} ${CMAKE_CURRENT_SOURCE_DIR}/src/InputOverlay.cpp) set(CORE_SOURCES ${CORE_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/PlatformUtilAndroid.cpp) endif() diff --git a/es-core/src/InputConfig.h b/es-core/src/InputConfig.h index d458b5ca0..1ad30128d 100644 --- a/es-core/src/InputConfig.h +++ b/es-core/src/InputConfig.h @@ -17,12 +17,14 @@ #include #define DEVICE_KEYBOARD -1 -#define DEVICE_CEC -2 +#define DEVICE_TOUCH -2 +#define DEVICE_CEC -3 enum InputType { TYPE_AXIS, TYPE_BUTTON, TYPE_KEY, + TYPE_TOUCH, TYPE_CEC_BUTTON, TYPE_COUNT }; diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 127ea996d..469e6c919 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -22,7 +22,8 @@ #include #define KEYBOARD_GUID_STRING "-1" -#define CEC_GUID_STRING "-2" +#define TOUCH_GUID_STRING "-2" +#define CEC_GUID_STRING "-3" namespace { @@ -32,7 +33,12 @@ namespace InputManager::InputManager() noexcept : mWindow {Window::getInstance()} +#if defined(__ANDROID__) + , mInputOverlay {InputOverlay::getInstance()} +#endif , mKeyboardInputConfig {nullptr} + , mTouchInputConfig {nullptr} + , mCECInputConfig {nullptr} { } @@ -81,6 +87,11 @@ void InputManager::init() LOG(LogInfo) << "Added keyboard with default configuration"; } +#if defined(__ANDROID__) + mTouchInputConfig = std::make_unique(DEVICE_TOUCH, "Touch", TOUCH_GUID_STRING); + loadTouchConfig(); +#endif + // Load optional controller mappings. Normally the supported controllers should be compiled // into SDL as a header file, but if a user has a very rare controller that is not supported, // the bundled mapping is incorrect, or the SDL version is a bit older, it makes sense to be @@ -136,6 +147,7 @@ void InputManager::deinit() mInputConfigs.clear(); mKeyboardInputConfig.reset(); + mTouchInputConfig.reset(); mCECInputConfig.reset(); SDL_GameControllerEventState(SDL_DISABLE); @@ -284,6 +296,11 @@ int InputManager::getNumConfiguredDevices() if (mKeyboardInputConfig->isConfigured()) ++num; +#if defined(__ANDROID__) + if (mTouchInputConfig->isConfigured()) + ++num; +#endif + if (mCECInputConfig->isConfigured()) ++num; @@ -313,8 +330,11 @@ std::string InputManager::getDeviceGUIDString(int deviceId) { if (deviceId == DEVICE_KEYBOARD) return KEYBOARD_GUID_STRING; - - if (deviceId == DEVICE_CEC) +#if defined(__ANDROID__) + else if (deviceId == DEVICE_TOUCH) + return TOUCH_GUID_STRING; +#endif + else if (deviceId == DEVICE_CEC) return CEC_GUID_STRING; auto it = mJoysticks.find(deviceId); @@ -333,6 +353,10 @@ InputConfig* InputManager::getInputConfigByDevice(int device) { if (device == DEVICE_KEYBOARD) return mKeyboardInputConfig.get(); +#if defined(__ANDROID__) + else if (device == DEVICE_TOUCH) + return mTouchInputConfig.get(); +#endif else if (device == DEVICE_CEC) return mCECInputConfig.get(); else @@ -510,6 +534,62 @@ bool InputManager::parseEvent(const SDL_Event& event) Input(DEVICE_KEYBOARD, TYPE_KEY, event.key.keysym.sym, 0, false)); return true; } +#if defined(__ANDROID__) + case SDL_FINGERDOWN: { + if (!Settings::getInstance()->getBool("InputTouchOverlay")) + return false; + + const int buttonID {mInputOverlay.getButtonId( + SDL_FINGERDOWN, event.tfinger.fingerId + 1, event.tfinger.x, event.tfinger.y)}; + if (buttonID != -2) { + mWindow->input(getInputConfigByDevice(DEVICE_TOUCH), + Input(DEVICE_TOUCH, TYPE_TOUCH, buttonID, 1, false)); + return true; + } + else { + return false; + } + } + case SDL_FINGERUP: { + if (!Settings::getInstance()->getBool("InputTouchOverlay")) + return false; + + const int buttonID {mInputOverlay.getButtonId(SDL_FINGERUP, event.tfinger.fingerId + 1, + event.tfinger.x, event.tfinger.y)}; + if (buttonID != -2) { + mWindow->input(getInputConfigByDevice(DEVICE_TOUCH), + Input(DEVICE_TOUCH, TYPE_TOUCH, buttonID, 0, false)); + + return true; + } + else { + return false; + } + } + case SDL_FINGERMOTION: { + if (!Settings::getInstance()->getBool("InputTouchOverlay")) + return false; + + bool releasedButton {false}; + const int buttonID { + mInputOverlay.getButtonId(SDL_FINGERMOTION, event.tfinger.fingerId + 1, + event.tfinger.x, event.tfinger.y, &releasedButton)}; + + if (buttonID == -2) + return false; + + if (releasedButton) { + mWindow->input(getInputConfigByDevice(DEVICE_TOUCH), + Input(DEVICE_TOUCH, TYPE_TOUCH, buttonID, 0, false)); + return true; + } + else { + mWindow->input(getInputConfigByDevice(DEVICE_TOUCH), + Input(DEVICE_TOUCH, TYPE_TOUCH, buttonID, 1, false)); + return true; + } + } +#endif case SDL_TEXTINPUT: { mWindow->textInput(event.text.text); break; @@ -646,6 +726,31 @@ void InputManager::loadDefaultControllerConfig(SDL_JoystickID deviceIndex) // clang-format on } +void InputManager::loadTouchConfig() +{ + InputConfig* cfg {mTouchInputConfig.get()}; + + if (cfg->isConfigured()) + return; + + // clang-format off + cfg->mapInput("Up", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_DPAD_UP, 1, true)); + cfg->mapInput("Down", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_DPAD_DOWN, 1, true)); + cfg->mapInput("Left", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_DPAD_LEFT, 1, true)); + cfg->mapInput("Right", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_DPAD_RIGHT, 1, true)); + cfg->mapInput("Start", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_START, 1, true)); + cfg->mapInput("Back", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_BACK, 1, true)); + cfg->mapInput("A", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_A, 1, true)); + cfg->mapInput("B", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_B, 1, true)); + cfg->mapInput("X", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_X, 1, true)); + cfg->mapInput("Y", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_Y, 1, true)); + cfg->mapInput("LeftShoulder", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_LEFTSHOULDER, 1, true)); + cfg->mapInput("RightShoulder", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, 1, true)); + cfg->mapInput("LeftTrigger", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_AXIS_TRIGGERLEFT, 1, true)); + cfg->mapInput("RightTrigger", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, 1, true)); + // clang-format on +} + void InputManager::addControllerByDeviceIndex(Window* window, int deviceIndex) { // Open joystick and add it to our list. diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index d9f3c921d..d0c8143d1 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -12,6 +12,7 @@ #define ES_CORE_INPUT_MANAGER_H #include "CECInput.h" +#include "InputOverlay.h" #include #include @@ -57,12 +58,16 @@ private: bool loadInputConfig(InputConfig* config); void loadDefaultKBConfig(); void loadDefaultControllerConfig(SDL_JoystickID deviceIndex); + void loadTouchConfig(); void addControllerByDeviceIndex(Window* window, int deviceIndex); void removeControllerByJoystickID(Window* window, SDL_JoystickID joyID); Window* mWindow; CECInput mCECInput; +#if defined(__ANDROID__) + InputOverlay& mInputOverlay; +#endif static const int DEADZONE_TRIGGERS = 18000; static const int DEADZONE_THUMBSTICKS = 23000; @@ -73,6 +78,7 @@ private: std::map> mInputConfigs; std::unique_ptr mKeyboardInputConfig; + std::unique_ptr mTouchInputConfig; std::unique_ptr mCECInputConfig; std::map, int> mPrevAxisValues; diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 9165b975f..7eff9f767 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -239,6 +239,9 @@ void Settings::setDefaults() // Input device settings. mStringMap["InputControllerType"] = {"xbox", "xbox"}; +#if defined(__ANDROID__) + mBoolMap["InputTouchOverlay"] = {true, true}; +#endif mBoolMap["InputOnlyFirstController"] = {false, false}; mBoolMap["InputIgnoreKeyboard"] = {false, false}; diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 1321bdd38..5c5a7eb0c 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -18,6 +18,10 @@ #include "guis/GuiInfoPopup.h" #include "resources/Font.h" +#if defined(__ANDROID__) +#include "InputOverlay.h" +#endif + #include #include @@ -662,6 +666,11 @@ void Window::render() if (mRenderScreensaver) mScreensaver->renderScreensaver(); +#if defined(__ANDROID__) + if (Settings::getInstance()->getBool("InputTouchOverlay")) + InputOverlay::getInstance().render(mRenderer->getIdentity()); +#endif + if (Settings::getInstance()->getBool("DisplayGPUStatistics") && mFrameDataText) { mRenderer->setMatrix(mRenderer->getIdentity()); mDefaultFonts.at(1)->renderTextCache(mFrameDataText.get()); diff --git a/resources/graphics/overlay/button_a.svg b/resources/graphics/overlay/button_a.svg new file mode 100644 index 000000000..7c61be77a --- /dev/null +++ b/resources/graphics/overlay/button_a.svg @@ -0,0 +1,22 @@ + + + + + + diff --git a/resources/graphics/overlay/button_b.svg b/resources/graphics/overlay/button_b.svg new file mode 100644 index 000000000..e1350b325 --- /dev/null +++ b/resources/graphics/overlay/button_b.svg @@ -0,0 +1,22 @@ + + + + + + diff --git a/resources/graphics/overlay/button_dpad.svg b/resources/graphics/overlay/button_dpad.svg new file mode 100644 index 000000000..7e258568f --- /dev/null +++ b/resources/graphics/overlay/button_dpad.svg @@ -0,0 +1,16 @@ + + + + + diff --git a/resources/graphics/overlay/button_x.svg b/resources/graphics/overlay/button_x.svg new file mode 100644 index 000000000..8d46642f1 --- /dev/null +++ b/resources/graphics/overlay/button_x.svg @@ -0,0 +1,22 @@ + + + + + + diff --git a/resources/graphics/overlay/button_y.svg b/resources/graphics/overlay/button_y.svg new file mode 100644 index 000000000..9341aaffd --- /dev/null +++ b/resources/graphics/overlay/button_y.svg @@ -0,0 +1,22 @@ + + + + + + From 2fd58b30525ad3205f99e71675d63df4b3e8269a Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 13 Jan 2024 16:22:33 +0100 Subject: [PATCH 158/320] Fixed a compiler error and a compiler warning --- es-core/src/InputManager.cpp | 7 +++++-- es-core/src/InputManager.h | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 469e6c919..32738e611 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -22,8 +22,11 @@ #include #define KEYBOARD_GUID_STRING "-1" -#define TOUCH_GUID_STRING "-2" -#define CEC_GUID_STRING "-3" +#define CEC_GUID_STRING "-2" + +#if defined(__ANDROID__) +#define TOUCH_GUID_STRING "-3" +#endif namespace { diff --git a/es-core/src/InputManager.h b/es-core/src/InputManager.h index d0c8143d1..b77667975 100644 --- a/es-core/src/InputManager.h +++ b/es-core/src/InputManager.h @@ -12,7 +12,10 @@ #define ES_CORE_INPUT_MANAGER_H #include "CECInput.h" + +#if defined(__ANDROID__) #include "InputOverlay.h" +#endif #include #include From 183e8a1f93fb4e0158d43c55413e551042ba752e Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 13 Jan 2024 19:44:42 +0100 Subject: [PATCH 159/320] (Android) Added shoulder and trigger buttons to the touch overlay --- es-app/src/main.cpp | 1 - es-core/src/InputManager.cpp | 6 ++++-- .../graphics/overlay/button_shoulder_l.svg | 20 +++++++++++++++++++ .../graphics/overlay/button_shoulder_r.svg | 20 +++++++++++++++++++ .../graphics/overlay/button_trigger_l.svg | 20 +++++++++++++++++++ .../graphics/overlay/button_trigger_r.svg | 20 +++++++++++++++++++ 6 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 resources/graphics/overlay/button_shoulder_l.svg create mode 100644 resources/graphics/overlay/button_shoulder_r.svg create mode 100644 resources/graphics/overlay/button_trigger_l.svg create mode 100644 resources/graphics/overlay/button_trigger_r.svg diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index c5ccb0043..eb13be996 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -38,7 +38,6 @@ #include #if defined(__ANDROID__) -#include "InputOverlay.h" #include "utils/PlatformUtilAndroid.h" #endif diff --git a/es-core/src/InputManager.cpp b/es-core/src/InputManager.cpp index 32738e611..8a9d947ff 100644 --- a/es-core/src/InputManager.cpp +++ b/es-core/src/InputManager.cpp @@ -731,6 +731,7 @@ void InputManager::loadDefaultControllerConfig(SDL_JoystickID deviceIndex) void InputManager::loadTouchConfig() { +#if defined(__ANDROID__) InputConfig* cfg {mTouchInputConfig.get()}; if (cfg->isConfigured()) @@ -749,9 +750,10 @@ void InputManager::loadTouchConfig() cfg->mapInput("Y", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_Y, 1, true)); cfg->mapInput("LeftShoulder", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_LEFTSHOULDER, 1, true)); cfg->mapInput("RightShoulder", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, 1, true)); - cfg->mapInput("LeftTrigger", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_AXIS_TRIGGERLEFT, 1, true)); - cfg->mapInput("RightTrigger", Input(DEVICE_TOUCH, TYPE_TOUCH, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, 1, true)); + cfg->mapInput("LeftTrigger", Input(DEVICE_TOUCH, TYPE_TOUCH, InputOverlay::TriggerButtons::TRIGGER_LEFT, 1, true)); + cfg->mapInput("RightTrigger", Input(DEVICE_TOUCH, TYPE_TOUCH, InputOverlay::TriggerButtons::TRIGGER_RIGHT, 1, true)); // clang-format on +#endif } void InputManager::addControllerByDeviceIndex(Window* window, int deviceIndex) diff --git a/resources/graphics/overlay/button_shoulder_l.svg b/resources/graphics/overlay/button_shoulder_l.svg new file mode 100644 index 000000000..9f69a46e4 --- /dev/null +++ b/resources/graphics/overlay/button_shoulder_l.svg @@ -0,0 +1,20 @@ + + + + + + diff --git a/resources/graphics/overlay/button_shoulder_r.svg b/resources/graphics/overlay/button_shoulder_r.svg new file mode 100644 index 000000000..504987886 --- /dev/null +++ b/resources/graphics/overlay/button_shoulder_r.svg @@ -0,0 +1,20 @@ + + + + + + diff --git a/resources/graphics/overlay/button_trigger_l.svg b/resources/graphics/overlay/button_trigger_l.svg new file mode 100644 index 000000000..51c9e0a94 --- /dev/null +++ b/resources/graphics/overlay/button_trigger_l.svg @@ -0,0 +1,20 @@ + + + + + + diff --git a/resources/graphics/overlay/button_trigger_r.svg b/resources/graphics/overlay/button_trigger_r.svg new file mode 100644 index 000000000..530eb0cb6 --- /dev/null +++ b/resources/graphics/overlay/button_trigger_r.svg @@ -0,0 +1,20 @@ + + + + + + From 7ec1472f03b76e0cd697d7da720b93ce83d048f1 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 13 Jan 2024 20:28:46 +0100 Subject: [PATCH 160/320] (Android) Added back and start buttons to the touch overlay --- resources/graphics/overlay/button_back.svg | 37 +++++++++++++++++++++ resources/graphics/overlay/button_start.svg | 37 +++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 resources/graphics/overlay/button_back.svg create mode 100644 resources/graphics/overlay/button_start.svg diff --git a/resources/graphics/overlay/button_back.svg b/resources/graphics/overlay/button_back.svg new file mode 100644 index 000000000..61739f9da --- /dev/null +++ b/resources/graphics/overlay/button_back.svg @@ -0,0 +1,37 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/resources/graphics/overlay/button_start.svg b/resources/graphics/overlay/button_start.svg new file mode 100644 index 000000000..959928f99 --- /dev/null +++ b/resources/graphics/overlay/button_start.svg @@ -0,0 +1,37 @@ + + + + + + image/svg+xml + + + + + + + + From a3fa8d37338e337e66dd272d242ac38edfc1d2f3 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 13 Jan 2024 20:41:53 +0100 Subject: [PATCH 161/320] (Android) Small adjustment to the touch overlay trigger button images --- resources/graphics/overlay/button_trigger_l.svg | 2 +- resources/graphics/overlay/button_trigger_r.svg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/graphics/overlay/button_trigger_l.svg b/resources/graphics/overlay/button_trigger_l.svg index 51c9e0a94..c168f86ac 100644 --- a/resources/graphics/overlay/button_trigger_l.svg +++ b/resources/graphics/overlay/button_trigger_l.svg @@ -11,7 +11,7 @@ id="defs8" /> Date: Sat, 13 Jan 2024 21:27:46 +0100 Subject: [PATCH 162/320] Added the melonDS DS RetroArch core as an alternative emulator for the nds system --- resources/systems/android/es_systems.xml | 1 + resources/systems/linux/es_systems.xml | 1 + resources/systems/macos/es_systems.xml | 1 + resources/systems/unix/es_systems.xml | 1 + resources/systems/windows/es_systems.xml | 1 + 5 files changed, 5 insertions(+) diff --git a/resources/systems/android/es_systems.xml b/resources/systems/android/es_systems.xml index 4958821e6..c45843f70 100644 --- a/resources/systems/android/es_systems.xml +++ b/resources/systems/android/es_systems.xml @@ -1047,6 +1047,7 @@ .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%=desmume_libretro_android.so %EXTRA_ROM%=%ROM% %EMULATOR_RETROARCH% %EXTRA_CONFIGFILE%=/storage/emulated/0/Android/data/%ANDROIDPACKAGE%/files/retroarch.cfg %EXTRA_LIBRETRO%=desmume2015_libretro_android.so %EXTRA_ROM%=%ROM% + %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_DRASTIC% %DATA%=%ROMSAF% nds diff --git a/resources/systems/linux/es_systems.xml b/resources/systems/linux/es_systems.xml index bea24b464..93407ad20 100644 --- a/resources/systems/linux/es_systems.xml +++ b/resources/systems/linux/es_systems.xml @@ -1248,6 +1248,7 @@ %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/desmume_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/desmume2015_libretro.so %ROM% %EMULATOR_DESMUME% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/melondsds_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/melonds_libretro.so %ROM% %EMULATOR_MELONDS% %ROM% %EMULATOR_SKYEMU% %ROM% diff --git a/resources/systems/macos/es_systems.xml b/resources/systems/macos/es_systems.xml index 8fd76d1a2..6834bff88 100644 --- a/resources/systems/macos/es_systems.xml +++ b/resources/systems/macos/es_systems.xml @@ -1199,6 +1199,7 @@ .app .APP .bin .BIN .nds .NDS .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/desmume_libretro.dylib %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/desmume2015_libretro.dylib %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/melondsds_libretro.dylib %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/melonds_libretro.dylib %ROM% %EMULATOR_MELONDS% %ROM% %EMULATOR_SKYEMU% %ROM% diff --git a/resources/systems/unix/es_systems.xml b/resources/systems/unix/es_systems.xml index f371cc215..78e6d445e 100644 --- a/resources/systems/unix/es_systems.xml +++ b/resources/systems/unix/es_systems.xml @@ -1232,6 +1232,7 @@ %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/desmume_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/desmume2015_libretro.so %ROM% %EMULATOR_DESMUME% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/melondsds_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/melonds_libretro.so %ROM% %EMULATOR_MELONDS% %ROM% %EMULATOR_SKYEMU% %ROM% diff --git a/resources/systems/windows/es_systems.xml b/resources/systems/windows/es_systems.xml index 545685173..b6add3903 100644 --- a/resources/systems/windows/es_systems.xml +++ b/resources/systems/windows/es_systems.xml @@ -1244,6 +1244,7 @@ .app .APP .bin .BIN .nds .NDS .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\desmume_libretro.dll %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\desmume2015_libretro.dll %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\melondsds_libretro.dll %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%\melonds_libretro.dll %ROM% %EMULATOR_MELONDS% %ROM% %EMULATOR_SKYEMU% %ROM% From d07f4be2fd54c891f2bb3f92fb44885c7be0307b Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 13 Jan 2024 21:28:54 +0100 Subject: [PATCH 163/320] Documentation update --- ANDROID.md | 2 +- CHANGELOG.md | 3 ++- USERGUIDE-DEV.md | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ANDROID.md b/ANDROID.md index 812aba6f9..c17d56c88 100644 --- a/ANDROID.md +++ b/ANDROID.md @@ -108,7 +108,7 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | n3ds | Nintendo 3DS | Citra | Citra **(Standalone)**,
Citra MMJ **(Standalone)** | No | Single ROM file | | n64 | Nintendo 64 | Mupen64Plus-Next | M64Plus FZ **(Standalone)**,
ParaLLEl N64 | No | Single archive or ROM file | | n64dd | Nintendo 64DD | Mupen64Plus-Next | ParaLLEl N64 | Yes | | -| nds | Nintendo DS | DeSmuME | DeSmuME 2015,
melonDS,
DraStic **(Standalone)** | No | Single archive or ROM file | +| nds | Nintendo DS | DeSmuME | DeSmuME 2015,
melonDS DS,
melonDS,
DraStic **(Standalone)** | No | Single archive or ROM file | | neogeo | SNK Neo Geo | FinalBurn Neo | 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 | | diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b3109a0e..8728ba5c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,9 +18,10 @@ * Changed the default slideshow custom image directory from slideshow/custom_images to screensavers/custom_slideshow * Changed the custom slideshow image directory setting from ScreensaverSlideshowImageDir to ScreensaverSlideshowCustomDir * The HTTP error code will now be shown on scraper errors instead of the "File is smaller than 350 bytes" message -* Removed the ScraperHaltOnInvalidMedia option as it has been superseded by the HTTP error code logic +* Removed the ScraperHaltOnInvalidMedia option and corresponding menu entry as it has been superseded by the HTTP error code logic * Added a ScraperIgnoreHTTP404Errors option that can be manually set in es_settings.xml to ignore 404 errors (resource not found) * Added Mednafen standalone as an alternative emulator for the gb, gba and gbc systems +* Added the melonDS DS RetroArch core as an alternative emulator for the nds system * (Linux) Added support for the AppImage release of Vita3K * Added the .zso file extension to the ps2 system * Added the .zar file extension to the xbox360 system on Linux and Windows diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index 1b115656d..28fca42cd 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -4029,7 +4029,7 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | n3ds | Nintendo 3DS | Citra [LW],
Citra **(Standalone)** [M] | Citra 2018 [LW],
Citra **(Standalone)** [LW] | 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 | DeSmuME | DeSmuME 2015,
DeSmuME **(Standalone)** [L],
melonDS,
melonDS **(Standalone)**,
SkyEmu **(Standalone)** | No | Single archive or ROM file | +| nds | Nintendo DS | DeSmuME | DeSmuME 2015,
DeSmuME **(Standalone)** [L],
melonDS DS,
melonDS,
melonDS **(Standalone)**,
SkyEmu **(Standalone)** | No | Single archive or ROM file | | neogeo | SNK Neo Geo | FinalBurn Neo | FinalBurn Neo **(Standalone)** [LW],
MAME **(Standalone)** | Yes | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | | neogeocd | SNK Neo Geo CD | NeoCD | FinalBurn Neo,
FinalBurn Neo **(Standalone)** [L],
MAME **(Standalone)** | Yes | .chd (NeoCD and MAME only) or .cue file | | neogeocdjp | SNK Neo Geo CD [Japan] | NeoCD | FinalBurn Neo,
FinalBurn Neo **(Standalone)** [L],
MAME **(Standalone)** | Yes | .chd (NeoCD and MAME only) or .cue file | From d91d2ed066c7f2ed34bbdf3c901bb9890ec3eb6b Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 13 Jan 2024 21:38:35 +0100 Subject: [PATCH 164/320] (Android) Small adjustments to the touch overlay back and start images --- resources/graphics/overlay/button_back.svg | 16 +++++++++------- resources/graphics/overlay/button_start.svg | 16 +++++++++------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/resources/graphics/overlay/button_back.svg b/resources/graphics/overlay/button_back.svg index 61739f9da..4ef8da397 100644 --- a/resources/graphics/overlay/button_back.svg +++ b/resources/graphics/overlay/button_back.svg @@ -23,15 +23,17 @@ - + diff --git a/resources/graphics/overlay/button_start.svg b/resources/graphics/overlay/button_start.svg index 959928f99..b5db9697c 100644 --- a/resources/graphics/overlay/button_start.svg +++ b/resources/graphics/overlay/button_start.svg @@ -23,15 +23,17 @@ - + From 4af24e1836ebeb336e15972db3e29dace66fe5a5 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 14 Jan 2024 12:08:49 +0100 Subject: [PATCH 165/320] (Android) Small adjustment to the touch overlay dpad image --- resources/graphics/overlay/button_dpad.svg | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/graphics/overlay/button_dpad.svg b/resources/graphics/overlay/button_dpad.svg index 7e258568f..25fa86f70 100644 --- a/resources/graphics/overlay/button_dpad.svg +++ b/resources/graphics/overlay/button_dpad.svg @@ -11,6 +11,10 @@ id="defs8" /> + From 927cb6f2f7fdd70a85d47e98dc54a44b38d7d0e5 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 14 Jan 2024 12:36:21 +0100 Subject: [PATCH 166/320] (Android) Added support for medium, large and small touch overlay sizes --- es-app/src/guis/GuiMenu.cpp | 53 +++++++++++++++++++++++++++++++++++++ es-core/src/Settings.cpp | 1 + 2 files changed, 54 insertions(+) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index f6f1309f2..0d3cecc1c 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -38,6 +38,10 @@ #include "guis/GuiThemeDownloader.h" #include "utils/PlatformUtil.h" +#if defined(__ANDROID__) +#include "InputOverlay.h" +#endif + #include #include @@ -1145,6 +1149,28 @@ void GuiMenu::openInputDeviceOptions() }); #if defined(__ANDROID__) + // Touch overlay size. + auto touchOverlaySize = std::make_shared>( + getHelpStyle(), "TOUCH OVERLAY SIZE", false); + std::string selectedOverlaySize {Settings::getInstance()->getString("InputTouchOverlaySize")}; + touchOverlaySize->add("MEDIUM", "medium", selectedOverlaySize == "medium"); + touchOverlaySize->add("LARGE", "large", selectedOverlaySize == "large"); + touchOverlaySize->add("SMALL", "small", selectedOverlaySize == "small"); + // If there are no objects returned, then there must be a manually modified entry in the + // configuration file. Simply set the overlay size to "medium" in this case. + if (touchOverlaySize->getSelectedObjects().size() == 0) + touchOverlaySize->selectEntry(0); + s->addWithLabel("TOUCH OVERLAY SIZE", touchOverlaySize); + s->addSaveFunc([touchOverlaySize, s] { + if (touchOverlaySize->getSelected() != + Settings::getInstance()->getString("InputTouchOverlaySize")) { + Settings::getInstance()->setString("InputTouchOverlaySize", + touchOverlaySize->getSelected()); + s->setNeedsSaving(); + InputOverlay::getInstance().createButtons(); + } + }); + // Whether to enable the touch overlay. auto inputTouchOverlay = std::make_shared(); inputTouchOverlay->setState(Settings::getInstance()->getBool("InputTouchOverlay")); @@ -1156,6 +1182,33 @@ void GuiMenu::openInputDeviceOptions() s->setNeedsSaving(); } }); + + if (!Settings::getInstance()->getBool("InputTouchOverlay")) { + touchOverlaySize->setEnabled(false); + touchOverlaySize->setOpacity(DISABLED_OPACITY); + touchOverlaySize->getParent() + ->getChild(touchOverlaySize->getChildIndex() - 1) + ->setOpacity(DISABLED_OPACITY); + } + + auto inputTouchOverlayCallback = [touchOverlaySize]() { + if (touchOverlaySize->getEnabled()) { + touchOverlaySize->setEnabled(false); + touchOverlaySize->setOpacity(DISABLED_OPACITY); + touchOverlaySize->getParent() + ->getChild(touchOverlaySize->getChildIndex() - 1) + ->setOpacity(DISABLED_OPACITY); + } + else { + touchOverlaySize->setEnabled(true); + touchOverlaySize->setOpacity(1.0f); + touchOverlaySize->getParent() + ->getChild(touchOverlaySize->getChildIndex() - 1) + ->setOpacity(1.0f); + } + }; + + inputTouchOverlay->setCallback(inputTouchOverlayCallback); #endif // Whether to only accept input from the first controller. diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 7eff9f767..761c4ceaa 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -240,6 +240,7 @@ void Settings::setDefaults() // Input device settings. mStringMap["InputControllerType"] = {"xbox", "xbox"}; #if defined(__ANDROID__) + mStringMap["InputTouchOverlaySize"] = {"medium", "medium"}; mBoolMap["InputTouchOverlay"] = {true, true}; #endif mBoolMap["InputOnlyFirstController"] = {false, false}; From a68154bfa5d9c80b852d41eeb510707762f2557a Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 14 Jan 2024 13:06:33 +0100 Subject: [PATCH 167/320] (Android) Added a warning message when attempting to disable the touch overlay --- es-app/src/guis/GuiMenu.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 0d3cecc1c..727d995a0 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1191,7 +1191,24 @@ void GuiMenu::openInputDeviceOptions() ->setOpacity(DISABLED_OPACITY); } - auto inputTouchOverlayCallback = [touchOverlaySize]() { + auto inputTouchOverlayCallback = [this, inputTouchOverlay, touchOverlaySize]() { + if (!inputTouchOverlay->getState()) { + const std::string message { + "DON'T DISABLE THE TOUCH OVERLAY UNLESS YOU ARE USING A CONTROLLER OR YOU WILL " + "LOCK YOURSELF OUT OF THE APP. IF THIS HAPPENS YOU WILL NEED TO TEMPORARILY " + "PLUG IN A CONTROLLER OR A KEYBOARD TO ENABLE THIS SETTING AGAIN, OR YOU " + "COULD CLEAR THE APP STORAGE IN THE ANDROID SETTINGS TO FORCE THE CONFIGURATOR " + "TO RUN ON NEXT STARTUP"}; + + Window* window {mWindow}; + window->pushGui( + new GuiMsgBox(getHelpStyle(), message, "OK", nullptr, "", nullptr, "", nullptr, + nullptr, true, true, + (mRenderer->getIsVerticalOrientation() ? + 0.84f : + 0.54f * (1.778f / mRenderer->getScreenAspectRatio())))); + } + if (touchOverlaySize->getEnabled()) { touchOverlaySize->setEnabled(false); touchOverlaySize->setOpacity(DISABLED_OPACITY); From 720ca50cd018d8003eb760543393df7669b04e49 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 14 Jan 2024 13:14:07 +0100 Subject: [PATCH 168/320] (Android) The touch overlay setting is now always enabled after running the configurator --- es-app/src/main.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index eb13be996..afd77b086 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -601,6 +601,12 @@ int main(int argc, char* argv[]) if (Utils::Platform::Android::checkConfigurationNeeded()) exit(0); + + // Always enable the touch overlay after running the configurator. + if (!Settings::getInstance()->getBool("InputTouchOverlay")) { + Settings::getInstance()->setBool("InputTouchOverlay", true); + Settings::getInstance()->saveFile(); + } } Utils::Platform::Android::setDataDirectories(); From 218cb1e96fc66418d0b2ec99790bb530a4df0ee1 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 14 Jan 2024 13:30:45 +0100 Subject: [PATCH 169/320] (Android) Added some cleanup code when changing the input overlay setting --- es-app/src/guis/GuiMenu.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 727d995a0..0f393f986 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1179,6 +1179,12 @@ void GuiMenu::openInputDeviceOptions() if (Settings::getInstance()->getBool("InputTouchOverlay") != inputTouchOverlay->getState()) { Settings::getInstance()->setBool("InputTouchOverlay", inputTouchOverlay->getState()); + + if (Settings::getInstance()->getBool("InputTouchOverlay")) + InputOverlay::getInstance().createButtons(); + else + InputOverlay::getInstance().clearButtons(); + s->setNeedsSaving(); } }); From 0c03583f809f5db016f06c9a3a9df8fe212654fe Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 14 Jan 2024 17:20:26 +0100 Subject: [PATCH 170/320] (Android) Small change to a warning message dialog --- es-app/src/guis/GuiMenu.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 0f393f986..a0336081c 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1203,8 +1203,8 @@ void GuiMenu::openInputDeviceOptions() "DON'T DISABLE THE TOUCH OVERLAY UNLESS YOU ARE USING A CONTROLLER OR YOU WILL " "LOCK YOURSELF OUT OF THE APP. IF THIS HAPPENS YOU WILL NEED TO TEMPORARILY " "PLUG IN A CONTROLLER OR A KEYBOARD TO ENABLE THIS SETTING AGAIN, OR YOU " - "COULD CLEAR THE APP STORAGE IN THE ANDROID SETTINGS TO FORCE THE CONFIGURATOR " - "TO RUN ON NEXT STARTUP"}; + "COULD CLEAR THE ES-DE APP STORAGE IN THE ANDROID SETTINGS TO FORCE THE " + "CONFIGURATOR TO RUN ON NEXT STARTUP"}; Window* window {mWindow}; window->pushGui( From c27ee24cc40fb4a750b53edc46902c974b102103 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 14 Jan 2024 21:55:09 +0100 Subject: [PATCH 171/320] (Android) Added fade-out support to the touch overlay --- es-app/src/guis/GuiMenu.cpp | 38 ++++++++++++++++++++++++++++++++++--- es-app/src/main.cpp | 2 +- es-core/src/Settings.cpp | 1 + es-core/src/Window.cpp | 5 +++++ 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index a0336081c..9af463c48 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1171,6 +1171,21 @@ void GuiMenu::openInputDeviceOptions() } }); + // Touch overlay fade-out timer. + auto touchOverlayFadeTime = std::make_shared(0.0f, 20.0f, 1.0f, "s"); + touchOverlayFadeTime->setValue( + static_cast(Settings::getInstance()->getInt("InputTouchOverlayFadeTime"))); + s->addWithLabel("TOUCH OVERLAY FADE-OUT TIME", touchOverlayFadeTime); + s->addSaveFunc([touchOverlayFadeTime, s] { + if (touchOverlayFadeTime->getValue() != + static_cast(Settings::getInstance()->getInt("InputTouchOverlayFadeTime"))) { + Settings::getInstance()->setInt("InputTouchOverlayFadeTime", + static_cast(touchOverlayFadeTime->getValue())); + InputOverlay::getInstance().resetFadeTimer(); + s->setNeedsSaving(); + } + }); + // Whether to enable the touch overlay. auto inputTouchOverlay = std::make_shared(); inputTouchOverlay->setState(Settings::getInstance()->getBool("InputTouchOverlay")); @@ -1179,12 +1194,10 @@ void GuiMenu::openInputDeviceOptions() if (Settings::getInstance()->getBool("InputTouchOverlay") != inputTouchOverlay->getState()) { Settings::getInstance()->setBool("InputTouchOverlay", inputTouchOverlay->getState()); - if (Settings::getInstance()->getBool("InputTouchOverlay")) InputOverlay::getInstance().createButtons(); else InputOverlay::getInstance().clearButtons(); - s->setNeedsSaving(); } }); @@ -1195,9 +1208,16 @@ void GuiMenu::openInputDeviceOptions() touchOverlaySize->getParent() ->getChild(touchOverlaySize->getChildIndex() - 1) ->setOpacity(DISABLED_OPACITY); + + touchOverlayFadeTime->setEnabled(false); + touchOverlayFadeTime->setOpacity(DISABLED_OPACITY); + touchOverlayFadeTime->getParent() + ->getChild(touchOverlayFadeTime->getChildIndex() - 1) + ->setOpacity(DISABLED_OPACITY); } - auto inputTouchOverlayCallback = [this, inputTouchOverlay, touchOverlaySize]() { + auto inputTouchOverlayCallback = [this, inputTouchOverlay, touchOverlaySize, + touchOverlayFadeTime]() { if (!inputTouchOverlay->getState()) { const std::string message { "DON'T DISABLE THE TOUCH OVERLAY UNLESS YOU ARE USING A CONTROLLER OR YOU WILL " @@ -1221,6 +1241,12 @@ void GuiMenu::openInputDeviceOptions() touchOverlaySize->getParent() ->getChild(touchOverlaySize->getChildIndex() - 1) ->setOpacity(DISABLED_OPACITY); + + touchOverlayFadeTime->setEnabled(false); + touchOverlayFadeTime->setOpacity(DISABLED_OPACITY); + touchOverlayFadeTime->getParent() + ->getChild(touchOverlayFadeTime->getChildIndex() - 1) + ->setOpacity(DISABLED_OPACITY); } else { touchOverlaySize->setEnabled(true); @@ -1228,6 +1254,12 @@ void GuiMenu::openInputDeviceOptions() touchOverlaySize->getParent() ->getChild(touchOverlaySize->getChildIndex() - 1) ->setOpacity(1.0f); + + touchOverlayFadeTime->setEnabled(true); + touchOverlayFadeTime->setOpacity(1.0f); + touchOverlayFadeTime->getParent() + ->getChild(touchOverlayFadeTime->getChildIndex() - 1) + ->setOpacity(1.0f); } }; diff --git a/es-app/src/main.cpp b/es-app/src/main.cpp index afd77b086..eb43bdcd0 100644 --- a/es-app/src/main.cpp +++ b/es-app/src/main.cpp @@ -896,7 +896,7 @@ int main(int argc, char* argv[]) } #if defined(__ANDROID__) - InputOverlay::getInstance(); + InputOverlay::getInstance().init(); LOG(LogDebug) << "Android API level: " << SDL_GetAndroidSDKVersion(); Utils::Platform::Android::printDeviceInfo(); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 761c4ceaa..02f3f11e1 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -241,6 +241,7 @@ void Settings::setDefaults() mStringMap["InputControllerType"] = {"xbox", "xbox"}; #if defined(__ANDROID__) mStringMap["InputTouchOverlaySize"] = {"medium", "medium"}; + mIntMap["InputTouchOverlayFadeTime"] = {6, 6}; mBoolMap["InputTouchOverlay"] = {true, true}; #endif mBoolMap["InputOnlyFirstController"] = {false, false}; diff --git a/es-core/src/Window.cpp b/es-core/src/Window.cpp index 5c5a7eb0c..a74b2d591 100644 --- a/es-core/src/Window.cpp +++ b/es-core/src/Window.cpp @@ -447,6 +447,11 @@ void Window::update(int deltaTime) if (mScreensaver && mRenderScreensaver) mScreensaver->update(deltaTime); + +#if defined(__ANDROID__) + if (Settings::getInstance()->getBool("InputTouchOverlay")) + InputOverlay::getInstance().update(deltaTime); +#endif } bool Window::isBackgroundDimmed() From ba7874b0e706cc196a5c13b2ce300b4cec1b94fe Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 14 Jan 2024 22:18:21 +0100 Subject: [PATCH 172/320] Fixed an issue where touch input was not logged correctly --- es-core/src/InputConfig.cpp | 4 ++++ es-core/src/InputConfig.h | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/es-core/src/InputConfig.cpp b/es-core/src/InputConfig.cpp index 2cbfced0b..8f9e30ca8 100644 --- a/es-core/src/InputConfig.cpp +++ b/es-core/src/InputConfig.cpp @@ -28,6 +28,8 @@ std::string InputConfig::inputTypeToString(InputType type) return "button"; case TYPE_KEY: return "key"; + case TYPE_TOUCH: + return "touch-button"; case TYPE_CEC_BUTTON: return "cec-button"; default: @@ -43,6 +45,8 @@ InputType InputConfig::stringToInputType(const std::string& type) return TYPE_BUTTON; if (type == "key") return TYPE_KEY; + if (type == "touch-button") + return TYPE_TOUCH; if (type == "cec-button") return TYPE_CEC_BUTTON; return TYPE_COUNT; diff --git a/es-core/src/InputConfig.h b/es-core/src/InputConfig.h index 1ad30128d..10899f246 100644 --- a/es-core/src/InputConfig.h +++ b/es-core/src/InputConfig.h @@ -17,8 +17,8 @@ #include #define DEVICE_KEYBOARD -1 -#define DEVICE_TOUCH -2 -#define DEVICE_CEC -3 +#define DEVICE_CEC -2 +#define DEVICE_TOUCH -3 enum InputType { TYPE_AXIS, @@ -83,6 +83,10 @@ public: stream << "Key " << SDL_GetKeyName((SDL_Keycode)id); break; } + case TYPE_TOUCH: { + stream << "Button " << id; + break; + } case TYPE_CEC_BUTTON: { stream << "CEC-Button " << getCECButtonName(id); break; From fab034e5345e023223b03e17f3a52e274dfcdda9 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 14 Jan 2024 23:01:12 +0100 Subject: [PATCH 173/320] (Android) Small change to a warning message dialog --- es-app/src/guis/GuiMenu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 9af463c48..12e816884 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1223,7 +1223,7 @@ void GuiMenu::openInputDeviceOptions() "DON'T DISABLE THE TOUCH OVERLAY UNLESS YOU ARE USING A CONTROLLER OR YOU WILL " "LOCK YOURSELF OUT OF THE APP. IF THIS HAPPENS YOU WILL NEED TO TEMPORARILY " "PLUG IN A CONTROLLER OR A KEYBOARD TO ENABLE THIS SETTING AGAIN, OR YOU " - "COULD CLEAR THE ES-DE APP STORAGE IN THE ANDROID SETTINGS TO FORCE THE " + "COULD CLEAR THE ES-DE STORAGE IN THE ANDROID APP SETTINGS TO FORCE THE " "CONFIGURATOR TO RUN ON NEXT STARTUP"}; Window* window {mWindow}; From 1232d703c4eab41d9a38bd78f3e1822d8b1902c4 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 14 Jan 2024 23:17:44 +0100 Subject: [PATCH 174/320] Documentation update --- USERGUIDE-DEV.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index 28fca42cd..94e952b8f 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -3366,6 +3366,18 @@ Settings related to the input devices, i.e. the keyboard and controllers. This setting gives the ability to choose between the controller types _Xbox, Xbox 360, PlayStation 1/2/3, PlayStation 4, PlayStation 5, Switch Pro_ and _SNES_. Doing so alters the help icons and help text as well as the icons and text for the input device configurator. The setting is only cosmetic and does not change the controller behavior or the controller button mappings. +**Touch overlay size** _(Android only)_ + +If the touch input overlay has been enabled, then this setting makes it possible to select between a _medium, large_ or _small_ overlay size. + +**Touch overlay fade-out time** _(Android only)_ + +How long, in seconds, to display the overlay before fading it. Tapping anywhere on the screen will bring back the overlay if it's been faded out. + +**Enable touch overlay** _(Android only)_ + +The touch overlay applies a layer of virtual buttons on top of the ES-DE window. This makes it possible to use the application on devices that lack physical buttons, such as a mobile phone or tablet. Be careful to not accidentally disable this setting as you may lock yourself out of the application. If you do that, you'll need to temporarily plug in a controller or keyboard to enable the setting again, or you could clear the ES-DE storage in the Android App settings which will force the configurator to run on next startup. + **Only accept input from first controller** If enabling this option, only the first controller detected during startup will send its input to ES-DE (the keyboard input is unaffected by this setting and will be enabled regardless). This is a good way to limit potential chaos with multiple persons fighting over which games to play. Note that disconnecting and reconnecting controllers while ES-DE is running may change what is considered the first controller. This setting does not affect the emulators in any way, it's only applied to ES-DE. Another issue is that some wireless controllers have buggy drivers and will register as two devices, meaning all button presses will be registered twice inside ES-DE. Using this option is one solution to the problem, although it's also possible to blacklist the extra controller entry, as described [here](INSTALL-DEV.md#adding-custom-controller-profiles). @@ -4029,7 +4041,7 @@ The **@** symbol indicates that the emulator is _deprecated_ and will be removed | n3ds | Nintendo 3DS | Citra [LW],
Citra **(Standalone)** [M] | Citra 2018 [LW],
Citra **(Standalone)** [LW] | 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 | DeSmuME | DeSmuME 2015,
DeSmuME **(Standalone)** [L],
melonDS DS,
melonDS,
melonDS **(Standalone)**,
SkyEmu **(Standalone)** | No | Single archive or ROM file | +| nds | Nintendo DS | DeSmuME | DeSmuME 2015,
DeSmuME **(Standalone)** [L],
melonDS DS,
melonDS @,
melonDS **(Standalone)**,
SkyEmu **(Standalone)** | No | Single archive or ROM file | | neogeo | SNK Neo Geo | FinalBurn Neo | FinalBurn Neo **(Standalone)** [LW],
MAME **(Standalone)** | Yes | See the specific _Arcade and Neo Geo_ section elsewhere in this guide | | neogeocd | SNK Neo Geo CD | NeoCD | FinalBurn Neo,
FinalBurn Neo **(Standalone)** [L],
MAME **(Standalone)** | Yes | .chd (NeoCD and MAME only) or .cue file | | neogeocdjp | SNK Neo Geo CD [Japan] | NeoCD | FinalBurn Neo,
FinalBurn Neo **(Standalone)** [L],
MAME **(Standalone)** | Yes | .chd (NeoCD and MAME only) or .cue file | From 3964cb2bcfb9c71bd14ff9fc77b64653fb072f2c Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 15 Jan 2024 17:39:25 +0100 Subject: [PATCH 175/320] (Android) Fixed some CMake issues when building ARM and x86 at the same time --- CMakeLists.txt | 12 ++++++++---- es-core/CMakeLists.txt | 4 ++++ external/CMakeLists.txt | 8 ++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 02a2b25b4..ed53f5f2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -613,10 +613,14 @@ else() endif() if(NOT WIN32) - # SVG rendering library LunaSVG. - set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/liblunasvg.a) - # Lottie animation library rlottie. - set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/librlottie.a) + # SVG rendering library LunaSVG and Lottie animation library rlottie. + if(ANDROID) + set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}/liblunasvg.a) + set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}/librlottie.a) + else() + set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/liblunasvg.a) + set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/librlottie.a) + endif() endif() if(APPLE) diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 1ed7ba8f7..4102da019 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -182,3 +182,7 @@ endif() include_directories(${COMMON_INCLUDE_DIRS}) add_library(es-core STATIC ${CORE_SOURCES} ${CORE_HEADERS}) target_link_libraries(es-core ${COMMON_LIBRARIES}) + +if(ANDROID) + set_target_properties(es-core PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}) +endif() diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 666d4d83c..43d67e0bc 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -40,6 +40,10 @@ if(CMAKE_CXX_COMPILER_ID MATCHES MSVC) target_compile_options(lunasvg PRIVATE "/wd4251" "/wd4267") endif() +if(ANDROID) + set_target_properties(lunasvg PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}) +endif() + # Disable threading support for rlottie as this functionality actually leads to far worse # performance. As well there is a bug on Windows that makes rlottie hang forever on application # shutdown if compiled using MinGW with threading support enabled. @@ -60,5 +64,9 @@ else() target_compile_options(rlottie PRIVATE "-w") endif() +if(ANDROID) + set_target_properties(rlottie PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}) +endif() + # Build LunaSVG before rlottie. add_dependencies(rlottie lunasvg) From c9ff27b3bed176a324a2cb43b893ebc80af6b5ee Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Mon, 15 Jan 2024 19:20:44 +0100 Subject: [PATCH 176/320] (Android) Separated the build artifacts for the Full and Lite releases --- CMakeLists.txt | 9 +++++++-- es-core/CMakeLists.txt | 8 +++++++- external/CMakeLists.txt | 16 ++++++++++++++-- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ed53f5f2e..04e372109 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -615,8 +615,13 @@ endif() if(NOT WIN32) # SVG rendering library LunaSVG and Lottie animation library rlottie. if(ANDROID) - set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}/liblunasvg.a) - set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}/librlottie.a) + if(ANDROID_LITE_RELEASE) + set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/android_lite_${ANDROID_ABI}/liblunasvg.a) + set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/android_lite_${ANDROID_ABI}/librlottie.a) + else() + set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}/liblunasvg.a) + set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}/librlottie.a) + endif() else() set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/liblunasvg.a) set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/librlottie.a) diff --git a/es-core/CMakeLists.txt b/es-core/CMakeLists.txt index 4102da019..592222d51 100644 --- a/es-core/CMakeLists.txt +++ b/es-core/CMakeLists.txt @@ -184,5 +184,11 @@ add_library(es-core STATIC ${CORE_SOURCES} ${CORE_HEADERS}) target_link_libraries(es-core ${COMMON_LIBRARIES}) if(ANDROID) - set_target_properties(es-core PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}) + if(ANDROID_LITE_RELEASE) + set_target_properties(es-core PROPERTIES ARCHIVE_OUTPUT_DIRECTORY + ${PROJECT_SOURCE_DIR}/../android_lite_${ANDROID_ABI}) + else() + set_target_properties(es-core PROPERTIES ARCHIVE_OUTPUT_DIRECTORY + ${PROJECT_SOURCE_DIR}/../android_${ANDROID_ABI}) + endif() endif() diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 43d67e0bc..be7268087 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -41,7 +41,13 @@ if(CMAKE_CXX_COMPILER_ID MATCHES MSVC) endif() if(ANDROID) - set_target_properties(lunasvg PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}) + if(ANDROID_LITE_RELEASE) + set_target_properties(lunasvg PROPERTIES ARCHIVE_OUTPUT_DIRECTORY + ${PROJECT_SOURCE_DIR}/android_lite_${ANDROID_ABI}) + else() + set_target_properties(lunasvg PROPERTIES ARCHIVE_OUTPUT_DIRECTORY + ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}) + endif() endif() # Disable threading support for rlottie as this functionality actually leads to far worse @@ -65,7 +71,13 @@ else() endif() if(ANDROID) - set_target_properties(rlottie PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}) + if(ANDROID_LITE_RELEASE) + set_target_properties(rlottie PROPERTIES ARCHIVE_OUTPUT_DIRECTORY + ${PROJECT_SOURCE_DIR}/android_lite_${ANDROID_ABI}) + else() + set_target_properties(rlottie PROPERTIES ARCHIVE_OUTPUT_DIRECTORY + ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}) + endif() endif() # Build LunaSVG before rlottie. From 9196bf13e26b0c887e43e9f53666367b8c0e1ca5 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 17 Jan 2024 17:16:10 +0100 Subject: [PATCH 177/320] Updated the splash screen to reflect the new application name --- resources/graphics/splash.svg | 443 +++++++++++++++++----------------- 1 file changed, 218 insertions(+), 225 deletions(-) diff --git a/resources/graphics/splash.svg b/resources/graphics/splash.svg index b69352218..88d8720ea 100644 --- a/resources/graphics/splash.svg +++ b/resources/graphics/splash.svg @@ -2,14 +2,6 @@ image/svg+xml + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> @@ -104,27 +136,7 @@ - +
@@ -132,216 +144,197 @@ - - - \ No newline at end of file + id="path42-4" + style="fill:#ffffff;fill-opacity:1" /> From c3b41d75a746e8bf1ab5a484b58f09df3b7738dd Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 17 Jan 2024 17:26:18 +0100 Subject: [PATCH 178/320] Replaced the default d-pad helpsystem images to make them more legible when using smaller screen sizes --- resources/graphics/help/dpad_all.svg | 69 +--------------------- resources/graphics/help/dpad_down.svg | 26 ++++---- resources/graphics/help/dpad_left.svg | 26 ++++---- resources/graphics/help/dpad_leftright.svg | 26 ++++---- resources/graphics/help/dpad_right.svg | 26 ++++---- resources/graphics/help/dpad_up.svg | 26 ++++---- resources/graphics/help/dpad_updown.svg | 26 ++++---- 7 files changed, 92 insertions(+), 133 deletions(-) diff --git a/resources/graphics/help/dpad_all.svg b/resources/graphics/help/dpad_all.svg index 79c550fcb..043203b5b 100644 --- a/resources/graphics/help/dpad_all.svg +++ b/resources/graphics/help/dpad_all.svg @@ -11,71 +11,6 @@ id="defs15" /> - - - - - - - - + style="stroke:none;fill:#ffffff;fill-opacity:1" + d="M 26 2 A 4 4 0 0 0 22 6 L 22 22 L 6 22 A 4 4 0 0 0 2 26 L 2 38 A 4 4 0 0 0 6 42 L 22 42 L 22 58 A 4 4 0 0 0 26 62 L 38 62 A 4 4 0 0 0 42 58 L 42 42 L 58 42 A 4 4 0 0 0 62 38 L 62 26 A 4 4 0 0 0 58 22 L 42 22 L 42 6 A 4 4 0 0 0 38 2 L 26 2 z M 32 5.2011719 C 32.32252 5.2011719 32.645027 5.3534061 32.841797 5.6601562 L 37.841797 13.460938 C 38.267517 14.126373 37.79 14.999487 37 15 L 27 15 C 26.63474 14.999956 26.298557 14.800792 26.123047 14.480469 C 26.036697 14.323367 25.994 14.145954 26 13.966797 C 26.006 13.787018 26.060903 13.612262 26.158203 13.460938 L 31.158203 5.6601562 C 31.354973 5.3534062 31.67748 5.2011717 32 5.2011719 z M 13.966797 26 A 1.0001 1.0001 0 0 1 14.480469 26.123047 A 1.0001 1.0001 0 0 1 15 27 L 15 37 A 1.0001 1.0001 0 0 1 13.460938 37.841797 L 5.6601562 32.841797 A 1.0001 1.0001 0 0 1 5.6601562 31.158203 L 13.460938 26.158203 A 1.0001 1.0001 0 0 1 13.966797 26 z M 50.033203 26 A 1.0001 1.0001 0 0 1 50.539062 26.158203 L 58.339844 31.158203 A 1.0001 1.0001 0 0 1 58.339844 32.841797 L 50.539062 37.841797 A 1.0001 1.0001 0 0 1 49 37 L 49 27 A 1.0001 1.0001 0 0 1 49.519531 26.123047 A 1.0001 1.0001 0 0 1 50.033203 26 z M 27 49 L 37 49 C 37.79 49.000512 38.267517 49.873626 37.841797 50.539062 L 32.841797 58.339844 C 32.448267 58.953344 31.551733 58.953344 31.158203 58.339844 L 26.158203 50.539062 C 26.060903 50.38774 26.006 50.212982 26 50.033203 C 25.994 49.854046 26.036647 49.676634 26.123047 49.519531 C 26.298557 49.199208 26.63474 49.000044 27 49 z " /> diff --git a/resources/graphics/help/dpad_down.svg b/resources/graphics/help/dpad_down.svg index 84a41fc38..31d856a20 100644 --- a/resources/graphics/help/dpad_down.svg +++ b/resources/graphics/help/dpad_down.svg @@ -1,12 +1,16 @@ - - - - - - - - - - - + + + + diff --git a/resources/graphics/help/dpad_left.svg b/resources/graphics/help/dpad_left.svg index 1b018d69e..af1836c71 100644 --- a/resources/graphics/help/dpad_left.svg +++ b/resources/graphics/help/dpad_left.svg @@ -1,12 +1,16 @@ - - - - - - - - - - - + + + + diff --git a/resources/graphics/help/dpad_leftright.svg b/resources/graphics/help/dpad_leftright.svg index e18a6d725..2ce54284d 100644 --- a/resources/graphics/help/dpad_leftright.svg +++ b/resources/graphics/help/dpad_leftright.svg @@ -1,12 +1,16 @@ - - - - - - - - - - - + + + + diff --git a/resources/graphics/help/dpad_right.svg b/resources/graphics/help/dpad_right.svg index 228f5e044..a43e3f2c3 100644 --- a/resources/graphics/help/dpad_right.svg +++ b/resources/graphics/help/dpad_right.svg @@ -1,12 +1,16 @@ - - - - - - - - - - - + + + + diff --git a/resources/graphics/help/dpad_up.svg b/resources/graphics/help/dpad_up.svg index eb6dc0c9c..1eac2e7ef 100644 --- a/resources/graphics/help/dpad_up.svg +++ b/resources/graphics/help/dpad_up.svg @@ -1,12 +1,16 @@ - - - - - - - - - - - + + + + diff --git a/resources/graphics/help/dpad_updown.svg b/resources/graphics/help/dpad_updown.svg index 85116059c..fae555467 100644 --- a/resources/graphics/help/dpad_updown.svg +++ b/resources/graphics/help/dpad_updown.svg @@ -1,12 +1,16 @@ - - - - - - - - - - - + + + + From 99481331ec49448c25bba8b7763b51f4f46dc969 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 17 Jan 2024 17:29:40 +0100 Subject: [PATCH 179/320] (Android) Removed the ROM directory button from the no-games dialog --- es-app/src/views/ViewController.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/es-app/src/views/ViewController.cpp b/es-app/src/views/ViewController.cpp index a3f86f49f..cfb363497 100644 --- a/es-app/src/views/ViewController.cpp +++ b/es-app/src/views/ViewController.cpp @@ -213,6 +213,14 @@ void ViewController::invalidSystemsFileDialog() void ViewController::noGamesDialog() { +#if defined(__ANDROID__) + mNoGamesErrorMessage = "NO GAME FILES WERE FOUND, PLEASE PLACE YOUR GAMES IN " + "THE CONFIGURED ROM DIRECTORY. OPTIONALLY THE ROM " + "DIRECTORY STRUCTURE CAN BE GENERATED WHICH WILL " + "CREATE A TEXT FILE FOR EACH SYSTEM PROVIDING SOME " + "INFORMATION SUCH AS THE SUPPORTED FILE EXTENSIONS.\n" + "THIS IS THE CURRENTLY CONFIGURED ROM DIRECTORY:\n"; +#else mNoGamesErrorMessage = "NO GAME FILES WERE FOUND. EITHER PLACE YOUR GAMES IN " "THE CURRENTLY CONFIGURED ROM DIRECTORY OR CHANGE " "ITS PATH USING THE BUTTON BELOW. OPTIONALLY THE ROM " @@ -220,6 +228,7 @@ void ViewController::noGamesDialog() "CREATE A TEXT FILE FOR EACH SYSTEM PROVIDING SOME " "INFORMATION SUCH AS THE SUPPORTED FILE EXTENSIONS.\n" "THIS IS THE CURRENTLY CONFIGURED ROM DIRECTORY:\n"; +#endif #if defined(_WIN64) mRomDirectory = Utils::String::replace(FileData::getROMDirectory(), "/", "\\"); @@ -227,6 +236,10 @@ void ViewController::noGamesDialog() mRomDirectory = FileData::getROMDirectory(); #endif +#if defined(__ANDROID__) + mNoGamesMessageBox = new GuiMsgBox( + HelpStyle(), mNoGamesErrorMessage + mRomDirectory, +#else mNoGamesMessageBox = new GuiMsgBox( HelpStyle(), mNoGamesErrorMessage + mRomDirectory, "CHANGE ROM DIRECTORY", [this] { @@ -287,6 +300,7 @@ void ViewController::noGamesDialog() "CLEAR (LEAVE BLANK TO RESET TO DEFAULT PATH)")); } }, +#endif // __ANDROID__ "CREATE DIRECTORIES", [this] { mWindow->pushGui(new GuiMsgBox( @@ -322,10 +336,17 @@ void ViewController::noGamesDialog() quit.type = SDL_QUIT; SDL_PushEvent(&quit); }, +#if defined(__ANDROID__) + "", nullptr, nullptr, true, false, + (mRenderer->getIsVerticalOrientation() ? + 0.90f : + 0.58f * (1.778f / mRenderer->getScreenAspectRatio()))); +#else nullptr, true, false, (mRenderer->getIsVerticalOrientation() ? 0.90f : 0.62f * (1.778f / mRenderer->getScreenAspectRatio()))); +#endif mWindow->pushGui(mNoGamesMessageBox); } From 9d824af40a366098ced95d33398d1155f25048ac Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 17 Jan 2024 17:51:07 +0100 Subject: [PATCH 180/320] Small change to the man page --- es-app/assets/es-de.6.gz | Bin 1059 -> 1062 bytes tools/generate_man_page.sh | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/es-app/assets/es-de.6.gz b/es-app/assets/es-de.6.gz index 158f8e1e349d77d2a16a2cddffd6ccc6f84b527a..1c2c083114586d531af6ed61dccf5ddd02c24b3d 100644 GIT binary patch literal 1062 zcmV+>1lju^iwFq%1gK>K17&k9WMwWk0G(A^ZyGrie)q39%gYjp86X>Nx7Df=EwEuX z35cPUstgZi>|rcs>{;6bp})SzHY|{&dDw>m`CL99f9DpbEf`MWVY-0(>2Nas28-KC z0^`Zu=of&Ag&j4p=8|h_IfK<63SQRN6_wDBZ{ElKn8b@)7$wng1g+m&(E6LohUz_B z_pWd77&P18;$GZ~XjvB&+WMw{g{r@3#Z8OE$t^q#?ni{1h;fJxU}LSM<&r^rR5c~F zLdnGXKNxbev8sj<6YhNFA(C$o(^)b}Nc;&r5_wGXN!n4hvoUEm&F4#RIUFUQ=aboD zGJPQ7E@6N|e!MVO8dh5EjF4-fC@5(ov%;O$E@Wp}!Co~QFfuEm8pA`U%Bvw$Wyv#l zDRMKL5r5~@Ux&dhW+cr&rBNC&VbF1pVZmb`tb&^*83tLmQc_q91Er1O=U$o{RW=UY zJMILt#S$J1F4l!zl0jXUA`3K~OwR#Kra6}?&keU8qEK3Vj}c?bwT+i#>QxZz@HLJU zYhWiVQULVqf}M~|?OuXwg^A)Gyw`#E`1Swj0Y2yYU2jR|Ui<&>^QJ6=V;a?zG0aKe zuZ!k*L9dGsTasB&fym)i+A!ax+HvH!z(PJG;wOA<&0c1&U9xDjgs%x|A;?h*ZN_to zMd7aSm3acH=o6x8T6r)dzVjuyr%&*8KDa+58rsM}#aCjrx7=L8iep(JRXbz_-*b*e zr4{&F3TlodAkWt>4y>aD6L_Bt25@QSuEE#RRmm9|KY8n?b6BY`iO7a25Rwd){1q#q zP&;G_5PXiaJFN2^r3#4K&5baVt&V{ ze8p!Yl-c~$=^v+k)r-C1!(Q;ZswbjW|<-)&AIIxY3*mIQ7Lq=BvhsJd&=+(BkvlLZHuwiCdm0Pv2unQ{lA7{bO(p3j8`)F>4oX zv!Z@?48AOGr*m@0(JZn10?YHy!rIz==yv_4iB4mKe3hq??Z-b={ZDeyTBrRXqhb`MmMk5&9CDRshg$7JzO@%=RNV=t>^xRSV g;S}UrSd_*XRfxCCkJu(SI@w3^1FeJwQ;Y}z0F!0|OaK4? literal 1059 zcmV+;1l;={iwFqCh<#-O17&k9WMwWk0G(A^kJ>mCe)q39%gZtn2{0Y)w$-W{Xk0VK3|jw5W3mZFSebLDk>1t%2T6QJ$lBWIq?=^3g|i%v;xDskI*%q##9tva zP{@?546hhuQo&Nmtrpb^C<+SNRB3KcD;ue`EMYGj1sItTL5<;|Q|Z)@%A(+@y%af_ zPKmp7;;zHs=2MbnpOYX7n9%6B$FShJ4@Sb>f(*T^Tgplp3_0DMrIq z7^DE`*#%osF}ZyWt|TUkJMdlyKH%4X-vfNk?Vr5`nK|wM!_S(c@Qz7PQ^qhSp1&@d z;|0AgK5RjzUIik9tF&Rh3%SMGG&vUVArZgeYoqs7dhL>Vqbm3oqZYgzrO;+PqgWL7 z3RjsYppxzoP0`YUY4L+E$e8Zn+iWmCBpTYtK*^V4xi?(jz>;HGAyr#s1>bXyMk^!m zw-8hxNkE=&Z5&ufF(z;v4+d~)X0O55(q+LJ8tA(vZZ z3gd8!W9C?+ETlG6nWlaT($vh>K#=AWbV1=ZjgzB>x)uHR+1nW zjM-vzY8RFz%S*kFn;@Ai7*}ujyTS6(-w7|uU#gV*F0i)u_UJW@3KtQF+B@ zEu>!m(&-9CX)4q6;vmk7Bm{qU(N&PJT6-fDkrGTda=1g!dEAoFG8LLODNL%^Ng zb1&ur=FyLljvp=?SKWsha?s-Q>_VU~hlyR9Cr{U7aZ}>7$Ni&m3<~@@STQRbZL_3q zcMQJHA0{*M$k8k|`y9*juiThgf9!VMrVFK7bw3d@<3`D;uxyuQgBxTI?Vqw&TNDFa z-w-muWd)Bi`?tYThc>dg5*008+50Wqibo?DJjRn2v4sXqrcH@Kdq}#WqHx?%^YIkq dN*I)e7?qE=%a7RFJ6hQ%@*jd(njeG+006yH{iOf^ diff --git a/tools/generate_man_page.sh b/tools/generate_man_page.sh index 6b4f7008e..1192b0d62 100755 --- a/tools/generate_man_page.sh +++ b/tools/generate_man_page.sh @@ -26,7 +26,7 @@ TARGET_FILENAME=es-de.6 MAN_INCLUDE=" [NAME] -es-de - ES-DE (EmulationStation Desktop Edition) +es-de - ES-DE Frontend (EmulationStation Desktop Edition) [DESCRIPTION] ES-DE is a frontend for browsing and launching games from your multi-platform game collection. @@ -48,7 +48,7 @@ help2man --section 6 --no-info --include $TEMPFILE_INPUT $ESBINARY > $TEMPFILE_O # Manual string replacements, these may need to be modified if changes are made to the # command line --help output. -cat $TEMPFILE_OUTPUT | sed s/"ES\\\-DE (EmulationStation Desktop Edition), Emulator Frontend"/""/g | \ +cat $TEMPFILE_OUTPUT | sed s/"ES\\\-DE (ES\\\-DE), Emulator Frontend"/""/g | \ sed s/"Set to at least"/".br\nSet to at least"/ > $TARGET_FILENAME gzip -9 $TARGET_FILENAME From dcb2aaedef8c0b9694c1b0dccf4c72939d3fd813 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 17 Jan 2024 22:09:50 +0100 Subject: [PATCH 181/320] Added an option to the Input device settings menu to swap the A/B and X/Y buttons --- es-app/src/UIModeController.cpp | 2 +- es-app/src/guis/GuiMenu.cpp | 11 ++ es-core/src/InputConfig.cpp | 36 +++-- es-core/src/Settings.cpp | 1 + es-core/src/components/HelpComponent.cpp | 180 ++++++++++++----------- 5 files changed, 134 insertions(+), 96 deletions(-) diff --git a/es-app/src/UIModeController.cpp b/es-app/src/UIModeController.cpp index d7e62fa74..aa7fd2d02 100644 --- a/es-app/src/UIModeController.cpp +++ b/es-app/src/UIModeController.cpp @@ -127,7 +127,7 @@ std::string UIModeController::getFormattedPassKeyStr() std::string symbolX; std::string symbolY; - if (controllerType == "snes") { + if (Settings::getInstance()->getBool("InputSwapButtons") || controllerType == "snes") { symbolA = "B"; symbolB = "A"; symbolX = "Y"; diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 12e816884..058f47d27 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1293,6 +1293,17 @@ void GuiMenu::openInputDeviceOptions() } }); + // Whether to swap the A/B and X/Y buttons. + auto inputSwapButtons = std::make_shared(); + inputSwapButtons->setState(Settings::getInstance()->getBool("InputSwapButtons")); + s->addWithLabel("SWAP A/B AND X/Y BUTTONS", inputSwapButtons); + s->addSaveFunc([inputSwapButtons, s] { + if (Settings::getInstance()->getBool("InputSwapButtons") != inputSwapButtons->getState()) { + Settings::getInstance()->setBool("InputSwapButtons", inputSwapButtons->getState()); + s->setNeedsSaving(); + } + }); + // Configure keyboard and controllers. ComponentListRow configureInputRow; configureInputRow.elements.clear(); diff --git a/es-core/src/InputConfig.cpp b/es-core/src/InputConfig.cpp index 8f9e30ca8..e8d334183 100644 --- a/es-core/src/InputConfig.cpp +++ b/es-core/src/InputConfig.cpp @@ -9,6 +9,7 @@ #include "InputConfig.h" #include "Log.h" +#include "Settings.h" #include @@ -54,7 +55,7 @@ InputType InputConfig::stringToInputType(const std::string& type) std::string InputConfig::toLower(std::string str) { - for (unsigned int i = 0; i < str.length(); ++i) + for (unsigned int i {0}; i < str.length(); ++i) str[i] = static_cast(tolower(str[i])); return str; @@ -125,7 +126,7 @@ std::vector InputConfig::getMappedTo(Input input) std::vector maps; for (auto it = mNameMap.cbegin(); it != mNameMap.cend(); ++it) { - Input chk = it->second; + Input chk {it->second}; if (!chk.configured) continue; @@ -145,7 +146,20 @@ std::vector InputConfig::getMappedTo(Input input) bool InputConfig::getInputByName(const std::string& name, Input* result) { - auto it = mNameMap.find(toLower(name)); + std::string nameInput {name}; + + if (Settings::getInstance()->getBool("InputSwapButtons")) { + if (name == "a") + nameInput = "b"; + else if (name == "b") + nameInput = "a"; + else if (name == "x") + nameInput = "y"; + else if (name == "y") + nameInput = "x"; + } + + auto it = mNameMap.find(toLower(nameInput)); if (it != mNameMap.cend()) { *result = it->second; return true; @@ -166,10 +180,10 @@ void InputConfig::loadFromXML(pugi::xml_node& node) { clear(); - for (pugi::xml_node input = node.child("input"); input; input = input.next_sibling("input")) { - std::string name = input.attribute("name").as_string(); - std::string type = input.attribute("type").as_string(); - InputType typeEnum = stringToInputType(type); + for (pugi::xml_node input {node.child("input")}; input; input = input.next_sibling("input")) { + std::string name {input.attribute("name").as_string()}; + std::string type {input.attribute("type").as_string()}; + InputType typeEnum {stringToInputType(type)}; if (typeEnum == TYPE_COUNT) { LOG(LogError) << "InputConfig load error - input of type \"" << type @@ -177,8 +191,8 @@ void InputConfig::loadFromXML(pugi::xml_node& node) continue; } - int id = input.attribute("id").as_int(); - int value = input.attribute("value").as_int(); + int id {input.attribute("id").as_int()}; + int value {input.attribute("value").as_int()}; if (value == 0) { LOG(LogWarning) << "InputConfig value is 0 for " << type << " " << id << "!\n"; @@ -190,7 +204,7 @@ void InputConfig::loadFromXML(pugi::xml_node& node) void InputConfig::writeToXML(pugi::xml_node& parent) { - pugi::xml_node cfg = parent.append_child("inputConfig"); + pugi::xml_node cfg {parent.append_child("inputConfig")}; if (mDeviceId == DEVICE_KEYBOARD) { cfg.append_attribute("type") = "keyboard"; @@ -211,7 +225,7 @@ void InputConfig::writeToXML(pugi::xml_node& parent) if (!it->second.configured) continue; - pugi::xml_node input = cfg.append_child("input"); + pugi::xml_node input {cfg.append_child("input")}; input.append_attribute("name") = it->first.c_str(); input.append_attribute("type") = inputTypeToString(it->second.type).c_str(); input.append_attribute("id").set_value(it->second.id); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index 02f3f11e1..a6722faae 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -246,6 +246,7 @@ void Settings::setDefaults() #endif mBoolMap["InputOnlyFirstController"] = {false, false}; mBoolMap["InputIgnoreKeyboard"] = {false, false}; + mBoolMap["InputSwapButtons"] = {false, false}; // Game collection settings. mStringMap["CollectionSystemsAuto"] = {"", ""}; diff --git a/es-core/src/components/HelpComponent.cpp b/es-core/src/components/HelpComponent.cpp index 3bb36c882..fd42b8d65 100644 --- a/es-core/src/components/HelpComponent.cpp +++ b/es-core/src/components/HelpComponent.cpp @@ -33,6 +33,18 @@ void HelpComponent::assignIcons() std::map sIconPathMapOld {sIconPathMap}; sIconPathMap.clear(); + std::string buttonA {"a"}; + std::string buttonB {"b"}; + std::string buttonX {"x"}; + std::string buttonY {"y"}; + + if (Settings::getInstance()->getBool("InputSwapButtons")) { + buttonA = "b"; + buttonB = "a"; + buttonX = "y"; + buttonY = "x"; + } + // These graphics files are common between all controller types. sIconPathMap["up/down"] = mStyle.mCustomButtons.dpad_updown.empty() ? ":/graphics/help/dpad_updown.svg" : @@ -67,18 +79,18 @@ void HelpComponent::assignIcons() // These graphics files are custom per controller type. if (controllerType == "snes") { - sIconPathMap["a"] = mStyle.mCustomButtons.button_a_SNES.empty() ? - ":/graphics/help/button_a_SNES.svg" : - mStyle.mCustomButtons.button_a_SNES; - sIconPathMap["b"] = mStyle.mCustomButtons.button_b_SNES.empty() ? - ":/graphics/help/button_b_SNES.svg" : - mStyle.mCustomButtons.button_b_SNES; - sIconPathMap["x"] = mStyle.mCustomButtons.button_x_SNES.empty() ? - ":/graphics/help/button_x_SNES.svg" : - mStyle.mCustomButtons.button_x_SNES; - sIconPathMap["y"] = mStyle.mCustomButtons.button_y_SNES.empty() ? - ":/graphics/help/button_y_SNES.svg" : - mStyle.mCustomButtons.button_y_SNES; + sIconPathMap[buttonA] = mStyle.mCustomButtons.button_a_SNES.empty() ? + ":/graphics/help/button_a_SNES.svg" : + mStyle.mCustomButtons.button_a_SNES; + sIconPathMap[buttonB] = mStyle.mCustomButtons.button_b_SNES.empty() ? + ":/graphics/help/button_b_SNES.svg" : + mStyle.mCustomButtons.button_b_SNES; + sIconPathMap[buttonX] = mStyle.mCustomButtons.button_x_SNES.empty() ? + ":/graphics/help/button_x_SNES.svg" : + mStyle.mCustomButtons.button_x_SNES; + sIconPathMap[buttonY] = mStyle.mCustomButtons.button_y_SNES.empty() ? + ":/graphics/help/button_y_SNES.svg" : + mStyle.mCustomButtons.button_y_SNES; sIconPathMap["back"] = mStyle.mCustomButtons.button_back_SNES.empty() ? ":/graphics/help/button_back_SNES.svg" : mStyle.mCustomButtons.button_back_SNES; @@ -87,18 +99,18 @@ void HelpComponent::assignIcons() mStyle.mCustomButtons.button_start_SNES; } else if (controllerType == "switchpro") { - sIconPathMap["a"] = mStyle.mCustomButtons.button_a_switch.empty() ? - ":/graphics/help/button_a_switch.svg" : - mStyle.mCustomButtons.button_a_switch; - sIconPathMap["b"] = mStyle.mCustomButtons.button_b_switch.empty() ? - ":/graphics/help/button_b_switch.svg" : - mStyle.mCustomButtons.button_b_switch; - sIconPathMap["x"] = mStyle.mCustomButtons.button_x_switch.empty() ? - ":/graphics/help/button_x_switch.svg" : - mStyle.mCustomButtons.button_x_switch; - sIconPathMap["y"] = mStyle.mCustomButtons.button_y_switch.empty() ? - ":/graphics/help/button_y_switch.svg" : - mStyle.mCustomButtons.button_y_switch; + sIconPathMap[buttonA] = mStyle.mCustomButtons.button_a_switch.empty() ? + ":/graphics/help/button_a_switch.svg" : + mStyle.mCustomButtons.button_a_switch; + sIconPathMap[buttonB] = mStyle.mCustomButtons.button_b_switch.empty() ? + ":/graphics/help/button_b_switch.svg" : + mStyle.mCustomButtons.button_b_switch; + sIconPathMap[buttonX] = mStyle.mCustomButtons.button_x_switch.empty() ? + ":/graphics/help/button_x_switch.svg" : + mStyle.mCustomButtons.button_x_switch; + sIconPathMap[buttonY] = mStyle.mCustomButtons.button_y_switch.empty() ? + ":/graphics/help/button_y_switch.svg" : + mStyle.mCustomButtons.button_y_switch; sIconPathMap["back"] = mStyle.mCustomButtons.button_back_switch.empty() ? ":/graphics/help/button_back_switch.svg" : mStyle.mCustomButtons.button_back_switch; @@ -107,18 +119,18 @@ void HelpComponent::assignIcons() mStyle.mCustomButtons.button_start_switch; } else if (controllerType == "ps123") { - sIconPathMap["a"] = mStyle.mCustomButtons.button_a_PS.empty() ? - ":/graphics/help/button_a_PS.svg" : - mStyle.mCustomButtons.button_a_PS; - sIconPathMap["b"] = mStyle.mCustomButtons.button_b_PS.empty() ? - ":/graphics/help/button_b_PS.svg" : - mStyle.mCustomButtons.button_b_PS; - sIconPathMap["x"] = mStyle.mCustomButtons.button_x_PS.empty() ? - ":/graphics/help/button_x_PS.svg" : - mStyle.mCustomButtons.button_x_PS; - sIconPathMap["y"] = mStyle.mCustomButtons.button_y_PS.empty() ? - ":/graphics/help/button_y_PS.svg" : - mStyle.mCustomButtons.button_y_PS; + sIconPathMap[buttonA] = mStyle.mCustomButtons.button_a_PS.empty() ? + ":/graphics/help/button_a_PS.svg" : + mStyle.mCustomButtons.button_a_PS; + sIconPathMap[buttonB] = mStyle.mCustomButtons.button_b_PS.empty() ? + ":/graphics/help/button_b_PS.svg" : + mStyle.mCustomButtons.button_b_PS; + sIconPathMap[buttonX] = mStyle.mCustomButtons.button_x_PS.empty() ? + ":/graphics/help/button_x_PS.svg" : + mStyle.mCustomButtons.button_x_PS; + sIconPathMap[buttonY] = mStyle.mCustomButtons.button_y_PS.empty() ? + ":/graphics/help/button_y_PS.svg" : + mStyle.mCustomButtons.button_y_PS; sIconPathMap["back"] = mStyle.mCustomButtons.button_back_PS123.empty() ? ":/graphics/help/button_back_PS123.svg" : mStyle.mCustomButtons.button_back_PS123; @@ -127,18 +139,18 @@ void HelpComponent::assignIcons() mStyle.mCustomButtons.button_start_PS123; } else if (controllerType == "ps4") { - sIconPathMap["a"] = mStyle.mCustomButtons.button_a_PS.empty() ? - ":/graphics/help/button_a_PS.svg" : - mStyle.mCustomButtons.button_a_PS; - sIconPathMap["b"] = mStyle.mCustomButtons.button_b_PS.empty() ? - ":/graphics/help/button_b_PS.svg" : - mStyle.mCustomButtons.button_b_PS; - sIconPathMap["x"] = mStyle.mCustomButtons.button_x_PS.empty() ? - ":/graphics/help/button_x_PS.svg" : - mStyle.mCustomButtons.button_x_PS; - sIconPathMap["y"] = mStyle.mCustomButtons.button_y_PS.empty() ? - ":/graphics/help/button_y_PS.svg" : - mStyle.mCustomButtons.button_y_PS; + sIconPathMap[buttonA] = mStyle.mCustomButtons.button_a_PS.empty() ? + ":/graphics/help/button_a_PS.svg" : + mStyle.mCustomButtons.button_a_PS; + sIconPathMap[buttonB] = mStyle.mCustomButtons.button_b_PS.empty() ? + ":/graphics/help/button_b_PS.svg" : + mStyle.mCustomButtons.button_b_PS; + sIconPathMap[buttonX] = mStyle.mCustomButtons.button_x_PS.empty() ? + ":/graphics/help/button_x_PS.svg" : + mStyle.mCustomButtons.button_x_PS; + sIconPathMap[buttonY] = mStyle.mCustomButtons.button_y_PS.empty() ? + ":/graphics/help/button_y_PS.svg" : + mStyle.mCustomButtons.button_y_PS; sIconPathMap["back"] = mStyle.mCustomButtons.button_back_PS4.empty() ? ":/graphics/help/button_back_PS4.svg" : mStyle.mCustomButtons.button_back_PS4; @@ -147,18 +159,18 @@ void HelpComponent::assignIcons() mStyle.mCustomButtons.button_start_PS4; } else if (controllerType == "ps5") { - sIconPathMap["a"] = mStyle.mCustomButtons.button_a_PS.empty() ? - ":/graphics/help/button_a_PS.svg" : - mStyle.mCustomButtons.button_a_PS; - sIconPathMap["b"] = mStyle.mCustomButtons.button_b_PS.empty() ? - ":/graphics/help/button_b_PS.svg" : - mStyle.mCustomButtons.button_b_PS; - sIconPathMap["x"] = mStyle.mCustomButtons.button_x_PS.empty() ? - ":/graphics/help/button_x_PS.svg" : - mStyle.mCustomButtons.button_x_PS; - sIconPathMap["y"] = mStyle.mCustomButtons.button_y_PS.empty() ? - ":/graphics/help/button_y_PS.svg" : - mStyle.mCustomButtons.button_y_PS; + sIconPathMap[buttonA] = mStyle.mCustomButtons.button_a_PS.empty() ? + ":/graphics/help/button_a_PS.svg" : + mStyle.mCustomButtons.button_a_PS; + sIconPathMap[buttonB] = mStyle.mCustomButtons.button_b_PS.empty() ? + ":/graphics/help/button_b_PS.svg" : + mStyle.mCustomButtons.button_b_PS; + sIconPathMap[buttonX] = mStyle.mCustomButtons.button_x_PS.empty() ? + ":/graphics/help/button_x_PS.svg" : + mStyle.mCustomButtons.button_x_PS; + sIconPathMap[buttonY] = mStyle.mCustomButtons.button_y_PS.empty() ? + ":/graphics/help/button_y_PS.svg" : + mStyle.mCustomButtons.button_y_PS; sIconPathMap["back"] = mStyle.mCustomButtons.button_back_PS5.empty() ? ":/graphics/help/button_back_PS5.svg" : mStyle.mCustomButtons.button_back_PS5; @@ -168,18 +180,18 @@ void HelpComponent::assignIcons() } else if (controllerType == "xbox360") { - sIconPathMap["a"] = mStyle.mCustomButtons.button_a_XBOX.empty() ? - ":/graphics/help/button_a_XBOX.svg" : - mStyle.mCustomButtons.button_a_XBOX; - sIconPathMap["b"] = mStyle.mCustomButtons.button_b_XBOX.empty() ? - ":/graphics/help/button_b_XBOX.svg" : - mStyle.mCustomButtons.button_b_XBOX; - sIconPathMap["x"] = mStyle.mCustomButtons.button_x_XBOX.empty() ? - ":/graphics/help/button_x_XBOX.svg" : - mStyle.mCustomButtons.button_x_XBOX; - sIconPathMap["y"] = mStyle.mCustomButtons.button_y_XBOX.empty() ? - ":/graphics/help/button_y_XBOX.svg" : - mStyle.mCustomButtons.button_y_XBOX; + sIconPathMap[buttonA] = mStyle.mCustomButtons.button_a_XBOX.empty() ? + ":/graphics/help/button_a_XBOX.svg" : + mStyle.mCustomButtons.button_a_XBOX; + sIconPathMap[buttonB] = mStyle.mCustomButtons.button_b_XBOX.empty() ? + ":/graphics/help/button_b_XBOX.svg" : + mStyle.mCustomButtons.button_b_XBOX; + sIconPathMap[buttonX] = mStyle.mCustomButtons.button_x_XBOX.empty() ? + ":/graphics/help/button_x_XBOX.svg" : + mStyle.mCustomButtons.button_x_XBOX; + sIconPathMap[buttonY] = mStyle.mCustomButtons.button_y_XBOX.empty() ? + ":/graphics/help/button_y_XBOX.svg" : + mStyle.mCustomButtons.button_y_XBOX; sIconPathMap["back"] = mStyle.mCustomButtons.button_back_XBOX360.empty() ? ":/graphics/help/button_back_XBOX360.svg" : mStyle.mCustomButtons.button_back_XBOX360; @@ -189,18 +201,18 @@ void HelpComponent::assignIcons() } else { // Xbox One and later. - sIconPathMap["a"] = mStyle.mCustomButtons.button_a_XBOX.empty() ? - ":/graphics/help/button_a_XBOX.svg" : - mStyle.mCustomButtons.button_a_XBOX; - sIconPathMap["b"] = mStyle.mCustomButtons.button_b_XBOX.empty() ? - ":/graphics/help/button_b_XBOX.svg" : - mStyle.mCustomButtons.button_b_XBOX; - sIconPathMap["x"] = mStyle.mCustomButtons.button_x_XBOX.empty() ? - ":/graphics/help/button_x_XBOX.svg" : - mStyle.mCustomButtons.button_x_XBOX; - sIconPathMap["y"] = mStyle.mCustomButtons.button_y_XBOX.empty() ? - ":/graphics/help/button_y_XBOX.svg" : - mStyle.mCustomButtons.button_y_XBOX; + sIconPathMap[buttonA] = mStyle.mCustomButtons.button_a_XBOX.empty() ? + ":/graphics/help/button_a_XBOX.svg" : + mStyle.mCustomButtons.button_a_XBOX; + sIconPathMap[buttonB] = mStyle.mCustomButtons.button_b_XBOX.empty() ? + ":/graphics/help/button_b_XBOX.svg" : + mStyle.mCustomButtons.button_b_XBOX; + sIconPathMap[buttonX] = mStyle.mCustomButtons.button_x_XBOX.empty() ? + ":/graphics/help/button_x_XBOX.svg" : + mStyle.mCustomButtons.button_x_XBOX; + sIconPathMap[buttonY] = mStyle.mCustomButtons.button_y_XBOX.empty() ? + ":/graphics/help/button_y_XBOX.svg" : + mStyle.mCustomButtons.button_y_XBOX; sIconPathMap["back"] = mStyle.mCustomButtons.button_back_XBOX.empty() ? ":/graphics/help/button_back_XBOX.svg" : mStyle.mCustomButtons.button_back_XBOX; From 0e636f1bb33fefc5ce20be6c2e7c871b3fa00dbf Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 17 Jan 2024 22:19:15 +0100 Subject: [PATCH 182/320] Made the A/B and X/Y button swap setting not affect keyboard input --- es-core/src/InputConfig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-core/src/InputConfig.cpp b/es-core/src/InputConfig.cpp index e8d334183..e15523729 100644 --- a/es-core/src/InputConfig.cpp +++ b/es-core/src/InputConfig.cpp @@ -148,7 +148,7 @@ bool InputConfig::getInputByName(const std::string& name, Input* result) { std::string nameInput {name}; - if (Settings::getInstance()->getBool("InputSwapButtons")) { + if (Settings::getInstance()->getBool("InputSwapButtons") && mDeviceId != DEVICE_KEYBOARD) { if (name == "a") nameInput = "b"; else if (name == "b") From 8244b4229b2dbc5ec22f38b170c28bd709c798eb Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Wed, 17 Jan 2024 22:31:10 +0100 Subject: [PATCH 183/320] Changed the menu position for the button swap setting --- es-app/src/guis/GuiMenu.cpp | 22 +++++++++++----------- es-core/src/Settings.cpp | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 058f47d27..842bdcd3a 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1280,6 +1280,17 @@ void GuiMenu::openInputDeviceOptions() } }); + // Whether to swap the A/B and X/Y buttons. + auto inputSwapButtons = std::make_shared(); + inputSwapButtons->setState(Settings::getInstance()->getBool("InputSwapButtons")); + s->addWithLabel("SWAP A/B AND X/Y BUTTONS", inputSwapButtons); + s->addSaveFunc([inputSwapButtons, s] { + if (Settings::getInstance()->getBool("InputSwapButtons") != inputSwapButtons->getState()) { + Settings::getInstance()->setBool("InputSwapButtons", inputSwapButtons->getState()); + s->setNeedsSaving(); + } + }); + // Whether to ignore keyboard input (except the quit shortcut). auto inputIgnoreKeyboard = std::make_shared(); inputIgnoreKeyboard->setState(Settings::getInstance()->getBool("InputIgnoreKeyboard")); @@ -1293,17 +1304,6 @@ void GuiMenu::openInputDeviceOptions() } }); - // Whether to swap the A/B and X/Y buttons. - auto inputSwapButtons = std::make_shared(); - inputSwapButtons->setState(Settings::getInstance()->getBool("InputSwapButtons")); - s->addWithLabel("SWAP A/B AND X/Y BUTTONS", inputSwapButtons); - s->addSaveFunc([inputSwapButtons, s] { - if (Settings::getInstance()->getBool("InputSwapButtons") != inputSwapButtons->getState()) { - Settings::getInstance()->setBool("InputSwapButtons", inputSwapButtons->getState()); - s->setNeedsSaving(); - } - }); - // Configure keyboard and controllers. ComponentListRow configureInputRow; configureInputRow.elements.clear(); diff --git a/es-core/src/Settings.cpp b/es-core/src/Settings.cpp index a6722faae..3750839d5 100644 --- a/es-core/src/Settings.cpp +++ b/es-core/src/Settings.cpp @@ -245,8 +245,8 @@ void Settings::setDefaults() mBoolMap["InputTouchOverlay"] = {true, true}; #endif mBoolMap["InputOnlyFirstController"] = {false, false}; - mBoolMap["InputIgnoreKeyboard"] = {false, false}; mBoolMap["InputSwapButtons"] = {false, false}; + mBoolMap["InputIgnoreKeyboard"] = {false, false}; // Game collection settings. mStringMap["CollectionSystemsAuto"] = {"", ""}; From 12677f493b056e130399e73d1fcf741bde1edcab Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 20 Jan 2024 00:03:35 +0100 Subject: [PATCH 184/320] Documentation update --- CHANGELOG.md | 3 +++ USERGUIDE-DEV.md | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8728ba5c6..5d377b51c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,10 +10,12 @@ * Renamed the application from EmulationStation Desktop Edition to ES-DE * Renamed the application data directory from .emulationstation to ES-DE +* Updated the splash screen to reflect the new application name * Split the es_find_rules.xml and es_systems.xml files for Linux and BSD Unix into separate directories * Added support for defining font sizes from the theme configuration and selecting these from the UI settings menu * Added the theme font sizes count to the theme downloader interface * Added support for medium and large font sizes to the Slate and Modern themes +* Added an option to the Input device settings menu to swap the A/B and X/Y buttons * Added support for .webp, .svg and unanimated .gif files to the slideshow screensaver when using a custom image directory * Changed the default slideshow custom image directory from slideshow/custom_images to screensavers/custom_slideshow * Changed the custom slideshow image directory setting from ScreensaverSlideshowImageDir to ScreensaverSlideshowCustomDir @@ -32,6 +34,7 @@ * (Windows) Added the %RUNINBACKGROUND% variable for the epic system * (Windows) Removed support for building the application using MinGW * Added a "renderDuringTransitions" property to the image element +* Replaced the default d-pad helpsystem images to make them more legible when using smaller screen sizes * Placeholder entries in es_systems.xml are now skipped by default when creating the system directories and systeminfo.txt files * Added a CreatePlaceholderSystemDirectories option that can be manually set in es_settings.xml to still create placeholder directories * Changed the ScreenScraper URL from https://www.screenscraper.fr/api2 to https://api.screenscraper.fr/api2 diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index 94e952b8f..ac5080536 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -492,6 +492,8 @@ When editing text it's also possible to paste from the clipboard into ES-DE usin Default keyboard mappings are shown in brackets below. +It's assumed that the option _Swap A/B and X/Y buttons_ in the _Input device settings_ menu is disabled as some buttons will otherwise obviously be swapped. + **Up and down**\ _(Arrow up / Arrow down)_ @@ -3382,6 +3384,10 @@ The touch overlay applies a layer of virtual buttons on top of the ES-DE window. If enabling this option, only the first controller detected during startup will send its input to ES-DE (the keyboard input is unaffected by this setting and will be enabled regardless). This is a good way to limit potential chaos with multiple persons fighting over which games to play. Note that disconnecting and reconnecting controllers while ES-DE is running may change what is considered the first controller. This setting does not affect the emulators in any way, it's only applied to ES-DE. Another issue is that some wireless controllers have buggy drivers and will register as two devices, meaning all button presses will be registered twice inside ES-DE. Using this option is one solution to the problem, although it's also possible to blacklist the extra controller entry, as described [here](INSTALL-DEV.md#adding-custom-controller-profiles). +**Swap A/B and X/Y buttons** + +When enabling this setting the functions for the A/B and X/Y buttons will be swapped and the helpsystem will be updated accordingly. The primary purpose of this setting is for using controllers like Nintendo Switch Pro and some handhelds which have swapped the physical positions of these buttons. With this setting enabled you'll be able to rely on your muscle memory from using any other controller type with a normal button layout. Note that the button swap does not apply to the keyboard which leads to a slight inconsistency as the helpsystem will only match the controller and not the keyboard. + **Ignore keyboard input** If this setting is enabled then all keyboard input will be ignored, except the quit shortcut used to shut down the application. The main reason for ignoring keyboard input is if running Steam in parallel to ES-DE and you need to use the Steam Input's _Desktop Layout_ functionality to send keyboard input using the controller. In this case double or conflicting input will be sent to ES-DE as both the controller and keyboard events are read by the application. It's however generally a better idea to disable this functionality altogether in Steam and leave the ES-DE setting untouched. If you accidentally enable this setting when using a keyboard as input device, then you'll either need to plug in a controller to disable it again, or you'll need to modify the _InputIgnoreKeyboard_ entry in the ~/ES-DE/settings/es_settings.xml configuration file. From d0db0e65f26408b69357b6945106fa7e14e6c5af Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 20 Jan 2024 16:09:56 +0100 Subject: [PATCH 185/320] Small change for a setting description --- es-app/src/guis/GuiMenu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/es-app/src/guis/GuiMenu.cpp b/es-app/src/guis/GuiMenu.cpp index 842bdcd3a..3bae0c58c 100644 --- a/es-app/src/guis/GuiMenu.cpp +++ b/es-app/src/guis/GuiMenu.cpp @@ -1283,7 +1283,7 @@ void GuiMenu::openInputDeviceOptions() // Whether to swap the A/B and X/Y buttons. auto inputSwapButtons = std::make_shared(); inputSwapButtons->setState(Settings::getInstance()->getBool("InputSwapButtons")); - s->addWithLabel("SWAP A/B AND X/Y BUTTONS", inputSwapButtons); + s->addWithLabel("SWAP THE A/B AND X/Y BUTTONS", inputSwapButtons); s->addSaveFunc([inputSwapButtons, s] { if (Settings::getInstance()->getBool("InputSwapButtons") != inputSwapButtons->getState()) { Settings::getInstance()->setBool("InputSwapButtons", inputSwapButtons->getState()); From 46e811e6ac599aeaed35bb5d9942fdcc906aaeff Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sat, 20 Jan 2024 16:10:36 +0100 Subject: [PATCH 186/320] Documentation update --- USERGUIDE-DEV.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/USERGUIDE-DEV.md b/USERGUIDE-DEV.md index ac5080536..825414b63 100644 --- a/USERGUIDE-DEV.md +++ b/USERGUIDE-DEV.md @@ -492,7 +492,7 @@ When editing text it's also possible to paste from the clipboard into ES-DE usin Default keyboard mappings are shown in brackets below. -It's assumed that the option _Swap A/B and X/Y buttons_ in the _Input device settings_ menu is disabled as some buttons will otherwise obviously be swapped. +It's assumed that the option _Swap the A/B and X/Y buttons_ in the _Input device settings_ menu is disabled as some buttons will otherwise obviously be swapped. **Up and down**\ _(Arrow up / Arrow down)_ @@ -3384,7 +3384,7 @@ The touch overlay applies a layer of virtual buttons on top of the ES-DE window. If enabling this option, only the first controller detected during startup will send its input to ES-DE (the keyboard input is unaffected by this setting and will be enabled regardless). This is a good way to limit potential chaos with multiple persons fighting over which games to play. Note that disconnecting and reconnecting controllers while ES-DE is running may change what is considered the first controller. This setting does not affect the emulators in any way, it's only applied to ES-DE. Another issue is that some wireless controllers have buggy drivers and will register as two devices, meaning all button presses will be registered twice inside ES-DE. Using this option is one solution to the problem, although it's also possible to blacklist the extra controller entry, as described [here](INSTALL-DEV.md#adding-custom-controller-profiles). -**Swap A/B and X/Y buttons** +**Swap the A/B and X/Y buttons** When enabling this setting the functions for the A/B and X/Y buttons will be swapped and the helpsystem will be updated accordingly. The primary purpose of this setting is for using controllers like Nintendo Switch Pro and some handhelds which have swapped the physical positions of these buttons. With this setting enabled you'll be able to rely on your muscle memory from using any other controller type with a normal button layout. Note that the button swap does not apply to the keyboard which leads to a slight inconsistency as the helpsystem will only match the controller and not the keyboard. From b27961df1e2c7c15e5bb8ed3bf2a2188d6d63c03 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 21 Jan 2024 12:35:44 +0100 Subject: [PATCH 187/320] (slate-es-de) Converted some SVG logo files to plain SVG format --- themes/slate-es-de/android/images/logo.svg | 67 +--- .../auto-favorites/images/logo.svg | 341 ++++-------------- themes/slate-es-de/cps/images/logo.svg | 26 -- .../custom-collections/images/logo.svg | 62 +--- .../dreamcast/images/jp/consolegame.svg | 153 +------- .../dreamcast/images/us/consolegame.svg | 153 +------- 6 files changed, 112 insertions(+), 690 deletions(-) diff --git a/themes/slate-es-de/android/images/logo.svg b/themes/slate-es-de/android/images/logo.svg index b409a241f..095870b56 100644 --- a/themes/slate-es-de/android/images/logo.svg +++ b/themes/slate-es-de/android/images/logo.svg @@ -1,19 +1,15 @@ + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> @@ -22,96 +18,43 @@ image/svg+xml - - image/svg+xml
\ No newline at end of file + id="path4952" /> diff --git a/themes/slate-es-de/cps/images/logo.svg b/themes/slate-es-de/cps/images/logo.svg index 279706252..ae54ebb14 100644 --- a/themes/slate-es-de/cps/images/logo.svg +++ b/themes/slate-es-de/cps/images/logo.svg @@ -3,38 +3,12 @@ viewBox="0 0 1758.6 493.19999" version="1.1" id="svg45" - sodipodi:docname="logo.svg" - inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" width="1758.6" height="493.20001" - inkscape:export-filename="/home/leon/Leon/Programmering/EmulationStation-DE/emulationstation-de/themes/slate-DE/cps/images/logo.png" - inkscape:export-xdpi="32.700729" - inkscape:export-ydpi="32.700729" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> - + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> - @@ -108,13 +73,10 @@ image/svg+xml - + transform="matrix(0.26458333,0,0,0.26458333,15.635294,241.12131)" /> + d="m 16.763386,275.86523 -0.996309,0.99631 v 5.97955 l 0.996309,0.9963 h 5.979547 v -1.99318 h -4.983239 v -3.9858 h 3.986365 l 0.996874,-1.99318 z m 7.863157,0 -0.996309,0.99631 v 5.97955 l 0.996309,0.9963 h 4.982674 l 0.996874,-0.9963 v -5.97955 l -0.996874,-0.99631 z m 6.86685,0 v 7.97216 h 5.979549 l 0.996307,-1.99318 h -4.982674 v -5.97898 z m 7.863159,0 v 7.97216 h 5.979546 l 0.996311,-1.99318 h -4.982674 v -5.97898 z m 7.863723,0 v 7.97216 h 5.978983 v -1.99318 h -3.985799 v -0.9963 h 3.985799 v -1.99318 h -3.985799 v -0.99632 h 3.985799 v -1.99318 z m 7.863157,0 -0.996309,0.99631 v 5.97955 l 0.996309,0.9963 h 5.978984 v -1.99318 h -4.982674 v -3.9858 h 3.986364 l 0.99631,-1.99318 z m 6.866851,0 v 1.99318 h 2.491335 v 5.97898 h 1.993183 v -5.97898 h 2.491339 v -1.99318 z m 7.863156,0 v 7.97216 h 1.993183 v -7.97216 z m 3.877361,0 -0.996875,0.99631 v 5.97955 l 0.996875,0.9963 h 4.982674 l 0.996308,-0.9963 v -5.97955 l -0.996308,-0.99631 z m 6.866849,0 v 7.97216 h 1.992619 v -4.98266 l 2.491335,4.98266 h 2.491339 v -7.97216 h -1.992619 v 4.98268 l -2.491336,-4.98268 z m 8.859461,0 -0.996302,0.99631 v 2.99006 l 0.996302,0.99631 h 3.986373 v 0.9963 h -4.982675 v 1.99318 h 4.982675 l 1.993181,-1.99318 v -2.98948 h -4.982679 v -0.99632 h 3.986948 l 0.995731,-1.99318 z m -63.793692,1.99318 h 2.98949 v 3.9858 h -2.98949 z m 49.06369,0 h 2.989491 v 3.9858 h -2.989491 z" /> + id="path4538" /> diff --git a/themes/slate-es-de/dreamcast/images/jp/consolegame.svg b/themes/slate-es-de/dreamcast/images/jp/consolegame.svg index 93a1e1ae5..781f18738 100644 --- a/themes/slate-es-de/dreamcast/images/jp/consolegame.svg +++ b/themes/slate-es-de/dreamcast/images/jp/consolegame.svg @@ -2,146 +2,94 @@ image/svg+xml \ No newline at end of file + style="fill:#8c8c8c" /> diff --git a/themes/slate-es-de/dreamcast/images/us/consolegame.svg b/themes/slate-es-de/dreamcast/images/us/consolegame.svg index 1c328f350..457e4f65d 100644 --- a/themes/slate-es-de/dreamcast/images/us/consolegame.svg +++ b/themes/slate-es-de/dreamcast/images/us/consolegame.svg @@ -2,320 +2,244 @@ image/svg+xml \ No newline at end of file + style="fill:#2f3338" /> From 9a0c8fb1d737c962dc0c058b334290c2e61a02c7 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 21 Jan 2024 12:36:46 +0100 Subject: [PATCH 188/320] (modern-es-de) Converted an SVG file to plain SVG format --- themes/modern-es-de/assets/selection_box.svg | 31 +------------------- 1 file changed, 1 insertion(+), 30 deletions(-) diff --git a/themes/modern-es-de/assets/selection_box.svg b/themes/modern-es-de/assets/selection_box.svg index 0afbf0c3d..9559d5522 100644 --- a/themes/modern-es-de/assets/selection_box.svg +++ b/themes/modern-es-de/assets/selection_box.svg @@ -5,37 +5,11 @@ version="1.1" viewBox="0 0 400 400" id="svg4" - sodipodi:docname="selection_box.svg" - inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" - inkscape:export-filename="/home/leon/Leon/Programmering/EmulationStation-DE/emulationstation-de/themes/modern-es-de/assets/selection_box.png" - inkscape:export-xdpi="72" - inkscape:export-ydpi="72" shape-rendering="crispEdges" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"> - + ry="0" /> From 617b0ddbca3f1e740a46e23df80a26fd34945353 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Sun, 21 Jan 2024 12:38:11 +0100 Subject: [PATCH 189/320] (slate-es-de) Converted some header comments to the new ES-DE application name --- themes/slate-es-de/CREDITS.md | 2 +- themes/slate-es-de/MISSING.md | 2 +- themes/slate-es-de/README.md | 2 +- themes/slate-es-de/theme.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/themes/slate-es-de/CREDITS.md b/themes/slate-es-de/CREDITS.md index 8797c42d6..8ce2d57ef 100644 --- a/themes/slate-es-de/CREDITS.md +++ b/themes/slate-es-de/CREDITS.md @@ -1,4 +1,4 @@ -# Slate for EmulationStation Desktop Edition - credits +# Slate for ES-DE - credits The Slate theme is based on [recalbox-multi](https://gitlab.com/recalbox/recalbox-themes) by the Recalbox community, prior to their license change in 2018. diff --git a/themes/slate-es-de/MISSING.md b/themes/slate-es-de/MISSING.md index 92fd301b8..1ca14750d 100644 --- a/themes/slate-es-de/MISSING.md +++ b/themes/slate-es-de/MISSING.md @@ -1,4 +1,4 @@ -# EmulationStation Desktop Edition (ES-DE) - Missing slate-es-de theme assets +# ES-DE - Missing slate-es-de theme assets * ags: Adventure Game Studio Game Engine - consolegame.svg, controller.svg * amigacd32: Amiga CD32 - consolegame.svg, controller.svg diff --git a/themes/slate-es-de/README.md b/themes/slate-es-de/README.md index 8f6d1e19b..75199fb5e 100644 --- a/themes/slate-es-de/README.md +++ b/themes/slate-es-de/README.md @@ -1,4 +1,4 @@ -# Slate for EmulationStation Desktop Edition (slate-es-de) +# Slate for ES-DE (slate-es-de) The following options are included: diff --git a/themes/slate-es-de/theme.xml b/themes/slate-es-de/theme.xml index 12ec97351..7532a77a7 100644 --- a/themes/slate-es-de/theme.xml +++ b/themes/slate-es-de/theme.xml @@ -1,5 +1,5 @@ + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/assets/images/icon-players.svg b/themes/linear-es-de/assets/images/icon-players.svg new file mode 100644 index 000000000..906fce24a --- /dev/null +++ b/themes/linear-es-de/assets/images/icon-players.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/linear-es-de/assets/images/icon-release-date.svg b/themes/linear-es-de/assets/images/icon-release-date.svg new file mode 100644 index 000000000..0faa1eb61 --- /dev/null +++ b/themes/linear-es-de/assets/images/icon-release-date.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/themes/linear-es-de/assets/images/pixel.png b/themes/linear-es-de/assets/images/pixel.png new file mode 100644 index 0000000000000000000000000000000000000000..9e6e20d897fc4537056e8a8014109058b937bab7 GIT binary patch literal 934 zcmaJ=Pm9w)91Zp&3k!Qy6o)K(5Nt9@ZJLC}k~XayFr~DS?Qzp&+Joz2BdCbKdJd-QT;r$8p@geQfpFd{B(r zx7h#fyQ#vaJG4Ed13adgM-XQQc!Yo*c@xw}Ua)xa4b?fW1VVR6ht4zI$C2O_7$J`m z#^$(sBTqbkhA0@JNf;aauaBR35C#T+Qgxt{w9qs>UJ^7|c3pot^R<9)JOTAwX95wT z9>}A!IMs85U+L;>T^x%%SV8E_;IES!Iz7fP$WUBJg(JhkAMs%C_-73 zs-sY-jLON)ufavn&&`ih#*Plr&8%G-SEV5ao0cQ!g*a z>ETAfLa9%}goZco&25iMf}Ek^qa6HbBSuKQxNA=#=)+ zO}_sWPTfU<#6C*#ocQeG#)n0yL~jw~QA}Kn&o*7`O)m~Obi4OiO9 zEsPK)EV6}2_!0#jf+MghSPysRqP2JGt+~O@T(r(kuE>%Ri);Psnm0$xJH>KqTDIBR z9>vV-gqixo#nC7BAnw_g>E=I1zpt(urH8N1Ut93K=YF~T&K;a`&!f`)%dbBl6feha Kcdd)&>6<^M4Io$m literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/auto-allgames/theme.xml b/themes/linear-es-de/auto-allgames/theme.xml new file mode 100644 index 000000000..0645d9f1d --- /dev/null +++ b/themes/linear-es-de/auto-allgames/theme.xml @@ -0,0 +1,11 @@ + + ./../theme.xml + + + + + capitalize + + + + \ No newline at end of file diff --git a/themes/linear-es-de/auto-favorites/theme.xml b/themes/linear-es-de/auto-favorites/theme.xml new file mode 100644 index 000000000..0645d9f1d --- /dev/null +++ b/themes/linear-es-de/auto-favorites/theme.xml @@ -0,0 +1,11 @@ + + ./../theme.xml + + + + + capitalize + + + + \ No newline at end of file diff --git a/themes/linear-es-de/auto-lastplayed/theme.xml b/themes/linear-es-de/auto-lastplayed/theme.xml new file mode 100644 index 000000000..0645d9f1d --- /dev/null +++ b/themes/linear-es-de/auto-lastplayed/theme.xml @@ -0,0 +1,11 @@ + + ./../theme.xml + + + + + capitalize + + + + \ No newline at end of file diff --git a/themes/linear-es-de/capabilities.xml b/themes/linear-es-de/capabilities.xml new file mode 100644 index 000000000..ff9ce0e8d --- /dev/null +++ b/themes/linear-es-de/capabilities.xml @@ -0,0 +1,94 @@ + + + + Linear + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + true + + + + + true + + + + + true + + + + + true + + + + + true + + + + + true + instant + slide + instant + slide + + + + + true + instant + instant + instant + instant + slide + slide + + + + + true + fade + fade + fade + fade + slide + slide + + + + builtin-instant + builtin-slide + builtin-fade + + \ No newline at end of file diff --git a/themes/linear-es-de/colors.xml b/themes/linear-es-de/colors.xml new file mode 100644 index 000000000..8850f82a2 --- /dev/null +++ b/themes/linear-es-de/colors.xml @@ -0,0 +1,92 @@ + + + + + 000000 + 373737 + FAFAFA + C2C2C2 + C2C2C2 + + + FFFFFF + 777777 + BBBBBB + 303030 + ABABAB + 545454 + + + + + + 000000 + 838383 + FFFFFF + D2D2D2 + FAFAFA + + + FFFFFF + 545454 + BBBBBB + 787878 + 3B3B3B + 707070 + + + + + + 000000 + E4000F + FFFFFF + FFFFFF + FFFFFF + + + FFFFFF + 111111 + 68000F + D0000F + 000000 + B0000F + + + + + + 000000 + 0E7A0D + FAF9F6 + FFFFFF + FFFFFF + + + FFFFFF + 111111 + 00460F + 00700F + 000000 + 00660F + + + + + + 000000 + 00338F + EAE9E6 + FFFFFF + FFFFFF + + + EAE9E6 + 000000 + 000072 + 0039AF + 000000 + 0D3FB2 + + + \ No newline at end of file diff --git a/themes/linear-es-de/custom-collections/theme.xml b/themes/linear-es-de/custom-collections/theme.xml new file mode 100644 index 000000000..46a6c629c --- /dev/null +++ b/themes/linear-es-de/custom-collections/theme.xml @@ -0,0 +1,26 @@ + + ./../theme.xml + + + + + Custom Collections + capitalize + + + systemFullname + Your Collections + + + + + + + + systemFullname + Your Collections + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/3do.svg b/themes/linear-es-de/system/logos/3do.svg new file mode 100644 index 000000000..e9099701a --- /dev/null +++ b/themes/linear-es-de/system/logos/3do.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/adam.svg b/themes/linear-es-de/system/logos/adam.svg new file mode 100644 index 000000000..56cc79b11 --- /dev/null +++ b/themes/linear-es-de/system/logos/adam.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/ags.svg b/themes/linear-es-de/system/logos/ags.svg new file mode 100644 index 000000000..f4a34a83d --- /dev/null +++ b/themes/linear-es-de/system/logos/ags.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/amiga.svg b/themes/linear-es-de/system/logos/amiga.svg new file mode 100644 index 000000000..716a73022 --- /dev/null +++ b/themes/linear-es-de/system/logos/amiga.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/amiga1200.svg b/themes/linear-es-de/system/logos/amiga1200.svg new file mode 100644 index 000000000..b3e7da2e2 --- /dev/null +++ b/themes/linear-es-de/system/logos/amiga1200.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/amiga600.svg b/themes/linear-es-de/system/logos/amiga600.svg new file mode 100644 index 000000000..491d7cedc --- /dev/null +++ b/themes/linear-es-de/system/logos/amiga600.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/amigacd32.svg b/themes/linear-es-de/system/logos/amigacd32.svg new file mode 100644 index 000000000..30433e304 --- /dev/null +++ b/themes/linear-es-de/system/logos/amigacd32.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/amstradcpc.svg b/themes/linear-es-de/system/logos/amstradcpc.svg new file mode 100644 index 000000000..50af50f97 --- /dev/null +++ b/themes/linear-es-de/system/logos/amstradcpc.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/android.svg b/themes/linear-es-de/system/logos/android.svg new file mode 100644 index 000000000..50333bea1 --- /dev/null +++ b/themes/linear-es-de/system/logos/android.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/apple2.svg b/themes/linear-es-de/system/logos/apple2.svg new file mode 100644 index 000000000..b0263f1a6 --- /dev/null +++ b/themes/linear-es-de/system/logos/apple2.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/apple2gs.svg b/themes/linear-es-de/system/logos/apple2gs.svg new file mode 100644 index 000000000..4c603dd14 --- /dev/null +++ b/themes/linear-es-de/system/logos/apple2gs.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/arcade.svg b/themes/linear-es-de/system/logos/arcade.svg new file mode 100644 index 000000000..c88f40a33 --- /dev/null +++ b/themes/linear-es-de/system/logos/arcade.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/arcadia.svg b/themes/linear-es-de/system/logos/arcadia.svg new file mode 100644 index 000000000..cb237e2ae --- /dev/null +++ b/themes/linear-es-de/system/logos/arcadia.svg @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/archimedes.svg b/themes/linear-es-de/system/logos/archimedes.svg new file mode 100644 index 000000000..5e0c26fa8 --- /dev/null +++ b/themes/linear-es-de/system/logos/archimedes.svg @@ -0,0 +1,40 @@ + + + + + + diff --git a/themes/linear-es-de/system/logos/arduboy.svg b/themes/linear-es-de/system/logos/arduboy.svg new file mode 100644 index 000000000..9080b8414 --- /dev/null +++ b/themes/linear-es-de/system/logos/arduboy.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/astrocade.svg b/themes/linear-es-de/system/logos/astrocade.svg new file mode 100644 index 000000000..c09bad1d5 --- /dev/null +++ b/themes/linear-es-de/system/logos/astrocade.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/atari2600.svg b/themes/linear-es-de/system/logos/atari2600.svg new file mode 100644 index 000000000..a1c78e887 --- /dev/null +++ b/themes/linear-es-de/system/logos/atari2600.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/atari5200.svg b/themes/linear-es-de/system/logos/atari5200.svg new file mode 100644 index 000000000..d793b184d --- /dev/null +++ b/themes/linear-es-de/system/logos/atari5200.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/atari7800.svg b/themes/linear-es-de/system/logos/atari7800.svg new file mode 100644 index 000000000..6da0fbd48 --- /dev/null +++ b/themes/linear-es-de/system/logos/atari7800.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/atari800.svg b/themes/linear-es-de/system/logos/atari800.svg new file mode 100644 index 000000000..b2d112ff1 --- /dev/null +++ b/themes/linear-es-de/system/logos/atari800.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/atarijaguar.svg b/themes/linear-es-de/system/logos/atarijaguar.svg new file mode 100644 index 000000000..d5d76422c --- /dev/null +++ b/themes/linear-es-de/system/logos/atarijaguar.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/atarijaguarcd.svg b/themes/linear-es-de/system/logos/atarijaguarcd.svg new file mode 100644 index 000000000..9a8e5aad8 --- /dev/null +++ b/themes/linear-es-de/system/logos/atarijaguarcd.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/atarilynx.svg b/themes/linear-es-de/system/logos/atarilynx.svg new file mode 100644 index 000000000..4c785b10f --- /dev/null +++ b/themes/linear-es-de/system/logos/atarilynx.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/atarist.svg b/themes/linear-es-de/system/logos/atarist.svg new file mode 100644 index 000000000..a4b0396df --- /dev/null +++ b/themes/linear-es-de/system/logos/atarist.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/atarixe.svg b/themes/linear-es-de/system/logos/atarixe.svg new file mode 100644 index 000000000..a5665c432 --- /dev/null +++ b/themes/linear-es-de/system/logos/atarixe.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/atomiswave.svg b/themes/linear-es-de/system/logos/atomiswave.svg new file mode 100644 index 000000000..92a1679b6 --- /dev/null +++ b/themes/linear-es-de/system/logos/atomiswave.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/auto-allgames.svg b/themes/linear-es-de/system/logos/auto-allgames.svg new file mode 100644 index 000000000..7d4a4e19b --- /dev/null +++ b/themes/linear-es-de/system/logos/auto-allgames.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/auto-favorites.svg b/themes/linear-es-de/system/logos/auto-favorites.svg new file mode 100644 index 000000000..86161442b --- /dev/null +++ b/themes/linear-es-de/system/logos/auto-favorites.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/auto-lastplayed.svg b/themes/linear-es-de/system/logos/auto-lastplayed.svg new file mode 100644 index 000000000..48f97ec96 --- /dev/null +++ b/themes/linear-es-de/system/logos/auto-lastplayed.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/bbcmicro.svg b/themes/linear-es-de/system/logos/bbcmicro.svg new file mode 100644 index 000000000..60124da6c --- /dev/null +++ b/themes/linear-es-de/system/logos/bbcmicro.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/c64.svg b/themes/linear-es-de/system/logos/c64.svg new file mode 100644 index 000000000..91a8c0b09 --- /dev/null +++ b/themes/linear-es-de/system/logos/c64.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/cavestory.svg b/themes/linear-es-de/system/logos/cavestory.svg new file mode 100644 index 000000000..2fe4c3cd4 --- /dev/null +++ b/themes/linear-es-de/system/logos/cavestory.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/cdimono1.svg b/themes/linear-es-de/system/logos/cdimono1.svg new file mode 100644 index 000000000..8a4850ddb --- /dev/null +++ b/themes/linear-es-de/system/logos/cdimono1.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/cdtv.svg b/themes/linear-es-de/system/logos/cdtv.svg new file mode 100644 index 000000000..cb11dec6d --- /dev/null +++ b/themes/linear-es-de/system/logos/cdtv.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/chailove.svg b/themes/linear-es-de/system/logos/chailove.svg new file mode 100644 index 000000000..c5ebf99e2 --- /dev/null +++ b/themes/linear-es-de/system/logos/chailove.svg @@ -0,0 +1,10 @@ + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/channelf.svg b/themes/linear-es-de/system/logos/channelf.svg new file mode 100644 index 000000000..458101f31 --- /dev/null +++ b/themes/linear-es-de/system/logos/channelf.svg @@ -0,0 +1,11 @@ + + + Sharp_X1_logo + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/coco.svg b/themes/linear-es-de/system/logos/coco.svg new file mode 100644 index 000000000..6d623294f --- /dev/null +++ b/themes/linear-es-de/system/logos/coco.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/colecovision.svg b/themes/linear-es-de/system/logos/colecovision.svg new file mode 100644 index 000000000..beeee8a8d --- /dev/null +++ b/themes/linear-es-de/system/logos/colecovision.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/consolearcade.svg b/themes/linear-es-de/system/logos/consolearcade.svg new file mode 100644 index 000000000..958dd4ca3 --- /dev/null +++ b/themes/linear-es-de/system/logos/consolearcade.svg @@ -0,0 +1,463 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/cps.svg b/themes/linear-es-de/system/logos/cps.svg new file mode 100644 index 000000000..c6567685e --- /dev/null +++ b/themes/linear-es-de/system/logos/cps.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/cps1.svg b/themes/linear-es-de/system/logos/cps1.svg new file mode 100644 index 000000000..34e4291ba --- /dev/null +++ b/themes/linear-es-de/system/logos/cps1.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/cps2.svg b/themes/linear-es-de/system/logos/cps2.svg new file mode 100644 index 000000000..889f155ea --- /dev/null +++ b/themes/linear-es-de/system/logos/cps2.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/cps3.svg b/themes/linear-es-de/system/logos/cps3.svg new file mode 100644 index 000000000..78061292a --- /dev/null +++ b/themes/linear-es-de/system/logos/cps3.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/crvision.svg b/themes/linear-es-de/system/logos/crvision.svg new file mode 100644 index 000000000..b40931f07 --- /dev/null +++ b/themes/linear-es-de/system/logos/crvision.svg @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/custom-collections.svg b/themes/linear-es-de/system/logos/custom-collections.svg new file mode 100644 index 000000000..157092b86 --- /dev/null +++ b/themes/linear-es-de/system/logos/custom-collections.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/daphne.svg b/themes/linear-es-de/system/logos/daphne.svg new file mode 100644 index 000000000..4714292b8 --- /dev/null +++ b/themes/linear-es-de/system/logos/daphne.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/desktop.svg b/themes/linear-es-de/system/logos/desktop.svg new file mode 100644 index 000000000..d969ac156 --- /dev/null +++ b/themes/linear-es-de/system/logos/desktop.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/doom.svg b/themes/linear-es-de/system/logos/doom.svg new file mode 100644 index 000000000..e12b4a820 --- /dev/null +++ b/themes/linear-es-de/system/logos/doom.svg @@ -0,0 +1,35 @@ + + + + + + + image/svg+xml + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/dos.svg b/themes/linear-es-de/system/logos/dos.svg new file mode 100644 index 000000000..889379889 --- /dev/null +++ b/themes/linear-es-de/system/logos/dos.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/dragon32.svg b/themes/linear-es-de/system/logos/dragon32.svg new file mode 100644 index 000000000..f69fbceb3 --- /dev/null +++ b/themes/linear-es-de/system/logos/dragon32.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/dreamcast.svg b/themes/linear-es-de/system/logos/dreamcast.svg new file mode 100644 index 000000000..aaa4717ed --- /dev/null +++ b/themes/linear-es-de/system/logos/dreamcast.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/easyrpg.svg b/themes/linear-es-de/system/logos/easyrpg.svg new file mode 100644 index 000000000..058f30286 --- /dev/null +++ b/themes/linear-es-de/system/logos/easyrpg.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/electron.svg b/themes/linear-es-de/system/logos/electron.svg new file mode 100644 index 000000000..dad0506ff --- /dev/null +++ b/themes/linear-es-de/system/logos/electron.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/emulators.svg b/themes/linear-es-de/system/logos/emulators.svg new file mode 100644 index 000000000..cc097c7d9 --- /dev/null +++ b/themes/linear-es-de/system/logos/emulators.svg @@ -0,0 +1,93 @@ + + + +image/svg+xml + + diff --git a/themes/linear-es-de/system/logos/epic.svg b/themes/linear-es-de/system/logos/epic.svg new file mode 100644 index 000000000..893b5566c --- /dev/null +++ b/themes/linear-es-de/system/logos/epic.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/famicom.svg b/themes/linear-es-de/system/logos/famicom.svg new file mode 100644 index 000000000..710c5c369 --- /dev/null +++ b/themes/linear-es-de/system/logos/famicom.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/fba.svg b/themes/linear-es-de/system/logos/fba.svg new file mode 100644 index 000000000..386351f8f --- /dev/null +++ b/themes/linear-es-de/system/logos/fba.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/fbneo.svg b/themes/linear-es-de/system/logos/fbneo.svg new file mode 100644 index 000000000..e2bb6daa5 --- /dev/null +++ b/themes/linear-es-de/system/logos/fbneo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/fds.svg b/themes/linear-es-de/system/logos/fds.svg new file mode 100644 index 000000000..9c5a20a75 --- /dev/null +++ b/themes/linear-es-de/system/logos/fds.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/flash.svg b/themes/linear-es-de/system/logos/flash.svg new file mode 100644 index 000000000..87677ce8f --- /dev/null +++ b/themes/linear-es-de/system/logos/flash.svg @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/fm7.svg b/themes/linear-es-de/system/logos/fm7.svg new file mode 100644 index 000000000..bf1d1f979 --- /dev/null +++ b/themes/linear-es-de/system/logos/fm7.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/fmtowns.svg b/themes/linear-es-de/system/logos/fmtowns.svg new file mode 100644 index 000000000..2fe672b09 --- /dev/null +++ b/themes/linear-es-de/system/logos/fmtowns.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/fpinball.svg b/themes/linear-es-de/system/logos/fpinball.svg new file mode 100644 index 000000000..f6ffff7bd --- /dev/null +++ b/themes/linear-es-de/system/logos/fpinball.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + Layer 1 + + + + + diff --git a/themes/linear-es-de/system/logos/gamate.svg b/themes/linear-es-de/system/logos/gamate.svg new file mode 100644 index 000000000..4b1186880 --- /dev/null +++ b/themes/linear-es-de/system/logos/gamate.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/gameandwatch.svg b/themes/linear-es-de/system/logos/gameandwatch.svg new file mode 100644 index 000000000..8b90808d7 --- /dev/null +++ b/themes/linear-es-de/system/logos/gameandwatch.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/gamecom.svg b/themes/linear-es-de/system/logos/gamecom.svg new file mode 100644 index 000000000..50113dc45 --- /dev/null +++ b/themes/linear-es-de/system/logos/gamecom.svg @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/gamegear.svg b/themes/linear-es-de/system/logos/gamegear.svg new file mode 100644 index 000000000..38f274fb6 --- /dev/null +++ b/themes/linear-es-de/system/logos/gamegear.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/gb.svg b/themes/linear-es-de/system/logos/gb.svg new file mode 100644 index 000000000..ece29dbc7 --- /dev/null +++ b/themes/linear-es-de/system/logos/gb.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/gba.svg b/themes/linear-es-de/system/logos/gba.svg new file mode 100644 index 000000000..0efbc3179 --- /dev/null +++ b/themes/linear-es-de/system/logos/gba.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/gbc.svg b/themes/linear-es-de/system/logos/gbc.svg new file mode 100644 index 000000000..35bed7bf6 --- /dev/null +++ b/themes/linear-es-de/system/logos/gbc.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/gc.svg b/themes/linear-es-de/system/logos/gc.svg new file mode 100644 index 000000000..676d95715 --- /dev/null +++ b/themes/linear-es-de/system/logos/gc.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/genesis.svg b/themes/linear-es-de/system/logos/genesis.svg new file mode 100644 index 000000000..e8fdf36e9 --- /dev/null +++ b/themes/linear-es-de/system/logos/genesis.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/gmaster.svg b/themes/linear-es-de/system/logos/gmaster.svg new file mode 100644 index 000000000..a29e84885 --- /dev/null +++ b/themes/linear-es-de/system/logos/gmaster.svg @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/gx4000.svg b/themes/linear-es-de/system/logos/gx4000.svg new file mode 100644 index 000000000..09f5bde96 --- /dev/null +++ b/themes/linear-es-de/system/logos/gx4000.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/intellivision.svg b/themes/linear-es-de/system/logos/intellivision.svg new file mode 100644 index 000000000..93e1aff5e --- /dev/null +++ b/themes/linear-es-de/system/logos/intellivision.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/j2me.svg b/themes/linear-es-de/system/logos/j2me.svg new file mode 100644 index 000000000..84bf7927c --- /dev/null +++ b/themes/linear-es-de/system/logos/j2me.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/kodi.svg b/themes/linear-es-de/system/logos/kodi.svg new file mode 100644 index 000000000..1210d9447 --- /dev/null +++ b/themes/linear-es-de/system/logos/kodi.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/laserdisc.svg b/themes/linear-es-de/system/logos/laserdisc.svg new file mode 100644 index 000000000..495a57df4 --- /dev/null +++ b/themes/linear-es-de/system/logos/laserdisc.svg @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/lcdgames.svg b/themes/linear-es-de/system/logos/lcdgames.svg new file mode 100644 index 000000000..a42c00ec3 --- /dev/null +++ b/themes/linear-es-de/system/logos/lcdgames.svg @@ -0,0 +1,1410 @@ + + + +image/svg+xml diff --git a/themes/linear-es-de/system/logos/lowresnx.svg b/themes/linear-es-de/system/logos/lowresnx.svg new file mode 100644 index 000000000..28cd7a5c5 --- /dev/null +++ b/themes/linear-es-de/system/logos/lowresnx.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/lutris.svg b/themes/linear-es-de/system/logos/lutris.svg new file mode 100644 index 000000000..dfbf27f0b --- /dev/null +++ b/themes/linear-es-de/system/logos/lutris.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/lutro.svg b/themes/linear-es-de/system/logos/lutro.svg new file mode 100644 index 000000000..fa70e93f8 --- /dev/null +++ b/themes/linear-es-de/system/logos/lutro.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/macintosh.svg b/themes/linear-es-de/system/logos/macintosh.svg new file mode 100644 index 000000000..47f9e8e58 --- /dev/null +++ b/themes/linear-es-de/system/logos/macintosh.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/mame-advmame.svg b/themes/linear-es-de/system/logos/mame-advmame.svg new file mode 100644 index 000000000..ea979e993 --- /dev/null +++ b/themes/linear-es-de/system/logos/mame-advmame.svg @@ -0,0 +1,524 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/mame.svg b/themes/linear-es-de/system/logos/mame.svg new file mode 100644 index 000000000..08023926b --- /dev/null +++ b/themes/linear-es-de/system/logos/mame.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/mastersystem.svg b/themes/linear-es-de/system/logos/mastersystem.svg new file mode 100644 index 000000000..efec37f05 --- /dev/null +++ b/themes/linear-es-de/system/logos/mastersystem.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/megacd.svg b/themes/linear-es-de/system/logos/megacd.svg new file mode 100644 index 000000000..174b653c6 --- /dev/null +++ b/themes/linear-es-de/system/logos/megacd.svg @@ -0,0 +1 @@ +sega32x \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/megacdjp.svg b/themes/linear-es-de/system/logos/megacdjp.svg new file mode 100644 index 000000000..174b653c6 --- /dev/null +++ b/themes/linear-es-de/system/logos/megacdjp.svg @@ -0,0 +1 @@ +sega32x \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/megadrive.svg b/themes/linear-es-de/system/logos/megadrive.svg new file mode 100644 index 000000000..91aab8510 --- /dev/null +++ b/themes/linear-es-de/system/logos/megadrive.svg @@ -0,0 +1 @@ +megadrive \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/megadrivejp.svg b/themes/linear-es-de/system/logos/megadrivejp.svg new file mode 100644 index 000000000..e099a8b53 --- /dev/null +++ b/themes/linear-es-de/system/logos/megadrivejp.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/megaduck.svg b/themes/linear-es-de/system/logos/megaduck.svg new file mode 100644 index 000000000..a8f5c1e31 --- /dev/null +++ b/themes/linear-es-de/system/logos/megaduck.svg @@ -0,0 +1 @@ +megaduck \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/mess.svg b/themes/linear-es-de/system/logos/mess.svg new file mode 100644 index 000000000..8acebe3e5 --- /dev/null +++ b/themes/linear-es-de/system/logos/mess.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/model2.svg b/themes/linear-es-de/system/logos/model2.svg new file mode 100644 index 000000000..26bb05fb7 --- /dev/null +++ b/themes/linear-es-de/system/logos/model2.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/model3.svg b/themes/linear-es-de/system/logos/model3.svg new file mode 100644 index 000000000..6d9a4acea --- /dev/null +++ b/themes/linear-es-de/system/logos/model3.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/moonlight.svg b/themes/linear-es-de/system/logos/moonlight.svg new file mode 100644 index 000000000..8e7fbb75a --- /dev/null +++ b/themes/linear-es-de/system/logos/moonlight.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/moto.svg b/themes/linear-es-de/system/logos/moto.svg new file mode 100644 index 000000000..a24b6dfdf --- /dev/null +++ b/themes/linear-es-de/system/logos/moto.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/msx.svg b/themes/linear-es-de/system/logos/msx.svg new file mode 100644 index 000000000..7ad036f67 --- /dev/null +++ b/themes/linear-es-de/system/logos/msx.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/msx1.svg b/themes/linear-es-de/system/logos/msx1.svg new file mode 100644 index 000000000..7ad036f67 --- /dev/null +++ b/themes/linear-es-de/system/logos/msx1.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/msx2.svg b/themes/linear-es-de/system/logos/msx2.svg new file mode 100644 index 000000000..782a98ad8 --- /dev/null +++ b/themes/linear-es-de/system/logos/msx2.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/msxturbor.svg b/themes/linear-es-de/system/logos/msxturbor.svg new file mode 100644 index 000000000..9512676ab --- /dev/null +++ b/themes/linear-es-de/system/logos/msxturbor.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/mugen.svg b/themes/linear-es-de/system/logos/mugen.svg new file mode 100644 index 000000000..95e59e8a1 --- /dev/null +++ b/themes/linear-es-de/system/logos/mugen.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/multivision.svg b/themes/linear-es-de/system/logos/multivision.svg new file mode 100644 index 000000000..f7a8cc962 --- /dev/null +++ b/themes/linear-es-de/system/logos/multivision.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/n3ds.svg b/themes/linear-es-de/system/logos/n3ds.svg new file mode 100644 index 000000000..b5e504096 --- /dev/null +++ b/themes/linear-es-de/system/logos/n3ds.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/n64.svg b/themes/linear-es-de/system/logos/n64.svg new file mode 100644 index 000000000..c265227bc --- /dev/null +++ b/themes/linear-es-de/system/logos/n64.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/n64dd.svg b/themes/linear-es-de/system/logos/n64dd.svg new file mode 100644 index 000000000..da028ab03 --- /dev/null +++ b/themes/linear-es-de/system/logos/n64dd.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/naomi.svg b/themes/linear-es-de/system/logos/naomi.svg new file mode 100644 index 000000000..681181fbd --- /dev/null +++ b/themes/linear-es-de/system/logos/naomi.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/naomi2.svg b/themes/linear-es-de/system/logos/naomi2.svg new file mode 100644 index 000000000..ae618974a --- /dev/null +++ b/themes/linear-es-de/system/logos/naomi2.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/naomigd.svg b/themes/linear-es-de/system/logos/naomigd.svg new file mode 100644 index 000000000..0a171702b --- /dev/null +++ b/themes/linear-es-de/system/logos/naomigd.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/nds.svg b/themes/linear-es-de/system/logos/nds.svg new file mode 100644 index 000000000..876cac639 --- /dev/null +++ b/themes/linear-es-de/system/logos/nds.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/neogeo.svg b/themes/linear-es-de/system/logos/neogeo.svg new file mode 100644 index 000000000..c67e8cc79 --- /dev/null +++ b/themes/linear-es-de/system/logos/neogeo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/neogeocd.svg b/themes/linear-es-de/system/logos/neogeocd.svg new file mode 100644 index 000000000..6e2df971a --- /dev/null +++ b/themes/linear-es-de/system/logos/neogeocd.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/neogeocdjp.svg b/themes/linear-es-de/system/logos/neogeocdjp.svg new file mode 100644 index 000000000..6e2df971a --- /dev/null +++ b/themes/linear-es-de/system/logos/neogeocdjp.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/nes.svg b/themes/linear-es-de/system/logos/nes.svg new file mode 100644 index 000000000..3f13ab3a9 --- /dev/null +++ b/themes/linear-es-de/system/logos/nes.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/ngage.svg b/themes/linear-es-de/system/logos/ngage.svg new file mode 100644 index 000000000..401f99b7a --- /dev/null +++ b/themes/linear-es-de/system/logos/ngage.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/ngp.svg b/themes/linear-es-de/system/logos/ngp.svg new file mode 100644 index 000000000..2459abc0b --- /dev/null +++ b/themes/linear-es-de/system/logos/ngp.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/ngpc.svg b/themes/linear-es-de/system/logos/ngpc.svg new file mode 100644 index 000000000..f1aa6c4f1 --- /dev/null +++ b/themes/linear-es-de/system/logos/ngpc.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/now-playing.svg b/themes/linear-es-de/system/logos/now-playing.svg new file mode 100644 index 000000000..322cb5df2 --- /dev/null +++ b/themes/linear-es-de/system/logos/now-playing.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/odyssey2.svg b/themes/linear-es-de/system/logos/odyssey2.svg new file mode 100644 index 000000000..1f8d59922 --- /dev/null +++ b/themes/linear-es-de/system/logos/odyssey2.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/openbor.svg b/themes/linear-es-de/system/logos/openbor.svg new file mode 100644 index 000000000..94b10e5da --- /dev/null +++ b/themes/linear-es-de/system/logos/openbor.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/oric.svg b/themes/linear-es-de/system/logos/oric.svg new file mode 100644 index 000000000..c19486086 --- /dev/null +++ b/themes/linear-es-de/system/logos/oric.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/palm.svg b/themes/linear-es-de/system/logos/palm.svg new file mode 100644 index 000000000..1e0c41049 --- /dev/null +++ b/themes/linear-es-de/system/logos/palm.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/pc.svg b/themes/linear-es-de/system/logos/pc.svg new file mode 100644 index 000000000..758545c81 --- /dev/null +++ b/themes/linear-es-de/system/logos/pc.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/pc88.svg b/themes/linear-es-de/system/logos/pc88.svg new file mode 100644 index 000000000..11b28f3fc --- /dev/null +++ b/themes/linear-es-de/system/logos/pc88.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/pc98.svg b/themes/linear-es-de/system/logos/pc98.svg new file mode 100644 index 000000000..bcfe4849f --- /dev/null +++ b/themes/linear-es-de/system/logos/pc98.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/pcarcade.svg b/themes/linear-es-de/system/logos/pcarcade.svg new file mode 100644 index 000000000..4f304eb55 --- /dev/null +++ b/themes/linear-es-de/system/logos/pcarcade.svg @@ -0,0 +1,445 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/pcengine.svg b/themes/linear-es-de/system/logos/pcengine.svg new file mode 100644 index 000000000..99ff9dde0 --- /dev/null +++ b/themes/linear-es-de/system/logos/pcengine.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/pcenginecd.svg b/themes/linear-es-de/system/logos/pcenginecd.svg new file mode 100644 index 000000000..d7d630858 --- /dev/null +++ b/themes/linear-es-de/system/logos/pcenginecd.svg @@ -0,0 +1 @@ +pce-cd \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/pcfx.svg b/themes/linear-es-de/system/logos/pcfx.svg new file mode 100644 index 000000000..3eecf66ed --- /dev/null +++ b/themes/linear-es-de/system/logos/pcfx.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/pico8.svg b/themes/linear-es-de/system/logos/pico8.svg new file mode 100644 index 000000000..8d3edc85b --- /dev/null +++ b/themes/linear-es-de/system/logos/pico8.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/plus4.svg b/themes/linear-es-de/system/logos/plus4.svg new file mode 100644 index 000000000..a4fefc476 --- /dev/null +++ b/themes/linear-es-de/system/logos/plus4.svg @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/pokemini.svg b/themes/linear-es-de/system/logos/pokemini.svg new file mode 100644 index 000000000..648b9c5e7 --- /dev/null +++ b/themes/linear-es-de/system/logos/pokemini.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/ports.svg b/themes/linear-es-de/system/logos/ports.svg new file mode 100644 index 000000000..03fd34c65 --- /dev/null +++ b/themes/linear-es-de/system/logos/ports.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/ps2.svg b/themes/linear-es-de/system/logos/ps2.svg new file mode 100644 index 000000000..816de4f5c --- /dev/null +++ b/themes/linear-es-de/system/logos/ps2.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/ps3.svg b/themes/linear-es-de/system/logos/ps3.svg new file mode 100644 index 000000000..83f3af490 --- /dev/null +++ b/themes/linear-es-de/system/logos/ps3.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/ps4.svg b/themes/linear-es-de/system/logos/ps4.svg new file mode 100644 index 000000000..07e47eb00 --- /dev/null +++ b/themes/linear-es-de/system/logos/ps4.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/psp.svg b/themes/linear-es-de/system/logos/psp.svg new file mode 100644 index 000000000..5a69ab8f2 --- /dev/null +++ b/themes/linear-es-de/system/logos/psp.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/psvita.svg b/themes/linear-es-de/system/logos/psvita.svg new file mode 100644 index 000000000..b56f7ef64 --- /dev/null +++ b/themes/linear-es-de/system/logos/psvita.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/psx.svg b/themes/linear-es-de/system/logos/psx.svg new file mode 100644 index 000000000..4123eda2b --- /dev/null +++ b/themes/linear-es-de/system/logos/psx.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/pv1000.svg b/themes/linear-es-de/system/logos/pv1000.svg new file mode 100644 index 000000000..5bd6b6c8c --- /dev/null +++ b/themes/linear-es-de/system/logos/pv1000.svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/quake.svg b/themes/linear-es-de/system/logos/quake.svg new file mode 100644 index 000000000..73b6ea09b --- /dev/null +++ b/themes/linear-es-de/system/logos/quake.svg @@ -0,0 +1,54 @@ + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/samcoupe.svg b/themes/linear-es-de/system/logos/samcoupe.svg new file mode 100644 index 000000000..d1c462cd4 --- /dev/null +++ b/themes/linear-es-de/system/logos/samcoupe.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/satellaview.svg b/themes/linear-es-de/system/logos/satellaview.svg new file mode 100644 index 000000000..490472fc1 --- /dev/null +++ b/themes/linear-es-de/system/logos/satellaview.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/saturn.svg b/themes/linear-es-de/system/logos/saturn.svg new file mode 100644 index 000000000..284f58905 --- /dev/null +++ b/themes/linear-es-de/system/logos/saturn.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/saturnjp.svg b/themes/linear-es-de/system/logos/saturnjp.svg new file mode 100644 index 000000000..284f58905 --- /dev/null +++ b/themes/linear-es-de/system/logos/saturnjp.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/scummvm.svg b/themes/linear-es-de/system/logos/scummvm.svg new file mode 100644 index 000000000..f1ff43d11 --- /dev/null +++ b/themes/linear-es-de/system/logos/scummvm.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/scv.svg b/themes/linear-es-de/system/logos/scv.svg new file mode 100644 index 000000000..bab8e009a --- /dev/null +++ b/themes/linear-es-de/system/logos/scv.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/sega32x.svg b/themes/linear-es-de/system/logos/sega32x.svg new file mode 100644 index 000000000..333ec5967 --- /dev/null +++ b/themes/linear-es-de/system/logos/sega32x.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/sega32xjp.svg b/themes/linear-es-de/system/logos/sega32xjp.svg new file mode 100644 index 000000000..333ec5967 --- /dev/null +++ b/themes/linear-es-de/system/logos/sega32xjp.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/sega32xna.svg b/themes/linear-es-de/system/logos/sega32xna.svg new file mode 100644 index 000000000..333ec5967 --- /dev/null +++ b/themes/linear-es-de/system/logos/sega32xna.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/segacd.svg b/themes/linear-es-de/system/logos/segacd.svg new file mode 100644 index 000000000..0b07389c1 --- /dev/null +++ b/themes/linear-es-de/system/logos/segacd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/sfc.svg b/themes/linear-es-de/system/logos/sfc.svg new file mode 100644 index 000000000..f6ba6b227 --- /dev/null +++ b/themes/linear-es-de/system/logos/sfc.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/sg-1000.svg b/themes/linear-es-de/system/logos/sg-1000.svg new file mode 100644 index 000000000..876b0f813 --- /dev/null +++ b/themes/linear-es-de/system/logos/sg-1000.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/sgb.svg b/themes/linear-es-de/system/logos/sgb.svg new file mode 100644 index 000000000..331328164 --- /dev/null +++ b/themes/linear-es-de/system/logos/sgb.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/snes.svg b/themes/linear-es-de/system/logos/snes.svg new file mode 100644 index 000000000..2989df13a --- /dev/null +++ b/themes/linear-es-de/system/logos/snes.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/snesna.svg b/themes/linear-es-de/system/logos/snesna.svg new file mode 100644 index 000000000..2989df13a --- /dev/null +++ b/themes/linear-es-de/system/logos/snesna.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/solarus.svg b/themes/linear-es-de/system/logos/solarus.svg new file mode 100644 index 000000000..669c95d95 --- /dev/null +++ b/themes/linear-es-de/system/logos/solarus.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/spectravideo.svg b/themes/linear-es-de/system/logos/spectravideo.svg new file mode 100644 index 000000000..f7ee0fc8a --- /dev/null +++ b/themes/linear-es-de/system/logos/spectravideo.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/steam.svg b/themes/linear-es-de/system/logos/steam.svg new file mode 100644 index 000000000..994088d41 --- /dev/null +++ b/themes/linear-es-de/system/logos/steam.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/stratagus.svg b/themes/linear-es-de/system/logos/stratagus.svg new file mode 100644 index 000000000..be7845cb0 --- /dev/null +++ b/themes/linear-es-de/system/logos/stratagus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/stv.svg b/themes/linear-es-de/system/logos/stv.svg new file mode 100644 index 000000000..2dfeda954 --- /dev/null +++ b/themes/linear-es-de/system/logos/stv.svg @@ -0,0 +1,5138 @@ + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/sufami.svg b/themes/linear-es-de/system/logos/sufami.svg new file mode 100644 index 000000000..d85590f21 --- /dev/null +++ b/themes/linear-es-de/system/logos/sufami.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/supergrafx.svg b/themes/linear-es-de/system/logos/supergrafx.svg new file mode 100644 index 000000000..d72ad75c8 --- /dev/null +++ b/themes/linear-es-de/system/logos/supergrafx.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/supervision.svg b/themes/linear-es-de/system/logos/supervision.svg new file mode 100644 index 000000000..87621fbb6 --- /dev/null +++ b/themes/linear-es-de/system/logos/supervision.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/supracan.svg b/themes/linear-es-de/system/logos/supracan.svg new file mode 100644 index 000000000..58076f506 --- /dev/null +++ b/themes/linear-es-de/system/logos/supracan.svg @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/switch.svg b/themes/linear-es-de/system/logos/switch.svg new file mode 100644 index 000000000..6a3fa5831 --- /dev/null +++ b/themes/linear-es-de/system/logos/switch.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/symbian.svg b/themes/linear-es-de/system/logos/symbian.svg new file mode 100644 index 000000000..0bc552c9b --- /dev/null +++ b/themes/linear-es-de/system/logos/symbian.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/tanodragon.svg b/themes/linear-es-de/system/logos/tanodragon.svg new file mode 100644 index 000000000..1e72a9b5f --- /dev/null +++ b/themes/linear-es-de/system/logos/tanodragon.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/tg-cd.svg b/themes/linear-es-de/system/logos/tg-cd.svg new file mode 100644 index 000000000..97a553237 --- /dev/null +++ b/themes/linear-es-de/system/logos/tg-cd.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/tg16.svg b/themes/linear-es-de/system/logos/tg16.svg new file mode 100644 index 000000000..c8b3c4326 --- /dev/null +++ b/themes/linear-es-de/system/logos/tg16.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/ti99.svg b/themes/linear-es-de/system/logos/ti99.svg new file mode 100644 index 000000000..983cbf068 --- /dev/null +++ b/themes/linear-es-de/system/logos/ti99.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/tic80.svg b/themes/linear-es-de/system/logos/tic80.svg new file mode 100644 index 000000000..4b4850815 --- /dev/null +++ b/themes/linear-es-de/system/logos/tic80.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/to8.svg b/themes/linear-es-de/system/logos/to8.svg new file mode 100644 index 000000000..ca2363c17 --- /dev/null +++ b/themes/linear-es-de/system/logos/to8.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/tools.svg b/themes/linear-es-de/system/logos/tools.svg new file mode 100644 index 000000000..a05eaadde --- /dev/null +++ b/themes/linear-es-de/system/logos/tools.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/triforce.svg b/themes/linear-es-de/system/logos/triforce.svg new file mode 100644 index 000000000..3217dfb9b --- /dev/null +++ b/themes/linear-es-de/system/logos/triforce.svg @@ -0,0 +1,498 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/trs-80.svg b/themes/linear-es-de/system/logos/trs-80.svg new file mode 100644 index 000000000..8015c8b3d --- /dev/null +++ b/themes/linear-es-de/system/logos/trs-80.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/type-x.svg b/themes/linear-es-de/system/logos/type-x.svg new file mode 100644 index 000000000..2ca1e2c3d --- /dev/null +++ b/themes/linear-es-de/system/logos/type-x.svg @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/uzebox.svg b/themes/linear-es-de/system/logos/uzebox.svg new file mode 100644 index 000000000..1829e6e99 --- /dev/null +++ b/themes/linear-es-de/system/logos/uzebox.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/vectrex.svg b/themes/linear-es-de/system/logos/vectrex.svg new file mode 100644 index 000000000..73dd55989 --- /dev/null +++ b/themes/linear-es-de/system/logos/vectrex.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/vic20.svg b/themes/linear-es-de/system/logos/vic20.svg new file mode 100644 index 000000000..9ce457ae4 --- /dev/null +++ b/themes/linear-es-de/system/logos/vic20.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/videopac.svg b/themes/linear-es-de/system/logos/videopac.svg new file mode 100644 index 000000000..89127dab9 --- /dev/null +++ b/themes/linear-es-de/system/logos/videopac.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/virtualboy.svg b/themes/linear-es-de/system/logos/virtualboy.svg new file mode 100644 index 000000000..c07861f8b --- /dev/null +++ b/themes/linear-es-de/system/logos/virtualboy.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/vpinball.svg b/themes/linear-es-de/system/logos/vpinball.svg new file mode 100644 index 000000000..e6d638e99 --- /dev/null +++ b/themes/linear-es-de/system/logos/vpinball.svg @@ -0,0 +1,68 @@ + + + + + + + + + John Loreth 2022 + + Layer 1 + + + + + diff --git a/themes/linear-es-de/system/logos/vsmile.svg b/themes/linear-es-de/system/logos/vsmile.svg new file mode 100644 index 000000000..9ad901805 --- /dev/null +++ b/themes/linear-es-de/system/logos/vsmile.svg @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/wasm4.svg b/themes/linear-es-de/system/logos/wasm4.svg new file mode 100644 index 000000000..68ff7e124 --- /dev/null +++ b/themes/linear-es-de/system/logos/wasm4.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/wii.svg b/themes/linear-es-de/system/logos/wii.svg new file mode 100644 index 000000000..5f78ee79d --- /dev/null +++ b/themes/linear-es-de/system/logos/wii.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/wiiu.svg b/themes/linear-es-de/system/logos/wiiu.svg new file mode 100644 index 000000000..937795488 --- /dev/null +++ b/themes/linear-es-de/system/logos/wiiu.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/windows.svg b/themes/linear-es-de/system/logos/windows.svg new file mode 100644 index 000000000..f42327683 --- /dev/null +++ b/themes/linear-es-de/system/logos/windows.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/windows3x.svg b/themes/linear-es-de/system/logos/windows3x.svg new file mode 100644 index 000000000..384ceb87e --- /dev/null +++ b/themes/linear-es-de/system/logos/windows3x.svg @@ -0,0 +1,326 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/windows9x.svg b/themes/linear-es-de/system/logos/windows9x.svg new file mode 100644 index 000000000..65bf33681 --- /dev/null +++ b/themes/linear-es-de/system/logos/windows9x.svg @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/wonderswan.svg b/themes/linear-es-de/system/logos/wonderswan.svg new file mode 100644 index 000000000..51c4c261b --- /dev/null +++ b/themes/linear-es-de/system/logos/wonderswan.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/wonderswancolor.svg b/themes/linear-es-de/system/logos/wonderswancolor.svg new file mode 100644 index 000000000..2cc1f900c --- /dev/null +++ b/themes/linear-es-de/system/logos/wonderswancolor.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/x1.svg b/themes/linear-es-de/system/logos/x1.svg new file mode 100644 index 000000000..b3a91cc6b --- /dev/null +++ b/themes/linear-es-de/system/logos/x1.svg @@ -0,0 +1 @@ +Sharp_X1_logo \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/x68000.svg b/themes/linear-es-de/system/logos/x68000.svg new file mode 100644 index 000000000..f99c6b150 --- /dev/null +++ b/themes/linear-es-de/system/logos/x68000.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/xbox.svg b/themes/linear-es-de/system/logos/xbox.svg new file mode 100644 index 000000000..1371869ac --- /dev/null +++ b/themes/linear-es-de/system/logos/xbox.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/xbox360.svg b/themes/linear-es-de/system/logos/xbox360.svg new file mode 100644 index 000000000..340c9d71b --- /dev/null +++ b/themes/linear-es-de/system/logos/xbox360.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/zmachine.svg b/themes/linear-es-de/system/logos/zmachine.svg new file mode 100644 index 000000000..4eba7582c --- /dev/null +++ b/themes/linear-es-de/system/logos/zmachine.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/zx81.svg b/themes/linear-es-de/system/logos/zx81.svg new file mode 100644 index 000000000..22caafea9 --- /dev/null +++ b/themes/linear-es-de/system/logos/zx81.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/logos/zxnext.svg b/themes/linear-es-de/system/logos/zxnext.svg new file mode 100644 index 000000000..263d1fb05 --- /dev/null +++ b/themes/linear-es-de/system/logos/zxnext.svg @@ -0,0 +1,555 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/linear-es-de/system/logos/zxspectrum.svg b/themes/linear-es-de/system/logos/zxspectrum.svg new file mode 100644 index 000000000..b9b1ad7a7 --- /dev/null +++ b/themes/linear-es-de/system/logos/zxspectrum.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/3do.xml b/themes/linear-es-de/system/metadata-custom/3do.xml new file mode 100644 index 000000000..a5f0765fd --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/3do.xml @@ -0,0 +1,10 @@ + + + AA9D96 + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/_default.xml b/themes/linear-es-de/system/metadata-custom/_default.xml new file mode 100644 index 000000000..0c6bcfb94 --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/_default.xml @@ -0,0 +1,16 @@ + + + + ${systemHardwareType} + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/adam.xml b/themes/linear-es-de/system/metadata-custom/adam.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/adam.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/ags.xml b/themes/linear-es-de/system/metadata-custom/ags.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/ags.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/amiga.xml b/themes/linear-es-de/system/metadata-custom/amiga.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/amiga.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/amiga1200.xml b/themes/linear-es-de/system/metadata-custom/amiga1200.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/amiga1200.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/amiga600.xml b/themes/linear-es-de/system/metadata-custom/amiga600.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/amiga600.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/amigacd32.xml b/themes/linear-es-de/system/metadata-custom/amigacd32.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/amigacd32.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/amstradcpc.xml b/themes/linear-es-de/system/metadata-custom/amstradcpc.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/amstradcpc.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/android.xml b/themes/linear-es-de/system/metadata-custom/android.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/android.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/apple2.xml b/themes/linear-es-de/system/metadata-custom/apple2.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/apple2.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/apple2gs.xml b/themes/linear-es-de/system/metadata-custom/apple2gs.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/apple2gs.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/arcadia.xml b/themes/linear-es-de/system/metadata-custom/arcadia.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/arcadia.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/archimedes.xml b/themes/linear-es-de/system/metadata-custom/archimedes.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/archimedes.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/arduboy.xml b/themes/linear-es-de/system/metadata-custom/arduboy.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/arduboy.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/astrocade.xml b/themes/linear-es-de/system/metadata-custom/astrocade.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/astrocade.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/atari2600.xml b/themes/linear-es-de/system/metadata-custom/atari2600.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/atari2600.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/atari5200.xml b/themes/linear-es-de/system/metadata-custom/atari5200.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/atari5200.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/atari7800.xml b/themes/linear-es-de/system/metadata-custom/atari7800.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/atari7800.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/atari800.xml b/themes/linear-es-de/system/metadata-custom/atari800.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/atari800.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/atarijaguar.xml b/themes/linear-es-de/system/metadata-custom/atarijaguar.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/atarijaguar.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/atarijaguarcd.xml b/themes/linear-es-de/system/metadata-custom/atarijaguarcd.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/atarijaguarcd.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/atarilynx.xml b/themes/linear-es-de/system/metadata-custom/atarilynx.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/atarilynx.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/atarist.xml b/themes/linear-es-de/system/metadata-custom/atarist.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/atarist.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/atarixe.xml b/themes/linear-es-de/system/metadata-custom/atarixe.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/atarixe.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/atomiswave.xml b/themes/linear-es-de/system/metadata-custom/atomiswave.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/atomiswave.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/auto-allgames.xml b/themes/linear-es-de/system/metadata-custom/auto-allgames.xml new file mode 100644 index 000000000..b84737774 --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/auto-allgames.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/auto-favorites.xml b/themes/linear-es-de/system/metadata-custom/auto-favorites.xml new file mode 100644 index 000000000..b84737774 --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/auto-favorites.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/auto-lastplayed.xml b/themes/linear-es-de/system/metadata-custom/auto-lastplayed.xml new file mode 100644 index 000000000..b84737774 --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/auto-lastplayed.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/bbcmicro.xml b/themes/linear-es-de/system/metadata-custom/bbcmicro.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/bbcmicro.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/c64.xml b/themes/linear-es-de/system/metadata-custom/c64.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/c64.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/cdimono1.xml b/themes/linear-es-de/system/metadata-custom/cdimono1.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/cdimono1.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/cdtv.xml b/themes/linear-es-de/system/metadata-custom/cdtv.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/cdtv.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/chailove.xml b/themes/linear-es-de/system/metadata-custom/chailove.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/chailove.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/channelf.xml b/themes/linear-es-de/system/metadata-custom/channelf.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/channelf.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/coco.xml b/themes/linear-es-de/system/metadata-custom/coco.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/coco.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/colecovision.xml b/themes/linear-es-de/system/metadata-custom/colecovision.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/colecovision.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/completed.xml b/themes/linear-es-de/system/metadata-custom/completed.xml new file mode 100644 index 000000000..9352af20c --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/completed.xml @@ -0,0 +1,9 @@ + + + + + fit + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/cps.xml b/themes/linear-es-de/system/metadata-custom/cps.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/cps.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/cps1.xml b/themes/linear-es-de/system/metadata-custom/cps1.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/cps1.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/cps2.xml b/themes/linear-es-de/system/metadata-custom/cps2.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/cps2.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/cps3.xml b/themes/linear-es-de/system/metadata-custom/cps3.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/cps3.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/crvision.xml b/themes/linear-es-de/system/metadata-custom/crvision.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/crvision.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/custom-collections.xml b/themes/linear-es-de/system/metadata-custom/custom-collections.xml new file mode 100644 index 000000000..b84737774 --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/custom-collections.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/daphne.xml b/themes/linear-es-de/system/metadata-custom/daphne.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/daphne.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/doom.xml b/themes/linear-es-de/system/metadata-custom/doom.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/doom.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/dos.xml b/themes/linear-es-de/system/metadata-custom/dos.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/dos.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/dragon32.xml b/themes/linear-es-de/system/metadata-custom/dragon32.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/dragon32.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/dreamcast.xml b/themes/linear-es-de/system/metadata-custom/dreamcast.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/dreamcast.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/easyrpg.xml b/themes/linear-es-de/system/metadata-custom/easyrpg.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/easyrpg.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/electron.xml b/themes/linear-es-de/system/metadata-custom/electron.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/electron.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/famicom.xml b/themes/linear-es-de/system/metadata-custom/famicom.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/famicom.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/fba.xml b/themes/linear-es-de/system/metadata-custom/fba.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/fba.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/fbneo.xml b/themes/linear-es-de/system/metadata-custom/fbneo.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/fbneo.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/fds.xml b/themes/linear-es-de/system/metadata-custom/fds.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/fds.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/flash.xml b/themes/linear-es-de/system/metadata-custom/flash.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/flash.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/fm7.xml b/themes/linear-es-de/system/metadata-custom/fm7.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/fm7.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/fmtowns.xml b/themes/linear-es-de/system/metadata-custom/fmtowns.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/fmtowns.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/fpinball.xml b/themes/linear-es-de/system/metadata-custom/fpinball.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/fpinball.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/gamate.xml b/themes/linear-es-de/system/metadata-custom/gamate.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/gamate.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/gameandwatch.xml b/themes/linear-es-de/system/metadata-custom/gameandwatch.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/gameandwatch.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/gamecom.xml b/themes/linear-es-de/system/metadata-custom/gamecom.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/gamecom.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/gamegear.xml b/themes/linear-es-de/system/metadata-custom/gamegear.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/gamegear.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/gb.xml b/themes/linear-es-de/system/metadata-custom/gb.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/gb.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/gba.xml b/themes/linear-es-de/system/metadata-custom/gba.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/gba.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/gbc.xml b/themes/linear-es-de/system/metadata-custom/gbc.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/gbc.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/gc.xml b/themes/linear-es-de/system/metadata-custom/gc.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/gc.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/genesis.xml b/themes/linear-es-de/system/metadata-custom/genesis.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/genesis.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/gmaster.xml b/themes/linear-es-de/system/metadata-custom/gmaster.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/gmaster.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/gx4000.xml b/themes/linear-es-de/system/metadata-custom/gx4000.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/gx4000.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/intellivision.xml b/themes/linear-es-de/system/metadata-custom/intellivision.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/intellivision.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/j2me.xml b/themes/linear-es-de/system/metadata-custom/j2me.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/j2me.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/kodi.xml b/themes/linear-es-de/system/metadata-custom/kodi.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/kodi.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/lowresnx.xml b/themes/linear-es-de/system/metadata-custom/lowresnx.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/lowresnx.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/lutris.xml b/themes/linear-es-de/system/metadata-custom/lutris.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/lutris.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/lutro.xml b/themes/linear-es-de/system/metadata-custom/lutro.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/lutro.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/macintosh.xml b/themes/linear-es-de/system/metadata-custom/macintosh.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/macintosh.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/mame-advmame.xml b/themes/linear-es-de/system/metadata-custom/mame-advmame.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/mame-advmame.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/mame.xml b/themes/linear-es-de/system/metadata-custom/mame.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/mame.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/mastersystem.xml b/themes/linear-es-de/system/metadata-custom/mastersystem.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/mastersystem.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/megacd.xml b/themes/linear-es-de/system/metadata-custom/megacd.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/megacd.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/megacdjp.xml b/themes/linear-es-de/system/metadata-custom/megacdjp.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/megacdjp.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/megadrive.xml b/themes/linear-es-de/system/metadata-custom/megadrive.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/megadrive.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/megadrivejp.xml b/themes/linear-es-de/system/metadata-custom/megadrivejp.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/megadrivejp.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/megaduck.xml b/themes/linear-es-de/system/metadata-custom/megaduck.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/megaduck.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/mess.xml b/themes/linear-es-de/system/metadata-custom/mess.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/mess.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/model2.xml b/themes/linear-es-de/system/metadata-custom/model2.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/model2.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/model3.xml b/themes/linear-es-de/system/metadata-custom/model3.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/model3.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/moto.xml b/themes/linear-es-de/system/metadata-custom/moto.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/moto.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/msx.xml b/themes/linear-es-de/system/metadata-custom/msx.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/msx.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/msx1.xml b/themes/linear-es-de/system/metadata-custom/msx1.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/msx1.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/msx2.xml b/themes/linear-es-de/system/metadata-custom/msx2.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/msx2.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/msxturbor.xml b/themes/linear-es-de/system/metadata-custom/msxturbor.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/msxturbor.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/mugen.xml b/themes/linear-es-de/system/metadata-custom/mugen.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/mugen.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/multivision.xml b/themes/linear-es-de/system/metadata-custom/multivision.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/multivision.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/n3ds.xml b/themes/linear-es-de/system/metadata-custom/n3ds.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/n3ds.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/n64.xml b/themes/linear-es-de/system/metadata-custom/n64.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/n64.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/n64dd.xml b/themes/linear-es-de/system/metadata-custom/n64dd.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/n64dd.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/naomi.xml b/themes/linear-es-de/system/metadata-custom/naomi.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/naomi.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/naomi2.xml b/themes/linear-es-de/system/metadata-custom/naomi2.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/naomi2.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/naomigd.xml b/themes/linear-es-de/system/metadata-custom/naomigd.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/naomigd.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/nds.xml b/themes/linear-es-de/system/metadata-custom/nds.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/nds.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/neogeo.xml b/themes/linear-es-de/system/metadata-custom/neogeo.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/neogeo.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/neogeocd.xml b/themes/linear-es-de/system/metadata-custom/neogeocd.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/neogeocd.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/neogeocdjp.xml b/themes/linear-es-de/system/metadata-custom/neogeocdjp.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/neogeocdjp.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/nes.xml b/themes/linear-es-de/system/metadata-custom/nes.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/nes.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/ngage.xml b/themes/linear-es-de/system/metadata-custom/ngage.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/ngage.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/ngp.xml b/themes/linear-es-de/system/metadata-custom/ngp.xml new file mode 100644 index 000000000..9a95ed380 --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/ngp.xml @@ -0,0 +1,10 @@ + + + CE4B39 + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/ngpc.xml b/themes/linear-es-de/system/metadata-custom/ngpc.xml new file mode 100644 index 000000000..9a95ed380 --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/ngpc.xml @@ -0,0 +1,10 @@ + + + CE4B39 + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/now-playing.xml b/themes/linear-es-de/system/metadata-custom/now-playing.xml new file mode 100644 index 000000000..9352af20c --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/now-playing.xml @@ -0,0 +1,9 @@ + + + + + fit + + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/odyssey2.xml b/themes/linear-es-de/system/metadata-custom/odyssey2.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/odyssey2.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/openbor.xml b/themes/linear-es-de/system/metadata-custom/openbor.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/openbor.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/oric.xml b/themes/linear-es-de/system/metadata-custom/oric.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/oric.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/palm.xml b/themes/linear-es-de/system/metadata-custom/palm.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/palm.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/pc.xml b/themes/linear-es-de/system/metadata-custom/pc.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/pc.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/pc88.xml b/themes/linear-es-de/system/metadata-custom/pc88.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/pc88.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/pc98.xml b/themes/linear-es-de/system/metadata-custom/pc98.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/pc98.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/pcengine.xml b/themes/linear-es-de/system/metadata-custom/pcengine.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/pcengine.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/pcenginecd.xml b/themes/linear-es-de/system/metadata-custom/pcenginecd.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/pcenginecd.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/pcfx.xml b/themes/linear-es-de/system/metadata-custom/pcfx.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/pcfx.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/pico8.xml b/themes/linear-es-de/system/metadata-custom/pico8.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/pico8.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/playdate.xml b/themes/linear-es-de/system/metadata-custom/playdate.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/playdate.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/plus4.xml b/themes/linear-es-de/system/metadata-custom/plus4.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/plus4.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/pokemini.xml b/themes/linear-es-de/system/metadata-custom/pokemini.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/pokemini.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/ps2.xml b/themes/linear-es-de/system/metadata-custom/ps2.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/ps2.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/ps3.xml b/themes/linear-es-de/system/metadata-custom/ps3.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/ps3.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/ps4.xml b/themes/linear-es-de/system/metadata-custom/ps4.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/ps4.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/psp.xml b/themes/linear-es-de/system/metadata-custom/psp.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/psp.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/psvita.xml b/themes/linear-es-de/system/metadata-custom/psvita.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/psvita.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/psx.xml b/themes/linear-es-de/system/metadata-custom/psx.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/psx.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/pv1000.xml b/themes/linear-es-de/system/metadata-custom/pv1000.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/pv1000.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/quake.xml b/themes/linear-es-de/system/metadata-custom/quake.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/quake.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/samcoupe.xml b/themes/linear-es-de/system/metadata-custom/samcoupe.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/samcoupe.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/satellaview.xml b/themes/linear-es-de/system/metadata-custom/satellaview.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/satellaview.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/saturn.xml b/themes/linear-es-de/system/metadata-custom/saturn.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/saturn.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/saturnjp.xml b/themes/linear-es-de/system/metadata-custom/saturnjp.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/saturnjp.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/scummvm.xml b/themes/linear-es-de/system/metadata-custom/scummvm.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/scummvm.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/scv.xml b/themes/linear-es-de/system/metadata-custom/scv.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/scv.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/sega32x.xml b/themes/linear-es-de/system/metadata-custom/sega32x.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/sega32x.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/sega32xjp.xml b/themes/linear-es-de/system/metadata-custom/sega32xjp.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/sega32xjp.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/sega32xna.xml b/themes/linear-es-de/system/metadata-custom/sega32xna.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/sega32xna.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/segacd.xml b/themes/linear-es-de/system/metadata-custom/segacd.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/segacd.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/sfc.xml b/themes/linear-es-de/system/metadata-custom/sfc.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/sfc.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/sg-1000.xml b/themes/linear-es-de/system/metadata-custom/sg-1000.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/sg-1000.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/sgb.xml b/themes/linear-es-de/system/metadata-custom/sgb.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/sgb.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/snes.xml b/themes/linear-es-de/system/metadata-custom/snes.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/snes.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/snesna.xml b/themes/linear-es-de/system/metadata-custom/snesna.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/snesna.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/solarus.xml b/themes/linear-es-de/system/metadata-custom/solarus.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/solarus.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/spectravideo.xml b/themes/linear-es-de/system/metadata-custom/spectravideo.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/spectravideo.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/stv.xml b/themes/linear-es-de/system/metadata-custom/stv.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/stv.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/sufami.xml b/themes/linear-es-de/system/metadata-custom/sufami.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/sufami.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/supergrafx.xml b/themes/linear-es-de/system/metadata-custom/supergrafx.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/supergrafx.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/supervision.xml b/themes/linear-es-de/system/metadata-custom/supervision.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/supervision.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/supracan.xml b/themes/linear-es-de/system/metadata-custom/supracan.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/supracan.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/switch.xml b/themes/linear-es-de/system/metadata-custom/switch.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/switch.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/symbian.xml b/themes/linear-es-de/system/metadata-custom/symbian.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/symbian.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/tanodragon.xml b/themes/linear-es-de/system/metadata-custom/tanodragon.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/tanodragon.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/tg-cd.xml b/themes/linear-es-de/system/metadata-custom/tg-cd.xml new file mode 100644 index 000000000..d6f97715d --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/tg-cd.xml @@ -0,0 +1,10 @@ + + + 5B6559 + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/tg16.xml b/themes/linear-es-de/system/metadata-custom/tg16.xml new file mode 100644 index 000000000..d6f97715d --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/tg16.xml @@ -0,0 +1,10 @@ + + + 5B6559 + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/ti99.xml b/themes/linear-es-de/system/metadata-custom/ti99.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/ti99.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/tic80.xml b/themes/linear-es-de/system/metadata-custom/tic80.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/tic80.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/to8.xml b/themes/linear-es-de/system/metadata-custom/to8.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/to8.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/triforce.xml b/themes/linear-es-de/system/metadata-custom/triforce.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/triforce.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/trs-80.xml b/themes/linear-es-de/system/metadata-custom/trs-80.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/trs-80.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/type-x.xml b/themes/linear-es-de/system/metadata-custom/type-x.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/type-x.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/uzebox.xml b/themes/linear-es-de/system/metadata-custom/uzebox.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/uzebox.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/vectrex.xml b/themes/linear-es-de/system/metadata-custom/vectrex.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/vectrex.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/vic20.xml b/themes/linear-es-de/system/metadata-custom/vic20.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/vic20.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/videopac.xml b/themes/linear-es-de/system/metadata-custom/videopac.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/videopac.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/virtualboy.xml b/themes/linear-es-de/system/metadata-custom/virtualboy.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/virtualboy.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/vpinball.xml b/themes/linear-es-de/system/metadata-custom/vpinball.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/vpinball.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/vsmile.xml b/themes/linear-es-de/system/metadata-custom/vsmile.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/vsmile.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/wasm4.xml b/themes/linear-es-de/system/metadata-custom/wasm4.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/wasm4.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/wii.xml b/themes/linear-es-de/system/metadata-custom/wii.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/wii.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/wiiu.xml b/themes/linear-es-de/system/metadata-custom/wiiu.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/wiiu.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/windows.xml b/themes/linear-es-de/system/metadata-custom/windows.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/windows.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/windows3x.xml b/themes/linear-es-de/system/metadata-custom/windows3x.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/windows3x.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/windows9x.xml b/themes/linear-es-de/system/metadata-custom/windows9x.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/windows9x.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/wonderswan.xml b/themes/linear-es-de/system/metadata-custom/wonderswan.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/wonderswan.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/wonderswancolor.xml b/themes/linear-es-de/system/metadata-custom/wonderswancolor.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/wonderswancolor.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/x1.xml b/themes/linear-es-de/system/metadata-custom/x1.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/x1.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/x68000.xml b/themes/linear-es-de/system/metadata-custom/x68000.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/x68000.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/xbox.xml b/themes/linear-es-de/system/metadata-custom/xbox.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/xbox.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/xbox360.xml b/themes/linear-es-de/system/metadata-custom/xbox360.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/xbox360.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/zmachine.xml b/themes/linear-es-de/system/metadata-custom/zmachine.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/zmachine.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/zx81.xml b/themes/linear-es-de/system/metadata-custom/zx81.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/zx81.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/zxnext.xml b/themes/linear-es-de/system/metadata-custom/zxnext.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/zxnext.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata-custom/zxspectrum.xml b/themes/linear-es-de/system/metadata-custom/zxspectrum.xml new file mode 100644 index 000000000..7e95c8bec --- /dev/null +++ b/themes/linear-es-de/system/metadata-custom/zxspectrum.xml @@ -0,0 +1,7 @@ + + + + ${systemManufacturer} / ${systemReleaseYear} / ${systemHardwareType} + + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/3do.xml b/themes/linear-es-de/system/metadata/3do.xml new file mode 100644 index 000000000..928dd0866 --- /dev/null +++ b/themes/linear-es-de/system/metadata/3do.xml @@ -0,0 +1,17 @@ + + + 3DO Interactive Multiplayer + The 3DO Interactive Multiplayer (often called simply 3DO) is a video game console originally produced by Panasonic in 1993. Further renditions of the hardware were released in 1994 by Sanyo and Goldstar. The consoles were manufactured according to specifications created by The 3DO Company, and were originally designed by Dave Needle and RJ Mical of New Technology Group. The system was conceived by entrepreneur and Electronic Arts founder Trip Hawkins. + Panasonic + 1993 + 1993-10-04 + October 4, 1993 + Console + 1-2 + CFA83E + FF0000 + 0000A0 + FFE41B + 23B14D + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/README.md b/themes/linear-es-de/system/metadata/README.md new file mode 100644 index 000000000..3ecbee999 --- /dev/null +++ b/themes/linear-es-de/system/metadata/README.md @@ -0,0 +1,88 @@ +# System Metadata Files for ES-DE +This repo contains XML files that add system metadata variables for use in themes created for [ES-DE](https://es-de.org/) + +The files leverage ES-DE variables to allow the values to be used in any theme agnostic of how the theme is structured. + +It also includes a `_default.xml` that can be used as a temporary fallback for when new systems are added to ES-DE + +Each file provides the following metadata variables: +- `systemDescription` - A description of the system +- `systemReleaseYear` - The year the system was released (when available) +- `systemReleaseDate` - The date the system was released in ISO 8601 (`YYYY-MM-DD`) format. If only the month and year was known then the format is `YYYY-MM`. If only the year was known then the format is `YYYY`. +- `systemReleaseDateFormated` - A formated version of the release date in `Month Day, Year` format. If only the month and year was known then the format is `Month Year`. If only the year was known then the format is `Year`. +- `systemManufacturer` - Represents the original Manufacturer of the system. +- `systemHardwareType` - A value to represent the systems type (e.g. `Console`. `Portable`, `Computer`, etc...) +- `systemColor` - A hex value to represent a systems primary color (can be used for things like backgrounds or navigation highlights) +- `systemColorPalette1...4` - 4 different hex values to represent other colors that can be used for a system (useful for things like color bands) +- `systemCoverSize` - Represents the common aspect ratio for a given system's cover artwork. Can be used to customize the size of grids and carousels that display cover art. + - Current set of sizes: `4-3`, `1-1`, `3-4`, `1-2`, `3-5`, `5-7`, `243-340`, `257-229` + - Using these values you can define width/height for just this set and those sizes will apply automatically to a given system. + +## **Usage** +1. Download the latest release of this repo and place it in a dedicated folder in your theme. + - I recommend a dedicated folder like this: `/_inc/systems/metadata-global/` + - This approach will make it easier to update when changes are made. +2. Include a reference to files at the top of your root theme.xml file + - As an example; I add the following includes in my themes: + - `./_inc/systems/metadata-global/_default.xml` - default file for fallback use cases + - `./_inc/systems/metadata-global/${system.theme}.xml` - the system specific xml file +3. Reference a value using the variable names listed above + - For example if you wanted to add system specific colors to a UI element you would refernece `${systemColor}` for that value + +## **Contributions** +- If you see any existing values that should be updated with more accurate data; please submit an issue or PR to this repo. Make sure to include the system, specific change and the reason for the change in your request. +- If you have an idea for a new variable to add; please submitt an issue to this repo with details of the variable and what it could be used for. + +## **Examples** + +| [CarAlt)](https://github.com/Weestuarty/caralt-es-de) | [Chicuelo (Revisited](https://github.com/anthonycaccese/chicuelo-revisited-es-de) | +| :---: | :---: | +| ![CarAlt](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/eebb8d45-b881-482f-bac0-31888ab12fcd) | ![chicuelo](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/74411202-1985-40ee-8cf6-8e9e1d4b9cc1) | +| Implements: `systemDescription` | Implements: `systemDescription`, `systemReleaseYear` and `systemHardwareType` | + +| [CodyWheel](https://github.com/Weestuarty/codywheel-es-de) | [CoinOPS](https://github.com/TheGrizzMD/coinops-es-de) | +| :---: | :---: | +| ![codywheel](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/6ea5c477-371e-4bb9-b090-a200a8588282) | ![coinops](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/50f75c6e-04e3-41a6-af74-358bb45403f8) | +| Implements: `systemDescription`, `systemReleaseYear`, `systemManufacturer` and `systemHardwareType` | Implements: `systemDescription` | + +| [Colorful (Revisited)](https://github.com/anthonycaccese/colorful-revisited-es-de) | [Colorful (Simplified)](https://github.com/anthonycaccese/colorful-simplified-es-de) | +| :---: | :---: | +| ![colorful-revisited](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/9b79ccc8-e0d7-43ae-b865-40f7bf740267) | ![colorful-simplified](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/35fcfbf4-eb08-4682-ae09-4fa3b5b8060b) | +| Implements: `systemColor`, `systemDescription`, `systemManufacturer`, `systemReleaseYear`, and `systemHardwareType` | Implements: `systemColor`, `systemDescription`, `systemManufacturer`, `systemReleaseYear`, `systemCoverSize`, and `systemHardwareType` | + +| [Diamond](https://github.com/Weestuarty/diamond-es-de) | [Epic Noir (Next)](https://github.com/anthonycaccese/epic-noir-next-es-de) | +| :---: | :---: | +| ![diamond](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/378c8a8a-2e9f-4cbc-aab6-6f269218699f) | ![epic-noir-next](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/bc45b7fa-874f-4107-852f-9c1c3a0dfcc3) | +| Implements: `systemManufacturer` and `systemReleaseYear` | Implements: `systemColor`, `systemDescription`, `systemReleaseYear`, and `systemHardwareType` | + +| [Epic Noir (Revisited)](https://github.com/anthonycaccese/epic-noir-revisited-es-de) | [ForAll](https://github.com/Weestuarty/forall-es-de) | +| :---: | :---: | +| ![epic-noir-revisited](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/98c74c60-42a7-4b3e-b129-ed4156dbc070) | ![forall](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/01b12f6f-f18d-4b9f-9a2d-842b10e3b3d0) | +| Implements: `systemDescription`, `systemReleaseYear`, and `systemHardwareType` | Implements: `systemDescription` | + +| [NSO Menu (Interpreted)](https://github.com/anthonycaccese/nso-menu-interpreted-es-de) | [Retrofix (Revisited)](https://github.com/anthonycaccese/retrofix-revisited-es-de) | +| :---: | :---: | +| ![nso-menu](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/f483899f-56f0-4230-8bca-afed9aab63d4) | ![retrofix](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/cda97089-7611-47be-8a19-bff469c69e42) | +| Implements: `systemColor` and `systemCoverSize` | Implements: `systemColor` | + +| [Showcase](https://github.com/Weestuarty/showcase-es-de) | [SimCar](https://github.com/Weestuarty/simcar-es-de) | +| :---: | :---: | +| ![showcase](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/2b27affe-ed6c-437b-9569-cf4ded74061d) | ![simcar](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/dc1dae0e-a452-4c4a-83c5-05ce81a22ed6) | +| Implements: `systemDescription` | Implements: `systemDescription` | + +| [TexGriddy](https://github.com/Weestuarty/texgriddy-es-de) | +| :---: | +| ![textgriddy](https://github.com/anthonycaccese/nso-menu-interpreted-es-de/assets/1454947/ff0dc121-a943-4096-9d96-27ddaeea974f) | +| Implements: `systemDescription` | + + +## **Credits** +* Some descriptions, release dates & manufacturer details were sourced from the wikipedia entries for each system +* Some descriptions were sourced from [ckau-book](https://github.com/CkauNui/ckau-book/tree/master) +* Some release date and manufacturer details were sourced from the [Launchbox](https://gamesdb.launchbox-app.com/) platforms list +* System colors were sourced from the great work done by [viking](https://forums.launchbox-app.com/profile/70421-viking/) from their work on the [Colorful](https://forums.launchbox-app.com/files/file/2081-colorful-bigbox-theme) theme for Launchbox and [@rogs123](https://github.com/rogs123) from their work on the [NSO Menu](https://github.com/anthonycaccese/nso-menu-interpreted-es-de) theme for ES-DE +* System Cover sizes were sourced from examples on screenscraper.fr + +## **License** +Creative Commons CC-BY-NC-SA - https://creativecommons.org/licenses/by-nc-sa/2.0/ +You are free to share and adapt these files as long as you provide attribution back as well share any updates you make under the same licence terms. \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/_default.xml b/themes/linear-es-de/system/metadata/_default.xml new file mode 100644 index 000000000..68d71ebcf --- /dev/null +++ b/themes/linear-es-de/system/metadata/_default.xml @@ -0,0 +1,17 @@ + + + ${system.fullName} + View and play the ${system.fullName} + + + + + System + 1-1 + 222222 + 999999 + 777777 + 555555 + 333333 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/adam.xml b/themes/linear-es-de/system/metadata/adam.xml new file mode 100644 index 000000000..396c019cd --- /dev/null +++ b/themes/linear-es-de/system/metadata/adam.xml @@ -0,0 +1,17 @@ + + + Coleco Adam + The Coleco Adam is a home computer and expansion device for the ColecoVision by American toy and video game manufacturer Coleco. The Adam was an attempt to follow on the success of the company's ColecoVision video game console. It was available as Expansion Module #3 for the ColecoVision, converting it into a home computer, and as a standalone unit. As such, it had the benefit of being entirely compatible with all ColecoVision games and peripherals. The computer came with 64 KB of memory, a tape drive for a proprietary medium called Digital Data Packs, a daisy wheel printer, and productivity applications, along with two DDPs for SmartBASIC and Buck Rogers: Planet of Zoom Super Game. It was released in October 1983 with the initial price of $700. + Coleco + 1983 + 1983-10 + October 1983 + Computer + 1-1 + 5A93AF + 999999 + 777777 + 555555 + 333333 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/ags.xml b/themes/linear-es-de/system/metadata/ags.xml new file mode 100644 index 000000000..e3162e431 --- /dev/null +++ b/themes/linear-es-de/system/metadata/ags.xml @@ -0,0 +1,17 @@ + + + Adventure Game Studio + Adventure Game Studio (AGS) is an open source development tool primarily used to create graphic adventure games. It is aimed at intermediate-level game designers, and combines an integrated development environment (IDE) with a scripting language based on the C programming language to process game logic. + Chris Jones + 1997 + 1997 + 1997 + Engine + 1-1 + 4B73E0 + 9FCFFF + 63B6FF + 2C90FF + 9FCFFF + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/amiga.xml b/themes/linear-es-de/system/metadata/amiga.xml new file mode 100644 index 000000000..01e5c7565 --- /dev/null +++ b/themes/linear-es-de/system/metadata/amiga.xml @@ -0,0 +1,17 @@ + + + Amiga + The Amiga is a family of personal computers marketed by Commodore in the 1980s and 1990s. The first model was launched in 1985 as a high-end home computer and became popular for its graphical, audio and multi-tasking abilities. The Amiga provided a significant upgrade from 8-bit computers, such as the Commodore 64, and the platform quickly grew in popularity among computer enthusiasts. The best selling model, the Amiga 500, was introduced in 1987 and became the leading home computer of the late 1980s and early 1990s in much of Western Europe. + Commodore + 1985 + 1985-07-23 + July 23, 1985 + Computer + 3-4 + 3870c5 + 477AB1 + 82B030 + F3EB08 + E85629 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/amiga1200.xml b/themes/linear-es-de/system/metadata/amiga1200.xml new file mode 100644 index 000000000..463f91e3b --- /dev/null +++ b/themes/linear-es-de/system/metadata/amiga1200.xml @@ -0,0 +1,17 @@ + + + Amiga 1200 + The Amiga is a family of personal computers marketed by Commodore in the 1980s and 1990s. The first model was launched in 1985 as a high-end home computer and became popular for its graphical, audio and multi-tasking abilities. The Amiga provided a significant upgrade from 8-bit computers, such as the Commodore 64, and the platform quickly grew in popularity among computer enthusiasts. The best selling model, the Amiga 500, was introduced in 1987 and became the leading home computer of the late 1980s and early 1990s in much of Western Europe. + Commodore + 1985 + 1985-07-23 + July 23, 1985 + Computer + 3-4 + 2671C6 + 192753 + 5F87C0 + F3AD2D + ED2224 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/amiga600.xml b/themes/linear-es-de/system/metadata/amiga600.xml new file mode 100644 index 000000000..286272412 --- /dev/null +++ b/themes/linear-es-de/system/metadata/amiga600.xml @@ -0,0 +1,17 @@ + + + Amiga 600 + The Amiga is a family of personal computers marketed by Commodore in the 1980s and 1990s. The first model was launched in 1985 as a high-end home computer and became popular for its graphical, audio and multi-tasking abilities. The Amiga provided a significant upgrade from 8-bit computers, such as the Commodore 64, and the platform quickly grew in popularity among computer enthusiasts. The best selling model, the Amiga 500, was introduced in 1987 and became the leading home computer of the late 1980s and early 1990s in much of Western Europe. + Commodore + 1985 + 1985-07-23 + July 23, 1985 + Computer + 3-4 + C171A5 + 192753 + 5BA079 + F9EA38 + ED2224 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/amigacd32.xml b/themes/linear-es-de/system/metadata/amigacd32.xml new file mode 100644 index 000000000..73951ab09 --- /dev/null +++ b/themes/linear-es-de/system/metadata/amigacd32.xml @@ -0,0 +1,17 @@ + + + Amiga CD32 + The Amiga CD32, styled "CD32" and code-named "Spellbound", is the first 32-bit home video game console released in western Europe, Australia, Canada and Brazil. It was first announced at the Science Museum in London on July 16, 1993, and was released in September of the same year. The CD32 uses CD-ROM media, and was developed by Commodore, creator of the Commodore Amiga computer. It was based on Commodore's Advanced Graphics Architecture chipset, and is of similar specification to the Amiga 1200 computer. Using third party devices, it is possible to upgrade the CD32 with keyboard, floppy drive, hard drive, RAM and mouse, turning it into the equivalent of an Amiga 1200 personal computer. A hardware MPEG decompression module for playing Video CD was also released. In the Christmas period following its launch, the CD32 accounted for 38% of all CD-ROM drive sales in the UK, exceeding sales of the Mega-CD; however, it was soon overshadowed by CD-ROM based games consoles from other companies, and was discontinued as Commodore went into bankruptcy. + Commodore + 1993 + 1993-09-17 + September 17, 1993 + Console + 1-1 + DD4637 + FF5853 + 47DEBA + FFDF46 + 4A9BE4 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/amstradcpc.xml b/themes/linear-es-de/system/metadata/amstradcpc.xml new file mode 100644 index 000000000..684762920 --- /dev/null +++ b/themes/linear-es-de/system/metadata/amstradcpc.xml @@ -0,0 +1,17 @@ + + + Amstrad CPC + The Amstrad Colour Personal Computer, better known as the Amstrad CPC, is a series of 8-bit home computers designed by Amstrad. The first models were released in April 1984 in Europe at a retail price ranging from £199 to £299, depending on the package bought. The computers were not released outside of Europe. The CPC series had five distinct models: The CPC464, CPC664, CPC6128, 464plus, and 6128plus. The computers were manufactured until an unspecified time in 1990. + Amstrad + 1984 + 1984-01-01 + January 1, 1984 + Computer + 3-4 + 54819D + E91C23 + 00A651 + 1C75BC + 3E3E3E + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/android.xml b/themes/linear-es-de/system/metadata/android.xml new file mode 100644 index 000000000..009e47045 --- /dev/null +++ b/themes/linear-es-de/system/metadata/android.xml @@ -0,0 +1,17 @@ + + + Google Android + Android is a mobile operating system based on a modified version of the Linux kernel and other open-source software, designed primarily for touchscreen mobile devices such as smartphones and tablets. Android is developed by a consortium of developers known as the Open Handset Alliance, though its most widely used version is primarily developed by Google. It was unveiled in November 2007, with the first commercial Android device, the HTC Dream, being launched in September 2008. + Google + 2008 + 2008-09-23 + September 23, 2008 + OS + 1-1 + 5A9035 + 4086F4 + EB4132 + FBBD00 + 31AA52 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/apple2.xml b/themes/linear-es-de/system/metadata/apple2.xml new file mode 100644 index 000000000..d0e4dfc02 --- /dev/null +++ b/themes/linear-es-de/system/metadata/apple2.xml @@ -0,0 +1,17 @@ + + + Apple II + In 1976, computer pioneers Steve Wozniak and Steve Jobs began selling their Apple I computer in kit form to computer stores. A month later, Wozniak was working on a design for an improved version, the Apple II. They demonstrated a prototype in December, and then introduced it to the public in April 1977. The Apple II started the boom in personal computer sales in the late 1970s, and pushed Apple into the lead among personal computer makers. + Apple + 1977 + 1977-06-01 + June 1, 1977 + Computer + 3-4 + 26A9E1 + 009DDC + E03A3E + FDB827 + 61BB46 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/apple2gs.xml b/themes/linear-es-de/system/metadata/apple2gs.xml new file mode 100644 index 000000000..5e63c847d --- /dev/null +++ b/themes/linear-es-de/system/metadata/apple2gs.xml @@ -0,0 +1,17 @@ + + + Apple IIGS + The Apple IIGS is a personal computer released by Apple Computer on September 15, 1986 that's compatible with the Apple II series, but otherwise has capabilities comparable to the Atari ST, Commodore Amiga, and Macintosh. The "GS" in the name stands for "Graphics" and "Sound," referring to its enhanced multimedia hardware, especially its state of the art sound and music synthesis. The machine is a radical departure from any previous Apple II, with its 16-bit processor, direct access to megabytes of RAM, and mouse. It's the first computer produced by Apple to use a color graphical user interface (color was introduced on the Macintosh II six months later) and Apple Desktop Bus interface for keyboards, mice, and other input devices. It is the first personal computer to come with a built-in wavetable synthesis chip, utilizing technology from Ensoniq. + Apple + 1986 + 1986-09-15 + September 15, 1986 + Computer + 1-1 + 4F65D2 + D27C35 + C44243 + E3AD3A + 8C3E8C + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/arcade.xml b/themes/linear-es-de/system/metadata/arcade.xml new file mode 100644 index 000000000..401503f36 --- /dev/null +++ b/themes/linear-es-de/system/metadata/arcade.xml @@ -0,0 +1,17 @@ + + + Arcade + An arcade game or coin-op is a coin-operated entertainment machine typically installed in public businesses such as restaurants, bars and amusement arcades. Most arcade games are video games, pinball machines, electro-mechanical games, redemption games or merchandisers. While exact dates are debated, the golden age of arcade video games is usually defined as a period beginning sometime in the late 1970s and ending sometime in the mid-1980s. Excluding a brief resurgence in the early 1990s, the arcade industry subsequently declined in the Western hemisphere as competing home-based video game consoles such as Playstation and Xbox increased in their graphics and game-play capability and decreased in cost. + Various + Various + Various + Various + Collection + 3-4 + 5B60B7 + FA6E0D + FCCD0A + 032EC0 + 459FD0 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/arcadia.xml b/themes/linear-es-de/system/metadata/arcadia.xml new file mode 100644 index 000000000..a464f19f8 --- /dev/null +++ b/themes/linear-es-de/system/metadata/arcadia.xml @@ -0,0 +1,17 @@ + + + Arcadia 2001 + The Arcadia 2001 is a second-generation 8-bit home video game console released by Emerson Radio in May 1982 for a price of US$ 99, several months before the release of ColecoVision. It was discontinued only 18 months later, with a total of 35 games having been released. Emerson licensed the Arcadia 2001 to Bandai, which released it in Japan. Over 30 Arcadia 2001 clones exist. + Emerson Radio + 1982 + 1982-05 + May 1982 + Console + 1-1 + D59234 + 1E35A0 + 2FBB37 + C70A11 + 000000 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/archimedes.xml b/themes/linear-es-de/system/metadata/archimedes.xml new file mode 100644 index 000000000..d85cbf209 --- /dev/null +++ b/themes/linear-es-de/system/metadata/archimedes.xml @@ -0,0 +1,17 @@ + + + Acorn Archimedes + The Acorn Archimedes is a family of personal computers designed by Acorn Computers of Cambridge, England. The systems are based on Acorn's own ARM architecture processors and the proprietary operating systems Arthur and RISC OS. The first models were introduced in 1987, and systems in the Archimedes family were sold until the mid-1990s. + Acorn + 1987 + 1987-06 + June 1987 + Computer + 3-4 + 008CAC + 999999 + 777777 + 555555 + 333333 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/arduboy.xml b/themes/linear-es-de/system/metadata/arduboy.xml new file mode 100644 index 000000000..3177871bb --- /dev/null +++ b/themes/linear-es-de/system/metadata/arduboy.xml @@ -0,0 +1,17 @@ + + + Arduboy + The Arduboy is a handheld game console with open source software, based on the Arduino hardware platform. + Kevin Bates + 2015 + 2015 + 2015 + Portable + 1-1 + 5F459C + BA6FDB + 8B2DB4 + 8664E3 + 6442C1 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/astrocade.xml b/themes/linear-es-de/system/metadata/astrocade.xml new file mode 100644 index 000000000..4b763a2b7 --- /dev/null +++ b/themes/linear-es-de/system/metadata/astrocade.xml @@ -0,0 +1,20 @@ + + + Bally Astrocade + The Bally Astrocade (also known as Bally Arcade or initially as Bally ABA-1000) is a second-generation home video game console and simple computer system designed by a team at Midway, at that time the videogame division of Bally. +It was originally announced as the "Bally Home Library Computer" in October 1977 and initially made available for mail order in December 1977. But due to production delays, the units were first released to stores in April 1978 and its branding changed to "Bally Professional Arcade". + +It was marketed only for a limited time before Bally decided to exit the market. The rights were later picked up by a third-party company, who re-released it and sold it until around 1984. The Astrocade is particularly notable for its very powerful graphics capabilities for the time of release and for the difficulty in accessing those capabilities. + Bally + 1977 + 1977-12-01 + December 1, 1977 + Console + 1-1 + D59334 + F2B101 + FA0105 + F8F6EA + C47401 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/atari2600.xml b/themes/linear-es-de/system/metadata/atari2600.xml new file mode 100644 index 000000000..ba5cf3dde --- /dev/null +++ b/themes/linear-es-de/system/metadata/atari2600.xml @@ -0,0 +1,17 @@ + + + Atari 2600 + The Atari Video Computer System (VCS), later named the Atari 2600, is a second generation (1976–1992) home video game console developed and distributed by Atari, Inc. It was released on September 11, 1977 in North America at a retail price of $199. The console was later released in Europe (1978) and Japan (1983 - as the Atari 2800). The Atari 2600 popularized the use of microprocessor-based hardware and games contained on ROM cartridges. The console was discontinued on January 1, 1992. + Atari + 1977 + 1977-09-11 + September 11, 1977 + Console + 3-4 + b92e35 + 6D391F + D4282D + D1E0EE + 222222 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/atari5200.xml b/themes/linear-es-de/system/metadata/atari5200.xml new file mode 100644 index 000000000..cf98fdb9b --- /dev/null +++ b/themes/linear-es-de/system/metadata/atari5200.xml @@ -0,0 +1,17 @@ + + + Atari 5200 + The Atari 5200 SuperSystem, commonly known as the Atari 5200, is a second generation (1976–1992) video game console developed and distributed by Atari, Inc. It was released in November 1982 in North America at a retail price of $269. It was not released outside North America. The 5200's internal hardware was almost identical to Atari's 8-bit computers however it came with an innovative controller featuring a 360-degree non-centering joystick with a numeric keypad, start, pause, and reset buttons. The console was discontinued on May 21, 1984. + Atari + 1982 + 1982-11-01 + November 1, 1982 + Console + 3-4 + 3D5799 + 1E6547 + CFA634 + 973E3A + 1C6EB8 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/atari7800.xml b/themes/linear-es-de/system/metadata/atari7800.xml new file mode 100644 index 000000000..f8bdb8315 --- /dev/null +++ b/themes/linear-es-de/system/metadata/atari7800.xml @@ -0,0 +1,17 @@ + + + Atari 7800 + The Atari 7800 Pro System, commonly known as the Atari 7800, is a third generation (1983-2003) video game console developed and distributed by Atari Corporation. It was released in May 1986 in North America at a retail price of $79.95. The console was later released in Europe (1987). The 7800 is considered one of the first backward-compatible consoles as it could play Atari 2600 games without the use of additional modules. The console was discontinued on January 1, 1992. + Atari + 1986 + 1986-05-01 + May 1, 1986 + Console + 3-4 + 2D7AC6 + BABBBD + AA2C39 + A7B0B5 + 333333 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/atari800.xml b/themes/linear-es-de/system/metadata/atari800.xml new file mode 100644 index 000000000..c1d37c8a9 --- /dev/null +++ b/themes/linear-es-de/system/metadata/atari800.xml @@ -0,0 +1,19 @@ + + + Atari 800 + The Atari 8-bit family is a series of 8-bit home computers introduced by Atari, Inc. in 1979 as the Atari 400 and Atari 800 and manufactured until 1992. All of the machines in the family are technically similar and differ primarily in packaging. They are based on the MOS Technology 6502 CPU running at 1.79 MHz, and were the first home computers designed with custom coprocessor chips. This architecture enabled graphics and sound more advanced than contemporary machines, and gaming was a major draw. First-person space combat simulator Star Raiders is considered the platform's killer app. The systems launched with plug and play peripherals using the Atari SIO serial bus, an early analog of USB. + +The Atari 400 was initially almost half the cost of the Atari 800. Instead of the 800's full-sized keyboard, the 400 has a pressure-sensitive panel. The 800 has a second cartridge slot and a larger case allowing RAM upgrades to 48K. Both models were replaced by the XL series in 1983, then–after the company was sold and reestablished as Atari Corporation–the XE models in 1985. The XL and XE are lighter in construction while having Atari BASIC built-in and 2 joystick ports instead of 4. The 130XE increased the memory to 128 KB of bank-switched RAM. + Atari + 1979 + 1979-11-01 + November 1, 1979 + Computer + 3-4 + CC9141 + B6B896 + EBD335 + 5D3615 + BF9438 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/atarijaguar.xml b/themes/linear-es-de/system/metadata/atarijaguar.xml new file mode 100644 index 000000000..2ffb1221d --- /dev/null +++ b/themes/linear-es-de/system/metadata/atarijaguar.xml @@ -0,0 +1,17 @@ + + + Atari Jaguar + The Atari Jaguar is a fifth generation (1993–2005) video game console developed and distributed by Atari Corporation. It was released in November 1993 in North America at a retail price of $249.99. The console was later released in Europe (1994), Australia (1994), and Japan (1994). The Jaguar was marketed as being the first 64-bit video game console; however this claim was widely criticized. The console was discontinued in early 1996, possibly at the time of the company's sale on April 8, 1996. + Atari + 1993 + 1993-11-23 + November 23, 1993 + Console + 3-4 + CD3C3B + FF0000 + FDC007 + 232326 + 0F0E0E + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/atarijaguarcd.xml b/themes/linear-es-de/system/metadata/atarijaguarcd.xml new file mode 100644 index 000000000..064120dae --- /dev/null +++ b/themes/linear-es-de/system/metadata/atarijaguarcd.xml @@ -0,0 +1,17 @@ + + + Atari Jaguar CD + The Atari Jaguar CD is a fifth generation (1993–2005) CD-ROM peripheral for the Atari Jaguar video game console developed and distributed by Atari Corporation. It was released in September 1995 in North America at a retail price of $149.95. The peripheral was also released in Europe (1995). The Jaguar CD unit featured a double-speed (2×) drive and its own cartridge slot to allow cartridge games to be played without removing the CD drive. The peripheral was discontinued in early 1996, possibly at the time of the company's sale on April 8, 1996. + Atari + 1995 + 1995-11-21 + September 21, 1995 + Console + 3-4 + 2F7BC7 + FF0000 + 3F3E3E + FDC007 + 232326 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/atarilynx.xml b/themes/linear-es-de/system/metadata/atarilynx.xml new file mode 100644 index 000000000..799c75866 --- /dev/null +++ b/themes/linear-es-de/system/metadata/atarilynx.xml @@ -0,0 +1,17 @@ + + + Atari Lynx + The Atari Lynx, usually just referred to as Lynx, is a fourth generation (1987-2004) handheld video game console developed in partnership with Epyx, Inc. and distributed by the Atari Corporation. It was released in September 1989 in North America at a retail price of $149.95. The handheld was also released in Europe (1990) and Japan (1990). The Lynx was the world's first handheld electronic game with a color LCD screen. The console was discontinued in early 1996, possibly at the time of the company's sale on April 8, 1996. + Atari + 1989 + 1989-09-01 + September 1, 1989 + Portable + 3-4 + E19735 + FD6420 + 404040 + F38900 + 262626 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/atarist.xml b/themes/linear-es-de/system/metadata/atarist.xml new file mode 100644 index 000000000..89c4abaae --- /dev/null +++ b/themes/linear-es-de/system/metadata/atarist.xml @@ -0,0 +1,21 @@ + + + Atari ST + The Atari ST is a line of home computers from Atari Corporation and the successor to the Atari 8-bit family. The initial model, the 520ST, saw limited release in April–June 1985 and was widely available in July. The 520ST is the first personal computer to come with a bitmapped color GUI, using a version of Digital Research's GEM released in February 1985. The 1040ST, released in 1986, is the first personal computer to ship with a megabyte of RAM in the base configuration and also the first with a cost-per-kilobyte of less than US$1. + +The Atari ST is part of a mid-1980s generation of home computers that have 16 or 32-bit processors, 256 KB or more of RAM, and mouse-controlled graphical user interfaces. This generation includes the Macintosh, Amiga, Apple IIGS, and in some markets the Acorn Archimedes. "ST" officially stands for "Sixteen/Thirty-two", which refers to the Motorola 68000's 16-bit external bus and 32-bit internals. + +The ST was sold with either Atari's color monitor or the less expensive monochrome monitor. The system's color graphics modes are only available on the former while the highest-resolution mode needs the monochrome monitor. + Atari + 1985 + 1985-06-01 + June 1, 1985 + Computer + 3-4 + 0088D1 + 172E7E + 3C62A7 + 000000 + ECECEC + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/atarixe.xml b/themes/linear-es-de/system/metadata/atarixe.xml new file mode 100644 index 000000000..d1cf3eb54 --- /dev/null +++ b/themes/linear-es-de/system/metadata/atarixe.xml @@ -0,0 +1,17 @@ + + + Atari XE + The Atari XE Video Game System (Atari XEGS) is an industrial redesign of the Atari 65XE home computer and the final model in the Atari 8-bit family. It was released by Atari Corporation in 1987 and marketed as a home video game console alongside the Nintendo Entertainment System, Sega's Master System, and Atari's own Atari 7800. The XEGS is compatible with existing Atari 8-bit family hardware and software. Without keyboard, the system operates as a stand-alone game console. With the keyboard, it boots identically to the Atari XE computers. Atari packaged the XEGS as a basic set consisting of only the console and joystick, and as a deluxe set consisting of the console, keyboard, CX40 joystick, and XG-1 light gun. + Atari + 1987 + 1987 + 1987 + Console + 1-1 + 2F7BC7 + E1D095 + ADC7EF + 8F8F91 + B9A9CE + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/atomiswave.xml b/themes/linear-es-de/system/metadata/atomiswave.xml new file mode 100644 index 000000000..19988c263 --- /dev/null +++ b/themes/linear-es-de/system/metadata/atomiswave.xml @@ -0,0 +1,17 @@ + + + Atomiswave + The Atomiswave is a custom arcade system board and cabinet from Sammy Corporation. It is based on Sega's NAOMI system board (thus it's common to see the "Sega" logo on its boot up screen). The Atomiswave uses interchangeable game cartridges and the cabinet's control panel can be easily switched out with different control sets, including dual joysticks, dual lightguns and a steering wheel. With the retirement of the aging Neo Geo MVS system, SNK Playmore chose the Atomiswave as its next system to develop games for. In a contract with Sammy, SNK Playmore agreed to develop five games for the Atomiswave system. Metal Slug 6 was SNK Playmore's fifth game for the Atomiswave, after which SNK moved on to a Taito Type X2 arcade board. + Sammy + 2003 + 2003-01-01 + January 1, 2003 + Arcade + 3-4 + 37BD6E + C11127 + FF6B00 + 04EF94 + 029205 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/auto-allgames.xml b/themes/linear-es-de/system/metadata/auto-allgames.xml new file mode 100644 index 000000000..4dd9911aa --- /dev/null +++ b/themes/linear-es-de/system/metadata/auto-allgames.xml @@ -0,0 +1,12 @@ + + + All Games + View and play every game across your entire library. + Various + Various + Various + Various + Collection + 1-1 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/auto-favorites.xml b/themes/linear-es-de/system/metadata/auto-favorites.xml new file mode 100644 index 000000000..9c130b77d --- /dev/null +++ b/themes/linear-es-de/system/metadata/auto-favorites.xml @@ -0,0 +1,12 @@ + + + Favorites + View and play your favorite games across the entire library. + Various + Various + Various + Various + Collection + 1-1 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/auto-lastplayed.xml b/themes/linear-es-de/system/metadata/auto-lastplayed.xml new file mode 100644 index 000000000..fe49f6a50 --- /dev/null +++ b/themes/linear-es-de/system/metadata/auto-lastplayed.xml @@ -0,0 +1,12 @@ + + + Last Played + View your recently played games across the entire library. + Various + Various + Various + Various + Collection + 1-1 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/bbcmicro.xml b/themes/linear-es-de/system/metadata/bbcmicro.xml new file mode 100644 index 000000000..2b25cca49 --- /dev/null +++ b/themes/linear-es-de/system/metadata/bbcmicro.xml @@ -0,0 +1,17 @@ + + + BBC Micro + The British Broadcasting Corporation Microcomputer System, BBC Microcomputer System, or best known as the BBC Micro is a series of microcomputers designed by Acorn Computers Ltd. and distributed by the BBC. The first models were released in December 1981 in Europe for £235 or £335, depending on the model. The computers were also released in North America (1983). The computers were designed with an emphasis on education, and being more rugged then other brands. The computers were manufactured until an unspecified time in 1994. + Acorn Computers + 1981 + 1981-12-01 + December 1, 1981 + Computer + 3-4 + 5B6559 + 1F0200 + F9F8E1 + AE492D + 635B4F + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/c64.xml b/themes/linear-es-de/system/metadata/c64.xml new file mode 100644 index 000000000..24eebe193 --- /dev/null +++ b/themes/linear-es-de/system/metadata/c64.xml @@ -0,0 +1,17 @@ + + + Commodore 64 + The Commodore 64 is an 8-bit home computer introduced in January 1982 by Commodore International. It is listed in the Guinness World Records as the highest-selling single computer model of all time, with independent estimates placing the number sold between 10 and 17 million units. Volume production started in early 1982, marketing in August for US$595 (equivalent to $1,461 in 2015). Preceded by the Commodore VIC-20 and Commodore PET, the C64 took its name from its 64 kilobytes (65,536 bytes) of RAM. It had superior sound and graphical specifications compared to other earlier systems such as the Apple II and Atari 800, with multi-color sprites and a more advanced sound processor. + Commodore + 1982 + 1982-01-01 + January 1, 1982 + Computer + 3-4 + 0F5BAD + BBAD93 + 968971 + FD4120 + 00A0C6 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/cavestory.xml b/themes/linear-es-de/system/metadata/cavestory.xml new file mode 100644 index 000000000..64575a234 --- /dev/null +++ b/themes/linear-es-de/system/metadata/cavestory.xml @@ -0,0 +1,15 @@ + + + Cave Story, originally released as Dōkutsu Monogatari, is a 2004 Metroidvania platform-adventure game for Microsoft Windows. It was developed over five years by Japanese independent developer Daisuke "Pixel" Amaya in his free time. Cave Story features 2D platform mechanics and is reminiscent of the games Amaya played in his youth, such as Metroid and Castlevania. After its initial self-published release, the game slowly gained popularity on the internet. It received widespread critical acclaim for many polished aspects of its design, such as its compelling characters, setting, story, and gameplay. Cave Story is considered by many as the quintessential indie game because of its one-person development team and influence on the video gaming world. NXENGINE is a complete open-source clone/rewrite of the masterpiece jump-and-run platformer Doukutsu Monogatari (also known as Cave Story) + Studio Pixel + 2004 + 2004-12-20 + December 20, 2004 + Engine + CE413E + 648DBD + B63523 + 6F1312 + 182142 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/cdimono1.xml b/themes/linear-es-de/system/metadata/cdimono1.xml new file mode 100644 index 000000000..0188e459a --- /dev/null +++ b/themes/linear-es-de/system/metadata/cdimono1.xml @@ -0,0 +1,17 @@ + + + Philips CD-i + The Philips CD-i (Compact Disc Interactive) is an interactive multimedia CD player developed and marketed by Royal Philips Electronics N.V. This category of device was created to provide more functionality than an audio CD player or game console, but at a lower price than a personal computer with CD-ROM drive at the time. The cost savings were due to the lack of a hard drive, floppy drive, keyboard, mouse, monitor (a standard television was used), and less operating system software. In addition to games, educational and multimedia reference titles were produced, such as interactive encyclopedias, museum tours, etc. before public Internet access was widespread. Competitors included the Tandy VIS and Commodore CDTV. Seen as a game console, the CD-i format proved to be a commercial failure. The company lost nearly one billion dollars on the entire project. The failure of the CD-i caused Philips to leave the video game industry after it was discontinued. The CD-i is also one of the earliest consoles to implement internet features, including subscriptions, web browsing, downloading, e-mail, and online play. This was facilitated by the use of an additional hardware modem that Philips released in 1996. + Philips + 1991 + 1991-12-03 + December 3, 1991 + Console + 1-1 + BE70A4 + 000000 + E70000 + FFFFFF + 0B5ED8 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/cdtv.xml b/themes/linear-es-de/system/metadata/cdtv.xml new file mode 100644 index 000000000..4a1530504 --- /dev/null +++ b/themes/linear-es-de/system/metadata/cdtv.xml @@ -0,0 +1,17 @@ + + + CDTV + The CDTV (an acronym for "Commodore Dynamic Total Vision", a backronym of an acronym for "Compact Disc Television", giving it a double meaning) is a multimedia platform developed by Commodore International and launched in March 1991. The CDTV was intended as a media appliance rather than a personal computer. + Commodore + 1991 + 1991-03-01 + March 1, 1991 + Console + 1-1 + 775EBA + C86388 + 6F62E8 + 1CA6F1 + F62717 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/chailove.xml b/themes/linear-es-de/system/metadata/chailove.xml new file mode 100644 index 000000000..e742890b6 --- /dev/null +++ b/themes/linear-es-de/system/metadata/chailove.xml @@ -0,0 +1,17 @@ + + + ChaiLove Framework + ChaiLove is an awesome framework you can use to make 2D games in ChaiScript. It's free, open-source, and works on Windows, Mac OS X, Linux, Android, and ARM through libretro/RetroArch. + ChaiLove Team + 2017 + 2017-11-30 + November 30, 2017 + Engine + 1-1 + 26AAE0 + 0080E8 + AEE7FF + EA316E + 25AAE1 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/channelf.xml b/themes/linear-es-de/system/metadata/channelf.xml new file mode 100644 index 000000000..5263f93c0 --- /dev/null +++ b/themes/linear-es-de/system/metadata/channelf.xml @@ -0,0 +1,17 @@ + + + Fairchild Channel F + The Fairchild Channel F is a home video game console released by Fairchild Semiconductor in November 1976.
It has the distinction of being the first programmable ROM cartridge–based video game console, and the first console to use a microprocessor. It was launched as the Video Entertainment System, or VES, but when Atari released their VCS the next year, Fairchild renamed it's machine.
+ Fairchild Semiconductor + 1976 + 1976-11-01 + November 1, 1976 + Console + 3-4 + CC991A + E0E0E0 + 91FFA6 + CED0FF + 4B3FF3 +
+
\ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/coco.xml b/themes/linear-es-de/system/metadata/coco.xml new file mode 100644 index 000000000..1a9fb6484 --- /dev/null +++ b/themes/linear-es-de/system/metadata/coco.xml @@ -0,0 +1,17 @@ + + + Tandy Color Computer + The RadioShack TRS-80 Color Computer, later marketed as the Tandy Color Computer and sometimes nicknamed the CoCo, is a line of home computers developed and sold by Tandy Corporation. Despite sharing a name with the earlier TRS-80, the Color Computer is a completely different, incompatible system and a radical departure in design and compatibility with its Motorola 6809E processor rather than the Zilog Z80 earlier models were built around. + Tandy Corporation + 1980 + 1980-09 + September 1980 + Computer + 1-1 + D1AA41 + 498CC1 + 197123 + 555555 + AE1F19 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/colecovision.xml b/themes/linear-es-de/system/metadata/colecovision.xml new file mode 100644 index 000000000..e61ca735e --- /dev/null +++ b/themes/linear-es-de/system/metadata/colecovision.xml @@ -0,0 +1,17 @@ + + + ColecoVision + The ColecoVision is a second generation (1976–1992) home video game console developed and distributed by Coleco Industries. It was released in August 1982 in North America at a retail price of $175. The console was later released in Europe (1983). The ColecoVision offered a closer experience to arcade games than its competitors at the time. The console was discontinued in mid-1985. + Coleco + 1982 + 1982-08-01 + August 1, 1982 + Console + 3-4 + DD5B3E + EF8185 + F3994B + FADD2F + A4DDF0 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/completed.xml b/themes/linear-es-de/system/metadata/completed.xml new file mode 100644 index 000000000..ed11de3b4 --- /dev/null +++ b/themes/linear-es-de/system/metadata/completed.xml @@ -0,0 +1,13 @@ + + + Completed + Organize your completed games. + Various + Various + Various + Various + Collection + 222222 + 1-1 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/consolearcade.xml b/themes/linear-es-de/system/metadata/consolearcade.xml new file mode 100644 index 000000000..1ac7d7a0a --- /dev/null +++ b/themes/linear-es-de/system/metadata/consolearcade.xml @@ -0,0 +1,17 @@ + + + Console Arcade Games + While arcade boards have traditionally been custom designs, there have been a number of systems that were instead based on home console platforms. The first such board was the Nintendo VS. System, based on the Famicom and released in 1984. The last console-based board was Namco System 369 which was released in 2011 and based on the Sony PlayStation 3. + Various + Various + Various + Various + Folder + 1-1 + 5B60B7 + F6DD08 + 800000 + FF0000 + 303030 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/cps.xml b/themes/linear-es-de/system/metadata/cps.xml new file mode 100644 index 000000000..0f2a6c534 --- /dev/null +++ b/themes/linear-es-de/system/metadata/cps.xml @@ -0,0 +1,19 @@ + + + Capcom Play System + The CP System (CPシステム, shīpī shisutemu, CPS for short) is an arcade system board developed by Capcom that ran game software stored on removable daughterboards. More than two dozen arcade titles were released for CPS-1, before Capcom shifted game development over to its successor, the CP System II. + +Among the 33 titles released for the original CP System included Street Fighter II: The World Warrior and its first two follow-ups, Street Fighter II: Champion Edition and Street Fighter II: Hyper Fighting. + Capcom + 1988 + 1988-05-13 + May 13, 1988 + Arcade + 3-4 + ECD04C + FFCB04 + 034EA2 + FAFAFA + 111111 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/cps1.xml b/themes/linear-es-de/system/metadata/cps1.xml new file mode 100644 index 000000000..542607cd1 --- /dev/null +++ b/themes/linear-es-de/system/metadata/cps1.xml @@ -0,0 +1,19 @@ + + + CPS-I + The CP System (CPシステム, shīpī shisutemu, CPS for short) is an arcade system board developed by Capcom that ran game software stored on removable daughterboards. More than two dozen arcade titles were released for CPS-1, before Capcom shifted game development over to its successor, the CP System II. + +Among the 33 titles released for the original CP System included Street Fighter II: The World Warrior and its first two follow-ups, Street Fighter II: Champion Edition and Street Fighter II: Hyper Fighting. + Capcom + 1988 + 1988-05-13 + May 13, 1988 + Arcade + 3-4 + ECD04C + FAFAFA + FFCB04 + 034EA2 + 111111 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/cps2.xml b/themes/linear-es-de/system/metadata/cps2.xml new file mode 100644 index 000000000..83361ad5b --- /dev/null +++ b/themes/linear-es-de/system/metadata/cps2.xml @@ -0,0 +1,17 @@ + + + CPS-II + The CP System II (CPシステムII, shīpī shisutemu tsū) or CPS-2 is an arcade system board that Capcom first used in 1993 for Super Street Fighter II. It was the successor to their previous CP System and Capcom Power System Changer arcade hardware and was succeeded by the CP System III hardware in 1996, of which the CPS-2 would outlive by over four years. The arcade system had new releases for it until the end of 2003, ending with Hyper Street Fighter II. + Capcom + 1993 + 1993-09-10 + September 10, 1993 + Arcade + 3-4 + ECD04C + 034EA2 + FAFAFA + FFCB04 + 111111 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/cps3.xml b/themes/linear-es-de/system/metadata/cps3.xml new file mode 100644 index 000000000..0834a39ef --- /dev/null +++ b/themes/linear-es-de/system/metadata/cps3.xml @@ -0,0 +1,17 @@ + + + CPS-III + The CP System III (CPシステムIII, shīpī shisutemu surī) or CPS-3 is an arcade system board that was first used by Capcom in 1996 with the arcade game Red Earth. It was the second successor to the CP System arcade hardware, following the CP System II. It would be the last proprietary system board Capcom would produce before moving on to the Dreamcast-based Naomi platform. + Capcom + 1996 + 1996-11-21 + November 11, 1996 + Arcade + 3-4 + ECD04C + FAFAFA + 034EA2 + 111111 + FFCB04 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/crvision.xml b/themes/linear-es-de/system/metadata/crvision.xml new file mode 100644 index 000000000..878a5a0a5 --- /dev/null +++ b/themes/linear-es-de/system/metadata/crvision.xml @@ -0,0 +1,17 @@ + + + CreatiVision + The Video Technology CreatiVision is a hybrid computer and home video game console introduced by VTech in 1981 and released in 1982 during the Second generation of video game consoles. It was built by the Finnish company Salora. It cost $295 Australian Dollars. The hybrid unit was similar in concept to computers such as the APF Imagination Machine, the older VideoBrain Family Computer, and to a lesser extent the Intellivision game console and Coleco Adam computer, all of which anticipated the trend of video game consoles becoming more like low-end computers. It was discontinue in 1986. + VTech + 1982 + 1982 + 1982 + Console + 3-4 + D59234 + CCA656 + 9F7C64 + E0CC75 + F09734 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/custom-collections.xml b/themes/linear-es-de/system/metadata/custom-collections.xml new file mode 100644 index 000000000..53d3670c2 --- /dev/null +++ b/themes/linear-es-de/system/metadata/custom-collections.xml @@ -0,0 +1,12 @@ + + + Custom Collections + View and play games you have added to your custom collections. + Various + Various + Various + Various + Collection + 1-1 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/daphne.xml b/themes/linear-es-de/system/metadata/daphne.xml new file mode 100644 index 000000000..072018df8 --- /dev/null +++ b/themes/linear-es-de/system/metadata/daphne.xml @@ -0,0 +1,17 @@ + + + Daphne + Daphne is an arcade emulator application that emulates a variety of laserdisc video games with the intent of preserving these games and making the play experience as faithful to the originals as possible. The developer calls Daphne the "First Ever Multiple Arcade Laserdisc Emulator" ("FEMALE"). It derives its name from Princess Daphne, the heroine of Dragon's Lair. + Matt Ownby + 2007 + 2007-02-06 + February, 6th 2007 + Emulator + 3-4 + F6C126 + DEBA27 + 856125 + DC110B + D8D3BD + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/desktop.xml b/themes/linear-es-de/system/metadata/desktop.xml new file mode 100644 index 000000000..6020d9f02 --- /dev/null +++ b/themes/linear-es-de/system/metadata/desktop.xml @@ -0,0 +1,17 @@ + + + Desktop Shorcuts + View and run your Desktop shortcuts + Various + Various + Various + Various + Folder + 1-1 + 39B1DE + 5475B7 + 503E7A + A05745 + 5C5599 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/doom.xml b/themes/linear-es-de/system/metadata/doom.xml new file mode 100644 index 000000000..16109c04c --- /dev/null +++ b/themes/linear-es-de/system/metadata/doom.xml @@ -0,0 +1,17 @@ + + + Doom + Doom is a 1993 first-person shooter (FPS) game developed by id Software for MS-DOS. Players assume the role of a space marine, popularly known as Doomguy, fighting their way through hordes of invading demons from hell. Id began developing Doom after the release of their previous FPS, Wolfenstein 3D (1992). + id Software + 1993 + 1993-12-10 + December 10, 1993 + Engine + 1-1 + A11321 + 33709F + DFDED1 + D37112 + A63417 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/dos.xml b/themes/linear-es-de/system/metadata/dos.xml new file mode 100644 index 000000000..8f8ae4739 --- /dev/null +++ b/themes/linear-es-de/system/metadata/dos.xml @@ -0,0 +1,17 @@ + + + MS-DOS + MS-DOS, short for Microsoft Disk Operating System, was an operating system for x86-based personal computers mostly developed by Microsoft. It was the most commonly used member of the DOS family of operating systems, and was the main operating system for IBM PC compatible personal computers during the 1980s to the mid-1990s, when it was gradually superseded by operating systems offering a graphical user interface (GUI), in various generations of the Microsoft Windows operating system. + Microsoft + 1981 + 1981-08-01 + August 1, 1981 + OS + 3-4 + 3161BC + FDC20F + 8461A9 + CA1A15 + 111111 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/dragon32.xml b/themes/linear-es-de/system/metadata/dragon32.xml new file mode 100644 index 000000000..ab2473d22 --- /dev/null +++ b/themes/linear-es-de/system/metadata/dragon32.xml @@ -0,0 +1,19 @@ + + + Dragon 32 + The Dragon 32 and Dragon 64 are home computers that were built in the 1980s. The Dragons are very similar to the TRS-80 Color Computer, and were produced for the European market by Dragon Data, Ltd., initially in Swansea, Wales before moving to Port Talbot, Wales (until 1984) and by Eurohard S.A. in Casar de Cáceres, Spain (from 1984 to 1987), and for the US market by Tano of New Orleans, Louisiana. + +The model numbers reflect the primary difference between the two machines, which have 32 and 64 kilobytes (32,768 and 65,536 bytes) of RAM, respectively. + Dragon Data, Ltd. + 1982 + 1982-08 + August 1982 + Computer + 3-4 + 309496 + F50019 + FBFA35 + 74B719 + 3262D9 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/dreamcast.xml b/themes/linear-es-de/system/metadata/dreamcast.xml new file mode 100644 index 000000000..bf04bc04e --- /dev/null +++ b/themes/linear-es-de/system/metadata/dreamcast.xml @@ -0,0 +1,19 @@ + + + Dreamcast + The Dreamcast is a home video game console released by Sega on November 27, 1998 in Japan, September 9, 1999 in North America, and October 14, 1999 in Europe. It was the first in the sixth generation of video game consoles, preceding Sony's PlayStation 2, Nintendo's GameCube, and Microsoft's Xbox. The Dreamcast was Sega's final home console, marking the end of the company's eighteen years in the console market. + +In contrast to the expensive hardware of the unsuccessful Sega Saturn, the Dreamcast was designed to reduce costs with "off-the-shelf" components, including a Hitachi SH-4 CPU and an NEC PowerVR2 GPU. Released in Japan to a subdued reception, the Dreamcast enjoyed a successful U.S. launch backed by a large marketing campaign, but interest in the system steadily declined as Sony built hype for the upcoming PlayStation 2. Sales did not meet Sega's expectations despite several price cuts, and the company continued to incur significant financial losses. After a change in leadership, Sega discontinued the Dreamcast on March 31, 2001, withdrawing from the console business and restructuring itself as a third-party publisher. In total, 9.13 million Dreamcast units were sold worldwide. + Sega + 1998 + 1998-11-27 + November 27, 1998 + Console + 1-1 + 4C7ED6 + C1C3C2 + 3E649F + 030303 + E4E5E4 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/easyrpg.xml b/themes/linear-es-de/system/metadata/easyrpg.xml new file mode 100644 index 000000000..0d8e2be28 --- /dev/null +++ b/themes/linear-es-de/system/metadata/easyrpg.xml @@ -0,0 +1,17 @@ + + + EasyRPG + EasyRPG is a free, open source engine to create RPG games, aiming to be also compatible with all RPG Maker 2000 and RPG Maker 2003 games. RPG Maker 2000/2003 games tend to have mechanics and visuals similar to 16-bit JRPGs, though custom scripts can be made by the creators to modify how the game feels and looks. + EasyRPG Team + 2007 + 2007 + 2007 + Engine + 1-1 + 5B9036 + 88BA68 + 555554 + 838382 + 4B6D35 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/electron.xml b/themes/linear-es-de/system/metadata/electron.xml new file mode 100644 index 000000000..111af5ba1 --- /dev/null +++ b/themes/linear-es-de/system/metadata/electron.xml @@ -0,0 +1,16 @@ + + + Acorn Electron + The Acorn Electron (nicknamed the Elk inside Acorn and beyond) was a lower-cost alternative to the BBC Micro educational/home computer, also developed by Acorn Computers Ltd, to provide many of the features of that more expensive machine at a price more competitive with that of the ZX Spectrum. It had 32 kilobytes of RAM, and its ROM included BBC BASIC II together with the operating system. Announced in 1982 for a possible release the same year, it was eventually introduced on 25 August 1983 priced at £199 + Acorn + 1983 + 1983-10-25 + August 25, 1983 + Computer + 3F9B5B + 999999 + 777777 + 555555 + 333333 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/emulators.xml b/themes/linear-es-de/system/metadata/emulators.xml new file mode 100644 index 000000000..8079e7508 --- /dev/null +++ b/themes/linear-es-de/system/metadata/emulators.xml @@ -0,0 +1,17 @@ + + + Emulators + Modify your Emulator settings and configurations + Various + Various + Various + Various + Folder + 1-1 + 39B1DE + F6DD08 + 800000 + FF0000 + 303030 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/epic.xml b/themes/linear-es-de/system/metadata/epic.xml new file mode 100644 index 000000000..8b1f03f91 --- /dev/null +++ b/themes/linear-es-de/system/metadata/epic.xml @@ -0,0 +1,17 @@ + + + Epic Games Store + The Epic Games Store is a digital video game storefront for Microsoft Windows and macOS, operated by Epic Games. It launched in December 2018 as both a website and a standalone launcher, of which the latter is required to download and play games. The storefront provides a basic catalog, friends list management, matchmaking, and other features. Epic Games has further plans to expand the feature set of the storefront but it does not plan to add as many features as other digital distribution platforms, such as discussion boards or user reviews, instead using existing social media platforms to support these. + Epic + 2018 + 2018-12 + December 2018 + Folder + 3-4 + 8BA7AE + FFFFFF + 777777 + 343434 + 35C4EE + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/famicom.xml b/themes/linear-es-de/system/metadata/famicom.xml new file mode 100644 index 000000000..4d5790d9c --- /dev/null +++ b/themes/linear-es-de/system/metadata/famicom.xml @@ -0,0 +1,24 @@ + + + Famicom + The Family Computer (ファミリーコンピュータ) or Famicom (ファミコン) hit the Japanese gaming market in 1983. The brainchild of Masayuki Uemura, Famicom was Nintendo’s first cartridge-based home video game console. It became an instant hit, with game titles like legendary designer Shigeru Miyamoto’s arcade classic Donkey Kong fueling sales. + +The Famicom began life as the “GameCom” before system designer Masayuki Uemura’s wife suggested the moniker we know and love today. During development several ideas were bandied about, including the concept of creating a powerful home computer complete with a keyboard and disk drive, but ultimately the console became the diminutive red-and-white wonder that has become so iconic over the years; the colour scheme was apparently chosen by Nintendo president Hiroshi Yamauchi after he spotted a billboard advertisement which used the same hues. + +The Famicom was designed to be both cheap and impressive. Nintendo aimed to be thrifty where possible but did not want to sacrifice performance. The aim was for their console to be unsurpassed in terms of quality and cost-effectiveness by their competitors for at least a year, if not longer. The console was purposefully designed to look like a toy – with a design scheme similar to the Game and Watch series of portable games they had released a couple of years prior to the Famicom. + +The only direct competition to the Famicom was Sega’s SG-1000, which the Famicom was easily outselling. Within two years the Famicom had already sold 2.5 million units in Japan. This success emboldened Nintendo, who started to look towards international markets. Overall Nintendo sold more than 10 million units in Japan. + https://www.museumofplay.org/blog/first-there-was-famicom/, https://retrogaming.tech.blog/2016/12/03/a-history-of-the-nintendo-famicom/, https://www.nintendolife.com/news/2013/07/feature_the_history_of_the_famicom_the_console_that_changed_nintendos_fortunes + Nintendo + 1983 + 1983-07-15 + July 15, 1983 + Console + 4-3 + B93041 + EA2C27 + E6E7E8 + C0A987 + AA1A41 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/fba.xml b/themes/linear-es-de/system/metadata/fba.xml new file mode 100644 index 000000000..0671b4574 --- /dev/null +++ b/themes/linear-es-de/system/metadata/fba.xml @@ -0,0 +1,21 @@ + + + FinalBurn Alpha + This source-available project is based on FinalBurn, created by Dave in 2000. It has been programmed by a team composed of Barry Harris (Old username: TrebleWinner), Jan_Klaassen, KEV, LoopMaster, Mike Haggar, Hyper Yagami and Ayeye. + +FinalBurn was one of the first Capcom CPS2 emulators. When this project came to a halt in 2001, its sources were widely disseminated, allowing the development of many unofficial versions, of which FBA is the most successful. + +Differentiated from other emulators by a very large number of supported systems, FB Alpha also offers a clear interface (simple like that of Kawaks) and excellent performance. The icing on the cake; it's not resource-intensive, and you don't need to indulge in complex settings to take it in hand immediately, although its menus are natively in English. + FBA Team + 2000 + 2000 + 2000 + Emulator + 3-4 + 5B60B7 + CF8A61 + FE7B07 + 231F20 + FFFFFF + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/fbneo.xml b/themes/linear-es-de/system/metadata/fbneo.xml new file mode 100644 index 000000000..0f3381385 --- /dev/null +++ b/themes/linear-es-de/system/metadata/fbneo.xml @@ -0,0 +1,21 @@ + + + FinalBurn Neo + FinalBurn Neo is a Multiple Arcade Emulator most popular for emulating Neo-Geo, Capcom, Konami, and Cave games. It is developed by the FinalBurn team and originated from FinalBurn by Dave and old MAME versions. + +FinalBurn Neo is an active fork of the FinalBurn Alpha emulator, created by many of the former FBA developers. + +The reason for the separation of the older branch, FB Alpha, and new spin-off branch, FB Neo, was due to an apparent disagreement between one Barry Harris and the rest of the main FBA team members over a licensing issue. + FBA Team + 2002 + 2002 + 2002 + Emulator + 3-4 + 5B60B7 + C0392B + CF8A61 + 231F20 + FFFFFF + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/fds.xml b/themes/linear-es-de/system/metadata/fds.xml new file mode 100644 index 000000000..a9021e061 --- /dev/null +++ b/themes/linear-es-de/system/metadata/fds.xml @@ -0,0 +1,20 @@ + + + Famicom Disk System + The Family Computer Disk System, commonly shortened to the Famicom Disk System or just Disk System, is a peripheral for Nintendo's Family Computer home video game console, released only in Japan on February 21, 1986. It uses proprietary floppy disks called "Disk Cards" for cheaper data storage and it adds a new high-fidelity sound channel for supporting Disk System games. + +Fundamentally, the Disk System serves simply to enhance some aspects already inherent to the base Famicom system, with better sound and cheaper games—though with the disadvantages of high initial price, slow speed, and lower reliability. However, this boost to the market of affordable and writable mass storage temporarily served as an enabling technology for the creation of new types of video games. This includes the vast, open world, progress-saving adventures of the best-selling The Legend of Zelda (1986) and Metroid (1986), games with a cost-effective and swift release such as the best-selling Super Mario Bros. 2, and nationwide leaderboards and contests via the in-store Disk Fax kiosks, which are considered to be forerunners of today's online achievement and distribution systems. + https://en.wikipedia.org/wiki/Famicom_Disk_System + Nintendo + 1986 + 1986-11 + February 21, 1986 + Peripheral + 1-1 + B93041 + A71636 + C7AF89 + 3C3C3B + F4B600 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/flash.xml b/themes/linear-es-de/system/metadata/flash.xml new file mode 100644 index 000000000..fb816c953 --- /dev/null +++ b/themes/linear-es-de/system/metadata/flash.xml @@ -0,0 +1,17 @@ + + + Adobe Flash + Adobe Flash (formerly Macromedia Flash and FutureSplash) was a multimedia software platform used for production of animations, rich web applications, desktop applications, mobile apps, mobile games, and embedded web browser video players. Flash displays text, vector graphics, and raster graphics to provide animations, video games, and applications. It allows streaming of audio and video, and can capture mouse, keyboard, microphone, and camera input. + Macromedia + 1996 + 1996-11 + November 1996 + Engine + 1-1 + B92E34 + FFFFFF + 4A0000 + B11313 + 710000 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/fm7.xml b/themes/linear-es-de/system/metadata/fm7.xml new file mode 100644 index 000000000..6d912997b --- /dev/null +++ b/themes/linear-es-de/system/metadata/fm7.xml @@ -0,0 +1,17 @@ + + + FM-7 + The FM-7 ("Fujitsu Micro 7") is a home computer created by Fujitsu. It was first released in 1982 and was sold in Japan and Spain. It is a stripped-down version of Fujitsu's earlier FM-8 computer, and during development it was referred to as the "FM-8 Jr.". + Fujitsu + 1982 + 1982-11 + November 1982 + Computer + 3-4 + E8B229 + 999999 + 777777 + 555555 + 333333 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/fmtowns.xml b/themes/linear-es-de/system/metadata/fmtowns.xml new file mode 100644 index 000000000..548de677a --- /dev/null +++ b/themes/linear-es-de/system/metadata/fmtowns.xml @@ -0,0 +1,19 @@ + + + FM Towns + The FM Towns (Japanese: エフエムタウンズ, Hepburn: Efu Emu Taunzu) is a Japanese personal computer built by Fujitsu from February 1989 to the summer of 1997. It started as a proprietary PC variant intended for multimedia applications and PC games, but later became more compatible with IBM PC compatibles. In 1993, the FM Towns Marty was released, a game console compatible with existing FM Towns games. + +The "FM" part of the name means "Fujitsu Micro" like their earlier products, while the "Towns" part is derived from the code name the system was assigned while in development, "Townes". This refers to Charles Townes, one of the winners of the 1964 Nobel Prize in Physics, following a custom of Fujitsu at the time to code name PC products after Nobel Prize winners. The e in "Townes" was dropped when the system went into production to make it clearer that the term was to be pronounced like the word "towns" rather than the potential "tow-nes". + Fujitsu + 1989 + 1989-02-28 + February 28, 1989 + Computer + 3-4 + 6F90FE + 9D9D9D + 009971 + 606875 + 151619 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/fpinball.xml b/themes/linear-es-de/system/metadata/fpinball.xml new file mode 100644 index 000000000..d5839fec2 --- /dev/null +++ b/themes/linear-es-de/system/metadata/fpinball.xml @@ -0,0 +1,17 @@ + + + Future Pinball + Future Pinball ("FP") is a freeware 3D pinball editing and gaming application for Microsoft Windows. It is similar to Visual Pinball ("VP") and other modern pinball simulation applications. Just as with VP's partnership with Visual PinMAME, FP uses partner applications to emulate original pinball ROM code. In FP's case, the end results of ROM code are simulated by Better Arcade Mode ("BAM") and tools such as "Pinball Browser" and dot-matrix display software plugins. Core FP development was discontinued in 2010, but resumed in 2013 via BAM. BAM features many new developments, such as enhanced physics, optics, and virtual reality support. + Christopher Leathley + 2005 + 2005-10-22 + October 22, 2005 + Engine + 1-1 + 3871C5 + F6DD08 + 800000 + FF0000 + 303030 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/gamate.xml b/themes/linear-es-de/system/metadata/gamate.xml new file mode 100644 index 000000000..cf6711699 --- /dev/null +++ b/themes/linear-es-de/system/metadata/gamate.xml @@ -0,0 +1,17 @@ + + + Gamate + The Gamate, known as 超級小子 (pinyin: chāojí xiǎozi, literally "Super Boy") in Taiwan and 超级神童 (pinyin: chāojí shéntóng, literally "Super Child Prodigy") in China, is a handheld game console manufactured by Bit Corporation in the early 1990s, and released in Australia, some parts of Europe, Asia (Taiwan and China), Argentina, and the United States. + Bit Corporation + 1990 + 1990 + 1990 + Portable + 3-4 + C53745 + 999999 + 777777 + 555555 + 333333 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/gameandwatch.xml b/themes/linear-es-de/system/metadata/gameandwatch.xml new file mode 100644 index 000000000..438f7dc1a --- /dev/null +++ b/themes/linear-es-de/system/metadata/gameandwatch.xml @@ -0,0 +1,24 @@ + + + Game & Watch + The Game & Watch is a series of handheld electronic games developed, manufactured, released and marketed by Nintendo from 1980 to 1991. Created by game designer Gunpei Yokoi, the product derived its name from its featuring a single game as well as a clock on a LCD screen. The models from 1981 onwards featured an alarm in addition. It was the earliest Nintendo video game product to gain major success. + +The units are based on a 4-bit CPU, from the Sharp SM5xx family, that include a small ROM and RAM area and an LCD screen driver circuit, although, prior to its simulation in MAME, there was a misconception in that every unit used a custom ASIC instead of a proper microcontroller. + +The series sold a combined of 43.4 million units worldwide. + https://en.wikipedia.org/wiki/Game_%26_Watch + Nintendo + 1980 + 1980-04-28 + April 28, 1980 + Portable + 4-3 + 8DA6AD + C4353D + C2904A + 853641 + 4C301C + + + + diff --git a/themes/linear-es-de/system/metadata/gamecom.xml b/themes/linear-es-de/system/metadata/gamecom.xml new file mode 100644 index 000000000..225113f26 --- /dev/null +++ b/themes/linear-es-de/system/metadata/gamecom.xml @@ -0,0 +1,20 @@ + + + Game.com + The Game.com is a fifth-generation handheld game console released by Tiger Electronics in August 1997. A smaller version, the Game.com Pocket Pro, was released in mid-1999. +The first version of the Game.com can be connected to a 14.4 kbit/s modem for Internet connectivity, hence its name referencing the top level domain .com. + +It was the first video game console to include a touchscreen and the first handheld console to include Internet connectivity. + Tiger Electronics + 1997 + 1997-08 + August 1997 + Portable + 3-4 + 58ACB4 + 71829A + 293039 + AE2B2B + 186DA4 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/gamegear.xml b/themes/linear-es-de/system/metadata/gamegear.xml new file mode 100644 index 000000000..4fb293e47 --- /dev/null +++ b/themes/linear-es-de/system/metadata/gamegear.xml @@ -0,0 +1,19 @@ + + + Game Gear + The Game Gear is an 8-bit fourth generation handheld game console released by Sega on October 6, 1990 in Japan, in April 1991 throughout North America and Europe, and during 1992 in Australia. The Game Gear primarily competed with Nintendo's Game Boy, the Atari Lynx, and NEC's TurboExpress. It shares much of its hardware with the Master System, and can play Master System games by the use of an adapter. Sega positioned the Game Gear, which had a full-color backlit screen with a landscape format, as a technologically superior handheld to the Game Boy. + +Though the Game Gear was rushed to market, its unique game library and price point gave it an edge over the Atari Lynx and TurboExpress. However, due to its short battery life, lack of original games, and weak support from Sega, the Game Gear was unable to surpass the Game Boy, selling 10.62 million units by March 1996. The Game Gear was discontinued on April 30, 1997. It was re-released as a budget system by Majesco Entertainment in 2000, under license from Sega. + Sega + 1990 + 1990-10-06 + October 6, 1990 + Portable + 3-4 + 356FAF + CCCBCB + D41808 + 008200 + 0000FE + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/gb.xml b/themes/linear-es-de/system/metadata/gb.xml new file mode 100644 index 000000000..de0631f42 --- /dev/null +++ b/themes/linear-es-de/system/metadata/gb.xml @@ -0,0 +1,20 @@ + + + Game Boy + The Game Boy is an 8-bit handheld game console developed and manufactured by Nintendo. It was first released in Japan on April 21, 1989, in North America later the same year, and in Europe in late 1990. It was designed by the same team that developed the Game & Watch series of handheld electronic games and several Nintendo Entertainment System (NES) games: Satoru Okada, Gunpei Yokoi, and Nintendo Research & Development 1. + +It was the first handheld game to use video game cartridges since Milton Bradley's Microvision handheld console. Despite many other, technologically superior handheld consoles introduced during its lifetime, the Game Boy was a tremendous success. The Game Boy and Game Boy Color combined have sold 118 million units worldwide. Upon its release in the United States, it sold its entire shipment of one million units within weeks. + https://en.wikipedia.org/wiki/Game_Boy + Nintendo + 1989 + 1989-04-21 + April 21, 1989 + Portable + 1-1 + 3E518A + 9B2063 + 2D308E + D9D9D9 + A3A3A3 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/gba.xml b/themes/linear-es-de/system/metadata/gba.xml new file mode 100644 index 000000000..92c3cd0d8 --- /dev/null +++ b/themes/linear-es-de/system/metadata/gba.xml @@ -0,0 +1,17 @@ + + + Game Boy Advance + The Game Boy Advance (abbreviated as GBA) is a 32-bit handheld video game console developed, manufactured and marketed by Nintendo as the successor to the Game Boy Color. It was released in Japan on March 21, 2001, in North America on June 11, 2001, in Australia and Europe on June 22, 2001, and in mainland China on June 8, 2004 (iQue Player). Nintendo's competitors in the handheld market at the time were the Neo Geo Pocket Color, WonderSwan, GP32, Tapwave Zodiac, and the N-Gage. Despite the competitors' best efforts, Nintendo maintained a majority market share with the Game Boy Advance. As of June 30, 2010, the Game Boy Advance series has sold 81.51 million units worldwide. Its successor, the Nintendo DS, was released in November 2004 and is also compatible with Game Boy Advance software. + Nintendo + 2001 + 2001-06-11 + June 11, 2001 + Portable + 1-1 + 4C74D6 + 5C67A9 + 280FBE + BCBCBC + 212121 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/gbc.xml b/themes/linear-es-de/system/metadata/gbc.xml new file mode 100644 index 000000000..11c17bbc2 --- /dev/null +++ b/themes/linear-es-de/system/metadata/gbc.xml @@ -0,0 +1,17 @@ + + + Game Boy Color + The Game Boy Color, (abbreviated as GBC) is a handheld game console manufactured by Nintendo, which was released on October 21, 1998 in Japan and was released in November of the same year in international markets. It is the successor of the Game Boy. The Game Boy Color, as suggested by the name, features a color screen, but no backlight. It is slightly thicker and taller than the Game Boy Pocket, which is a redesigned Game Boy released in 1996. As with the original Game Boy, it has a custom 8-bit processor somewhat related to a Zilog Z80 central processing unit (CPU). The original name - with its American English spelling of "color" - remained unchanged even in markets where "colour" was the accepted English spelling. The Game Boy Color's primary competitors were the much more advanced Neo Geo Pocket by SNK and the WonderSwan by Bandai (both released in Japan only), though the Game Boy Color outsold these by a wide margin. The Game Boy and Game Boy Color combined have sold 118.69 million units worldwide. It was discontinued in 2003, shortly after the release of the Game Boy Advance SP. + Nintendo + 1998 + 1998-10-21 + October 21, 1998 + Portable + 1-1 + F3B92A + F63B77 + 2D308E + 00B3DE + 7642B6 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/gc.xml b/themes/linear-es-de/system/metadata/gc.xml new file mode 100644 index 000000000..9ff6f1124 --- /dev/null +++ b/themes/linear-es-de/system/metadata/gc.xml @@ -0,0 +1,19 @@ + + + GameCube + The Nintendo GameCube is a home video game console released by Nintendo in Japan and North America in 2001 and in PAL territories in 2002. The GameCube is Nintendo's entry in the sixth generation of video game consoles and is the successor to their previous console, the Nintendo 64. The GameCube competed with Sony's PlayStation 2 and Microsoft's Xbox. + +The GameCube is the first Nintendo console to use optical discs as its primary storage medium. The discs are in a miniDVD-based format but the system was not designed to play full-sized DVDs or audio CDs unlike its competitors, and mainly focused on gaming instead. The console supports limited online gaming for a small number of games via a GameCube broadband or modem adapter and can connect to a Game Boy Advance with a link cable, which allows players to access exclusive in-game features using the handheld as a second screen and controller like a Wii U. + Nintendo + 2001 + 2001-08-14 + November 18, 2001 + Console + 243-340 + 9382EE + 7B79AA + 524C82 + CBC9E0 + 1E1C11 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/genesis.xml b/themes/linear-es-de/system/metadata/genesis.xml new file mode 100644 index 000000000..7c674a7e5 --- /dev/null +++ b/themes/linear-es-de/system/metadata/genesis.xml @@ -0,0 +1,17 @@ + + + Sega Genesis + The Sega Genesis, known as the Mega Drive in most regions outside North America, is a 16-bit home video game console which was developed and sold by Sega Enterprises, Ltd. The Genesis was Sega's third console and the successor to the Master System. Sega first released the console as the Mega Drive in Japan in 1988, followed by a North American debut under the Genesis moniker in 1989. In 1990, the console was distributed as the Mega Drive by Virgin Mastertronic in Europe, by Ozisoft in Australasia, and by Tec Toy in Brazil. In South Korea, the systems were distributed by Samsung and were known as the Super Gam*Boy, and later the Super Aladdin Boy. The main microprocessor of the Genesis is a 16/32-bit Motorola 68000 CPU clocked at 7.6 MHz. The console also includes a Zilog Z80 sub-processor, which was mainly used to control the sound hardware and also provides backwards compatibility with the Master System. + Sega + 1989 + 1989-08-14 + August 14, 1989 + Console + 243-340 + B52D2E + D2D2D2 + 488277 + 3E64AE + 811B15 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/gmaster.xml b/themes/linear-es-de/system/metadata/gmaster.xml new file mode 100644 index 000000000..9cc7fa6cf --- /dev/null +++ b/themes/linear-es-de/system/metadata/gmaster.xml @@ -0,0 +1,19 @@ + + + Game Master + The Game Master is a handheld game console manufactured by Hartung, and designed to compete with the Nintendo Game Boy. In Germany, it was marketed by Hartung itself, while in the UK it was released as the Systema 2000 by the already well-established maker of cheap LCD games Systema. It was also sold a few under alternate names in France, including the Videojet Game Master as well as for a few released by Hartung as the Hartung Super Game and the Hartung Game Tronic. The Game Master has a 64x64 monochrome LCD screen. + +The design was much like the Game Gear with a D-Pad and two action buttons, although another variation, the Game Plus, features a more Game Boy-like design which is backed by a company called Caterpillar and was sold by Delplay in France. The cartridges resemble those used by the Watara Supervision, with the card edge of the cartridge jutted out past the plastic of the cartridge. The Game Master utilizes a 40-pin cartridge port like the Supervision but is not compatible with Supervision games. + Hartung + 1990 + 1990 + 1990 + Portable + 3-4 + 83A9B0 + F6DD08 + 800000 + FF0000 + 303030 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/gx4000.xml b/themes/linear-es-de/system/metadata/gx4000.xml new file mode 100644 index 000000000..0d192edc9 --- /dev/null +++ b/themes/linear-es-de/system/metadata/gx4000.xml @@ -0,0 +1,17 @@ + + + GX4000 + The Amstrad GX4000, commonly known as the GX4000, is a third generation (1983-2003) video game console developed and distributed by Amstrad. It was released in September of 1990 in Europe at a retail price of £99.99. The console was not released outside Europe. The GX4000 was Amstrad's short-lived attempt to enter the games console market, being primarily a home computer manufacturer. The console was discontinued in late 1991. + Amstrad + 1990 + 1990-09-01 + September 1, 1990 + Console + 3-4 + DA4A3B + E5B3B2 + 9E4968 + DBD9D4 + C02520 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/intellivision.xml b/themes/linear-es-de/system/metadata/intellivision.xml new file mode 100644 index 000000000..e34fa6c72 --- /dev/null +++ b/themes/linear-es-de/system/metadata/intellivision.xml @@ -0,0 +1,17 @@ + + + Intellivision + The Mattel Intellivision is a second generation (1976–1992) home video game console developed and distributed by Mattel Electronics. It was released in summer 1979 in North America at a retail price of $299. The console was later released in Europe (1981), South America (1982), and Japan (1982). The Intellivision was the first home console to use a tile based playfield and was the first game console to provide real-time human voices in the middle of gameplay, courtesy of the IntelliVoice module. The console was discontinued in early-1990. + Mattel + 1979 + 1979-12-03 + December 3, 1979 + Console + 3-4 + E67E17 + D4C1A0 + 2B201D + C81A7C + C8D463 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/j2me.xml b/themes/linear-es-de/system/metadata/j2me.xml new file mode 100644 index 000000000..26aed22df --- /dev/null +++ b/themes/linear-es-de/system/metadata/j2me.xml @@ -0,0 +1,17 @@ + + + J2ME + Java Platform, Micro Edition or Java ME is a computing platform for development and deployment of portable code for embedded and mobile devices (micro-controllers, sensors, gateways, mobile phones, personal digital assistants, TV set-top boxes, printers). Java ME was formerly known as Java 2 Platform, Micro Edition or J2ME. As of December 22, 2006, the Java ME source code is licensed under the GNU General Public License, and is released under the project name phoneME. + Oracle + 1998 + 1998-12-08 + December 8, 1998 + OS + 1-1 + F8981D + F58219 + 4E7896 + EE3537 + 1F4394 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/kodi.xml b/themes/linear-es-de/system/metadata/kodi.xml new file mode 100644 index 000000000..83ac30878 --- /dev/null +++ b/themes/linear-es-de/system/metadata/kodi.xml @@ -0,0 +1,17 @@ + + + Kodi + Kodi is a free and open-source media player software application developed by the XBMC Foundation, a non-profit technology consortium. Kodi is available for multiple operating systems and hardware platforms, with a software 10-foot user interface for use with televisions and remote controls. + XBMC Foundation + 2002 + 2002 + 2002 + Folder + 3-4 + 00141F + 186AAC + 36A2CD + 448F38 + BF2E31 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/laserdisc.xml b/themes/linear-es-de/system/metadata/laserdisc.xml new file mode 100644 index 000000000..a98f3f8a1 --- /dev/null +++ b/themes/linear-es-de/system/metadata/laserdisc.xml @@ -0,0 +1,17 @@ + + + LaserDisc Games + LaserDisc arcade games use pre-recorded video, either in combination with overlaid sprites or simply as sections of video controllable by the player. The first major LaserDisc game was Sega's Astron Belt, released in 1983. It was closely followed by Dragon's Lair the same year, which is doubtlessly the most famous LaserDisc game. A number of releases followed and to this day there is a community making similar homebrew games, although they no longer technically run on LaserDiscs. + Various + Various + Various + Various + Folder + 3-4 + 222222 + F6DD08 + 800000 + FF0000 + 303030 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/lcdgames.xml b/themes/linear-es-de/system/metadata/lcdgames.xml new file mode 100644 index 000000000..8d09eddbc --- /dev/null +++ b/themes/linear-es-de/system/metadata/lcdgames.xml @@ -0,0 +1,21 @@ + + + LCD Games + Handheld electronic games are very small, portable devices for playing interactive electronic games, often miniaturized versions of video games. The controls, display and speakers are all part of a single unit. + +Rather than a general-purpose screen made up of a grid of small pixels, they usually have custom displays designed to play one game. This simplicity means they can be made as small as a smartwatch, and sometimes are. The visual output of these games can range from a few small light bulbs or LED lights to calculator-like alphanumerical screens; later these were mostly displaced by liquid crystal and vacuum fluorescent display screens with detailed images and in the case of VFD games, color. + +Handhelds' popularity was at its peak from the late 1970s into the early 1990s before declining. They are the precursors to the handheld game console. + Various + Various + Various + Various + Portable + 1-1 + CE413E + B3A98B + A24F41 + C3C9C7 + 3D6F78 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/lowresnx.xml b/themes/linear-es-de/system/metadata/lowresnx.xml new file mode 100644 index 000000000..4fd43f9e4 --- /dev/null +++ b/themes/linear-es-de/system/metadata/lowresnx.xml @@ -0,0 +1,17 @@ + + + LowRes NX + LowRes NX was inspired by real 8-bit and 16-bit systems and simulates chips for graphics, sound and I/O, which actually work like classic hardware. It supports hardware sprites as well as hardware parallax scrolling, and even offers vertical blank and raster interrupts to create authentic retro effects. Imagine LowRes NX as a handheld game console with a d-pad, two action buttons and a little rubber keyboard below a slidable touchscreen. + Timo Kloss + 2017 + 2017 + 2017 + Engine + 1-1 + 00AAAA + FF8300 + 56A0A2 + F8EA32 + FF5700 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/lutris.xml b/themes/linear-es-de/system/metadata/lutris.xml new file mode 100644 index 000000000..06d731a91 --- /dev/null +++ b/themes/linear-es-de/system/metadata/lutris.xml @@ -0,0 +1,19 @@ + + + Lutris + Lutris is a free and open source game manager for Linux-based operating systems developed and maintained by Mathieu Comandon and the community, released under the GNU General Public License. + +Lutris began as a piece of software called Oblivion Launcher, which was created in 2009 by Mathieu Comandon. He wanted an easier way to manage his games running on Linux, especially the ones that ran using Wine. Lutris began development on Launchpad, with the repository being created on May 5th, 2009. The first public release, 0.1, was on November 29th, 2009.[8] In 2010, development moved to GitHub. + Mathieu Comandon + 2010 + 2010-02-23 + February 23, 2010 + Engine + 3-4 + AA9D96 + FF9900 + 704631 + 222222 + FFB700 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/lutro.xml b/themes/linear-es-de/system/metadata/lutro.xml new file mode 100644 index 000000000..4825f5dad --- /dev/null +++ b/themes/linear-es-de/system/metadata/lutro.xml @@ -0,0 +1,17 @@ + + + Lutro + Lutro is a 2D game framework that aims for simplicity and extreme portability. Using lutro, you can develop any kind of 2D retro games, like NES or Genesis games, and run them on a wide range of platforms through RetroArch. Lutro makes it easy to write games by using Lua and following the LÖVE API. Portability is achieved through the libretro API: Lutro is just loaded as a plugin in a frontend like RetroArch which takes care of display, audio and inputs. + libretro + 2015 + 2015-02-15 + February 17, 2015 + Engine + 1-1 + 926183 + 74282B + AE353A + F2D8B5 + 00007F + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/macintosh.xml b/themes/linear-es-de/system/metadata/macintosh.xml new file mode 100644 index 000000000..9e0cd1153 --- /dev/null +++ b/themes/linear-es-de/system/metadata/macintosh.xml @@ -0,0 +1,19 @@ + + + Macintosh + The Macintosh (mainly Mac since 1998) is a family of personal computers designed, manufactured, and sold by Apple Inc. (originally as Apple Computer, Inc.) since January 1984. + +The original Macintosh is the first successful mass-market all-in-one desktop personal computer to have featured a graphical user interface, built-in screen, and mouse. Apple sold the Macintosh alongside its popular Apple II, Apple IIGS, Apple III, and Apple Lisa families of computers until the other models were discontinued in the 1990s. + Apple + 1984 + 1984-01 + January 1984 + Computer + 3-4 + 1EAEDA + 76B845 + E19433 + 009DDD + C45152 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/mame-advmame.xml b/themes/linear-es-de/system/metadata/mame-advmame.xml new file mode 100644 index 000000000..d115c061c --- /dev/null +++ b/themes/linear-es-de/system/metadata/mame-advmame.xml @@ -0,0 +1,17 @@ + + + AdvanceMAME + AdvanceMAME, is a port of the MAME 0.106 and MESS 0.106 emulators for Arcade Monitors and TVs but also for LCDs and PC monitors. + AdvanceMAME + 1998 + 1998-05 + May 1998 + Emulator + 3-4 + 5B60B7 + 00ADEF + 84849C + 231F20 + FFFFFF + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/mame.xml b/themes/linear-es-de/system/metadata/mame.xml new file mode 100644 index 000000000..10ed97d83 --- /dev/null +++ b/themes/linear-es-de/system/metadata/mame.xml @@ -0,0 +1,19 @@ + + + MAME + MAME (formerly an acronym of Multiple Arcade Machine Emulator) is a free and open-source emulator designed to recreate the hardware of arcade game systems in software on modern personal computers and other platforms. Its intention is to preserve gaming history by preventing vintage games from being lost or forgotten. It does this by emulating the inner workings of the emulated arcade machines; the ability to actually play the games is considered "a nice side effect". Joystiq has listed MAME as an application that every Windows and Mac gamer should have. + +The first public MAME release was by Nicola Salmoria on 5 February 1997. It now supports over 7,000 unique games and 10,000 actual ROM image sets, though not all of the games are playable. MESS, an emulator for many video game consoles and computer systems, based on the MAME core, was integrated into MAME in 2015. + MAME Team + 1997 + 1997-02-05 + February 5, 1997 + Emulator + 3-4 + 5B60B7 + 00ADEF + 84849C + 231F20 + FFFFFF + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/mastersystem.xml b/themes/linear-es-de/system/metadata/mastersystem.xml new file mode 100644 index 000000000..ca1133ef7 --- /dev/null +++ b/themes/linear-es-de/system/metadata/mastersystem.xml @@ -0,0 +1,19 @@ + + + Master System + The Sega Master System is a third-generation 8-bit home video game console manufactured by Sega. It was originally a remodeled export version of the Sega Mark III, the third iteration of the SG-1000 series of consoles, which was released in Japan in 1985 and featured enhanced graphical capabilities over its predecessors. The Master System launched in North America in 1986, followed by Europe in 1987, and Brazil in 1989. A Japanese version of the Master System was also launched in 1987, which features a few enhancements over the export models (and by proxy the original Mark III): a built-in FM audio chip, a rapid-fire switch, and a dedicated port for the 3D glasses. The Master System II, a cheaper model, was released in 1990 in North America and Europe. + +The original Master System models use both cartridges and a credit card-sized format known as Sega Cards. Accessories for the consoles include a light gun and 3D glasses that work with a range of specially designed games. The later Master System II redesign removed the card slot, turning it into a strictly cartridge-only system and is incompatible with the 3D glasses. + Sega + 1986 + 1986-09-01 + September 1, 1986 + Console + 243-340 + C03F3B + CBCBCB + 165193 + E60000 + 1A1A1A + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/megacd.xml b/themes/linear-es-de/system/metadata/megacd.xml new file mode 100644 index 000000000..f18eb3333 --- /dev/null +++ b/themes/linear-es-de/system/metadata/megacd.xml @@ -0,0 +1,19 @@ + + + Mega CD + The Sega CD, released as the Mega-CD in most regions outside North America and Brazil, is a CD-ROM accessory for the Mega Drive/Genesis designed and produced by Sega as part of the fourth generation of video game consoles. It was released on December 12, 1991 in Japan, October 15, 1992 in North America, and April 2, 1993 in Europe. The Sega CD plays CD-based games and adds hardware functionality such as a faster central processing unit and graphic enhancements like sprite scaling and rotation. It can also play audio CDs and CD+G discs. + +The main benefit of CD technology was greater storage, which allowed for games to be nearly 320 times larger than Genesis cartridges. This benefit manifested as full motion video (FMV) games such as the controversial Night Trap, which became a focus of the 1993 congressional hearings on issues of video game violence and ratings. Sega of Japan partnered with JVC to design the Sega CD and refused to consult with Sega of America until the project was complete. Sega of America assembled parts from various "dummy" units to obtain a working prototype. It was redesigned several times by Sega and licensed third-party developers. + Sega + 1993 + 1993-04-02 + April 2, 1993 + Peripheral + 1-1 + 0C7BCB + DCE3E6 + D5202C + C0C1C4 + 212122 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/megacdjp.xml b/themes/linear-es-de/system/metadata/megacdjp.xml new file mode 100644 index 000000000..4b0dac499 --- /dev/null +++ b/themes/linear-es-de/system/metadata/megacdjp.xml @@ -0,0 +1,19 @@ + + + Mega-CD + The Sega CD, released as the Mega-CD in most regions outside North America and Brazil, is a CD-ROM accessory for the Mega Drive/Genesis designed and produced by Sega as part of the fourth generation of video game consoles. It was released on December 12, 1991 in Japan, October 15, 1992 in North America, and April 2, 1993 in Europe. The Sega CD plays CD-based games and adds hardware functionality such as a faster central processing unit and graphic enhancements like sprite scaling and rotation. It can also play audio CDs and CD+G discs. + +The main benefit of CD technology was greater storage, which allowed for games to be nearly 320 times larger than Genesis cartridges. This benefit manifested as full motion video (FMV) games such as the controversial Night Trap, which became a focus of the 1993 congressional hearings on issues of video game violence and ratings. Sega of Japan partnered with JVC to design the Sega CD and refused to consult with Sega of America until the project was complete. Sega of America assembled parts from various "dummy" units to obtain a working prototype. It was redesigned several times by Sega and licensed third-party developers. + Sega + 1991 + 1991-12-12 + December 12, 1991 + Peripheral + 1-1 + 0C7BCB + 5A97D0 + 1D46A5 + DEAD2C + 732A46 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/megadrive.xml b/themes/linear-es-de/system/metadata/megadrive.xml new file mode 100644 index 000000000..dfb80e2d6 --- /dev/null +++ b/themes/linear-es-de/system/metadata/megadrive.xml @@ -0,0 +1,13 @@ + + + Mega Drive + The Mega Drive is a 16-bit fourth-generation home video game console developed and sold by Sega. It's Sega's third console and the successor to the Master System. The Mega Drive was adapted from Sega's System 16 arcade board. + Sega + 1990 + 1990 + 1990 + Console + 243-340 + 0C7BCB + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/megadrivejp.xml b/themes/linear-es-de/system/metadata/megadrivejp.xml new file mode 100644 index 000000000..e2b1b2a7c --- /dev/null +++ b/themes/linear-es-de/system/metadata/megadrivejp.xml @@ -0,0 +1,13 @@ + + + Mega Drive + The Mega Drive is a 16-bit fourth-generation home video game console developed and sold by Sega. It's Sega's third console and the successor to the Master System. The Mega Drive was adapted from Sega's System 16 arcade board. + Sega + 1988 + 1988-10-29 + October 29, 1988 + Console + 243-340 + 0C7BCB + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/megaduck.xml b/themes/linear-es-de/system/metadata/megaduck.xml new file mode 100644 index 000000000..784595233 --- /dev/null +++ b/themes/linear-es-de/system/metadata/megaduck.xml @@ -0,0 +1,17 @@ + + + Mega Duck + The Welback Holdings Mega Duck, usually just referred to as Mega Duck, is a fourth generation (1987-2004) handheld video game console developed and distributed by Welback Holdings, but marketed under different names like Creatronic, Videojet, Cougar USA, and Hartung. It was released in August 1993 in Netherlands at a retail price of fl 129 as the Creatronic Mega Duck. The console was also released in Germany (1993) distributed by Hartung, France (1993) distributed by Videojet, and Brazil (1993) but as the Cougar USA Cougar Boy. The Mega Duck was an obvious clone of the Game Boy in looks, and it sadly lacked any innovative games to set it apart to become a competitor. The console was discontinued quietly sometime in early 1995. + Welback Holdings + 1993 + 1993 + 1993 + Portable + 4-3 + 17999A + 415E81 + EAEAEA + 51BABB + 819B73 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/mess.xml b/themes/linear-es-de/system/metadata/mess.xml new file mode 100644 index 000000000..3237ead96 --- /dev/null +++ b/themes/linear-es-de/system/metadata/mess.xml @@ -0,0 +1,17 @@ + + + MESS + Multi Emulator Super System (MESS) is an emulator for various consoles and computer systems, based on the MAME core. It used to be a standalone program (which has since been discontinued), but is now integrated into MAME (which is actively developed). MESS emulates portable and console gaming systems, computer platforms, and calculators. The project strives for accuracy and portability and therefore is not always the fastest emulator for any one particular system. Its accuracy makes it also useful for homebrew game development. + MESS Team + 1998 + 1998 + 1998 + Emulator + 3-4 + 5B60B7 + FFA102 + A05F00 + FFEFD5 + FFD183 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/model2.xml b/themes/linear-es-de/system/metadata/model2.xml new file mode 100644 index 000000000..34c0cfd2e --- /dev/null +++ b/themes/linear-es-de/system/metadata/model2.xml @@ -0,0 +1,17 @@ + + + Sega Model 2 + The Sega Model 2 is an arcade system board originally debuted by Sega in 1993 as a successor to the Sega Model 1 board. It is an extension of the Model 1 hardware, most notably introducing the concept of texture-mapped polygons, allowing for more realistic 3D graphics (for its time). The Model 2 board was an important milestone for the arcade industry, and helped launch several key arcade franchises of the 90s, including Daytona USA, Virtua Cop, Sega Rally Championship, Dead or Alive, Virtua Striker, Cyber Troopers Virtual-On and The House of the Dead. The Model 2 was engineered with help from GE Aerospace (acquired by Martin Marietta in 1993, now part of Lockheed Martin), who designed the texture-mapping technology incorporated by the Model 2. The Model 2's development was led by famed game designer Yu Suzuki. The Model 2 arcade board debuted along with Daytona USA, a game which was finished, copyrighted and debuted at the JAMMA arcade show in 1993. There four versions of the system: the original Model 2 and the Model 2A-CRX, Model 2B-CRX and Model 2C-CRX variants. Model 2 and 2A-CRX used a custom DSP with internal code for the geometrizer while 2B-CRX and 2C-CRX used well documented DSPs and uploaded the geometrizer code at startup to the DSP. + Sega + 1993 + 1993-01-01 + January 1, 1993 + Arcade + 3-4 + 439AE9 + 034693 + F7ED18 + F4133D + 199A40 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/model3.xml b/themes/linear-es-de/system/metadata/model3.xml new file mode 100644 index 000000000..44669a463 --- /dev/null +++ b/themes/linear-es-de/system/metadata/model3.xml @@ -0,0 +1,17 @@ + + + Sega Model 3 + The Sega Model 3 is an arcade platform produced by Sega in partnership with Lockheed Martin. It is a successor to the Sega Model 2 platform, and was released in 1996. The Model 3 hardware is very different to the Model 1 and Model 2 boards which preceded it. It was desinged with one purpose in mind - to push as many textured polygons as possible for as least money as possible. Upon release, the Model 3 board was more powerful than any other arcade platform on the market, as well as any home console or computer. + Sega + 1996 + 1996-01-01 + January 1, 1996 + Arcade + 3-4 + 439AE9 + 034693 + FFFFFF + 000000 + 4C9EFB + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/moonlight.xml b/themes/linear-es-de/system/metadata/moonlight.xml new file mode 100644 index 000000000..70b6f3b6e --- /dev/null +++ b/themes/linear-es-de/system/metadata/moonlight.xml @@ -0,0 +1,15 @@ + + + Moonlight (formerly Limelight) is an open source implementation of NVIDIA's GameStream protocol. We implemented the protocol used by the NVIDIA Shield and wrote a set of 3rd party clients. Moonlight allows you to play your PC games on almost any device, whether you're in another room or miles away from your gaming rig. + CWR University + 2014 + 2014 + 2014 + Folder + 738092 + 82BD0F + 003366 + A4A1A4 + DEDDDE + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/moto.xml b/themes/linear-es-de/system/metadata/moto.xml new file mode 100644 index 000000000..a4c9bbb81 --- /dev/null +++ b/themes/linear-es-de/system/metadata/moto.xml @@ -0,0 +1,17 @@ + + + Thomson MOTO + The Thomson MOTO line of computers were a series of 8-bit computers sold in the 1980s by French electronics company Thomson, which has been nationalized in 1982. The MOTO computers became an integral part of the French Government's plan informatique pour tous (IPT) to make computers widespread throughout France by bringing computers and programming classes to French school children. A number of computer makers, including Apple, were considered before Thomson won the contract. + Thomson SA + 1984 + 1984 + 1984 + Computer + 3-4 + 2C5299 + E6F0EF + F0C73B + 4F8E5C + 2C2D2C + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/msx.xml b/themes/linear-es-de/system/metadata/msx.xml new file mode 100644 index 000000000..b032169eb --- /dev/null +++ b/themes/linear-es-de/system/metadata/msx.xml @@ -0,0 +1,19 @@ + + + MSX + MSX is a standardized home computer architecture, announced by Microsoft and ASCII Corporation on June 16, 1983. It was initially conceived by Microsoft as a product for the Eastern sector, and jointly marketed by Kazuhiko Nishi, then vice-president at Microsoft and director at ASCII Corporation. Microsoft and Nishi conceived the project as an attempt to create unified standards among various home computing system manufacturers of the period, in the same fashion as the VHS standard for home video tape machines. + +MSX systems were popular in Japan and several other countries. Sony was the primary manufacturer of MSX systems at the time of release, and throughout most of the products lifespan, producing more units than any other manufacturer. Eventually 5 million MSX-based units were sold in Japan alone. Despite Microsoft's involvement, few MSX-based machines were released in the United States. + Microsoft + 1983 + 1983-16-27 + June 27, 1983 + Computer + 3-4 + 30A8EB + EAD598 + 212324 + 656266 + DEE0E0 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/msx1.xml b/themes/linear-es-de/system/metadata/msx1.xml new file mode 100644 index 000000000..f62f33796 --- /dev/null +++ b/themes/linear-es-de/system/metadata/msx1.xml @@ -0,0 +1,19 @@ + + + MSX 1 + MSX is a standardized home computer architecture, announced by Microsoft and ASCII Corporation on June 16, 1983. It was initially conceived by Microsoft as a product for the Eastern sector, and jointly marketed by Kazuhiko Nishi, then vice-president at Microsoft and director at ASCII Corporation. Microsoft and Nishi conceived the project as an attempt to create unified standards among various home computing system manufacturers of the period, in the same fashion as the VHS standard for home video tape machines. + +MSX systems were popular in Japan and several other countries. Sony was the primary manufacturer of MSX systems at the time of release, and throughout most of the products lifespan, producing more units than any other manufacturer. Eventually 5 million MSX-based units were sold in Japan alone. Despite Microsoft's involvement, few MSX-based machines were released in the United States. + Microsoft + 1983 + 1983-16-27 + June 27, 1983 + Computer + 3-4 + 30A8EB + EAD598 + 212324 + 656266 + DEE0E0 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/msx2.xml b/themes/linear-es-de/system/metadata/msx2.xml new file mode 100644 index 000000000..17fdbd2c9 --- /dev/null +++ b/themes/linear-es-de/system/metadata/msx2.xml @@ -0,0 +1,19 @@ + + + MSX 2 + MSX is a standardized home computer architecture, announced by Microsoft and ASCII Corporation on June 16, 1983. It was initially conceived by Microsoft as a product for the Eastern sector, and jointly marketed by Kazuhiko Nishi, then vice-president at Microsoft and director at ASCII Corporation. Microsoft and Nishi conceived the project as an attempt to create unified standards among various home computing system manufacturers of the period, in the same fashion as the VHS standard for home video tape machines. + +MSX systems were popular in Japan and several other countries. Sony was the primary manufacturer of MSX systems at the time of release, and throughout most of the products lifespan, producing more units than any other manufacturer. Eventually 5 million MSX-based units were sold in Japan alone. Despite Microsoft's involvement, few MSX-based machines were released in the United States. + Microsoft + 1985 + 1985-01-01 + January 1, 1985 + Computer + 3-4 + 30A8EB + D6D4D4 + B7B7B7 + 515050 + 2323DC + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/msxturbor.xml b/themes/linear-es-de/system/metadata/msxturbor.xml new file mode 100644 index 000000000..9b0f0763c --- /dev/null +++ b/themes/linear-es-de/system/metadata/msxturbor.xml @@ -0,0 +1,17 @@ + + + MSX Turbo R + The MSX Turbo R is the last generation of MSX computers that was put to market by a household electronic brand. Only Panasonic was brave enough to put faith in the standard once again, by releasing two different models: the Panasonic FS-A1ST and the Panasonic FS-A1GT. MSX Turbo R computers were produced until 1994. + Microsoft + 1991 + 1991 + 1991 + Computer + 3-4 + 3F599B + 637080 + 28292B + 99784B + 32100F + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/mugen.xml b/themes/linear-es-de/system/metadata/mugen.xml new file mode 100644 index 000000000..f088e438f --- /dev/null +++ b/themes/linear-es-de/system/metadata/mugen.xml @@ -0,0 +1,17 @@ + + + M.U.G.E.N + Mugen (stylized as M.U.G.E.N) is a freeware 2D fighting game engine designed by Elecbyte. Content is created by the community, and thousands of fighters, both original and from popular fiction, have been created. It is written in C and originally used the Allegro library. The latest versions of the engine use the SDL library. + Elecbyte + 1999 + 1999-07-27 + July 27, 1999 + Engine + 1-1 + CA5617 + B5B8F1 + E5F5FE + FFFFFF + A1B687 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/multivision.xml b/themes/linear-es-de/system/metadata/multivision.xml new file mode 100644 index 000000000..9f41e6c8e --- /dev/null +++ b/themes/linear-es-de/system/metadata/multivision.xml @@ -0,0 +1,17 @@ + + + Othello Multivision + The Othello Multivision (オセロマルチビジョン) is a licensed SG-1000 clone manufactured by Tsukuda Original. It exists because Sega's original intention for the SC-3000 computer was to allow other manufacturers to produce compatible computers in the hope of having a worldwide standard. Unfortunately, possibly with the emergance of the MSX, this tactic failed, and very few SG-1000/SC-3000 compatible machines were produced. The Othello Multivision was one of those machines. + Tsukuda Original + 1983 + 1983 + 1983 + Console + 3-4 + 4959A0 + EFEBE1 + 571229 + 183B67 + E8E342 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/n3ds.xml b/themes/linear-es-de/system/metadata/n3ds.xml new file mode 100644 index 000000000..5ed5c7191 --- /dev/null +++ b/themes/linear-es-de/system/metadata/n3ds.xml @@ -0,0 +1,17 @@ + + + Nintendo 3DS + The Nintendo 3DS, abbreviated to 3DS, is a portable game console produced by Nintendo. It is capable of displaying stereoscopic 3D effects without the use of 3D glasses or additional accessories. Nintendo announced the device in March 2010 and officially unveiled it at E3 2010 on June 15, 2010. The console succeeds the Nintendo DS, featuring backward compatibility with older Nintendo DS and Nintendo DSi video games. + Nintendo + 2011 + 2011-02-26 + February 26, 2011 + Portable + 257-229 + 697583 + 929497 + C02424 + 221D1F + 347A7A + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/n64.xml b/themes/linear-es-de/system/metadata/n64.xml new file mode 100644 index 000000000..3f1f2fda2 --- /dev/null +++ b/themes/linear-es-de/system/metadata/n64.xml @@ -0,0 +1,17 @@ + + + Nintendo 64 + Named for its 64-bit central processing unit, it was released in June 1996 in Japan, September 1996 in North America, March 1997 in Europe and Australia, September 1997 in France and December 1997 in Brazil. As part of the fifth generation of gaming, the N64 competed primarily with the PlayStation and the Sega Saturn. The Nintendo 64 was launched with three games: Super Mario 64 and Pilotwings 64, released worldwide; and Saikyo Habu Shogi, released only in Japan. While the N64 was succeeded by Nintendo's MiniDVD-based GameCube in November 2001, N64 consoles remained available until the system was retired in late 2003. + Nintendo + 1996 + 1996-06-23 + June 23, 1996 + Console + 4-3 + 19B65F + 143F9E + 00935C + CA2E39 + E1C245 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/n64dd.xml b/themes/linear-es-de/system/metadata/n64dd.xml new file mode 100644 index 000000000..90589e9fe --- /dev/null +++ b/themes/linear-es-de/system/metadata/n64dd.xml @@ -0,0 +1,17 @@ + + + 64DD + The 64DD, colloquially referred to as the Nintendo 64DD, is a magnetic disk drive peripheral for the Nintendo 64 game console developed by Nintendo. It was originally announced in 1995, prior to the Nintendo 64's 1996 launch, and after numerous delays was finally released only in Japan on December 1, 1999. Only ten software titles were released until the unit was discontinued in February 2001. It was a commercial failure, with at least 15,000 total units sold and another 85,000 units unsold. + Nintendo + 1999 + 1999-12-01 + December 1, 1999 + Peripheral + 1-1 + 19B65F + DCAF36 + 268340 + 20317F + B73E3A + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/naomi.xml b/themes/linear-es-de/system/metadata/naomi.xml new file mode 100644 index 000000000..2fd25f5c1 --- /dev/null +++ b/themes/linear-es-de/system/metadata/naomi.xml @@ -0,0 +1,19 @@ + + + Naomi + The NAOMI (New Arcade Operation Machine Idea) is an arcade system released by Sega in 1998. It was designed as a successor to Sega Model 3 hardware, using a similar architecture to the Sega Dreamcast. + +The NAOMI was succeeded by the Sega Hikaru and Sega NAOMI 2 boards, though having out-lasted the NAOMI 2, Hikaru and Sega Aurora. The Sega Chihiro, or possibly even the Sega Lindbergh, could also be seen as successors. + Sega + 1998 + 1998-01-01 + January 1, 1998 + Arcade + 3-4 + EE820D + E4E7D7 + FD95B0 + 48B3EB + 35FF90 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/naomi2.xml b/themes/linear-es-de/system/metadata/naomi2.xml new file mode 100644 index 000000000..4b592f224 --- /dev/null +++ b/themes/linear-es-de/system/metadata/naomi2.xml @@ -0,0 +1,19 @@ + + + Naomi 2 + The Sega NAOMI 2 is an arcade board developed by Sega and is a successor to Sega NAOMI hardware. It was originally released in 2000. Since it uses similar NAOMI architecture (but significantly beefed up), it is also fully backwards compatible with its predecessor. + +The NAOMI 2 is significantly more powerful than the NAOMI, including a dual CPU setup, new T&L GPU, dual rasterizer GPU, increased memory, and faster bandwidth. This leads to games with much more polygons than a NAOMI game, rendered at much faster speeds, while the new T&L GPU adds advanced lighting and particle effects. It was also more affordable than the very expensive (and difficult to program) Sega Hikaru arcade system that preceded it. The NAOMI 2 was nevertheless more powerful than home systems at the time. + Sega + 2000 + 2000 + 2000 + Arcade + 3-4 + E27E16 + E4E7D7 + FD95B0 + 48B3EB + 35FF90 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/naomigd.xml b/themes/linear-es-de/system/metadata/naomigd.xml new file mode 100644 index 000000000..18024e293 --- /dev/null +++ b/themes/linear-es-de/system/metadata/naomigd.xml @@ -0,0 +1,19 @@ + + + Naomi GD-ROM + The NAOMI (New Arcade Operation Machine Idea) is an arcade system released by Sega in 1998. It was designed as a successor to Sega Model 3 hardware, using a similar architecture to the Sega Dreamcast. + +The NAOMI was succeeded by the Sega Hikaru and Sega NAOMI 2 boards, though having out-lasted the NAOMI 2, Hikaru and Sega Aurora. The Sega Chihiro, or possibly even the Sega Lindbergh, could also be seen as successors. + Sega + 1998 + 1998-01-01 + January 1, 1998 + Arcade + 3-4 + EE820D + E4E7D7 + A39B7C + C75433 + 243551 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/nds.xml b/themes/linear-es-de/system/metadata/nds.xml new file mode 100644 index 000000000..896882161 --- /dev/null +++ b/themes/linear-es-de/system/metadata/nds.xml @@ -0,0 +1,17 @@ + + + Nintendo DS + The Nintendo DS or simply, DS, is a 32-bit dual-screen handheld game console developed and released by Nintendo. The device went on sale in North America on November 21, 2004. The DS, short for "Developers' System" or "Dual Screen", introduced distinctive new features to handheld gaming: two LCD screens working in tandem (the bottom one featuring a touchscreen), a built-in microphone, and support for wireless connectivity. Both screens are encompassed within a clamshell design similar to the Game Boy Advance SP. The Nintendo DS also features the ability for multiple DS consoles to directly interact with each other over Wi-Fi within a short range without the need to connect to an existing wireless network. Alternatively, they could interact online using the now-closed Nintendo Wi-Fi Connection service. + Nintendo + 2004 + 2004-12-01 + November 21, 2004 + Portable + 257-229 + B4CAD4 + 5C67A9 + 280FBE + BCBCBC + 212121 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/neogeo.xml b/themes/linear-es-de/system/metadata/neogeo.xml new file mode 100644 index 000000000..dff8a5ab7 --- /dev/null +++ b/themes/linear-es-de/system/metadata/neogeo.xml @@ -0,0 +1,17 @@ + + + Neo Geo + The Advanced Entertainment System (AES), originally known just as the Neo Geo, is the first video game console in the family. The hardware features comparatively colorful 2D graphics. The hardware was in part designed by Alpha Denshi (later ADK). Initially, the home system was only available for rent to commercial establishments, such as hotel chains, bars and restaurants, and other venues. When customer response indicated that some gamers were willing to buy a US$650 console, SNK expanded sales and marketing into the home console market. The Neo Geo console was officially launched on 31 January 1990 in Osaka, Japan. The AES is identical to its arcade counterpart, the MVS, so arcade games released for the home market are nearly identical conversions. + SNK + 1990 + 1990-01-31 + January 31, 1990 + Console + 3-4 + 7A838B + BF9328 + 494949 + 2D2D2D + E8E2E9 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/neogeocd.xml b/themes/linear-es-de/system/metadata/neogeocd.xml new file mode 100644 index 000000000..67a933739 --- /dev/null +++ b/themes/linear-es-de/system/metadata/neogeocd.xml @@ -0,0 +1,17 @@ + + + Neo Geo CD + The Neo Geo CD (Japanese: ネオジオCD, Hepburn: Neo Jio Shī Dī) is the second home video game console of SNK Corporation's Neo Geo family, released in September 9, 1994, four years after its cartridge-based equivalent. This is the same platform, converted to the cheaper CD format retailing at $49 to $79 per title, compared to the $300 cartridges. The system was originally priced at US$399, or £399 in the UK. The unit's 1× CD-ROM drive is slow, with very long loading times. The system can also play Audio CDs. All three versions of the system have no region-lock. The Neo Geo CD was launched bundled with a control pad instead of a joystick like the AES version. However, the original AES joystick can be used with all three Neo Geo CD models. + SNK + 1994 + 1994-09-09 + September 9, 1994 + Console + 1-1 + AD90E2 + 878880 + FFD400 + 0088CD + 24241E + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/neogeocdjp.xml b/themes/linear-es-de/system/metadata/neogeocdjp.xml new file mode 100644 index 000000000..67a933739 --- /dev/null +++ b/themes/linear-es-de/system/metadata/neogeocdjp.xml @@ -0,0 +1,17 @@ + + + Neo Geo CD + The Neo Geo CD (Japanese: ネオジオCD, Hepburn: Neo Jio Shī Dī) is the second home video game console of SNK Corporation's Neo Geo family, released in September 9, 1994, four years after its cartridge-based equivalent. This is the same platform, converted to the cheaper CD format retailing at $49 to $79 per title, compared to the $300 cartridges. The system was originally priced at US$399, or £399 in the UK. The unit's 1× CD-ROM drive is slow, with very long loading times. The system can also play Audio CDs. All three versions of the system have no region-lock. The Neo Geo CD was launched bundled with a control pad instead of a joystick like the AES version. However, the original AES joystick can be used with all three Neo Geo CD models. + SNK + 1994 + 1994-09-09 + September 9, 1994 + Console + 1-1 + AD90E2 + 878880 + FFD400 + 0088CD + 24241E + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/nes.xml b/themes/linear-es-de/system/metadata/nes.xml new file mode 100644 index 000000000..643ec09db --- /dev/null +++ b/themes/linear-es-de/system/metadata/nes.xml @@ -0,0 +1,18 @@ + + + Nintendo Entertainment System + The history of the Nintendo Entertainment System (NES) spans the 1982 development of the Family Computer, to the 1985 launch of the NES, to Nintendo's rise to global dominance based upon this platform throughout the late 1980s. The Family Computer (ファミリーコンピュータ) or Famicom (ファミコン) was developed in 1982 and launched in 1983 in Japan. Following the North American video game crash of 1983, the Famicom was adapted into the NES which was launched in North America in 1985. Transitioning the company from its arcade game history into this combined global 8-bit home video game console platform, the Famicom and NES continued to aggressively compete with the next-generation 16-bit consoles including the 1988 Sega Genesis. The platform was succeeded by the Super Famicom in 1990 and the Super Nintendo Entertainment System in 1991, but its support and production continued until 1995. Interest in the NES has been renewed by collectors and emulators, including Nintendo's own Virtual Console platform. + https://en.wikipedia.org/wiki/History_of_the_Nintendo_Entertainment_System + Nintendo + 1985 + 1985-10-18 + October 18, 1985 + Console + 3-4 + B93041 + CD3332 + FFFFFF + 666666 + 212121 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/ngage.xml b/themes/linear-es-de/system/metadata/ngage.xml new file mode 100644 index 000000000..ca6da083e --- /dev/null +++ b/themes/linear-es-de/system/metadata/ngage.xml @@ -0,0 +1,19 @@ + + + N-Gage + The N-Gage is a smartphone combining features of a mobile phone and a handheld game system developed by Nokia, announced on 4 November 2002 and released on 7 October 2003. It runs the original Series 60 platform on Symbian OS v6.1. + +N-Gage attempted to lure gamers away from the Game Boy Advance by including telephone functionality. This was unsuccessful, partly because the buttons, designed for a telephone, were not well-suited for gaming. The original N-Gage was described as resembling a taco, which led to its mocking nickname "taco phone". + Nokia + 2003 + 2003-10-07 + October 7th, 2003 + Portable + 3-4 + CC7236 + F6DD08 + 800000 + FF0000 + 303030 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/ngp.xml b/themes/linear-es-de/system/metadata/ngp.xml new file mode 100644 index 000000000..f64aac52e --- /dev/null +++ b/themes/linear-es-de/system/metadata/ngp.xml @@ -0,0 +1,19 @@ + + + Neo Geo Pocket + The Neo Geo Pocket is a monochrome handheld game console released by SNK. It was the company's first handheld system and is part of the Neo Geo family. It debuted in Japan in late 1998 but never saw an American release, being exclusive to Japan, Asia and Europe. + +The Neo Geo Pocket is considered to be an unsuccessful console. Lower than expected sales resulted in its discontinuation in 1999, and was immediately succeeded by the Neo Geo Pocket Color, a full color device allowing the system to compete more easily with the dominant Game Boy Color handheld, and which also saw an American release. Though the system enjoyed only a short life, there were some significant games released on the system such as Samurai Shodown, and King of Fighters R-1. + SNK + 1998 + 1998-12-31 + December 31, 1998 + Portable + 1-1 + ECA045 + B2B8BD + E92A30 + 25374A + 0F1520 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/ngpc.xml b/themes/linear-es-de/system/metadata/ngpc.xml new file mode 100644 index 000000000..1e9d4cb29 --- /dev/null +++ b/themes/linear-es-de/system/metadata/ngpc.xml @@ -0,0 +1,19 @@ + + + Neo Geo Pocket Color + The Neo Geo Pocket Color is a 16-bit color handheld video game console manufactured by SNK. It is a successor to SNK's monochrome Neo Geo Pocket handheld which debuted in 1998 in Japan, with the Color being fully backward compatible. The Neo Geo Pocket Color was released on March 16, 1999 in Japan, August 6, 1999 in North America, and on October 1, 1999 in Europe, entering markets all dominated by Nintendo, competing with Nintendo's Game Boy Color. + +After a good sales start in both the U.S. and Japan with 14 launch titles (a record at the time), subsequent low retail support in the U.S., lack of communication with third-party developers by SNK's American management, the popularity of Nintendo's Pokémon franchise and anticipation of the 32-bit Game Boy Advance, and strong competition from Bandai's WonderSwan in Japan, led to a sales decline in both regions. + SNK + 1999 + 1999-03-16 + March 16, 1999 + Portable + 1-1 + ECA045 + E92A30 + 18A94E + 1D9ED8 + 25374A + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/now-playing.xml b/themes/linear-es-de/system/metadata/now-playing.xml new file mode 100644 index 000000000..e740e0223 --- /dev/null +++ b/themes/linear-es-de/system/metadata/now-playing.xml @@ -0,0 +1,12 @@ + + + Now Playing + Quickly access and complete the games on your backlog. + Various + Various + Various + Various + Collection + 1-1 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/odyssey2.xml b/themes/linear-es-de/system/metadata/odyssey2.xml new file mode 100644 index 000000000..ea28fc808 --- /dev/null +++ b/themes/linear-es-de/system/metadata/odyssey2.xml @@ -0,0 +1,17 @@ + + + Odyssey² + The Magnavox Odyssey 2 is a second generation (1976–1992) home video game console developed and distributed by Magnavox. It was released in February 1979 in North America at a retail price of $179. The console was also released in Europe (1979), and later South America (1983), and Japan (1982). The Odyssey 2 included a full alphanumeric membrane keyboard, which was to be used for educational games, selecting options, or programming. The console was discontinued on March 20, 1984. + Magnavox & Philips + 1978 + 1978-12-01 + December 1, 1978 + Console + 3-4 + EE820D + 8C1914 + 89918F + DC3114 + F8D239 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/openbor.xml b/themes/linear-es-de/system/metadata/openbor.xml new file mode 100644 index 000000000..cbfe1e145 --- /dev/null +++ b/themes/linear-es-de/system/metadata/openbor.xml @@ -0,0 +1,17 @@ + + + Open Beats of Rage + Beats of Rage is a fan-made tribute game to Sega's Streets of Rage series. It supplants the original graphics and characters with resources taken from The King of Fighters series, albeit with tongue-in-cheek renames. Originally developed by Senile Team, the underlying engine powering Beats of Rage later went on to become the Open Beats of Rage (OpenBOR) game engine project. + Senile Team + 2003 + 2003-11 + November 2003 + Engine + 1-1 + 8BA7AE + E17930 + 407AC0 + EBE470 + 404040 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/oric.xml b/themes/linear-es-de/system/metadata/oric.xml new file mode 100644 index 000000000..11fe58aa9 --- /dev/null +++ b/themes/linear-es-de/system/metadata/oric.xml @@ -0,0 +1,17 @@ + + + Oric + Oric was the name used by UK-based Tangerine Computer Systems for a series of 6502-based home computers sold in the 1980s, primarily in Europe. With the success of the ZX Spectrum from Sinclair Research, Tangerine's backers suggested a home computer and Tangerine formed Oric Products International Ltd to develop the Oric-1. The computer was introduced in 1982.[5] During 1983, approximately 160,000 Oric-1 computers were sold in the UK, plus another 50,000 in France (where it was the year's top-selling machine). This resulted in Oric being acquired and given funding for a successor model, the 1984 Oric Atmos. + Tangerine + 1982 + 1982-09-01 + September 1, 1982 + Computer + 3-4 + 7C848D + BFB8A8 + 207EA4 + 77776D + 9E9C8F + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/palm.xml b/themes/linear-es-de/system/metadata/palm.xml new file mode 100644 index 000000000..970e0957f --- /dev/null +++ b/themes/linear-es-de/system/metadata/palm.xml @@ -0,0 +1,17 @@ + + + Palm + The PalmPilot Personal and PalmPilot Professional are the second generation of Palm PDA devices produced by Palm Inc (then a subsidiary of U.S. Robotics, later 3Com). These devices were launched on March 10, 1997 + Palm Inc + 1997 + 1997-03-10 + March 10, 1997 + OS + 1-1 + 324A42 + B2AFAC + 242443 + 345A89 + 363636 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/pc.xml b/themes/linear-es-de/system/metadata/pc.xml new file mode 100644 index 000000000..c27a81f75 --- /dev/null +++ b/themes/linear-es-de/system/metadata/pc.xml @@ -0,0 +1,21 @@ + + + IBM PC + The IBM Personal Computer (model 5150, commonly known as the IBM PC) is the first microcomputer released in the IBM PC model line and the basis for the IBM PC compatible de facto standard. Released on August 12, 1981, it was created by a team of engineers and designers directed by Don Estridge in Boca Raton, Florida. + +The machine was based on open architecture and third-party peripherals. Over time, expansion cards and software technology increased to support it. + +The PC had a substantial influence on the personal computer market. The specifications of the IBM PC became one of the most popular computer design standards in the world. The only significant competition it faced from a non-compatible platform throughout the 1980s was from the Apple Macintosh product line. The majority of modern personal computers are distant descendants of the IBM PC. + IBM + 1981 + 1981-08-12 + August 12, 1981 + Computer + 3-4 + 3161BC + 1F70C1 + FFFFFF + 666870 + 201D1D + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/pc88.xml b/themes/linear-es-de/system/metadata/pc88.xml new file mode 100644 index 000000000..6849279cf --- /dev/null +++ b/themes/linear-es-de/system/metadata/pc88.xml @@ -0,0 +1,19 @@ + + + PC-88 + The PC-8800 series (Japanese: PC-8800シリーズ, Hepburn: Pī Shī Hassen Happyaku Shirīzu), commonly shortened to PC-88, are a brand of Zilog Z80-based 8-bit home computers released by Nippon Electric Company (NEC) in 1981 and primarily sold in Japan. + +The PC-8800 series sold extremely well and became one of the four major Japanese home computers of the 1980s, along with the Fujitsu FM-7, Sharp X1 and the MSX computers. It was later eclipsed by NEC's 16-bit PC-9800 series, although it still maintained strong sales up until the early 90s. + NEC + 1981 + 1981-11 + November 1981 + Computer + 3-4 + 3C518B + B6A781 + 342B22 + 938CAA + 77B7C6 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/pc98.xml b/themes/linear-es-de/system/metadata/pc98.xml new file mode 100644 index 000000000..4277d911b --- /dev/null +++ b/themes/linear-es-de/system/metadata/pc98.xml @@ -0,0 +1,21 @@ + + + PC-98 + The NEC PC-9800 was line of personal computers developed in 1982 in Japan by NEC Corporation based on IBM, aimed exclusively at the Japanese market. + +The first model was a 16-bit architecture with an Intel 8086 processor clocked at 5 MHz and 128 KB of RAM. It shipped with graphics cards capable of displaying 8 colors at 640x400 resolution - a clear performance differentiator compared to PCs of the time. + +Initially conceived as a solution for industrial and office applications, by 1987 the PC-9801 series captured nearly 90% of the Japanese personal computer market. Over time, as power increased and graphics and sound effects were appreciated by home users (especially gamers), it also became popular for non-commercial applications - the Touhou Project series, for example, made its debut. + NEC + 1982 + 1982-10-01 + October 1, 1982 + Computer + 3-4 + 5185B2 + 951610 + 16643C + 00499A + 3B3431 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/pcarcade.xml b/themes/linear-es-de/system/metadata/pcarcade.xml new file mode 100644 index 000000000..82fbc59f3 --- /dev/null +++ b/themes/linear-es-de/system/metadata/pcarcade.xml @@ -0,0 +1,17 @@ + + + PC Arcade Games + In the beginning of the 2000s arcade system manufacturers started to move away from custom board designs, and as part of this change many instead adapted the standard PC architecture. There were numerous such designs running Linux or Windows, for instance Sega Lindbergh, Namco System N2 and Taito Type X. + Various + Various + Various + Various + Folder + 3-4 + 5B60B7 + F6DD08 + 800000 + FF0000 + 303030 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/pcengine.xml b/themes/linear-es-de/system/metadata/pcengine.xml new file mode 100644 index 000000000..fd00ed93b --- /dev/null +++ b/themes/linear-es-de/system/metadata/pcengine.xml @@ -0,0 +1,19 @@ + + + PC Engine + The PC Engine is a 16-bit fourth-generation home video game console designed by Hudson Soft and sold by NEC Home Electronics. It was released in Japan in 1987 and in North America in 1989. The Japanese model was imported and distributed in France in 1989, and the United Kingdom and Spain received a version based on the American model known as simply TurboGrafx. It was the first console released in the 16-bit era, although it used a modified 8-bit CPU. In Japan, the system was launched as a competitor to the Famicom, but the delayed United States release meant that it ended up competing with the Sega Genesis and later the Super Nintendo Entertainment System. + +The PC Engine has an 8-bit CPU, a 16-bit video color encoder, and a 16-bit video display controller. The GPUs are capable of displaying 482 colors simultaneously, out of 512. With dimensions of just 14 cm × 14 cm × 3.8 cm (5.5 in × 5.5 in × 1.5 in), the Japanese PC Engine is the smallest major home game console ever made. Games were released on HuCard cartridges and later the CD-ROM optical format. + NEC + 1987 + 1987-10-30 + October 30, 1987 + Console + 1-1 + BB3F41 + B2B2B2 + FE0000 + 333333 + D9D9D9 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/pcenginecd.xml b/themes/linear-es-de/system/metadata/pcenginecd.xml new file mode 100644 index 000000000..d887c549e --- /dev/null +++ b/themes/linear-es-de/system/metadata/pcenginecd.xml @@ -0,0 +1,19 @@ + + + PC Engine CD-ROM² + The CD-ROM² (pronounced CD-ROM-ROM) is an add-on attachment for the PC Engine that was released in Japan on December 4, 1988. The add-on allows the core versions of the console to play PC Engine games in CD-ROM format in addition to standard HuCards. This made the PC Engine the first video game console to use CD-ROMs as a storage media. The add-on consisted of two devices - the CD player itself and the interface unit, which connects the CD player to the console and provides a unified power supply and output for both. + +It was later released as the TurboGrafx-CD in the United States in November 1989, with a remodeled interface unit in order to suit the different shape of the TurboGrafx-16 console. The TurboGrafx-CD had a launch price of $399.99 and did not include any bundled games. Fighting Street and Monster Lair were the TurboGrafx-CD launch titles; Ys Book I and II soon followed. + NEC + 1988 + 1988-12-04 + December 4, 1988 + Console + 1-1 + 5E8FC8 + B2B2B2 + FE0000 + 333333 + D9D9D9 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/pcfx.xml b/themes/linear-es-de/system/metadata/pcfx.xml new file mode 100644 index 000000000..722a96809 --- /dev/null +++ b/themes/linear-es-de/system/metadata/pcfx.xml @@ -0,0 +1,19 @@ + + + PC-FX + The PC-FX is a 32-bit home video game console developed by both NEC and Hudson Soft and released in Japan in 1994. Powered by an NEC V810 CPU and using CD-ROMs, the PC-FX was intended as the successor to the PC Engine and its international counterpart the TurboGrafx-16, two successful video game consoles from the late 1980s. It is NEC's final foray into the home console market. + +The console is shaped like a tower PC and was meant to be similarly upgradeable. However the PC-FX lacked a 3D polygon-based graphics chip which rendered the system underpowered in comparison to its competitors. It was also expensive and lacked developer support, and as a result it was unable to compete effectively with its fifth generation peers. The PC-FX was NEC's last home video game console, and was discontinued in February 1998. It was considered a commercial failure. + NEC + 1994 + 1994-12-23 + December 23, 1994 + Console + 3-4 + 9378DA + FEC101 + 01015B + 5C3073 + F00020 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/pico8.xml b/themes/linear-es-de/system/metadata/pico8.xml new file mode 100644 index 000000000..6e0550779 --- /dev/null +++ b/themes/linear-es-de/system/metadata/pico8.xml @@ -0,0 +1,17 @@ + + + PICO-8 + PICO-8 is a virtual machine and game engine created by Lexaloffle Games. It is a fantasy video game console that mimics the limited graphical and sound capabilities of 8-bit systems of the 1980s. + Lexaloffle + 2015 + 2015-04 + April 2015 + Engine + 3-4 + 140C1C + E69E20 + 77DF41 + F0D7BD + DF739E + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/playdate.xml b/themes/linear-es-de/system/metadata/playdate.xml new file mode 100644 index 000000000..6370af3f8 --- /dev/null +++ b/themes/linear-es-de/system/metadata/playdate.xml @@ -0,0 +1,17 @@ + + + Playdate + Playdate is a handheld video game console developed by Panic. As well as buttons and a directional pad, the device has a mechanical crank on its side. The console was first announced on May 22, 2019 on the cover of Edge magazine, and was released on April 18, 2022. The name references its weekly release schedule of games. + Panic + 2022 + 2022-04-18 + April 18, 2022 + Portable + 4-3 + 6c00ff + 6c00ff + ffc833 + 6c00ff + ffc833 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/plus4.xml b/themes/linear-es-de/system/metadata/plus4.xml new file mode 100644 index 000000000..270d92414 --- /dev/null +++ b/themes/linear-es-de/system/metadata/plus4.xml @@ -0,0 +1,19 @@ + + + Commodore Plus/4 + The Commodore Plus/4 is a home computer released by Commodore International in 1984. The "Plus/4" name refers to the four-application ROM-resident office suite (word processor, spreadsheet, database, and graphing); it was billed as "the productivity computer with software built in". + +Internally, the Plus/4 shared the same basic architecture as the lower-end Commodore 16 and 116 models, and was able to use software and peripherals designed for them. The Plus/4 was incompatible with the Commodore 64's software and some of its hardware. Although the Commodore 64 was more established, the Plus/4 was aimed at the more business-oriented part of the personal computer market. + Commodore + 1984 + 1984 + 1984 + Computer + 3-4 + 5891AE + BBAD93 + 968971 + FD4120 + 00A0C6 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/pokemini.xml b/themes/linear-es-de/system/metadata/pokemini.xml new file mode 100644 index 000000000..51b4b713c --- /dev/null +++ b/themes/linear-es-de/system/metadata/pokemini.xml @@ -0,0 +1,17 @@ + + + Pokémon Mini + The Pokémon Mini is a handheld game console that was designed and manufactured by Nintendo and themed around the Pokémon media franchise. It is the smallest game system with interchangeable cartridges ever produced by Nintendo, weighing just under two and a half ounces (70 grams). It was first released in North America on November 16, 2001, then in Japan on December 14, 2001, and in Europe on March 15, 2002. The systems were released in three colors: Wooper Blue, Chikorita Green, and Smoochum Purple. Features of the Pokémon mini include an internal real-time clock, an infrared port used to facilitate multiplayer gaming, a reed switch for detecting shakes, and a motor used to implement force feedback. The GameCube game Pokémon Channel features playable demo versions of several Pokémon mini games via console emulation. Also included in the game is Snorlax's Lunch Time, a Pokémon Channel exclusive. Some games were only released in Japan, such as Togepi's Adventure. + Nintendo + 2001 + 2001-11-16 + November 16, 2001 + Portable + 1-1 + 3F5088 + FCE200 + 004F8A + 999998 + 8C8C8C + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/ports.xml b/themes/linear-es-de/system/metadata/ports.xml new file mode 100644 index 000000000..091907faa --- /dev/null +++ b/themes/linear-es-de/system/metadata/ports.xml @@ -0,0 +1,17 @@ + + + Ports + View and play all of your favorite game ports. + Various + Various + Various + Various + Folder + 3-4 + 3161BC + 4F5054 + 737375 + F4BE46 + E45B12 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/ps2.xml b/themes/linear-es-de/system/metadata/ps2.xml new file mode 100644 index 000000000..bf2043a3a --- /dev/null +++ b/themes/linear-es-de/system/metadata/ps2.xml @@ -0,0 +1,19 @@ + + + PlayStation 2 + The PlayStation 2 (PS2) is a home video game console developed and marketed by Sony Computer Entertainment. It was first released in Japan on March 4, 2000, in North America on October 26, 2000, in Europe on November 24, 2000, and Australia on November 24, 2000. It is the successor to the original PlayStation, as well as the second installment in the PlayStation console line-up. A sixth-generation console, it competed with Sega's Dreamcast, Nintendo's GameCube, and Microsoft's original Xbox. + +Announced in 1999, the PS2 offered backward-compatibility for its predecessor's DualShock controller, as well as its games. The PS2 is the best-selling video game console of all time, having sold over 155 million units worldwide. Over 3,800 game titles have been released for the PS2, with over 1.5 billion copies sold. Sony later manufactured several smaller, lighter revisions of the console known as Slimline models in 2004. + Sony + 2000 + 2000-03-04 + March 4, 2000 + Console + 243-340 + 2E69BE + 33438A + 0098DF + 40A9A8 + 849DCA + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/ps3.xml b/themes/linear-es-de/system/metadata/ps3.xml new file mode 100644 index 000000000..bc9022b92 --- /dev/null +++ b/themes/linear-es-de/system/metadata/ps3.xml @@ -0,0 +1,19 @@ + + + PlayStation 3 + The PlayStation 3 (PS3) is a home video game console developed by Sony Computer Entertainment. It is the successor to PlayStation 2, and is part of the PlayStation brand of consoles. It was first released on November 11, 2006 in Japan, November 17, 2006 in North America, and March 23, 2007 in Europe and Australia. The PlayStation 3 competed primarily against Microsoft's Xbox 360 and Nintendo's Wii as part of the seventh generation of video game consoles. + +The console was first officially announced at E3 2005, and was released at the end of 2006. It was the first console to use Blu-ray Disc as its primary storage medium. The console was the first PlayStation to integrate social gaming services, including the PlayStation Network, as well as the first to be controllable from a handheld console, through its remote connectivity with PlayStation Portable and PlayStation Vita. In September 2009, the Slim model of the PlayStation 3 was released. It no longer provided the hardware ability to run PS2 games. It was lighter and thinner than the original version, and featured a redesigned logo and marketing design, as well as a minor start-up change in software. A Super Slim variation was then released in late 2012, further refining and redesigning the console. + Sony + 2006 + 2006-11-11 + November 11, 2006 + Console + 3-4 + 367EDB + 94B8F2 + 1A15FF + 0095D5 + 3DD3C8 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/ps4.xml b/themes/linear-es-de/system/metadata/ps4.xml new file mode 100644 index 000000000..ed58aa085 --- /dev/null +++ b/themes/linear-es-de/system/metadata/ps4.xml @@ -0,0 +1,17 @@ + + + PlayStation 4 + The PlayStation 4 (PS4) is a home video game console developed by Sony Interactive Entertainment. Announced as the successor to the PlayStation 3 in February 2013, it was launched on November 15, 2013, in North America, November 29, 2013 in Europe, South America and Australia, and on February 22, 2014 in Japan. A console of the eighth generation, it competes with Microsoft's Xbox One and Nintendo's Wii U and Switch. + Sony + 2013 + 2013-11-15 + November 15, 2013 + Console + 3-4 + 1E74C2 + 18191E + 5B6171 + 0123A1 + EBECEE + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/psp.xml b/themes/linear-es-de/system/metadata/psp.xml new file mode 100644 index 000000000..d79638f98 --- /dev/null +++ b/themes/linear-es-de/system/metadata/psp.xml @@ -0,0 +1,19 @@ + + + PlayStation Portable + The PlayStation Portable (PSP) is a handheld game console developed and marketed by Sony Computer Entertainment. It was first released in Japan on December 12, 2004, in North America on March 24, 2005, and in PAL regions on September 1, 2005, and is the first handheld installment in the PlayStation line of consoles. As a seventh generation console it competed with the Nintendo DS. + +Development of the PSP was announced during E3 2003, and the console was unveiled at a Sony press conference on May 11, 2004. The system was the most powerful portable console when it was introduced, and was the first real competitor of Nintendo's handheld consoles after many challengers, such as Nokia's N-Gage, had failed. The PSP's advanced graphics capabilities made it a popular mobile entertainment device, which could connect to the PlayStation 2 and PlayStation 3 consoles, any computer with USB interface, other PSP systems, and the Internet. The PSP also had a vast array of multimedia features such as video playback, and so has been considered a portable media player as well. The PSP is the only handheld console to use an optical disc format – Universal Media Disc (UMD) – as its primary storage medium; both games and movies have been released on the format. + Sony + 2004 + 2004-12-12 + December 12, 2004 + Portable + 3-5 + 366DA7 + 313131 + 0F1012 + 97A9BA + F9F7F7 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/psvita.xml b/themes/linear-es-de/system/metadata/psvita.xml new file mode 100644 index 000000000..3a6fe5cd6 --- /dev/null +++ b/themes/linear-es-de/system/metadata/psvita.xml @@ -0,0 +1,17 @@ + + + PlayStation Vita + The PlayStation Vita (PS Vita, or Vita) is a handheld video game console developed and marketed by Sony Interactive Entertainment. It was first released in Japan on December 17, 2011, and in North America, Europe, and other international territories beginning on February 22, 2012. The console is the successor to the PlayStation Portable, and a part of the PlayStation brand of gaming devices; as part of the eighth generation of video game consoles, it primarily competed with the Nintendo 3DS. + Sony + 2011 + 2011-12-17 + December 17, 2011 + Portable + 3-4 + 0966BC + 03477C + 6CAAD8 + D0DFF2 + 2C2C2C + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/psx.xml b/themes/linear-es-de/system/metadata/psx.xml new file mode 100644 index 000000000..1f2a99724 --- /dev/null +++ b/themes/linear-es-de/system/metadata/psx.xml @@ -0,0 +1,19 @@ + + + PlayStation + The Sony PlayStation, or PS for short, is a fifth generation (1993–2005) home video game console developed and distributed by Sony Interactive Entertainment. It was released on December 3, 1994 in Japan at a retail price of ¥37,000. The console was later released in North America (1995), Europe (1995), Australia (1995), and Korea (1996). The PlayStation was known for standardizing disc based games over cartridges, as well as controllers with two analog sticks and vibration feedback. The console was discontinued on March 23, 2006. + +PlayStation (Japanese: プレイステーション, Hepburn: Pureisutēshon, officially abbreviated as PS) is a Japanese video game brand that consists of five home video game consoles, as well as a media center, an online service, a line of controllers, two handhelds and a phone, as well as multiple magazines. The brand is produced by Sony Interactive Entertainment, a division of Sony, with the first console releasing as the PlayStation in Japan released in December 1994, and worldwide the following year. + Sony + 1994 + 1994-12-03 + December 3, 1994 + Console + 1-1 + 858B90 + DC0029 + F1C002 + 00A79B + 326BB1 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/pv1000.xml b/themes/linear-es-de/system/metadata/pv1000.xml new file mode 100644 index 000000000..ac73c8356 --- /dev/null +++ b/themes/linear-es-de/system/metadata/pv1000.xml @@ -0,0 +1,21 @@ + + + PV-1000 + The Casio PV-1000 (ぴーぶいせん, Pi Bui-Sen) is a third-generation home video game console manufactured by Casio and released in Japan in 1983. It was discontinued less than a year after release. + +The PV-1000 was released in October 1983. It was only released in Japan where it sold for 14,800 yen. Casio failed to achieve a significant market share. According to retrogames.co.uk the console was pulled after several weeks; due to low sales. + +The PV-1000 is powered by a Zilog Z80 CPU, with 2 KB RAM, with 1 KB allocated as VRAM. It also has an additional 1 KB devoted to a character generator. Graphics were provided by a Texas Instruments TMS9918, generating a 256x192 pixel resolution with 8 colours. The console contains a NEC D65010G031 chip used to output video and sound. It had three square wave voices with 6 bits to control the period. + Casio + 1983 + 1983-10-01 + October 1, 1983 + Console + 3-4 + 972F32 + 2A4E78 + 4FBBB2 + DCD9D1 + D13931 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/quake.xml b/themes/linear-es-de/system/metadata/quake.xml new file mode 100644 index 000000000..32a68e976 --- /dev/null +++ b/themes/linear-es-de/system/metadata/quake.xml @@ -0,0 +1,17 @@ + + + Quake + Quake is a first-person shooter game developed by id Software and published by GT Interactive. The first game in the Quake series, it was originally released for MS-DOS, Microsoft Windows and Linux in 1996, followed by Mac OS and Sega Saturn in 1997 and Nintendo 64 in 1998. In the game, players must find their way through various maze-like, medieval environments while battling monsters using an array of weaponry. The overall atmosphere is dark and gritty, with many stone textures and a rusty, capitalized font. Quake takes inspiration from gothic fiction and the works of H. P. Lovecraft. + id Software + 1996 + 1996-06-22 + June 22, 1996 + Engine + 3-4 + B32E34 + 905630 + 6A3822 + 3A0901 + 111111 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/samcoupe.xml b/themes/linear-es-de/system/metadata/samcoupe.xml new file mode 100644 index 000000000..7ad1de4d1 --- /dev/null +++ b/themes/linear-es-de/system/metadata/samcoupe.xml @@ -0,0 +1,17 @@ + + + SAM Coupé + The SAM Coupé (pronounced /sæm ku:peɪ/ from its original British English branding) is an 8-bit British home computer that was first released in late 1989. It was based on and designed to have compatibility with the ZX Spectrum 48K and marketed as a logical upgrade from the Spectrum. It was originally manufactured by Miles Gordon Technology (MGT), based in Swansea in the United Kingdom. + MGT + 1989 + 1989 + 1989 + Computer + 3-4 + 597FC1 + 2A46A5 + C60000 + D3D8D3 + 96958C + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/satellaview.xml b/themes/linear-es-de/system/metadata/satellaview.xml new file mode 100644 index 000000000..1427bf241 --- /dev/null +++ b/themes/linear-es-de/system/metadata/satellaview.xml @@ -0,0 +1,17 @@ + + + Satellaview + The Satellaview is a satellite modem peripheral for Nintendo's Super Famicom system that was released in Japan in 1995. Available for pre-release orders beginning February 13, 1995, the Satellaview retailed for between ¥14,000 and 18,000 (at the time between USD$141 and 182) and came bundled with the BS-X Game Pak and an 8M Memory Pak. The Satellaview system was developed and released by Nintendo to receive signals broadcast from satellite TV station WOWOW's satellite radio subsidiary, St.GIGA. St.GIGA was responsible for file server management, maintenance, and vocalization for "SoundLink" games. Nintendo data broadcasts were given a fixed time slot known as the Super Famicom Hour during which scrambled Satellaview-related data was streamed via radio waves to be unscrambled by St.GIGA's "BS digital hi-vision TV." As a subscription-based station for ambient and New Age music, St.GIGA listeners were already equipped with "BS tuners" prior to St.GIGA's contract with Nintendo. Satellaview owners who lacked a "BS tuner" had to purchase one separately from St.GIGA at a price of ¥33,000, as well as sign up for Nintendo's and St.GIGA's monthly joint membership fees. Alternatively, users could rent "BS tuners" from St.GIGA for a 6-month period at a price of ¥5,400. Even at this premium price, St.GIGA reported subscriptions peaking at 116,378 households by March 1997, and dropping to around 46,000 by June 2001. + Nintendo + 1995 + 1995-04-23 + April 23, 1995 + Peripheral + 3-4 + D3AF41 + 37336C + CD2943 + FFDF68 + 647A54 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/saturn.xml b/themes/linear-es-de/system/metadata/saturn.xml new file mode 100644 index 000000000..67b1b910e --- /dev/null +++ b/themes/linear-es-de/system/metadata/saturn.xml @@ -0,0 +1,19 @@ + + + Sega Saturn + The Sega Saturn is a home video game console developed by Sega and released on November 22, 1994 in Japan, May 11, 1995 in North America, and July 8, 1995 in Europe. Part of the fifth generation of video game consoles, it was the successor to the successful Sega Genesis. The Saturn has a dual-CPU architecture and eight processors. Its games are in CD-ROM format, and its game library contains several ports of arcade games as well as original games. + +Development of the Saturn began in 1992, the same year Sega's groundbreaking 3D Model 1 arcade hardware debuted. The Saturn was designed around a new CPU from Japanese electronics company Hitachi. Sega added another video display processor in early 1994 to better compete with Sony's forthcoming PlayStation. + Sega + 1995 + 1995-05-11 + May 11, 1995 + Console + 1-1 + 597BD8 + 0D7176 + D1AE44 + 2740A5 + 86254A + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/saturnjp.xml b/themes/linear-es-de/system/metadata/saturnjp.xml new file mode 100644 index 000000000..823ceecba --- /dev/null +++ b/themes/linear-es-de/system/metadata/saturnjp.xml @@ -0,0 +1,19 @@ + + + Sega Saturn + The Sega Saturn is a home video game console developed by Sega and released on November 22, 1994 in Japan, May 11, 1995 in North America, and July 8, 1995 in Europe. Part of the fifth generation of video game consoles, it was the successor to the successful Sega Genesis. The Saturn has a dual-CPU architecture and eight processors. Its games are in CD-ROM format, and its game library contains several ports of arcade games as well as original games. + +Development of the Saturn began in 1992, the same year Sega's groundbreaking 3D Model 1 arcade hardware debuted. The Saturn was designed around a new CPU from Japanese electronics company Hitachi. Sega added another video display processor in early 1994 to better compete with Sony's forthcoming PlayStation. + Sega + 1994 + 1994-11-22 + November 22, 1994 + Console + 1-1 + 597BD8 + 4FA66A + FDE862 + 2E5CCF + BD3786 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/scummvm.xml b/themes/linear-es-de/system/metadata/scummvm.xml new file mode 100644 index 000000000..5a6ecf477 --- /dev/null +++ b/themes/linear-es-de/system/metadata/scummvm.xml @@ -0,0 +1,17 @@ + + + ScummVM + Script Creation Utility for Maniac Mansion Virtual Machine (ScummVM) is a set of game engine recreations. Originally designed to play LucasArts adventure games that use the SCUMM system, it also supports a variety of non-SCUMM games by companies like Revolution Software and Adventure Soft. It was originally written by Ludvig Strigeus. Released under the terms of the GNU General Public License, ScummVM is free software. ScummVM is a reimplementation of the part of the software used to interpret the scripting languages such games used to describe the game world rather than emulating the hardware the games ran on; as such, ScummVM allows the games it supports to be played on platforms other than those for which they were originally released. + ScummVM + 2001 + 2001-10-05 + October 5, 2001 + Engine + 3-4 + 4DBD51 + FFEB32 + F17C38 + EFEDE3 + 95C93E + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/scv.xml b/themes/linear-es-de/system/metadata/scv.xml new file mode 100644 index 000000000..713001f9a --- /dev/null +++ b/themes/linear-es-de/system/metadata/scv.xml @@ -0,0 +1,17 @@ + + + Super Cassette Vision + Epoch's original Cassette Vision was introduced in Japan by Epoch in 1981, which had steady sales and took over 70% of the Japanese home console market at the time, with around 400,000 units sold. However, the introduction of next-generation systems from Nintendo, Casio and Sega quickly pushed back the original Cassette Vision, leading Epoch to quickly develop a successor. The Super Cassette Vision was released in 1984 at a cost of ¥14,800 yen, featuring an 8-bit processor and better performance more in line with its competitors. It was later released in France by ITMC under the Yeno branding. At least 16 games were brought over from Japan for a European release. A version of the system targeted the young female market, the Super Lady Cassette Vision. The console came packed in a pink carrying case, alongside the game Milky Princess. The system did not take off, and was unable to match the massive popularity of the Nintendo Famicom, leading Epoch to drop out of the console market by 1987. + Epoch Co. + 1984 + 1984-07-17 + July 17, 1984 + Console + 4-3 + 6D9D4D + FF8300 + 56A0A2 + F8EA32 + FF5700 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/sega32x.xml b/themes/linear-es-de/system/metadata/sega32x.xml new file mode 100644 index 000000000..1647be379 --- /dev/null +++ b/themes/linear-es-de/system/metadata/sega32x.xml @@ -0,0 +1,19 @@ + + + Mega Drive 32X + The 32X is an add-on for the Sega Mega Drive/Genesis video game console. Codenamed "Project Mars", the 32X was designed to expand the power of the Mega Drive/Genesis and serve as a transitional console into the 32-bit era until the release of the Sega Saturn. Independent of the console, the 32X uses its own ROM cartridges and has its own library of games. It was distributed under the name Super 32X in Japan, Genesis 32X in North America, Mega Drive 32X in the PAL region, and Mega 32X in Brazil. + +Unveiled by Sega at June 1994's Consumer Electronics Show, the 32X was presented as a low-cost option for consumers looking to play 32-bit games. It was developed in response to the Atari Jaguar and concerns that the Saturn would not make it to market by the end of 1994. Though it was conceived as an entirely new console, at the suggestion of Sega of America executive Joe Miller and his team, it was converted into an add-on for the Genesis and made more powerful. The final design contained two 32-bit central processing units and a 3D graphics processor. + Sega + 1994 + 1994-12-03 + December 3, 1994 + Peripheral + 3-4 + 0C7BCB + DCE3E6 + D5202C + C0C1C4 + 212122 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/sega32xjp.xml b/themes/linear-es-de/system/metadata/sega32xjp.xml new file mode 100644 index 000000000..450d6a83f --- /dev/null +++ b/themes/linear-es-de/system/metadata/sega32xjp.xml @@ -0,0 +1,19 @@ + + + Super 32X + The 32X is an add-on for the Sega Mega Drive/Genesis video game console. Codenamed "Project Mars", the 32X was designed to expand the power of the Mega Drive/Genesis and serve as a transitional console into the 32-bit era until the release of the Sega Saturn. Independent of the console, the 32X uses its own ROM cartridges and has its own library of games. It was distributed under the name Super 32X in Japan, Genesis 32X in North America, Mega Drive 32X in the PAL region, and Mega 32X in Brazil. + +Unveiled by Sega at June 1994's Consumer Electronics Show, the 32X was presented as a low-cost option for consumers looking to play 32-bit games. It was developed in response to the Atari Jaguar and concerns that the Saturn would not make it to market by the end of 1994. Though it was conceived as an entirely new console, at the suggestion of Sega of America executive Joe Miller and his team, it was converted into an add-on for the Genesis and made more powerful. The final design contained two 32-bit central processing units and a 3D graphics processor. + Sega + 1994 + 1994-12-03 + December 3, 1994 + Peripheral + 3-4 + 0C7BCB + 6177B3 + 1D46A5 + F2BA5C + FBE627 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/sega32xna.xml b/themes/linear-es-de/system/metadata/sega32xna.xml new file mode 100644 index 000000000..b4ca8164b --- /dev/null +++ b/themes/linear-es-de/system/metadata/sega32xna.xml @@ -0,0 +1,19 @@ + + + Sega 32X + The 32X is an add-on for the Sega Mega Drive/Genesis video game console. Codenamed "Project Mars", the 32X was designed to expand the power of the Mega Drive/Genesis and serve as a transitional console into the 32-bit era until the release of the Sega Saturn. Independent of the console, the 32X uses its own ROM cartridges and has its own library of games. It was distributed under the name Super 32X in Japan, Genesis 32X in North America, Mega Drive 32X in the PAL region, and Mega 32X in Brazil. + +Unveiled by Sega at June 1994's Consumer Electronics Show, the 32X was presented as a low-cost option for consumers looking to play 32-bit games. It was developed in response to the Atari Jaguar and concerns that the Saturn would not make it to market by the end of 1994. Though it was conceived as an entirely new console, at the suggestion of Sega of America executive Joe Miller and his team, it was converted into an add-on for the Genesis and made more powerful. The final design contained two 32-bit central processing units and a 3D graphics processor. + Sega + 1994 + 1994-11-21 + November 21, 1994 + Peripheral + 3-4 + 0C7BCB + 0084E2 + ED0A0A + FFE607 + 212122 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/segacd.xml b/themes/linear-es-de/system/metadata/segacd.xml new file mode 100644 index 000000000..53d133079 --- /dev/null +++ b/themes/linear-es-de/system/metadata/segacd.xml @@ -0,0 +1,19 @@ + + + Sega CD + The Sega CD, released as the Mega-CD in most regions outside North America and Brazil, is a CD-ROM accessory for the Mega Drive/Genesis designed and produced by Sega as part of the fourth generation of video game consoles. It was released on December 12, 1991 in Japan, October 15, 1992 in North America, and April 2, 1993 in Europe. The Sega CD plays CD-based games and adds hardware functionality such as a faster central processing unit and graphic enhancements like sprite scaling and rotation. It can also play audio CDs and CD+G discs. + +The main benefit of CD technology was greater storage, which allowed for games to be nearly 320 times larger than Genesis cartridges. This benefit manifested as full motion video (FMV) games such as the controversial Night Trap, which became a focus of the 1993 congressional hearings on issues of video game violence and ratings. Sega of Japan partnered with JVC to design the Sega CD and refused to consult with Sega of America until the project was complete. Sega of America assembled parts from various "dummy" units to obtain a working prototype. It was redesigned several times by Sega and licensed third-party developers. + Sega + 1992 + 1992-10-15 + October 15, 1992 + Peripheral + 3-4 + 0C7BCB + 4B95D1 + 2B83C5 + B2AE85 + 212122 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/sfc.xml b/themes/linear-es-de/system/metadata/sfc.xml new file mode 100644 index 000000000..b4c220c91 --- /dev/null +++ b/themes/linear-es-de/system/metadata/sfc.xml @@ -0,0 +1,17 @@ + + + Super Famicom + The Super Famicom is a 16-bit home video game console developed by Nintendo that was released in 1990 in Japan, 1991 in North America, 1992 in Europe and Australasia (Oceania), and 1993 in South America. + Nintendo + 1990 + 1990-11-21 + November 21, 1990 + Console + 3-5 + 3F549D + FED01B + BA2318 + 0A2A8D + 007544 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/sg-1000.xml b/themes/linear-es-de/system/metadata/sg-1000.xml new file mode 100644 index 000000000..4427741ea --- /dev/null +++ b/themes/linear-es-de/system/metadata/sg-1000.xml @@ -0,0 +1,19 @@ + + + SG-1000 + The SG-1000 is a home video game console manufactured by Sega and released in Japan, Australia, New Zealand, and other regions. It was Sega's first entry into the home video game hardware business. Introduced in 1983, the SG-1000 was released on the same day that Nintendo released the Family Computer in Japan. The SG-1000 was released in several forms, including the SC-3000 computer and the redesigned SG-1000 II released in 1984. A third iteration of the console, the Sega Mark III, was released in 1985. It provided a custom video display processor over previous iterations and served as the basis for the Master System in 1986, Sega's first internationally released console. + +Developed in response to a downturn in arcades in 1982, the SG-1000 was created on the advice of Hayao Nakayama, president of Sega Enterprises, Ltd. Shortly after the release, Sega Enterprises was sold to CSK Corporation, which was followed by the release of the SG-1000 II. The SC-3000 and the SG-1000 line both support a library of 76 ROM cartridge games and 29 Sega My Card games, all of which are fully compatible with the Mark III and the Japanese version of the Master System. + Sega + 1983 + 1983-07-15 + July 15, 1983 + Console + 3-4 + 48589F + FF0000 + 17569B + D4D6C9 + 1A1E21 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/sgb.xml b/themes/linear-es-de/system/metadata/sgb.xml new file mode 100644 index 000000000..29bc84dea --- /dev/null +++ b/themes/linear-es-de/system/metadata/sgb.xml @@ -0,0 +1,21 @@ + + + Super Game Boy + The Super Game Boy (スーパーゲームボーイ, Sūpā Gēmu Bōi) is a peripheral that allows Game Boy cartridges to be played on a Super Nintendo Entertainment System console, compatible with the same cartridges as the original Game Boy: original Game Boy cartridges, the Game Boy Camera, and dual-mode Game Boy Color cartridges (in Game Boy-mode). + +The unit could map the four shades of green to various colors on the screen. Later Game Boy games that were optimized to use the Super Game Boy had additional color information and could override the on-screen colors, display a graphical border around the screen, and display special background sprites. Those games would have printed a small "Super Game Boy Game Pak" logo on the box and cartridge. The adaptor could support up to 64 colors for the border, and 12 colors for the screen. Static screens could display all 10 colors. Certain games can load multiple borders depending on the player's location in the game. + +It is also possible for Super Game Boy games to make use of the Super NES hardware for extra effects: these games had expanded sound when used with the Super Game Boy. Some titles even allowed the second Super NES controller to be used for two-player action; using the Super Multitap, some games even supported four players. + Nintendo + 1994 + 1994-06-28 + June 28, 1994 + Peripheral + 1-1 + 40518A + 30308F + D9D9D9 + EA2427 + A3A3A3 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/snes.xml b/themes/linear-es-de/system/metadata/snes.xml new file mode 100644 index 000000000..9b91ff5f9 --- /dev/null +++ b/themes/linear-es-de/system/metadata/snes.xml @@ -0,0 +1,17 @@ + + + Super Nintendo Entertainment System + The Super Nintendo Entertainment System (also known as the Super NES, SNES or Super Nintendo) is a 16-bit home video game console developed by Nintendo that was released in 1990 in Japan, 1991 in North America, 1992 in Europe and Australasia (Oceania), and 1993 in South America. In Japan, the system is called the Super Famicom, officially adopting the abbreviated name of its predecessor, the Family Computer, or SFC for short. In South Korea, it is known as the Super Comboy and was distributed by Hyundai Electronics. Although each version is essentially the same, several forms of regional lockout prevent the different versions from being compatible with one another. + Nintendo + 1992 + 1992-04-11 + April 11, 1992 + Console + 4-3 + 3F549D + FED01B + BA2318 + 0A2A8D + 007544 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/snesna.xml b/themes/linear-es-de/system/metadata/snesna.xml new file mode 100644 index 000000000..ea8bef4e0 --- /dev/null +++ b/themes/linear-es-de/system/metadata/snesna.xml @@ -0,0 +1,17 @@ + + + Super Nintendo Entertainment System + The Super Nintendo Entertainment System (also known as the Super NES, SNES or Super Nintendo) is a 16-bit home video game console developed by Nintendo that was released in 1990 in Japan, 1991 in North America, 1992 in Europe and Australasia (Oceania), and 1993 in South America. In Japan, the system is called the Super Famicom, officially adopting the abbreviated name of its predecessor, the Family Computer, or SFC for short. In South Korea, it is known as the Super Comboy and was distributed by Hyundai Electronics. Although each version is essentially the same, several forms of regional lockout prevent the different versions from being compatible with one another. + Nintendo + 1991 + 1991-08-23 + August 23, 1991 + Console + 4-3 + 7365B0 + A59EF7 + 47449E + CCCCCC + 4C4C4C + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/solarus.xml b/themes/linear-es-de/system/metadata/solarus.xml new file mode 100644 index 000000000..e07541a05 --- /dev/null +++ b/themes/linear-es-de/system/metadata/solarus.xml @@ -0,0 +1,25 @@ + + + Solarus + Solarus was specifically designed with cult 2D action-RPG classics in mind, such as The Legend of Zelda: A Link to the Past and Secret of Mana on the Super Nintendo, or Soleil on the Sega Megadrive/Genesis. + +The engine is programmed in C++, with the SDL library and an OpenGL backend. Games made with Solarus are called quests, and are programmed in Lua. + +The engine does all the heavy computations (for example, collision checks) and the low-level operations like drawing the screen, animating sprites and playing sounds. + +As a quest maker, you are not much interested in implementing these algorithms. On the contrary, you want to define the game logic. Your Lua scripts describe the behavior of enemies, what happens when pressing a switch on a specific map. They will also implement such things as the title screen and the head-up display. + +Both parts (the C++ engine and the Lua scripts of your quest) communicate through the Solarus Lua API. The communication works in both ways: you can call functions of the engine (example: you want to move a non-playing character) and the engine calls your own functions (example: be informed that an enemy was just killed). But before using this Solarus API, you have to learn the basics of Lua (easy and minimal, yet powerful language). + Christopho + 2021 + 2021-04-06 + April 6, 2021 + Engine + 1-1 + 271658 + 37336C + CD2943 + FFDF68 + 647A54 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/spectravideo.xml b/themes/linear-es-de/system/metadata/spectravideo.xml new file mode 100644 index 000000000..4d6dbc7f4 --- /dev/null +++ b/themes/linear-es-de/system/metadata/spectravideo.xml @@ -0,0 +1,17 @@ + + + Spectravideo + Spectravideo International Limited (SVI) was an American computer manufacturer and software house. It was originally called SpectraVision, a company founded by Harry Fox in 1981. The company produced video games and other software for the VIC-20 home computer, the Atari 2600 home video game console, and its CompuMate peripheral. Some of their own computers were compatible with the Microsoft MSX or the IBM PC. + Spectravideo + 1983 + 1983 + 1983 + Console + 3-4 + C12E3D + B74E6C + C23435 + D17733 + E9E439 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/steam.xml b/themes/linear-es-de/system/metadata/steam.xml new file mode 100644 index 000000000..7d08d9656 --- /dev/null +++ b/themes/linear-es-de/system/metadata/steam.xml @@ -0,0 +1,17 @@ + + + Steam + Steam is a video game digital distribution service and storefront by Valve. It was launched as a software client in September 2003 as a way for Valve to provide automatic updates for their games, and expanded to distributing and offering third-party game publishers' titles in late 2005. + Valve + 2003 + 2003-09-12 + September 12, 2003 + Folder + 3-4 + 215D90 + 2F3B50 + 0A7CAF + EEEEEE + 2A2E33 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/stratagus.xml b/themes/linear-es-de/system/metadata/stratagus.xml new file mode 100644 index 000000000..73e0cde4c --- /dev/null +++ b/themes/linear-es-de/system/metadata/stratagus.xml @@ -0,0 +1,15 @@ + + + Stratagus is a free and open-source cross-platform game engine used to build real-time strategy video games. Licensed under the GNU GPL-2.0-only,[2] it is written mostly in C++ with the configuration language being Lua. + Stratagus Team + 1998 + 1998-06-15 + June 15, 1998 + Engine + CE3D3D + A40000 + DB4C4C + F57900 + 26353C + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/stv.xml b/themes/linear-es-de/system/metadata/stv.xml new file mode 100644 index 000000000..df5a4ba01 --- /dev/null +++ b/themes/linear-es-de/system/metadata/stv.xml @@ -0,0 +1,19 @@ + + + ST-V + ST-V (Sega Titan Video) is an arcade system board released by Sega, in 1994 for Japan and 1995 worldwide. Departing from their usual process of building custom arcade hardware, Sega's ST-V is essentially identical to the Sega Saturn home console system. The only difference is the media; ST-V used ROM cartridges instead of CD-ROM discs to store games, with the exception of Sports Fishing 2. Being derived from the Saturn hardware, the ST-V was presumably named after the moon Titan, a satellite of Saturn. + +The majority of ST-V titles were released only in Japan, but a notable exception was the port of Dynamite Deka, which became Die Hard Arcade. Games released for the ST-V include the arcade versions of Virtua Fighter Remix, Radiant Silvergun, Golden Axe: The Duel, and Final Fight Revenge. The shared hardware between Saturn and ST-V allowed for very "pure" ports for the Saturn console. + Sega + 1994 + 1994 + 1994 + Arcade + 3-4 + 4A529D + 034693 + F7ED18 + F4133D + 199A40 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/sufami.xml b/themes/linear-es-de/system/metadata/sufami.xml new file mode 100644 index 000000000..d998a95fa --- /dev/null +++ b/themes/linear-es-de/system/metadata/sufami.xml @@ -0,0 +1,21 @@ + + + SuFami Turbo + The SuFami Turbo (スーファミターボ), often compared to the Aladdin Deck Enhancer, is an accessory released by Bandai for Nintendo's Super Famicom system and was released in 1996. + +This device is designed to sit on top of the Super Famicom, and features two cartridge slots. The premise is that games could be produced at a much lower cost and development time, not having to rely on Nintendo for cartridge production. Unlike the Aladdin Deck Enhancer, this device was officially approved by Nintendo under the provision that Bandai handle all the hardware manufacturing itself. + +The two cartridge slots are designed to share data between the games. The cartridge placed in slot 1 is the game that will be played, while the cartridge in slot 2 supplies additional data for use in the main game. Of the thirteen games released, nine of them can link up, within each game series. + Bandai + 1996 + 1996-06-28 + June 28, 1996 + Peripheral + 3-5 + 3F549D + FF0000 + EDDFDE + A0C0CF + 1E2881 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/supergrafx.xml b/themes/linear-es-de/system/metadata/supergrafx.xml new file mode 100644 index 000000000..541dafe1e --- /dev/null +++ b/themes/linear-es-de/system/metadata/supergrafx.xml @@ -0,0 +1,19 @@ + + + SuperGrafx + The PC Engine SuperGrafx (PCエンジンスーパーグラフィックス, Pī Shī Enjin SūpāGurafikkusu), also known as simply the SuperGrafx, is a fourth-generation home video game console manufactured by NEC Home Electronics and released in Japan and France in 1989. It is the successor system to the PC Engine, released two years prior. Originally known as the PC Engine 2 during production stages, it was purported as a true 16-bit home console, featuring improved graphics and audio capabilities over its predecessor. + +The console was rushed to market, released several months before its initial release date of 1990, only having modest updates to the hardware. With only six retail games released that took advantage of the console's hardware updates, the SuperGrafx was a commercial failure, selling only 75,000 units total in both regions. None of the hardware advancements it possessed were carried over to NEC's later consoles, such as the TurboDuo. + NEC + 1989 + 1989-12-08 + December 8, 1989 + Console + 1-1 + 69b5dc + B2B2B2 + 0091AD + 000000 + D9D9D9 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/supervision.xml b/themes/linear-es-de/system/metadata/supervision.xml new file mode 100644 index 000000000..a93da5916 --- /dev/null +++ b/themes/linear-es-de/system/metadata/supervision.xml @@ -0,0 +1,17 @@ + + + Supervision + The Watara Supervision, also known as the QuickShot Supervision in the UK, is a monochrome handheld game console, originating from Asia, and introduced in 1992 as a cut-price competitor for Nintendo's Game Boy. It came packaged with a game called Crystball, which is similar to Breakout. One unique feature of the Supervision was that it could be linked up to a television via a link cable. Games played in this way would display in four colors, much like Nintendo's Super Game Boy add-on for the SNES. A full color TV link was also in the works, but because of the Supervision's failure to make a major impression among gamers it was cancelled, along with the games which were in development for it. + Watara + 1992 + 1992-12-31 + December 31, 1992 + Portable + 3-4 + 2ba9a0 + 000000 + 718E2C + 9A9A9A + 00FFEE + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/supracan.xml b/themes/linear-es-de/system/metadata/supracan.xml new file mode 100644 index 000000000..6079eea7a --- /dev/null +++ b/themes/linear-es-de/system/metadata/supracan.xml @@ -0,0 +1,17 @@ + + + Super A'can + The Super A'can is a home video game console released exclusively in Taiwan in 1995 by Funtech/Dunhuang Technology. It is based around the Motorola 68000 microchip, which is also used in the Sega Genesis and Neo Geo. Twelve games have been confirmed to exist for the system. + Funtech + 1995 + 1995-10-25 + October 25, 1995 + Console + 3-4 + 0DBD91 + F6DD08 + 800000 + FF0000 + 303030 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/switch.xml b/themes/linear-es-de/system/metadata/switch.xml new file mode 100644 index 000000000..467918533 --- /dev/null +++ b/themes/linear-es-de/system/metadata/switch.xml @@ -0,0 +1,17 @@ + + + Nintendo Switch + The Nintendo Switch is an eighth generation (2012-present) home video game console developed and distributed by Nintendo. It was released on March 3, 2017 in North America at a retail price of $299.99. The console was simultaneously released in Japan (2017), Europe (2017), South America (2017), Australia (2017) and other World Wide Markets (2017). The Switch is designed to be a hybrid console, allowing games to be played at a TV, and then on the go by undocking the system and playing from the handheld unit itself. As of this date, the console is still in production. + Nintendo + 2017 + 2017-03-03 + March 3, 2017 + Console + 3-5 + F95651 + DA4A4B + 65BADE + 000000 + EBECEE + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/symbian.xml b/themes/linear-es-de/system/metadata/symbian.xml new file mode 100644 index 000000000..d30b7b5d6 --- /dev/null +++ b/themes/linear-es-de/system/metadata/symbian.xml @@ -0,0 +1,17 @@ + + + Symbian + Symbian is a discontinued mobile operating system (OS) and computing platform designed for smartphones. It was originally developed as a proprietary software OS for personal digital assistants in 1998 by the Symbian Ltd. consortium. Symbian OS is a descendant of Psion's EPOC, and was released exclusively on ARM processors, although an unreleased x86 port existed. Symbian was used by many major mobile phone brands, like Samsung, Motorola, Sony Ericsson, and above all by Nokia. It was also prevalent in Japan by brands including Fujitsu, Sharp and Mitsubishi. As a pioneer that established the smartphone industry, it was the most popular smartphone OS on a worldwide average until the end of 2010, at a time when smartphones were in limited use, when it was overtaken by iOS and Android. It was notably less popular in North America. + Symbian Ltd. + 1997 + 1997-06-05 + June 5, 1997 + OS + 1-1 + 222222 + 0082B5 + FBAB18 + 1F4394 + EE3537 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/tanodragon.xml b/themes/linear-es-de/system/metadata/tanodragon.xml new file mode 100644 index 000000000..9c6a4466c --- /dev/null +++ b/themes/linear-es-de/system/metadata/tanodragon.xml @@ -0,0 +1,17 @@ + + + Tano Dragon + The Dragon 32 and Dragon 64 are home computers that were built in the 1980s. The Dragons are very similar to the TRS-80 Color Computer, and were produced for the European market by Dragon Data, Ltd., initially in Swansea, Wales before moving to Port Talbot, Wales (until 1984) and by Eurohard S.A. in Casar de Cáceres, Spain (from 1984 to 1987), and for the US market by Tano of New Orleans, Louisiana. The model numbers reflect the primary difference between the two machines, which have 32 and 64 kilobytes of RAM, respectively. + Dragon Data, Ltd. + 1984 + 1984 + 1984 + Computer + 3-4 + 309496 + F50019 + FBFA35 + 74B719 + 3262D9 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/tg-cd.xml b/themes/linear-es-de/system/metadata/tg-cd.xml new file mode 100644 index 000000000..3280c92e7 --- /dev/null +++ b/themes/linear-es-de/system/metadata/tg-cd.xml @@ -0,0 +1,19 @@ + + + TurboGrafx-CD + The CD-ROM² (pronounced CD-ROM-ROM) is an add-on attachment for the PC Engine that was released in Japan on December 4, 1988. The add-on allows the core versions of the console to play PC Engine games in CD-ROM format in addition to standard HuCards. This made the PC Engine the first video game console to use CD-ROMs as a storage media. The add-on consisted of two devices - the CD player itself and the interface unit, which connects the CD player to the console and provides a unified power supply and output for both. + +It was later released as the TurboGrafx-CD in the United States in November 1989, with a remodeled interface unit in order to suit the different shape of the TurboGrafx-16 console. The TurboGrafx-CD had a launch price of $399.99 and did not include any bundled games. Fighting Street and Monster Lair were the TurboGrafx-CD launch titles; Ys Book I and II soon followed. + NEC + 1989 + 1989-11-01 + November 1, 1989 + Console + 1-1 + F2984B + F79226 + D5E14D + 604832 + 1E1C1A + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/tg16.xml b/themes/linear-es-de/system/metadata/tg16.xml new file mode 100644 index 000000000..4c78fc03d --- /dev/null +++ b/themes/linear-es-de/system/metadata/tg16.xml @@ -0,0 +1,19 @@ + + + TurboGrafx-16 + The TurboGrafx-16, known as the PC Engine in Japan and France, is a 16-bit fourth-generation home video game console designed by Hudson Soft and sold by NEC Home Electronics. It was released in Japan in 1987 and in North America in 1989. The Japanese model was imported and distributed in France in 1989, and the United Kingdom and Spain received a version based on the American model known as simply TurboGrafx. It was the first console released in the 16-bit era, although it used a modified 8-bit CPU. In Japan, the system was launched as a competitor to the Famicom, but the delayed United States release meant that it ended up competing with the Sega Genesis and later the Super Nintendo Entertainment System. + +The TurboGrafx-16 has an 8-bit CPU, a 16-bit video color encoder, and a 16-bit video display controller. The GPUs are capable of displaying 482 colors simultaneously, out of 512. With dimensions of just 14 cm × 14 cm × 3.8 cm (5.5 in × 5.5 in × 1.5 in), the Japanese PC Engine is the smallest major home game console ever made. Games were released on HuCard cartridges and later the CD-ROM optical format with the TurboGrafx-CD add-on. + NEC + 1989 + 1989-08-29 + August 29, 1989 + Console + 3-4 + F2984B + F79226 + ECF332 + FD5A17 + D5E14D + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/ti99.xml b/themes/linear-es-de/system/metadata/ti99.xml new file mode 100644 index 000000000..1be425473 --- /dev/null +++ b/themes/linear-es-de/system/metadata/ti99.xml @@ -0,0 +1,19 @@ + + + TI-99/4 + The TI-99/4 is a home computer released in late 1979 by Texas Instruments. Based on the Texas Instruments TMS9900 microprocessor originally used in minicomputers, it was the first 16-bit home computer. The associated video display controller provides color graphics and among the best sprite support of its era. + +It includes a simplified internal design, a full-travel keyboard, improved graphics, and a unique expansion system. At half the price of the original model, sales picked up significantly. TI supported the 4A with peripherals, including a speech synthesizer and a "Peripheral Expansion System" box to contain hardware add-ons. TI released developer information and tools, but the insistence on remaining sole publisher continued to starve the platform of software. + Texas Instruments + 1981 + 1981-06 + June 1981 + Computer + 1-1 + 5E6064 + AAA6A7 + C7C2BE + 1F1F1F + FD7F34 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/tic80.xml b/themes/linear-es-de/system/metadata/tic80.xml new file mode 100644 index 000000000..aa55a3509 --- /dev/null +++ b/themes/linear-es-de/system/metadata/tic80.xml @@ -0,0 +1,17 @@ + + + TIC-80 + TIC-80 is a free and open source fantasy computer for making, playing and sharing tiny games. There are built-in tools for development: code, sprites, maps, sound editors and the command line, which is enough to create a mini retro game. At the exit you will get a cartridge file, which can be stored and played on the website. Also, the game can be packed into a player that works on all popular platforms and distribute as you wish. To make a retro styled game the whole process of creation takes place under some technical limitations: 240x136 pixels display, 16 color palette, 256 8x8 color sprites, 4 channel sound and etc. + Vadim Grigoruk + 2017 + 2017 + 2017 + Engine + 1-1 + 140C1C + 4E76B4 + C5494A + C7772F + 65A33D + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/to8.xml b/themes/linear-es-de/system/metadata/to8.xml new file mode 100644 index 000000000..d85976fec --- /dev/null +++ b/themes/linear-es-de/system/metadata/to8.xml @@ -0,0 +1,17 @@ + + + Thomson TO8 + The Thomson TO8 is a home computer introduced by French company Thomson SA in 1986, with a cost of 2,990 FF. It replaces its predecessor, the Thomson TO7/70, while remaining essentially compatible. The new features of the TO8, like larger memory (256KB) and better graphics modes (powered by the Thomson EF9369 graphics chip), are shared with the other third generation Thomson computers ( MO6 and TO9+). The TO8 has a tape drive and Microsoft BASIC 1.0 (in standard and 512 KB versions)[9] on its internal ROM, and there is an optional external floppy drive. Graphics were provided by the Thomson EF9369 chip, allowing the display of 16 colors from a palette of 4096. More than 120 games exist for the system. + Thomson SA + 1986 + 1986 + 1986 + Computer + 3-4 + 2C5299 + E6F0EF + F0C73B + 4F8E5C + 2C2D2C + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/tools.xml b/themes/linear-es-de/system/metadata/tools.xml new file mode 100644 index 000000000..82951ef72 --- /dev/null +++ b/themes/linear-es-de/system/metadata/tools.xml @@ -0,0 +1,12 @@ + + + Tools + Programs, scripts and utilities to manage your set up. + Various + Various + Various + Various + Folder + 1-1 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/triforce.xml b/themes/linear-es-de/system/metadata/triforce.xml new file mode 100644 index 000000000..6be558c91 --- /dev/null +++ b/themes/linear-es-de/system/metadata/triforce.xml @@ -0,0 +1,17 @@ + + + Triforce Arcade System + The Triforce (トライフォース) is an arcade board developed in a joint venture between Sega, Nintendo, and Namco. It is based upon the Nintendo GameCube video game console to reduce development costs, and allowed for arcade ports of home console games, and vice versa. It is named after the magical, often sought-after object in Nintendo's popular The Legend of Zelda series. + Sega + 2002 + 2002 + 2002 + Arcade + 3-4 + 9867A8 + 7B79AA + 524C82 + CBC9E0 + 1E1C11 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/trs-80.xml b/themes/linear-es-de/system/metadata/trs-80.xml new file mode 100644 index 000000000..ae990766e --- /dev/null +++ b/themes/linear-es-de/system/metadata/trs-80.xml @@ -0,0 +1,17 @@ + + + TRS-80 + The TRS-80 Micro Computer System (TRS-80, later renamed the Model I to distinguish it from successors) is a desktop microcomputer launched in 1977 and sold by Tandy Corporation through their Radio Shack stores. The name is an abbreviation of Tandy Radio Shack, Z80 [microprocessor]. It is one of the earliest mass-produced and mass-marketed retail home computers. + Tandy Corporation + 1977 + 1977-08-03 + August 3, 1977 + Computer + 3-4 + 5E6064 + 233D98 + A8AAAE + CE2027 + 0F7C3E + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/type-x.xml b/themes/linear-es-de/system/metadata/type-x.xml new file mode 100644 index 000000000..b27929194 --- /dev/null +++ b/themes/linear-es-de/system/metadata/type-x.xml @@ -0,0 +1,19 @@ + + + Taito Type X + The Taito Type X is an arcade system board released in 2004 by game developer and publisher Taito. + +Based on commodity personal computer hardware architecture, Type X is not a specification for a single set of hardware, but rather a modular platform supporting multiple hardware configurations with different levels of graphical capability. This flexibility allows game developers limited choice in selecting a configuration to fit the game's specific requirements, and allows the platform as a whole to more efficiently support gaming titles with vastly different computing needs. For example, the Type X+ and Type X2 models have upgrade graphics processing power, which could be put toward better game visuals, or outputting to higher-resolution (HDTV) displays. The Type X7 board is used primarily for pachinko machines in Japan. Rawiya co-owned the company that produced this system board. + Sega + 2004 + 2004 + 2004 + Arcade + 3-4 + 2A7FBD + F6DD08 + 800000 + FF0000 + 303030 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/uzebox.xml b/themes/linear-es-de/system/metadata/uzebox.xml new file mode 100644 index 000000000..5e7c8f8ae --- /dev/null +++ b/themes/linear-es-de/system/metadata/uzebox.xml @@ -0,0 +1,19 @@ + + + Uzebox + The Uzebox is a retro-minimalist 8-bit open source game console. It is based on an AVR 8-bit general purpose microcontroller made by Atmel. The particularity of the system is that it uses an interrupt driven kernel and has no frame buffer. Functions such as video signal generation, tile rendering and music mixing is done in realtime by a background task so your game can easily be developed in C. + + The design goal was to be as simple as possible yet have good enough sound and graphics to implement interesting games. Emphasis was put on making it easy and fun to assemble and program for any hobbyists. The final design contains only two chips: an ATmega644 and an AD725 RGB-to-NTSC converter. + Belogic Software + 2008 + 2008-08-24 + August 24, 2008 + Console + 3-4 + CE3D3D + C43F32 + EDC63D + C9C2BF + 07336A + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/vectrex.xml b/themes/linear-es-de/system/metadata/vectrex.xml new file mode 100644 index 000000000..158d10fd3 --- /dev/null +++ b/themes/linear-es-de/system/metadata/vectrex.xml @@ -0,0 +1,19 @@ + + + Vectrex + The Vectrex is a vector display-based home video game console–the only one ever designed and released for the home market, developed by Smith Engineering. It was first released for the North America market in November 1982 and then Europe and Japan in 1983. Originally manufactured by General Consumer Electronics, it was later licensed to Milton Bradley after they acquired the company. Bandai released the system in Japan. + +The Vectrex, in contrast to other video-game systems available at the time, featured an integrated monochrome CRT monitor and did not need to be hooked up to a television set as it provided its own built-in display. A detachable wired control pad was mounted at, and could be folded into, the lower base of the console. Games included translucent color sheet overlays that could be placed over the monochrome screen. A number of peripherals were produced, such as a pair of 3D goggles known as the "3D Imager" and a "light-pen" that allowed the player to draw directly on the screen. A built-in game, Mine Storm, was playable without inserting a cartridge. + Smith Engineering + 1982 + 1982-11 + November 1982 + Console + 3-4 + 4D98D8 + EEF020 + EC1D25 + 11192E + 166FC1 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/vic20.xml b/themes/linear-es-de/system/metadata/vic20.xml new file mode 100644 index 000000000..0c601673a --- /dev/null +++ b/themes/linear-es-de/system/metadata/vic20.xml @@ -0,0 +1,19 @@ + + + VIC-20 + The Commodore VIC-20 (known as the VC-20 in Germany and the VIC-1001 in Japan) is an 8-bit home computer that was sold by Commodore Business Machines. The VIC-20 was announced in 1980, roughly three years after Commodore's first personal computer, the PET. The VIC-20 was the first computer of any description to sell one million units. It was described as "one of the first anti-spectatorial, non-esoteric computers by design...no longer relegated to hobbyist/enthusiasts or those with money, the computer Commodore developed was the computer of the future. + +The VIC-20 was called VC-20 in Germany because the pronunciation of VIC with a German accent sounds like the German expletives "fick" or "wichsen". The term VC was marketed as though it was an abbreviation of VolksComputer ("people's computer," similar to Volkswagen and Volksempfänger). + Commodore + 1980 + 1980-06 + June 1980 + Computer + 3-4 + 5F8FC8 + 896841 + D3D3C9 + FFCD1C + DC2770 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/videopac.xml b/themes/linear-es-de/system/metadata/videopac.xml new file mode 100644 index 000000000..8025358aa --- /dev/null +++ b/themes/linear-es-de/system/metadata/videopac.xml @@ -0,0 +1,21 @@ + + + Videopac + The Magnavox Odyssey 2 (stylized as Magnavox Odyssey²), also known as Philips Odyssey 2, is a second generation home video game console that was released in 1978. It was sold in Europe as the Philips Videopac G7000, in Brazil as the Philips Odyssey and in Japan as Odyssey2 (オデッセイ2 odessei2). The Odyssey 2 was one of the major three home consoles prior to the 1983 video game market crash, along with Atari 2600 and Intellivision. + +In the early 1970s, Magnavox pioneered the home video game industry by successfully bringing the first home console to market, the Odyssey, which was quickly followed by a number of later models, each with a few technological improvements. In 1978, Magnavox, now a subsidiary of North American Philips, decided to release an all-new successor, Odyssey 2. + +In 2009, the video game website IGN named the Odyssey 2 the 21st greatest video game console, out of its list of 25. + Philips + 1978 + 1978-12-01 + December 1, 1978 + Console + 3-4 + f08211 + F6DD08 + 800000 + FF0000 + 4C504E + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/virtualboy.xml b/themes/linear-es-de/system/metadata/virtualboy.xml new file mode 100644 index 000000000..2f7c0ba51 --- /dev/null +++ b/themes/linear-es-de/system/metadata/virtualboy.xml @@ -0,0 +1,19 @@ + + + Virtual Boy + The Virtual Boy is a 32-bit tabletop portable video game console developed and manufactured by Nintendo. Released in 1995, it was marketed as the first console capable of displaying stereoscopic "3D" graphics. The player uses the console like a head-mounted display, placing the head against the eyepiece to see a red monochrome display. + +The games use a parallax effect to create the illusion of depth. Sales failed to meet targets, and Nintendo ceased distribution and game development in 1996, having released only 22 games for the system. + Nintendo + 1995 + 1995-07-21 + July 21, 1995 + Portable + 1-1 + E1414A + 363636 + FE0016 + 8A8C8E + 232323 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/vpinball.xml b/themes/linear-es-de/system/metadata/vpinball.xml new file mode 100644 index 000000000..c19d56669 --- /dev/null +++ b/themes/linear-es-de/system/metadata/vpinball.xml @@ -0,0 +1,17 @@ + + + Visual Pinball + Visual Pinball is a freeware and source available video game engine for pinball tables and similar games such as pachinko machines. It includes a table editor as well as the simulator itself, and runs on Microsoft Windows. It can be used with Visual PinMAME, an emulator for ROM images from real pinball machines. + Visual Pinball Team + 2000 + 2000-12-19 + December 19, 2000 + Engine + 1-1 + 3871C5 + F6DD08 + 800000 + FF0000 + 303030 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/vsmile.xml b/themes/linear-es-de/system/metadata/vsmile.xml new file mode 100644 index 000000000..7f9c983ce --- /dev/null +++ b/themes/linear-es-de/system/metadata/vsmile.xml @@ -0,0 +1,21 @@ + + + V.Smile + The V.Smile (stylized as V.SMILE TV LEARNING SYSTEM) is a sixth-generation educational home video game console manufactured and released by VTech. Titles are available on ROM cartridges called "Smartridges", to play off the system's educational nature. The graphics are primarily sprite-based. The console is often sold bundled with a particular game, with most of them having a game called Alphabet Park Adventure. + +Several variants of the V.Smile console are sold including handheld versions, or models with added functionality such as touch tablet integrated controllers or microphones. The V-Motion is a major variant with its own software lineup that includes motion sensitive controllers, and has Smartriges designed to take advantage of motion-related "active learning". The V-Motion and Smartridges however, are fully backwards compatible with other V.Smile variants and V.Smile Smartridges, and a V-Motion Smartridge can also be played on V.Smile console or handheld, albeit with limited functionality. However, in 2010, the new and old models of the V.Smile were discontinued. VTech still made games for the V.Smile until 2012. + +Some key differentiators between systems and the ability to fully utilize all game functions include the options of a microphone, touch tablet, additional joystick port (for 2-player gameplay), stylus-enhanced controller, or motion sensitive game pad (with V-Motion). + VTech + 2004 + 2004-08-04 + August 4, 2004 + Console + 3-4 + 544D77 + 007CB3 + 8A6AA2 + CBCFD0 + F0973A + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/wasm4.xml b/themes/linear-es-de/system/metadata/wasm4.xml new file mode 100644 index 000000000..ed1728b34 --- /dev/null +++ b/themes/linear-es-de/system/metadata/wasm4.xml @@ -0,0 +1,17 @@ + + + WASM-4 + WASM-4 is a low-level fantasy game console for building small games with WebAssembly. Game cartridges (ROMs) are small, self-contained .wasm files that can be built with any programming language that compiles to WebAssembly. + Bruno Garcia + 2022 + 2022-06-21 + June 21, 2022 + Engine + 1-1 + 3A4E25 + 688535 + D3E3B7 + 4B5E2C + 8FC038 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/wii.xml b/themes/linear-es-de/system/metadata/wii.xml new file mode 100644 index 000000000..5afea091c --- /dev/null +++ b/themes/linear-es-de/system/metadata/wii.xml @@ -0,0 +1,19 @@ + + + Wii + The Wii (known unofficially as the Nintendo Wii) is a home video game console released by Nintendo on November 19, 2006. As a seventh generation console, the Wii competed with Microsoft's Xbox 360 and Sony's PlayStation 3. Nintendo stated that its console targets a broader demographic than that of the two others. + +As of the first quarter of 2016, the Wii led its generation over the PlayStation 3 and Xbox 360 in worldwide sales, with more than 101 million units sold; in December 2009, the console broke the sales record for a single month in the United States. + Nintendo + 2006 + 2006-12-02 + December 2, 2006 + Console + 243-340 + 7ECBE8 + 24A9E2 + D1D1D1 + 005C9A + 1E1C1A + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/wiiu.xml b/themes/linear-es-de/system/metadata/wiiu.xml new file mode 100644 index 000000000..091957651 --- /dev/null +++ b/themes/linear-es-de/system/metadata/wiiu.xml @@ -0,0 +1,19 @@ + + + Wii U + The Wii U (WEE YOO) is a home video game console developed by Nintendo as the successor to the Wii. Released in late 2012, it is the first eighth-generation video game console and competed with Microsoft's Xbox One and Sony's PlayStation 4. + +The Wii U is the first Nintendo console to support HD graphics. The system's primary controller is the Wii U GamePad, which features an embedded touchscreen, directional buttons, analog sticks, and action buttons. The screen can be used either as a supplement to the main display or in supported games to play the game directly on the GamePad. The Wii U Pro Controller can be used in its place as a more traditional alternative. The Wii U is backward compatible with all Wii software and accessories. Games can support any combination of the GamePad, Wii Remote, Nunchuk, Balance Board, or Nintendo's Classic Controller or Wii U Pro Controller. Online functionality centers around the Nintendo Network platform and Miiverse, an integrated social networking service which allows users to share content in game-specific communities. + Nintendo + 2012 + 2012-11-18 + November 18, 2012 + Console + 243-340 + 58AED1 + 1F9EBB + 3783BC + DDDCDC + 9D8354 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/windows.xml b/themes/linear-es-de/system/metadata/windows.xml new file mode 100644 index 000000000..dbf76f695 --- /dev/null +++ b/themes/linear-es-de/system/metadata/windows.xml @@ -0,0 +1,19 @@ + + + Windows + Windows is a group of several proprietary graphical operating system families developed and marketed by Microsoft. Each family caters to a certain sector of the computing industry. For example, Windows NT for consumers, Windows Server for servers, and Windows IoT for embedded systems. Defunct Windows families include Windows 9x, Windows Mobile, and Windows Phone. + +The first version of Windows was released on November 20, 1985, as a graphical operating system shell for MS-DOS in response to the growing interest in graphical user interfaces (GUIs). + Microsoft + 1985 + 1985-11-20 + November 20, 1985 + OS + 3-4 + 39B1DE + F8682C + 91C300 + 00B4F1 + FFC300 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/windows3x.xml b/themes/linear-es-de/system/metadata/windows3x.xml new file mode 100644 index 000000000..48ae24388 --- /dev/null +++ b/themes/linear-es-de/system/metadata/windows3x.xml @@ -0,0 +1,19 @@ + + + Windows 3.X + Windows is a group of several proprietary graphical operating system families developed and marketed by Microsoft. Each family caters to a certain sector of the computing industry. For example, Windows NT for consumers, Windows Server for servers, and Windows IoT for embedded systems. Defunct Windows families include Windows 9x, Windows Mobile, and Windows Phone. + +The first version of Windows was released on November 20, 1985, as a graphical operating system shell for MS-DOS in response to the growing interest in graphical user interfaces (GUIs). + Microsoft + 1992 + 1992-04-06 + April 6, 1992 + OS + 3-4 + 39B1DE + F8682C + 91C300 + 00B4F1 + FFC300 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/windows9x.xml b/themes/linear-es-de/system/metadata/windows9x.xml new file mode 100644 index 000000000..3c311a23b --- /dev/null +++ b/themes/linear-es-de/system/metadata/windows9x.xml @@ -0,0 +1,19 @@ + + + Windows 9X + Windows is a group of several proprietary graphical operating system families developed and marketed by Microsoft. Each family caters to a certain sector of the computing industry. For example, Windows NT for consumers, Windows Server for servers, and Windows IoT for embedded systems. Defunct Windows families include Windows 9x, Windows Mobile, and Windows Phone. + +The first version of Windows was released on November 20, 1985, as a graphical operating system shell for MS-DOS in response to the growing interest in graphical user interfaces (GUIs). + Microsoft + 1998 + 1998-06-25 + June 25, 1998 + OS + 3-4 + 709DC1 + F8682C + 91C300 + 00B4F1 + FFC300 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/wonderswan.xml b/themes/linear-es-de/system/metadata/wonderswan.xml new file mode 100644 index 000000000..da137c8b6 --- /dev/null +++ b/themes/linear-es-de/system/metadata/wonderswan.xml @@ -0,0 +1,19 @@ + + + WonderSwan + The WonderSwan is a handheld game console released in Japan by Bandai. It was developed by Gunpei Yokoi's company Koto Laboratory and Bandai, and was the last piece of hardware Yokoi developed before his death in 1997. + +Released in 1999 in the fifth generation of video game consoles, the WonderSwan and its two later models, the WonderSwan Color and SwanCrystal were officially supported until being discontinued by Bandai in 2003. During its lifespan, no variation of the WonderSwan was released outside of Japan. + Bandai + 1999 + 1999-03-04 + March 4, 1999 + Portable + 5-7 + 76CDBE + 8797A4 + DBE0E1 + E72835 + 282827 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/wonderswancolor.xml b/themes/linear-es-de/system/metadata/wonderswancolor.xml new file mode 100644 index 000000000..7b138adc2 --- /dev/null +++ b/themes/linear-es-de/system/metadata/wonderswancolor.xml @@ -0,0 +1,19 @@ + + + WonderSwan Color + The WonderSwan is a handheld game console released in Japan by Bandai. It was developed by Gunpei Yokoi's company Koto Laboratory and Bandai, and was the last piece of hardware Yokoi developed before his death in 1997. + +Released in 1999 in the fifth generation of video game consoles, the WonderSwan and its two later models, the WonderSwan Color and SwanCrystal were officially supported until being discontinued by Bandai in 2003. During its lifespan, no variation of the WonderSwan was released outside of Japan. + Bandai + 2000 + 2000-12-09 + December 9, 2000 + Portable + 5-7 + 3FB0E6 + 009CD4 + EBA743 + D65757 + 162B4F + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/x1.xml b/themes/linear-es-de/system/metadata/x1.xml new file mode 100644 index 000000000..9c571b79b --- /dev/null +++ b/themes/linear-es-de/system/metadata/x1.xml @@ -0,0 +1,25 @@ + + + X1 + The X1 (エックスワン, Ekkusuwan), sometimes called the Sharp X1, is a series of home computers released by Sharp Corporation from 1982 to 1988. It was based on a Z80 CPU. + +Despite the fact that the Computer Division of Sharp Corporation had released the MZ series, suddenly the Television Division released a new computer series called the X1. At the time the original X1 was released, all other home computers generally had a BASIC language in ROM. However the X1 did not have a BASIC ROM, and it had to load the Hu-BASIC interpreter from a cassette tape. On the plus side however, this concept meant that a free RAM area was available that was as big as possible when not using BASIC. This policy was originally copied from the Sharp MZ series, and they were called clean computers in Japan. The cabinet shape of X1 was also much more stylish than others at that time and a range of cabinet colors (including Red) was selectable. + +The RGB display monitor for the X1 had a television tuner, and a computer screen could be super-imposed on TV. All the TV functions could be controlled from a computer program. The character font was completely programmable (A.K.A. PCG) with 4bit color, and was effectively used in many games. The entirety of the VRAM memory was mapped on to the I/O area, so it was controlled without bank switching. Since X1 had these features, it was very powerful for game software. + +While X1 was struggling to sell, the PC8801 (from NEC) was quickly becoming popular in the Japanese market. In 1984, Sharp released the X1 turbo series with high resolution graphics (640x400, while X1 had 640x200). It had many improvements, but the clock speed was still only 4 MHz. In 1986, Sharp released the X1 turbo Z series with a 4096 color analog RGB monitor. An X1 twin, which had a PC-Engine in the cabinet, was finally released as the last machine of the X1 series in 1987. Then this series was succeeded by the X68000 series. + +Sharp continues to sell desktop PC/TV combos in Japan through its Internet Aquos line, where an X1-style red color scheme is available. + Sharp + 1982 + 1982 + 1982 + Computer + 3-4 + B73538 + 752421 + 4A90CB + C1C3D1 + 28333D + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/x68000.xml b/themes/linear-es-de/system/metadata/x68000.xml new file mode 100644 index 000000000..297485b6b --- /dev/null +++ b/themes/linear-es-de/system/metadata/x68000.xml @@ -0,0 +1,19 @@ + + + X68000 + The X68000 (Japanese: エックス ろくまんはっせん, Hepburn: Ekkusu Rokuman Hassen) is a home computer created by Sharp Corporation, first released in 1987, sold only in Japan. + +The first model features a 10 MHz Motorola 68000 CPU (hence the name), 1 MB of RAM, and no hard drive; the last model was released in 1993 with a 25 MHz Motorola 68030 CPU, 4 MB of RAM, and optional 80 MB SCSI hard drive. RAM in these systems is expandable to 12 MB, though most games and applications do not require more than 2 MB. + Sharp + 1987 + 1987-03-01 + March 1, 1987 + Computer + 3-4 + 6B6D70 + 3B3B3B + 838582 + C25F7F + 41BC83 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/xbox.xml b/themes/linear-es-de/system/metadata/xbox.xml new file mode 100644 index 000000000..0aa53735c --- /dev/null +++ b/themes/linear-es-de/system/metadata/xbox.xml @@ -0,0 +1,19 @@ + + + Xbox + Xbox is a video gaming brand created and owned by Microsoft. It represents a series of video game consoles developed by Microsoft, with three consoles released in the sixth, seventh, and eighth generations, respectively. The brand also represents applications (games), streaming services, an online service by the name of Xbox Live, and the development arm by the name of Xbox Game Studios. + +The brand was first introduced in the United States in November 2001, with the launch of the original Xbox console. + Microsoft + 2001 + 2001-11-15 + November 15, 2001 + Console + 243-340 + 68B653 + CDDF01 + 9ABF5E + 534F57 + 000000 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/xbox360.xml b/themes/linear-es-de/system/metadata/xbox360.xml new file mode 100644 index 000000000..7564fab76 --- /dev/null +++ b/themes/linear-es-de/system/metadata/xbox360.xml @@ -0,0 +1,19 @@ + + + Xbox 360 + The Xbox 360 is a home video game console developed by Microsoft. As the successor to the original Xbox, it is the second console in the Xbox series. It competed with Sony's PlayStation 3 and Nintendo's Wii as part of the seventh generation of video game consoles. It was officially unveiled on MTV on May 12, 2005, with detailed launch and game information announced later that month at the 2005 Electronic Entertainment Expo. + +The Xbox 360 features an online service, Xbox Live, which was expanded from its previous iteration on the original Xbox and received regular updates during the console's lifetime. Available in free and subscription-based varieties, Xbox Live allows users to: play games online; download games (through Xbox Live Arcade) and game demos; purchase and stream music, television programs, and films through the Xbox Music and Xbox Video portals; and access third-party content services through media streaming applications. In addition to online multimedia features, it allows users to stream media from local PCs. Several peripherals have been released, including wireless controllers, expanded hard drive storage, and the Kinect motion sensing camera. The release of these additional services and peripherals helped the Xbox brand grow from gaming-only to encompassing all multimedia, turning it into a hub for living-room computing entertainment. + Microsoft + 2005 + 2005-11-22 + November 22, 2005 + Console + 243-340 + 91B61C + 92C83E + CECECE + 2FA74D + 9D9FA2 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/zmachine.xml b/themes/linear-es-de/system/metadata/zmachine.xml new file mode 100644 index 000000000..7b59ce9b6 --- /dev/null +++ b/themes/linear-es-de/system/metadata/zmachine.xml @@ -0,0 +1,17 @@ + + + Z-machine + The Z-machine is a virtual machine that was developed by Joel Berez and Marc Blank in 1979 and used by Infocom for its text adventure games. Infocom compiled game code to files containing Z-machine instructions (called story files or Z-code files) and could therefore port its text adventures to a new platform simply by writing a Z-machine implementation for that platform. With the large number of incompatible home computer systems in use at the time, this was an important advantage over using native code or developing a compiler for each system. + Joel Berez & Marc Blank + 1979 + 1979 + 1979 + Engine + 1-1 + 000000 + 333333 + 48DBCE + C1C1BE + 586C6D + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/zx81.xml b/themes/linear-es-de/system/metadata/zx81.xml new file mode 100644 index 000000000..fcb4dc7df --- /dev/null +++ b/themes/linear-es-de/system/metadata/zx81.xml @@ -0,0 +1,21 @@ + + + ZX81 + The ZX81 is a home computer that was produced by Sinclair Research and manufactured in Dundee, Scotland, by Timex Corporation. It was launched in the United Kingdom in March 1981 as the successor to Sinclair's ZX80 and designed to be a low-cost introduction to home computing for the general public. It was hugely successful; more than 1.5 million units were sold. In the United States it was initially sold as the ZX-81 under licence by Timex. Timex later produced its own versions of the ZX81: the Timex Sinclair 1000 and Timex Sinclair 1500. Unauthorized ZX81 clones were produced in several countries. + +The ZX81 was designed to be small, simple, and above all, inexpensive, with as few components as possible. Video output is to a television set rather than a dedicated monitor. Programs and data are loaded and saved onto compact audio cassettes. It uses only four silicon chips and a mere 1 KB of memory. There is no power switch or any moving parts with the exception of a VHF TV channel selector switch present in some models. It has a pressure-sensitive membrane keyboard. The ZX81's limitations prompted a market in third-party peripherals to improve its capabilities. Its distinctive case and keyboard brought designer Rick Dickinson a Design Council award. + +The ZX81 could be bought by mail order preassembled or, for a lower price, in kit form. It was the first inexpensive mass-market home computer to be sold by high street stores, led by W. H. Smith and soon many other retailers. The ZX81 marked the point when computing in Britain became an activity for the general public rather than the preserve of businessmen and electronics hobbyists. It produced a huge community of enthusiasts, some of whom founded their own businesses producing software and hardware for the ZX81. Many went on to play major roles in the British computer industry. The ZX81's commercial success made Sinclair Research one of Britain's leading computer manufacturers and earned a fortune and an eventual knighthood for the company's founder Sir Clive Sinclair. + Sinclair Research + 1981 + 1981-03-05 + March 5, 1981 + Computer + 3-4 + B92E34 + EF5857 + 403E4B + D2CECD + 191222 + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/zxnext.xml b/themes/linear-es-de/system/metadata/zxnext.xml new file mode 100644 index 000000000..890fb787b --- /dev/null +++ b/themes/linear-es-de/system/metadata/zxnext.xml @@ -0,0 +1,17 @@ + + + ZX Spectrum Next + ZX Spectrum Next is an 8-bit home computer, initially released in 2017, which is compatible with software and hardware for the 1982 ZX Spectrum. It also has enhanced capabilities. It is intended to appeal to retrocomputing enthusiasts and to "encourage a new generation of bedroom coders", according to project member Jim Bagley. Despite the name, the machine is not directly affiliated with Sinclair Research Ltd., Sir Clive Sinclair or the current owner of the trademarks, Sky Group. + SpecNext Ltd. + 2017 + 2017 + 2017 + Computer + 3-4 + 32323D + CA2825 + EDBA01 + 009C37 + 02559C + + \ No newline at end of file diff --git a/themes/linear-es-de/system/metadata/zxspectrum.xml b/themes/linear-es-de/system/metadata/zxspectrum.xml new file mode 100644 index 000000000..083ccd2c3 --- /dev/null +++ b/themes/linear-es-de/system/metadata/zxspectrum.xml @@ -0,0 +1,17 @@ + + + ZX Spectrum + The ZX Spectrum is an 8-bit personal home computer released in the United Kingdom in 1982 by Sinclair Research Ltd. It was the follow-up to the Sinclair ZX81. The Spectrum was ultimately released as eight different models (although the models after the Spectrum 128K were technically developed and manufactured by Amstrad), ranging from the entry level model with 16 kB RAM released in 1982 to the ZX Spectrum +3 with 128 kB RAM and built in floppy disk drive. The Spectrum was among the first mainstream audience home computers in the UK, similar in significance to the Commodore 64 in the USA. The Commodore 64, BBC Microcomputer and later the Amstrad CPC range were major rivals to the Spectrum in the UK market during the early 1980s. + Sinclair Research + 1982 + 1982-04-21 + April 21, 1982 + Computer + 3-4 + 8F1B12 + CA2825 + EDBA01 + 009C37 + 02559C + + \ No newline at end of file diff --git a/themes/linear-es-de/system/systemart/3do.webp b/themes/linear-es-de/system/systemart/3do.webp new file mode 100644 index 0000000000000000000000000000000000000000..7da3a133085be46cffa4f366bbeb3ac94ed2565b GIT binary patch literal 20450 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 z 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 Z{&y$WbW&Z~y>+`ST!x_~#)dBBGcJ{`nFBo@;Aj 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 r^nL)%{#0-P0000kf7Ivz000000000000000000000000000000FemM( literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/ags.webp b/themes/linear-es-de/system/systemart/ags.webp new file mode 100644 index 0000000000000000000000000000000000000000..a70edb545e954dec44c3a8eaa4db82715f9dcc3c GIT binary patch literal 12412 zcmdsdbyQu;(&xtAEx5b8ySoN=cXyX0K!D)x4#9)FOK=SkG`IzKJHx$i-uK>p^WJ=G z%|Ekddi6Q|+tpRoUDegK`<%ViWTm9sSpYywQcOitg-0760D!kkfEePBDl0Cok_Y~F z34rI>n>n~azI8b`y1S}Li;-yS=#s!30AK(%fC3N!>?USz&Y~(R3V(3_`*Qo^jr*<4 zG5(?J-}C%ODw4T{n;8Irk-Tw;m^r(;zhUDy%;n|o{0B~Z!;ZRx@vU`yqqqTT zZ~bEbK_2fEy_!0b&z0&oHx0FyuEfj`#ZjpwcW!?$jh>}-FMz!1d%0BRis zx}pRCm_z`0i35S2@TjRK=}XwO#}a+nWh3j zb2tFJTXr^aHTiQKh_`QWOG^N_ECm209RR?X1^{@yzxnO0?~i_X zeeM+O8!;X5Z1T+$&+eHR$?k;}2YRX+4KiYDoQVkW*<|H*T(&9TNx?S+Gb1hy8a5R3 zkkY+KJ|0=Fy;zGD93EEtd=HtXnXv$~6RaG&4H{y777ouhewuO~mQ|7}k@uBnYP+R6 z1Tsb6Ej1zy(26(Ln_zS&1t6SMTSNggRJ3?h+N(JnT7CY_@SoNHXL5gb-VV@^eZy zJ7}YgQrZ2Cq57P7hR4hFQzHIl! zASjB+;CS1>>#_vVw}CO%>Dg|j{$Qq=FND$RY&2hbdkeDJ&#O6%DBBKWosyI?m#9i! zy<|9CTL1dMAbkV}LwSze*MtsHH!z3j*Rh(X-S0yL2>239`+Wut`8_p98LvZDtws)cO*i{OFE=WXHFG$ET zvEA#JTMAL&#gsTqU0bVk9w|I>^%sgZYT?(P zwn>LIUDjf03F6PEiONs;aFxXepew&M#l8%39zGmpCfVr7Jc4-ho1RX;J>RsvPFS6d zTv)3F;47}=9M0tVE~H;Oe3A~ct>Lm<^N59Z*fpWA_T?&L4NJ+ovR5I0q{z9pSCPN* z7GBt$$@}Cfw{-S4hp?5d#-}dnu%nIV7((8U(Q~H7k6c+zFNUP9W1+=wI`18%NL_{s ziht(f*5CS))=u^nR|&WeCWAX>EXc>;Htgtw{g{U@k-C-@&|z6S|Mt1O*taA1h|U?i z&z9&Xtx0!1iHnrp3Y(}v%OVerjb#pHk! zJ5kOV?B!3%{nH}X%e+wek>z3vD7 z_Z5`8Hr&B#B6F9+jO5pN5r%5m<(L_$F8o63uxmCtCyo=Cnv`%oAq+jJ3u}uS#62Gn z5Mgw|qvm+(laQ08J4;uqB7(8Xty{Z!QMlySYR=*27);s2Z*ZA8;m{Ao4*xB@2Z0sHqX~r_?)Z0t*F$T1KC3-@_zh z-cMX^MT&aauK>N_tc4;P6>1N`-98=BC4K7O zRpwM0KW6B7L|3L0SG7ZhjmJNdZ50r8UvL?tqQ~ulIe=v@-;)1PQj0Ck?N^5UW?4Ad z>*C0{E_WkV68(tKwl5C0wB+)c2E^uywQS1id(0bRZqM!{+(4xEFTSnvHUJ}3F>%^? zS0w%&;rgY`ow1j9DkDCLZm);`xxZpL%j;NG_sPrc8kJ!QC;1_BopE88R@b*oRNeAh zbug4*C->jh#H!v^d{`Zd5%1dEuks=AaT+fezm>^TDRKO8SEMR`_7-D zp{*SZrl;-B+pCVBHLy2M&vZe%;W&yD4x&NsX&>HWAltw2say4RtlT25jQl(&wUYMD zWw&o0$W|Uio?FbBphxI2bQ)h(4O9r%*kVSh&Ae{i@rHx#6e9V#3lk<3ptVj#=1SoK z=keg-dGotyolGj7$^%M3Np?uThoM1ZYTf5p!LT>?N*E`v>OK8-< z_-GKerC5+G*4>h3!m^JLz~!8Jo6yVj-Ta(0dxMlMkiQAml+kMi#mH4>kn;GuJ5I1? zD9;+^DS`!Ndb%OD2vo?0L|!7C7ob7X74P^V4=Nai_mvA+kz#X;npk4!g=+BvPY(nG zgtnqVl2TJgLL}@#H_WcE-+y6)W%J_E9fOKKOcuzb;?l3tLhKTR|&~Fd+FK=HWJTg-3ZoV@%<`W z#}Kc}t6;sP+~yDm6tHtQzq+8#y=FHK&BaeVCsm1he6Fg&vlUvPjDtxuxaH0nf^Uar zffdy~W6Hci$EGo^+}XBzEiX?+Vm zaD?#n$Z($vaAHGn7h>9D#;;8tJBGZWMhpJ9T3K6Li|#@SSh}@RB|)KDpU^p{*%bTb zJpGt9?e&Eyq?iKBb+Ho5b2!QXL=Xw~xc`uWa? zpfj(%_csK8Y&+7XjVQ#LfFtKQ;gwG7D3WjIocamV`~@{ z{cC8QKIJL11%Y&8GKDE&T@TzGSATSuREZk|loMQ^dyVs*Ngf=I*}AoO3xzWm22=~A zYVAJzBGf{QqnxC;GD0W^7UX*Hn$1t)&zNm-ddl=8Tbi!qyro+~>FxM%?&N{I!3LJA z0^fWtickS!{38={E^b{Gbrl`%__0NvmPh?KTpz8wfX=eqi6t?x;>D!RraVOF@chrK z8!fL=;BVSrGps|9dXO;m7m)+*ezD||eY`o%_m#s-#V-8*pxqi4uyZDNHG$eM zE=0P*s23x|xe|T6$1Wc*jBNEfD{&O6 zkI+^2c#KL0@(_CydvG0jw_oVFHOkFtq&ABqIh?b;^L~37gHng~EW`R0Mm8Krz#ULf zxp|;cwspq|7l64EOHj3{{Hy?^jqXT`9%xCWT9-k186@_+(7dD5E{c3KKrP#GQ-o|! zBjx@{G;); zS^rVA_^^m3uw+OHS|dU-7n{MsMr;ii)@yMqVPJ-x3B5HVBec7{itBv92z=WunJ&~c z!}`lf2CS$H@M{^7@B|+*Z~Oy>1V^3>>CkQyF+egysLJ=$9n%T(0(=?qcv+&vDZevI zoa#QgEWG~Fb=&<{Jt-D+jhcEPMJfcIEA%BXyW|7=GG`^;Gv z>I|d}qwxj_-}2kkKw(pkQ>^pW8%^c>*7Z7DuHVnoa)W$O29J2`N18f9^%)+y0EUjs zL^`x}Ov{*4^B?-A!2y_6RD>R?1DbMgBa%~F_|Yt{IRs$qmE#O!7gzi};Sfhl&8s|)!y4kDM z-~yj5;k9hB1=qGbusE$QDaEC+=esP`P;Dw|~$s zAT3}e&CFv<*s#!SM4wC-gdKug+2~m3^k9`5C#c`9GdL#ofP#1AN9=OgQ@9C$6nwnz zYjfU&T$^Q3fMPvmH6`UMRT)x`G>hh^5Z<9#yI%XV!)3>`in;)@CvS@8_vNIp3moVY zws^2x?$$vo+Ln5lge9;ECM-H4b8o+^)SdHjKDn?%(fB1lQT700!XvD;HKg+vt9)y) zOzL4Hg$d6{oOur38BcX!Z>JI?7neDtyq}s7lUT|ON8=B7pBy6yWc$-mQtocZ%DzyRwYi?vHL&|}cj6*%TUefrnN?TX!v$#@5WvGuK zc{_;bj>l7ES5G5wK&qUABmsuIT(mOA>|u-f8HT+>^O&jXc<`r*ugdQIs1S{aJm)E! zxyt_i?0q)~#9qyqm-kJtuOs8tY_Zd?7#`ElzDiS2dO|PYe3A`8`>=IUHrp^Sn(Wn# zs!1}8#4csyM1R)kl1`=seto)uS4yIl7`xv1J)dl!;kbGTR1Zb3cX5!Aje019R*Yjj z$3hA1wre)XcQS9UP6%bryH^Aty^F{;Yy6s^c&U_uH(>cFAW;Zu0On39v|zd$^a1g7 zj$`-o92Etl0bmhv{%*>dhPcQYcfo>$Jr6xCQoCZ>sJx}S__d+4GF2_M{hpv+l22SajQ^441}zCZxD2C>vFpcIISPGf8xP03{&{f~g^-Q7Mn5mc-f3|7pT;`O~rtTqq_$YZ#UuNl>hNwk@|skG9QsrNXIHu@zb4vi7Xz4OQS_~Ity}-m?KK!n8U)r8d-gPa&>59 z+o1VYE4n7d20M5gMyWh|zHqR^s@8abW0>iNWXZ;RJUF2r9SS9<=S?K}AH_wwA+43t zrV)B{n0lA!ED+O!^vY?{3MKY4#1kuJ-jU@eXIxQTLpY~q4(_r`(87Q${w0MLCUY+UP`W~PgO2AqnZ69^C7f)? zxfX&k@F&=m;cqHGTT|ug0mkv0w(o&54@qZ3QK3bA5$3Ip8>s0MuDec3xL#_=Yu@dSJ&@ucvF+VA|Z35RAa|Tc7)VMn2sSib^aMoS3l>pF=N(457dyiHAA2tF0Z~ z8~}aerr>~hJ4;nOIv?>1(%U=|ITl$fjA#flNWoTk{kA>4MFJ73E7rxdV@FjyCY>Tk zw{WOpsCp02Uf8@MV-~I4_TttNPUyHnhFx7ZLPj}I!nj&rD|;wvFEt-?@4FuQ+@~zR z>?d)zk5MqrA-sK^qYL#^obEE8Xq26sp#npz+So!Pfoiv9)wYDiR$w(f3KMYVOxL;ZOw zV>`N;AU_<;%IRPX_mNPfPI&xDrdNb}UhA?o2cGW5WRyZX)`7NQHD^;9_W=tq~BV#SFYlb*JHE{Jr#wq{x%k zw{wPUDA??!s>iS5VK$mmR8)jy#}D4K`u;c}A(5-ffS?~NKTOlW1AS)Aphhd)qgC%Q z)~Ttsf3=5&88fta^kM7Izq#&AH>jT#&I9_UMzsolN1siyb7GgG?HaAVc9acmaTGj9 zt>i9B#zk7#akzNkp{Z661+iX)7vO>h2Z%p6ZLX1Z4)I48?T^}YB+B?!XAL?refP56 zOYkpktQp81?bYnX8s0@k^8i$~ly{9QHa~B>Mnv!dgC%m^(*hP(S65M+pU}_@V8Md- zlPG}xhzO<+K#!XoI%4(oxCMkts9qJ~Cr@THUa{bXQDf^n^muX!>_e4x)z*GF&NXnd zg8h)c0}Hq!ru6orfdfO;67bZdcWd;c8mclSmxSrTiu0kC^`VE+gB8;p5ojntN5W2*}D7D)KT+j#iTQt7k)bMW^lD~zPaC*-mL{IgD!S7cuM0ZI~ww?pZ0ANMm+uMh$orrNA|P0pWk&CQzER(sn}v85`YFuGTpC{}aZ5z&~GDvXrx%RP}R9Nbnzh;08rTSm)vZ{^Al1g-YI6 zxe*b!KCIm|KD(8k%7)Z7mOf>FYYy-eA2};Mt+N z=|J8`Ol4&}Tc8<_@g{L(N={mv4{NRG&ec%t#1k6%1SxeVyxsQy(^DOgl>_khT$KbB z0{~DrfNU^25(p9qA=Y|N3+; z{e1kQbzCNX4QcUv8*9!FC;b3+Y-NbPz{^h^e3)AqbIODg_gJXpX=75!bmV4WlqU>RHUY&imLjA5J~*h^XL~LFg(R7>A%qJEHYp0{C;6+ygu(vdVYS z#(}vCWa2#45QeQ9q>pUKWUf(OEPhL?8$tG>r{bPZ?(P)MN1~XW*g~$VNS^xX!M$gb>hGW&~dy$c_GGmt^-K^9Ksn z-4t2}#x!TYSC0qx8B(M3dia+~zU{K(JVf&|NfKXb!hErRvxhSAET19n{$JUSj_0oO zzdP$85}9@`3Q~O)HiGN+vDMGngu%?YWeL(zA@a2AO{0xS8zw@w`_oOE|DHsgH;Ld* z9HlkiG6}7cdgWY2#WAi7&EI3CBU+HTgnyv}E(Q}~@>hNnOG&$_U$@@np*d@^I2o(T z(C9{=M0(7BrK9&ZG3)`oF??5j&joG*hyr@S+IPkeP(@r%achTfJ-L6$ctv(^`OkZi z`(G0v8^zY}4)-56e8ca=4E<~1zvVt;q2HJIom6Zu%l{@9{_260fp7_TL(%$Qmrjxx zn!J{JlOcr9@c&ju1%TIQmp|T}`R8H?;YoCIe$G3wnNqzTY1t8_x z)4!V*pg?!3dMGZ}?5ao&h=mhb5Q2ehS;C&C*EL|8&Bz-#W7P9ojy>`ZpG2nGKRB(O zooUi^n7UGY&)%$tZ}lafrDsz1L<0@b&LjbM2u=9*XTeyn=%xm;sc{imO;E`wg^>xkyqUuHMY*MX>RTUU`p$S2-JKVS z6%ctHth_yzaKu$D+J{U2Li)Y@IBTaFQ>NhiQFT|3Sr*4vaa|92OTJm{>u(><_MF~j z$?bIN-pFyOxyx(t=TKM~j8bP8cl2EN4L~a=iz~o##2@t7_eNYyjSVT_(#K_DcStgb zjByfhg>}xwF1g_Bl#R#yII9&;mgbjeZ$mU40$rvJeatwYY|p=%^T)2$l1X2{KKjro ze;CU!jgH1Y6Xfh1D^$ybq6tHgSZ#(*DN?KO!IH>~w}i}5Dt${D^S$@Nmdr=E9?G*| zkGt(-y)K%_PT3}y?VD%OsmI&+_ad4t2xXzmy_{sYn({mz^t+{2$JD2^U0SxYoh|>KJxi|(l=O`-{-=#*3m0pjLJmg5(4^7djctp; z091ObxU}d8GRW=*AFNIfuCFVp-``ho-$drqg9xpy&yuNYv@Hj^4(M z9*)ja-#*~81Un_qMX#wiO;kH(Q=l zo%?I|`U~z}R~wCaiR;FyT{<&0*5=tDyWn(ddl~rSx@P)gP<}$_Xm^XO5($Gk0cy;} zrwB7=l=;@BUwm_&<=(#L0>(JSYZ};RAX7nR0c!6VQ0BAaGKVag2|ku)*9esxtXmkT z6w}pGQF8|3{jh&E{m1uF?Kv3`VN9QSY$5{J#fmkAAGH}v+27grl|KZ@dD%$NJ8jDB zss|4r45&H5^R_(_-ER~Giz&! z0OTu%-Ht(i=k+;@h=}F08vH^|&~k)K5-GxsJLmi9FM=edgP=l3%Xz1P)V7AZs{-Su zEhqD`^{soo_c$@zvP#u<)X?=DlQ`K@a_$N{gHTv`s;UNv4YV#Ru{Y9gWE3$0{6&fg zBNuk2=4VmQ+ex_%syVzE(VRTeiAW@92w~|s{3(U_GswM?T-d!vap$5xSXY)7YMn=;z- z3gJqbXsZ_8=tzTo7zlV^J|XJeoGjBTr8t{{O}YQ(no`ZgOJo2=DMY9D&C za|A_#^hA?DXG9A9R}B+Pd4STD_g)< zp5B{go_c6!kEQ`VP$Z^dl6tM{V&o@>h|fJJyTb);2RpStEw<=(4oxAvkJsqDd>oes zQw1G{4;zC(V|A``Azmu263){wA8$#Jx^6wd!S|ki7G5`#!iM&;{M@9Sow*q0W+q}N z!(9z!o>1v9aG+>#6Iy6)?(u6AL9WIr{&D6R*B1^q=MdShSO-zqIoV3bENnwVGv#E9 zDu)2?S#zqG5b<7I_D7^QexqYUSF*%M$=YGRtvk75j<_Eaj)ExNA%WrH=E|HpRf{|} zSzlF66R}!kREF&R{HOcIw7)E8klL0qC~3yt7Di z{CIi8afiIm9NvscC80O#D#4%MuKE>GT=1nHmxj>`%6FKP)apq%NU#h+%OVEhPQ}!f zxUYYs=w>cb7hs49P+&qf)`IE*?=k_L48{!&%c!6|1Ul(>6kR0U}nONQIPW{Q5P8_eeYyTBL32(?95)enZk z2w2_Kf~DfjD3!V2#Z3*Gvm;RN&HCkQi(5~~v*K0^@`NOR5a$yfk0otMNi)6lb8aqq zrJ6BbN_>NNF%s!4@!rIXO8UG?jQTK8#fXjn1^r5&OHC-ovPpMjB>1)gl?oo2QRurS zCWU!U;dYq2+?whgh2WIU@9Dx6r>~6`Nacf*N<**gsQHRDbb|&yFK`V=gytB9`!2T6=OZmO`b6Ev$e>%zt zeJsNo&AMZ(9(`^y@i`~5=ZOHtye;yQ+V7@gMUy$^{qU}WCS5R|DXgTGw}VD7c2);L z-H%vBhs^DZQ{+Wpl-a@HWeF6l;G9yNi8Ndxar<;*)v<( z9@J=E)H#*LHqAqEs$(QO_n(r(QSSyT-XD|cmx0X#q6>%27X&z=#yneCEqmIOrii(H6;<0njxlcv zGFs$BW@RRFbxRjgxx09xFU`>M2=PdRyR}vQjRpGAQD2&r@0&C{gwZLTi}p<2mAn$x z))!x-!&~gPQ*^fut5e|-0qhk&5NK7EYcPmE2`u+Mb2*6N V$D2+O5T7ydE+~8SANm2{e*miPQOf`T literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/amiga.webp b/themes/linear-es-de/system/systemart/amiga.webp new file mode 100644 index 0000000000000000000000000000000000000000..26f45dde342b433abd9430d0eb1ab332a169e6a5 GIT binary patch literal 39032 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 U000000000000000000000El>eg#Z8m literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/amiga600.webp b/themes/linear-es-de/system/systemart/amiga600.webp new file mode 100644 index 0000000000000000000000000000000000000000..1fadecbf8edc1588e74a7cdffd52a17531c72797 GIT binary patch literal 23924 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 Q|2~6(<#=_6{0lAq4H8q}1^@s6 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/amstradcpc.webp b/themes/linear-es-de/system/systemart/amstradcpc.webp new file mode 100644 index 0000000000000000000000000000000000000000..2074a294f21befa5324921a7bd0b35fafec54756 GIT binary patch literal 17032 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 lBmC)r0002p{&y$<0280*a)1B;000000000000000008JxWr6?z literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/apple2gs.webp b/themes/linear-es-de/system/systemart/apple2gs.webp new file mode 100644 index 0000000000000000000000000000000000000000..58c9193a35b768e3f2ce96504d2330bffbd7a525 GIT binary patch literal 25856 zcmeFYb#NrXl0G(KW@ct-#mvmi%*?Q2X4ZZ+XS%!=+BB}p-{XA=NGT~tUxO@TuL8UO$=d>;fL|M*A>3oGOSe>VZZ zc{awj&Y<5aTRRsgC2=7_4NWaVh+_Z{03Cn;zy~lJ8aq1(Dk#YO!}`B3kBi^d-(`;O zAASAzHvgj(&cxK&7ytkw{I(DKoHKeGl*( zFaJYs^e=q=4{ZKV{Le|DI;kiLf6oo|TTW>HU$D`C!NwL&w%;}^-!`NswsznB18e*X zoBRWN{{!3F{QMr{XTF3;s8m2EIn;E5>!Sbw09gkBdhPzrx6cCrI3B*`zy2*F%>@7uf&qY* zfq%=4QUQS0FaQ8^#lg_Y@SoQK`L2P@%m9GfQUCx>697P&1^}S7|K+!D-9Pkz!X*Ge z<=a;>697PZ1^_^A{@u6E|1fXJZ^HlXxBpX{|L~unjDiH>x3_@4C`cu)zuc`wiY`g) zNF%(~H7C<$K@b{jcqM(CALcYhTIk zPon;oX<%ZuwNDmMLoRIM+Kd);?v%Exr}Y9o3sTk} za#SXK4VQn2(TPVC4v7&+AmI5ej+mHAJYioVVZ5>39N}7iEHQ1oSD#W8NJpwh zt3!*Q)o7g9*m(eY45#i%)vs73uwp+r6V&i$Xzm|(S zWb`8(qLzO|iin-tH>e)@9zA-&AP}YsRnQ)cHvd5(Z8NA3TMHo&At2d~h$D#gcmkL< z5aCP%s;1R96%EFdStAhUl0^*~#oM5`@^@fz&Te~k7(C4pjU65hKIoDmS=x3-RaVt+ z5)Do@$4M!DNAt3Y+4V{-W`ZSzsq6{hK+uL?C%oU`uEFV-Hah(g#a5P^o+9cXqaW2J zOMQsEwVqD&jUWHIi{Iaky@DRh_mo(EE(E$XJe{;NYAZ1+v>J*YqpvOA?9y1~qc-`z zK3!D9kM603h93xDbyriADXTZgXeXP|{N4hz@kA<3@|&LBNn^U=d#>ZzN0};d?3;0Z zLNs{W=eX6h;oPb;(z~Hr98mQkI)?{p*)eUN=X!eCUY8eA-c5_x9X{|m+nznlvc^WpoYa(=$ z+T|%3t!-M=oA70(!P@JUDd4TV%~~bDMXkAU6aE5P^L0McXIg&!%`33&(Xo-#Uh%{{ zD-Nt)DN4n%ZPr7tD=xwas~+{t=Y=T=o&aMGsz#E5(w4IgOL}m^Y!NL?)ty|WJT~2| zV`J#5F<7I=TrI5*t2an!WJ8mYsZy;D3o&SDRD&irT?`Ezom|ymV9ZYm3zUpqm0|oD zq-7c?i`Cp_WKfH$%w8rs*xRinBU3hkrkq^15Lpl19AaWt7DI-j_%{J7uVf{96@Ijd zAgoN56h#q78vJ2iVn{J6VYJ92Av!Uo(d4iw-Au!6lyuf9Wju*RJ^?Gi>_>WNQxz7) zgz_4Z`KZXO4zu&@trQc&QhIWx7B{rU{CbCR16ISxAQU zkf3yl=4^q*VIJAcugmH%(X)Iz-m*o(zXhXtZ5FF>@LI@lC*5MA0NZLQh-yT*6TBJF z=|GD}*5Ft~S%@Yf=IkF9g3MwW7E3tCA!e^dU=uD9D7NGm1QRMyP1zX{eh#k3))UK< zGMcZ?Br}~3fQFZ0`b>+;aZEftpv9=Uv%9M`w@t{$&%JF@Qo?X*5yTk?5Kv|T5freH zf&!ov0{{{fxjeNVHLzZ1f&aq}LTv%vIP8WibyG8`c|eO)tnrvhxvCVfQ&r(p;mhfh z{7Y+%csAQq=Q_XMs@mIMNf)k~u~l;kNbv9&+7`Q`%X)0}K(f3)k#v${8TWi=&$iN} zq%`-g98sKl?e;S*dP0Pv$Fm%!K&MtJL`~qY66y^u&>NS3;$KBT0z@M2y~UqiX0D!a z+8&m6${tzi@sB>%^f`%AD?1hOv3m)xED=Sk2^l>?q2pW4IHS+nZa_?&}Y<4xSW3+Oj7cEne+BS># zoUzc_LdHfrIWmx~)aFjsT&Yl!8Tb01mZm`%EU3*r0%ZN3K-lCy@}~X1WnZCVVYc%= zZmr0FP^`|cOckLRRYXrUsL5U_mzTWd4hDqeHD@Z?RKV{&8^jj!XxBcZ9WO!3RG7=4~!$e0vpKW$Ww@%r&;ZX+p}LN#bR+|yTi12 zT;02~s3pC!rLE|MzTOilYWc_E%4SNK+oj3wI`L_+y)%ADCNwRSn=IRmHJ@d^U}R#J z96G2c!nhljecc=Q<5D31%_2{FI$Uxph`HTZWh8IKIN&)#S`tmmn`%jz8G<~WVo21U zZA}sCo(nf6DmiYS#kUW)aBF|bSd-6%doEgUB4-p%_S?V?k(3;?YB$g7@*r^3H%Lek zEe4531i9>*h?%`2Q;gX0JP+&i!#7b-I1KWu)&c@NCV3%5dV9N+x{Ya;-rF2;_I91y zqW`v$di*bXzs>2^*qE9M zvk+v}>RB4`=Yb&ZGy4K(mhuq{L(%hUug8tO)8oew3k*WBL9d3tznz)7uk_sH^hrxk z?wnb|eI%pZQ2!KMxFpNe4FZ znK7&;WTQe0RdoDah8cbzCNsFCVnrt}6x2K`*CT%JDLM&PMW)d3n?!p3oNXrwPaDKHlN?SWfUY z=?Hm0E^}zecQ#tp&xZ6=sASh~^xP`tc=tR*`;F!@Tc5%$&ur17U{U_Q+|v;oJz(L< zHYfT&b)Zxd%cOJnNF+|h#)pWX3#?6H1A;{!w$^44^=@hj5ul)sCKEh74(PpC0hGKx zT;%Y5TeYg~Z#mil5d*ZXn1hw#c+2i1n= ztik7(0p^xe_yjJZZA&u*ym;)-#)P(meJoe5C>cVh^T`KQV-SqL9uAzgcLvKY5=bSt zEOFQayl$3uHXU=@ycTxI{?LB58z<>)o)32m&zHBeZRH{%c=o|9gb24*oI2HzI8Es* z*m|58_y?`~-2$cfLhom5-F(t+ceG0XRgO~a{ajMap_5cfC^_a}GD58R+Sr)dCL5=X zHJHbYjQfKg|G+8B+atn53SUk3p{nw7EheA5c;g)*X3RW73o!DOiL##XYTeDWu*j_|?6<0Y~GY&FIyJ&z=p0lpOMe=ue?S_jNlUNJvg0ULlovYK^ zy$1XlvpN7wiR9;nKP;BRIv>a^8+4^eKLHj&%e(=<)LOtk)K2l!Aw*KhH172=RC9(+gzF ze4n+-%fx-MHwAow7qa2op?nFn@XbJy?4|`95w@4iyP!>A#tTXWjSO=w62m!uk}jg@ zh#2ohT?Y0Q%$m$_{?vKaGr=p9R}dGhfR0lW)_W9i-z|4SoR@dS95x37+#Qms9h;pP0?e7=>eU6f|jzWN{4=%cf|<%~PRU8YY*C{r+(w z;>I+i=k3?$hc(46rRMY(aP&tAz*CBlQ;(MEH(uZ>PU8L$kkW-(m`v*_k)gq(s30En z*zXGT^ZvSqh|(rjvPIMv4VYpegWIex4hsAjt`k3Kk*oTC`Udxp0K~yN z9rQfOI<*81a}?#?Hn$*X*4ucg(P4|Fi42^Zq@==jnT=uqzA3T2dgC?fetBfu&stK}3q>k?zWfCp<;qH8j}u-n9d(u(e@O;} zH#70UUcH}wsMsTVq;;Is`bov&DUg1Rl<3c8T-SdnWM5l^a#{~=6;1L~c1 ze?=%A97Sl)h4;`U1+svEMKEyD2qijdhlLv@QB{^iehB>VOnvksJyrv1oREQpoTYEV zKVNXV$|}>Y+ry5MU3i8%e zC%eD8wKYI0h z|1C-D!%87TNjztr9HO~@Q^1l+@{h_gPS0Tz2ai*Eyd0od%fyxl9&pQgtJ5obZeO`5 z(K&}cgkvur$$dt3h^S_ss!5b*j&W%zyuwHlG}c+BMnk0wWZNKrP}_5KMy05@62=jJ z(aPGC*KE_)#WPYmlo`K3@>aOJzrv4GOjm;NjfWVm%5Dhm8c6+9qU4D?Z*UpBp28<| zc(Kc(y4Kc^3$ve`D}A;ZLQUQV$+C2FMo2ft0pYoC*4OKpsiu^Y14k=>#tl}D=C+iX zN`YjWx>ljkHvB^-47^;R%lV~%N?9=P=bH8uY+8K)s+^d!G@LClpd~r~nD|yzBAs1W za*FN`GivxDUihr7?S+R_PWURtMlO{GH#ikw$8LD>urhK#DQl z$~S&;Emd*13kTrGh^!d@S@h`N=QiE)NB^R)zK=aA}WSQB8EJZK|kZ$ zz^$JfDDNDQbktNF@;+NdLicc_$%5G)nahxxr<2Et8F!hG+RJcw>dQ7__kD;L+IY<< zPmEwB>1-lEJm0kAr?75ZQL()8Lf6HJ;I3EwwHWx}rH=P`CJ$xsOpO7yaQCCIRNqJO zg6oUYMOA}KF(NPfB47`Mfbv1$Gn@K}NBtb6g~|tvU(t|zSY%V&c)3JEh2ox8>Diqe z+fV9C0F0j=x(DX>Qzp0qPa!}TCnw`Z8wnBpE0*5jg=`>&rtHBJC}rR;X6GO2#0%Mb z7mq_Y)Yhr@LR8312GzdLhj%Y%_fH0V3A|?ceP-cDq*L}G!5J7Dutfxevw+A?#dX^t=g9wP49OkBz*MEbJ=Q(gSPLlcimIGuDOXrxJFkXrI~lU9Er|T zWQ%gX!E2p8c^8-oh-rP5yy)@jtTP?VC=vhu8{l5%LCp3XBS zkc1W(nVUF!^DsGBZ})}u;pJ+vN8C@1cd~>)>k4|8B{~AZ8#BdPmd|aor0K7Bt-I)T zAsCk$)SNMGqLLZLy}+D{ZM5A_BzM>jm6QOF&$2td(7Uv`GDvU@TF$no-T0fy0@Rq4 zl?-X8J9%i7;Tj|%$04Fdqh8AXURlq*ciq&CTig}OoKliQ4B zglSfrKiA}eJ!@VAR@Bsn&0?@OLd>HpJ&_B1npOJp$E^Y+b zh+@#^uB<*=nCx2=AR&O)oH-{WnJdn4d@Qyv|J;WLUxa;pdGnzok|=6a8GdEu)C&9j}WF+?zJ zR)B!8{^@gF8^#D|6Py;#Kdc9&iW2A)_;W_!bPeF94`uKQ(LHG+s!%o$vK?gO-!&Xy z_qn|T{T|fGf<+0`?g8MAGI@v1^|Ny}Q{Iwr#m*nEra@ixZ&yoi2LA=x1il=E;#)^6 zo&-A$%K;A>lN@sm+5#eL;wRqy=~A8G1)-MZSkO2UD8g!j)C=rSumuZ~{S0F8h6VZS z=jS{~xVP@>%7n*dKvh>+OcizA8*i_%p3+=?DOAl7eNb;6St!_&=pvF&972Z zAOOKYq0{Y;Bpn5O#66bQBGfXUI(3PD%N`Q9#4ZN?33+}^AbBiJ<|hsCsT*KEXUCL| zTRMTYF3VQFN@7ajp^tMqX&=(PL4p7qP01sg>ytVOh?eITp0dB*{I)HuxEVTMM zbPUS)qnz}%2dEJmj|ryY>%W3f?F>%4VJO^gwwxc=cKIK0O!UM<-@jM!-Daf%eXc$s zpN4(H*D=C3Tk>;Hk-?3NbNW#Jk!0LZ@nM4Ta1aWP40O*rMj=K|g*vA>BKZ;hvWvzZ z5?wBh1W^^K_L~>I^a(a<(C7x);p(M*25D!7{V~5Gt-b$s9-+Q;eYJBkbWClkwE`u{ z*K%)+_=vrFl-q9e;OpbRdsXq(GXe7bMw1X*0s#1B50ni=O$b5=!pDdiB|=P;k7PM- zK?nlc)av(j5q4-q|Is;iD@eXXa<%@o`c|&GWrp`Dm?}Qx4wgo*(z&32D5RuD;KiRv zxaBjR>yk^hzX#Au_V6C*pZp%W`o0qU^u7!~o<1PH5bnOnzWG%jTVJNv z5chF+J&!#zzK-7Iul%08raz`189(B`W=Xx@gs=Ff-=>=Q z?k*5I|NqASb073;OIZXHZ!%f_ss#b0pk4e4S4ZjXr_qNi;0UoFuKE?maJ+o6CsO*K zPOkgBce$WXT7ufxPknkR7jnrVC#o}_WpJwuMd}kv8$7SaGULx5-_yOhqCqO?^#&Q& zSfk9mA?CB)pS7>!nO2aL_jnB3^a&8z!w@ld6`u+jJ&53(KZ{5RWtCSYUc#CaL06ADEJiq z=Lq500z53>oZT1Xp*6^5Ff=`H%OgLF>GIkm+ztP(``%zx*svPo0#`kmlj39FMLlX^ z!vC@&+es{!t7;XuXupQV@e8nWA=kC3ffM)@+GeqvfdxE~@}PUfl5&TlVs!?4#4JA; zEz@nX6&I~VLR|Ib*^>X9Id=&j%FWhAsY>Cc9NM;izB}_vLlv5Usb|Zc%Dx>Bl4p*wEqmrVTJ1h?$BK^-y%>LWp{cR z_S-~TRE$m@x^olmjI>~<#E-41P}G*2$zm`*3=EX=`o7OnHC9oLEEh5f>CMx3G?Cz^ zi60`%vvjs@@ZpmyR9^~$X3d|)dlBmvKqLNk!Kf#mSCJJ$NEcA%Z9uqKN(D4c;#D?1 zEmE<7e{pI`o1Ean!Pc~yWQTY2l%Iyxl#Vh`_O+<=Fu2H^mmtpSKxYUB;e( zYm37{qqwW-2+KsZT1BrrVuvDQ_h-iBwY-zKiCuUV43V_L?!`?xWkE_cc?(-(j8_Yb zrt$AhFE~&u5P=*`Z+pFTg1xnHbh#U_N;V?W$FPhM|~)if+l*LTh5FJx)qv>c2)XN zJ`yRV?ZHA9_CL#%Hr%i#zI4#qU(a3i@_*zCrvFAd@#c}hqj4@lRfF% zr?2yPKnK^eA3Fxyr!v68{xY6O@xdC<(zK>BZ0B7nI#pVgNrf;Q$Y-GK&g-lKB6vru z1mE}PY|4s>d9xdFfymE^YogFV*(q<}U~esFX{hYf!0qA)Po8qQbW1A1x9OwcE*0jQ zE+$kdeW+t^;atl|F^CMshat=h_k zP%t8C;yTK~Ep=}WWZzZ@cD z=A+%_^J!bE7QUpn)BDxZ^4517afTC#s9J;HN z#jYi{>2(+8IaBGA7{CPLG1!2IL5bH+t^su#tG<;{Qzoq5JHyC-&SF;^D(58i!SWw@ zD0x94U`%O_j3x7azVmtI80R6Glr%k(p%i%BfJ6G>@z_a#&O13fj^=^G+W7A3552r?lo<<#shji_ZREKlX7$-3?_G&W8fhD6bxrY10)?Oe!^)U~NAfy3qtB^)FNX;m8p^v4Jt71+3@WOLNDd zp{V|Aq7^Y${9oGtAI`!PUK((uv2U5(|IISuoE=6Lrgjz=*p|R{q$!+k8&W+|SG)tiJ;Ps4I2*2u$J$?CJepu`*l5)Bx$NhVOLQ`9hX7(x^ zSoWmiQUk+;+G!N7%)t#x&~~+`u0Y-}0whiG{Ttt_TK#>-R>KwOS*{bBL-ek!Z>~3u zdji@i&SI=PCSj~QZXx``VDA@dJ!vctVR>8;B*dmq{=Xt1fh!M**P%D|?AAV6Ow2L; z2|w#ROnhi)04EKnI2uzx1vf08Mr^&5^_p?3XgCZzU+ z0I-L@?yk$>OnRj*bbe;4#9f4TPm%Kx|Z|FP%)_cY&ozCPdn)cs>G*neL@ zTQ8VyMZI6L5dPj)vWENa`q0yo8YnCVxaHpMu^BuC#}xMwxQ*c&o{$uw9c>$f{2Ze9 zJK~OBYrV7t4d1G8G8KG#iAa5yB#52#7Uh`gD_Q?czr?P4vg9udz4&_$Z znzfmR1coD}6dKgTr##DjpChEc+(pTFh>BIa74d^Mk&E)@VLBU^U?&DnI=*ZSxcT~j zU7w2dCsWobZIV*UK2yr2lkOQjLPle^*RLW{E)krWFZsDj`=jj+CV9|~+>qBt?eO#N zRwE6DC7ygJPsaPU7=C(&bJG)sjIkuW#gd|rDH5K4jE{5bU+?jM!nxN$yA2rF((P3b zK;#TR|2}kI^{eLH1b=#y7}`g+SDC5Iz$?Fjpf@n}FtFRiv4*UE;rq?W5y5Nj0=!8| zr)ezgJ?r>c$Pqzl4q00#i&{w5_|vZuN?>Un+fZDH%(9<#1caE?!w1R?Dg%=|33k%F zz^LqV$8ADR?+ioU|BXcpq(@rFmPf;vxdBPh6J3OXlwlV>RQ9<^SQCEVVup+w>7YT zrWXe{EDov;hj9jb@@lJKw$bQsgv{8PJ%SjkwN$_NX!McJu8##&R?_-tsQxF48zO>to|Q%{Sb{U;_*5YhT_!yWzmlW<-4PJ~7aT&#`&&)*l)8 zydR^09+q+2`Nza!rDg^aQ$(?CChpQVqFN!By9wxS!_SaOLW1^L79IXRVtj(;-=C)> zLB;3z;f*8;*sqy5gbvy+$SJjGH6>-E(b)ae-~+`JA(FkQxwXjC^dhW#hiQZX_u7X2 zbAiEtd1woabJ7jipW*X&+FA^1soYHsyXze-7pVWmU1+-3H60kA2>k;oh4loOdKZ-K zHx>}7%crY532z12c0II%7?m)|Ne;|ow=#wMkcRoy?cY~S*PRKZ$(Wu8w9%|hO}Vud zqnnVTVCM+)(*0qndG4hI#JOQ+I^1}EE-L1t>2((>O=m<@QL2zgYW-ootNte|&{om@ zTUGnk&l+Eae0!jcHOPtl3(@TTmQRg>gZ{Mzy@_FU4e+%%KQHno4>}RSmVR^zu)EM| z;#xQ*{7FqQ|K`L;lUjqdpyasDJ#CHt#iJ=IK%#|$usgEnMmT~KFw8*MSB=+xs)5Y%8Z?mq9hf*rL}9(ZKU=#?bZ!D>M~& zCTPe^@)La2;wf9!Yhw?d@CdD6${Q|JfXw1CUdN8#UEFo2%G_0+8(r#3gb4!2D~Q1u z@u;_a2^1*c>xIRT?PMi$6+s+x-g+_+;c92Tp`$k7#~H87_T|T1&+JgnPcjYp!%QW^ zFv6OUK%HX`|?rCs(VNMh{d_rg%O z+x0R?>8NvF`pd_s$Lc<6*LyEUx|}TCTTot0&%4YtC9jey`aEpf5j%>A1%|ytblu|I zU#`BE+o*WtcycYdB0jwxkIPKD{JS-=JWPB$uQ~P9bI)k4ze^y5ad{8z^#;VINfGi1 zZQ^QXeblETuZKJ-%~H5ZoDF{5rIJoL^JDJH(-gmdxl9K+jKxGs$WM{ZIeKW|@b-EmX4j#x$-oa! z^!KW%d}_C55yM5W;HUwT6{giKXC9W2*D;x&QW6rhJOX|{kADV_$>Q~edlZw%=9I&_ zxEHt~jk9}*Vbr<_91w%?S2oDLqL>4R8dTRMXUV3PpLXsfkt*Op+~_v!PO3>x<2PQ- zX#~fYpO~rt-byB(`Z56D1<6d}m~5TMME|Z)>72>U0#_(Yq&VtA?X}bAskzp9zwzAhmRg}8>KGKN+dndpu*8b9}tuRZj7aa&bky> z)v1krlRdY>&$@}x%w4Ly^*7XJ=UiVUfU4)jW7{L?w}VEr>8*z2mGK?5T2rla-5&$* z`Pq-stR)vQ8$}(w##Xfi?h+enxzx|xjOL9X!>&D!z4K7f2~*ar8_6lNpZVhUB0L`G zaNFIrKb!cXQgTJd`DjQO5GOdVAtb zykgSZb%dL_JcoqxCJckrhOXu7n%&fABswm`F zI4Nnj_Gx-`7> z`0HW`Z>JZm%yD)f6EpI&*76R#mV#hJYXy1ef)D8u@EayAO7ZZ)~$a*{Sa7Ap*;IIqYequfcF>d z`V~{)QrYZJPC*FUaVvQ)%6S89FEx*gF4qn}Rj96IhGnWzn7l4j(gp{%SB=2W9_beK zka*poW9{8SGOC!U;(h^y>149y1&!?IYWT=HCm-ye-Qs9MpiI^h`l9iknhlHbM5apr-=aG(}$cOi$Ic&CtAh+(*9nqT-VJmW}JT8)7qmx3eexz4sf$jnsl z(x=mq3}RnpHU4Y_;ueDOg8n9hW_lLBl$|bNv#y|H(}OzTy#0_)QEZj;+*hvr75)>y zJK4hAhjkjBbrA_G-%Qir3P_gny~-ZAfn{KGjU%gYs1d7|zDvE|Mu$O#-=vzN*bpN% ztF#SC{mMzD&>_i5wXlPDT5e#82EnuPflyIaqNd^NZ}!sf^$u~@2D-z{Cns5tm1A>r zguetf%$499dTXd9VX2lAlp9L2AagtdY`t4h{MYzU@7ih^+>}ve&R(#C3Q@x#yCewU z#mC4Wyt&y>J2sg3NLIcxw7DSIZnQ1Jfq}{vXe3L4D4-emjIVMYLgrP!DL3%%{IrWd zK`zumC-G46NcSTUi8c@1kzx7BU6yv1$Crw6iwqu_gELW{m^f!T$Sy9FL`6>Q#Q1=D z32_MA6+<%eaoU8GW*Bk2zxMKI@;Gn$56)$gn$VK*RxEgBPisi;`COfsfVN*)a6C!; zmIMHR(x||qf%Q(!?YEIrF!~|+7w9_vV}Y2uuB7p2vUf>{f*PRm}O4u17Y^ur8bB!b@gSe>%DgF^|;XG*FY|xf8wV zuRscpV_?KI4lffeF8-dmJqw(s(@;?O)zR@0t9PRb-bORG+cgO8qrY8ZbkANkme1-q zgGhJX(BMx}=AHduoyxz7V)7NEV7d>1wd_2Au1`D$HgymPh7r0Hbckhf#UG)5z$xZgcuf*q^m<8216pp zwdB(&C(`nU^C3SJj-ydMywF_@f|WZG$AR)5re$35^PcwK0f5Ygq8_HRjd7#jPY)d5 z>jjBU7`WM{zDeOQO_IiU$%O=C_dXK^0p)D@OBTA~b~yg87rP=_Z1)n>XV+h5Go%=J zv=)2f6nHaJZI#W}CX+wgGbthab>t6o97FFe5vL* zo@%_%16tB^(puyP+-0wUBYzirJW8)c@*GQ_=P{o}`V}FZTDkpDs~C3tL_&%tjw?Q6 zt_4{`wNi_nx)+WwoZe8e^3jLAy-^>0v)1=CvVe_$46b1Jw+VRWh*;xl=35m<*Kuy% z_G1$P8geU6fZX&XzSaH$f#&S*m|HD&xi&8$3EAoBkQs`>6rF7Q#eti&*Z_eMp6HQ=F+)@T=SE>p{z1PXyXsUNmKi>@ zCR*(>^74jBk+eM|YhyI`;k-@SMiog@zBJIF2}%AWC%kM|R-9Oq&IJi@IMn$HtGJ{i zzjRLo4PBBqHAMylBmM)Z$p(yj0VA)7Vmxqu|FudBnwEodVly3vMckbcsl>o1%txchilz%7qm_Pq%jRnyk`V?zxVzD+gzaT;|_pFoY|q z(XHGDs7{-LH{j!VXE@qWuHaeS7_LWZ!Ym3LqAUE>xyVSD=RPQ;;ESsvq9}B+b=d5A z&D2t#XAdzs*a|qL?vt3?qWx}{NI%7@m`i{Le?YG! zE5=3`Z@~Q}-cU)3fby3Gg4iDh6JoSc?s{~1Hkz+`*IMYG=L8lVWBg9{9UgO2ec4}^ zv8x`_QdAq3Yw%9*oS#xd$L(m8vcjxLkTmZmlm1#al>|?)n->H1yU>MsL1tpFq{#Lg zffw94@MthPQ$C}=24tf8fSgwXJ;wdwI$a8$6_c7aMWRy)Eq6ep$Dq+2J~++M`5+IK zwO^bo!>`#DvEQ%S=ke}$-)8_C1{GlE@#P}s(PDZs_AG|0j>W%_tfnuvJwT73(o*Y% zx+peza3oHA5VeAB0{Khm_d){6);)_VNiWLCw*02KZUFcvmR?fXbzUSU{Xq#(r z5PAz^>yHk>$zFx7jF|W&*QGIO>2nKIsSlkj)8T$#^&5s_tY=s>Te~yCkliQMc z<%v=~psY0`104-_w)V42ls?zf&1F_-EQOEMAG$TahX%wDuVFMlWa&i(^=rz{#+RlA zA($=0wC44Z-*dR(E*Dr6;$^vj zwl|qFht97q*OcpA+xrOU0T8D^|A%+}^u8*Wq`;+dpA5OtBFDqJO!MzjUQZ&5anU3- zT$PSU_UOw4#x`Mp$K#3X#|iM7Y(@EI)^vvkcvBb5hqe-?a2q0yhEAWUeSNdt7AiT- z>cSYuIP?`qS9rjA>kY2z+}CCMC7SQOYFFcw$e{ay!|9w&SxD6azKcQ<$|`~ig++=) z+0SWYWmvwobc8S@oX%Icu;$WvRttbqU5~ok z)K~@pot?1m<%@#$oD>!k;*UrqUx@4#Su>CPXn=6uY+}|4^9R+xmhT|aPeioj?Jucq zZ4|qT0spqyb+css2Jx?DR%QM}oqfg(9E+yGmZ1ZefQdVp3hS4J?Yuw|pmE$v(2))K zrpWmX*ik|9`JCvK3gdwfIZT#XjaWIhGqAY+>C&=SqTc~AKY`hRUF(omuN^=6{rDP7 zK~mx*9oHcv$^%?b-uoiq#M>|%&+|OvDmowOq61vMR$n)uyw!UO?=5Vvhhz*G`B>Zc zk)DPfONwR{t3Akb#Wk0aeL>but^sCT7)h49@XbKiRXGzr_dut2b-b>(xfjCx96LtZ zR&pkjBP2R6$}Mfz(jEITuCBPq%Tr7Ym}^*z&3z-CpM2uW1;O>*UBL!DFIf?%Jggj0 zf|q9ce6I=3F`WPn+(3a^ktjjlr?J(U45 z*+UKKNXW_*xqu#KN~OuXpvA5D$?lz(QK`dgQ#4;dAF;NA_rXQDni8Dj!km9R7>S9` zW|UU{P?KlaXpLjc_kSin`jeLp1jXKDd`7)k8_SNNCY_V#Go((>@msbAvsK7qK5GN% zB>~y_v7mjdjz8i`unR$oL75>VM%o)`rSJUge+ACXmGFuW5OVMz?``)~*EKzrb&ou6 z{O%p}Go-wjo%N5L0c+>)$aIn|2p8(b(({FmiPlG0LJ1XJ?hN$=5fZ>-2}6>83uDLs z)ESLvXk&^$?f=N8KLsw-|U)KxubjT1nrixZi(Y~1G{hoHceSTN zcqSYb++@cTwO2=NlYkn6Y^5bwqqr$CEzR=KeGs8tJOac70S%%rK*_anQ`Xvi6+Kf3 zt9zx0Ie5SLT<{_Loj8%_JW^*(RGDdNcYf*b4`@~u~#DwqT+yWJi&c?i&ZhlH@acPmF%bIf^qo{s? z_{pSrO`K6!V^Lr}lVCejlWN8*_|vY}!?)>~;}ez;9O>07k7J^VXNK9nOPJTP7KtX`H- z6uXy5B+yg+U^2bfxur6~Ckcl;DggRqGfh1Uu-@e}Ju%;wYVcmpE<;#}0X21>ED!VH zJEG`45+P+J~AHR?R)pVD7JpG%Vn&ej=Ae2V6WC(-CZLgSo z0q%J3cu&uPXOq(!;8}~9*bLX(I(4N}n}S2bR2tM7PF~o=L_Gtp-kPw?oY3&3hspq4 zH$9b;n(SAn!BDIRXgiOHaTZzIBo8F!wE5aW@32Qu_}LEwHPsoP|7N@$bdM-1#lV*M z;hI(rLV~meMEeIbIJQMV0&JHh#_n!QQ=;59pL5N=rJ!C}@6A;iEs<`zPA!};Key8( zk=5{YKOV3S2}drf05F%U!e7EG1ejMiQ+W-T4CGjO+27OPPzTHdaz`B#;9eK7+|BJF zWVsh93x0PG3W>ZCLrG>o6AwDil@oXU}Xe{{QqZ%hXQ?#Dvvu8Uw25ghlJUY8ma*cL>a+cl#-O*(-=c zt){kliu=(&d-f4j$2rKDGyVgdjgZ{TM)Za0w2xTcq11@%qLWbic8;Y61dsZ3K1zrx zlZb1=bR)Cj^0(C2!dbrs9g=!BaCV>UcaqG7Nw|~`pcB!PW;BYAlvtx@7_(;(YH*{0 z3ua~77vNu8-m!wHm#!UPeleb+uq-!|KCFr-+?CmB5|WVan}o=F;-}# z8mFj*P{S|79803~i|pGc7BU|B=BM9UGv15!x%3dbfch9!#ahDStqF#CVO(PrZhG-b zgx=I>Ac!}wd!pMgWnZgS!D<$F=a1=#*K?GqrPuF6{9}J>*{swb?Sj9r2CW9=t56wm ztDFoWz`pdS5-5ao&o^X!j2+ho)X%?s6nWfM!4&M0-;faH?GF-<_ZB)4`X9Uu2JHLv z%*VoMFpk!8qVOubC&h^k+#KRf?p3up zrz;9Ml@~@+I7d#cPx#Au>3j=RE?K`Q>8VaijxofeJlVFC$ZJ-_KNeu-^oFgw&sXQ3 zgbxR-?{{Vb%bm+D=tJd{Zn}*1?FwuxYnzKmqw-;R7RvX}v_H!`t{YVI;6llovMtu8uI{$48 zwW~WzcX4to1{Gs;Zrn-46g%0=2Sn3v=w+Ln{MUavAJng_{Xv5pFM>RBL;k*cuq0k& zl@7}QstfZ-NRU$6nM!>dRXwZV3T^$xDQCOo7#cLR+=L; z?NNtTOE6Z1rfrR?OE!S_RvD$?qRP&3b3W4mE*f~>o@sr&q#QHeT9+pt@flP3_`TgU zom{i1fR5jU5120TfL!j(#KN7Q3s}QSG$r$SyCS#?L=qE-67gD#g|3y!B}0`8B5`PU zQ#G;dZwPIAYoau}XzjTxWE1?#lAo^R;cl=XU**eoDJ~pj8jb0fF8Kh64i#I_P@)sa znm(wS<4$rem%{l27-d>BCDcsPJft~A4cC#qNOKD!g(WVLV7qp@M$W~8A$>L8&--W)$+OWPE95iSp_Gz; zCokbAt*uu|yvokVD@9`&$j7J!mV+L@GbMe&HvYmi)}8b0XkOx~%HOX0sI>KFN2Sy+ zaajg6Wg?E1`{wNAhK`4_B8N!p8JmZbpR{^2```U{M5nmA==}@d)y~1m$>1k}(f|_+ zR7rzz#Hdf@oA_$sJ$@GJH!_Q3HJbEs~);4O>qy?b`xoj7VM#(k~R?Jc+^d17~MJ0e`#VR zVs~RCN?x4xv@&F69z>|kg#5^a{7;6Z)Mwm-eVsAp{S(?=keoMExb>f&_>X{7rz(DC zKcXm*fD0d)<*KTxTHPj;qUTdVT@^9-|AieamjC7iENi)Xjypy1UFYpZ!-&A$H-Peg z6o0BftSB?uo<+bmjhJC{J?~xh5MSuni7miK`VdX&`@4>-W$EBdL373gk{Q&8CZ&Hk zK($uD5wp}Nz-0NCeBnq*v+9}Mj479FlzSt?qmUS;5fs(f?PhW7PE2`e_O1)Os$e2e zMbvn;Kq30RF14s%nSeh4TLSh6YB@9~7;V#O?*K7IG>adq`6tKo8SR%S%nj{^MH3Fu z`Hpjos1IiF!U5@l(W5bf-9k*q|76v2o$kR(h^vLI5$kJH2JObic0Ddvww^)i`9g|$ z#*d*2mQHkXh7NC^N}~J=NKyPw(QCFjIU2nelGcd zUB(M(k`EXAMW1k1&I$ZwOUsANtj>mHmWSIpG5JWe5t{Q|0cAn%N1k>&yeK~@q>sq5 z^t2kjP62a$RWln&EdtKkzx@L7jwo85wayCVxs<^MG;zj@0?;40t|eMA(})3P)Gse- za+}RvraZ<2;Db)al!lcC5r+R6p%wme?YP0MhTnjldtUz(6YLax-wK--OS=$#Ujsq^ z=~KGs+f@9xd`z$>@0)Z{Ke_S^%;9?H;igMi#|pWV+}>F|w$@HduLsI~+~oI#Ry6cy zL#PW|Hg-GLeTP4y+$Jazyi2a{LL*Zcsi|RUqkiKe(&m?An5mV`1 zKEdSCU157s*R^vpkr+vp+4wBFBd!{ZHRAWl?TjQ(nITYd8;^Ou$6dksigy0eW4Wcd zefbQ9PZx-OMyKv2^;@NfwL&3#c3m3+o#`GsFM~f(U078hBz0Fy!?~bxaCiRjhb?(0 z_oX~fT%|_SH|`xe1=gYuj(mA+L9)q{LdiE7xBMb*cpq1Nte_-V+N$Py$!~c?X!)Oz zOA#d594`l~gXRpjrkNN3w506dritpMEH(CTlcYsfE+hp*T|&c4{S9;e&`HvD`)HC_vO+0#I{3lGcZ(l`V>a+ z^V?V_h7br92ZIE>kkgid72~=5u zfpm()b|m%S1`^H6f6I7UsEiKxi~qq-@@E(SR`<^2LK�&YRCPcgjWrWiS|s^cYUr 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 DV45?z literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/arcade.webp b/themes/linear-es-de/system/systemart/arcade.webp new file mode 100644 index 0000000000000000000000000000000000000000..34fbb1d74f5ccca366326a94b42294515cf49458 GIT binary patch literal 48372 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 r^-w?n000003_t300@M1P0000005!j=f&c&j000000000000000_hFoU literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/arcadia.webp b/themes/linear-es-de/system/systemart/arcadia.webp new file mode 100644 index 0000000000000000000000000000000000000000..1d5bc789b623382c4eae41571cd3b3a7610bdfb1 GIT binary patch literal 17344 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�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%0Dt!OYnM&zOTI{K$Q&Z&!{4aTFn|5#`C5p$aIO1^_ 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 I000000Lfu3;{X5v literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/atari2600.webp b/themes/linear-es-de/system/systemart/atari2600.webp new file mode 100644 index 0000000000000000000000000000000000000000..2730d4d24e045a2de664ea8662ba9d05f6360801 GIT binary patch literal 25600 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 G0001+diUD^ literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/atari5200.webp b/themes/linear-es-de/system/systemart/atari5200.webp new file mode 100644 index 0000000000000000000000000000000000000000..c783ea6234fbca580f9470c588b9554a93b8a70a GIT binary patch literal 19134 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/atari7800.webp b/themes/linear-es-de/system/systemart/atari7800.webp new file mode 100644 index 0000000000000000000000000000000000000000..1c8d4069f6a69ee2fef73643c277cc80c09aba62 GIT binary patch literal 14508 zcmeIZRd8I*vL@PMW@fep7Be$5Gcz+YT4XU<%*>L-jF!dBEe6YC=Dza3=gvMi;+#7X zGY>NllTmBc*IAj>m6=u9-BrC*q$MPZxc~r7aSpz$IFS$r&=B}my02t|qgpjF|i`xe_`oJ8XZccx3#s|hUwK6vQz||l4i_6CV zKk&+5zRADv>0fO55B|p}Ocym3(GS}&Klr4U{{fr)2W)EPV*eq-_8~)QX7BLPKe*Pv zu-RYi_ZQpSxqpo9ANp${qPc^*>PJoaaS;L}0nz|@fD(WdU;=OlSOe?;ZUFj^+Tnxa z3Q+lI7x^#r@&D0R`p`1@(6R=YerSjR90B$KL9_%`MHSi z+JdvE=Sg%YakdEcIsFt3KAS}2YR*x(_p~kW#^)k+>`6*Y4zRJ-QbUU)%Jd8*E=IH; zV91ANnOlycpMj*uWj<%}&%>VL3a}896WR%UKl-02pg?V8B$zVu!PaR7f(@t0Z?#jS zBA0ifqlata68Z#wpq8b+<1!CAz)GnA!^m42_yaRTnkzCFqjSS%(l$1ZBsSOXZW{Dc zJm~R%xnQ3C1eesa(>98UImm{XlGTg#MP3t6r!H~p-^bx4CHm$nd>O{!KP+F z@n%jmMpDh^dUjnZj0Cy(?gTu{sa<|&+Kp-icC|rs32EOl2G&DOJNZ-f%bZ9B2 z)U6O2?><`!+fPb+sFTdWbjlJYLHuC9KqmXPq&4&Y5cG>U7R)y*jX3KI*I|HR59#ok zZ$JMs^<2s(!g+}Wxxm!dvYk|Vd1)QQ_eo25g%mD8fX}y|Np6s@e||v41|2OaVtu22 z`n;jzh?((-?BF>po`+y5pwODrF@Z~!+KFdKs1Gv!NMBA%ckj3gCBDBa4ot>C!J zGGruPSiOR%{+x2;D{%QVyJw% zbszC^;|lpQ=OTd09I)&%l!ZgNL!?}z?wGg-J)GAwWfvbO9w)M@GefB|WN9U=t_Z|Q zT^3V8P};)_?1jDsn77?+ww^4YrDhfrR@M^)2sZ;3eZrapS&srqq1GbJ8} zm)Rl_?VOn={fob!FTDy31tGelTnN}GP}j@rgR%hOpHoAuAB7tn$QCZcjGon=H~7o$ zu!rzZMrpQ)Nwwl$B*CW7io2#{(SAzuFMCl#%Q{JIv?69V!QmP1@9v>|HE^5!Lvo*& zrB&&1j%kkB6-PO)-9Z}e^Qkz@0?YTJW?qKtV$3LQ6h7p~CW-khQlbGEfk)MqMYT>t zE7fN~>F|oRkE{8U z;5}b+%pP@ZO}=D!GF);wMrhk=Q=hE!UkIH$lrKp}umLR>GCWzA+T6P;)X4MP1&kIT zfkXq*Zcjdk*@mCGH`%s9h)bU0?p)*>*oW-JeSuoXW;(Nc2Jo{M*!TqOL7MVv-|)UW zy}lHA^;!o1nsX9%XC~)^xo-!|x&fKyiNRkqj0>l|^9b&^>ss=K^7QKCTkgF*ss`|< z%3UZ1>bk7OZb>hKtXaLrqsrkNo0KcMSX>G%`|Uk&0*|_Ai+Aeb8_-CfX)nOYX_Ll9 zsG7h*m%vYjecT%5Dbl9iS1!Gvee#L zpS1FVcpaZLp{+vxT*dPhGv+O8&FNKJ6sZiZbQ8iup%8-ppxaTwwSI6+fmO?^KQc{o z$Au#*YEo_c*8+|Y-(~+UQ;O+ZRTyt)tVF#-6bHabuL?=>umoO^@0;4cOqgP z+2zek1a?Kd18%x`@K|W%4bZ1O?(BLo>P4|MJM?xv=Y0Hgwuw};M zzL~G<YGFnEK1%Tb2{3jq+Jr68@>heMe71vSVJZ33y0E zel7*XRLzCr<&VCBbBru62A1VJd#04Dyli|U1$ne2W6e0P{BG8k^&ZsryqU_pX1$Qy zT{=3$P_r14Kb~+@D5U0|6fb9dYCFnykshV}oWemvmgR{`= z)uD)di%e>a`S$KTHFCJW2Xx@pUtmdOUM)U1+KM%u!+DThCuCHt!B^=A^dPnO~xqAQ%G5L@Wxu+S{X zF?(1mzl0b<9*JkfcWjslo36JFt<%e2A9Kpwd^pAnI#Uye40Nu{^wkDVD^~q*0eqeI zPl!j;Wh9*W7Xvz+=CtrBbnwwzEzzQ}a&j6HL7kOR?xEks;SNj#RI$G&*To%Rt}U`I z(N})YItc83OPc}L0rey|!&^Nsyp`BF7DGq{ZnRp%T4daw8f|NuYTQ7#*^G9gG8rLX ze0I@I_f#8L=W)1`rKG?=hfa7C50VhE=Kr(&I@Vrp4g0w_fh^qB+g@MX(751xSH_<% zOTAe*>`DaOLSudQxij@5IqFeC*wKk!?{e}nO+ue4;1Zz5f5LxjJt^T1;SfJ`bKMe zNKyEGpn00m-!fkMkdkWixK_+Yw1I_c4})F>X3j6(x~iKGN1L?!`Y@X2vDyVt4^PaR zT7gzoVh`d|{NQ*TDXrH8t=Bf&;b_pWd#Zo)w(-p#5!bZ9?f67_$6r(QdU1N3?AmRo%z!tf8$eISds8mw&}j zT`MtTko7Y9n)*rjvNf3#NpD+Md6E=FC9O^hGKLF}yK?F%M>DjBOS@FZ-w!6KJwdDS z3@%9OVKJ&L_C(B}2|jQ3%CHl2iHP&wFIyT5A9oz9D(1sErm)Ha5D3*OrH`65l7y9b?a^XoB+GvZcooR``X`~qeU#N}9pnE9K0V;0sTe>C5^ zBK4r$d| z+Z6SuFz8P3IL+Hy`W5Xf;u#NMmWoX%5$yq(y~Pd<-ohZ1L=?h>5B+T3??mJWZ+2<; zN$0OKDB)fBeY!#h0h7AqC7g~3-cQ^YFl4tmF;2eDeI*50Z|S`8BBte3V+BO#LEHPd zjviMAcg1*&pOt^w0FQFnc1k1>Xx>p!Bry)a3aB2Q>87*86skT;M++2#{d{VPg)#q< zrVdQ*m?0lBO6hB)8+a7`e(`O9s z{@Rr@N$`0upne*PuRyyiK;;+*XUD?=kRG9NEBLFc^%F+s4R112^jZxJED_#3nZzg| zkTjlnCnte9mGfJde^{%kTty5Yp)?yLEPea(k<{1s4GYRRtKd(a?q!`HdBB61>YzbM zb;ug{Moa~zt)WeGTaJLp3f*_U4F81Z{p_$ricy|df<$wE4*6meE7=_P5F7?=bcA&m z$8WcX8(c3#&f(A=nbho6~f7MwNj{PftMrLF=N*Oi&COO&&u9 z>{O}I(k(murCS#M+Qv)5QtO!V>tQEsYx=$AfwOkNm{^NnP){sPgG?nFLI&k44gtSy);3h~LiZ^EpAzTTIRJkXu$#z5XUTI$!h)-{GWa zq^2@tjzvKXWo1hLpkdU=V|x0uJ)TzjerZITYYD3IMv)+Kn{#}OW^Dsb@&wrO3P#rx zz?X3>`ximg$rW#BB8QK2*?78t8R+3-li_2J;UdJ@e0LKvH@o}H=WvXB8dB@vYqda{ zuem8m2Wm&g{mo@o`m4meB4B5pPL=D-qwi{ZNx@k)ROze4#z9L9$-56Yz<~z6bnt0f z1{o!yubEgKOB>>xrnN-0Ch`MZHAb`G8Ch-?WWc@a=Keu>_ZfBq{CqDq2ybly7?sz2 zGbd0llY0nlnP$_Zop0I8C1(eYg9Q<{6t#>-MjEu7HBCYVjfsh+4geZW;TwlXN7G$> zkN^r;6yzs%x}sviet_R*@o?a6(qh9dV0y8wvwtc+hzh03w&#M3obchsdtqlXB> zv7ZL?0mz>xmkNOky^Xabgj?05o7%dni%#ob$WLs>{d@g>r?Ud|=oH1O?7CeGnoEbU zvt^sQD|9S%rNnO8+rDo`MYgPqI2kB8IW(Wy8S5&paIPGiPyI0yG%fSBb4Qs61Y7@$RBQI2q{^O`o^{yRv=Hw>Kjc;#SM^T8A-{qwmY%SKjj9o1$wlE$s z1$CGd#}d-wE!L|4!@fdZc@lYbCh~Zz<*N9#^{gA*Rn04HF#N%;DN+C`D26I3QU+Kr zPnv1!E64tmqkWrD`N2?e>(?4@`OscVfY`WwkrekxOSDyHP1K3^dRK_sl;LUz22pc& zwa-{fUU^fm=;x($0|^{+g?|CVgA0_CalI#xV;v@q^m4I(uYs}Jj&mjOa(q%(aM}g=|#i7&my@LkmMN$+xv}{}6(RF<{O$kmcOYO@qO437yFD#HcXkEA6J{AR&eJUP{P4@(qbc-#dyhhS8a4wukcN zn%_76>_LsCfiAG)+|A>#;h-*+)M1{+8t3|5`^tvzN)UAOpB9i{J=n+ID=8tx$KES1 zSPmF1DFi8m05fj17&%!11!l55M=Z$7P$?v=;lHdNpU3~!)0js`sJ{%zK6NJ~JmkXWv ze3&!Al83YO0hqJiv(e@wki6m4;5*#=cM!>or}CD|mR(coyVhI$0ca#{$qO<-@QvX0 z;=u7>l=Bke`N#X<+=v@U{{-sE^C!O$%8}uozi!|VXzzXex_2{gA@3=0`4uLhEpY4( zcpvi{fa}*lN(mX1fDSGs1qb$j;lKPql5i=_ZZy42fUGlPMP)EKASN)nd@`K<%CdBr zjYbRHkpIZscT$qX7uk(GH3Jj$Gy8it0@Ih4A9b_yG zJzQ8bmOAYJ{TXe7lGO^(a)4(5N%+)?dCUuos;FYicf15Q0U3X{JYq5t;FKbPS| z8YJn4P=;XkN=&@ng?rPYKP}tVgSkuI#Lugs?X$aOR_-xUcxl~b8-LQ9e{)~ce4_Z_ zR()q7PvZf&37;^73%7PUzKu?UY+VsjiIP0>VcmIEP{ia3L_f_*ZuC$Xo_A%N^-fhE z@v(*Fh!U8gt*FM_XODHsMgAVn3$dgxpCGN6V+;LCDy};c33K0!P>}GHi13+0vf9Zs z@gfpXpNuLc{Jr;R$+Cd=v)MMB{v9oJJRxz2e*l;!y{Vj&fn}sF} zD1LVueqkH9l!M1!=5sZ9^F&`39_Bc3Gd%PpVIZ4GL|LH{1bd?;=aZwpv;tPVFe}!# zMhY(l!TQtAJ&!kvu^D!fQ|w@IIKk~8*XYEAJ9czqSSkP!|LCpD@gC$LMgvSjj;qtuxv-HjWLlq`F_|=>ODyuMT>`FXfqeeEN&Stwgt2uWr*`7NS?P&wF1iLT zVb%=}__1IX>8Fn={^2%#E@6`&R7N2}=)(Qd_^mc?)D%q{-2;lvTKLZln@YOH$oe*v zzqZ{VIha-Z5jlm;RA>gTI#sAUgS_BYG6!-k1^)DS5^To%?E%f>2l6~W8yfvhOB6Q& z60`FOT26YaxJkGpDcOSv$kQ>2$&pqMae zS~7(t$p@H7AsSr4qFBc6?@!iE$mP{DXfl6;l47?`Sv0c{n|w^=w{E`P+$5*wWL(1u z^s$+R7=Nt0Fefr#$JZ(S{?Dp(KRnNpywe>YL{?5$cbFW%a|>ak+!!NCZUw?tEd;Gn z`h*6pJreAY(&53^6+ctQG=+EI#xttg^bu(_%z`;!K%ac}$a{hqT6jFIteYTPL;Eh- z&|5^R|97^JMT&RQXJ<;Pj6Le!Z(m`-yKkCZqN4Pk%D6?8M}DdHQ9-x?u`Z5=^T=W61?dbGvHBQnAF?yn|IPbok9t1lz5HiCi@XKCAy69i;_E#4;UA&K z_9rjGvULJb%bPEs&l^!aOarPglN)Im1&xcCSlDTT z5V`WV|5=P_Z5Dt@>vU{i}!nW8rWu9E>jH*IntM+~!k?x3~^%5*p_qNRosc%jRZn7Et zqsdj7Ih}{|$zxFmHYdn3OV33RO#Ydy=qw*u8M~&up)MjkTW5E`1tXN}-4IR)j~3b4 zD>3PBD;@>KYIZ%cAFCKz26;^hf06v~==r{n0?a2=9k3CAuG0g>gHxD(siF>yM{s#? zM%P~zO4F8}W-4i7M*+bGR37H=AOQM>cvP!hF+-LJh&MHU5(xfA?!H`&Kd|D@rq%_f zO~I!OyenM@GyR(<{~fpJ9Jje^9YjH=xc?-OVArm}Y%TvvgOp~m|L<@=phsrkX8XId z2f{(-|HiK&U`~Md*P!jcN233MzN8^&teVla-Fc(!%v3I*!=Yl6du09SY3I>-|88i0 zt%O(Om{}PCWgcLziidJBw10D%B|n5U{HHa{Z*oOMc|#Tw{51*B-&1kiqMC>1MGa_2prW8#+#5@U?UR-9b)dDnqq# zj<`3XAR~#_P0_A5s2xp5r>e7MbG}7dwQFbdNwS?)Wrln!tRoj`jq8(DFs-`*^H_CB zPRm7Ls2|Ea&sf;ZR_(4eONElIHp0fN{ER()oP|3p>60yM$@j}MOz(_m4^RB~197)f zDnFUUio3L_5SN1pk$cN)&FlJ8@bNk|)L2LQ#zecRk^6wJuqKH_-`ep=_7*FAo8|&j z_OfGRvNhyn0J3O$Q%QCBstL)G`?w3|p^80en+F}Oc*fqgwVu62EUUNaObd4@+&ByI zlggNrC=d#=hr1m=6IDVdc@(JAzDp<~lF;@R(^F;LL8n$E4i(m(NWFZ@6qr;wObfyz z4U0L13UVq+D3z0G%}(OIo;XFu=`zO~+NqIqja~$k5GIn_nUpW=;-pw-0QyajIFD^Q zjepypix&YP$~!Wfkfynoy)zJDOFnEYiW49jKoLOP5@j@9D7Hi)D^Bi&Ardl=TOTxn z-QlJUHboZ;^jaMnDMe+MqY1X&Q^T&^ybUB42qDx*Ag+a4&m3A;=_00X+{WG9ia;^V zsc^Optz^yNbro0j_YioZ31*CYd)ZKbao0`W7(jKC?9@FFANYmju7v@t%4W-W{5rgq z*eeLu^qPrkv>)-NA&Q{9v>Wlra7i!@)XpH5O@_Q3Y6$5KR%akl5gLM9Qmrv~usPil zU6UE*LRY{q#vp6we>X8ey#K7yP+_mf zo@81Mm0fRfVA0U-V>We=5CzCM63>fh{Xt!DPkX7JMfr1goQR2PBYH(f%N0;~1 zl42$mp?H#qww^EG*3HK&oEd7|OW-+EN@YcgB>K89bM^kTjRS3ivX1u$MM_?Be<9x* zG_)0;#;kjL6^Sy>JO7EBtWlMzg_ds+rHpCU zx?q0T{e}Aub}W?$gAm*QoavlF8r~2(5Y#tY9(#Vz29>Df?AZK%xzm%#<4wa@Fr1B? z&>GU84W9%pdC6LCMO&^nh+99Jy4KoBB}8;cze6E6ARNYX#z1Or`sKiA(Z=jV zc=iVcVT}ooVnoZ5% zcvqM!G2&OQ>!)vo`B-c>8Tz8c2f`dw6jKK5GVo)^8D}D%@j)2%X+4ZwTc`+uuanuQ zph%Af(u1qk0=e{MpqM_~kPQo}Dg*J00we>|Ttmpt^eqP)Sqgf!{9U>ZFZ^k=Ur_#2 ze~QQ#MlWyI@ClM+^|W^y^10WIxXu0$>hp+8UWzhJ-^Gwi&nQnN&wx^#mZ`5?>Kl87 z4r=xKKuoUlDw-9K7a;?Bmtl+6@wV^G06iput4{M3F$4Nzm1>!Zdz}=a*tzTP zuoey#anTC7cP01coA^*!(Cp0QOTntxK(y*7gNJLz%tW<6{zuCiCWQri%aKZw*?1q^ zXthL7_lP9|p)lPMTFlBs>yLA389_t$-8ENx>gD-cU8AQBWqYTka4uE0)>l`@_Svht+ttg!fxYCy{E62})ruu6+{DOsGmXI)J3pBOJ7<}omiBb@CAN=K zdr%zEb!#{K=k}H-40YYLBEIo+ikt%P#SMCU2AQ)W?~dHv{wV3<5ETCA_=Cf6Jy2d)1q`}(|HSd zh7UVf9_)e(LgTS4nDe9@L`@Va3~XN+Qb&irQ7Gf{%$IRk-pxOiGqt0jc|II?4g4RKEXG_Y>+;1BWo*#lxaIGu#g&FSu&Z-p1h?H8^$c6p8a& zP(0WZf93YP?E(lz!CuiFr#zBwO*on&o$PL(*O{;wR{(doBH2gV;+}8ICD@4SOXOtT zg*x(|+`HGp>e0M=2D&X=q8|vMXFmErO;Zf|_}>_|eOG}3Zuf(w)}gIlee*BP*&BJ= zc6@1;D23~d=&QpbZC{x*ey@>5(jOa3A|LFmDc$wUz_$-Rz#snzohoE38z-)C9{gqY z&0clD7C`*DObB(V zvW;kVw_3KC*QBG@B_WXC1nHB+hpW0K!3M;*>xWq^q_t*Rf*ceHd4m_m>Ud!ZASqlv zwXR)G3s45vGUgfX#jy*l)IU7$$tqcRvP}y)-KG;@yR&XygHKG8A6!c6sA;~z4$?y6 z4t(o)i{ud7j|<1WT7Bz9>;;AmGZn2{ExnoHa=$)yrMdXWehT{f0_~=y-jP_l?*Qoz z+GjZgKajLwR_YY7{qp!T(g-&vaJyowXWdm3p^q#37zL+JTsl)AbPDGMfLi;7EXdyy zF(eHV+uLLrc6z8AJ&Jt9k0w$n#)sPP6izEn8KuT{*((UK{Uj}axAF(>4=dz7Ih-!d zsvo_$xf{K)y6c{8Q@@ZuS;hM5#-_|H*r2BlCLd0GqWq+~AX@f-mTSDSv)HgUSRQvw zP3PP$7kspD5xEokdaiirJ6aHa{d0^!;ZJF5lP8$|GjzsxTKl<2qQL4(Jw3q{jvtE1 z9QkJRzafdG-8hX?60|e@GA3mu@E)=^v$#vIT8JpY zDL>nWNFVs^g)g*4m_h;WAa>&g3E$7Wy~aCxtYi|6Yx{3;sHsW;uR%u_<38tuD5!7P z>bd2Mib_w01&41{b0fgDrNX*EGomtMyLfMMbNA|<^;%6EGq(j%6_=q!W~#6a6s{1_ zhZGT-JX!klOnAXD@0!7GJn7e?k|AgRkNx)?##rsk^m-CY+z`ZMkL4eJRE!MYp6YP_ zxGvuY`7b65fOdjTz%KhFxiPN{>L5nIo2CjBp3B+3HC5Qd+l4{e41urlYST{oA^7um zLjy&mzcR#Q@!u{Fcbhm;pMSsGm6ztmHe3{>S?CDn;ix$~J#E`KjHcoyDTO6F#wSy_ z()7DrlhXdh)I}dGg_D=y##sb&&XbNsUSR%ow{t&@yhXj!zg8!M1P$n+nzE+cE^KDQ znZ9_=;cq$Rpzxm zIM9VYWF$scN`UN?vb{?tnWUYh1(ztiXU5`Di3$4%bufqWOh&-N;U4p~_Yz2^F6vHv ze%AF6*UN@iz_o~0*;|*;Pfkoa6aA#Vh59t~QXbhdGpWkg6i=8cgzm1YXg$=9%h%RvuP4AS~Do^H?w3U+ zNDP+W*QtrBD+!Ak4nC}|g4Cwz6P>nPdR8Wp;g^Z#p6-KZJTr7uj&)o|TV<;e%@Oj- zJ3U9KQS8gb&6eP|j5p57dCcb4O~GKl7}`Ib^SEuWSt^JB>nUR;rRVvCc?Y zwHYpFxCTibnR_m)tguVT>EnT9B8Yv`)U)`Rj*vMCCb?^Q#+PKRJPWN_+v%ZaXLJb| zDB7o-5Zkor3dUf7#8T!{{7Jx7;VaWz0$k&RbMr$O)HbUe4pV9#X9`3Q+$Ji~GGyb* zlPe@PxXGzUwvN~SWhTJ`;iJ=lALH@ImGjC^E-I&!%&pp9JU;YH`J4J4BN(W|kS`U4 zB+FBREtsaE`mr*EE(wmIGEFDEFEw${X~HuTsNxCo;PNdT6r3?O3J@KTmvn}kAu!ja z`#$5Dg-?_Up6rJB#Y$wkQ*M+MS+r_klpf{5g9=Y4?kH4i8fR>zwyaW;RZ$y3y0U@u zEI9ZSLLp^|*G+1T&J^TbBgt9Zhhy!oJ7_+=uz{oseyF~WHDgA<*%WgKp>R~5X@(sf z5p0ZqqX0gmpMoFKsj#X^x5tsKe#`mgKB1Vpc=80l?LWX`gLSHulTC1(y8&|knT3mk z&qDq^^`b-bIObKUhSQ>dRee-LfHB5p$j~o|DcADKlNL`_cyNshAFoTU{3`x6m9RM8 zVoX7h*#sY;n;U+R#M{5edY<|$5bSDUy&Fr|m_|n+n>NXQUEVR+sZ;%=bWUt>jaVC! zW8W%ni+buxl?p~PB94Q@9V}yQ7*5rlj)pW^KX}R0J%g!ca z(K99C6L18?m_1TqNE>Bj9tBaelmJi(L(?w(ax%Qp*>aYSB2(sa1bP{6dCf%7w$Fo6 zu1=lP1%!g(C^1SSxb{XoZw*DRd|3FamQ}gMI8a^^ELgj6-mz@YOby=@n@pWS4^8~V zSThK<=9Pil+!*_d8*a&dUXznGt~`zA`eh`GbBb!Oax_rGOJNTPXM?&(9miKio>V^d z^c!SHRybk;UBq+q0xQhtp9x4RR1zKMc;>w;hpjR0OymPq28!q?abvRs!;)HYAf;Mp zWR;&W<_FOIBDRx&k$zALC4z6}Rlj609yXP>e#&&M{C1=bizv4G%n;x|l9al4j%U`QKAmH*mZTHnTXfLp=!`RmQ+ zM{?o-u}C-*6cvWeBYe@_XM{CeLw3*Jc^Udp&T|Z@)lT+ek{zNxi!O0Z{if}~L=T?f z@gG$(F&B&Vt*c8<_4-)cF_#iMh1P~(VNZnT4E23(@sGl|nbk~~AY~r6#2=SPPnujd zcKSK3_+|ija*iu>6N^o!7n`o3EmQ{!Hf??dII`-w+w{ZnpwO-%WT<4fD=BlOt{)1h z=tE3;NQ)MA(+D?%@HV&Koi);=Y=Q2d6tC%IPW~kR#3)c@s~%>;{P_3pcxLy7G=)32 zPB$h)XGU9KH+G%DO{SBR457zv@GQzoV>&nj6;J4WTjvuaPo7tS)n+A;;az_DXUK&6 zd=mK<_+X`hE1d6mmEDZeFuvHoz~+*0h3x${L!|5CuVRFXvMr{_454Cc%3b?HL5T(GGJA9MIr z9bHfDd)nM>%DJk4Cjhb6M9GNhmfD1$_BuZ-)wa~46ZP{YoCpmjndc}zNeSw5#w{sl z3=dbX)%Gi>3$CRT6SUh5IUY3!#55SihTQr_xkek;9&d|ob%#IhHX)PD=HdGjg^21MRxwj$^P-&1AL-6P61V&j6#6>5W(OYtbMs$L`t-9v!>exerJif-JN5? z?ulq=8YSoV#aaSy&X@fCs1bF)zV5`-b;i!qz^(S#2{;ufP1byqY&=3>lK$d4_oqtf z&Xp~es=S9SQzVG&F6gd82>*eS<+^HlQ++WI$D+n?fax+CAXF1sysG zq2y3?%PQ8U057&bY$gVt_3xme^Er=R>K_RLpU~Jcn)NDuf%s%52!X4=*>VN3z0k&7h_w0dqTG zjNRYCyQk1I7CtiPxJmgLcbB~I{F0ePOf;RBhOC!Y^fkube-^(R#t{%;Z1noGL0T*L zyi!Y9wG=5mqrS(ql;XYLQoB^Nzu^yEr*jKpA1bc{mB^TuFC8G3{vL9;^FD|iWm2MX z!M)ULfRk+x6(iplX+9);b}J!Id1LI`>`yj!9OZ<)@HS|$$K9%+EmgZ5vGaKEcb1yG zoQd>HN4ttF>n4KwUlCO={Kf~0W$(O$V}bn$;Wt3`6@br*?!MEnymL=cdTKTdf_+Zu zZ9AYVymiA{Ap`5FFrxgQY$*G+u>neW*QJePg3@xli2k!(qmz0C=jtH-$JG%_q+ndp zDUU(64Ou_8SHf5TtOm=(S#x>-iJj6EXIqtQlzw0X7~wu;OqN0R>9cpTQ2)65XB9BP z6YC^5zKWieB=EAB3F2}g*=?_HRa_QMS2L`&+qTd$RBv@-8%8By%p8#r!oJy!NlwH4 zqzb6s5KvSsUSHeT)i8|PckHI(&@z!m#R)n1QUFqNc@_QoK)OL+n3E>OC-a^H9RY-U zy#NKiBqg(ywN;M|?nQ!=5<+#4w$TcdHN7IWWU^02gS|Varc#4crnvTkgDqm^Eyde6;3{;c0@p1v(VDAjrf!|zv-a{5~SCk29ic#`*@u0aM_{zEtMHeO^6{ucc z%~@ajxg%?~T~`6W`#=rniqk{Q2|8I?P%6lU0vGKk4j8iPM$RQuR5o`|9CkO;s!x+R z13Ut({vP6fLJE3tf#TE{i;bWMFiH?V^HTSs_a(uB-!1agm0o~i469X%bqjU+K?5}l zC0qO)43llR2!!<(=9!YR)6cEX$2axs4Z`a%GW$sQMb+hYc$8;me=aG!mW>Q=j%$uo z@Wz_}j(wFO-=bXR>qbPXNtx-AdK!m%ZC^)h-~77@e3EiucED@DI3=tr%z0Y-k=jN> z!2XmtHnxi0_J*S*F8UMo^#bkal3wJ*)A0hjHpR70nPOfero$MGu^QYe{*Tc$t;6|H zWd!}~Jx%=4hImh!|09onT*-iP*L0TC<0_YFvE zZ{ogOPIYeY^>2y_jX|?q%}8)u^Z9=eQ6n$$kLhz|FDrkFDm=(Jg@E`J%Y40R^uN5* z7uM3x60m$PBPcq_fz*k3d#~eJJLOEn)E%+;ZYR|*Y$K;4mDNrXo-X7?UHgaqj48>c zuF<-^b{iJ<)q>`E<%~ZnZ4p9S)I^5^e@(|~)kd?4zp97XC!&*J9LFda3{RQ*bjBM* za3xxr(2Z!pOeamKOjfE}`#sY#(P}O*vi7T{ekd~ym75ow4C5#s1bxSDOB#9}{-RHG zW7Yhn;w796z_wh#2G^9Oz(l-Ji_EXfAt~K8opR%1?#M}uScUx{R5dAiJYG)(#9iXf zhh5H?zjG}vtV15`LbxpnMM<``*7qL{B>=D}4?|PEcRaNq)za}m(5sWV;fcHcdzsMk z`*Vf!dzsqSyF(wOZFPVr7jto6B^6o8v|;s)RcVM$2@X1ouARP!kUCu+ib zpL0|Lze5^6ms4=QsiEV%{>1BD6b6rZQ$w`{RfYgyKzB+)A5V+%UgZaUJWz)6rtney Hf9U@Kp&~Z3 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/atari800.webp b/themes/linear-es-de/system/systemart/atari800.webp new file mode 100644 index 0000000000000000000000000000000000000000..09e4d5312b8158366a4726655a765854f54b8def GIT binary patch literal 21230 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 nFnu%R<9Qr+w0`KBMgd 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 P000000000000000a literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/atarijaguarcd.webp b/themes/linear-es-de/system/systemart/atarijaguarcd.webp new file mode 100644 index 0000000000000000000000000000000000000000..9094a6ad829d469fab2c9eab3b83e617f891f39b GIT binary patch literal 27946 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 kzmNa`yZ)y@0000000000000000000000000000000Gbl+T>t<8 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/atarilynx.webp b/themes/linear-es-de/system/systemart/atarilynx.webp new file mode 100644 index 0000000000000000000000000000000000000000..9f54aaf128144799e74e12edb4c7e48ca30deb72 GIT binary patch literal 18808 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 M00000000000JR?cApigX literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/atarixe.webp b/themes/linear-es-de/system/systemart/atarixe.webp new file mode 100644 index 0000000000000000000000000000000000000000..ad6618a28d4cdf977d632de5248f76cdddd0cb7e GIT binary patch literal 28760 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 m033hnbN~PV0NDRk1ONa4000000000000000000000002^BuNhd literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/atomiswave.webp b/themes/linear-es-de/system/systemart/atomiswave.webp new file mode 100644 index 0000000000000000000000000000000000000000..e5a78f0bb79867be7e4c0279219c1c2ee5840916 GIT binary patch literal 32136 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 JzsUc!{0}35vfTgx literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/auto-favorites.webp b/themes/linear-es-de/system/systemart/auto-favorites.webp new file mode 100644 index 0000000000000000000000000000000000000000..d96f8320cf12ed74d0dd137f29a2ebdb6a5fb6e9 GIT binary patch literal 16466 zcmdVBWpExnwl3Oc#+V_7n3*wVcFfGo%ywdCW@g63%nUIz#mq6=F*Ci#-#2siOik^5 z&i!+%?p1ZGA1zQzORXif)U6~XE-ozy0P14G3Tg^m8t?!BFuk8d5Puy~A|eWT;O|KQ zJkQ41)*14hWozf+q$D9stf8qz408y80aySE@DX4&G*?_rMq zue|4o)ub*x(&=xVt#~h11?KhOvdA$vgh>j_I7<3;2$g z{-PWG1E2nd&Hu)KR|>;PMM>nnZW!-$V)K8)M*oJ5Eu3uMW!TcCcB;znSF-n$0FVHr09il*AO?&8SHKdm0bBt3_p9AI#Tig~ z=L`Q2`gniqE4*tNy=z$l#_t-UfIVOf82+sf{M82UGVkGEwskgRW%-)~hA0dGP#Yl7 zH8}vlBm%%|90>HB4+6aw006`q0QA`XOW!^Z0Jv`7>2d#}k>vsaN)P}v_5X`zlnMaN zp#Xrh>|p3*`1gGv-eYhxGXS_M1pp*X0QfKs0Px!Xu-iNDFFsJX2mmVYwvw3ufb

  • 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/auto-lastplayed.webp b/themes/linear-es-de/system/systemart/auto-lastplayed.webp new file mode 100644 index 0000000000000000000000000000000000000000..9b5951358fe3f1f6b403d6ce5ce98ad9ecba42b5 GIT binary patch literal 17330 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/bbcmicro.webp b/themes/linear-es-de/system/systemart/bbcmicro.webp new file mode 100644 index 0000000000000000000000000000000000000000..cfb729238025fdc5d87e24f5e675a854b929c6b4 GIT binary patch literal 29584 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/c64.webp b/themes/linear-es-de/system/systemart/c64.webp new file mode 100644 index 0000000000000000000000000000000000000000..de03fccb04ebb7f46501b389e10534222710e078 GIT binary patch literal 19654 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/cdimono1.webp b/themes/linear-es-de/system/systemart/cdimono1.webp new file mode 100644 index 0000000000000000000000000000000000000000..065df2a9f55d310428b1164a259de25312ab4039 GIT binary patch literal 20298 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/chailove.webp b/themes/linear-es-de/system/systemart/chailove.webp new file mode 100644 index 0000000000000000000000000000000000000000..b0b411522fb7545cb50c9443098d228c65e4710d GIT binary patch literal 14600 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 tst5x=^-w?n000T!)aU>J000001BdlcKmY&$00000000000000000805o-+Ud literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/coco.webp b/themes/linear-es-de/system/systemart/coco.webp new file mode 100644 index 0000000000000000000000000000000000000000..d3e9d300002d768f615e3cfe3a5538b248c73abe GIT binary patch literal 28466 zcmc$^b9iK1*DqSJla6iMwr$&X(y`gGZQC8&X2*_j#@N;w z^lQr2?z@wcxDbJcrWOIjF#rgF20#E%0FVuhogD-f6lDIA{-4Lg(wFqtn5X^A*8eQ? zf8@fMm^vE+06+v^5(35!PT#+1gD;xR?YqNYblMkbXFW>$ie?%MxJxr6B^a2iO7(|JDcmRf8{?ukl~Gbv9#W`kMs=D+B<5{r>#C zB?SN=5&?ksxX;hm{Ljz#0ssJH0|4l?`!9X_JOF^>{)->?Up$gr001Ev0B9ckFP>2< z0MPOS0KiyvFmy8f`*T3P-hs``0DzlP002%C06?Av0HC%1mA9|Czvcmj%K(7NSFU8H z0D$xi0D#Q=%eKz{A#TVoh5zL3|0?tE{0Yh^NVwp9Rr`~iMB?hx-CCsRf;eV_&8g^S zAJh8dbGvTcae%hq6ZsqeckOcBzPK1VSYe1I#!b#5q980L*iZcK(0sQdrD+p=nph8; z;5yLaV8d2&3bAH5S4Mhe3>l@Q^BpZUSP7H|RAr2o_@c6%8+ojb*d1g<w)Ag~&beNWPpx1V^@U((=oet4LT`=R<+;SXo(Y^ec3rhox#*~p5h@=-qbY4bM*NMO)KY=ldf)GouajY zT>Ur{g~$lhNFu33qA8d@v?vo9o6f)WKGQonSqsrYRckii?uV?g*ejQABtBMJ|KN78X-|{64$b zy*~EWd+Kp_`<4Evd=q2>5!RvaV9BP z+FzvI=(^vGmfCAXk5@Q+D*IVWj)3YFX}O+>N^U%7KI^K+?7MmbCSkh^YEnH zn3`nL+{ML};5Fwe27?JE+Qsqm>Qkb5$^b}uYMzKN^MOmu!HL}=e?b2&Vyt5%AfUsz zaeGi?_vxW^b)GH&IG(!aBP4RIXqin~4O?A1k0I7^tVkG1HO(43Z)-BYnPpMDxpXTO z?|?OXsJ13`?C=k#$zuqrV3Z%VQ{-^b@fkHjcyuiGO zG@e~UDweem0WgtebesV(I+9@>4+|`4yP+L}@P<0wjl#b4JPVle*)%p3u=Crv7C5jm zW}F5Y%~^2xuIBoyrw$u5Yq-$2Alyyt@!&kQWAzRbT0bH*dV&(A9!$min|-nneJu$*la zFr;bQp2fk0qE+7`&|D6PfJT)X+vJ*nB~Pbfw}%IAWg`X!Uh$spN?I^hFOY zXA2fzrWB|v043tr0XOuc1>Sjhe4K@oAQKbaG-{c_K~wo`yE@7z=1p}WkDudirKlt zr0_#6aKVo(0vR)eCc#Wpi6bJXGrH4rk zA}0g19!2*;%F6)FhCqtlK?~e(RvIiIfcC!Bx)Gr-jV1G6lj&F~iGRH9EhWQXnv8F4 zpYsAa-%7&sZ)&PDB@hqD*L>~+VJ2$sU*6Q3n1YH{PAO59Py z@qNbjk_xpWeG>hsKw=^1ADDS8Ubk3auh~I==|7MN&C*eSdDG`cWLo^7yhDE#3=cIq zlG?iJ=r=nC^GTf9sjDiiUE-%^JJA-z-^!>X90Bo(-=bfwo1VB+eX$%0RfBnQg6qOw zjcX68?Q5iPScC7j;|-o}51?-llpMLke{y2WnI)t)m8a&hi?w>d+R2J(yO^Cv|BcAy zvsSq5S#;&$j>^l<%4Z~UdFP8CyRlV}8WoLTKYKdJh^In*hbA;8?(B4v!-B|nYD{F$ z4!oNk&+ZC^Ki?MT)^>dD*v51v#D~Ub+XhN+oehj6pBtFUCN1#&5u-C(26B@ZJu{ze#n>)fp`lp9}ef#4Y-d^NE6(**3{M|a=tca_5)-)DH;{BfYdtQluO}j^K z!Yfq!EEOdt_Hlw?o=H#eG<$TyP}$@?p0)y04KAmyM}(phKC`nXQJUV&=n(g3@BWrw z8nYilVjJB4n-EB%XJTBXwcM|IAv#{I-ofAe1j~Nfq2ZmKin}_>9NA`sAAN4-X-PeF zqq3iBh6Q_+VH2*rWK29FbX$&DVbl&8wA2(`K;)YIfj31!avg9$E||R`;-%11YTJ#Z zMQk;lZHA)b^~k^HiN(hYLvGMgl9IZ?<$~g{sJBHF8 z7Q|KV(t|TeVv<=MCL*OG&hRK~pS4pp>zAXNr_j9&T}T@*?@-WwL+Ba672Bd2Dk87d z${M8m(l_dIg_kAq_Y9uDuxfNaqqL0GQmfouYHw8F=M*aWb|J6rZ4p!5La=vkhQ%j+ z@@2SlcgssXKXU)xe}kv=^ds*~Z2?D#xt^?%uGGeTBcM!76_OXep(p-JTmlIFK&fd8=kCj}r zBP$#@j&Hu5C4Atm?0|eJIp?+%q5V-tNa=(X?5gXo6A?ja_prh%O3G=sa}XJLLPTlH zrli&Yb&f?$UC5XOC+-lp>~`(2sG18pm4 zuqZC5T^lM|A*B6Hqe*Ses_?*4R9ml)NYm1K0Wl>|dxVl2OK#nWtgZ%PQ&MVJ!4QUi~+35^X9h=pkhsH&sLYk+LHA`qqY|c90 zzb!Eji2^svZG*XPQlOyMDkRn*YuRp4S%vQq&E=P*-z4CZEr6~(RL8I&9t@!iW@Nl& z7J`9^AzMy^Fz1s0k_lPvp#LPCLT1*VDr!P97))+-1(X{ zl|eDW5YtjHu7@_Ji0M@!{7T6fj|}y%36k+=1*3IUGEjkI(Vq0DR7+ff>J1~GwIWnY z3`zkr18yWDEs+7wpkn%&sD?~zl{Z!dKD-8)`f|Y;B12s4#-IqQevu-pl3*PtnYnay zpVT7U+-xT+UBu*p*SuS7cp1c;7S#ludw`}kU6VhR5eAicf*gt&KRsNB!8&EK%z-b1 z38bCXd^SlaUEbR4Vw%~sPtA!ri1qd!R8zWu$@!h$q(bQYpyq9cP#w6Wt-!u z_dXd0Ocy4*EW;AIT?ceM2Ta6NfoYXWtZeo-<>)|L_(2_bIjIN@!i^=uFw$*UMMz|j z5nV_GP7Wj~jY61dSq_7Y!|fzhV41AI#N2AAuUYkQhE#vzYUGlfEQS8bQ9~X%W`~ci zZ?3Lxs97_$fO#RXjjCW%IHzHN%t=JnG}L@TmWjWmf|CvqGP4sfBmQVP9D@rKXF7u< z4(CsRU0b}f4uyUObep`}aH_kwoG!I~1{SAi$mKpF6z8G;LG0sxD*#VguoR$%Uzmt& z;20HSb|4MHl?s~X@x4F9J~gkf>6#QCSF+!2Nkp7|TAfo&TyM&Ik(7IVdxFVTt9KmP zbqQ5}{uD8L?&+7ztZm5Uu*96?aO!P;&F$ie`1g{O+6SlT>CSCwB*EqTrwWpSy>)L^ z)j7wUS`b#(s9Isw?~POH%G2fq!@q&Wo%-?zV~x;d^vfhcsq&Fr(D>CZx(8 z7A)wf^YO+cThQE9F)s-@%9M&0_V3(}EvP*wXVyCHR`X6jm&Tiyjp9%>bTJRA{?s=_ z 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 V5MzJdl>hbh0P-0AFaQ6<{{gz20V@Ci literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/colecovision.webp b/themes/linear-es-de/system/systemart/colecovision.webp new file mode 100644 index 0000000000000000000000000000000000000000..0d3ef5d8694aa3c31fe5f05bef9389a78895bd45 GIT binary patch literal 13244 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 G+ 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�hCjUpg4`w-B`O%wOht|iMIJDPP*EbH`ir$K6W_a+f$w%w$uq)1On z4*I|eN)2N^I}=2EM%=tFm$dAs37mt@uy zVPcDzV#ODr&rJ_(J$l*1s)IX*FIAqDR0W*q1Rkf~$}EUxIe)>47`8VGrv85I`;JA5 zvV-oPEAV`?gE@L(@6$_8~s)!s*l@#El)B20|NaCx}@S>VqA&IOF!by8%Ywg#ZtaOlr3 zrWOFCD<>@Df3B7!%0tG^N?`K`K{RQOs7g|G{=lUYP7?MD;&(_nXH@~n1p2kVo)4p z4m|lmZkMx0#N& z!V8%!2jGT|xxVYR3rCsMTIG%(ZEwsUCavD}TillWZAv^ER@Q&3z(g_PiKpQzx!8)L z?^wO+kzS0Gna^9lPVo{|XSbAgT_6U77#Y_s(nA*c^im;d^@B~kJpdZ(mxd@OS*_3GjBmT4p*mJ)@&CZhS2VACxpEZf zLcxIX|Axih+znNRyM-pspu7vV-_G+M(7nODM>E7zfd@qr2nN;JFBepgz_1l03?2`! z(B~D*9zH6yc8h(i1lb>X1pKdZ8nQqMpqlp9kGUci#)YQ(L`n>CLro-1xp23~n`|=b zap}_Asj|ppdPIy}61Nqn=@DCe>)6~xik(CI;?4iix9ZoK-5$Z1Q z#&!$Qu}&l_Ma0c#S!~qyWH(SFYpL=;sEDQoED{r@x4a0hT=)V0m+U5z0UX{kHPAYK zqeGa4VhqbPOOqlkN9l|g{*X4D?(-!mIZac&Xu|B{O??S?zLhF&_N>zBFK#Prc;8*A zY%P`ESFG|-`{e4e``-sknJBk1F1w6x_IDD`+8; zMMd~?OrtA~97C(s=}}B0c}xgu5_QNZb}^-E8KIN&NHe1}b$nSi*|6IJnaE^d?DT3? z#g}`TU(c=0o>v9wBpXx=iv;4?H;EyM8nY)l=O63;ikC`B@OC%-!4oby-(Vr;i6AD) z(1?HZxMu)AowwLvD_(X`l_F%4-hX`m=jO$f{{mx_wu0z_DQq5OTf4G+J|^EQyC~1CjHCelQbUcFfjLOn%P915 zCc{BIsy2bhiO5?sBOmfxW-8%MUCfuei%w#SD-t+Jwnm$MdL57u{Zcda?V@D}wVlcq zV^E)TtF-`ugq=#RPY^d%wT(*4(!3od+000yXm@;JtYdeA{&E2o((c=B?fOU@XecuNa8=WZ1_ydaW%P_HTirdwB zvGKI1o3`6oDEq$_RD7D!xWJc%(;#wzDKgOF*c(^xQ7Io+E`>tic@8S``n0 z5R~S-u%_lah=6y|$mI@h_&BGuP=vMqdiP`B{poAx2B8@E+2Dra)zoGHZwifIC)d`e zEpM?QR>ZH6qV&9X@vo;$>Kq8BuHD!H*wVLw|KPa2Bg0000000000000000003e{-;Ji^Z$#V z^*RVI^*R8S{~`s4{Quwp3-9$%MYsB>ARYhJK>z>*pZcgWAL^ihW&f&z0003={;CK7 n004deeDfdx000Fi`kep(0000000000000000000000000B*cha literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/cps1.webp b/themes/linear-es-de/system/systemart/cps1.webp new file mode 100644 index 0000000000000000000000000000000000000000..9e00b8f44dd23fe80fb3dc72ea75bedab94cc416 GIT binary patch literal 47150 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 z01&_Da)xL5+@K`?&gB3A00001!~S%@000000000000000000000000000000AWwrK literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/emulators.webp b/themes/linear-es-de/system/systemart/emulators.webp new file mode 100644 index 0000000000000000000000000000000000000000..2a2be402a7e66dc02b861fb574afbdf22d4f83da GIT binary patch literal 16570 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/epic.webp b/themes/linear-es-de/system/systemart/epic.webp new file mode 100644 index 0000000000000000000000000000000000000000..3dbd287e68622a4f86b665ac452e83b72cc7f7d5 GIT binary patch literal 9360 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/famicom.webp b/themes/linear-es-de/system/systemart/famicom.webp new file mode 100644 index 0000000000000000000000000000000000000000..476db3562756520e7d44036fd40102aeca639edb GIT binary patch literal 19418 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/fba.webp b/themes/linear-es-de/system/systemart/fba.webp new file mode 100644 index 0000000000000000000000000000000000000000..5ea05dc20c32530599d17b9ac85089acbd7c9683 GIT binary patch literal 56484 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%0Db?D-P$Ufn2qF-`;?lY}SM!oD8589jaNEefA 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

    7=!_-v`9VYct=02n_tx#p_K5f9ca;i;J%lqQ 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 yLYw-iE)V?x3jeBt4BzUYxIa|{000001$Xs2000000000000000000000002+w}^!R literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/fbneo.webp b/themes/linear-es-de/system/systemart/fbneo.webp new file mode 100644 index 0000000000000000000000000000000000000000..8123d95f06fd1fe4f54eb5a2f0eeb84be00429b1 GIT binary patch literal 56022 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 aprStVsspq2IsgCw00000000000000GuBfE| literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/gamate.webp b/themes/linear-es-de/system/systemart/gamate.webp new file mode 100644 index 0000000000000000000000000000000000000000..8933bcaf29a9484fcd7aebf4e7adc29508a5674e GIT binary patch literal 43058 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 WC;V?C>sbZ==^Xy-`+o!fE&d1o@D;HD literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/gameandwatch.webp b/themes/linear-es-de/system/systemart/gameandwatch.webp new file mode 100644 index 0000000000000000000000000000000000000000..1ed2a048f5396ab8990b65d9595af5d095ed90e3 GIT binary patch literal 37088 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 Z0001s|Ehuj000000000000000006EnN^<}J literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/gamegear.webp b/themes/linear-es-de/system/systemart/gamegear.webp new file mode 100644 index 0000000000000000000000000000000000000000..f9f48244bb71da756bb361205fff4085591b65fd GIT binary patch literal 23908 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%0A{D@~R=i9&+u}Fs_7yc-n8ENLw#$y8 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 N0000000000007@7)iD47 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/gb.webp b/themes/linear-es-de/system/systemart/gb.webp new file mode 100644 index 0000000000000000000000000000000000000000..dc5a414af74500d749306a717db9e3b88a96567a GIT binary patch literal 17162 zcmdVCWpG@}k}lekEQ^_07K6oXp~cM1%*@OT7Be$5Gc#ID7Be$T{j~R)Gjq;;GdJFk z7dPTo^jh_GR%StFRp#od6)i6&EDS0D0H_G@%PPyVt3m?+0Q%310PL@in1Fz64(R7s z0BDY-ftACT&mt>pM|*h@enM3>bwY?E00;mbfCxYWeA6>C13EBP1qf1e%}Ke<2C z9L-;K{r5coBNfij$iV;r03rP3;4`qbcl^Y2W>@RHcH~xE2sP>BTpJN9_{iG9`{0r9q7i?f^Z}rK;{K-RNXl4CbKd9GavRztdkMgf+5OQuxeCJ}+E=2tW)V1&{?00`vh+05gCkz!5<6nOlES z902m4<^2DHJoex6vY%4=pHgN3gHH)TfDOP3p!c^t;4d3|@_eTM(yfCr6XV|`5LkWy z0DJ=oyd?zyAmRal_ZT4XH5Ukc&jSF!)&YPX>;ICs$pHY^??34=|3xFo1^^HO0f44~ z|Dx$90|3n-008ESt)9K!-|c{X-a(Cx0f3ug002%606>`m0H8Jgp|{VnzsdpmO8|i4 zr>-O?0f5vr0D#Qovu@4*Vcd|P0{^ME|1Hmd=*8anW4ZShABWf&C5c=p2oH#18?4fk3@tWoS0fv&)|#x)8ONKf zipI@8A!iJv(b2`?O;-KkI`zizb0nmCgVnHAdQ`#fRe>lG6c-oYSUB$y``Q6(T!Zr) zr0TF?#tfDMrB$&ho&)r50@Z~j+~rK|K8P!rbb7N=tuS*22z6V z+OIWXh=IFjzn+Ll!=Z}>QEuor2w<L@;w zyZcPD-FY&L$n}@Z`VSXWmmFp4Gp%IJ_5+B$qKmV{U|4FyhoRkTFAvym+{-`Y?N!VN zgIU}<)aXlECL@Sg3L7rjQqO#*CxxAHk|nsC-9Ef;E76h~=;`fM>#v4qaE3)2Y-g!ZtZ8Tn=6sr07_&05SL;do##elJU8#0rnlsb%)}i@_9M+hVNkbSBh2_|RthcP z+LMS*Ql&@iV_%aEReyKU>pW(!cK-W*uyX-P$f};Y@NH{>H3x20B`lB3 zu}{ZiP#yN1)*r|mU{`CVAF3xlKCO+UiS8^A@{yOdkAU*YlepKd+MD9$Ff(P_o-8f6 zI;*{6p181m%n=;>#EU*)zv!h`&_OMv@pp8Mw`6d2UqCEn|Ng|5QutrBFQf-fv-uzL z+QeSDiR%=Iq2|ZpkTszi%)aV=t&Z`Yi9V#g@=V3La;?_p?YTXSGp4v{h1vd#$|dwO z2`))u*Nj8ax{P2lLe-s;m8@GxftJO2$1Ini>&$042>8`Ma=W{VXg2!mN4$0c!Ds7N z0mnYfS2|0$$0GS-qP*Bo2pl;zWp4#}$ub=ZqPM#su*b};DTU{n`Cb?qqTEXc zGkE(IK{ua*vTMjwttCyh3~&FG8V6>7&kWNywZHT!M*`>5$SSG591-N6iqxoH30iA7;VyRA{CY)k<_Ef<)9(&vIufH} zH9M5@6*6+McWg0~#pkQw=&4xkUEHjOx8w&7bjDV9e4dQ zLN@uHPtdl{##XjO=yd2)^p*8H3yjq|>kE{|v@i^-K5tsbHz{w) zqKBRA_SO631$8zlFZl}PaXub`S_+By+#lHF&1ChL;#v2~uhnHs##%~I3{LNRG^!da z>ph)Z4$sa6JkWxlBdc1W&76!bYco43sNfhsjh?y^%65~_ zZ+O;5*kUd&%ab9Ko3@4?Hba;~e&k-@!xa{*W!$*nT-B5kuGBSp zf&8U`yL=7|bn-8vfgX*~csj#Tnl)l`njt5d?0G)|bI!5TiaX*f`q9ZuPgy~^q-E@W zT@{CqE<*&Wux$UJ7nfukqhNA5<4-r@FfbBbm4Sm5?AiMpl|KCmio{?|&asajO<8ziY>A)3=n_h`oAtD~xRu z`^s$F6Q&MY{`IvjTTm3%|6^y5WsPpXAx|^$mCG-fUbp}DI7C!T_a#v&&m`I7B-feGkg zeL89clA~u=nj?t%-G#(AI>$@^dSQq z79lub*iU^ak%x1d2lnzktA*AM$&>`AJs!VK_YD{2S^HQV$)ivAKbAI`f(lT{m}$eZ z9i)oF#|I!}AA`I%;tn0LQPzgni7#gA_Cp)keBufiEYHD2GdWEAmuN~D$ zxvpTnui&qLCla{1#5#|ui*QgLZz{6hG*fG4q#3S8ntEk@RkCcm;p&=gs=CzaHojPI ze4XMgxM4mq!&$(*B?&flp6z04qj|WWOn+VF$ohUp`uIMc`TX(-yzj4Q+_FlLXd zh3`h5-qOq(9$)1@*_ifFnlzMDv1D=^EA0tbFicCV3j7XL@j;fza_+Lb^6dk6@1fob zwlG1M7CVm%SLk{C-m(aO`ca4aAe6FVVcoG0d{a7O`55M|`>D1o>(C?FQGIqDf2D;l zA}V!mh#8u|WZ$ee;ZL*RuRIA!b40bYxXQ|f6q(M-H^?(vsg$(M<%MBQRF>l)VzYcj zW1?KE*28D*q%LS)9;y(@<=w_aIw%KIAM8Mp>n3))u+~XIDc`ZQ0O)UR_YdrW+9cYI zFZtUAQp?kV&U=i5u)|ywJ8r_K&1O@vdcE>?1T{mr_|S!Y}E%}~tyMTB#0M98K&+pABOx}bVYVhoxBA%T%q4Q2N(Xu{6p+rMzdY8Zso zjzH63>$XWX$vv{g*pU;1XXxMAqfkkX3cqj9@fa*?-xI(1O!ewzVdI+ZMwVt<6c@*g z{TR!`PeuHvG3dJLLZf}e#-+j!{NSzhDbkG zbYfsUcwz}ReJtr4*DTiaTv-HMw$jR^bg3`OlMu_G&i1TcBLQ#6N3`pi8j%gY9+PsM zfTCet=3VfonVoo@DXNi`q=+}mqef8pp1g3zdm~{_d*7#A-xTIWOYqa8y@SS=1HB^5 z_K)?MY^4n-3yoKw#och{^AGHKNKYYla818vpp&w1?`8<}qH@wag~cTbdg-!gEVFH) zCojs=@ACnZ&6OHl|hZpkvq?6TL*sCp4f0TT)~;D7G12$^ zuuKIOmu*TNTN=G-m&wTVwZSr7Mk=utYvA=O)_%)GotVKb&!Um5RXW}kV{@pyRm_^H zV866W86kzwvyboqp?XDy;c)pN-X8g&2aMa0^;bSco=aj6MqCo=>OiH%kupAXEL^Hl z%dWAyJ4U5$YBVgcOWovjm5$C@kL8*@H{h$Xno{OFP%L40NImFc+`ZrXb$mhzzF(y*j1l!C-DuxF&Kq%a^4(bu9( z_JiW}I@hR6UlF{R^9k5(0^^?IDhV80VB|) zR-wX0w#11jmSnb*lYUa6`F#YAf$<^FR3wRPKCsXV{kk$3>Ga=QR)sy(tQ@0Dqg1%iN;SOV)GtfD@ z)L_g4vi3y8%eO?PURu=ffS3*a?H zTcD%F!{*!f9Grx?A+dsRY8*l&4-q#U%dfBUhRIE)IvUd5K?bhDyxlOv$G6+tUE`8J zgJ~`Cs@ahyj}*bXD;k0&ktYR=zI{)eaG=f0okQ9f*{o@xKsM4k*Yj0fs(AgjjQzDi zPS-4RQE=6#Y+9{DsHBD@6DkeqesBXN156nW-_`33g9&&?Hin~S#3n>h-1K{e!$Gzz z(cu}(UA**L675$8;_Q`-(n}&_&kAkzwnl{$a>Mkk)El`U3eO(n9KjtHx?ZaX z(|60o>JzHP%C51duNEO#g5;ee*I^4O9n7JgsWrk{ zNB8u3T#ckBpX;xjrdEWgN%PcOH8mD3L9R+WcCq*@b4%U9rB2Mmeo7Bt0N+s&Rac;8Hau*Ov z#Gs(K{!Ysp8UH>cef)AzO|G*uw&AGF6or|7;&kg|pquaJ&S*)k@?X^n> zq32jnO30~CYcJ5&RZ&xFeH6~D{pdA6`f{BAN_;qW_SWZUb>_m@-_LZ}@PBvMnbEo~Aqlz>2bV208>Skvpsyuf?3F|y; z)#Lf$@-K(yu(H~xuWxJtLS7LT`b^S<5lSK*qmc5yPCb7UW?ZQCFp&Z==jz=iS{2|Zu1il6Cm^%xSef4!VIqq2LzgVZqQ=?T%&a>-@-hIbsLm^i%7@f zI75De{58l(-tKA_*gIcklSM4qq*g*pf_5?5I<=#ouzA+?9BJPw&Fe;d zH9=k$uOscNHzPNUQ-AsK{BRgUaIu!zBK2GDJ$!seRY!IOh<(7 zY_~aghkQCnf+Hvk%NU<X@wL~#k;gG<7iRYeVVfTJ7O&-O-Ipk#Q5cuhWV@r=ySqUnMX0WsHQ9 z8`=&Z+-bUancj*$Ya-uRT^C07x_Vae)FI#tFy7>T(@zU!<}(W2D& zhf-75Kt`+bkQNcLT`Q|v3MItR-O+SmY*hHNjh79ZVSPm2!lde3n^b{z^%PO*lF`<` zH>&=2A=sx=d$jY~?4?AmTB@z?*W!1pTcly_pC9)voO>ZQsQH@Y1#(I%vvtF z3|Wt@n^ty`qPwpNS?zwK0_}x609TFd$)w zzTwSoh5O~Ae;a-sEeKG0#V`YT^hLa({gJkf^f@=z7Ds%rA>kV9MF?%@L1V@8faq>* zxQMAk$2YQ`F<$9%|0Cyo-7w;YkJknA8}!ALO2sI;yuCrXm5rE+YC~sX%3{I?BQgdY zyh>8#qKb+gM&B7vu49Z=ScQA^(hYp}qpw?uwMTQ)w45w6dL#TBhyM3Xbm}vUHH}%s zK`(pJ3PoyZw?)R;c8p&Y**E;VkhwQnC`D)X__hYWro40AQtC{1w<}MpI&@&Fe!R37 zid3`X3ne?#eK;DP&j1^64{rCy64lAx0h zRSp)tOfK9#Ij4MsSdPFC|ETHI)@4`$~R4Pv%Dx!W9%+cE&i$ zp{iQF(_&pbGMt2ZHvEx^D;SDM%ah<*p+qv#pCJzPFQa;{4(q3&z(K|SR}(m>?-{qg z5i%VrZIi6lu0AF?W6tn}M3FWW+xog%4vajMEF|wj@C;~=Y^3$^23A^_E&rPw`~N6dlxHgx58_IpHHi`H@q0xkpkyZOE?9* z)^CD!!W>QepY>cTLm2DrJMY(U?cWvbRvy`Yn((2B4MB@!AraxN_!dqmeFJe}Nz+rF zmgt*pVKzsMRrmTk2YbiK5pMaGYdy&?s4lRQC&LUq42RRxJ?q-R>n!_#M0q1zPLoJ{ zwY)pk;chqT$Z(k{v`(uHb|#l9!JXFjF@y-p!slS}CC z>29+c2=3k^yRF}SdCfbSdF{NBeX4-n@54`M?@7QvXCPg<$J6INA-tu$qh6purw5DU z>|`C|kK>2#zil3M zvv>`8`+Z1!0AGB3eGYgRySIIU-b$}ZUsKQSU;D6%H*goxsz;zp+Ks)oC-v0de9I!5 zO#Uw+8cC2h@785TMq!klqg-RsJf2W+=mimlkd$q@QVz%k@bI$={H)5j8m;`+djIE2 z19~Gea2(ZhYANQAKw4kpGl&v~<#Y!}1+@-iF%nV*o}_O>ff~}OUM*b;M!RIocALnA zLxCzLs6+((*MC=1-o8-SlqjLu+%8omYXOpjV(HPlnItYK;TN$7y+!_{3q@WV{}O-9S3$1;84vn%TCg|%zj>lOJbz4?@c)|f8gEufcnciu%qM{HY;f7t51 zZ7;Q!Yz@0%RUK=K&1zW{qbrQpQ_xYKl3Ft)? z*Y^ErK~2Btc95c0J2>*VXDM4bd3PDfIt36~9DA5W^R%=)q&6ad37f;~pr>Iv0F^ zvE|gMUEX_^c8z)bJ)qC7{i6r@7}6JA`C9$3w=gXP`3n$3Gfq~@2s5N2Y}3Dwx)bze zaUnoqiSC0}HM##yyAJfabSiqi@YTuAw`)I7(MGB_szN!OCyRw;#_>eseKZVLtfBPY z=G?qw2{^R%zFF6*i$Yx&UfjMnbSmh@mud0VI0O#-o36A97ssqiLiO{`Q_VeB?H3oA z@BT6C{;7mg-r4cWDrOXb32=94n=BnId0Wmog;M~2Bb9B#EDCtKsqr7ScTiRCCZx(c zdYSl5nSErtOs0huCOrn^2xu1#Hq|n5<(f+Iy5&)|S@jTkb{_?|sSRBg3kbw`##4@l z49f2X|CcHM*|?*Z0qVkCu%5ji#k`SOX&##-7j=oDERxrPouv{LhE}qt0mCitIbF0W z=!3B=-t%k==nWs&@=rGoFX>J9azy`ohOhr(Ma`WFj7ktyVY0$Gz(4m@3#$AiO;lIZN9bkzm^-3f)yL?hE$rE9a4 z-+qTsHPji+Qj(;mJ|mQXFzPwV&)^P_>+1bqW(YW9$+XXH*yt&<58gNwVQ>IbPT!D= z0`2eATSY(QFO}^*0Zly;^gQaYFc9-#1q+jp*H*Xe$s(ECd z@Ig-X-A8YYQ2!T!G?zv(Dad^U7+{K6{f5`dm$Prt;0c7d@rles2JAJ*TDasZPkwlzG-#U}_T{N;g!9#tO1;vqAYX|` zum^U0TVsOON3VmH1s%<*L74@(+;<}0PgIcI(;Yl`(bxjZP7+qWYGEUxw_Lq4B;wG5!?N$))hX9Z5^SZJ7SgtuOq~+HRb0BI;8*MxOXNE5s?7;@ts_K$ z)07jjbT@U_HZd3aoeh+IiQhARsmOBAyakkK9d0jj;){VKDFf1VGL?2;h1F3U8Aa2y@Ki8CdBy4%&eD#sg38@RwW5uJpN&?r6XM^_4Q_!3_)WGicxtlF zJJ~X{ddavSirHJ-!ZvXAXjL;F!PP<8vZ+Sf)@g2O1fp z2E6@N{=lYRH~rHaN^gCv`GYG3_bucO!rL^?2oDjVJ;PJ{i+JGuG-(f-cjW##Pv)1os*fpLD&oD0RqxYyPCm6_~@_Dje zkbOU)KOl4=O8VwG97(r;(xIfm+fGa}`C&o1N_`ESZK|>wWB6S}rAuI~%lc*Plv()g z!XlA-bo-Z<9dbt&b{O_q1!#Vi8s{)cA5KyOL*4YTg}b|Ec?bWGXiL)kOp4Bk`iv21 z1lbM4dq?I#Ijl7tQ3j=wDA|+sbY&TWMaT_Fm=;x;lS?V~ga(m#_)s zAO}}E`WhCaNn6}$yV@al&ccJ_Ubih@b8hYX@Ja{uh!P`i3c5)eN_K2#{-F=RAC~PB zwhx>1465GU))@y6@p;7%`(eZ>-$iI+eFCYQSe|mO1k~?ny*oO(iR-UaQlT|>Ps@^?EN+0%x%=A|!f%C5lL(+6mkw@a-^a6n6o%C?gu-#n~(#Q6w)5wM;F zO;(4)^t7NdFbu*d>rK&3Rf|>W2-hf~;3c-y)*pXFlLe%s3lU~91o$&F5;Cf^pNQq@ zR7pTuaV}Xi%%_pxMRGx?^Z?NitM4i0R-XN%koM)}UI)0pE&6scq0d**vL@s_@Et@H^MsYHG3En zxxtw8X5ElIFLFOD?0JxGb4!du*cGR6IT@awK^*!HzTZ^KKe`pYR6BL}GVFQ_y1Yyh zDS!2=+l4H(?Lu{lp4L>FFomtez1G}aZ{DKZDycvMnGe=Pr6>LXR0E*G(20+re)$Mq zC-ZyEN2Rq|K{3_+vTR-FanxwERd*<(QF@i=V2n1a3e>eUlb4l#q!Fh_b}B|%rwi+CW5T@H zgu0tH<{K`XXM9r27WtUwgGSCKGW|lfjR;6=r-2}#3?hswFB@#6JvXsSJ zfBu3z&3g0(Up0m;(Qk5e?#(&^p&*Ga>!%CC%HglGO6e>mkD-{GND+q(IQ=aa!ftWI zN}<+ZJPv$P#5hKP!KU3G@F+)54C0}~L7EGIt`8|lUBTfF@{`I%+whHgVr>2EI^BZ&5Zy7OOiX!A?1mrf|jH~g@Xyh}m+ z_zx!U;tpodC6GuX8`{CBmd45>2%@A#+ht19(lrvkt zu7BH?(gFyO$QfdRz@MmC!Nl1`rqh$SP2Q(t9oig8!&eC}jCSI-Q0jY55%qrAM3N6k z@Q*(*83l`g+H&_uR1Y4|*+b<|iar4{XmSlL4}cIF;iBzd{LJR~;Tyt3!c&zqDcS=% zV$<{8gTDYZke`MO;F6WXyFf0lD8M8{!?~WSGmcrijsdhXzM98K7L|>&I==cICPiLt zu)4ImyrKK8_CR)ymX*=zHfAQpBMY9RJgnG15LwWdLm?w&@X(6YJ8MtNM^$t?5Z`vuI?LPhw%!PrNnfCvC3ZHM~aEJODXhu*9C50F_l?%WE0)yAPT> zf9T6-U%}At++*R*@O|fB;!B&~y(Ql3c)B-fLVuZJJ@G~*uIW=MYq#Soorgf3MnP&2 zCru$dS7KE@oPu-tWPvrtS4@8o+F6+N2diyku&;D_b*(N2cdQtR$J#dLijRB98{TuV z6-Q&{L^Uq#4g7L=jpLVgiTGRst#yrjuQ2P)M-a-a9doZP1syI@G>4{|RL1@kX0IKZ zBWRm2TO0)2v)h?pqYG9x=pkrbcUsue9jMJptCRvStS}N3etT}^4hcq=oHKs7=vx?<{57Rk z#g>y;Wa*4b(V<5oESfRU z?>QyG`5!3{%Zc=lpVL~GHz0|Y^*IO0mEK1=*_NTi2fTu(_s7OhT)KVZ^w^O|P|p{Q zw|iESb{`ZhVYO7^YaPifta2W`j2kK-r_9v>?oIfXSVC_G{pq;DWglm!Qtv!@PKNq^ zDs^xYSM^;~x4FB2>Wk=bq+%=Q$W}H;93lxX?WR>8aNwV#Awx@Y)Ls4XBHk!X2fxu~g4VaA`sny{uJ*~N= zK}#qxQf^#ycra)PGWDqXG8m!8MWg%1NK+(Td*IW3Lr8VWT`6~#(hginSll2I0e8+5 zbKs;S`-L#tc#OXUO|RS#9sWm_^@)t-2iqMmRJf;8uf9#m?ACs#PrA4HU6o_Fp!f4Z zE0deE!n1dkxH=xWs_GiW3Wjf$Te8OO+bfUB%i|M!+S7RFc9g-mD1}J}fpma_dF~MC z?y`FC?l<`F0U$?)TKjMp=#Jz>Xm`@&j$RW9GCIZGF+8+m{ zqinYe>Xz>(q^C2@!KW_+npM49cD)EM(`^0167OsX5DgRKGD%C!r1bFw_QojfzO9ak zWqQQMg#;wPk9DyJ;XX#U6WT_o=-w~w7m zcGccdb?H2gGoXaNq9ieVS51NX)s5r?B{?=Bhr4tdNbmV*@zP=Fj+QY;oo=8j=puPc z%)n2yIY4o6I{w0`j0l3)G4_R4lJ04rBS@eOEcXuUHC1y2vXIEHn9k@&``(3{3BYsX z^M@nY5#C#~sQEJi7*+b{hyB*xC6-269T$r z3g|9$z>f~0Mz|OOl1_;iis873g#to0C%(&X-Z>C=Kh7awb)vDns<_yKz4~_YmQ^f% zVdZLcLlM7l$~ER4tjY_=dDlaA!yyc>cQ3nLxTIYV1nqTT#OhJoDlR)<0;0!)Hy78t zFs85SXti1qa*u7#!mMn)68EiP3?mgMqz(0y)=D~IAblW9WHZ>fQg)0>Ja5z7-uBBNkLd-14Mn6d~c}A%WwUSspl-| zi<1OotA`~nD3l5L-Rk^-^Tb$1M9<2HdkdDkS%pKiKL-HwM>|TYzu%=(TT7eeKv7Ayobp~ra$rC&$`U>5;b{E>TL}7FuV*7IX}R=;k*O^ zU5>2Q#xtWN8BRL#AwO`?7}6+hMQ}hbZ>7O+)}s!YRTD$!U620!6p?6}=;NXPl9hp7 zm}0B+4RZ>Pop+RIRY<1tRnEzSa`V7g7qa!HnfqwUcc52#lbb2t@(z^W717o@GfV)4 z7aZLqs@IF%`;Qy9IBfHl;e%T3m$`AQ@Lp4!RbB`RW=Y&-^X5|>iuWY3ke&#~2XEC> z=+v)YoVSW7HI!71FXgC*+x7W<&onzEWoHPBCSyyFsf)#G!R^vBo2^PsFP6^JOZRVX zC|74h>f}aN$fnn~3P>Y<-hlgFjIEFSh~PlL#p*EWRN9N+>3*G=I=23rtdB;aA?5PL zJ!qM!bWt5^GDTa@^of5S%Coi;cF~$s?_~^1Nqn?w3@zRACUvi*C9&1yk#&(5WOctl zkUEgFl0u+jZJf(lL7gaA@LYX*yM`!Qj`3V+cigq*0=LwLIfdn(O^xY6Cto-{F#6CDVlUKy)wf za9(p*Xob~LQwRa3H+QpZYU`BL+H~r;g#ofNt*Ep~9+?ArUb4gfQa;Qv15Sr`diqv| ze;)NGu{)q{fTL_cbrrAko5(L7j`{PRJ~Q6bQY6(#Q{;orb5N1Xs~oP7raw}h&X>ZW z?~1~3MU`0Q#mUpzI7<$G#C>)xhW+VmwJ)#!au>OK3Xz9>EpR6rGD31iCt!H@hRq)J zrVA@&5D57xXNcG3kj{emap22@kOoyf73KOwm1>tF;iBn*Qa4o&FE74E2jv$2;y3Wd*;-ZZ^W9vW`*+M$}l8RJ2R6=RDgkyA(^DJRzt< z)XCV8aKDYAb_XGbg+xf392p(wElhIW>m@;XbD%|f3`i+MdkA{Wyh60~VXYHx1CXxw zit-KPT%RcYJqGG=#b%aR|^i^aYS>a^${BtZEJ$L={)Klt%NEL4=JsEj=ee9 zO~wi$`Jg@g@XmyB_hwjC);xWcb4u5f3QU`WL0 z+a(XG6X^tuQmj-M?RKwJKhNtKQ@XtEnOZuhfxJM~q!SRY59`y;v=Jdpu#KK!)-7xB ztiB6K;GqEitx~yr1~3vU?SvNH*Rac%aS-~OgZ0#JLYeS|zI(kLIn98J}3rOcN@ z0zS`2Q>7gWyPvEpS^O?@y3rwd^Qt$O_8zK*GH% z`2wCUv!wtg13Ei}hSR_*>&`0ygJkp{xEf|mFZ9KE^&VYD$9^~=MB9ZZXQtw`2zTvV z4!X5RNQ_#vCEJ_G419>Vf)8-=I1ki@lH9QYpBqlFiQ$B42{uLVliRX7!DVb zvkbQ|LYk@NHus%9XdR8%)X({wYeo8GDKfEU8l$^W%}IRce+oZ z1USVfLe9m>-U3E7@dU{a zT6qgPX*&6af96c*w`}PI9eeu(8`rF1uX6w~oV-lA*j%ZyDKLZu-nz7+5kNmg6nb`6 zp}YML#S2qL)g#A0kE;qj2MauZmb$(O<*%Zs@hc=2vwHPPu4KI!gM35Pg(C+6ChFWw zBPoJT0x+KQ0z=gnC={UvNSJw1&VZb3YJ;=&9O=PFwuNKp$SHjipPQ3a%3J=mqaJ(q zT-+3t+Sbb6Ul;&^5o*`zFV`LQ#~*?p&;EsKFcLkUNP9COt;XRrDe!JCB;Vt?hv8Ox^mCUhX@tX zc!v+{8=9ZqAw61btc~t4qWBKywc^VKMqp}h3I=@YqYN@eabzU^#DEq>d0;6g{K^g* z?u1+AYgj)mW-3(-04dV{k)!XTvEpA(&4YqPfTdW7C1VHG;u8A3jUdIiRQruBbXOg|cmSK8-fhyR1toi-fiR_~E-^sKGd}j9ULd)rd^Xsnk6b*W zPWzdy{WpHliqNZV*sFQKAOpEfc3j1B44palp?ubsTm!pI;3QVAfhy+EuE0UBHJ7jj zh~kf%Mue*(ae7^Sx;>j7Jo6+7o$sY!6j7cmyG2#@yE7lgY|OG^7$0@lWkAdtgxIGS z&e>4qBhpzIsh2MkRF|bBhIUzp6;I821( zB1fRDvid*YdKn*VDBH>R;L)@J+v36N%`MC72zijxUD?bd*Z0W>OBW0sw>j^W(*|aIWEB?9}7_j@ph;-i( z`H+}tfsBDSY(^pqc2$4MN1$xV+~$C^UIfgPS0H3 z`z160$#7NeS~~OuhUzZHRs&9aBf+d!S}%NYNuL{{USc7xi1p}d*TVyMiqju z#m1mdFqN<_ufNS?^P~4QF~)Y~o7pkPe(kz@DS+a67=h1H z{W7XXS33Lu(@-g^$RHg+?~ua*Y>_&Q`dw2DE7=iCAW+;zy9Pa^RMTr z6klmQb%S}FnCIS>_z@Wwb6L5$0Z!_s%AnLB47|WXap=PNIdf^DbCJwWZ*0kEf}2#&evuB(Ic)H7MdKn_a@&SY<}K_8zqz)j3EbsfI>hE)mJe|HQ3grc jJyGck!ue4Kt?(%e)qO9^|M)2c_|9AU`3D96uk`-_uqa{s literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/gba.webp b/themes/linear-es-de/system/systemart/gba.webp new file mode 100644 index 0000000000000000000000000000000000000000..bff4b8bb82ac1d35d72d4645f75c444541c7606a GIT binary patch literal 26684 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[_*% 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/gbc.webp b/themes/linear-es-de/system/systemart/gbc.webp new file mode 100644 index 0000000000000000000000000000000000000000..2eace9e19252043e2742b1c85f2a36479c301610 GIT binary patch literal 18184 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

    85S)=m)4;Ow-&F6 z4a?o?3SWM{u~o;U4SnsV_ted9mkkE(*R-7*OzJ+u%_5Ebh8YH-nKN^x@W@DWvR&>{ zk$Xc%EVvVDqkHJf!8_aTci+#i2vmz1--)(hO|%xdb+Sb{kL@^BqM^Z*mDuvvnTj=VF4CCFBvj47?6D~An@8v|t{zt!?w%X=`)AZ^o`L`lquEGYV`k;Gc+496|P zz?Cicpwg#pc?Ti%QRQgkN8B~v?ApgRocM{Bg@9YSZoxR$TC&a(ZTWa`;WtBmuW#Ab zTD~F<^bmEmjl#<)3YC-4hK3tHb)-MQ6;|rHoNotpdZagA*7ek6&Um0sQ#_QK6|Qj@ zYReR7+_HF(gvILy)jP_>A#E@p%kiFmV5QN8{Z!y<2Y+B1TSA;k zIgfY@{-&s6j|C2F{#>;(?iYIIfAe@vl=AR>+_36BRB-Gomp%1!etej&ZU2RA4qR86J^F!W4uZ?oBjMg)9v;n) z11JPW(fw>cIr6@x6l(s*wPQc#k(?mkPcOHAg#{oLZm8b4d*SZ}!PG_#IP<>6}c6Ix~(<4$lOk)j!T;l-VgG}K8 zA^bE3*HDv4<6v-{AId<=T-2{fC!Hc8!vx&lxy@fwMV>;ArjB@O_=n|Z#_VSWUO<0# z-hP3{`5A5lNZLybmK#G63O7$>f7rtKC@k$S5U|H1cT4$w-cKcnrS22+ZEk#%^OWh* zigDYCikS|puMI`mMW@}S^yL}Ej-nf_JyE#v6r&*92Z>qHTU6o4tXQQDr65ZA@c+NTM$&CU8C&4D-*&kKl|KfgVvs zND%g^KTse#+TbX*$NlyB2~1+AwpKCGizvU3bDSOf1**gtDsz)tN|u01ulG4!wGAkD zWn5@b1WG&NZbC0o`;2 zcGXuMq{c&ZcFhYywIuEJ-o1u(@z<2XAAo1SEDlC&IL22r&EprQ!-&(|kOuAiHlDP| z7Vay`qDaUK3YD}1axIO@eFhH0S5Qyomar_e>=!th10!ATN})U7?8S3v156es$Xe*+ z(!K2Sz~YRLqwzi}G>WzrJt5yKfcX2)Omg>r(_rK&X*yCQ;gfZ)$wsVy>DldW4U{M_ z7JYuwg^=Zm@(A0khk63ZLXK)47)kmB$?yn_a2;%q*0Pd#FpnTZu;R_)Pw*{fI3dhT zfaoy+_lMLF3nL0%#-`q0ST1Ja077&Lv5$LG4Z&}SO~wTi*uaC|J0hzO{jjxu0sgq0 z{(H&n@7r^UB1fa_7Nxb**c94Td`13HKR>zY7Hx8)g%6AKT>W4L*E0^gr5$1DFq`Q- zu!>!a#;OZX4J1vySiWur6SL6RtGcM2Vk}92?{8N-A8fH!k%+{jy@29mW^pQN=969r z>gk<(PV5+rf5*4L6%+;NAD~>vm4D~95*Lnb7n^9x^|Y$p-*cTvTAgAZBM}|(r91O!9i#gd}Gj;eLRUye<%3t$lL5Lj1DmDO%>X6Z#GgEgB;8 znek-shbLI*;~fP%2#OL8^Aq^ECH@xfs+zv^5N2!Q`&-+(WjZZ4*!)J8!* zpb9&d#_$w9^^vofw!i^60(<`s56D8n?m zRUgD{@6~0yrP17vjF@`kS0gQnip7-oMwiJ5^{=g8H2Zx-YNtBDpB0CuALx>W0dekJ zNyP!74iXeFF^Y{!gwqsBPP8+K_2Is9k1LAnfzMt6pwNRYIosc9IYi`%vG%KZG}2d* zw~o~=PK6=*LeUR{hlUzWj~EDBj$Py9olkT%-Kr;)t_uyi{q7`1b{i_Illt~}bf%^f zMPmyt-xXM(_#gpBq0B|bzP=SLI{fz?;t4IG3m0zID-^~k2V#<1DVXvqv{`w}>!F7w ze0=$ylkf(XVbAP$SQp-2A7c`~{*Z$L?bAb=f-pXyRl}*dQmmrig(=J)mB$(HKo1~EQhG& z(SnjR($1BqX2zXDY5I#sTBMf!;bUYDIoY|q&QVZSB>@7=_~wn2489Hox#x zhf0Ol8IqiYaG)GSv#~SjHOE6v-Ef8{nFf3-q4e6r)BIap#ltPLOP2H0+B!o)QiOvb z+%9f+g(QL)_mrTFTx5m0&>v=NG8%IsC~Xgh1@W~(+=_E!HVNDT%_4&iv!d^_gZv`H zE(|%tT1RS}p-7kRimF7q;#h;Th9KD;3+03=Q^S_W#kdze==QBxo@iH*qZzy;Efx*( zGH_iHnYN7L9(mYSB3sNh*j|`~;g9ln$$$`vUCA8r~2(=?Y0Cj$_^_!3yg#>-@M!hRr}A9f zvlo+`<7VIwwn%BjQVxDT=d{MF!vq_6{xce{v_}`xJjRZf4PH$F%;87HKnH~YA3UvDNa#(T@Z>0)KP>35 zS2^eaAC>5-7l|NZHjSP-<`i^+mnuq6(Nsq|4Cy^~)IFk!Ihj-FvKHncO*QJ)`eRcF zx7_J|sU*XZ`dd&O6Jy>=clB!-HaUhTawrzUo%`008>7vg1iHkQ>ssRom=7*}H^>AJ z_uJ!JuFIk5aO&M|20!^K}|y~`1i~|C$;=% z@RsXT%=0g|tqGb$Zn4Ft&$K%>*L>xmBN1lFU`$JeR-Y0S@t4pvC;V^q->vA#+?hgGIok+>j^Rwn#hB}R8> zTlJZb`*TddNs2>PmH=^y4CXV-UBo|ft@M!b`P&ZRbdYZ_hRv0xOoNYN6cDU-?r%s` z4uQV8>RM;oI#cW?DMNn!5HVsW=ld(#2a7PsDeE!b=|qz1TbgaHjtRKR{}DO@#r@kf z#L;@UIReI(?+O*P0-7`^#>@U2%n6}auGCf;pz?h?ChQm*U>9<0e`u9Y9hA&n$3k04 zv?(&cXAf|Q3Dbh_kt8pR?r}E7F352 zrF)siUW}Sdq;?p6NYiO5M{SeEO{T}Ggg

    >yF@c2AL$9e~{%Z)3L(lPb3n&7BZN5 zK#Wyik%8MsMZdX^j+!R9^Dh33W3@SvoP|0}Ec3)DZX27o+Z9xzUmeEFa_NY%kOp;Z z9*F1KHc!IV7hLrI(Mnx~09%)ZDZM+tx7?EeIY41I`5I>;!#mrQ-qwuMdHqGn8%s00000000000021usnh@ekpsc~PN~1C(&PG_5kSBH_~5rc{D>r< z{D=@6pVa7i|5XHr|5XI_{;COI|H!z29Dmg4K7XmwOZ`+izp8=&G(W0>*8Zvp02ANU zK?EoIs4k!Cpqd}mLkIm-6TkYXAOHXW003HlQ=k9<00000000000000000000Q?!im literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/gc.webp b/themes/linear-es-de/system/systemart/gc.webp new file mode 100644 index 0000000000000000000000000000000000000000..55fc524acd86412a06b71f13114505f0535dac7a GIT binary patch literal 45180 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 z=W>7m0002h|2vcb>;F5H02bfpa)1B;0000000000000UP`O^RZ000000000000000 O00000000000002vuwqOA literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/genesis.webp b/themes/linear-es-de/system/systemart/genesis.webp new file mode 100644 index 0000000000000000000000000000000000000000..5282fbfd2c09fd5bd49aa6642b10a0b4823b07ed GIT binary patch literal 25884 zcmd42byOwIlQvkmyEX1kV6jk`NEH16*1?kEi@H z@Xx<;qkqGvf3f*L_#daxom7=YK72#}kQ15zCv5beu(5@c?S~HQhYp#Et=&iapql@N zP5xr9zu4C1>&LnMQ~r7gZ)&He^06iR_~HQ)fD|AHC;~))5%3kT1Z)5o;Pc1U?nB}X zD1X!o|2OtH|JW;jSQ&j-Spvo%7NUSXU<(-jV-Ni8gAbjL@~_xBo3SweBLaaJ1^|f7 z_xBre0DwvafY-S9_vifg_tydd09yxu9=m_p+vfoQ=iP@q?q4#pTmV1{0)Xa$f60te z0iY!m06wia7&;mLa~!abUr;kM0Jts%0E909fHngFu-g9?w~xBN^+4e=0H}V%N_G+e z(lY>n!u+Fco&Uyf=nsSc9k>5c=ilQeB&#UdNBq&-=)<<8TnS0OKX*MU+@@bhj6feW zB8fmD<(v0mmFWlds;^vwQ5mkpUF$Y@GTdk8MiPbHU2u8Z5rEHga9d@uQ@k)Oqd!Gu zO_>sud3Kw3X4Q`ZdL(R_&Ub>uE3tS6ywLzjWy7em!%tE|rfi zvTbIee1iuucC33AyHn06A|w$J3dqT0HDh z8tM;U$SQ0eUL~DIA^gQrID``ongvnBC`2)26GlECM|e2cNV~y=Z<)|jV4Bo+x9O+n zCMpUV5b}=jj{C;(V*jvp*}dc2|Nj46@IE~dv4MhnAU!d1mW(~VZ1d=` z_GeehTt&qm104$s>!7rxBuk3B*?Ubxdx-z8~$cC2q!}Cu% zipTMkRqyQ}EKIwHyMf85js%+0-{je9DDcW~X|w({oH;hF4`Y!LLZLF>*t37LFW|+yQzI{T zs*GxEwlxzZbs}GawG=X26lx83k)z2%OgykWkw#|%8{U3#w75o(ZYli5!EmjD5^Xm? zE+N)lbU4)9Cs{QQ#`-P1){OTj|GLJIq53=fJpXE@*3qp+z=@-3$?2no7OpRCq9tmH zJ?Dc)aG-VH1U`oE*%l+4c!1$=@mIYU3JJ77RkgVnXl7;!u-_pY37WQDvNNrPr#G4? z4`OW2>`fD3;My+IKQBk<;GpV?Ewc-3u*6A`=7Z_I|8c4hk<)W=KNT9cpRX*FGilVQ+8g|!rBSgDX?X;HJv+U=_q#huT3 z{(QyQwhQUqCi^U~?wgmZi%f04bW6p#KQ zUe&d;hXdkt(3IT&LIyTS!0|M$tVSx@MAhp-!B1ssfDgk6gU-(!;YxHbRh4-cC%?@nKX!r}JY4)<^x$H<1S z`J;O5!tUJ6+TiNsa+A6yzAfX{)pH9H&3R#AtMZ5VdB^qgFv%nWafyHC93IZ>^2X-O zG8vDuK9^E?yw6}gRwB8$Y|T9m4p2LBWR!}!RD>e1Ac(qDg_~fJjF??|jwnpBbn&e^ zQPp9+>yoo*w?5V`JRV}oQ@VmpQnK3WPFEh=0Jn(;u>8{E{3H1ZM{WgnwDqW7vG02` zL5oJM_hosWMzJ|!BUbft8W9YesuSa)+R?d9htnlR(n>pJu7AZkW z-9f~-1Ur+H3iy7B+^_PTJm%Nr`^66#%6wn}`rl#7285iw;+qL@(@#z|LX7c;cm+-P(ED*`#w%T24DxV1y$06;3#f{@LaA4 ze!6M>kOcC~R4kF;&OWh#Fx$ ztGM@-2XvpQnC)20E)+Z+J?zKN+B{Jod$CMYC&_4s&H%RYIvT2k`w*rq)3adabi8Qh zWh_O?M|J(EXe1i+3}@Irk7dE~Dyztvhj+nx-qS$3wW>O+{3)iL(it(2dqgGx8STR{J{mSgF(ezAZmpr90?hzLMt7ov4saB#~~*$=%xh0 zeeSfVLMcZXWBF4?4@X|`(&knyw?8`-c^*MoTpQ$R3ADuNTsH%*A2FR)RVxSwqa9h) zR0JMQ$}C-RU=MW(CteVx4gM*VXc9K?XlsL1 zQSRX+E!AO7U0Mj`?GVaHn{*Y8vcZB~==&wt>67=8ki@w;%E)TIMR@_mE-1pkV#>)| zY#$DlD^paPdWIu2wEA*~hRvu-pk`*@0<03S!lPe27K`l2*v+gfU~&WDPqe5?d9dl{ zVk;BxC-x5zg|0qEO>s%~lx2MYI&+ z!K&y7pF}nF0u!E?NsLk|sBtI0g>BT7;MMOC=PS#N-VKVhYq1qmfFikruoc(v5kP`3 zqHFl_@}jD%@FHy+f-b1?V<54RVVueFRwb*Y>>5^9HJ~8zm?Y<3Iq0ZAq9KhoNTU)c znNpA}96}?r~B>8%928VwCtCL`o?EURQMSUeEbju{U`rCuD z`btpf*M>1^Ub-YTv+W(ZFZ*J=yrcW*Z=3`a6;2TcLcCF~kYbr!`P>#rLehCO>(D@ z)uf=J^1{h;y8MW?5i-4#LM0{kq~i{EQI1aIuK?+V#4RAbvel+9)nM0Bjr~fte<%-U zrKkdl-3ZPku|v|PPIYCEIqybhWlzORcHarc_Y>h6zLS)#wHGUWlFYU6RlZK53_Ymu z@)$WB)0_nTQB3@{C$p3fvbfE#X@ZD)R2`COf*L$Inn?l_Q2cppKfVAw3!ET9;?Khl zcuHkMSQ`+>y-6I&DQ-m0uYoxl)f;g^@Wmt(pO$f+H1x+7NTX|coXFVfufdB5Jf}@8 zhA~VolfVG1ANq*ch+$1wqeNVo6Fp|wd&Yui-_%|&qk7~lf}fNKf^h#7Kh^v1K#Fsl z#VQmB=A&($^o2D z4fRqr^|yIR_QrEd_k{23pgG|rp~E}AJ72r0IfwO9mvM_8SZGWx=h^-jT8_6L7hYQG zLY7UT;Jn!&qf5?dyLRTf=k*L`^4N=|&fhNq{dSfiyYGrY>7zFFE8bxJnQrGiR%2BR zG5bqg8+guAm~{0mb?VtKi%_xfHfTmn)bPi|DzYgv?12Q?S8`4WOL``n0cD^%juK)| z;TKrEGg1D_CX<9(FCxlj!GXIp?bLZIjXB0rU)49)n_Q(cflN@nWfLR|j;|Z%3(}<# z!+U$LF6JF#+3C2J!j4uQXtE!6xIuPFe)uV>(`+p#GJ_V3n>kf*G2=CEjZ|q3;bEPh7)5Uh~V{LiFC9G%*o^RZe^gL~QMIGgsn) z0M|UKV-FM+PEp~GlBwrmKEp!t>|HwIvSGd>BL@U}@q0N>!J8U1V`gT0yO z7~{9$$qx?Bf4YwfB7+1m(aoT9zGWeozEzjE@dBbxGbfmG%MIp>d8w7$LIUl$GQ(j`UJVt)HU_h^1 zkObcXD&yE{)^?vWsUM_)MfUb3VIN3&yg<0TtuK-Ac&t%>3nZwPh|jjsO>sJGo><68 z+14|d5txsL7{zCh5k>d$&-AP3jDohiub{ggV)$~3C{e2(cWVaK^HKP z=%ECt@d@;TF*YF*ybatyLi_KC&;xvNB;+;?-c18dkt&%<%yz`BSh-a^n@zM=r4CvM^*vR*H-s3v$iceSqqJ;~Mp-hXHbcOYsEc=0XUbfl(3C zfNGx!<}XD)wX6lP%nQBp7(?RNW>&i8#QWVot96cBK&Wz;Xde7|F#Nn7Hidx*#mv^N zUTysq4LFPC`dWP~hL-JTn_XdE+IP9M*OB9%qV2Ej?K8(T%;NWun)Ni;vg)rcqHwgF zj64y%F;iP8Bv_4tbu0bqXDFXOe0QvaMx?RCCRWPa58TP!xExzSi8J&-nw_BLf{f%2 zf2ID;FmsxQ%12`x&{^ihM?(NFI!;hKN63#h)2$g=F~n2>@~uGHjk)j&E47kmKNfVK zU!{a2QucwRb}qAl($8gbI_YRU`?sK9HOp=BDK^Vl-0KPs-%cbttfIOjU%C4d{NA&0 zb&N?PII2x%A?e~Y7=(a+0q!}MV2})No6-waTpe?(Aj2GK84}6%Sztd?F)X<^jk&)G&Mr|WZ=P}p z5Q)E^ZB`j2K!mkvWZaKgAnyI-9`@WgM|8pO8s9I*OY|cui_t;8~|oV?8^h&IO4kh#@uyoQrtCn2|E|5BZ!zz%2O{xB0Hkf`MY%`?Iee z;kW)#>_4~Z7({q zk+w>0acWIiUdj8dCMT<)mh%w3fD;?dS1ySIq-L+n?)(AiuzBo_8 zEgQU0mW=zP(apLSfUJL}NBnHk_nJ(9;sJ1OW`!x=_nkWZmP<3`)*ulMSL;bO%>-n3 z2MNIa=A~#-p@6=7G^Gg&U`GzF6Ec^mV67kUc`IDrMkhHT0NC`qPS`j@4nQsiHI~it z=0@`gd;rZFhy6ts=ddt6aK$CsuSILyXQGWbJzg3DExp8|q#$^Q3wJ0jy`JBA{BNe< z7!&};00|Xr-g2A2$LvHTX-EPqRn{*LoZS~i6u7j#j%CymztzaAxsgQ>m*G5P+pYzx zBPIu@TdaS}EVnDQ@`eZA2t-BQfua5WhXc_w5cnJ2EmHOe(@{A^{cV=6HI<%FPQ9sLITxF?#0NO6b#;_yL^EI zAWvrc;VEdpgqH%_o^S_ZM3UxyFeX`}uZWsCllF20?iWgV5e*Gr*BC7g4UYH#>G?iC zg;;)5&`#AV29P}N#2vSvt{vBCR2N5x|R3 zs~z(9&U)Yi^g0D5KokYWDK@#c8@}TKLkgfX8nNeAfZyYo+7iZZl{o=G=lJqa4Bwzw z&R$n^9YqomBzFVSRjv(^j#cn`nuEaLSQ`r9Bg1-$?6(EU^8}B_c^Tim0FqX^Y@XMf zLvd|qwtP7Re6!%EOlw5oG-fl{f&{wBE7axzqV?1$dN4oI$_Rmb_x7*+u;4sL9cnfX z5#jbSAH~ymh!&(~5FgSCKz||V(S@XXrUASvR5$QUekU3Zo6jIcoe_Xie><_-_AX~d!R8|A?Qr3`lhS?@v(84qIz$%PN* zzaR#tyCCvD*<_y(IShRA9(eF9Q+fydj$P5CyD8K_a#4zbG-U%Ta>b?Vj!nTSb3yO% z&K`yfhwU81ycVVd5a8#DA}dAJ%pyshLc-{9CA{A1tIkU|08de{+f&>q1yuoWN9qCA z8Bm?G;6Gk_I<}(bk^a|vQv`VGR35W}e;g@+b;vadf>*47xU*>lmd?QwKTnEma zKq-7lNKTZ8F54n|+FTIQL@s(RSW}kByMjF z(KJ9hE@}KW&HiNOhh|V2+;23LoM>HUS8B1(FQ-8_y5XMXiVf|a`~0+ZfDWZ{D_XPp zb!KzD>sT~-}sc~lMcF33Z4!k@_{cowC(V)Xe3@K#+fxcaz{ zx2@{0bL0lRSjA$5@%V(~g1yXW=a^vn6Vh9Wf#-Y~5cyG-jORFc8Q8r;(I&Kc0YH`g z;oJ)~_2~K&`@NKf$l1DA4Ds>=dd2ZX{fuzA>Jmy>K?nI4P`qIx?hzm2+rff3!sqrG zsTbn2iCESF%>&jG*ysV_0f3QcqfGJ+{xE2t=6ATutHITi<4GYTsiMP~MIxG6Ke-RAj$4B@|Hg5dK!{dFo#`{G1?Uy<-~o<8$gyNg|yr za%HV}NRa-nZ*v!|Si%IIsXt~T?m~!-Mo#iZ)?!AYMU)ymL6OyN$m4oD@R4UP>Xr8V zo*+Jp)nlp(4jA9ZcWtO3p|Isf2K{(7hjy<+61$5VIBG-dOF<$E{EWpaIPlsj#UU(M zJWMUR=^9q{s8h6MixtG{DsUu0ZYB;U3h$0jR!SG#gxp+)jqQ>f8YW~9FNQ$HP$ycw z9{?Hlt%Ko6n-YSk;I|ABvB!CET&P{Xg-m7@0`eane(Z@yL}7vv(n2M`b(668W$Pcc z*VAa^Yf%AaJg)Xq0+Nsp`2>}eK5OJ=&hXn^GjO60&xn-#<_MHVK8#E5DZOP35kwcf zV8}%8b&(rR*-;gz8ugJ9X(J0cBjB645fgbLNZVg1n6b%&ye#8A8VD#NNjqr#ZdrW% zM%f1AU!8#T=!FF!ijY3$vPv^S&AzWHa$q8O#awd20)%bTEIu7B5l74yZ^D&Ch*S+M zkx6N&?yoi?dT?rK`?-&W%rB?PJF5SF)$Y;G(VdQlSCvST*>2G3duymjsU;2ze`bN=W22)ucx9 z*WOa1y``yvX!QalVLj?1i?O=GdlU`E$>pewxMSft`}29Cf-PfGV(~2hxGnR9g?TS} zEBJjd$rdRpOPQxYdEpWK)*`~>6n^M0C-n&fT$w8mG56%&@vQnRR>BotEtQ_ohm0H5Q!~3ERZ=u<#z&E>M7?P#DcUkuNRIQgr}(Z?lm3A9!8_ftW-1eYSi|k#Hh>h7-Ny&Oe{_oRt z2{qpAH;ow>Z>ksvt*~!h&yr)mbGI$D{;}~n}ny7GVF#x%$SRqJA8lr=P9j_jzq?M)c$Dk zT174X`!RMTj6{Y?vJAoXpW|KbPAq(|zJ2SP==Dytw)S(z8P8cJBAqUFefM_ju?S;e z`(S`R;H~BlHxgS<-tXUo|Li2JkzaECQU1iYnv&>>5n{c{_;&|~dUi74ijeaHRPc7* zJc0p-0tl2@qLQRAI$|I-tO*K4hqyo(;G7Kzvp`mHZYGL=@Z-bd zM$8KcQ)e^|Z^sa<3#MraJsR~S1g^u&Uz_bQNelR76*ixNxZ1I76Yfh276Otd zOkjw48tAbh;U0C_mNVn6Sf?&Qy3jR)K|wGCO=Q-J?uN~y2@I2G^8R+gETh_rKLOWq zH^Ct)deL*(WGE`ilZN%}B;8)M6)8=H-VFRF0(>;bHC{a-W2w#rbRDj0>p3y-lZ&w_ zu{7m-Fm)AEK(|(SnI|;hiYR-wSH5qfw0{UTbm>8Y19tvMi}w%~#%};$tMNPI-H2$! zOD;)k^o26DiX)ZjP)>BxmkHUVOa1pqljy;E1oqWc(Mccvt=haMu+r^sK@7)?|=sm z@I)J7fu)Uv1vgT_=6ktw`hnrCm4wmz2bqitqq^aZ(mRtp#@o=f-v0G@AbP{VhTid_ zhRxv$Q~8MMH4#$&+ZXO5ZhqKfwJ6e!TLm1>9n+(tRr9E{m)VI@l06J)VXV z#`q|+f0zEppWuI7s_;%|2==iCi6}_$V-3UN@B+^*ana= zmUa(RIY>Pa9Su&_bc?0Xc2&`-?wGXxppV(FKEL1WAF=B>mId$xNZY>YG9(dpy{WvX zpMm@ac@lY}ypC*yN<-QsTozdL^*bd#1bKyfyw`-vgF0y`YI%*l@de+i&pj8I@&fh! z{5E)hRzJP0KYTGCyH9B4!}Dit(C5e7im%Lx;X_B}8||z9eeU}7x!$|)@Rh_K z!$Vg-VZ1Nn+udu+pS2gHbHe407!S*PAOFoEZ-tlld;1N6>u%h6$0w|HeFwtj+J`M$ zf}cLP1ns9VuY}JMFYh<{NrZB~o4!ZyYHy+U0vkw&0tde5?^&;>?{a_8UcNuoKKowe z9{Aq)roO+w+h6Ff44<37zkj`0-Fg;!BRDnQ6e)qeCM!wS43$OMlaiyUM@%CfNytz$ z!e^9-Cugk~;5LXQk+xI|bLk}zO`5AjJ__Isr!H0}o(FeFRgtdx|D!qmg)c0Z2aZ(3 z8}5~Y zh=J$>vRnkk&oc8&=Bxn2%VYNVj+i;aT))q{@AGKd zkY_Tq-_@Es2CUHm-dt7s#QNQgrmTjjWpM7XsT6 zKI2Y7fOQv$9=mU16!R!8)uln@t-O}rXuS@0?mRl@a?+KtYPUq;LaKQeES+wRNgOn{ z{L5ZR25E(d+6MB%X2)^G>d9Q{74K;^U}}jDOn^)kdZ+NJ`z>7jB2t^L;%Om9Xi~8~ zFfl~zIe#lmL3xOl`6P|b?!cn6p^$6lGI(J^+@tiL%buz3&{$oK$qI^BpgzBu6Q0yv zH#wK*D0D$#b0t-&C0X697}}NC0%F{k9py)Fk?xnm`+)6mg^`J26qM`*hKJIVnc?CP zme>Q#eojFS7Wu2RVcgYjPTF(U8QGrSZ#+J{#A`2Ifj1wW15KWQg^i8wUU`&eCyV!%?&x-8h zUoh|q@9AH6&WHH+SaZ)QX0?~x^jBf)bdaYMkn+7ym~vMpT=&w zH|!v*RMt3k!+W5WHl3eZQWMQ$C!1=IE5DiRVuGpOv*5nvkg_X3mw*>ZssmxAVyJP$p#;e1rso1clw{0OXZ5DNuYiPx@tZ^X(A-9VK1$?5Q(I z1O-2<6OpCJt&T8-tWC#F+tK$KMcRe$=n&0iku@#|`27s0QtpyKdUN{Fu zQc?3OTJBK(FX)e27z}-R?cPIJu=>9W3{Oo1-VJ4ILo-Jshgq4f#E#5ne#jq^48WVx zsCj!^ALn&gf7>Vv!a}J$CFi~i!_y6sl-|&?ErZ|}+@sN++FRj8@LI%D+gFT@~jc?8*AlXMxYm|Ce z#GIY1ydl)RtuW6N`orSSrsGj=?;-p9BhPKi`%B0;vKBvIua0hS%HhWd=f4Lk%(~0M zqjYS@_GvNLQY6cHXr!yz|a5x$6dt8Vb z*8BE2ZTPX)-nowN!7Dv$TR%pc&ATjS=q4A=?~nOZ2A+kF5A6rz#qhLi+iR#8W96;r z^Ez`fDogyY{*)M(TqixEOHaz|_?-3Y9lUrt;%>rN3Fs}GBjqgksGnf4SCut3;UqZ> zBgVsV|A6RLxdAmUmE_M0(?ngcQ#ONqvF zTiVqd-@GP;MWX4-^1;1)QPAA$n4#1>L@lcenG(b?hh{Y$|q7AF!qO)%9k-^Uv za`eH!pC6x;Qey_Euwd&9Fsq z|D_a!i1LjF)nQ;y0Uh#P4RD?n-$UTxeh6(j4M*}1{35GA)1QzQYf?Z6)_;a$i(R4C zqy~NIhG?eDf!yJFy!HM8`MvU-tS>JBg>5W&5C1y`Vf$72lR|V=_e*E&<;1#rm({o# z?uEDUjV9BGynru%!eq&;zi@7D(d3oE{XzWeWXbS9tVY_J-*-(;>E3q6qhS%+Yf~$9!7Jl@xWevwsK{walRELe5VJM>mc1ey>K6WrJQXhXY%jTq zwK6p!m!^*lnI*U)z1e<&Kd104ux_b~gJH_fAH4$H* zG}X5~A{{pUt&sjQz2YgnWLrklRCW3)kga86XTw8#SRi6E>z{ z+dcf{lb|pgFN$^jS9+6U39-HGxJ<}F5keE|>0UH2lYV0>plN}Fk(qU(+)zEe|$F7o?R9BcLw+WCQ&9)_HR_ioRviF_`fl9 z2E-}y4PzWNIDeRg|Fbq#lo3bz56uS!&FB-)mA*#h^FcS?u|*GVWLQgH_Wu`$cU|ix zO}rMM=9M(6hgmP^v-0p8(jy^K6(Ts*PWwE!=#}JV_^*_J_{XnR(V$W*khk}*Z_<0n zUZNqALTUd>9zu?*1`uS*ggJ{=-b^p0HNGnO?c=wD+`b4T;ZljylP-+;KXj5R{ws+X zHc4>^5QZi{Axf>ZNNIoxUMj)TqR5w|B{Pln490%%(wxo8I`|&Z#gk-f{Oeq z`W?3{vts2-YcC~FyatFu86819x9m8r>w9H_M4wp7WuVHzS3F{Tg&Wy6k_GO033ry> z7sfSd1@OADRT+u96>?WnXUxV-!>q=w>U6^$C#KYHuIaX@0=1#(#p~UEtDNRYH0)RO z{*&gG>WK$L-pTpjtHUPTfe;yWZg1i(ipwWNw^ACfHlsEc^peb$hg0(yMu?l4&bu!O zU-sX)Pr%Lkg*gagYHr%4d^dN*EsMbIQZp~vj#r8G_EKl1`x7Li*P8G#yyiHd4FqsZ zD+9Sd(TE9}Qk5puKA;kiCF4Oc@z(6-)$Mc^FnB>n;SxEiNE^nVFz)etZgwJeOr{qtn)-Jp$~@MEXsDWkz#2kp%@U8&YR&k=H)>-SO#Db^`vqJgP zV+?=weawpNCfr+oD0w7*uZc7f zn1EcF8#F7FmO1V7NCn+~`iDmne7y47i4JUQx9|XQroDHW{`G#>;zQfOaR$QffC+Wm6LPH=L$T@jGK5Dt1c+gu-do z7&_}F!OL=LKU7j2Pl3P&-X=o0~=RY?t$URzN0LIM=9C8l?H-eub`7 zMCF=QP&J&E`f+i0xAXnmP0Xi*>Ip~iea*(!{v5P;a52~ucN7iFUI_EO;@L7K30THG zub5hWSG!lcl*7mLk}1ostI&SlKds=nA6dCYTgy$KSeoa?*BLd4d$GZa5pu>&$pI;2y4?-^Hwhj`hWe+uO0ztiw)$EpL5gll~UmkflqGm_eOF^T1fB zY~(Ll&gZEoGjoykr#}k&_VyAX171EV~Jz8olFI7Um*b{X@T7XFbTVMB0mjr|$SVnB>9^?p!@PWs&i9#(Q_ zz5H$Ah!&=_b0WOad6~BIeYcZQ1bbRLD`4nbC(mKYL3wD@V6}AY)8o-V+C2pm)@z?! zu)ZD~sOBPuE1vI3@*kps0Uv?zW{Wwq8rwFk1Dl%YcSZ2A*^a(0wcQ&ywKtV$ly>4CQ%BI;=UQ ziYOm=j-xj$GD4Tht~(SIOq=<2CK4*eF7@!U3OT;0im~vLjC(I~8FG8A|l@=d~&{Ibc+|n@hsi@GQT)ob|vi#?6 ztBwMu-O+}&p&puotBS*K{BX)*oSnnjijhW`-{(e-sWq7GkQZ{%uk!b8rl-H*j4_o> z`tJ}YFXewyr~h1=thUp%0(-8vUtrv*!(%k7fp@y8lFhvI-oHEkys+k z9+Bs01QppBBP*^?&u&cC4;@5u9n1xsYDIbPo=L3x!8Kyn&&dJ-d=!^>#)4|(gX(e; zO!w+CJytY=;brTo%-^0EN<@=tBtl+rmYqMWwX$I@VgK`jgrz#&V(F>o#ZSp#p1@ zwatA;rwN^%EdLU?T-#$Lh#v}wY+liOCyA{FZq#O%pq2Ew{hiN_WVSS-axZT5xU){3 zB>$l=#IlDQQ36<3&5Q)iFqAKp_Ysd5@|$4==w^U&ROsB|;MrRw;R2o^R{JDT8pzLY z+UZ(yn`W#Cp;@xR8oH}N=_0ND0s7SytD{p?r#)*JoxqPga_Z)mpS!Hz4^Rry65&f! ziOw~!@=X~Km(!^)%IUQDL}FVeHC;WS_J+UFk4cn6XK&*}tWEy@iIR0s_8ELav{9K? z^ZAAX;m8Q9gGP_Me%-2yI*JL_r_ZnBmuyDC+C70@8P@Fk! z3SkGPwW7L0xb1s8*VP&_EW3T%e8d=kIOSoC+R6mc_PH}2=_Czblzb3UMr*-83H z{7%zoWt|;two6A@?qUH!TgsIOIa|ma!?}!O`C3D8#Xuh5S%pXeXXM`uJ@Awd$rj86 zV#>be53pE0u^fn`&oTcb$GZsoH0Xm7zj+LSr39(jYc}a z?jfO}-VBfTLO&s7)?oGu^@DpelLndEzlX|sTk3D{a{lElWOXu!Rh0u3HiW1#@+;$U z>nC_PlA)-akQ7U1gZ#HvgRdJ7iRZ9^L*u#&LWIZdt!GR#2)?)DSv?2%(6DKLlqhHV8@2(3XQ)?emUZ!-N?x8k# z5x+RC3Al{F2`wKaF!OE3LhN&v#}i?}w-AivpL`O2d46wI>e+%sk1J%9!1#_EQaz!O zhZ=x*!|L*AGVrB-)1ApFQb$dC!V+8{L7=y~W?GZJziuhA?E#k-elO#W$zEuYh9u5{ zU%;fg)Q$3o6K8{m`n%Dm&_ruNSSaV8(6K8XCXn29^|iXrAwi&2>vjb!EO)q_f*77L z%(7@}T2Nv4oR+HEBu2Mr+9OJ%OO;Z?BELH#Zval8?&zD|CP)MwV)Q3*xMj>DrqD`S zmR2u2;q(xuL9bl5LK@|haGK%+B@ViSd*@wr8>qFj9yB^&bd~+tAK%o}(62 zxAD|pR z*D7#Rcak?aR;vx_OO?nTCxFXa^AL;oj(f)(ih|i2v{_4Ox)iW$h@ zcDEd1dj9!)$R8d0%Q5+FTP;)bq8mx41Agq<8&#pPM*iIoFUrNQtSsAvu{lS$p4hYC zLW$0WUO#|?xPtyZ$}2sEbQPrR)yorfrY|PBqUIJ4je}E9^CaB7LdqYD6$-bpWiYboCnOA z8^eXpwTcp6J1wBIBc-X1=IKD_<|@WR{ZJd@)HN3X^S3Ud^rflq_yl!SyZNvfhcPxx z&KuXhn$ZmAq@`CczI&Z7^0vtz47L&c5y@-hWj=?#i};jhO36~Z7r z-v9`0*}J_%8bX)u5RIm&4!g7XrxZ_HFRevY2H%2Oq0NsD5%ngF;!~zv|E@-Y4})0 z-XZtmx;vd$tMUF>cD^OSm>MX9g1ZRlYhl+m=tef{dv~u29?8R~pi^L#R|ni%la`s? zV2`$er|`Fbh_x$zTRjJG*cO^~7jIh1y^I7M>2==|{gl#!m33J;c(3p8X+%1hUNmKH zdYzq5ByrGJk>zW5+ISaZ*Y5pFQSWR03mn*7%`lSvWQ~X}_%?4fD9nU4a1DnXSi}Sd zA~Yc~Q41inJ7`(Z6a2zYgqkfbE;m@JqQIk8B7gjUyz??bB3DGASBRSoW6xQ%azJ1k zkWfVqvR|V(xH6p=kWMKxZY!{`&*;Rx`t%3|QMLdk<|CzJ(zr2%R5|U)Ewamh{~cuP z=I#mkh3u>a)-}LfmO+T_K8&MygZ>+2(L!H-?XR)w{a3bTe^H_} zb^!KfGnl@V5k3g6KP>gO*z9K;a@^+W+RmYtXX<`kBF3YtFwYuyF(Q}5^4Nys9b>rWg${zmv^4bXJxG7}vbsG$uW?NOkz zCtF(#cS@S%h9Yo}c(xcm!_&w*;oKL5r787Iti0l$^SluSzKOgK+oTbi`yt=ErZYA2 zfZDROoi~&82Tih{-iebtieJXG6WYg>qPAUH^s`yGtWmH23M{Wr@@j1ESqnO4l5&UR zoq;6R(t_XD$>_u3DgL_ObdfAm`{=8U3vLYb3pO>kIFx+EQrxSX1GWIL>(kQ4PM0IR z=9)|EP{E1p1Gt|DIsS%*$xp$gJ1-~lQH)$w0!@@Q5-W8LO`d#IW;>o$B&dLpGLUgH{oMibp#zqr~aAE2y7)0N}c(#^oeZd&n zOCe=MO`9i|)VE5CIpcp5vRWi9Iw*>Z({)vRrU^}f@TxHFA?$=PS+djO#5#}J+cO`s zYn!H-uFPvSkr^XSo>%u6VK;wvb0F)z*|ppuLt0%pXmoug;F@CX@smZ&qN+3yx=qPn zbBc;0*b5Q=!psi34C@qw$r2wwxBvc?bxUp=%o^EFnNPE^YDJmP{xBXe z33dQU0g(%1JAk4&+!#*)NO)0qvypSNoo#KM*0omzUaFR0;F1R4qQE5VI{mA9H)w2C zbFp$YNcz$Qd|Z^lb%ZI=4DsuhJnOOl#&RzoBG-HOx%Jw7rA|1p!l@Uqg5MhZ_pS!8KF@;9WYv>H_NK6vQGt|HNJoNg<-1Ts_B(PiQ9C-G8fhiCswYe95NrcKn zpVl{b-h*-MA>vi}gx#b+`bWn|jsS}gv<%WmonI@dBR_aHu-hgG%%b#)9lAkrbEJJZ zYq1vA4vw;f4|m|R(?2Y;UwJIU5_hWs`2DblaiRS0+n!%3cAHXy5>XGQZR<$dG{>L? zQV99kebYL)d^4av6V8X7lR)w*_&mElLkA(C_T%fDycMAMt6%!{CxmFjKq5nrIB70H zJYUe2K;|wnclVm`6}jl#M(SVmOxU}sbO+~qA~HtjxSap&Z#&EHs=}S^pk|naHLb-N zNNv^r@N3u@7IlxnqdC~kmeZ7fRJ0Wgvbgj(*r!5{6^?escJs-8Nys&!ibs z?6P#1Ff@2@^LM&mr|YMrxy$IO6YTDz2?)WSwqD*rB6QF`t& z?5RclJ{bcrSJeEWzbL=kGq=zS$1oFLc!P>!7?v0=kzlHNwqM~n{jK!M{_@~`tL-V6 zTF|Pz<{j^AEI|^9XPr!@2U-mFd0_5}_M`hkoHl;GvYo1bD%4+D^({gBmy5JevB(O= zvN7N`s+`Dj$L~arS#eCd(ZzW?I80{g`#@Tv+aY_fwD<4u0oH6oc(F7)h7~>TL47Gd z?*j9?TSUK#*?93{tZW(x-w;CC%GFV*@a4BcOUs&ht5CD&hZ3(rMHFOwOEs3&03=pD zc*Rrbw7#MeNI+KQbZSRi(GS#HXnG9|ea+<`s)oI8NKZG+dy3MtCAQjvS1!c7n+NGV z>qIP{4!(&_6&xrHO9&C%16vI0%Xym*qX`PSzL6w)(rxpu{NK!29F{vkLIj;Je#RNu z#p?Mv%|KJxOu$@b;WlZstS~trB;h}BD^x8HmzjW_4qsOsm_;!3h?-rRfk6l@thxTZ z{RIgYA(&?2K&O}wIYUzDRQ1lK%DzO0-PJ-3O{mhNI?D?fFjdtbjh|+1x?P>weYS>C za-JNY1o=pNc7OTQ?61OM?E+HV^D7?p7O?IZ?db4#pG2FRE#ivT3d|>EZ-i_W`2gz= z|8W`lx$tfeVX>c%5x@$m6x~0D!!;0T$Er*?Xdo)()i`3S9cr4U-i<`wyMwEJvMZew zq^P;HtRX~FM5CunMM2=VLy-MRfGU7f2^S@hfW|a%ap-r{8MgUX1if1|3unPsg4p*u zdH_)@tTc0omB~z`QFyfTWLMFr33Jz-SDyXA^3Mlz9p)ttp&-bcu7%R6S)JY+JYxI} zg}T_<+Vr`?K-Pi%|8a&HDM;KJ|NkKt(SdiRa`R)bv7f*~f##?GYL-~cXogjvrgeBC?6y66)kOtyhHU)k(J37A8Fh_w#wq&?pI3Q0Nsn00{UT_Y$58eSq7K zX`GNDgqluJ=;8?tAI&25rhlYl%x$X{bu5f4nkM-`dCo~H83;n!^281_y}m(ZzE4hO z2?@>#X+X|P(;#!#6l+%apYucz03dCQI$8~P$WwCCCl?w8O*%=Sg5oh8M6ERj_&~r< zwz_H!-9z>PL8>FCN)L12a9Z>rvXYn_=%L&XR|@uRoH;kqf)yUwmqup4q{DB1aClVl zwDNypmAc=FtR2{q@D%Dw?Gb;k-lZa}JZ&yF5m^tMXhACR+IF6zoyZ$UIV<-P1yXDJ zoR<81OdA205S+#!omj=g`9Cz`^$=AiJ-KlwSB+5Yz$@T?4db|dBn^HFOJVD6YR*-5 zZYa0-%)HVq9Q~l29}LgDrdTsnXBSN-6K^97kgs3^Tyd#!Mv6Xlj71%zeM{%EVgMwk z(W&|K%^2qo=yH-5Xb19+?v%SJ?#ebyBW&mJ+7-FpNyLTvP8pWp^XxT^Ouy^$I^6Z}T=RdVo&14KhJYL`NoHG)6%D~AJl|R0y+jW^po1;Cz zuUozxawjdKF_J*pmg9vN{o?T;@H2Tempo4K{vmi$^f3*-xe4n~3RLbm6H-Ih1Ivv; z`R?W=TH|QMdN1|+IbecgZA?>D-V$T^Hx%XJ?yb;3@edAi9ie7>&CrfF6%+Od0DD_C zvRqm(0Cq|74o6B5yW{&u6Yh1s)j<#oN=;1E(rAwo3Z-A(J`J#OFV2 zRAx)75j7>UW?TMdtx14wLTaUr-JY0a$q6$C{>Ng2@bRFa(PxRWX=dJM!<@|?A!%3UVB$)8@DmiAdCS(?qoBQvx>n>oX9{9py2GDrVXPibIXLiu z>24T2J_of7cwymA$2eCyyZ$Tx&!kO~@Wr_rvLS~vmY0l+pG5z&HQ;N}Zw~)+Xcqk; zt+nTOqiXZYl`wgYPwSul5UX#apSGAVWgAY776zYcs2G)N$elx{$l2>MsmeSvXa-L%X~i$abZL+ls=I#P%Otu}9hH@o#T& zpLElXYJ1PrdU%2!cv>$o;OT8nk_z1!KUJY5&5g>a~&qG`) z5lnmo4lJG6H5c~MRvpn04(A>J04~ zaLKf4IM5H(;yGWyhjg`Ho89sYbCW!&@xMQ>fWMv-!f+MjC)xYwKCg5l{mkMq3M?UO z)8LMHd;bOe5KrOegXHOWLF@Yxyc9%fU7x2+bUvBsCU8_wsP#n6AHq~aAQ|=lN%D?m z{V>zO1vclyS>b!yiH6!N|Djs^LZ!xY`5H5K^DKNud-#B^L-l+N2aUgW6q2(z=`6}y zIptc7h(8Dcz$7`TmD#`j7kHtX^N@!vW~*Z6HB&@}!m5I&C@)TXQwmw> zS6eNIR7mL`2Ove$c&@|OHZCZ%4X7n7OPOQmG{gc~7@sIT%v!Alxjt|LB3GT=S=$j- z1@`Cjtnl1ZfBjs|?eDgE;E%{Q2^Rm%raVjQ*sZyz`y>bXgmNz^cVDQ7l8b}@=?YC+q0=sb3`OuB^5&XH)h!sL`1Ux^-=R(*w-jtxH<|(S;^ZqPzFUr^9Tvg z4^RL(h#wJ3yLyA<=#~BsHp@y8%TT8(<|XI^kPglo^off;t2MApE3P8I)HtpMW4N!8 z7Ok; zS`y8Q_@E3E-kBo^ygyUo1V(2tS=})Q{X15mo9d52$hG)x#bO8Mmw0BGd>uv2dg(5p`f|x7Qn3Od7kW zJy9rGd%C^1f#!=6XF+5Sz?kFtZWC+ zO0&Xq`Jx}wx0VorRAyf$uCH{3=E4IM&uV>bR-`Q&(WZhHJLFzp-nW2X)3vKsCn1qV z@G`+B6z^2&#CtC`7?&jRfDaiyBZZToAP^kpy61}jv$p=Y1DeQ|MP1}WjnC@YeOHEm z>2+S_wv_W|UySWJpPMVo0Q*XlyLwb09P}{LJy%v)er#=sA9&IZ)x%He-ew@;=s0zk z^wz}SH;zeO!qw7vK7Lf0bpo<@P@@Ht`O8aWGe=*@=&X#?PI$4K*S$koOQ5%lukJ-S zxTCS+`a}^-&=*BfSj`g0w5;GULTtZh>L8F8d(v)k4xSw&QYaKAwb0cAY^X1o{olhHDu&vVP>w(V*Ddb3>T1dUU2WOrWEbZ78O%vGv;{t*} z7J%Rb5hdEgK%Acrd<}i9JWErMr=l%Fx1)U08|YmlhSP8%GiYDgv3GK;x}%c3VAy{TJ61xb<<>KGi#94nn!pq+A)G%hodO!VIhy+1 zTQ@Wy4KCSZ_t1k5<_YW#*Wx`pO?bX!x>g_;Hd+UQ*+8Khr*ov!$3Yf7fC)wnY;>r} zt3^IrYB6MfakXO1hRw?oP1w0E(#R`L3x%udUS^+3NgcImT;*fTKNgY1K$ahZe}lNeNh(w1Z2Zrklbfmfj>A} z8(aSVdBh28FdTTX+P$%hYeNf4E~*W-qn%R&@Jy&&=m*U`W5ZHv!0>1gr%h$8_llr};QT0+t z0Vf7ar-`q^K;m5In@NV4VjZA!Xo~22{;DD8e%k>D#kJ?M0E#8V_H%us%up;+^d2_U5@!x2yS;u*K|RQe+Aq(@Li5T6wt@KU!YpDn&S6;-u z5O9r3R2K!Dkn6X>5h-sEW~&MT4LvNPtvdYwiYbPc%aeq}nbHK)oAJgo0SpFTuI@s0 zM0C%vyvJtOns#C}v;EI9cE(3ce~u!U{FVh^d>LRLw{X~$`?)>eemh(zINI{W`6exJ6}IJ%=W#-XDR{YR-?&w3O|5BkiT%a#63{&;{Bo7t4-El3vuSYAa@GzBaPr`j zs;r47HidF}^mNAhVb&onD6AeMz$g4ytN^&94id{7va#|Vj=Qr$m8TF?``5Y0tVM`` zh4OW%?hoTmG#+0Mz%z))jaQ`egHy~RpX5a+JhVzZ1y$vYDtz1HytK~B4s5~Kud5(} zd;jtn{a>&>=TkyOVZmSAVQ8+n0_qoBl6^(#C|IHY3n&r&ql1)nYRjWznwMAFUV`U3 zH-OoDNw7TBb*zyz94vA%+tKB@nMMhJEEVRdZKu%+0%Z?Sv$Nug675&<8A$REb5jdD z{))7GPJFgCW4=p1UsAn6w5Xx4FXv1I+XYHm{EI+55S$t;cxSyb5b6Ae&sJM>2$y8eNw*E zZF|p9!5dIQQX8#@{%z`CCb`T<#H4Pr@Ut4>LnrR0aQ^$5&H6gOj&XsHGm?EyR^YP8 zY2Ze)rccglUotnuvQxu7Ht=K_3+cOoW3q{wLp*bU+CB~$4OO)Ng(l?~{$+BJNu!L9 z(+%7uV9h80eiFJghu+keMTIwTtl6)b0U`7W8C1NlJ@*+yEcZRru}H|JeN;!TaYR@Q z@Rk(jtdKO3*37fw`88+Ij30T`#MKH^jFE)$1i04S72RO7W$#Y97-E6mX@~$e)A1JF zUcN4tMZ?csHDH^p8_B3{S^&5u>uJZKNIzLd<+Jcu(>O#y8fJ+p0`1LFC^L@speZD) z;lLD^5EUBD+q1CF%Oz{)GF0z~_fg4%WzrIoy?Ax=12)J=m(rTRVSFu^HqJKsGmZe= z&h!Yfue&wHILd9-t)qm=O&rn7-OCMv5Wr8i*F^Q~<9ow0f7r8zc*y3V#I|<>)o!iM zU1aF)hsqB2A<7_SEA0fI4dZmO)$@7T^vUO1@M*0fk)5D*fqalYmzlFIC-#?(9P{*6 zadUrp#=U8*UV+vcm(RGY7O+PXFKGT7VI%xFfuVU2{X$})FG)oZMICfEon#w+6!PoD zL*?J)ssQm3{+2c*W@-T&tUA+r7gkf|>;`Tx>CEcGmgdJ(^XHIPS7i0NJeP77krrxb zvF^NbQt6zQ$hr*VmuF(XGLT!6R-5tkYh|-$MB%MX14l78l6E&fnk(pK)ZF;HZFIT zh`+u`lO2NIQlJB(K$F4LQzByILucDt8*hZz%T8=u&{RU_*pJ@Wk~za%(*ZZgR*P+x z!05%_4qDw+iH*AqOIX+&Z6J4b%NnSPKBn!!HpP>i`JLXGc|K4#zvA1p3CLO>LAFqQ zgArH(|nDERenMno>s0sp`ZwioM4m4jC~Qnyudv> zCDw@btWe`8vvKVy!v`?dVE+F~%Q;A@wU7HLlZMmeJc5)4R)`-YJcO`up0aT?sMhDv ziX2Bl`Zt!Y+J(Jt8Js?5aE$u0l`TgtD5X&8TZ25YN8}aLkI#v+tGO!s|2=~S{%GXW z7}nFG&vb6uzze^*x0>ouT$6S~dd#`;Kk>m~cTMQU^k*=ybw>{amzU%cLjE&nK1DNT z$Wr5*5GI4-5&zzK%|=M2=@CDX22i1nf`NkdVj2*DGGj#d3YY{nPZ_w=Z9N!_w-wZ-PPC7CM*PZ0Gr-SEr}9XgVE0$7^$ctZW2N?dn_ZM?c3(k zcwqZ_g*{36?>_UAQeCkDFb@ zX}*`}&jHYFdQRi*$v;n(s$J74V`4b@y=FmXn%@&0wCCqSygtBwl>V+7&2+o|7ed0B z&~Xf4(h7ghpz$hz&fKs_6XpUMoU|ehag# zN>L~ILfxZV;Cnl;^EV0hl^B5%e(XRJ>&DCN`^-vH+94h_%~z|+)d69sWg4%dshp7z z4J<}tiP8pN*qwG>O*P;2H`b6s9IF7VNIpz`B8-eS>}kL<^;ZTJ;{X5v0000006c%x z=l~+W>U01HPx_rq|J3Li|LUNfzv`fX6~Fa52(S96Q~%XMul}b)SN&8KSN&8FT>sTU z05^ZtLudY~30wbF1OOVJ>Y$pR>Y*+Fs)8tg>Y$pR>Y%BA>Y)+;sn7re)BX?y1wZ{x SfB*mh00000000000000lbzutt literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/gmaster.webp b/themes/linear-es-de/system/systemart/gmaster.webp new file mode 100644 index 0000000000000000000000000000000000000000..98aba67709e7146b81c423fc9cc2befd716cceca GIT binary patch literal 25808 zcmd?QWpw2{vo5&9%*@Q3bQrtCoOGC(nVFfHIq4)FW@ct)W@hH(=Ka1ibIx6J?w$EF zKW0rW+j@5CDak5Ja(T=CEiNK5YzP3T2>+5(mg7)`1^@tz-#Y=wKbyFqpjfCM1YGjOo|DJLiO5BtBD$Hi~KN001DuZ-#(@t-a$n*8Rq8E{?YU;M8x7YGA7O-4>woZ%k|deS+V3 z`5(Rhzw!A$*yLaMUyVYwSNtvb-8R&3J)y~e!TSFN8<^T#eRF<%b4U%XtiQ_#R{b|N z{0DpfgRLx`zR&Gn@=pt4jjWXvzEjfg9Ty-95C=#DMM6F51!-9Kw&kK(Ad+PUeOaY-h>NZbT(+{9F7`=ZtD{;3EQoSjS74z5wNrq>jPhF zF>iUHqee*H12DIv+{5%q9?deavi5+?b^DiVrK0bxG>|ovLx-lhY&YDoF;n8?NyUE~ zOJ^l7!l%I9-#~y#iAV{&rZq~((XK6O+df@y508%TVvlpAeT$pKcsbJ^|Mm-t@!4FF z*lB%oY8!-#u~73gY0sOgOdS>y$~N3u)!Ht!ohArWY<)8~Xh^dF$(GM7eFDwJ@+pxxQn?ZwzYND?gm$vdt}i^#O@EISP$DF7LeE{b^cdcB_U zWXf&Qy8T4jO=mG93yZ^SM<36|+z+j7YK=y+AhT0l7fNDsLh#SKoUivI{;!uQpZ^Dt ze_%i4n&d_>H5D0!Kae0etUmJG5ta$HU_R(+WpbVq=_mlQvd7SZCL=wn&P;%f#u z6_kp`AGg@sas4vyM+h-k}ia}rj>EVMoQRrvs%92o ztRhDBDqtvjrOt7o5Rn*QLLG>)nU54zlgI*(e~s7Dj%AF8i5%%`PbcUwwU8)e=zFSy z&KgyMu(-we1%mj=&z1IXPvl?stVnoV2@>AND|4Xt zc<4ywBW%85W`&2gN+qd*GwZ1ou(;OPcHwrvGf&s3@?|It%^*Yk;kQEz0cO$ck-Xd2Onh zma=+$Vt45%E`Rwvm%XUnRo`_Cl@w{po16sINLzYtYET`U+IV-F@T5(Y8vmqfLa^C3 zIuogL+sF;!U*>&Pb5-Xl!&L76wE{-8m=sJ&fYFoTX&XC*@T)xhY84Zzsh5~gs=t;S z*Nan9~TA|;>K;fbE+Zp4&MFJ$bcQrFv%3qm+q14FBj>E_!YL(a)X=+p&L z_MV3Kvy_R*!pfO1vHJ)Hd<5DBF1b|K4oDEvNgUMQ-J!{9IJ7q2zot(g`ho|Ux*v;K zN+A~}D{{(v5;}T=Ld9Yz6V zFf;!29~YzC)T(&ARzDrbq$#oyXgKwMIevYTS5B@@`-SUHgh+)p5my=-|Ek2Z9njGK zNkpMLVGg5i;U~P(A4onNKk8rWOWR18-83A(=v!;{D|r%*QZdldXW91_T|E;=t`3aO z3Qmm0RNO>>F9d!2=&;WTu0r`t@@@u7P_ife12xd9$%^lV$o9qSj%vEl{tgMDGMP0; z&R;TVu`dD7)~O#SW)e!P!fEeDbOy}Zn3rN_U~RAuxN6ewEbKad*0nweLshm0u1eX8 zTeIof-Eq^=ROC6^sfYvvpj^2!Y393tQ`FZ6uxOMLl>wr?lA@>tqP37JCiXo-Y0L!I z8?ZLuL(@8q_$2MGUAIjK*LO4HQ1EwEuHDES zP&F;s(CknB5ws!2C?aglw(d{clyR#@SSC?70uwu7Yz%T&%b4*BKCJ&E1J{U%C1b-Y z7OiDPQ`Mh#Y{1;vJ<%#rgoHvQ)=mR6ieG{fVbUDZ#Cw4VK?DWUc*Z0jEaf4>~yGreN$Oa|Q$A@~{qC zk@5v|hM(2SSmQtX)Ts`4W!P0MvRaBP?ptA=#SWY7E4;j zC8}BDDulr-f2YHstkO6jiD($p8~n;hmqeOIA5neLjcAl8H>wj^o7Zg5wOUg9CQ<0q zYVRo5)KG33o7496SP>7}A9UhdaR=3ylABtvEi0#kTPwy^M2Br}R@X$jT8t=n^sSMv zNhoYzG}kC{Zn8y!-9*)_tL|11Ye z@8;Aff$0vb;LvgsBiYWZ2nEPk8DRpYSdx)-msH?x0cSQPkps(E9z06=8fds(Q*VoC zoIrFxG};?LH5=0GL2@)CZ3BiHYhP7Gx@#(ELzEzpx}yereI>scK+QACuRyjV%Bd=N z$-LXk|D@rtw&pZFK$9yHDnK%pM&TR=PPM1Gpsw0(&jbk{qkRuZww5$0RTW&3W($7G z_@n<+Fb*PPSx5jh)W}RMV<`;wO^Cp^T^#+c>SP@8V8HG4S6l@QRe#XF!NihnDyQ;@S2gmMhqQ;m906>P;x=1v?X&m-F1)Vta<~U zmbThaedB5beFTD~`k6}s3{Uags>;Q4E!Xy+MU|UE*P!34Qi6eAWRhkCI>-i-nKGt_ zK?+RZSD3|hSCVK3+s74-kMm%NMhAI@$yW7yu%6CbNgZCiLh2q*lu;*7lVPm2ufDQ+ zw|V}i7TK?<$jiF{ce_#LTi)beK?qpHm0!<(dbg|ZyNcs}=?Qqvhez18S}S~)xk}k< zL}w2W2w=KS@VGaJf)jO*whNuNwla@n9!K`7SssGY=;y_70i_IJR?=hR*MG5O`H<72-F&T`sZqTWETGRM@b{aAa2a_-qrIOL~01 zFnG8R<=*IYT5uzFl_^Ydztl$w!lq7Ogd7RtGPHth1Z~t=+`)w;Hl#dO28K>5u}-8v z6m4>7$re{m&d7Uz-R>x9g@S4J~4)>=z~fM-?X+Zv&by6Zb}tmT}K z*a5@Hc2RDsAXH;ULPC-6c%4GK$5vl0>tOcNHk)#GG19a*gYD}@tZpJ>FMC2MlW_NrRdM0~208YHxU zD3%%qf)W8Rs^gh@Y>ct0(14z8b#~(9ZO=Z+`{QmfNUQ#XX*hu%%1(olYA&pN;A&yvd$zioVIyDrI9uHX%+09G&PBT7wU=83M-^A%{LVM zfVF?<@hi~L)QObHWVPri>=e-#?T~ag4Jc9b13(~>(RR}k_7h7m+2R0vPvjjQGGEZx z^}Rk@>iJhzvy`fZrmok*c6`46Z)5Hw9!Y=S7#Cm$5ugkOr#f(;6|E}^YP$KAD^2ct zUIIc)b}apUcooDw$fHqheA6Zs?vkW8PXR#k*aU zKs7zkQZCsrqw(oDlVvM(efz^GO8s>b?bpFg@C1fce)^Zp0E8iA6wR+v_%WBvzYx0x znHMRk_M>&TvEH3o!OZ6%Ox@+e+QI|QD(%>>UD3B?e!-{6@^oQfoINqBb<)W>wm?54 zXpjQz5qMzsx92|&v47ANk9T+Bvlp?O^%j;@Di(U9f8b@9>ijn4?7apm`I$~p&M2jbzdbEODNz@4!bSIzcnJDzf$+OB$(3#XZR=&e(RD#(7_=r>WoWUs)AcU_I{Yf36bB zK&rd&eS21=j}fM-Pcd{)Qn>bk|9Hh(QcUq15jzrSJ!v&^7cz5`yBXm&-QE34-O za($Nv!d&b1O?hGmzii?v|H1oLvAwiALjmjwe+_;Q1E>qgCWIX4TC)cx8}kawc~j{O z%U7@~w=x^*hmG@6_u_UghHbleHW+OBl7PXR`JkE*PsaMVuL{n@#Zlh!Q&(FJB*w{O zwm>lRGC}iYTDhj^o4SH;NQ@i_*kSuCsXiGQItz<5^;9Fp|4zJ~Ga^Yz6p`{bOJu>b}2!hJWtg9rZ$ z|KUtHWgd& z`3v7Gf7D28wS{v+=)Su#>7z31*<7QO)S8O#z-h_KpMhLe(M>?}AlBlj>xEw9aHjK% z1Px{m!Rm7%eKd=EKJvQ5ZEv{o;|Wi>QX?fDi7#EmWhbypSeUivh(pn7&hP-znibV8 zN=FX-<<*1_FAjyzTNCoOw15x)z)Yz?+zxX~>tm2i;Zl66pvfjPnf&jE1n}$F6axb@ zbZCDwa<45dTn7Ilh}Gj-)geqPZKQCQ%`BgTmB|kwxENm?0{YI2*kLtZ#7`yAh3aMa zW?}u3kN7{QCKXIMU2m9{JcH2)y}idJT69!zda$?aR0L^|8~*p!@5%u~ORt3QB7=wvDb)R$uy?$HE!!*dU4CIQ{u%A9s#ks0%4dMJnyFS z7uD_?eds%1v_ubIpq8xh{&MbyeTIPVSU;(!q(qZ^Ymd2k<|_hDCPUk40-uxRIkBYD zOSR&IFl9%XqoKxBQjaPWhpBcHAj4kp;)REOT`!(5^k9acG|i%S1BnoIVZToEdkJQ3 zij53{ScLAbngOLYNHKS?8d4z*5RKja6UZ%6 z^uVo%m6NQ#QJuz)YWlIFo}F^67_l<=!+g}xExyx43$Mm_~ zh;`LvzQw!}3a3r%H+{i2EIT4C_#`;TozV;e>If$v1S$k*PK)*TN&8pLtIeH70a`A$ z53+3HE$&5pZ6qAJrM$B=B{-Gl>#gkb`(9m#sec2Cz-B$Tty!bu`qRz`alD*C0Y?B@ zI>k{0R8Kdxnv9i?jBZhsi2J%?=;>C5WJPPG^jn_YkA#_=kEPpJ7(u^p$071lx2Se` z*ze^D`{JL|Z#M zc{Lzq{qaCHguHEwF;Z}NDtX)}y1hhkK*L%DgPyG{Wus0x?UIaZmKBpX#0F$nNXaCh zPj(hpSyr7#r!#~>SVfQJgsj>nw5=@-l|Twoe(ebjDe7ecbN!|&-b@t|3`HM3>UX}A zk|gn0HVfh{9@WnVtFV<6s+wVw7Lv|_TG^iFhc1cux^p1Ph5uk7B}r_j6MBMCqjn5K zw_$FsF2-pS@F=x3s9Ojs{11rI)g&Fct~!`>E(N-t5l!Dr1qm236aG^opoS!7|45C$ zThNRcB+ri(7gb`T*d%u=))Ci#dhj7b3P{iG zuYj^=mdM#cUtp0*wD>)?lgi$p@8?d$yJk>@T$7ph%Jmev_CtW?6;i+<9m*W;@G9SG zktiZs#w2W@Kc{3nCboyDn*@SsPw?J8_Jp$_hz5v2BEBmrD9gkuxX;Sf{zl;(2JV~T zmhd%*Ps}5ei1b~O>1~V0IY|74P|)7}OP;&uVK#xwUxCAO<_5W2dRGRj0W8Y&?gz1V z!XGcKo|4&waDN@Vr;`Wd-2G(ObfPU$+s+d_k}hFLgv4x6=t_>uw(*b@d&swm*drQU zl`rmAUs)UpZ))Bfj zsNT|xjN${`5!3+L;TT>TZA6}T@w5lFLA_2Sm^W?TN5;O^Nz0k6L!|0#;p}ZuLSblQ z;L?ceBf-lIvbTY89$KbMpjm(}borplO*^HO+=%frASL5rB>w$!TSJE~e{U+GA@OsH z3OtL!W4uxH65lZ)`z5X=+igM7*Hbp}ex&{D><|X|cCdmP`MC=<{6|vAaNTFhxBR(%Fgp&%9L;A+qDfIYtAn39nh}cGfhF}0nZ=! z8u4R~lMGX!H>Z$g6S?tXevW;gbHztVrOeRz{RMpBS8aD*O-de%x=Ux~fsYp!1X!Eh zb&WPIlrxB8SLovac!p({tj5zePSme5d{lVvD?^%ujm)rlBC6~d;QF@|*(%+ht2@g? z--u6lMh;dy3VuiTP=z=yQZU~2C!AMB8g}^}7n)frq${{#Z^UI5h+=}e;?8fvAJG`~ z4u_D`W5Vsz5`O3Ny#Duwj{#(cvxW^0ALrvEt<3OwmnXn%D;UORVIVK|o2I+CvZLb| z*C)#caxt4T`FooOBIo0rO%$*rMFMDXQiHh2lVcYJ)U0D4kE6J_2JEnRr@JMA&x)|Z z-g}hHsWK^+(HT4i6g`!sIhN7sBL!3?$kh5QswRI(!4w|_r3vs~WIXb*B`Me+TqJL0 zU)$dPOEY^S!AlCDt9_}R@x+YpuwD|QOeEC=U+6>DJ@-ITIub~xPkOKV;Q}AzDtnPl zpJcX+3^lJ$1o+2apWpxX*C||0bH5z63tsJKTt^bj=Mt-UuQiV}f?_PztJR5;IKd4L z3ja>@z741%`%ef~bB3MA&+Is2by{ltQ(zNqz{So17Ga?H#1kW?_gc;~o!(vtba2T= z+qx}CWr|L0s-dgg)q4wUr{ysPt*I|6);lkGmG6*bYen2m4}Ui+D=|Ce zb8J>~ne;$6g?R?W-Y>etw^|$k(UusN9Sh@lUKk0ITEjtNa3kgG(^{|OM=cTn?AO(5 zJ;qnpOwdiLD@S;(vShVlg8l@O3L01sWS;`?OoXV1vo{(G;VGB|Fc<<`ZooJ~`u`Ug zjo-bgN#;VZy)u#{jbDiStIV|_gz^AUeV~kY9)!d15mZ1+rNx#^G6e_`WJe;I9)u7) zKM_`|75RYrs3`E1ntEpY--(=3OU0W;$sx6iuvwl(XZV?B#f=%V{KrT|MFv$pkkZRzWO)w}>Qann zYT?#j14~MmQ%`_&s}Ao&Rv&4;_ZNJDx{9T#_QR@?5S{_8qmuoW(VKOu$SWEb-y<14 zPn{N!CsYRc=&|(;avHcw8KqC~OExt#Tc^@nc0(G!R)Hlhdy)HB9y*4jCKdfkDl7me ziMv;Ja?0Hr4bxI0teDC#N1{>TCC+EQnqVE>K2DeXBrj;s9MwLC>YYsPnNdED0>uR- zrOD=5tR|rIH>W`>z?(Nm-u&Exf=uhEQ`6eTV^TV`U3cT!^oDiQnu>X8KhT7lE$_DgqKBv*IV7`$T-j@CKN;GLE5vO#RV+(d3@ ziYkV&Y=#ri6d)aoKWdvLN#KaEha;OSo%3AKH4~*BGQGI2B4cZXOMmZ?pMqf?zDVC| zD|>Jh&zqRv;J~1V*;X0X6PMTAzGd&=;BYr*Yo-{*H?zPZ`w`eK5paB(R_xs#HqXM> zsRvg1*{YW?@i1XI*i=0C{dn@oJp6Z`xfxeeMz7)eo>ABM%JkYwtN15Uo!iHcvh`9k-vupM_sZFMv zocHcW<7&zGFJYgwPlykO=c@Io8}BbygWIu>DS4mqt^%LZ&zrY^PmH}yT0Hbz*_o~y zpQg{Zx2a3X$E}AB<~N`(gLR0PnES2=g7q)wuJ0$fclGDdkGIdMYS}y4i>;fkp|8x3 zzE_(sh%cMhEy?c^v%f|@UA84(x*orteRh1P_}p5P`|H}R{uV0Wm{TbZu7)cyHRdNt z{r^!x`Ced0+7-q$kMjx9F4@&boKAg0>Ib0ACs%P=`)rCkY8&l9YnzkK%6;$4P<#-Y9 zl&i+gd7+g-cP~cu+qvYLjyiQsUZRL?ZV1U(+cF|NG1&)Mah7%nvb0T~sInza52K+= zDVP*dLi_r}iw~}Gr19=Wk$LQzJWUS1-X1NcWB23yoCz-NlX=?z;SC{3cZ6Y@Cbv$k zYz2i{zG_=7e+Qr~afn^rYH zvMu@&BDb{Mu$xbJBwkv?5mJ2Ea4?KMDtVlB#??W{g|TESF9GY7dVxKqQL`3#GOy9E z>^I*gAHp>IF~SN>ATrB3-k+&RJ5(DJs1oZ7bl3%QF{3>zUXKw{Aj~WvB$I0>*z`oG zbxsd;L$7r8=fJ| z>j+X)BcakF3g7)Ku4!aO^-|I+*}=oz zPvUBAx#O_;K9 zwUNB41>39+%A-f$o<4$^tu(%lt{J9LAx7tVEvRiXEY08G#%-MkN|9ZEh1x<}FIZK9 zP0hvCfGKP8i(L7GiKa*E5?(MKj6r%<&AZV433fOng57wYPeEW^mLKm-KR0};{>Sp+{;Q%==cWE zg{=-ylWlQ%uu`;B=|JQgLI-Aa(`6u>TOH^hr1&-S1&{g1*042(_z8jZ^VA5#JUpeC za?rElPR^~O_vH}it3d8+B+zN`SpPV>0OiVKj8x9etYxs5cA09uhyE|cCpcoTF1LG2 zxQap)`O6!$B5?zgct?t>;qmDRWyM~?Uh80T30V^i^hVSEsX zRqhN4|1ziz%gN<$>}*Fh0?ovMHtbjlO8BW~pbG0w1aJ6x>n?(-1sY;B!)ah9GVA}9IL%322Odi z0QIM_c-)&SJnRvM_lZe9yvdtkJPz1}|D04;TZuQS%&e+o-KuUBwgRT`ZXtEO2~a4c z>9(N7Vx#0bfgZp8lzG%;c(SM;fGyfgB0U+_7ZPQr|4ty3NBgfV=7~RqQ&ky^mVm$$ zX3(D~E?q0tk{01soH>^dr5~|pB3br$2_?}?l{(dEOxmU}KT3$0XG8l{76sRJtS60v zY@O$r|Ct7)tTJIh?Ds}XSm|zasMBZoCwVKFi>mPtmq_RvkSfL_X|guKey(5Td<~%r zbfoDn>$D$|KYuJD9F8(q-XxJ?jXo)hpKNVacGNxKD4#)fiwH78{wz~PT#*2oV7q~n zA+Yo&(`5gvBNvDyPMpySn@TGFUd%K|i8vC16vb89dL`-UU#w5A2Er=-Pp^`7F|=6N z7iEhA9ZPh%Bi4j#D_RJx z;O=z*3Mv;e2wz~;KFUDQ*^CAffqmEug(-^B`+SYFw~b>R1@9_a-9(BDGh0)$(T7|Do%amVc z6H5+?TfHfYKE~;i(jbk(>HuUM+N{WU;V+pWqY2Fq#b*1;R)(JbJ=*o!UDjfF}s7U}-|LL4w`_*VIdl5LfCB#Ma`CsB8d0rOPe42eZE`6;z zvt`5&(sM{Z&fj5{kGjZGv19+Ail2UJXwC!d=Aq?%|6^SKJN&E5W4BABl*{|&T&V7j za?7Yua^fb`hZ(mw6oZfYU*ba^?Gk1|ERiFjEmJ~^0`n|4mn&Te?*GFBBKX@NSz8^x zI7z;;y&R7K8=SCz#R9_r1UwXN#EVn_TqocoCX&iA5Fy09$h=BN4x@0j8(!FnKjcq1B(=y2q1MEiFDm3!R+7k?P+ zml20>LzS(=Mgq4Htkz=DnEO$Fyse}g4vA) zZ&zTpi$0Z1Gwgf>65@&x9@CQ4;TUfmoj8UD;YXf16gO9Qi=s)-o(yYTeYT$+lQkc&X@2^ z^&QvznSARkvxzBHiHc94MR8b*30?_CyCcJgI%f*jsv>)~ZVfaR^nRp8WvNq|?A3rs zR{CV%k}1gREt_C^SFaK}3C-RKS*;I0S4)NIy?+fM=0G`dC1Gpxq@T|(7;cq;C}y(o z;M0q0r1e)QRKgR(&M4wg@*MF*d6*+20f9F6b>PT)5C1C*vp76FObJ0Xb^#~@s_-0K zi3sbAwZ!_vXp`(9MN4PA4RT)PcabS^$<+WlI^0rzIkJ?Z!l?Vbc5#C28s*dXM^wCA%ti7Snj9EryN_Lm z%AO#@L9Yi!1nVED{5nU=~%!MK=oDFnjBk z^k{lygtJo@L^-#e_~c}q7wU0Koq1H6IWtS&Jf{s11qV*4LI&z;fWzfYf z)TN$!t(|jrxoqG>sV$NKsvgLOH*fJ~X_w=z_PO4s+Z)7R1xoiSJ%JN~a1XyB$?0qa ztTeF4R!IG|+EH{?mvis0B~=)kh`&Ve(5QdJ0Lh0QRmh{Qpf|2nF4OHQ*ochi7+inI^?3z7@QYFZ>v+`?DNx`4%qB0IG0U1sXDpjR#GTvP8hVw| z_TDBb7Y7}U>M<}LW$dHNo{!m@=bv6rRny+41!PgA=&LCe9X}YgF~uuB?iMGe={DEe ztJ8~i>r4YmC{%aQuQ`|<2=@4E8bY1y#^WB*w8#@TLjz)+ym@~OdkQo)G&Q?`#jg36zyQ1P#mEg^gq=@flg_}8odn_!Ua{O~7E zH^MMxUiS`IHN4L=?5eR~?u+|Kr|a|xXmd`WSK_LbL>xK(w3fv_U}b-#<91R|epP$HzzJ^l`8 zwj4z|!emy_P?`ate5W)B-3Wh#7L!&iQ11-Yz6*fKjdrMAigZSC=ZD+eI}1QbQ^nOM z3SIvvp<94f&ZqJpAB@3-o@3%tffkynHPa%p$*=pvJ7oi<&nUcFN>8zEGGV&}Sx|@s z1Ugn3){%0e?NfX6xDxHB@|a0=U~wArQ>cig*DgE$u}U4dXl>)q0*$%Ci9MqcQz&rg z1npCI-J>DbN}+8o3O(6N;lvf=0ytS?g+94jzpE!)R%3?u$Wv~mvx$fOB?)JtUJxoJ z2fw0nn{hF8!?ExyY^#O7lGI&;rTd`Y1DPNg3mDkD4{GR>`MxDE0dmzm@?m`l5P$ox zC7{D%DZO&7o-Q^apO*`(l5ytadwd$nlVA!l^u0so0ou!dEAYm<9H+M_my67qeSWz< zBMIw7-EM?*oiAK3U2Yev2LthFGaEepKv1O)?L6{cLwgd>Xk*SdupINg7$vN`XgF5a?02`|-=B5YTq8S%l^o>&}UkjrRw?ufj{G z`Gr2?s`zG^jNAo~gCh)Y-TBJ>>ZRYz}MC2|v&cA=N`F)*?j;tI-wr2{`F zUHTa<`+__k3+C|2X4DO0a?-0FoN3b5gcnkXbpQ)u4`y(7`WNwgNji#8t2&k5P4-XH z>#FP!XK{;w-ulOMsW5IltRIrBc$HJwL=jTrT@#g=iv z6)z{%B%A72KrTSZ5Mrc*Y`tv%)7)=Fm$T}aGWUeH6$8q=-I=i~ObodaL+IE^AV2v7gdEjQGf zlRvfQQNuZ!vTMq5+AoTY)5X`^$v*oQIr$5}sMVRdh-idDM9m3NEXF+bsbft*ge;pG zJV;O#9LU=Eyhhqjk3BO4g_22B&`b+ysgCWKv3+lI4|~y|`2pnT?!fV9yZkyap)Poc z&K6pgz zuD@n47#y;Y=pH{rLqQRe--P@rc<=}`2HP-Sxf$r0{5>qdO**<7z#T-VbodighZW;9 z11Ueje>Hu2PjC4En6N=Dnmq2)qV~ZMp16HN2sMN#SjnebnYgR^w@pv6Td*KwX#s&mp!HT|!FX*zj!R3bC6x#eW3>w`LAwSQod#!s}`%F}8%^yP!uBTGYI0(IG3MZsg=)PJznKuI6Ww;f&Z4 zK7LwF_#d7#lYm4U+w6gGvc;=z_z){E6H)z8Qbjt@9;q z{ivc~=ds=YL8KF{jG?)D!IrJuHZnd$x&6n83eUTh?yK5~&?k8Ujglp zlRr|@uqK;QR!E8vpAVN9?%_N`FapD-``YMuId}8wH;I>JD6a&JW69@Pg2g2GiDGOD zS+jv0+d`(+(4XStxL&RMp+7Cfz`!Qgx%!d@BTCWzBz`>`p}WN3pHlSRrbcNo-5ANJ zv07S7Y%3lQmHw^rc}WJVX#lq%pwHGYb4xW9x+5SE!)>IJ)v>5q13>Svv3EVGSzYZ{ zXL_aPm5-%w1tNn~AqKk^U!M4Xj+`Up+V&q{m3@D!;l@3wzoZcC&2!b{7m8$l@G55Z z*@hqDMS+;XvmRJGg=;tQDU3&GVu9NwTJ(w53{Lud+hDJwi#^&QlOtkHBl|*e_az}X zJt}_up_Oyh%-PjJ*r-P25obJIWfk5tociFr&6RxktNzQ8q>^NTP;(;dZa3?;*0S>w zkqyqw!#p&H-DLXusW^2dr|G_{LMl^~>EYQdGAC`ow$dXKM6_qk@$iivk{s&2TWwNM;?RlH#^-wt>>snAtD0|1@X+QG zv7iITo-vP>c8TJOk8iX6k||Z?+J-*#h4z~Z)xOMy%^VP{tQZ#R4Fk)1rfAff<2e1& zLZ?D4&NvV%+9no4*|Yiu47KU}Q$0XcE@og34T*9bvO?!UZqGBDw&-uIO%KD_Fj|i# zqoq~}pdULp?97y6j)1=o1p z9mFEqtCuX4oK+f@^VMEa@U!LjeXVESvbZ1WG+mBgj!;T#6)&o!SkPISh~;MtX)2h6 zBONkxd!IUAGVi$Fsf?4Yswq5%!1@!_V-|0X&DPT{_i*tNwg&;uQs^%{)bn7Sf3^T% zC_Cy}zSgz4)kj1Kv!397so^{z*Dl^US)1~cMLi-LWOOXC!0)$7cm`{D^7NGAmMy5B zY~rS<}Dj&ZAcw5J`kaIkVHnRd(E@~s#LnT`GAvEfq{`sq1 zHa*}e8zxO~l_?YMW2ZYYdU-iF6#94%pmEgqS1wT?s-iK0Zq zx*8kGUoc!eQ%9kBgL?4QY>W5|Lv@|=on@&vSBKUQyd~HrTntY>iKF*x|JtrLVa%v3 z@3_=D#8(~dPetOTnb(q6#`h(XaCFtKLGbfFlxy*jsPQ%i8SfRd)9-9S&uaq0{gM(- zuaQ$xLfcF`L+3|cgT3X@>Z>Hskf@kh9K~RDkbLR;TOiB{SUW-bd4X{b{R&4M_^ljm zcZMo7Xwdp^=F%;|>|@O&o^a^kvfb(xeOWalSDF0-9J`z>!?yo|`|*u@#hh|=Y$f~= z($IIJzfaSw4s7oK6jy&_i6gIPgy#*Mgv$x{Sx%@)--9$mZd!_g>2B%)yHd1i`7@8< z{^s`5LVgEv?Z;UcUp@~{+y*SAa$Wl#OT;6lJoeVeF3W*p`^6yjf=C`f0#T}2)NzYJ z?(>+l2znG8k}ic=#us}ong@aHLF0vSe|f&_PVgl631iYR>`aWf_dELdQlBXOGA3i2 z*ezT5En>|}+m1L;IRNoe?j+(Z31v>&1@;sLX6CkuG>u+@tFdgjPuRKqrYDITer6?+ zP$f?(q5U8v#6iyQ_W`fgnGLPzZ8B+qkjRT+S;Al5X0p!IL@OX*N$?(NzJQ2Rx~Di~ zwg)m_#)>yh1wjwkr`_8pqY}}#+&(Od(DdpTzzIk`ESNot|E%NLfVkDuPsY;I zo&U;QOEs1frUd;exvX5wb6u9Tcu5swJn!lWP#|6kZx@S3x69pHoNr_hOO?sTKAki$ z$*ny3LWEwVsRSh?h}~zuQDIMkYE?_J+F~)-z^MY7SKXu?eLuk#4y+Mo&SllPF^-hI zR~bXt;4U9wi|->KnOb7l#c>N2WQe^G#h){^;=z(;UTHttj%L82?!KZlcQG;*r6Kj1 z#!#FE*z3UN)0*E^6}Kl-CtG|~jV^>ZyA$?Nl$+n9$aIcTYal%t4|4uFUl(G#c`-h~w0CB}O%`V$Now%25Al%aS{+{ZsU-H#@I9Rxs3i-%!XW7K_gbl4&y zbI|rv+kt(et!1n{ZP1tw3qwt!CL$okS}JWnP89)5MbOGwIno$c7f>-!(4Q_KSqE{< zwmp!`n-DAVWxH!9)6)ExO?c?xHIH8c$$;9UYsm-5GDVl3;L5ttf<5$WUQ9~M%KXB@ z=(g#PPSYafOdQY0vRho9*=HgzCFvMwKFX7Oc~uzJN`BV))MspXPQOLa@uo)@qGfX1~|4%{URf?wv{HMP{4XOiRmvC`8 z26zqEv%#;4RxSpFb=kYU&wplfU-qlTfhSRJSz~ZrF{M0Ig1b8v1c;VWucvAINk-wp zTsP*Kj=XUo&8*rHB_G9rXdiuGDis0ObBh9Ew^!j{#ucP-Y8gmiI(ES}dP5a5vv0mk znwm8vccg_jpRu%E!<+s4IIMGVe_-8!_0)_(?}h3kD5Cv=idpm#KLdhSasr|d-W=GQ zSxJJRUF_%B2@6|nY3R0;)dNi%(LmI~`cC&-_T&hz{`O-BMKA`#YWK$%z1%}(ArzlR z;;#ifJ$rY34Ufu3msnU24T$Ne=a@!A&ScitQwW8YFN?sRw@W|XP})n~AFVv0zWg|? zdK)XKGX+*4#eF@m3^p^6+^5vS^*3KuY=?j?sZP~f@%x+|UVv=?VfY0uZlT-aLvN*; zrPJXS1>x++i@x@_@~47@Gcmx_FbkP9W^Dq!$AIcqUE=hEbm{O5o9r_ll;W0#L;1-0 z@idyMUZuT>;(m^Lwaj#?OZ=jNfWyW5Vm3wa%vqu75|IZa!1`(YFLLbj_|Q}(r7mBp z!2v1T50*)N5W53nN^HtisWA9Wob!;nn;7)NQk=(p-XQ1(3HZR*f%;Y%meE)|A%m-=k^i^GHV6AHJzuK4IlKcD6$5KBE4CK;i|D4!lFxtl5; zFm#O6$QxCm=L&eJjily%poVrlRY0}eMGP;+e!Zcx%C^}bxfMI1*<NB{J&YckLiO&TnZ1jV-D;eDe^f@!eu@v{SljeM0{Cp8uaRF1DO|C&>JQJF z*f?ZCV$B9`FfJSoT}A>RAlPjF=YT-U$Q-BL|Ix=e1=ry~TR*mK`vi?`Hb!GNwsn#; zHXGY^W9u|#W7{@QlKY?U<=&_7ZLeATeb1UTzYR)Nx-rP*vf4#>!>ACo%T(2 zJBF~)l_+EGnyGlg>Edw8yqQKyJy_8k|0JYbS8q-b6O7VWmiTx@>*34KlLfh2Dyp`+ zU}n9xQF;`LEJ%FA{dajN)|t^!a;ZW2)~;cF_^YmUM!|-5tcDyR;cgx;a+g(N<0h9W zJ`eBu3;F7t+J$?#rGfgd!}L(E+YelL(ot)pA)lAeIySXxPO*oyeFF0CG(wiP(ID_D zZ4{Nvq*?D2v$a?edAAW1Dq(8o?woz6WoR-#XZHH{2X$2B(IFREq}Us$@?7Kginx1a z=Ky2}7sksnV%*t+Zd}cNy1)qt-w!7Xb*)zK#Jb9o0CRh05&v{lE!IFeA zPxLfEOT$uwB20b<>>Y19odSz(mX$CKR$JpUmo>lrGD!1AZEZ=>p_tW7|8+F6n@V%Z zD5OrB)&=D{aM+S)^Lf{gl_=q5Po|&+>uh}ntfo15Ec;VFNUjuE@%7ieQQ|4fVH2l( z{c9zo{rTiC<|gR)h}j;G7(`3WQY03bkkeh(aOD7WULC)Fg*8oC&M!~*<&C`hy!^C4 z9Q?kzrd$o7S3HyXDX*fMyUEENyrCoI|0f^83YuFJQay7(7KOCa!}`N8D8$ z%yYh^Uo@vAviB{SsUkxBui-b@ZB85t!8A z<}raE65Uv=vCj#sWQWOn%74>WJ@P_;_Za2mG6v2{va)CYWSYEW2HU zFioXm4`@h;+~o&hNd?So>sxw)QTGHj!g!^T=Kk2on^hyiolbsda(*$cuGaY3t(>S9 zz=3WVim;KQhQh)``&8}rlBZuY(Hc4YgQe?c%w9FmQndVmSOYy{ZM^n|zb=AEHy|F7 zz#-(Z{@gWvwQ9t?ko%O|HMky&i6=IEIl~RjyWeC}>t8#L)ifWGqs&~t%XfO}{B7R~ z3>KGm-Zn2mM}gj@V)&n?T7IM6&lhe9hxAJ{`|j-8`Dc=z)I)PoW-FNyf@kyaCi=Ds zIZNFaOY0?}F@P?REXYR_!N`Yp;2&<}P{58Y;eMli7WZ_7#X1y=c?*ELAUuR~%j;J& zMEGnlDGn;JX6rN24za1HdW4)JbWUpT!nXsu^$ z_+Wt-0tx*P3$5&uZ6HZAWIL<8T5=N*2!gC5_4l36Ssqf3+iqR%W&P^^MY}` z`zDGQ_O}CEFkeZz;OS8daj^<_ayQ20il>iHp5j5p?Y*M6QuD(R^Ah;W-q>z#rE$=w z2V6$?PrDq2nc!4|%Ur9qOiu0%Mv&P{EbLK zyKl(gBiWWqMxsKNT&-2oi;JMeestn#L_S<*L4i{+?|0;e?pWxCBKskC`{Bw;#}aTN zxui1QVgaDQ3>Oi*KlzQ2(=5BP)n5+Hra(2~&V*NFD8LRtD4k>RWD&s_so2@X)pLyw z6Z!2TmIxE;k#f}JBt@|qxfzldWPtOFl@;Z$GlOSGz{@FEcX#0A{7&ol>eM#mRYm7R z1gT><91hiFW#@04J+ran#zK6pdN>-CzX85@wcRRP$mNlnx|xFR!U8 zj9cap@$lLM@mLp=(827N$a4BoHt{p(W;5MvBYql-DCTsuc3Rq+m%zCiW(Wd9SC-Vj z*cQn7Dt2E<8)&}6tIQ_0F}M-ZfFOU{Sa<*1JSwvM?EN#uDK+;zjF!g?yWC}68S{pO zE+Q7;q=$hT52&5;{y}N20GQ4dN!C7L{@MyJANfUj z*>Ik02f%nPFf0xur{4hB)k=f)Io za@V@@`;#C>R=P08+47`9uxcK1cZv_4)D0FVIPDm|BBMH+pgAs65%eiVe*MTBbXpkl zuS{?K-`m2vOI08zs74HPuuFs`B1kN6iE*^i#!9S zd1^2Ig|Xi4jmSdzPwji^ntEV!f6N{|s0`P$N$vaAME0m`F*4P99sGRRT_A{W(mOzi zqY&Af0S|=5#i`)Z^mWNC2u` zk&5h-{EVhkL<8dBL(%FK(D?`Jk z=9PQF)cZ|!%g$|HXgsg+yjP^xkpMJX!55yD9D)s!FYiKIl5dwH=THVGLHc-eRTqz+ z|1Nlu`uzak5&VzHY%9ob;HWk6qXzrBwkT<3KxeBj62VPsqLaqBFC>nhJ8HzF_R>J;$wg8EHjtPnVm-kk z{`V7o>PvFp1qE0i#>9PbP5@SO>vuR9#ISmecOaYvU|s&B(oW01ow8S3aMxc(m~qy| zmM5|u1bWFQBTPdPcT?{!iI7R@p4Ms$V5*Yguih+&2XK>}DT5nC-zY08N&IEI2`et! zWtv`4+pz|ukJEl|#Jx8=rgQlJ5D4HM$U=gmowiduK|gmgWaI@djXQ+Fc|%pYZ2HvplaY`gI+Mv*F>_$&Bg1GF87UsCd8n z_G`U8xMX%vW^es#_?gugj{fD5QkpY_F#oG=6mz#KQH$kS41*xK{&fDfZSJ{I`@;$h zn;nSw_2~q;pc~ATlawJlfMRihfT6EQ^lN9!;oA9PqL_oIUb0|dzc{j+e-hCujSQ`I z?JjJw5C?%QVqR<4KV-z-N8gpH9;P$>T0@!A?59|Mma%tF&~=0)8{IXAThA?Dg`+~Q zWR+97C{G9=*T@aELUL9E26VSWK1fupYO_+71|g~$T5rxT*1`p9 zhA_yuY45lkDNn89#wD3N11(A|;gjlYPl*&LIgy}-7V>)h>+$LI8AXDDZCY=kB8U}l zfgs+{G~h^eM-*v#HT=&m2ourZI;ilx`Lho$fS>}8#gASyv-Nz=uH*hq`QI7JX4Hx+ z&BgHB(A>--ADe)qt}>KICLj2iGUZHmPii3iPW|5Kw_$d6$zW&T!Px=nDZ&*r%ZFls zrUQR%3fN6cfQR*Mhz_smUPtl_^+}@Z&?5Oej3>@!{*!C?33()AWhe!lHL~<({F~{w zi!r2W(*N%3_>Y$YSVDgcJD40NSMQ&F)(#Td9Qqd!olJ3J7tq&p6?6>B!_XuL-x)nt z=5$6j1ybOPosJb^gOPVs^eRr$Y%aexeb|Q8S5GkSH{BrZ>eq)(>*_oS?O;JgGX#X) zIE**rvuh!+eo;zhK?qz-aZax3+ivi~`0Lj2f|CaXZi|0xvi851z1%sSCE)QdRR;;| zbx;DKLVVs|vp;7ySY-rQQ=-$J(01z8wS1JS) z{&f3buEl7W3CEC2JteZVLb+P{6(ZTOTQK>TP5!a$7Amw!2v9$k)z=WeCZVQdu%mz6 zy2SY0ME;j%EQ_f-spY0LHI82MkFxhU=H!t?Jakbx>*0qp1d)N^5ou(mng<#F`3Tw9 z^=pa?RAtx=CF>Y&-|80Xuzm=e>5mhEEc#0E=Q6LEI2e@+3P zb{pI5!`*y&{f1M_MSA5@!+GA-c#(d0Fi}ZD*W!q9?7TDjN|C=~gI6@lo`yJ)+swQ9 z%5?nBPP9Wtg6woPepCh(9qy2+@>mKQdj0jpTR%1{Gb=R3iOA1Jjb zlXvOMi`147pE~)*K}8WVMMu+2%|i^)t~`I;zmy~k7w0O9 zO73jONCmFr-~JnB--LtsuI_sY-~B#u`I#Gg^#C)wU_ZAQaY-0jzRdX9f-036pE?7c zn*5j>;V|FoB&TZYn&q5T?^$*LTQwyyM+hT+~tmluj7+*+?+SD*Xqoic7l%BG4 zwN-4F(=rj$M5mZ+&aQG?hY!JBfn^n|MLC$lTfMqX&V1<(=F#f@@0||M7x~{hTfYCz z!YWjMl(q1Y)&903EZimbjw9A$(4>*rHyVZ;x=7ay+bM&WPRyzdiWmpJ~0p*XH;`>CeaqqsVw2GN3U+=Bo)Egnw<98W4qx zC4=V9!`Qn8tj_#ymXu~D<=kAL?Pq+B?6@RgG=^4sFD6DcjgnFMk=OB!4CG4N-W&c!6XHBXyYNj|$jo4S&z5nyVlQl-5O+5DVM%^B!-{z@* z52p`B-wCi{iqBNPHsOicupeGBDi( zIl0f_GRPw%EoWG3KaU}p)UuQOAxZttm$cHDYf#K3^UYA02_}U6x2EK>5rs6R#-k_v%cqBK zQ#J#h2~01dTbskyP-0VM7VOR_D+S_UUVw?N_1=^ST8TB+)ZkkCi(X+gJ}@w+zm`oX?dM9MOkn67v(tmW_FjNS@Wx=6BfHdq%7 ztiNTC-6+rSy;1f>FfkuQlnTlBe$Qv@gGTG{tU0b#_Lg zY48GaojW#;xB8AqrT%R^Fo&ewC2`q?^zF8BQ^D$k+FA;|Oe@x?dCj0)av4`y8lt!E zvYhNMUKOfxbEc*d+aU7ei)pt11~U@-FZ@xB=#Va(hq6isgI>fJik5-VUb~iUtu7=) z*z!jyqKQ;|+N=V|mj>=p)*ACvDQ^qZNZ#7_lGDeFBB@BbEJvNsD|&}lx{Vh|*Fv18 zn17|%>QSl%d+_itVic2daarHwJS7_6#f{t1Yn?y+rruo{l%S|WgmX}ISR!%&UhhK*3M+)EfD;@kSl9 z_wfDAdeABe>>F9I-sFJKQmtOIAvR}n;9_HDnaio%rgV*%h3RU~I*Mv4 zc5YOK6GgnBr`_aY=Fq?W-|I>BHdEW+Z*?MFd=rPoIyI}x;W1tmUG{iX(uGvAJ~4TZ z>$Ey@_+0r9uu{c=?SoTOZTeaj#LH}~!6lMV=g^bt8NMGu+Av}dki?EamLc<2sO%U+ z+adEfy^(}OzXw#Nlx-6@P1q#q+u|Q>hE_hJmX`WaYD9n8HD`5$EJ2%L=^?=mfjW9hEfrpae| zMEX5ONa{(&*;e)YEuRAfnlzsbB%Ylx8=uqqz2%s(ka(200=uX-O`m&P$@?Gt030mG zFMG^!NL7djfxM%c%f8pb;T~sP5GGMfnV1&5>k`gwK#Tp@i%bp{32l*}6qR@Q3i-M?gipj}z6@Rfm>!{~h=Sgi;L8gez01o$;*?BUJsT~F=e0w8oFNON!4y1( zG@ABPjwBf>@5#l#6$Q{YK^w-McueB&vpYFiXXp)dZ{t>6ILlZ=-PIPooHaI@%>M1D zeld}b&1E~+`Rtz5(EZER!(3BZ;Ev6Y2rIXBL(8G9U5ztP{9YY!Gima6R!V6^`}&iU z+}y)IJf^G9vf#{3oDxpNQ|cNx#LPY61He?B<(MBfj*(%9F5Ofa3ic%!h6V~ZRvJd#$^Kz&l zR#lLoWy_H*FCH(!ejd*(zrLfsbH@n}$v>{iIY@k=bn^yJq#pW=yY7jq|A)T)ioAWp zAp#qYq{mrPodtA0q!xyCMlv-ZsM<0yjcsNy$(e~D_D63$7U$d%tZG@ z298Wrr12O)_SY2*=j4E8!XtG)-j%g&Vcp@VI%=2X;CRfbp}HxnugpN>juDx^^e}g) zg5k4X*^U~@HZXz!u40>Yr81Lkf&=zZ&nzF<61|fLXP5K3-PcLW1J=dpfRSz>|1{5< z4>8w@SjI=Rd+COK#RcR;cigjkI|={jJ;R4Pp*cye{Gpoooaf~|GG7@S>UT!epnY0B ziPD>VP)0>3YFrV44NtTIinRW1i;S;+d2Zlo$2v_f0EKswca+j&G_nUWvVn~wyh$oDU4Vi+y*xUD$Ki3<%0@Z%tvRHbEGkn-a zn+;rxw?Sa8vU3@k34=@-8S#aXA)8r7tI$fRfo2Gk6pjBO#-S)So@xm*3k-`T8iA%Z zel-$wWrXO5(XpEb0le>c{JhA&lxX6;ske*(iReMZ z-FkGnsN_|Kl1h{MK0;3R^8ta;v&mvo>U_|*l7$)}Vs>1XBRIdS9v#C*%&42OFVK9EqvAp1=8&B|=MP;2i-&4rIYv4b?A z?0V(8FpKx&UBf?AA8MKW$J{)XRI=-0f^ym<^Nu03*EVy1z;=Aq59I1%ghdPne525M z%3a2eU)yx!AH_adbAM7RyrQ_n2f*evNo;!;LOiRjl}=CNY`P(_A})VVll?`OFx1}e zThffSd!Nsu9Qko9mHfgYsIt9R;0{)ZqFp6BZ#GgkOr{9&lU6aCbN{-(4Xq_HGk9=1>wf2XJnsv52jIGRf>P{vr6z~}mT@~ql` zDQO)z4Vl^*_Vpx1J{NaFvRJI19;OO`*!7T?SxJxP{*R{f`MN+Sj0G)j`@a&WrM0*+ zsM2$d>G$iY7$hb1DuJY{dz-ez*-uyg)J4xgWxGHmhhO}u8oU4M5-g^4lMEWB zDL=@V#Y2O77f~=8OBM&m3C)OK7U0+n>ke@e%J;3_$nII+z%xfj0UOgI0bkc}ebxP-jwjnPOu3g$@x z8>IvPDFdT=+HU!=_eqaeHpCnBEsBpq-4vg~`Qn4)Jx204GRm1l>?VwHwURZRX2UJA zt}5mWXs1Bi{ddegp@`MCVg}0$DSd0zuJlPij|GRVd&n zN`kxs=i;b?y1(K7LjwM<1sU+w`AZA}^7_-gANK2YqagPycO3oez6=6FCtzm@f;QmT VHSmAeAz+Nbr~g;~AM5{({{t&wM;!nF literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/gx4000.webp b/themes/linear-es-de/system/systemart/gx4000.webp new file mode 100644 index 0000000000000000000000000000000000000000..da1e7366ed17429898f65ddf24dae1a2bb3188b0 GIT binary patch literal 18610 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 N0000000000000E~aO(g7 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/intellivision.webp b/themes/linear-es-de/system/systemart/intellivision.webp new file mode 100644 index 0000000000000000000000000000000000000000..358dc965650613cda62ea2cfdcd21390e509e0a6 GIT binary patch literal 22302 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/j2me.webp b/themes/linear-es-de/system/systemart/j2me.webp new file mode 100644 index 0000000000000000000000000000000000000000..ae831241902d9a4bc1c948853ef42d20ffb5c946 GIT binary patch literal 16116 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 pM__WFtZQ-~0F3i?9FXCv{}-Oco-Y6Z literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/kodi.webp b/themes/linear-es-de/system/systemart/kodi.webp new file mode 100644 index 0000000000000000000000000000000000000000..078a6d92db6e972a460dfc6a1b6ab96fb8bca221 GIT binary patch literal 12044 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 JdAGl_{{_&g<@f*q literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/laserdisc.webp b/themes/linear-es-de/system/systemart/laserdisc.webp new file mode 100644 index 0000000000000000000000000000000000000000..5395739a51bd4b6197b4d63ef881b458e18cbcaf GIT binary patch literal 18580 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 L0000000000(rpVm literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/lcdgames.webp b/themes/linear-es-de/system/systemart/lcdgames.webp new file mode 100644 index 0000000000000000000000000000000000000000..11f85db96dea8fa587ff48e81b3ba24c5aaa2c10 GIT binary patch literal 38710 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 z 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 zIseX>0G#J000p`^SM9(00000000000000000ch}w*UYD literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/lutris.webp b/themes/linear-es-de/system/systemart/lutris.webp new file mode 100644 index 0000000000000000000000000000000000000000..e297dfd06780f711dec915a3721303e6ee1cf510 GIT binary patch literal 12002 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/lutro.webp b/themes/linear-es-de/system/systemart/lutro.webp new file mode 100644 index 0000000000000000000000000000000000000000..5fcb9cd10e6a4013fb73746da61048b0f301f0d1 GIT binary patch literal 19114 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 Q0000000000000000J+YbeEnkq{D+&jtOw1c2sR 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 F004Mgx(5IN literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/mame.webp b/themes/linear-es-de/system/systemart/mame.webp new file mode 100644 index 0000000000000000000000000000000000000000..854c9e2f84bca60f92fe60f7cf2005329f5c2450 GIT binary patch literal 46000 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 f00gh~IsgCw96!}T00000000000000000000z*yV( literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/mario.webp b/themes/linear-es-de/system/systemart/mario.webp new file mode 100644 index 0000000000000000000000000000000000000000..1e4cb369f0677e338f1828bdd2bcfcb30617bd83 GIT binary patch literal 26610 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 XlHdRQkMIBfL*M`a0000000000!AY*n literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/mastersystem.webp b/themes/linear-es-de/system/systemart/mastersystem.webp new file mode 100644 index 0000000000000000000000000000000000000000..330fa3aca9a3369777095ad1abb8b8503d85c461 GIT binary patch literal 21882 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 g02CkfP(T1cf7Ivz0000000000000000000006R;^F#rGn literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/megacd.webp b/themes/linear-es-de/system/systemart/megacd.webp new file mode 100644 index 0000000000000000000000000000000000000000..967a9283f90d2a14875d8844060a9ad0559f804a GIT binary patch literal 24642 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 f8VCRoUfP%dO#jsA00000000000000000000(J-lp literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/megacdjp.webp b/themes/linear-es-de/system/systemart/megacdjp.webp new file mode 100644 index 0000000000000000000000000000000000000000..72d2cd09723302f710d700d4d5181920b4700e18 GIT binary patch literal 24428 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/megadrive.webp b/themes/linear-es-de/system/systemart/megadrive.webp new file mode 100644 index 0000000000000000000000000000000000000000..e2bd9ac56337bba185cd0f1a718e82ec068363c0 GIT binary patch literal 27786 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/megadrivejp.webp b/themes/linear-es-de/system/systemart/megadrivejp.webp new file mode 100644 index 0000000000000000000000000000000000000000..4007cb112dd08ef2532258766118c17beba0b4d9 GIT binary patch literal 25754 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 TKmY&$000000000000000R2Ejo literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/megaduck.webp b/themes/linear-es-de/system/systemart/megaduck.webp new file mode 100644 index 0000000000000000000000000000000000000000..fd741bf064694e263d009c85c91201edeb939e50 GIT binary patch literal 23482 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
    5-gQwxc*kMG|tPlU<@(S0kiv$=Gex9FdVp&~6Hv zUjc**SQ*w0q|hvrWM+QCg1idChI5{xIfd&_7uz2#nZz4CMrt7IEJS#5{Utg@yaBbB zv?Z_L@+o?G1t;Olm6LxsV^@0okP%0qru3{42ux~W!YfUIfaHgqz@oe^#|K_B zPP?AoMG+;ddUpXn6&VFidDl=|s4`4LL9u<`R#4*1F8lUhWv6oxu91pI5Dc(afl~hIoV0zkAXLh;a=0JWF-ooM!hi7cqp-uP6isv*f{`mF z?;<*ZD%D3dat7Z!wJK|CkBa20o$A@0Ad%dP$)#nfKRx-GLM7M^otWt-PKB;#Lfk=$ zIJGEO-GuJ8svJ6`LMn6>AexvXal$j?RiZHD;|J{Ct|sb!j&V#MvkPNv9hl=_1`exj zI3tZ{X1`J~zgHF;K5|p`UnGlL4RABKd@qTC0wEiRPnBNGVS4#o%*qi&kN&niILCMv zk*~!XdW_dpTIhgY+oy^9{lWmJAtLNDBI=uvoT3c=w9iV}@4NjONJa;xn9eT_@nn{Z zV^d;f$1uNhN@y)>k93E-n>CsYMRe^p>t={6aLH#Fw5}6Umff3$kbo(>q~F_rM8WzA zVq~?Y)q6ub41d3ocLyHAcK^kx10}d#h+xUC;V%|Gj?7*W^%iTaaJ9Z7X4<7p#?l0- z#i^s9oyn_2kbl=nTV691+<%zgDVtydu>Ur&cgUZlaDvace(LL}h%g}yU!&qjmW~|u z^YSWprpo-TLn~ZkN-l(tmBIhKSy%9BFYg{dm%I6+*wHl}VqZl@H`9h(4~GF>fQ(y= z$XZ)Oy<8hOUX}lxOwD5KB{PKnkI8VuO<69-eiGB^>J%vutmAlO%c&ny-Kj^x!xX(< z0lk@1I%=k{gj2#{D1eRg2u_!SmKcv}ybhCx5~YYCKo)~SlH4w07h6~A^AQTYNHrMc-N~Ok{MKk z`g{a|Es7rYJFnS*U2swac-a2w zL?)8dzNr+WyO$*kiZZQmenA7^BN(``R2tEDhAVRCsj3&4yJR9CE;U9RA;*? zol(KhnpK{?enQ81F)$H8N1dPtx{g*(|51)$mE4t``XnEL?1J$~L3J@^tG>+-Q^?+Z z!uGO1hlBth1;h12)I`-*`u+DtR9xlPbG0ED82=Prk9WUMx$98D$)rynf1q`GR6nq} z`zqSLzMFI2%E-e|qM^S~7*fV)`oTmlHCu4Jlf&=K%g2UEFCPq~b+e4U64L!x5o5}! z_?l!zfeQ$;UALLSZs_F2N5orcO68iBtN4(42Oz`3Tg(Eb59Dbgth);fKQ}*L99xWQ zg)hOwC1}^X2Nqg7u4H&c`hVsSAQb7d zPe-7Tf71gIpfth5t6tzFvFH)h9_cLb%PRyIPAJH~=?N=w`P5tSUKV=**| z5BYmi{ca%4beIBA6k);dls-EOyL{;3MZaD>N>+h%ssBHaxk?Cft&NI)#gIM21ga03 ziSMASw3K2TV{^f$w|juuYr#(ek7(KYUX_(!scrlgLTxLe>=@@dE~59sNu8f^hT_k! zupTa=IAQ#VCT2(M= z-{0wq)NFyaWmdiJ+%#Dv9?pcz9-R?o!M6Ogd-@NkfpzbHi4Ur{dg zn$%?o7=*F6qVj2qEn81rk|df?x$-I= z8j8|8n9yG-Y()LIQlOGArA%>v)#G0yJt#5HBuFhto&7wr_e;?7>|{%=%cyKa%p^E# znPuq7a!l8$xr|kI42=kON5F{z?d{?zae&0U9mz(p*4`&Zdr>C1sUB3TwC0nx=~l9Krq5#X{=!F zTnX7bdN>1sWgY<3P7lbKvyzU&gk0)Ym5A((x6{vQlOJ%#|CC;Uq=J17`CN#Bfzs0- zx2A(j5@)oEgOR`A+lc0iJOqcL(k0r*a5lB?8{v9ceS3#a!J|FjMny*;vuEkcfsRPe z!xaQ>(%+UNA=Kdn$V0Q?^m!#DxFYAcIEoo^PftNgmWzzbn((_o??m&UjZ zof8)_t;$Of@a5-vT>Bl;D|y~I!z$PY$&QFk7^%&+)rO{1@^&c=L4=K|VCTEiscMsj zJxA!0Vu7!!7s7X9x^Z}%hJC>nLE3P`EmA#2wx=xoC_UuCFMd9`w=#|P(8m((-hppZ z0jvDQE9-c0y>(GI2F84+m-6-AmjC{nX>~97EZSp^h)`Yn=mmt$IxQauL0pptxX8&9 z48w4{-Hd-3Sq~?Y97F8gU^2Q*y?orE<$;3z$X=5r z5x}Ku*xYe@*EFwk)P9VVpI0|TZbATkVkOcYo@ZHjdkm2S2S+r@nTw9ZCetJ9-*Edhl=ym^@GP4#Of{YlZ!_f9dh^N(e zTVDcKng>>Po4U=vQ|H!GT2wk^TL(K3ngr9F0Q@P67PG-cn>8>4dvmmSPZ}h2ZKq%S zJX>P^4WYrn$RwA0<-lEPyd?t*v{)0*PY=a!erOjB>_XSZh!-r8k;ElU4EYyPA}O!% z!QoXTPFhp^s-FnHsy|R2sBHvmTp}!<%Kl5vJrhF0zl%bc69l=$?`K(FB$<@^3$Zh> zJvwMNOMuj-U{j0*ahUJIZ*AUB6y+?)bL*mX+Dhez;=J2lgl$%R*OadG503y581`fk zY;^nmvnMUA=5-N}*&I*c{onjsJ_+IDQC6?9|GOBMZ;NEtBDVK8mAz!Mi+)P0s({TC zYKC&gkMm??4o_`(%)m?j2mNzThm|qKv)7-Jx0i|3`OuTZ>$a7=z~cQTA^I)Da`%`YN)^5z2LnUq6?Y_%_S5y7NO%h%!!GphFa_4@Patt9LsWmEp^~uTys!AsnRD8(P zWy7+E<0vB-H8iG`IkqP2#$9{2kR`*ZlC0-mdkq7a>8$dxZ38daA^0$!q%{c28tCpQW;Iuh5?n!YkrbN$(Y$r^TGX$c(49FClyWA* z7&01Q{^Zdqiu7XWo{KVCj*igg?_-!AvN8<31)$(-h3;T=^4z`MxdZydij3*DTi3?^ z>sG)r?rWK*oNY_`Vka!~@3ieHl(>%5zs{-ZqEie~ zO&HiL>`WOqV&uKM?j|p1WVY2f)Fu`~dGt(O-zIv*b z8Fz;nM9RTp_%X$~Oor3-@-UD5ZXvWu;#k_Eg|?6WEUDPG_>Z$#VgHp4s3Kc*27!kj zq+6HfgKGi^;Dws_3zK8!>yS3p$^G4#%^(4dCe)KpuMUd05hDtG zqb+rE543_hU8d`c{B6aZayM)rTOotF3}XtlXh)tHbkEBQM2g@yJs|*2EJ2Lr>=U@C#5nYCG;ZZKhMq|nO?)Ou8l^89==5= zmI9DaV2R|l^ceyvA~)p+Pgl*tZk8BRyAa0whtcjZx%oH@EQG|{_-rdSJE&YF)t9FK z&Q0{j?9dY*282tf24A_d6qYf1tv^I`D4w)HRM&c|b~5D>wO+hnKtnF2dYIQ^4GxzpBp+5o8avHX?j z|3QBvY^}0uylzjntQ}2~u*w~(tR?(;vR%;Git`s_k#E=Bu{{*OFIhoN*yuI}4@m^$ z<}t;-)*f5T#Nq69)r>Un+G(4^#;Iz1x~hz2z8xIn72Z}AaT-Eo5zcoJ>`VNN(LusP zeki5A9Rmtb3NiQ8j&f^R+OIXuGw^54U;VnPxy19p89m>9ay^~>G`r;SXdFyiDG1xy z#?RQ%!_u6Aoc)!D$yE-$6-AgCSmZPdrmU}JGwpAX2}+l&+ZTvPfAWRqkjblBvnfMo zM0I^SE|zvC8D%Xz$$-Lx4Z3s1f%fcak(0IDi!}|F-8JaZtKPoH2!oteRn0@NB> zHmT_5jwyzOHHJE}UB9Y2x}qPO58ZxFQAIQ-bxyAGWu{O^FtqUO$#8GGv z=`#aEe>hOWOWWli@pS{=hy2t`zQ|JEZ>&SpoY%|kO=Kj<%p$O$gr))GRBJcU@J!wP z0cHjP!ENvt?rXI>=y>Np;##X})brK~ddIr_#w}OXpU0!)lwhp+an{*3|#nD1T7 zM^@v0R|gf5K83N6o4?q~mqaI`OCL2)H{%3_ex$e^luwQm<|#e|3(|obLsJTJC#k4# z<)ls)r$)UO%?o2ny~jaV%=@{C#!R6P{o^%Z%ozeIkFmn~x&wCYT4BX~nz;W$s9a0P zO)8Dp3?S|JF~@wQDc@(itu`74kN=!gly;~2i*TMGo%s|$NJm~WOr((7s$m$~IFoy0 z=x8Rz?jET4mR(+{Jq|)%*fqfA@mjiNf)r?Y=;82#fs#IH()~(`0d0Nb?QIdAp7yNm zqyXpl7g_p>={YbaM*;zK(1=aj=;Jh&b~FqZB%h3{eC^6b0$1;o`)A{L5>eFEba#w& zr=c6}SiWUIZHTJ8u;GxpwrhzOL!$WwyJ^w^#Aqr#t0dSmKynY|+W%1v*oo7bhqC{9 z&o3R3h4;Qg`?s? z&ptYuOf+|EG&zhXLI-unLyXKvGEzsy^ZX;DS;tke0;Awo!knm-$bdS^K2p}9@IxA3aRo-AqA@uvI-^2q@q{G2r{^$vva5sL`r^rZ z%^GDv(H06y?TQBgdo|HzjR>lE-8n zz>mp-4#u#hzh$E|p1dUjLt}IEHUzoJwl9}0Z`>#2&cEj8S46Y}SCWBquX%C9x(#gx z!rlWdL+Pw$L$*1$D0Ff9XOhSnxsht7S>DkW?I&ihp7rf!PgVAsUskyV!!_pM4C+v3 zwiklQNhqy=GzsR(qjp$-x89k8(5_%K3y!hEa;`=c%4&ojl=cB#{eK(l!snOLf^ zw625Eyn8>&pYYD0?Hh@`_;)^&=h_*umPs!MGDuQgy=a>yovWQhdNsHtjPXLtt-mNV zxKS}S@7>j-UEZ8xqVJtiQ%8kK_s!z!dN4l=DQT06?TVjJv)oL|$@qubxU7~AT`s1W z!MsQp%`}>nJ!IYe|FTp1Cx}UXxLce|{AZmX1hOvF8pBUIci)a`Xn}8w36)WD*s_q= zR>JopI)%WFlM9fSv^Bg>YXG~0wT!TKe9d>i5HE+z$!JO! z7G`&9WnJuPh!u!?wCYj{DS@VwcD!?$Pcog$0$K`vo4}7&%f6S#?B_->wqW0G9}C6n z=Z(^9l6I#CK@Be(a87|WbbgX!JdhWm+<9J^`;i)vl346iqEY{aLqCZq+acG+xuaRd%2HBY$@Lc}~a?v=7u(XQ4`NR+0D zt$XxFY~d~PXaU7twpqk^2s%t9TnTUHu@G|t)Nlnv#yeuC5`)7w$^V8&M6@RLXgSn% z@vL^odpvzg$0o%T@@P@vFTbj31_Ng!ch@?l!8NrfO@gvM_$H0Whh8zWq1Cj0j{zMd zi~Vawz|qi~zCW1R@A-SGr)CwoQf=0hA~S8%olFFSj(5Ts*{mFQWlsX7eOl7#@{v&y zsY2n{B$daKLmNyPZ>0C|{MuN&zz=n61;>&5E`-2axvtotp+Gl%fOdTbWQbS=fvPsS z4D5kXeQ0d40m9-7SJN5Z5c7jvItdo2qmRCK11@Fp**7hFk3gLNh|jy-&Ds?T2Je(5 zLK-;lepY^jUX|PR4X#cpYm79VfxUijq&GDdC?6Yeo#x$xeOY`3Ebj+h9!#i&U&7>)Q+M zzPnt@+-_`t!KzWyxFA*DJ{f&hS?)s}0(Y3>U8${?f34ig5b6(n(U=QGnzU#j%0cu( zI#V@MEx{jbDbLqjD-oo3_4SX9At1}w z{t8|ePHYyT18BQ{FBbPX2HCdsNfjAbYmsbxVuVKz;l;Uro4Q2NHCB5gY)e^svrNn( z_7k7o;Wl7oZK9NsCE6z?3xL1ex=nnkwU%BsYWhM4y6?pyX>OkOuBm$R@->a;(&{N*9f6;mkK7roj)3lwFCeK00{J<{AD)H$9Xb z$EzyQ1!*$0I|0cXD+kKpym7bpdu+$hzduky?cBS=Itr@t&)>lYtDpwg+|-9etJUf= zY6oJczlDlgUD%2={rTpp$)V%z&=WT_s%V(778EY~l5;S3K!+}2RkufaG2SXU2IV|K zp%x^=(PvZ|+`a3^J_bTvKw#BIZo#QX zz_wf8vww9*);jOZ*yGZX4bwwNQzV_P1HW)c}PvjTA=zT_U5Y-<>G5dFgl#cM#S`2W{CjUh4Hxu>*W? z=^SLH9Y)FS-=fE=>Ci$IBJD*3*BHDv@j?=XDz(t^DQ7&GMIT&bI%x?0~L1Uz(ExYD(ZFTL``+k{PcqsW|J$ys_Q9*fOXy7ckoX6nvs^)I%T% zdL}Inq*}^y1x`ZK#`Rw)eULT~BM&ip3)ut;tZ!MH&`-vcng-K>2SAT2>YyFpdZ#j@ z@2hUR$IpVYXz1z0#4Bf3VqkdAy--Jyn6##Hy`{Mudph+4bZk&AAa~W7)^FA7$ z$X)+Bi`{to2W^GW`)K&}y{a8&=q-3#wxT7Nn&pJ%P;Hj-xT{!(%wF;8UwPmWIqXxz zYJiyp^ZPy0w?-#tnwctT?X~9h6Ug$G2BGLYqwS?SVe3}jGURN}_`I46Qz++=Q**vZ zlcD{8LRSNzz_`pA(480!lJ4a)EDv{M%xDg}6>LWk&TeXCz=qn0XxUcK17A-&1yscw zWBb(SwaGx{XDzIV5V{drNWnU=a3&WM^LaPVIF8vZ1w?Pjq5I^M>=ZU=Dm`)#HV&tx z6cE>QefNXMfRTWRbWRz?SeR=Q@15lrB$h6YwHo*8s1_Co3uhQFDOyOZ#T%y|pf*gFqv{(rycj0QL;LQcuFOH}?G4(>SKOiMJ z8}+gP$gq*N2j!5UWwm2>nCJU%3G|1rBNf{>0c*QWzC|!tnvsK(x|;Q|H(p9DG6Ko; z1bX&5zycFV$OlqDn6kST{SN!-P~q>)%RLmxS@< zmuODSjuC*s^Sz?i(l^{!hQ-s^PI*a5QJx@IhXzyP#a3bma_iu)4}duj&S|ZM4_bo& z$5izrOxsWJ&q(rU(q2J0kqze)@aP;g8Q>E-WrdXRRa1!f_+zF@Ad5JUOV?&$jLQeo zltSi0kHKjHOM=C;c1)bY|5H)mbRr`#>+VFHIu@E4JH6PWYffbeRektL1_cx)BtT^*eH0E@my+=z6P0e3&$E&4mlK- zbPrG(BD)Ia-jhoNu;(%nF*=L{i@iWX-tE16$8H!JN)4v1N!{bwIKqeYeg=GWyfCJi ztUeM_t_ZlD6>xjW7hie=SK?aqVv}rQ z?ITH7901mXF0-5hqH*!oOIpN?&*SyxdG-`0VE@vwaF?aY(Bb%}9;@!tMl^mPNABF= z4E1|tR7KVAiM1yxi%Jo(V4u>gZ&6;ClSGP7aAoWBR9TG7yA70nl?pwj&6P~na#h@` zY>&`=6A2)`RG4K^;YCnLCv6K!oqhtq#i{9 zKU_NpczO|{oeoJ?Qd0Sc#s~$SWcIEZ8?$ofkZHMT>k)hf&b9=+$x(rshWd3oD9Bii zREizRAzd4C?^)HvTPJ^Rd*wvfEF^MDM0e5EId$&nMO&9uhh41JoqDLc=9N(qz8MyUqD$aI;C9Vm*f53V0IKE1j%UPZ6U|5 z*pj__gr@wks@*1ft$g;D>uJUI;a)3j{Va$UbEw>tz+i|-rbLcH?2-W^W-o`vU1|E` zbit{8*W6`dnaz{)`u=T>-xn_b-|vqq69bT zzVWUcdW-!D?XYW&G;V~@bvV!>vEE=L9puoUglo)6S5T0dJp7vG_g-Y)W`c+vD3Kd6 zxXg#$Akt8IG<2Azx{+Z*p=h!DhW#Sx)oX~GK`5VNmq&}3*&;rVXPzDV?v{yC6SM8TNxVF;z zf(V%yxlPmmaJSOl5)K1@UpjSuymZ&T(;b^IA*n_lS#rTnDeVCg!D0(e-;A7^{^sIY zR>q^FeDrOBdU(Jd^AOWt(?rSVcSQY~l_%${BeU2d$V{cTr{1q$##ufuK)i2bIe< zm6RGTZLL-nLQgeeDd8?miY;TDI&X)5OTZ+QwjfG=f|}_FoJS&Bhd!)0ttk>YmbZx@ zTLMb86`!GlK=o~k@iF{NsLBFEC#3ITh?L+K{?Mkxg4+zKovHjn1^QBQ=k*m|az$`~ zeCt5j-JepZav=*mpSJS>vU!)^@IXJlbk+`~c49)u7nX7lox+7z2Nu&k7XssJ=EyVs zLq<0Y@Ov%~znh;ZaZK#K_Xr7M~LhD+R)!nW7Q!kKs;SxCS&;>^7Pu$@2) zJJ*e$<0_i>5MR5+EQJt{wC20jlIKvI!c@GdW0n4#SOx2rL5s>)mYL||a*Pc-5L#omtpO`8u zXn(uml*WFA@m5|an;MECZ`l75KuQi@A-;L`dduGZ*0dO5S(+HJ`ZTWS_%_Zz!9PvX z-%_95O9=h2Tg{Z6rmM<@CNETy0~Io1TA5k3H0RZsWR!a1#}P&CYqf}lA-|v2L=eof zS2|c=ZxWIIuTlz`{3tF{FX{Qon>X+h&!ODG{hgX&0-J5Pd2|9{FKf+wA- z*mmHbJOff3yFQ{H>jFuI4!bW92@mYeIWIP>ogVi4W+A3F${mBScKnW;on?FzUlnPw z1l^`cprzXa$J30GRPB5x#(?vqRk@k&;EsljAt~Jwc7)(CurU~LC`}8y&Z*FfdwtvL zD97EXhZ*9Wi$9_*JBC--FxoY-!!qvNwX}=dtEd;9=vJhu?4968{wPB!t3i-WAV+)i zl@O&XE$bm>=D2^)WbcGb7p<36*qpsdMa7)pChsoNtv}ye2=oua6z20@>)fc?EF+Iz z^Ll>12%r8PC^J1+t-b|n$HF`3oY}cuI}u4H(^xhq9EpVZ?5DuCDjnYVw!e9*@z5y z2nk>617SBHC_4P}Ub_*A8T1QKdRTii`ViL?u}CGbdHjb6T-$jt~*rEm&+OfhHiN zJN*hP5t0tp$kV%Q`T;rQ$xm^_vXBv+ny1#`#`s@)_1&#NvOKW_aI&_qG^lYUTU^s9 zDRBuzie9E_;U^W|nhMP>Ao|rBvcR_b_NY_6C$l=kOi<}-#4K81iX z1&?1|3##RDUYuoVpY6%-&#+-VTub6Q;ei;nZHrkjwnsU&vV>ap!}l6R@3?y&@wB8_ zn$FTscJG0&Ht8)>qG>tUiL8O&joF{_D*@c?x^0 zl-DIuuR0HP!5Nn)EmEG~(UR$TfN1AX+ir8u$g0km#%OZ_<84n$e1G7OeK?+w6kcOaoJmALfMN zgB8h;dDYRHkWWXmgkA@$^u4yR-3C7!oa!H;$?%6L%DffpJVC3#DVsx@fozd;fD#xX z?rNR`&q`QJbNZ%atPC7!=85PaoHk`k$-cajE|{>H=;jKQWjouPspkP`Zkc18h>{Je=p;XIt?*>sX%Uib@40;=OX`?Kxv1Rb`spO0 zK&60@{{7A^ICxyKx>ap8CfTwDvzT&BURm6*|HHtkUibjMp?!WTd*N>MPw_=j$DXSpsQUtB5Ng0A7NvD~HL-j06P9DZzzcxqNTm8zWj%V{-OAQ5 z$qihzTCQB=DO zRj{lSM2Sl{s*K;^^LT@9+$c*75>#!xcpo zKc9W7SjxFO8=JZG6*zsdKI8Un-xrhmhHegRs2 z5>W~qEjhUsml^;@lzs%mmit9D=Dqf`M+`7*VGd6YD8X~r>FRjOsz!^LnAqK`|8I73 z4AK66M`Vi^vCC&97>dv#y%pYb*Cxh#5;7J50$}gZAgCycPuCjZRX6jR;4trgz+M=^ zo`1h}DHt6{F?vl$4gi$j)MlLFV~qdu^}+3TzCZfX8`0~?_6P+c(uvA&xicXA6OV$Z zD?ql)Nxe*J3cl0u-)O<79U#lTt=hh03Mi09Wtzc8qSlqNOZ*=1LY6{0m4bq~bcr1q zmhj=@$|?Z|)n~H(M-vLNj<6IFr=AvAFLvpKGqq0x23W6Pv<*=c2`Z?Vbz|#1sCvK9 z>?-0A<0*}xh>OOOMf=fm=|TE40*iU6^%o?Z2-+it7|mpENe?}Fc~3FeheB0yQb3;U z%QIbfdm zqU)el!dO99Y`GE`O2tFuf*veAa8(Vv7YXFXoQSMH)m=0nC@2yH2?d+BohL!~%t~g( z-OEo%lod2E&_9F}~+f*`L=% zbRx)t&huVOVa1udnvGq4Uq6{5Si1+eDdn@ z#%EqCaFzXG|8TZOEsBrstTNXXisA_R5$LQIhe}cwkj!@atF)EW{lQC$I3Oe2%}T9B zAK8mnFj7wfh`9F~s)AQ}`#}~ZDn++^-%_8h0Ok%`m>%ZVL%IhGi%AK9z^Bx6a$_Gw z_JGUJ#VWz4D1R;^YG3qu(>gU$J3stuwiIxNsEmiw%GJR?#H9D9hkwMVico}umj@?w zb;k07IllVrd+DTFv9S5Tv2D90m z37jQmNV7JlJoDc1iZ?M>ijyY>Z#d@`2K-5L%Fb|@sP6AKRP`Z%RyneXa^%Epb>H?(vMM5Z5=g-vq5=DmM@iC-foNjM$fyX!W3P|8Zii zL#nvXNS{!c!puuZD7|+DXaYKEcUh>G{srQqrt>`cA_d`1rrK+SYKyk^Gu3KH zZ$pz(=rhgnVtZBj9FeA-Y?C@b}*t4M}WZ(dq} zEW8a+iR5GwJI(20eNYHVc$oEw{9aU$#nTI)7g|$$!QHsgHN{dZEQ2UO14R<_CB+63 zn-tMpjp^aaA5YpyK>ri`Tg~7IsHQ(}fg&7gvthsqF#KUyIcGD}5q#n#Ao8gldu#-L z6iXIZo{WEq|Hc(!W%n!k3PL*TcEP@{9Z2v!8e!=qM(SCVm81T8y0M#f3Pe&}jT0mF zuL4QJf`7!EizQrIMn-uai%pK1j8xIZZVAe2G0(o+0!S&*LIcxWH4gIL7)&p&Dnh59 z-Y`c<)b4^}Z@P`eCh*) zmR-fdb0kv`eS3oi-n8M{3q7QK2TOFIjd(>EfMN2vve$6cK6Wc;2z=lbF{ssWVZ24? zHRwZm!BeBC;z+vC(KYO09u{Eoj%6o7eCrwiiPp&=&(hbSSp)e?kDkmOT8Z$kGd*QK z?Dv1QSs*%WGzkubaZ)pCH(PHMOQr*4y7b~Z5!|(-$rH`_g-tb#4dZB98TevZ%VJG@ zea!GSR6p_JA1Ib*l)N5lJ7Kxb&)s{$aoRxVpL~R$macYpG-gJww|ccx`0zmVxVLm^ z11Dx1PX6~3eI?f7fdU}1bBTPMq4O@wEaf@oqy__U-B~QC9qlItK?T7Dnf>Q#s-_(e z5#4aV>fI&D?d?n2hGZ}RZd&$~4R^bHnnP4vo*4jhy6NqC8?M+M3HWmKi`BAyHJ;Hh z3q=ouo#KkKze*Q5$`s}7Qd}A@JhOaWV(at3Gq%UO-wn+o;MT#vDWE1!-9Kfq6EC4z zyENv$E}Bj(g4(mLG;R|R?KPdfsKHfQDc*daDkqas#LBsvy613+b>dLtLzlDob<91= z!HV&1?$eCKr$v@$K@x|p^ObivjC#-m%b|w>j5q6HjyL04=9t}>SJB>5!Da5gID)16 z=GhI<=bnCy!M6G)Pt3qIyxE-jPp7`S#G6~MlSvlIE*qma(!+Vi_z|h^u3uCr=w&zT ztRx%P3_C=;TysC6m~6;j1f`%Vnbxq$h|IdM{_#YcdUFq`^NAS$BO%Y{eTU2&!=nnv z4+}^9eCNk-m+R!2OVtE84*I$q*(-Y`#T0ApLsNt`-oF+kn2~ZAPL=&iMHcANf8SE^ zcdkr_|DZ)OB2eOGczgrb@x29aw))yMWm^#$y7@GOcBy-Y_r|d3%$3GjP%CqgvINE4 zccdKMqdzCRdUA*xQICRGHe?d@L?Q9uXv6TqO%rgqH}cxe0W&kq%<(Lx(NE4kQ7*rr zZe=!8@7tq0G>L@~;IoEHAn%`c)(8nh%j<`Aiwzh zCOaQYKEBEpvYDAA&JRZ*tWf^UWvQT0!ptEU7LvQ$Y#byb6b5)0tEbXK3AvY^T8cg~ z6V>j#v%|K9Bz!B*<*BmlwG25ykYIlFSitDK<5r}7qL-TmKLmnws%%T-tM-Jp3B4wK zG{!B-aGYRYg?A(2e?hxbv zdM~kNKE=ps%DPpjsck9PA5H^px*%Kg5tcGVrk5G~JCzu8!0=b9;Sf~`%w=)uf~b7D zb}7ECh+u%dXfcQrvt+vj`C3Ck8yA=Zk1Mt-Q&I%(ZS_b65$FitLz`H?y9wHzrhzCa zy}k-q2ceJZ`Z1HGe8k86qYEi-gTaQhOAQJSKn8YB;_fj+USJ4*;dC+{2wz^0UC$#p zr18|#Bc0BXuY;=#N9n9@+Hop`ZB|v}%rV4|BU6JO-w<2A;iY@#^a-e4E-!zzw%Uj5 zWtej~8d30G*llT_yGTq-sr|N=vt?7(%mB!$gbaOU6^zq7^+5u^S3@cF@(J;K~9_qE_`$zgy_}CHwzq+a;xZ!G0YH8k(3*lJ#**0eyZM;jko~` z0;y0fWX64(d;%3)LU1|d_g&y7fXp6bpjtjhX%iC%2?ffS{=Df8JfnB7_=90C1k0yl zO?QYv$)O4m?CyOb()5z+AgnNT#cKksTOIA$u0x}0-HJb3u#AWcy8q<(I06kdp{4X% z!w~02bf}H5toTvuGZxLAA10e@=$Fy|D>}?2)i5%pqyv^S|zt0q*IZG$MXtL z*|oL~6T|$m&t5|*hIjj&0^=JC>R*hcp3pR!QDEY?A4ZlNa-^bP2SYy^%-RE_EQ|1A zfAcdw^<7~s()_)Q1TD%*S5W#@L8V(}QPZaD=<_Hsw0F}U^$yF+Gbt?XppfSz@Rv@;dEoJhUYo{W?_3eH^vsK zYJ;$1@3WJ*`=>q1B_p0&Im`~XUh-HbvC$a|JoFV>H)c26YvXR|JX+u zV@@vm5MOEGqXLmni~F8IYUfF)C^J*~w_nRYHQ`353S+Ioc3Fg}j9{H3X3ipkSO)$Y zcxIU=afv0lE2d7(W~2wP{*T?uhPr=(HHSLX%kBozcP083Ww*4yGqcwEDKrXkDNT?7 z)g>TjM=|p!F>(!ef@{cO!P?r{JN_~f7vs0V+pE_>IPsq4s4{#Y;ZThH@ikYTxgGaYu)kv zt`e^Lm0~(|ULG&Oxa~d&ADW5rtI(yy>HcHCWyNJlaI3NfVp@<%C|FGkCc*?#8OrC? zvn~s2C4-@+9Tr(XJ3kV1JZbK*gbDT&ISCKR1(vTtrH=<4P%xmnq>8#CeW1XIClD{u zeG}ZCBp$G}9h?cC*nmysq^dN9tyZdDlEnZghrAr99iLJ1xamny$KqyMwS!yb7@*zx{cdPn*BZzt7^DPF;@954VB@-8ezG>$x1m|^+X3SYKVkYj;Lg5H0 zMRIy>i-UR)FAMB}N;8uTxE+@Z?1pu1D`d+PSQlq9QMikPZL=@qqGdPLr5OhqfW@?krj zYtq`C3`WzCh3-w#=csh2T8w5=YoE8&ASu`xZ!Qi zg2+@xava;uLY2}IT%-CG=>t?}djo<^S{XKAmk!$%#00pD(d@sSpCal8910wvPc%y* zcrapsA?jO15c8I{AyMagLLLn3ur8PZOTB`~SQP!v)|jqg{4kSJdYXllHG=giOQe}N zzqgcuY){JSFM$?(`r0G7&&aWWG*!;a=L{B(ieaeXHTg1{55=`qN0{tBt$`WB@^5V_ z?1U}A!nN;MNT_0A<3u&utZxmXkxR&*_3)SWB>`Gc?#%*u47YlG;7G3N#)sH)*GBZWJ>9*{B%!@|r+h7Q;O6suVD5R?XYw1JaY)5V1u01PDF*&=C1Z#Y#hJOK1mi5X1Spi zhCcb;Pkh5Zg;>gYIz+`FkdsOe918M${jsmkFSQY48b#7{*w~pK9>j>OzJq!%S1L`H z76LDz)_9Aiv?FneZ;W|aG+u7YDbwp418uD&Hf&XB-kO4Y#r30ORd5*5qb~cSjlI(a z@xFnF1k-sWz~MqFHum3?2KKN)(Lwz)?yT{aX@BbdzcOm9=ROC_wwHnX^zgR(-X=$9 zmCY@Rbwtjzsywam?+KZs$`dhQT0kweQl)XXe^`h--R)!5LXeHQwP&T?XVbwuP|Ff?&$G+o}GcxXjZKB|EGEP zB%;PEt&kqDzzKUsDMD9p*=LA$sZW?@4r6N0!dY2SP>K~nVLLXbXo>pBWBaZMY!%PI zlc9<`tDFB@=L`Hblo6^3Zy;biv5z^p#T-($gv>_P+BD-v(bg^izwEvN`}P$e;KNh- zI_By4o66vN700#g-3u9fwUV14N-sk=tjD-B7dSpo*`FQjZ^7NGE@UOcfof6!=0?Oo zdbvCIl6XsO9P}HTwK-Hp$AJ6bdicFv(C$KxFy*ESP3mekLJxIdR@aaIFg#dpj}$Q5 znN)p7qTo*ywk0Igu=;80nwh7Gat^87^&^1-lUlTAgQeoFvDplEsd$7J9Lq@EAV_lU zjwLnXhQ0V&q>rFVIhUCJuYZiiCyAMNVf1YM75Y(dzpP&|nEZgw!ztq82dl5E1l^nS z^`CMN6cLL{a)XBt!rLr9DbTs%jMO4Y)5Ek|m}*RF)`vPgLaO_>D4Ufkt`EI=LZxiP zHzrq6SMY*-f|Pgeq3+VF$B|pNU4mz724JP>pU_~J4^$4xmVJR%!X2}UiBs$|SysGv zD&sxQApz50;)6Z!R?k4P)6Ecs+O5cLXCNNaWU}jv;EWuiuH5DUJJj-MNbPcYta71- z92Zk}9Z&-CeJ@F{3s#EEZxf+Tsml!2M}c59ai1|&kE(yl-R*ed0q)K$js$JPu}<7b z%<^$Cj{C2z%K|pYb4;S$VMPQ5j_VFn!+rPazN`=5g4>6Wm`E2~^*_Ylu@<;>gq=eu zN5hnHVnmB{#2Ov|ZwZxHFmXNuRTCqEjiS;Rw`~t1h`)ck4p0+L`8)gv9CwrlK{E2{ zk-)9G=t1XRHcb~LCzll5P~or_ebxq@F{X_0|HeRtv^n6M1ecI{orUf{lW z&ZcyaGc2^9_^)+-hOyA@<9xs>9S|0b33s+!wSqW6tgD(?PHBcxYYYFuOITgP%}N$l zfa-$O6;-$~5KEC9QmG8{&2)3hF|IWgRYAKql%Cu4ems`ZFTu#0scCP(ueu zS|9p|anU~fQGL-cMgM@`X)*tN*5g>y!bY%;tA9O^9Ecdo+o{V_MQZ%$sh5wy*g{Chdyi*lVC#QxUZ(YPF_&;Sc78}s#m zu4^PTP?$P-i9A3qC> z)95GredSDf4p%PZ`U4xjE-dhqy!xX}-Tx>?Wzyf1z5#>bh4Dp9HtfAk3-oPJP1r!? zI{5d9{aM%_VI4cx59knqO00H{tDbc1Fn5#=Tvi`8Xq1JJ9 zR>U1|TrTF#nH-p+ESW)fZyuS}HI5QeN=mquKOO%QO5W$vGk+f z4SZQ6GzI5OEoDya#0|GO>Lemvv;#ddxDNz9;C|%sY}2O9n&@AKxij_nh_)~o8aJYM z6`)+eg<9u=PKR51K$l+CkTW(q42I6?#O#_Vsvq|_zGWgzWV92{?Rb|k`ZN|Nc)6h zgJAu85GI5Rl*Dtwunl|gaUn#J+bcH!e?WMFO#g?XDXkw|fw5LekC zM~est4t_syODHXl6rlbEv2M8V?b1o@@P>=kqDf;B(3o z;kzHA3d)23$wG9XfE*3>uq7hR`d)IEo^lMCEGAt)Gqa{oQl24w(H4gbSuW#M$cTBQ zUVxD)!tO?UJqZ z`X#9c_59XkRD&zX0PHN1yaa?;^?q#ra5#=#ny3W?A2V^= zso#Vid-YOcNx?wGmBHmXXv5kfNKyqlUKi%ftS90cvjx^b95Ld0;=fE-V{chg7szgP zlUqp{j5LaUr2`^Gv{0YTq#;0eI5=Ccg=Iqf<1hn-hd;qmunNNUT<2v}2Fvg3r?u^2r}4x{s2%IK}r zW&*CIg+UGt$^7XLYe7u<53NPDrlMqqAt5B@LXSO4J=AuwZ>(+l{Fc}1UGU4x;d~ev z`faehubN5Xn{3S4J}l1zx#MeEW8Duo-qN)M!UWJ~{^m1Tu5Dy1E#+hCy}7r58@LpA zG1-d)JgHcBBI+h5tv*ek;m?Oj6sWf0hwJ~sf>$V-q(C7QjZU!-yGw8G25pmteNYzj z2I%IXJj4Ot2vq87x+9(r&cWWFbR)D)GV!%k#tRQ#-ls_c0;(S3U*VvN_c*}f_B-w@vP%F9a93Jxg3e6c7 z+@X+PNr8Lr0dQ#!=(Wo~(_f3^`DIX3^xBI#@pP|5nyNY&6L4uLTdpa0?3c~g)-5uF zDe2zDPCm|V&S(2^W4c;ymhqk0(pu^X*rh&5OLq!NkOp@vg8*w$e23&bZA0*i5)ws$ z(E0ekcxLre))L`3uI6Ud~5 z2!F*8?C{z}VtGiR&P?jQ#C7=ZdR~WaHnC&&Y}_+XRxW}n3SK;iU=!TulNEi#{3?Fv zk5T9GU{NzXrgSA;9VQ#$McWbXh8chcE;TqCBNjNQw>|jn z0ruG-Jcg?$+%Ux_=B6IM&fxKJS9WanNxMn%m@B*l-sxjDv(14&Odf5QQ$qL>`+ZD2 z(Po~N?bl6yt)dExV2t=P;E4ICg5)-Vy4PLdgOi=nv>8dt5fzqaBq1;dn|6ZM7u>n=O8Lwu%?ZgY?Qs!wnZXcl;`J+6M0!(B{5-; z6ml50$?dyCsBQ8AV1Ho$&V~0V(EGBx()mGkF*-9uC}`SyRus+!RvJVl!Ky5`c3PJ! zc9B&Ea+i+XvO=Oduy_g@q61FuPPszgfbe}6FF%vJlLz0|I?0{vehHAswY_VDV;+x8 z-;+!8G{xAZJJh{L_G`JRqzEj=i69--#irjek7>iCvWe8_3=WA8_ZdC}Q@wT-Y=j0^ zMIy461cK+4N%rEL8y0wmY}aJ9UW(;_&&PlQS4_AT8!Ng%@b zQsyb>S3tWHXc+?I5x@Zx7fHX@`@+#E-1#DW(n3PtbA7}> z9?lDld~=Hig>+~@GNK|BKZ%J0+9c3Iwv}vvz!dv@&E$L4*@ zkA4bp?0Ig2fS2mhsp^Y!#ogYl5*4XAEzp?yW^9A8GZ!lUPCQ*|p3w!Pj))6&dt01c zDb60TYWIp;=Bh|YeW7^5$f2Dz#pGVyG#VFcePPqa;=wx_b)W4N47v|DKxQ2w3ijt_ ziLdh0#Xw!Zi)~54s;;P7Y*_90Ex~ZqF8VU#m4PCNl%sev_Y{`rTYyU+mhi*46^6J# zOwoe^53X;Yl5 zkv=JTQwIXRWLxiWpI`}HMn5{^A%hTo#J^w%?fyDdK6fCd-*$Wtjao)504QW;OoYjk zNhGof0ylEzLY4)9E-~%RA@aQ)2rFj*J?zmgb^c-SE(fJjUdTEwP;}?_1mi4EBR8gp z=jly3F6{&i9pNNlSHwYT(_8y)5J9NERVBRwuZdmD7NMMhe&~;Xz<@%8Y?UEK=#4_c z{^@$1%(A{8y7`_-MqU!ccxfm+Wm2b-%hb;xR?DA#D?77#%h%W?+#$1$fPdj-FmQ^6 z@P1Gz3%Noks0wqLU*BPCB9n*C1^pRenvt^?wDjj&yUzE4wroe77!v{G!|skUbO4F! zOH*?n&sS?sZ|`80FE=0{>?KsI+nBr;?HkX|hsMs(mUfGUIC+IYZf2gb?GOjIUX6KN zl+|#2)_jhLe}xy6poR#Z77tffa%B{pMLzjUi^lKgECFtuX=ELa07%%0z3pNIp zER2F*(0c)2L2l9GWZi?Kvp9bI&}%V*fz9Sua!f<)^jQExHcYYget49_=QHgr;bgDN zO|ntEitqrnf1m!XYg2kbr{5F}Zsl{)mxkiEYAafgWGQa_cVf>`rom?IqN+f*dNb=B z@(jv}9k?O5^Nf{pE0OgFQu4%@_onhHwV=p||DcVk6`LfV`UziGu+;+RF^CwG+mPom z6tkanC?}MPFipVL0;UH*LhJ2BNU7>gWLTyM277uk0%MUIU18vd-oC@WH6!sZz|9(c zV;F>ai{)#*{>Jp=XK-)}Rn20z;Fal%9N>ieUMVkD_E{1PzS`l5sL;e5 zhH!gQPn3eTxU}XKrLfBenO1c4oZ#uKd$yo`x25d65p@O(@)96?#?R#A9rW!CH_eq8 znQBYoh9+L`D4$93a|e?jEFXv2WW*IrO601QxGJ4ltH4TZM)6$Q3|df`mQ9fXb%48wM&fPFcBho8^SQP>JarAX)Rlg=%O%W^a4gKdSNFv*@&xvJy4Q2 zBF<%%@+7KX(pr<{hk>HeAvh~d3%7vL%^>6IbxZz>?e0#;rNKl@ROa55S;6CfZS zju)e(9#I`|r<4oZNH+4^7fM-+Xj@**%ev86Rk!b?D?tM@LjB;02g&g93xf|7nN&an z@(KNe^{4|0IH$+QLPxHBF?uaqI&UC;qVhBnlegn&nZ8e>_4*#_pGD_^^6iC~QdVIg z=f~+8IGyR?`zk%3(i~QgMIjSSFJ4J^dsw z$B=6A4cWhPxy;9Gfd1r9#I}OwthG!F9F)o>W`je^_;XL`2R#(DX6jmtB8-i~a498J zAYva9W(PsY+nKOVfY3+K;r3;U)4mVaT5C(CpbmaGeMAE58U$hkpojK_3iw?CAk^HI^7Lf zUmV^%(yj(ZG^K~{0mzHU z0?VqnB806)F-u-i4a_eYLQ8~txLQd+=S7@9DQcIqIl{9C&Q$lEj1+3Ha4BieT9nds6%HpF|SqJ&-~u-L_O3;RZ$l``h21V)&{;dsks z0V`^klPTRN0&tk8)t`TyhO61kNQmw=4g=C1wOf|KQh{4Z->aqWuC$E}knV0EP8}1m z*s`y8+W=Na#%487EW90#kY5>yzfAsOm~5eOm5%DxLmdWR&My%Hm>!E?f9Z7$R zoCL95KZvQVA+~%3tN=SX79)u#30K-@G`i*Z68kzTqIWulB^c5s|Ljj~l@nv%8jjWccUvxPx-X}7m*iuLt31WGkt7$Mb6Y?vCtzir(S zlcn_rEZwx;DgX?0)z)&j);6wSUYZqsl ztB&0`M%M7bJOU6$^!HN0E@@s25ye>L;w?#-BLGi9Zk z5?k`|2F1~`3YDbWaiXTa5WJ1?QCKMwZg7vatCm?L|y<}o08;F0$0@4&Dl>lNRo2Tk>bA(kE@>El3IB@wF*4x%#CRP@ z3v12_V`?TwcHSph8VAyH9JB5zZ%WUdd7qoN6_H;nPg;-<(H*SGSEBfSwSFayy9~r1nvSZd%&tm-nMY|0 z-Wmo%JQ;70O&5{n-sxzlWaQS9j2PI5VrG0e@d3L7nt~=X?}}+&b7fHL`xf$KJyhAD z7rkP6ZPGwGvJ0WpFpTJ(&WJkcRbTzMpq#nS_RtgR(Gx8ukgcdCWd#AnYu)ZTA7*h9 z$W&t6xQNrwFacleQ< ztdQpE4QzF$^~)R8()4uoIFK`ED*u^9lC9bLBrCxlL3DU7y1q8H%Fxu&h9{Lb)>%+K zn1mTuTdc$~%!j;~#i_^1%pmv!TLxf}jf8e~d^D*7Gt;5E*{VvNmJ$#0)er)W_Lde| zX;X408y$%}cI8GzpDEa%SfH0&)}O50tN6HRaK;*QAS`?$YZO|3n{x76{my>01fY(p*hN z;WUv-NQn`|*;iHWLRApZ&o;q`uqwhNlz8l;HmY)T;!(&6Q%hM>Tsi%uk@w5L}?~c`ELZC3iP$?s|NOo;O zl*a!8e-mv-yq4(Nb)bKT(_xT&AstC|K-CFLk63RZlS`0n6TNzCN)4Aa0O{Pf7pw6E zVD?|9T$Dz1*l$1%M%1emxk-n@q8GA!I;l zwi@0b@IxK&M2#2_0o*}5@}LLM&MgA1@Y6i5hnkp5kI|dY**=k`A--yIi*B6y!d?^w zz-O$JWL@OC87;EwozC}`L(%Q&bJzN=HV>Ta6(*Ivs6N`K#hKAYgiU$&uo*PEVv@kE zI&6mR())k9V3b|yBN5+QP+yw4#NH|2d9N!yf@|eV)Xl7ZGX^MN!me`5@=qTkAqqqT zi4tW;X;RxRK-?gY6@|58N~YIbVbJB);JoBeZb@08_JE! zOih`0NB6)Z@Zykh9Bpy%MYbMUnT+@d;vRI{_m)*n{TlwM*LLhdu28XT)`wE%JHomT zMZX{x6oeAW?e&<5_W6JG5@v!o5Y8RxdJBS_ zLY7{s$9^LX7lzeQuh!*Yl+=zm0_lmeI`78L3BXkJ>y#o&7rx!i6jjgs4+cIs{r{)h z(kL&?@W#bFTILNH>>X)|E{ez;niy-;znAOV_a2W>V^L506%kkgL;azpT`(oU7LDkE z6#LUvXKHZyUPemNK+fMBpTWb-^Z`4sU*@z{vi-U*gU`+CfOpTn<@q$?-jrn&HLg+v zxw=Gv{ZoMeV}{giYyP~G%DLLPOwQ8lJu!3!R|$(O@88RkXa66W?>y}|c@LO1i>RB- z02Oh&h8e1X$cu~IQflfp1^4zpNj?DmgxEX?xg|Ds5hy(SOY|~sw}oF=%kynm&nm-p=_WT3*zsW^`POXytcO@ItmLgyB#@M$l>ucr)T-_to=Xc@@F2HBR*c`^1Sk zxQSfi6ksSS52?}G%ecw>>*W$YoLH4$`OE~=*EEIjcO(PIFwNH(CZe8BeMuFHqxw`g zwRUS2fKE1ma#Pcgs~{5uwovb<;JlWBV(^DmL~)n3hd!YIQJc-{SCG^r!$zv6T z3-wxV$EOb?@>ki#ZrZQv+>Y1ImqraMl=7CW>M>u}`N*wZfZXlvf0ZPYGX@v1ew+SU zVk3};KzD(jUhuu9IMdN$AL7v8lA*C7YX2qJ8&nSLl`i=hyxMB7)oU9;$DXuGjzG#M zPP;k4g?57@=l302n3>y2Du6SLU#MsfLUG1zv^g8*^Or2ly(Q-|1NFwHA}yP46V%S* z;PXmi6^hB+f)hlG*%Ce%7KJw89Y{Yp5B(v*KaTnsVR(|K1U9mKj&xbbm+h8{Juz!v zdhcuyx7qvrOL3`Kj!WxhlE0pA2_teEcxc~~1!>{~`t(cVa%8olKP@v$R2Co_rhpo? z@!>z4C`%+#26r`L2wb^IXE*Zx^eV06d8-V|Uag9vw0wBodHPcJ?vOn%_Wk(vFjGK{ zBt7oq91ak@@t!~qu%QYK=d5gftvfYVzS^(Nb=tV!+~!Uq-0qfkW^$4io%4kOku3LX zkj5Xl$1jNgM@Uxk3uenMB@HXSTksP!$SU3#>H9UcaazAkphaq}6v^LJcIZY8=d)_Au(oc4TX>C&Br}K@0umdtlKa8lE|Fn`< z$Cu@JEN)r#0E&z6PUnQK*d9<9BAqZz$f&j(q<&2aLtH^y?}qo0B@@8#>BJ-8mqi-# z7c&CF04C6e=ZAuDAQ^NkJ%NzW`ylWQy$Q#;(*kPW!Ho0(*}msGnzRMl3{X2cuC?r( zhId&^ftM_JvRfnCkcYd~UV4mUv8k^*8rDbIlQvmh`jpZ?q)h$c>U_tFS?k{+hw*P& zT*?2+3KjPE+B!L1IElW!oL68#DGxq<`=FAoq=xk3Uk>TvcRX*#*lApDwoVKzN(Rv9 z9iUehJubq8o9C)XD{SZ>x#{{+!L@q)GQIWEDUap#^vSAkA2Qd|EYqXE47iTe0GL?q z)E;8ZyX!q9p|bHWfkN`;=eJ$=thxSG*e(S*q4CU0p+=hgU$->cei>a)n1rV+G8^Yx=igBP7~M=r&1^x=fIX}4 zts0|<-EW^?;%Hg;tKFTR3NSh4g3M?uk+>?Wi4`CT)UF`s+(TC7?4HEq_{v*qyjdLW zsGo|Xx#}v8G`k6*tlfY*2sSnpkDv&*b83OjsDg<=vixMz+=B;uRy|+vu|Y=)o3n^v zsnZnk*7n+)Yge?DQz97W{v@$g_oY2PW(o#`F&A;Eu@D@hNR1C-C?Zw2Rt?Hxzf0|o z!n3OSNm#lbB`Vd1N8A4v+w&jc89&8Om$$uX(IQICoH((Ic!P=HnsA{cj+(>!??4tG zNnp4_#mQlBRk3U19@b&A&P_PPcjSI4nA?SuEYLXP4~N{0^mW;K+d-Ptqk}%o-G=K> zh^Ms4YC}^@tuRM-s&JLrINfN)gWJNI!}%uwvhE5cz_O|&xQ-sG#dj1K;q-H?lbKET=T?{H{ zUR`)X?mI-|0RbgY{IhSg>%_lkk4VYm*hxUJus0<*iH~f zv*l}<{+@!zLw*Aw1Z8*d)b>=4$vE(m9iIN2u*W@d(HOg83^wD*kP2k@Og!I-#jEcu zTjQMbCCi4iefWz1ue>u(UDfJOT#c~3k3Ie`BbTn#_ywz`?U~X!SE7g%SYqz1aBK{& zA4|iY;C@wsQUx{wU;qFB00wAJr<+n;?m}rnh>+7xL1wA|0000000000000000W1AZ zi!b^+7ynbEEBc)Zuj+JVe^a0U0C4|PqRaeX%`fV716%r?0F(Zz2mpEhr$7cL^-w@V z|5XG4J^xdqEBc)S8~%_5|NMv<59*+R6+hJI%KoQ7^Zis3@BC@)|Nrs9MbG%t+yDRL vgDC#02m!bKPJ!?Gs34jCst5o80C)dWpa1{>00000000000000000000PCu{Z literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/model2.webp b/themes/linear-es-de/system/systemart/model2.webp new file mode 100644 index 0000000000000000000000000000000000000000..1c634ee4f027978d530ff5650b3cea3340d206f0 GIT binary patch literal 34882 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 l005Hz&?Eo=8voSj0000000000000000000000000002VbYFYpQ literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/model3.webp b/themes/linear-es-de/system/systemart/model3.webp new file mode 100644 index 0000000000000000000000000000000000000000..a56f47a758155377c5822e25db52e3f05f446afc GIT binary patch literal 41016 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 D6<}0Sg{byht+SpdUJ1TTn7;<_}q<(~e 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 d>U01A0000000000000000000000000008jCG7|s* literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/moto.webp b/themes/linear-es-de/system/systemart/moto.webp new file mode 100644 index 0000000000000000000000000000000000000000..7c619a828b567c4552f31b3795811c6311be7867 GIT binary patch literal 23222 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

    Gw>0z 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 m0000MpZOOM04~4O=l}o!000000000000000000000002x!H4ny literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/cps2.webp b/themes/linear-es-de/system/systemart/cps2.webp new file mode 100644 index 0000000000000000000000000000000000000000..005d842eff1c21d85bad78180c66ae1714c84dd8 GIT binary patch literal 64220 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 w008;^st5o80^jU01A0000000000000000000002-;pT>t<8 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/cps3.webp b/themes/linear-es-de/system/systemart/cps3.webp new file mode 100644 index 0000000000000000000000000000000000000000..bb7b93e668492314f999d23d9994999570a886fb GIT binary patch literal 65682 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/crvision.webp b/themes/linear-es-de/system/systemart/crvision.webp new file mode 100644 index 0000000000000000000000000000000000000000..888470505609ba48b15bfb775fca8673d2454810 GIT binary patch literal 24048 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/daphne.webp b/themes/linear-es-de/system/systemart/daphne.webp new file mode 100644 index 0000000000000000000000000000000000000000..dbf68e19d125e17c332a623f20f39bc711d8c433 GIT binary patch literal 43782 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 Dam>5; literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/desktop.webp b/themes/linear-es-de/system/systemart/desktop.webp new file mode 100644 index 0000000000000000000000000000000000000000..9508102b7a2333bf4f243a778c32f6e26f930693 GIT binary patch literal 18556 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 r00001zy7KS0001c|EbUb000001CRYw5C8xG0000000000000003I=$y literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/doom.webp b/themes/linear-es-de/system/systemart/doom.webp new file mode 100644 index 0000000000000000000000000000000000000000..9408a312affe3c37f8900da004ac780aa52ae7e6 GIT binary patch literal 33042 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 g00LM3r$7Jz00000000000000000000000000N6*Ti~s-t literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/dos.webp b/themes/linear-es-de/system/systemart/dos.webp new file mode 100644 index 0000000000000000000000000000000000000000..43783c9c07d8f78efe687355385ac50032b44de4 GIT binary patch literal 18880 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 P000000000000000wj27& literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/dragon32.webp b/themes/linear-es-de/system/systemart/dragon32.webp new file mode 100644 index 0000000000000000000000000000000000000000..3a7837312bed71305b4e9f61d3740c0baa021098 GIT binary patch literal 25710 zcmc$FRdggvl4XiYtP(RbGpocUW@ct)W+<^r%*@Qp%*@PEiJ5uzdS?3dnVsIRJ-c=? zB5s| z$^rDN$;#T%US321UsX*VAN&Xa1V9DA17HE9dIk=*{Iar=e_8*}^04@2{UviWfA#f0 z+x%NCtf7&E0RRAm|7F2vU~BLAg>}C$tBa%UUpV;-BO93NeT@aE{0mdtf1ThLUj9q3 z{~!45FKqG;{EtB)+bhZoevJ+JOOJ2zFIfLyuz{())t3$PmkqI@mGxKuz^ea&4gbQP ze_<<2r>}GShx|1{7$a*Xg|8#=*MP$0w*&wve#J_1 z0su%!1pr7*zWUbuH{*u*a`}6PCZsA00BC zab1E__JHdmWWzsBBD$nyzV7j(Z-hPAi6wQ4j&K&Q@%=P?@Y7|AxF6y|S-zg;;^Ly3 zMi#XxUcU!q;Pe}8zHm)zeo$K*DC9sZNi%IfQmnM`pO3v~cW&*eCBw*-rl0+w<=s9{ z-#>SF--17{@ILzf&6`h|*Sr@=)u&H18nsUSf)Avz>zQjv7w_vd^9J>bYbE8fv`Eq| z^UvHhE0<>LrnU2X_jg=2bU5(77`+JLAiao)8BYeBNa4I=PoAtPV}m~QRPN3>#|~w6ru{&)W&MtSa>e^97Tv{y|!uho0PlaI}du zHXCQf`Tgs?p{^gTs?_`TEs~rW(xix?u0L?YfA+Rko~D+Zww9_Aiy@PUAq)A*iwE@Z z;lp3qzzc*dojP%4NT*F0w{2DH1uQdq6LV>DW!6vz)UPCU1uYJ z!Z=q-Fj2-AEJ(ys(kL=#Laq~0CiRMj&f)y-Xygq`Iy_SvwEr1^@X*H!=j;E6 zV(euBOm-Z@C?%W($b3IRS>4L_o7ybp2Uzxu@akfZ{S&*2>DYR4q|B_5-9d++%$TGd z%I8U8QAX?d$?Vcg4qPi;M-8OSGoJ&PGg+=A-!qj>d_YC)cT z<@KuSHJ0HLPgOmRiIEa}Njf~Ml#^^DB{7ngYIVm1GY5#y)IdU$5lHddr5=uoOVdg!Uo?xd>y0>j;Cyq zyyXlw8Ti*V7ts%e^pWg@3?;;Mk-TIKEyncc8f6WOkgDAVsA^9es-IPjniS6A9#3^| zJ4SIA`iy^(FkUiQoBB_pCq%*dlD?FVlY$8-yrhmNf(a@Jo0t&hQ21yWgV{|h&a250 zGG8}2CIU;9fiqH7!cHitG1h$(ycPdFK2A5?9#d8~GTok5RL3#xsa9N9G5$1J?dZ$| znsSvOeE3~II#ivgzP@!>ahbM0!gyG5m7>0#ExM#x&{T+*Na5UfI?P9;@SeLMl4x*- zO~y2nqMscc8Dc^m=jS+IK?;%5Ih=_?D29A~eVLS>U59RbCKpU{_hr6u=hXp;XX2ta z#5Re3=b|^Uapj^n)IN!Q$>Lz}jl6l$B5Tq?fpO5H^uYG+k#4;=!|$XE{W14mKM9kX z6cf#6N5!?V_B;8tHEYdG`8Bj=_AZq*7+!Tvg?VR2&?GhUHu$hHs0J;_A)|oR3#CD$ zywxAvrWAJkR-0^QX7OZAkEUjcbWKgBW(xRCTc*dPY!2-3i9o;X+td*glfw3$^BAcW zez=$QhB>sTST9l4?6ytDu0^6NzpZAM$W#;-bo%-OJf_R^d0&ZQX_&%Db`l+pc6I8Ssfk@N^fE7cils zElUH54|xt7JN6p|9yqusDcH9kP`iBglRx*}9Z$EFm8TW8<`3M^vtlMMNg{D+h9PgL z61|XSkv-9jOLtrE5t|c9wU`KfrO12MP6zd*YMn|?2K|k^p@~MyZy?kZ5*H1Yt1&4y zl9#(SA~p^(vq2Xnw%|B(z}AzWdIGh&f&=xcCr>2kn7PFuHj0|jFe)V0C$LcAq;L~2 zx8bfM-kG?O2oU#H&fw7g9jjyLl1D%?XXMg^L;PE*)?*$#HsrLH>ScXIw8e2H<(NN0 z5p{E1SGd&p$XXhm=(<+}zDKn7>S2&Uo>#&}MIOVAN5`eOY)*MqS{t7#p@;-K4JJNcxZwo>K309Fg|7EI@q1>Iir?QC))Y3gkXgU6ug^Msbuk zA4B4kHlsomIdj{yKp;c8D%*A7OT6XXx(MV2-I@F$#n>y_iDm-x(-k&1ZUUJ*bK8S! z0`J5WwB2F(ux(JO=$LTf4_|SQNdUVq!)5K|Kl#?PMCqDH39`hivT+HrM5pSTxbMjJ z70$VhJX{l^r|KUO2(rvC6$E%@Hqin-OFOE7uHR>4H=}%?d~EW0aigOlS2bWoLxonk zPzFRwP*x?%xz8aM4qKq$0T?1W~JBqXs;J`_hzlH7wWhS+4lBM2+j{2clK7@ z&JW=F4HjaGI^I;SRp%lepf`7j2s(SCu2f}8E|GX@PhNW;u2Aqeu2HS^804gz0fiX`dB2rlFVmzc*VVZ%49^g zq3*S;q(!Dt?>8)ihn(*>PJ@PM?@2oNM6P)5jiUMtx?b!}IM3i_q&eY=r{2TDe+%BE ziHHmf-MgW-?vSS$xfENCTqe+APqd%BK5znlv%YvBS-Y^)7`PlM`{#9#ba@-GyC2yg z8@MD7tm6E!v#q}!wLygzL6h*dDeIe&^1<8NLC@`?gS7oo)m0VMbDj3l*;AM7*tUegNJC&pGk0OfgA?8t z2BrP^<|lDy{Ee`OyamNCd`35Z!>_v_R<|FAZ`+=NUVe(uwgMPkW}R=F--|wVO8`F) z8lA?5D4NALf(r%)EDr@_MaF;Tg%+4&Y7JMrnrpukSUAlCV&4ZsSmWCdgOTPaU$sBG zxj3L@z}>Fh-K+4lt82KN1q{^$>ERb@FqXe}^+gdtG{kjxUSsrZH7Kb4z5R7PFsKEF z_^b1%QS}t?m$iVxLsHCO#m8U7xSd3~p7N+|SQNS!g?*8CK$xKD+WT zJ@zo26?TjbQ>0G`J|%xm2d7=2j|sk|zz`J>qe#7@i;YsojxI642uCVklNO*;!al<9 zL-||RwvrZQjb2qNH7pVtxqZJ-pAl>c?=i<76ztWY=E#yk_DKSOYIk~zAbPnIP*CW;dH)2qsh9% z{r-e>h>Vzwl$eB+n7Dsv>8Wd>OzHh=w{H)`pWBrqDbYYXp5i5?kBjz8W|30j1D$5xfhB|x3gNbGh+V5MAfG*Q0f z=Imgf{B#bLrm@r1Z2abcfq`L6(m?-9SfXBrCm9R|BXCUY1}HPiR4U%cNlE|Qf3eu9 zEEc=B+oA(`hOCKvg%VR{OxWN)JtZY%B_%`YSYkP3@&aaLC@_k1_)FqFo6mno&hb9z z21?mil7LrfR(u{Atj0@rgOv$lpuI>9XK7a7Y2T)@#P2r$0OOfChc@z(@B1k4gt^Fv zI%pmt8Q7bBl0Ri6MaX1=#((YhK^#n9t~A>poTR&|5fiAt@zbbL4mWnW!&-}|1a*0Q zS6{~j&h|pxI8r~&o>iCW3?Jp}XEaIA`}z9et|55p&wi>?>1w4)6Z}ifPJM|wW%0+)rCIjd zO9AGFunsNoyEG!>Cfm|zo?Wc%|&`bLI@|xaKX0d z;E+EYf8DcmrMqC!w7IR}^kExl&nfDsrQOJL6v+v|<)rOtD!YsgIj$h%6EXkw(Rdpl3 zcg&gkMG6G^(bVEEF9^%tE7ER|K(J+zwM5=qmYh3~wU4NNd0;Q{kc_N7>*&ePK+d0= zLEsVLIo(6r8&s1FvBZ=G7LdA>xRm@VO)7r8hUb18?eu+)GJ8MuH`dE?HS=en^)@P@IfyH-AIZNU$;EsuUgP4ADyr0a z?#x>ZCy5BdEm&M*NdW-2ddIQk#V-Ddo1A$K+Y>qP?;F*Q{jvMxe+Xhw!qp+Ey`5#{ z6|hlWUSr$a>u@~JD=PaydhhXKvE$sE;yb}cy%oo@Sz@D310Y`V3e)@1n zo+%kiLk)v3CbRbqx6x~{z>4$+^b+|xG7q(Pmih`qZrNxxS#hx6&DYsjd9GLb0Ve+e zY!rN+Ck1+s&5YwQqr1fuzFjml=9jj@BKz-a5zD*_svfsMyyu`tiWOaTFReRPD=jO= zUk|v>rX1(>L}#6y9Ec58A_2l||IB z7zSsy`h^hzMr+hsE)bb73h}MZnx8pY#-jG(7|2qnZcS2H?8Zi=As`L5Avk#y?VaWi z=}J+c*Z@zVoWuRr05QZ{L~QiR9vp@kEZa!KMnQR6g;2Pzz9oO}rABBT20BJYd+jrV zs)$=^EuEdyacn%EvS}#-+DCs0PuI2 zy12b{V5egs!)zk8zHo<-7T9YMXf+wc&=Q@bBmLV=u3Vm|PKS$kk)`zI&FfSzX@Y3! zuOyct#!zu6|LDcvgh>2bGo zVwXKMT&Hr$?W>`;)$3@((mqR2u~v(Qye2X3s2ku91omB$vbzqd z65>#Vc~QnSQ+s83G5zQ0{5EoYvF;o9TB@U2^y=h77o26QhdMRx9%FgR&yon5m`UkK zQF~s=zDx2k5X2`AxafU?Azsjk_4eL zm;>Ub@_w5XoFJbBp&eZ@y40>;1jgx>vVOhXtnt}bg!|CMam;S!Ybpt-P5U5;XUsS@ zjQvEWP~vt;v#phB8)dEWCQ_6}R7hbz_S2_NN1@&VZ1*7;%im^jgZD-Fk&s=|GMJ0$ zLYdOA=sqEf2{?3jj7BU_y_t4U@!D9(ATR|tAEw{(k>VMMTTr-~!LUT_u_S#+Mxgx| zBw^Hk#+ns;%5A51W0|fM?82jtFtqIfekWh66(sCS)S<-d0Aq?RYM_&=ndig}1)h72 zz8XoGo;`s7Qr5te^^tYwJ#^xoOEHIzdr;)!J=O2JNf~8+>uaXG0$tvJZ=}!PGyP!j zb@OLS_#L~@Su?2;R>cy&btFN|hFXJoO*KH|CHkIWXnoYC8C5qLMGq$`>)oS#(ep_B zEON#B+mWBqa#aa;m&kt-Z~|@34pblSX(0$Z;tfqFpIv1G2GZ-i%T%^u+kRGKBGh44rehr$NEF?mdBW#AlaCnJ$yI67=WkA7H7Ek zyB&#{=`tn@t-9*QOHPW)Nl)`G*)V(rGjwnQAT04?B4VD9qgENwMT&o$VnhUUdNL@? zKgD0l{}I5RD0`-^j4Y#jNQuWm%dp6BIn_QiS6~H&nJ93KH~nk0#Xns(pxRNxUIK_j z3wX1H{3*WHcMVvZ+ORQxwvn@1TPJzxEFYi$ioo{(xvDIPtac&cEKEwvlehY=SY_)& zr)-z|Tf404T>J3wa1xr&b@Yv?*D|TDL_kkH8&tOpBG1VsGx;3>jc#QinmHD-y5KQ~ zY01TGP`Gir(QH3e@^{I?I{~&ICER?mZ6JgjZ(iba;%*K2vL6-Hzt(Wv??}-a^?n=1 z_c*8R0x=`Ru<7T16Rw!dE+7;`bZ3=0=DnFi4g){xvG>Y?YA$E??e1F7t7bB9Bd*-w zqG<##2)<6)Y ziszmt$MUWtBrA|9-wvUu3&b)mpzsAWv#o4`3*qIeomFx!aSpkML*}>aXD9!r^d+8W zdd;(SoFR^mDiWNBt>6`wuTgAkF8PQ$Sll{iZIT9m0(2_w_aGehV%Qm6?he+MpqGI=C?aBZYJCG>WUtO8p}8n? zYFV;JlqEt9Ky;Bh7lXI2A(f@SI|1|U$C2P?&y7N7wkKdUCn``<@Fr7-)V&;pxsW;0 zfR)wl1|q};+4c6Iqmfyf5->`m8-XIHdD1Tt-@Y~idUs)X;en<)>?RGIAIEV0;8jAA zP~m@|kYO8u@!f~&;Ce(0G9Hh!$t~!uvrKNHwio9dSg<|uPTUK(*$uGyd_I|B&z=+L@cG1KxeQc*K2|x!-9J%svBfQ~H6&+%+VgrLrd1vskj!O?Q z@5FA)*RV3+ZvwGt+f~{W8W=kJ1SY{7vOIw{aKvIVea702)-nwpTdQ=$ZUnX%NP^l# zBm29Z2<}p9$3G@7ff3^au2gJf8gA=oA1a~?B>in@iAU}j^PZY_U1RT%&drAC@x_TYo5>xJh`pk78$P8n_9mEt(FNMbWj*WAU_)3c993XLZT zUe}4aA(4RJH&SI@d18p`UT2W-`8mp)5ZIGj`^E?u6I=)@T8ZMS&qL3QK?yrpo#~<<>vZ+uDa?B94pX?72uV}TD!vK6| z#DRVNIYtZJbCgWlL~m5O8n?H%?TurI-74S#j`GgHw)?T35G>O|jIiDGu|Ke30D=kW zwmz(Yf$>fi;od6%rEJ{S+@ri!(NO-&7UoOI+>2q@dM6wyM_ z{5xzCcwZIV(Zl=w*?64|GDb1=w?=Xa-6y}=jqC-jQkS+~yiNaS&jKu4Z44`BagHL% ziGmjghNnv_qGKAUba_%tDcMG#-$sfK+WuMX+0bH@4CGl7_GG?Q2`s`}lz0Fe1t}ZI zuC{3E*vDP~s14yrC*TixrAd6N^?{IY5LY3z#q-#XO6>YVwdvYdCNl&0P`-=tU}DI* zSyGB^LNg*oeTBg`YxZtbmRCL>WP2$XRn5PPEl_WmX9er(Rb12@%P6itlK)#t~*fAFRw01fzhevXeR1OP)56>R$yTIo`UcAu;n_8+4-}-as8gz1bia#seao#=Nn;&iNdfwx{jOiXbTQ1k9^zfE1rN6ILg=DR5z3QBM6@EVb zsr;b)NO?OvK|8?9<+1nLIQMznO1oTg3|{TD`TYKo^!kX`Mel@g-}HPretFeJBo}k+ z1>$Y;ZtwyA%sXl$J0bUj_io|={H^Y#>TOH^bKiB(`}=#;I`}l(E!}n3^XHrg+vm`u z$raw6&4bPhci(6Fr^RQ%2iscQ>QXM+dD7=KM0VRV-0e9YYo#3v7}(aZOP1+#gF|RB zIqipF`>V)AS-KQIzsn8I;VO@n=B_yubXW8x&&;j)A(E`D)?2XKLsXgyd#bAg zZ1uHhJH^4q|3U7+DovXwL}se?OYf2s{8`@Ce#a^d`a?Nav*uq0#o=0LIe(?T<R4#w=QM9I2HNh z;77zKZG8woR&qBVBf<#`4kjk8xP!nPFE%x@)g+23%gk$o(ur9gP(aN(jJGN${J%sK z)zy-0|ez)c~XWd+Lyqu=((3f-ita@TU=1w|1YL-}EQP z0aDFSLz4G~lLmh$!NoA9aeIfS9&ZMy6@+=P!Hn)`us{3HlxXuOkAEf<=(Blmigbm_ z8hh6BQ?=Zpww?a~%`YB-aA-eAHIjekTfH*k_cAw{?y)x-V7`aqdnm#~- zyef`^q?XX=qcx)IP1)R3WZ*sa;A*VEI73lA)a3|)r3JjXw%U;7qM&AY=8Pd=A!QYtCZ$`vj(H4CtjYcyC#t4I7NaiBBA-k z$=?_1Wq6VGxk@aZj;xF)F_#4QvwA1_;&W)V7#`mqH|zMMXG1Y5@7U^3s()U?T$B5b z{AA{{TnkGBieSsz`u7}M8j2TyyUA|whhF0Pk#&{n(#y@i>p^+fm9OzMDQ;*PZ&6wR z35FFbT9_|X1>PE#SskzWeZ?9LA{eP7YUXFh4 z@}i4Sop4BCS;Z7>2Y!NQ3<2+vz!AnrOp#=I4tv@97jof@$q0v?SQiClc?G5b(EltZ zb2t3B^RorcqijwpeQZ4TGRYa(hx24cLS&e)3r2MV$Y^+Reu#WMO!X|z2qXoGk?al< z_&Yvuk-KFAH>mNnCj~m;YE2gz1ZZIDlf0J8Lfb>y4= zK@V?I&w6faYpAxY3abP@hh1Lb&Q9*)Zm)67%v_MrU_~*#RWc2IK1nP;G($Ktd%hhO zVgt@wx=^(>{&tSNytxU#WsHkVUbXCsiPkAaes{?~%dwPe@u%x-JaF(^-0~CbYbU!% zyPL;2M&AjyKMWC?ND*&2P(^!?5*sVNaecoup*| zkm}INA6{3l18aOz59>1ew(p_WW!!$%9W-5Pnng)ySJbuQCcOq3d-*Q!E|YVqiN_rg z*krnZfDhGR$FoPg3SCgk#?i6!HeT5Km!I_Rv}>^uH1Q9M($8Y-h}>e>=n}?;bq~6S zZ-er&i!l3{{GzyZmlO4w|6JU7Zo!RVVlv{?lgVBbOXDBLB%{nauvRe6jtik?@&`_9KH01(pREn@^#oH2wME1P>l^*bhmM z9H5G#tq$(c6cLxdD`R0{x8nNA@%HOx$V{L1X`Ty5!KRD2llk>`=}NcQn`~&0NDmRG zwp0$%=l$YiL4BT>9hSNW^r+PvKD_4V7Qc`1v~Y*aOtUu_vucb(apH2S3`p$zo0XlS zC|y)DA2A-g=M3f2z^2hgc5v+$s1QJ~Q4)MVT#Au*sO)$!>}e`2P7uU@Q3Apf>jfr3 zc$qnb+$f-O>CHMU;eO;~e8i|LwGM1dy%gHM9ei~M5gupE)LwEdiPruqUC>u~(1|~{ zE+%1$ZEvfPCv{=7Od?YBCuY7&9e;BUX`0*OZaI7>BB}9V!4Mm2wMe((VEU&3@oK5U zX>0u0;&|8dAK5l_mMZ`s;GOL^TsLjGO_MiZ%cyKCQ=WuWxRn5{CPY8JVX41qj6Nm# z#mK2Zv%Mgs>Q2`Mqn;5!=$9Fof0wJwsYXW88nJUiSGmbKIhCKG4Q87c#(S5lj0hlj za+oC6nUeacB}!J%k-h6Y#zc21ZHk^SrjRxmG=^`fxwR9E7P-wlYC-W!!DejF?n@ zDsE6@3q+LX{5|ExPQgMiRIiU)RYZ*{B&&OrvFX$TqPADX^5EE|H- zZL;3c|FYx;=1TtY6(D6r_qsjDMU8Frkk(857cN-|bQEf_*1%aerF|>y_NN9rwcp+X zVWeDy^b7VB{Ws=WxMe<#5}eMwJ3ITo^G{E$1d!@@k;AZh$(V*h{O zx@Hdmz{h9w*DogjM+trwClO3D37g;UOmPW8UMBrej%#SXjXi4uQW)LW>W=<%c_)0^ zNxbP-hgSTv-UBvWPcBpX)#GVBzdRH^;?;L-09?}L(HGOOksp*UFo`KM<;cy{(Dmkt znA^r2GuBgtCtq|8MMzuCU{9c{nK>k?(?mqFEQWMQYjEot3X`z{<@9dWO~gYJ>}tXq zO?Z8($8`HSZ6*MFruuIFo}C3Vad&T8ol1NM^VqoGLH6n#Txa};@ZKsOQ!sq1BTXO;q|BYn$r(;TeF87+pg06FCg-iFmDew+SC1(=I zZO?59JonU{M^A8rEtkILpb=d}^N4CeC;Lhjm35%}^-pM5(i_KxXSCg3=?vBTS9 zR!13R#|*&yTE`oN4|De+3L@fX{&!n61!w*i=L_}BVz6iJ(#OD4x~53% z%F$$c0|`qIK@2WVjbPLlUOqJfv*_7dlNun{x*YHu(59b$NGR#v(FQbAX_x(Ar9&~ZQZt082po3dSZ=J7R4 zML2ZsFv!E9kTDK_aoxgK;&Bk-U9d`bv|MS(XGM69|9ZYsNNF=*CX`xA4s%6G_po=r z>u4B1Z8~s;kqs;0I&pCG#<(Gb{0S8&g^>&aG-?iYYQfzhJcz@E1hmy2DI{RauxN*y zt4bGpfYGZLxu9^+fp1E|zfl902#q@)gv#1UasUjkmLceA5CMU)r+`r7KR7KvS@}&- zbs@egF6?ymenbpr-k?dci$usj6=tULYzX+flo%l^{ zGi#2D2>swH#kq%-6e%?5eYmnKd)4);8b^rH4tr==Z0&eaHU&wx<((Y_OzWQ|nMNZkissL2K8v z-{mGX+zJF4($Bo)`R5eBdp0(~%49F}Blo3|Z$_aoUk-x(E(A~n*i$Rx?OuZQEPMGhb6_wbQ#D8f|FW>8tcbJ?|A z*}^($J5EtLM_!-u%ig1-W|6g)X5{DI^+v_Kahr1@nxLG}ED6)GAIS4UFwAP{bg0>H z=f0mDVROE^MfeU3Z^{*I>d%8#>4d>DcUhDUn*Ks2VxyZk<4LJ;r4}-0P|Iu?%D@>q zT%oIbPD@0%B5KS-g?h~a(!Uhe1VDsbNRsCKgdRfVrSCg z(AeJCCh#${WKsZ}k_}r|%YC7QywDob1r{talnkNVCFngmB+dgmFrE{RRM#(S78DjH0-l?u5>>qCk?9u@R>UPlW^q4YeLbFkm=mpHHH-qalc_v8r@# zmc)AqXBgYOi03-%yi;l}6{;Va{x^cnaABHCLgteDdCh%g=0vPh6z-qU!NGjymxXNq)a4&!Kvtw^H@4aRyGaDz%-B(hD8e`Fn*x3k5cc)g7e%oZrHYBd1a+J}N4Q2I$p}B6h!H_2>KL&a0JYmm)u8uilTo7t&V%~cxw;*F(Xy7-L>P9PE@ehSh0 zOJ3^vW}FvD-(LxewG!@j3W-;4p&;ytZTQeZsxLz>Xe7se4#;LsEB{81h(6k@9K$lU z!i~%Q>${U=1v$pq-qqw~)$lIIB~~FqhWkib{6>5A3bU6~Q60W$E$`*CZO!|V+|en) zr2asb&zcbn8fA!z3K{@j@*=_f*vn%kGkYyZY^w$#o~twl0_~Mrv~d_?$Jo_4_O994 zu{Vq?9c_D5#R#f%BRBP_NRR9G%}@?AndKTcKLs@Whb-QfUok3C;=Fv}?j)J_4Xsuw zUjF9=kDxlxSl0EzX*e>Pgs(TFO)yL>A)FursS2O)(Wt3tozJz!hmop}=DC@JL}_{p zSSIyV3(2LJ?CW}z%u0CwwhJkKz$YB}8$m;>#8)uB6dlmL~T|G_qKkTr}2(Rg`;DpBnx;`|D6o@cfJKu7M7#T8Q8e2Y2 zy#xHveZiT5elRIqolZEz`Ggu_&USBY#qr+Ws_JNlkBn*9o+u5}`bK_ItRNhRwfpIy z;B7w7hi$L2MOBjA0CkY_ng$p11OhTDEt*TjXnPhNp?`{kLZfcd+MXg?-A@1|dn4h3 zotmv`51P)L0=9QW_jbPRgfadpJ7#s$z9SM_O8^dB8}OOzPWgQp&4`lVx4a-9TWT1uuN2j~$K4^WkA(pW0}M+? zZ@Uj@WNKARoa`;+Bt@I9=qdY&LyB}uW%IASKWrNLBk#)ibuHR~tApZIECfuSEDRGr zYLG-Ft1V(68Jz&2+L>m%8*o0X*e$DMV>lJ_XYXysE>W@)$E@36qmaD7vn-O z+`k7yH5Mk>T5h#>PM0UD}E<1a!xg=ODsQ1^y}_ZoB@#ubtJ%G(#}kh2t)D!?#u8EAI|{O$e6 z_nw)xF7+rZc`|vYCu!f#1{s$~u=AM?@~nC&lOUl&3V07bqi*JSt_qEpRtq^$y2_GO ztxXxVIpF$oxKBpt@L6M!8VCIAjQqQ!-K?N|h1;KZL zafrbwz)c;SJ&u$V1A#W4sOfWEp1gAe;Jq68#*T#u&2Pzq8je*3^n+3ItMrB1JtIP+ zA>DSU!=aad1aI@aDb;gN`j)|A=!c~eJ@lFNAEePCsIYjbejR_z{3Lx~6G&g%R#;L= z07!~FL%yc|9tAD`H2`$bd{jJcP-X1ieElQ4^LqtwKU{3hd`stB(D`NF-8hh0d~@Bg zR)0oM=I5pb;3&`A767^V=<}xN$#;%0*!n)-k&KUb@Jq3-y^9GxNqx3FO~+IJTjsH8 z7}CyUWL}5roYO6I>SNA~pcfWvH)j#K!E_F>K9scc)H5scRB=6;5>H(mHr9*Nr#R1& z*Cvc9&;8JY3a}iwdlkdJ|7G#DU{EDriAKDT_n{AOM-aR_q3groJy;ZXIa@8XF)ZLhV<(ya4MBhSlVZ7 z8D4VI@r&b{2aTVfXsaxYA1DKOD~%~TF#D|u>VxrUCIytu(mn!oNN#9Q`8L!H&o^G| zHLus|ty*hE1){e=2)SevTnWFgMeN={m)C)d0_v(;L5Zi#lmZsL&^@NSzfW)en1VZK zvA{U-cIOCc=-N%-N7}$NV{MT%nu)D_f>m$2Sb<~m3_+HMUZO(f{cS}9#N8D-z9_H zn_7|e)DNlnj!4}bb`B~6&1H5(5<}CU7cTV<{l;D6c08Y2D^rtRq)Okxvo0$dq;oEI`T)ztRiS7zbc@Jw z!zjyUTvROx&8vOZupM+ADeQtV4DH}ZuM2Euz2&p=YqIEiZy{p$Rg6}v^at|w(mnW% zGSOw@32y~u%&h&_6;eN8y)5VSU+W!%O;qDUn*7lu0$$3Kuw&X8^i}Nx`l=^TaHT_W zH+H9Ar*Ur-e(fNz>g!&!GE~ z)HjT%UQ@}?3$j|?GEGK=wT|u2TW!1yb?EL}?Lyr(AQ{xwj$XFP@I=WF&?%$hwL)}C zd$ivh;*z2rO$txwTXj`h`_Mb4-3JNeZ)`&nbr1))p(sTQKKbN3`_TIy2^M5my`tb0nLW7$BL<=Dk?{x-g3~TH#c9upI*(au? zZ@9y0OX&?b)h=6!8>#7I)#!V$oX?-{vsbi@%k#9hRcepd=gDA&ABsL4FR#X@vvnj{ zA~`#9oV0F2V!n8d!UHoJHi1F5o3LTM>9$@YYhEAaJnZrqx^lQFCQJCEkH%_!!p6%f z0zZUb5;l5o5IkWwlz)GxyyfU3PMVs^B8}!z#lH5GLkb>+?K;!BkC>boU(e&^GPo*+ z#cnHwCr2(I|GOCZr!;attvd}28Y}d(P9k4j(_Ocp5=Y{1P=`)>05uWPay4|;q-svD z>}bF;-*MbL3R~DmE-pG#%~H!ck!gFH!GCn!Ppjl!ZHU9TcGd=~8{C0c>`ho=SKHqjR_~%T~ko`Hh{Mw)i zKa*f}Dvl5mD@XVgAHB%R10DT*dVK)F2@z>4>kaE^70f7aQ+TFF!8jioO9Oo^2UK95 z!wrIZWxs?SKkPU7mQHjoL5(;k-`;-a;VO?+qnycDRq$f#PehhI-P@X7vqg41&zdp< zK6=d=FpE*<6OgrB9gB5tjDqG=`tukFBN2xIbZ^EW!t^< zlY@)KS2704Y_H@2VNj|hD!a3U5OVKHc@)3}KVGH}V zB3CuUgGo5Z;#0zH@*rzMX%LYh-k3g>iAeQba*Ui)NQKNXXl99qx$;6yR`|g-Spg4@ zI~hMGuwMwPOWn~jgyr?9XtMUH&qpSYc4)oEf6NpY7Wn;%pXH2Vl}@RJ!c%FyWqC2| zceal?Sw0c2S+Nkf5Ki}(JTVFfb;*~G%<@D5U|YK+pPz;@hrOCg$h9+EoZ;BRdB-nP zHu-7Hc;PC+Tc&n(_5DmBSLccTJDE%|)e1(XNp`S62^^!F1D`|9GIsPK=`eeb6yJ($ zw3tKO1Qzd%uI<2I*XZ+=NgUeW`uoW-shXmd?H{XsSG*@Z0(wahf#D7` z+fMgF6Xm-B((|`_#=5JMY2N@JKfYmMz)S~-Rl%aB3muP2oZlRCS1*3uZ=WC;*y+St z1~LN?<@Ogm#|8xRyCH58FKwxLjqzR=-V1Po1|?3%gGSjhv=#uk>;bC>T46M9W8zCQK1777#W0BXpYYrg(|JR5Upp^atm!X> zX)D?nq3xli;`FO%^M#^r+OzZ{`)(IJ=Vw5XiT9->IptUnJk~g~t{@Ux;2By=oBLFt z*i%9T_d2yr;S5HLUpH1r0O)|HHD9;T4$XUM^|zufp*QskBlp!LJf4m*%$75#96*Fg z86InMsr`zd<<9HjyDmF>(b4vYg{xOHs$rKx^V{XAUR$)lem^yqhPxa!6H~_>=LjOO zwElOpv*N09+Hb%?;D_Nu4j&Kr(tKOgo~IW+7Xb7uzChI|tIRFRvOf-9_E`)g$M^JxoN+3(&6o8x9)kw*lP0U@23|0^ya(cds)?-ctpZkZ;2a4iCj5jMnXVOnX< zNlPtHi?0rNVQrJkYW#0Asa0#tS0JIso*C~TKwoZH+F!xPl{HL?U#b- z9qsFptChzZ-+l2S-e)Vjg%GDQ%lS}M|Gi3GT|Q8+AtAcjGq295WX!DvWp=&3KZ_V- zD&Sf&D7#E?raG_U?9dp?H@_Vou1It#LIYqXmWN- zHzI%6@4o$_Li_~2m{flH>qC(830|QTh1^l-#yt-ip>DL#!v)IR2kO01c31Le zo%f8dz6D7QJb9m7oRD2VD+Y9qqW;HhbY#PGUa8(fQvo1$B30uh%xY`?NyS=W?A8*` zU-*c7is$)2n;->n=T7Zou(85;apChq0ms;1WA<(aA`tIUmh3=ar1GoOkdgMuLB|JO z6W7;ndQurw;K1eB7b=&}M8-bb$WEPZG+#8sz?(UfrY8If$ zbd=W;n!gX}T$Bw2QHOkd8Y{W2{RZVln&pawkQ)qmV979WvYB+hAMJ31YXvG56hx!( z!~k-rK-(J`(*M^;TGz;OL?nja<&gyL%zK<3 zWQB1Y!oY>x?9AYGX9dci;q=%SJdj3-TbwU!*8G3&aM6JgUPv-PrrQtF1-wqwbVLB~ z`F<3u1s@+zMpTk#(k}(}22^hAL>jl1f-j8ckp1s{RF47y8s*HGiCxmy0skoicVU&r{&WO&&Xt9LJmW|nY1)tpR!8sk(-lT7O5YZ)&~7o-y>qMqQ<%BXnAkfzG8rg|j&?yW6-NW7y~S4upCRJT##1 zB0(6+>_b*bc8kHqB1ta$M4Fo|2WK{XN#Bthx+watb+K}0WDBwgYX!q-EADAO9!Eq4 z_h2W))!$JogL7D;*gIhrU5>#~z!^CgZn9ypr#RXPuCW8e$yDF-T#LFuw;329b_vrqJ2jqf%t(4xNA0wp$`WeBCKjTo+KYsLyeF>z0;43*4K@@MRPX7CzyhCfdc#e(5Uv(P_A=Q>dRpR1=g~CMU5av2O_1?E1f@3tHwr{pcdOyW?14@g-XAL z>F3hfTFT$DSxXsWEc8pMw+gK(4iSF?9<}G+1E!y z3g9U-SRzr(CQLAy2^dH(attewl>z8ZL?;fe*Z4<>oVg6#l%JWZPDN{Bt-*~+eG7|E zA;3p2k5f|(=MDJ$lY2uIR;O5;%5ZX#0SNZ!x+UgBykg?O0ON|TG|0uzTpTFxnh@*i z5@@<(;PWgjabrsjo?dJ?WIx)*h&`ud^}DmP)II6PPuhVn1GkH0dEx6Hf7b-HBEWAy zf;XdNutt(Q?7WEU66-TdO>qv~N>b*Z+)z4Qt#NOAi(a(9dFx(@NS^oRJ=cOEJ#xFt_yE{*Zpl{57=^DET|C=}P8I^sn_yS z&g_i~LOy zRtwg}Y}*W5;G6c{2rg+`*3WB2{`_v8GY&gN1i9&(j%lwT?DIkU;sYR%O{zfjSJkTv zWsV|v>GGNt=g3zBw=hlhwv zUgf5i)yR{KL3Ilq$$ya)loskXf8ftH1dE)j@R93fP|I4_UNxTgNB0PO%4f~%p8LWm z|6d6`D1&KI1+jn`L*8_j$u`*5&D&WVLAx|20TAHiyUcX~wd|vK-xSP#mxJmrq*f*5 zmRv;>U#0FIL<=s;g#%#5W07G}=7INvR-LYLkF1|Qx<1{3&y#i8H-92`cKDPj7fH3( zg<-^!V~37ov`;kP--$-pF0<$1KR_sQ}1 z(dr&`Ew?3#^oEiGa`JS|!~9+eUb|gaz)DWJ)EWJc+)8|tf!?r8=*z|6(1Q}Vo}6+K zHReu{ZP*Aarhjt3d^AD0Xdb2HUCmb6I7NeQT#DsOUcv#cJ{eCcS#%CK1}Ky8igu_} zA0>&ZJcLO9G}yl{U)LV*TS43{x2Ni+ev$BT8?6h}9xBQi)2bX@;`~bu^icxkJmxx= zTngYC&!r7?yD$!4#+1HkVoe<7Xf1@h@`?^_Y%c`{roBpa_N2%HUSeyTRP3MSl!vuv za1uWjR5fKB>}L|GxvAXpkCBuye$uX9r{X(gQd3&wbrU~rzoyvlH3W9&{2%ZayE}Y( z0GKrP1AS?CrBgt4;6{7g{JMV1|Bs24>jVYtWj2yNi3tF{8)-ARR3GF~7_6JkPmX~apc~7g#kpw@=FJw7>0s9x#+i}Mh+Veebl>wwo2z771(`k{-klM=`Z)25UVInyQVfkM ze>859Ujlc;#_7=8d<%Q3>$9!VXF~7)b@RxGwlQXOO)O2F>hQV;7l^T zNWM+UKA)_*%TO=35ng?xo8-I&Gu4Yv$K&hJt5BW?3ZHsC7xBbdDIe_WKFl3?s5>1i$8dxbH62_qQuhQ>H*cWTvj3N)U7J{^qd>PQ z_i8Esw3{n{*xh6wzVt|EDxD(qq%Cl(H9Gll* z++p=lk959SBy2`@=T2zZ$JaY{r1~x2oT;&ujMjc`ldF6r+ZDg85A;sr4e_*!(rT2j zDh2H^Cq{9ZM9V5Z`dQ<>MHppWpe7_ff8m(m(eta?q#YlRr|@|RvW;MmT8 zO|b(=6q2-lUoN^~UF2RSgEq}qBR8{4!v>_4Wp#QCzahL`-4?TPcr?!D)}S@pvc1LN z0m%i5a6GcFm!Zo1?_}BRqRN|#ZXZ!j3ibG`5FoXRaLup-Y7pgZUFv4$DXp0T8~kf= zj>7a<_21`bUBZ5@3>8J`e1Mg8c$E1FUb!S>|g1PD0`ocqubveM1%^pdCrG?rA& zA`3z&8#m}Y14yX}So7AGROHxTxjVL548Gk1PlTYaMoR>6S7NEEe8h6cI);HW zTlUnUukeG54nGOLFR(4iYzY5A<94;*htGArT8TDP}=G@g-wLz+}9BIfrKDtKG1(&$Qm+ z8gbhIR1%onQZT|=@~58jdM3(;b>?@0$`(g9Xr9gQT1YR(-EZ4##;gV z87hh8<2l?j7c{#hc=4`rpBNTzOv7g)Im(hO7F-%|Pj?i%I+P*pU2k_;6gOInUu=si zjovdUsLtm%3l`yw2I|(&=0FVvxVfEi%~4V*4^v#lkn~EwZJUCL3f{0iGPy__it@K7 zj=oRI-rzwvB{F2FIjJ~1BIk3;nm0Zepypy8^!46(<{Z$pk-y`yNmIh<|0}c_(M3S7 z*&CSmX9BMJ0o2x@Sha(&qZ7L`F(E}bzmekyOnS~?`>IWmPOiHWDx4ub6nV4^c^i3N zZUGB0?4CIBRX&cqA;CTX-UBrR5I=FdjD3ZSwiSKw$oj~*n;sRiED1sN}r6^K`0t4&Q36M#XMVbcaqgZn8BG_Lq7 zbXd`)wV*lx==>dlnc>$aINVRt0y$vUo_nVlk_^YxVZ7SgF0E$|8Xu60>ZjZ+SBYvEn#2Idoe4l zGi+ettGYeB#oUL1|0K(rRcQ_STn?$vJqg+PCqa3a?GQNIYl3$hH`5nbT^?!Byzp8g zEg4?r97%T=jcgSG5`y{zv z$dfXVa{PRIhv=~N+`Az9qPz9%jInj%VETuUGxvqB{ZX;Pe-3aBw}BbnVy^YZFEUqiQH0TwM{bcn&^!w<_6?fa^?I%$-^?)2!Hf!I@8(2p`6IWM*&^rVc0k37B zpzVW3KLXPtUmDTgB0!dqO?g^RHJ{#$prQ&5e2CWpv`welh@0 zpR)KenEye8+-0kOP^}%_x+7()>B4&dQeP##L#N-(8>k)TykJiioxFFU*u^~j*3bp2 z6glFFk+Y28$A+eW=s9A_{Dr=I7My`TzUh3&3Qr|42At-W?5uJ`pJ{5!dYx&_(MEXg zR1vgCJc{;H@^qMKINhA9U3Q_7e#t3YmQ~bM;jEbUUPI9Dn=VEi`N*5Rx7mBYr}oNZ z6G_Tr>ZA+lntl!Ln>H)i&PwLOoO%)Srx^x+av3@3aPGCZx-0Ujt>BP#;iV+sIF@tanf@L9 zz27@1g-#gH(ml2Wu$+rNbWXe2Tj9i#!|ArL=VU13Nzr9P`t;|M{mReaa<=(9to2)7 z{X|)CZu$lT`}~3#f)6q`Js!o8A`oYofI=c9l)lo3v+Cdi1+TVI6`%S49dXq*WAd;0nuIfeSZ`1W zPFl|LoMF3<1;KuxFOfN2Jz4M#eEhT3PljT|h75!WJi+N?4EC}Z!# z*TBK6GP@eF_q-+OZ}p89hi$^s7UnYiszbTo||zwdAh~a!TaHY9?3aNJ@WbCCbA3tJvo6Q3NOj=XiSQB@oWuM z9_q>2id^NjenA5p1XVePkjDZRk&Y)<8^idY57!E7ez?5cq{&9#dWa@t39#hdw6B@+ zD3^f6h@_rcHOnH$ia>tBla|vboc9b=&hR~m6hg*kHHt$x_8`FVZP@1U<=h zFN1x!T>b1KLqahl z9%C1w{J%`s(JcFajUPp}7C%<#8K=*%?e7k5}dMLl~`hT^Y&*JJ12 zRME2p=J;7oq?J65mOv7ZnJaf*;k>nwlj8pwK@lDbJh3b<50 zu}b<>-quTcm#p1vsKy`5raziWgo^CsTHgDHlVlyI69!}n6W`}7E9iDt942~reIe|s zE!=7$9GEgDL`I#03-VZOVIdu+TP#XPW|mcISBc9OAy_R&o;~eT4g!!z<{MR##$q3vATstN_!el_3`*?V5(2SryxiMtm?35d?0XFGQhW1O`Yy^Xh z1qz)t`>i|9`%n z)5|LsI8T%ihh0+AQuxHFliz!w zUvv>I_>UuDuF`Y(Ig|VAM;Hmt%W^i0VmM+)lRo$1cHp_(QhGdmtv!0e-Waa0bWa0t z)})9B_xq||OZNdFD|nh?#l_yAaBQiA2^05An;dOoaJ9Nw;^jBI4u!2=5sypuN^D!q zmKG%Xkgc%(1S;Rfz5&-R?z&ROSldmpgC-JtZ!KkE%j2?K8d+B!u#*)A^@`6ypDm_3 zL)r&*=u5Dqc$y*zxQcWQ%}4aF>DG5Zb%iH zJS$h#FP?Emi#dVhE4-E3CjG$k%(nP9d`&vW1{*^l4!$ea&bB(Bmb!2{A81F-x?Fe< z)zG@iZR1nEaKNKy+(E2MIg!z5CJ%VqsV2a$ z&1>bi)f>ao!$dIJ-llTTpa2frrld0%wCOpm?G*BDQs}!S)s{J}t(1jD&V`kfr`9AT zOpjyyaX3kdl@ntFd6_(eoQwGXqVhe8dJYRNi%>5q=+8GV;T}_SE6AM%s6gUGOkAA; z6HTss8RxTiiD#`O&{R~ikPZ~VV7^mjq}KUUx#~8o;)wsb+~HU_-EX7<0Ows$xaKgQ zkJ=pAOV+HRnGokOaIqU-ofGV?r#_-;e5S6T>MX6R3elJAy@Wh{jcpcxw;wi@>17J- z1HL#H)|qGmniy;5or{G*hU;mS?GPsatXE@U=&nZoN_8_IEq^RHf2~O1!Lvlmw`PCz z_zWqOt-YQ_1EkWQU^0q@NB}o7>%)oL*}DxSnq#&Wybwapql?0@AZ3!c)$Z&Ye3hs0 znQ-eQwJ>YciI|IrL3gM+LhH)g6pJ9VQTW)t$^J&8Rvej=(TX5?`nrkg{HRAKqC7|c43E{2#0j0S335K zRbwHMBQg{b5he$*%)9^v>6Szg+wZcRRb9Ue8IOxe6m~Y@6RYwQR#FhPe=x>dKS{Yv z)gUtyf*36sZ$#}JPdrpjSV||5SvN*8o^gjk`hGwc_uje&^Q)+Q*4lah^&BmyX~@?S zg^EcX(C4&5i9h6j7vnC*wg%2_mHjV@IDdLVzUG^{&x|N&nYV2U_*@{?BlNlSKq+QmGo<9QTIsBFLz zK>{YJuJy=!9h-*Td)NTy2F%sV1Kri9F0fmK5-Rb+A7SE-vi1l?WiP|dSTQVsPmDJA zE0>Yh5-2B`%%er{jx^|)DYUoEDbHd?nrPfv(#v=feoGP`eE{GAhjg(?LUyiS+^;<# z08|L=E$xt@I06C*5CZ8XyUZO9N6*hlgo*hVr_y0m#Rrw>8d9LLW1r}`fC8g6G6z%{ zq-^QnV6pXlKKuxPbFwB!E4OoJcqkmkrwTRD>^_(P00000000000000000000000yp z>U01BPyfEE0gwGofMfqtpi2L#&;c9%r$7Jz00Nu+R2NV6P(ZW)RRjhX^-w}T{ZtSD z9RJkl00000GXL~`0AGJq1ONa40k{25fB*mh000000000000000000000000000000 D)9ZpJ literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/dreamcast.webp b/themes/linear-es-de/system/systemart/dreamcast.webp new file mode 100644 index 0000000000000000000000000000000000000000..97ce8e0c8d0746ede647398fd0fcd7d2e324318d GIT binary patch literal 25698 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 BV`2aR literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/easyrpg.webp b/themes/linear-es-de/system/systemart/easyrpg.webp new file mode 100644 index 0000000000000000000000000000000000000000..14b075beff88b8433165c2d46f5d244a7a4bdb86 GIT binary patch literal 33802 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 literal 0 HcmV?d00001 diff --git a/themes/linear-es-de/system/systemart/electron.webp b/themes/linear-es-de/system/systemart/electron.webp new file mode 100644 index 0000000000000000000000000000000000000000..fbd4f5fca7601691a7fec5764095f847f3bae1fa GIT binary patch literal 39418 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