├── Docs
├── menu.gif
├── media_types.png
├── core_per_game.png
├── settings_log.png
├── setup_sort_games.png
├── layout_menu_fixed.png
├── settings_first_run.png
├── layout_menu_original.png
├── setup_sort_platform.png
├── setup_sort_playlist.png
├── layout_collection_fixed.png
├── layout_collection_group.png
├── layout_collection_original.png
├── settings_data_source_add.png
├── settings_personalization.png
├── setup_launchbox_import_add.png
├── setup_ppsspp_edit_emulator.png
├── setup_xbsx2_edit_emulator.png
├── settings_data_source_choose.png
├── setup_dolphin_edit_emulator.png
├── setup_launchbox_import_copy.png
├── setup_retroarch_quit_hotkey.png
├── layout_collection_stretch_fill.png
├── settings_data_source_activate.png
├── setup_duckstation_edit_emulator.png
├── setup_launchbox_import_emulator.png
├── setup_launchbox_import_platform.png
├── setup_retrixgold_edit_emulator.png
├── setup_retroarch_edit_emulator.png
├── setup_xeniacanary_edit_emulator.png
├── layout_collection_stretch_uniform.png
├── setup_ppsspp_associated_platforms.png
├── setup_xbsx2_associated_platforms.png
├── setup_dolphin_associated_platforms.png
├── setup_retroarch_associated_platforms.png
├── setup_duckstation_associated_platforms.png
├── setup_retrixgold_associated_platforms.png
├── setup_xeniacanary_associated_platforms.png
├── layout_collection_stretch_uniform_to_fill.png
├── setup_multiple_data_sources_flash_content.png
├── setup_multiple_data_sources_flash_content_2.png
├── setup_multiple_data_sources_flash_content_4.png
├── setup_multiple_data_sources_flash_content_5.png
├── setup_multiple_data_sources_settings_activate.png
├── setup_multiple_data_sources_settings_activated.png
├── setup_multiple_data_sources_settings_unavailable.png
├── v1.5
│ └── RetroPass.xml
├── v1.6
│ └── RetroPass.xml
├── SettingsLogging.md
├── SetupPPSSPP.md
├── SetupRetriXGold.md
├── SetupDuckStation.md
├── SetupDolphin.md
├── SetupXBSX2.md
├── SetupXeniaCanary.md
├── SetupLaunchBox.md
├── SetupRetroArch.md
├── SetupLaunchBoxSorting.md
├── SetupLaunchBoxImport.md
├── SettingsDataSources.md
├── SettingsPersonalization.md
├── SetupEmulationStation.md
└── SetupMultipleDataSources.md
├── RetroPass
├── Assets
│ ├── empty.png
│ ├── StoreLogo.backup.png
│ ├── LargeTile.scale-100.png
│ ├── LargeTile.scale-125.png
│ ├── LargeTile.scale-150.png
│ ├── LargeTile.scale-200.png
│ ├── LargeTile.scale-400.png
│ ├── SmallTile.scale-100.png
│ ├── SmallTile.scale-125.png
│ ├── SmallTile.scale-150.png
│ ├── SmallTile.scale-200.png
│ ├── SmallTile.scale-400.png
│ ├── StoreLogo.scale-100.png
│ ├── StoreLogo.scale-125.png
│ ├── StoreLogo.scale-150.png
│ ├── StoreLogo.scale-200.png
│ ├── StoreLogo.scale-400.png
│ ├── LockScreenLogo.scale-200.png
│ ├── SplashScreen.scale-100.png
│ ├── SplashScreen.scale-125.png
│ ├── SplashScreen.scale-150.png
│ ├── SplashScreen.scale-200.png
│ ├── SplashScreen.scale-400.png
│ ├── SplashScreenDefault-100.png
│ ├── SplashScreenDefault-125.png
│ ├── SplashScreenDefault-150.png
│ ├── SplashScreenDefault-200.png
│ ├── SplashScreenDefault-400.png
│ ├── Square44x44Logo.scale-100.png
│ ├── Square44x44Logo.scale-125.png
│ ├── Square44x44Logo.scale-150.png
│ ├── Square44x44Logo.scale-200.png
│ ├── Square44x44Logo.scale-400.png
│ ├── Wide310x150Logo.scale-100.png
│ ├── Wide310x150Logo.scale-125.png
│ ├── Wide310x150Logo.scale-150.png
│ ├── Wide310x150Logo.scale-200.png
│ ├── Wide310x150Logo.scale-400.png
│ ├── Square150x150Logo.scale-100.png
│ ├── Square150x150Logo.scale-125.png
│ ├── Square150x150Logo.scale-150.png
│ ├── Square150x150Logo.scale-200.png
│ ├── Square150x150Logo.scale-400.png
│ ├── Square44x44Logo.targetsize-16.png
│ ├── Square44x44Logo.targetsize-24.png
│ ├── Square44x44Logo.targetsize-32.png
│ ├── Square44x44Logo.targetsize-48.png
│ ├── Square44x44Logo.targetsize-256.png
│ ├── Square44x44Logo.altform-unplated_targetsize-16.png
│ ├── Square44x44Logo.altform-unplated_targetsize-32.png
│ ├── Square44x44Logo.altform-unplated_targetsize-48.png
│ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ ├── Square44x44Logo.altform-unplated_targetsize-256.png
│ ├── Square44x44Logo.altform-lightunplated_targetsize-16.png
│ ├── Square44x44Logo.altform-lightunplated_targetsize-24.png
│ ├── Square44x44Logo.altform-lightunplated_targetsize-32.png
│ ├── Square44x44Logo.altform-lightunplated_targetsize-48.png
│ └── Square44x44Logo.altform-lightunplated_targetsize-256.png
├── Resources
│ ├── SearchBackgroundDark_128.png
│ ├── SearchBackgroundLight_128.png
│ └── Themes
│ │ └── ThemeDefault
│ │ └── CommonDefault.xaml.cs
├── PlaylistItem.cs
├── App.xaml
├── PlayLaterControl.xaml.cs
├── Properties
│ ├── AssemblyInfo.cs
│ └── Default.rd.xml
├── SettingsPages
│ ├── SettingsLogPage.xaml.cs
│ ├── SettingsLogPage.xaml
│ ├── SettingsPage.xaml.cs
│ ├── SettingsAddDataSourcePage.xaml.cs
│ ├── SettingsPage.xaml
│ ├── SettingsDataSourcePage.xaml
│ ├── SettingsDataSourcePage.xaml.cs
│ ├── SettingsPersonalizationPage.xaml.cs
│ ├── SettingsAddDataSourcePage.xaml
│ └── SettingsPersonalizationPage.xaml
├── Utils.cs
├── ThemeManager.cs
├── PlayLaterControl.xaml
├── StorageUtils.cs
├── LogPage.xaml
├── Package.appxmanifest
├── Platform.cs
├── Playlist.cs
├── FocusControl.xaml
├── UrlSchemeGenerator.cs
├── DataSource.cs
├── LogPage.xaml.cs
├── FocusControl.xaml.cs
├── SettingsPage.xaml.cs
├── App.xaml.cs
├── ThumbnailCache.cs
├── PlaylistPlayLater.cs
├── GameCollectionPage.xaml
└── SearchPage.xaml
├── AUTHORS.md
├── Temp
└── Job.md
├── .gitattributes
├── RetroPass.sln
├── .github
└── workflows
│ └── main.yml
├── README.md
└── .gitignore
/Docs/menu.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/menu.gif
--------------------------------------------------------------------------------
/Docs/media_types.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/media_types.png
--------------------------------------------------------------------------------
/Docs/core_per_game.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/core_per_game.png
--------------------------------------------------------------------------------
/Docs/settings_log.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/settings_log.png
--------------------------------------------------------------------------------
/Docs/setup_sort_games.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_sort_games.png
--------------------------------------------------------------------------------
/Docs/layout_menu_fixed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/layout_menu_fixed.png
--------------------------------------------------------------------------------
/Docs/settings_first_run.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/settings_first_run.png
--------------------------------------------------------------------------------
/RetroPass/Assets/empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/empty.png
--------------------------------------------------------------------------------
/Docs/layout_menu_original.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/layout_menu_original.png
--------------------------------------------------------------------------------
/Docs/setup_sort_platform.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_sort_platform.png
--------------------------------------------------------------------------------
/Docs/setup_sort_playlist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_sort_playlist.png
--------------------------------------------------------------------------------
/Docs/layout_collection_fixed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/layout_collection_fixed.png
--------------------------------------------------------------------------------
/Docs/layout_collection_group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/layout_collection_group.png
--------------------------------------------------------------------------------
/Docs/layout_collection_original.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/layout_collection_original.png
--------------------------------------------------------------------------------
/Docs/settings_data_source_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/settings_data_source_add.png
--------------------------------------------------------------------------------
/Docs/settings_personalization.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/settings_personalization.png
--------------------------------------------------------------------------------
/Docs/setup_launchbox_import_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_launchbox_import_add.png
--------------------------------------------------------------------------------
/Docs/setup_ppsspp_edit_emulator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_ppsspp_edit_emulator.png
--------------------------------------------------------------------------------
/Docs/setup_xbsx2_edit_emulator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_xbsx2_edit_emulator.png
--------------------------------------------------------------------------------
/Docs/settings_data_source_choose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/settings_data_source_choose.png
--------------------------------------------------------------------------------
/Docs/setup_dolphin_edit_emulator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_dolphin_edit_emulator.png
--------------------------------------------------------------------------------
/Docs/setup_launchbox_import_copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_launchbox_import_copy.png
--------------------------------------------------------------------------------
/Docs/setup_retroarch_quit_hotkey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_retroarch_quit_hotkey.png
--------------------------------------------------------------------------------
/RetroPass/Assets/StoreLogo.backup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/StoreLogo.backup.png
--------------------------------------------------------------------------------
/Docs/layout_collection_stretch_fill.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/layout_collection_stretch_fill.png
--------------------------------------------------------------------------------
/Docs/settings_data_source_activate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/settings_data_source_activate.png
--------------------------------------------------------------------------------
/Docs/setup_duckstation_edit_emulator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_duckstation_edit_emulator.png
--------------------------------------------------------------------------------
/Docs/setup_launchbox_import_emulator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_launchbox_import_emulator.png
--------------------------------------------------------------------------------
/Docs/setup_launchbox_import_platform.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_launchbox_import_platform.png
--------------------------------------------------------------------------------
/Docs/setup_retrixgold_edit_emulator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_retrixgold_edit_emulator.png
--------------------------------------------------------------------------------
/Docs/setup_retroarch_edit_emulator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_retroarch_edit_emulator.png
--------------------------------------------------------------------------------
/Docs/setup_xeniacanary_edit_emulator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_xeniacanary_edit_emulator.png
--------------------------------------------------------------------------------
/RetroPass/Assets/LargeTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/LargeTile.scale-100.png
--------------------------------------------------------------------------------
/RetroPass/Assets/LargeTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/LargeTile.scale-125.png
--------------------------------------------------------------------------------
/RetroPass/Assets/LargeTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/LargeTile.scale-150.png
--------------------------------------------------------------------------------
/RetroPass/Assets/LargeTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/LargeTile.scale-200.png
--------------------------------------------------------------------------------
/RetroPass/Assets/LargeTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/LargeTile.scale-400.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SmallTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SmallTile.scale-100.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SmallTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SmallTile.scale-125.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SmallTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SmallTile.scale-150.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SmallTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SmallTile.scale-200.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SmallTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SmallTile.scale-400.png
--------------------------------------------------------------------------------
/RetroPass/Assets/StoreLogo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/StoreLogo.scale-100.png
--------------------------------------------------------------------------------
/RetroPass/Assets/StoreLogo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/StoreLogo.scale-125.png
--------------------------------------------------------------------------------
/RetroPass/Assets/StoreLogo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/StoreLogo.scale-150.png
--------------------------------------------------------------------------------
/RetroPass/Assets/StoreLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/StoreLogo.scale-200.png
--------------------------------------------------------------------------------
/RetroPass/Assets/StoreLogo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/StoreLogo.scale-400.png
--------------------------------------------------------------------------------
/Docs/layout_collection_stretch_uniform.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/layout_collection_stretch_uniform.png
--------------------------------------------------------------------------------
/Docs/setup_ppsspp_associated_platforms.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_ppsspp_associated_platforms.png
--------------------------------------------------------------------------------
/Docs/setup_xbsx2_associated_platforms.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_xbsx2_associated_platforms.png
--------------------------------------------------------------------------------
/Docs/setup_dolphin_associated_platforms.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_dolphin_associated_platforms.png
--------------------------------------------------------------------------------
/Docs/setup_retroarch_associated_platforms.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_retroarch_associated_platforms.png
--------------------------------------------------------------------------------
/RetroPass/Assets/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SplashScreen.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SplashScreen.scale-100.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SplashScreen.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SplashScreen.scale-125.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SplashScreen.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SplashScreen.scale-150.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SplashScreen.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SplashScreen.scale-400.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SplashScreenDefault-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SplashScreenDefault-100.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SplashScreenDefault-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SplashScreenDefault-125.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SplashScreenDefault-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SplashScreenDefault-150.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SplashScreenDefault-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SplashScreenDefault-200.png
--------------------------------------------------------------------------------
/RetroPass/Assets/SplashScreenDefault-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/SplashScreenDefault-400.png
--------------------------------------------------------------------------------
/Docs/setup_duckstation_associated_platforms.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_duckstation_associated_platforms.png
--------------------------------------------------------------------------------
/Docs/setup_retrixgold_associated_platforms.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_retrixgold_associated_platforms.png
--------------------------------------------------------------------------------
/Docs/setup_xeniacanary_associated_platforms.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_xeniacanary_associated_platforms.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.scale-100.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.scale-125.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.scale-150.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.scale-400.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Wide310x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Wide310x150Logo.scale-100.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Wide310x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Wide310x150Logo.scale-125.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Wide310x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Wide310x150Logo.scale-150.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Wide310x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Wide310x150Logo.scale-400.png
--------------------------------------------------------------------------------
/Docs/layout_collection_stretch_uniform_to_fill.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/layout_collection_stretch_uniform_to_fill.png
--------------------------------------------------------------------------------
/Docs/setup_multiple_data_sources_flash_content.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_multiple_data_sources_flash_content.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square150x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square150x150Logo.scale-100.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square150x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square150x150Logo.scale-125.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square150x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square150x150Logo.scale-150.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square150x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square150x150Logo.scale-400.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.targetsize-16.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.targetsize-24.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.targetsize-32.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.targetsize-48.png
--------------------------------------------------------------------------------
/RetroPass/Resources/SearchBackgroundDark_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Resources/SearchBackgroundDark_128.png
--------------------------------------------------------------------------------
/RetroPass/Resources/SearchBackgroundLight_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Resources/SearchBackgroundLight_128.png
--------------------------------------------------------------------------------
/Docs/setup_multiple_data_sources_flash_content_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_multiple_data_sources_flash_content_2.png
--------------------------------------------------------------------------------
/Docs/setup_multiple_data_sources_flash_content_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_multiple_data_sources_flash_content_4.png
--------------------------------------------------------------------------------
/Docs/setup_multiple_data_sources_flash_content_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_multiple_data_sources_flash_content_5.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.targetsize-256.png
--------------------------------------------------------------------------------
/Docs/setup_multiple_data_sources_settings_activate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_multiple_data_sources_settings_activate.png
--------------------------------------------------------------------------------
/Docs/setup_multiple_data_sources_settings_activated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_multiple_data_sources_settings_activated.png
--------------------------------------------------------------------------------
/Docs/setup_multiple_data_sources_settings_unavailable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/Docs/setup_multiple_data_sources_settings_unavailable.png
--------------------------------------------------------------------------------
/RetroPass/PlaylistItem.cs:
--------------------------------------------------------------------------------
1 | namespace RetroPass
2 | {
3 | public class PlaylistItem
4 | {
5 | public Playlist playlist { get; set; }
6 | public Game game;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/AUTHORS.md:
--------------------------------------------------------------------------------
1 | # RetroPass authors
2 |
3 | ## Development
4 | retropassdev
5 | SirMangler
6 | 𝔇𝔞𝔫𝔭142
7 |
8 | # Testing, QA
9 | JoKu
10 | Danp142
11 | John Birdflu
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.altform-unplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.altform-unplated_targetsize-16.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.altform-unplated_targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.altform-unplated_targetsize-32.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.altform-unplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.altform-unplated_targetsize-48.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.altform-unplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.altform-unplated_targetsize-256.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png
--------------------------------------------------------------------------------
/RetroPass/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/retropassdev/RetroPass/HEAD/RetroPass/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png
--------------------------------------------------------------------------------
/Docs/v1.5/RetroPass.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 | LaunchBox
6 | ./LaunchBox
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Docs/v1.6/RetroPass.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Removable Drive
6 | LaunchBox
7 | ./LaunchBox
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/Docs/SettingsLogging.md:
--------------------------------------------------------------------------------
1 | # Settings - Logging
2 |
3 | 
4 |
5 | 1. Go to Settings -> Logging and check **Enable Logging**.
6 | 2. Quit RetroPass and start it again.
7 | 3. Go to Settings -> Logging.
8 | 4. View log, scroll up and down and notice yellow warning and red error log entries.
9 | 5. Log file is also generated in the local RetroPass folder on Xbox which you can access through Xbox Device Portal.
10 |
11 | Make sure to **turn off** logging after troubleshooting, because writing to a log file slows down app performance.
12 |
--------------------------------------------------------------------------------
/Docs/SetupPPSSPP.md:
--------------------------------------------------------------------------------
1 | # PPSSPP
2 |
3 | ## Setup with LaunchBox
4 |
5 | 1. Open LaunchBox
6 | 2. Go to **Tools -> Manage... -> Emulators**
7 | 3. Click **Add** to add an emulator. Application Path doesn't have to point to real application. It's enough to just input **ppsspp**.
8 |
9 | 
10 |
11 | 4. Click **Associated Platforms**, and make sure "Default Emulator" checkbox is checked for platforms which should be started with PPSPP. If "Default Emulator" is not checked, then RetroArch is used instead.
12 |
13 | 
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/Docs/SetupRetriXGold.md:
--------------------------------------------------------------------------------
1 | # RetriX Gold
2 |
3 | ## Setup with LaunchBox
4 |
5 | 1. Open LaunchBox
6 | 2. Go to **Tools -> Manage... -> Emulators**
7 | 3. Click **Add** to add an emulator. Don't worry about the Application Path parameter. It's enough to just input **RetriX.UWP.exe**
8 |
9 | 
10 |
11 | 4. Click **Associated Platforms**, and make sure "Default Emulator" checkbox is checked for platforms which should be started with RetriX Gold. If "Default Emulator" is not checked, then RetroArch is used instead.
12 |
13 | 
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/Docs/SetupDuckStation.md:
--------------------------------------------------------------------------------
1 | # DuckStation
2 |
3 | ## Setup with LaunchBox
4 |
5 | 1. Open LaunchBox
6 | 2. Go to **Tools -> Manage... -> Emulators**
7 | 3. Click **Add** to add an emulator. Application Path doesn't have to point to real application. It's enough to just input **duckstation**.
8 |
9 | 
10 |
11 | 4. Click **Associated Platforms**, and make sure "Default Emulator" checkbox is checked for platforms which should be started with DuckStation. If "Default Emulator" is not checked, then RetroArch is used instead.
12 |
13 | 
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/Temp/Job.md:
--------------------------------------------------------------------------------
1 | ## Request from retropassdev: I'm currently looking for a job.
2 |
3 | Some details about my qualification:
4 |
5 | - over a decade of experience with Unity in various areas of the engine
6 | - 1 year of experience with Unreal Engine 5 rendering pipeline
7 | - contributed to more than 5 released products/games of small to moderate size
8 | - comfortable with C, C++, C# languages
9 |
10 | Looking for:
11 |
12 | - preferably, a serious full time job opportunity or
13 | - a contract work of significant duration, 3 months minimum
14 |
15 | If you need a mid-senior programmer/game developer, contact me at retropassdev@gmail.com
16 |
17 | Thank you,
18 | retropassdev
19 |
--------------------------------------------------------------------------------
/Docs/SetupDolphin.md:
--------------------------------------------------------------------------------
1 | # Dolphin
2 |
3 | ## Setup with LaunchBox
4 |
5 | 1. Open LaunchBox
6 | 2. Go to **Tools -> Manage... -> Emulators**
7 | 3. Click **Add** to add an emulator. Application Path doesn't have to point to real application. It's enough to just input something like:
8 | * **dolphin.exe**
9 | * **/random_path/dolphin.exe**
10 |
11 |

12 |
13 | 4. Click **Associated Platforms**, and make sure "Default Emulator" checkbox is checked for platforms which should be started with Dolphin. If "Default Emulator" is not checked, then RetroArch is used instead.
14 |
15 | 
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/RetroPass/App.xaml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/Docs/SetupXBSX2.md:
--------------------------------------------------------------------------------
1 | # XBSX2
2 |
3 | ## Setup with LaunchBox
4 |
5 | 1. Open LaunchBox
6 | 2. Go to **Tools -> Manage... -> Emulators**
7 | 3. Click **Add** to add an emulator. Application Path doesn't have to point to real application. It's enough to just input something like:
8 | * **xbsx2.exe**
9 | * **/random_path/xbsx2.exe**
10 | * **pcsx2.exe**
11 | * **/random_path/pcsx2.exe**
12 |
13 |
14 |

15 |
16 | 4. Click **Associated Platforms**, and make sure "Default Emulator" checkbox is checked for platforms which should be started with XBSX2. If "Default Emulator" is not checked, then RetroArch is used instead.
17 |
18 | 
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/Docs/SetupXeniaCanary.md:
--------------------------------------------------------------------------------
1 | # Xenia Canary
2 |
3 | ## Setup with LaunchBox
4 |
5 | 1. Open LaunchBox
6 | 2. Go to **Tools -> Manage... -> Emulators**
7 | 3. Click **Add** to add an emulator. Application Path doesn't have to point to real application. It's enough to just input:
8 | * **xenia-canary.exe**
9 | * **/random_path/xenia-canary.exe**
10 | * **xeniacanary.exe**
11 | * **/random_path/xeniacanary.exe**
12 |
13 |

14 |
15 | 4. Click **Associated Platforms**, and make sure "Default Emulator" checkbox is checked for platforms which should be started with Xenia Canary. If "Default Emulator" is not checked, then RetroArch is used instead.
16 |
17 | 
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/RetroPass/Resources/Themes/ThemeDefault/CommonDefault.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Runtime.InteropServices.WindowsRuntime;
6 | using Windows.Foundation;
7 | using Windows.Foundation.Collections;
8 | using Windows.UI.Xaml;
9 | using Windows.UI.Xaml.Controls;
10 | using Windows.UI.Xaml.Controls.Primitives;
11 | using Windows.UI.Xaml.Data;
12 | using Windows.UI.Xaml.Input;
13 | using Windows.UI.Xaml.Media;
14 | using Windows.UI.Xaml.Navigation;
15 |
16 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
17 |
18 | namespace RetroPass.Resources.Themes.ThemeDefault
19 | {
20 | ///
21 | /// An empty page that can be used on its own or navigated to within a Frame.
22 | ///
23 | public sealed partial class CommonDefault
24 | {
25 | public CommonDefault()
26 | {
27 | this.InitializeComponent();
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/RetroPass/PlayLaterControl.xaml.cs:
--------------------------------------------------------------------------------
1 | using Windows.UI.Xaml;
2 | using Windows.UI.Xaml.Controls;
3 |
4 | // The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236
5 |
6 | namespace RetroPass
7 | {
8 | public sealed partial class PlayLaterControl : UserControl
9 | {
10 | public PlayLaterControl()
11 | {
12 | this.InitializeComponent();
13 | }
14 |
15 | public void UpdatePlayLaterControl(PlaylistItem playlistItem, PlaylistPlayLater playlistPlayLater)
16 | {
17 | if (playlistPlayLater != null && playlistItem != null)
18 | {
19 | OverlayPlayLater.Visibility = Visibility.Visible;
20 |
21 | if (playlistPlayLater.GameExists(playlistItem))
22 | {
23 | StatusText.Text = "Remove from Play later";
24 | }
25 | else
26 | {
27 | StatusText.Text = "Add to Play later";
28 | }
29 | }
30 | else
31 | {
32 | OverlayPlayLater.Visibility = Visibility.Collapsed;
33 | }
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Docs/SetupLaunchBox.md:
--------------------------------------------------------------------------------
1 | # Setup with LaunchBox
2 |
3 | 1. **IMPORTANT!!!** Install LaunchBox **directly to external storage**. If you install LaunchBox to a folder on your PC instead and then move it to external storage, configuration will be invalid and you'll get an empty library in RetroPass.
4 | 1. Configure any of the following emulators in LaunchBox:
5 | - [RetroArch](/Docs/SetupRetroArch.md)
6 | - [RetriX Gold](/Docs/SetupRetriXGold.md)
7 | - [Dolphin](/Docs/SetupDolphin.md)
8 | - [XBSX2](/Docs/SetupXBSX2.md)
9 | - [Xenia Canary](/Docs/SetupXeniaCanary.md)
10 | - [PPSSPP](/Docs/SetupPPSSPP.md)
11 | - [DuckStation](/Docs/SetupDuckStation.md)
12 | 1. [Import games](/Docs/SetupLaunchBoxImport.md).
13 | 1. If you want to specify the order of your playlists, platforms and games, you can do so by checking the [LaunchBox playlists, platforms and games sorting](/Docs/SetupLaunchBoxSorting.md) section.
14 | 1. At this point setup is finished. Connect external storage to Xbox and start RetroPass. Follow [Add DataSource](/Docs/SettingsDataSources.md) section.
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/RetroPass/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.InteropServices;
3 |
4 | // General Information about an assembly is controlled through the following
5 | // set of attributes. Change these attribute values to modify the information
6 | // associated with an assembly.
7 | [assembly: AssemblyTitle("RetroPass")]
8 | [assembly: AssemblyDescription("")]
9 | [assembly: AssemblyConfiguration("")]
10 | [assembly: AssemblyCompany("")]
11 | [assembly: AssemblyProduct("RetroPass")]
12 | [assembly: AssemblyCopyright("Copyright © 2021")]
13 | [assembly: AssemblyTrademark("")]
14 | [assembly: AssemblyCulture("")]
15 |
16 | // Version information for an assembly consists of the following four values:
17 | //
18 | // Major Version
19 | // Minor Version
20 | // Build Number
21 | // Revision
22 | //
23 | // You can specify all the values or you can default the Build and Revision Numbers
24 | // by using the '*' as shown below:
25 | // [assembly: AssemblyVersion("1.0.*")]
26 | [assembly: AssemblyVersion("1.0.0.0")]
27 | [assembly: AssemblyFileVersion("1.0.0.0")]
28 | [assembly: ComVisible(false)]
--------------------------------------------------------------------------------
/Docs/SetupRetroArch.md:
--------------------------------------------------------------------------------
1 | # RetroArch
2 |
3 | ## Setup with LaunchBox
4 |
5 | 1. Open LaunchBox
6 | 2. Go to **Tools -> Manage... -> Emulators**
7 | 3. Click **Add** to add an emulator.
8 | 4. In **Emulator Name** dropdown choose **Retroarch**.
9 | 5. **Application Path** doesn't have to point to real application. It's enough to just input **retroarch**.
10 |
11 | 
12 |
13 | 6. Click **Associated Platforms**, and make sure "Default Emulator" checkbox is checked for platforms which should be started with Retroarch.
14 |
15 | 
16 |
17 | 7. Optionally, if you need to set up a different core for a game, go to Launchbox, select the game, open "Edit Metadata/Media" and modify command line under Emulation.
18 |
19 | 
20 |
21 | 8. For seamless experience, it is recommended to setup a hotkey for quitting RetroArch. When content is started from RetroPass, once user exits RetroArch either with the hotkey or through the menu, it will immediately return to RetroPass.
22 |
23 | 
--------------------------------------------------------------------------------
/RetroPass/SettingsPages/SettingsLogPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Windows.Storage;
3 | using Windows.UI.Xaml;
4 | using Windows.UI.Xaml.Controls;
5 | using Windows.UI.Xaml.Navigation;
6 |
7 | namespace RetroPass.SettingsPages
8 | {
9 | public sealed partial class SettingsLogPage : Page
10 | {
11 | public SettingsLogPage()
12 | {
13 | this.InitializeComponent();
14 | }
15 |
16 | protected override void OnNavigatedTo(NavigationEventArgs e)
17 | {
18 | EnableLoggingCheckBox.IsChecked = (bool)ApplicationData.Current.LocalSettings.Values[App.SettingsLoggingEnabled];
19 | base.OnNavigatedTo(e);
20 | }
21 |
22 | private async void EnableLoggingCheckBox_Checked(object sender, RoutedEventArgs e)
23 | {
24 | ApplicationData.Current.LocalSettings.Values[App.SettingsLoggingEnabled] = true;
25 | await LogPage.SetLogging();
26 |
27 | LogFrame.Navigate(typeof(LogPage));
28 | }
29 |
30 | private async void EnableLoggingCheckBox_Unchecked(object sender, RoutedEventArgs e)
31 | {
32 | ApplicationData.Current.LocalSettings.Values[App.SettingsLoggingEnabled] = false;
33 | await LogPage.SetLogging();
34 | LogFrame.Content = null;
35 | }
36 |
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/RetroPass/Utils.cs:
--------------------------------------------------------------------------------
1 | using Windows.UI.Xaml.Media;
2 | using Windows.UI.Xaml;
3 |
4 | namespace RetroPass
5 | {
6 | public class Utils
7 | {
8 | public static T FindChild(DependencyObject parent, string childName) where T : DependencyObject
9 | {
10 | if (parent == null) return null;
11 | T foundChild = null;
12 | int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
13 |
14 | for (int i = 0; i < childrenCount; i++)
15 | {
16 | var child = VisualTreeHelper.GetChild(parent, i);
17 | T childType = child as T;
18 |
19 | if (childType == null)
20 | {
21 | foundChild = FindChild(child, childName);
22 | if (foundChild != null) break;
23 | }
24 | else if (!string.IsNullOrEmpty(childName))
25 | {
26 | var frameworkElement = child as FrameworkElement;
27 | if (frameworkElement != null && frameworkElement.Name == childName)
28 | {
29 | foundChild = (T)child;
30 | break;
31 | }
32 |
33 | foundChild = FindChild(child, childName);
34 | if (foundChild != null) break;
35 | }
36 | else
37 | {
38 | foundChild = (T)child;
39 | break;
40 | }
41 | }
42 |
43 | return foundChild;
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/RetroPass/SettingsPages/SettingsLogPage.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Docs/SetupLaunchBoxSorting.md:
--------------------------------------------------------------------------------
1 | # LaunchBox playlists, platforms and games sorting
2 |
3 | ## Playlists and platforms sorting
4 |
5 | If you wish to override default alphabetic sorting of **platforms and playlists**, provide **Sort Title** parameter. For example, in the following screenshots:
6 | - **Pinball** playlist **Sort Title** is set to **1**
7 | - **Nintendo Entertainment System** platform **Sort Title** is set to **2**
8 |
9 | When imported in RetroPass, **Pinball** is shown first, **Nintendo Entertainment System** second, followed by all the other playlists and platforms shown in alphabetical order. For example, if **Pinball** playlist **Sort Title** is set to **B_Pinball**, it is sorted with other playlists that start with the letter **B**.
10 |
11 |
12 | 
13 |
14 |
15 | 
16 |
17 | ## Games sorting
18 | If you wish to override default alphabetic sorting of **games** within a platform playlist, provide **Sort Title** parameter in **Edit Game** dialog. For example:
19 | - **Lotus Turbo Challenge 2** in **Amiga** platform playlist normally shows under games starting with L letter. Setting **Sort Title** to **000_Lotus_Turbo_Challenge_2** will show it as first or one of the first games in the **Amiga** platform playlist.
20 |
21 | 
22 |
--------------------------------------------------------------------------------
/RetroPass/Properties/Default.rd.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/Docs/SetupLaunchBoxImport.md:
--------------------------------------------------------------------------------
1 | # Setup with LaunchBox - Import Games
2 |
3 | 1. Open LaunchBox
4 | 1. Go to **Tools -> Import -> Rom Files...**
5 | 1. Click **Add Folder** or **Add Files**
6 |
7 | 
8 |
9 | 1. Choose a platform for which you are importing games.
10 |
11 | 
12 |
13 | 1. Choose an emulator configured in step 2.
14 |
15 | 
16 |
17 | 1. Choose to copy or move files into LaunchBox games folder
18 |
19 | 
20 |
21 | 1. **IMPORTANT!!!** When importing your games, LaunchBox asks you to select which media type to download. If you are using LaunchBox just to configure RetroPass, there is no need to download all the media types because RetroPass needs only a subset. It will speed up your setup process and it will make less burden on LaunchBox database. You only need to check these media types:
22 | - "Box - Front"
23 | - "Screenshot - Game Title"
24 | - "Screenshot - Gameplay"
25 | - "Screenshot - Game Select"
26 | - "Video"
27 |
28 |

29 | 1. After content is imported, Click **Finish**.
30 | 1. At this point setup is finished. Connect external storage to Xbox and start RetroPass. Follow [Add DataSource](/Docs/SettingsDataSources.md) section.
--------------------------------------------------------------------------------
/Docs/SettingsDataSources.md:
--------------------------------------------------------------------------------
1 | # Settings - Sources
2 |
3 | 1. If you didn't set up RetroPass before, you need to add a data source.
4 |
5 | 
6 |
7 | 1. Navigate to your LaunchBox or EmulationStation directory on external storage an click **Select** button.
8 |
9 | 
10 |
11 | 1. Set the name of this data source and click **Add** button
12 |
13 | 
14 |
15 | 1. RetroPass configuration file is automatically saved and added to the list of data sources. If your external drive is not formated to NTFS, configuration file might not be saved properly and in that case, you will need to create RetroPass.xml file manually.
16 |
17 | 
18 | 1. Click **Activate** button and then Back
19 | 1. You should see a list of platforms and content.
20 |
21 | **Delete Cache** deletes all cached thumbnails, but also removes data sources that are **Unavailable**.
22 |
23 |
24 | ## Advanced Setup - Multiple Data Sources
25 |
26 | RetroPass can be configured with more than one LaunchBox or EmulationStation data source. Here are a few example scenarios where you might find this setup useful:
27 | * You would like to connect two or more external storages. You have one USB stick that doesn't have enough free space and contains only a subset of your games. You also have a larger SSD where you keep the rest of your game collection.
28 | * You have a single SSD where you keep all your games. You would like to separate those into two data sources. One data source contains all your games and another one only games which are appropriate for players of all ages.
29 |
30 | For more information go to [Setup multiple data sources](/Docs/SetupMultipleDataSources.md)
31 |
--------------------------------------------------------------------------------
/RetroPass/ThemeManager.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using Windows.Storage;
6 | using Windows.Storage.Search;
7 | using Windows.UI.Xaml;
8 | using Windows.UI.Xaml.Controls;
9 | using Windows.UI.Xaml.Markup;
10 |
11 | namespace RetroPass
12 | {
13 | public class ThemeManager
14 | {
15 | public bool IsInitialized { get; private set; }
16 | public ElementTheme CurrentMode { get; private set; }
17 | public Action ThemeInitialization_Finished;
18 |
19 | private static ThemeManager instance = null;
20 |
21 | public static ThemeManager Instance
22 | {
23 | get
24 | {
25 | if (instance == null)
26 | {
27 | instance = new ThemeManager();
28 | }
29 | return instance;
30 | }
31 | }
32 |
33 | public IEnumerable GetModeNames()
34 | {
35 | return Enum.GetNames(typeof(ElementTheme));
36 | }
37 |
38 | public void Init()
39 | {
40 | ChangeMode(ApplicationData.Current.LocalSettings.Values[App.SettingsMode] as string);
41 | IsInitialized = true;
42 | ThemeInitialization_Finished?.Invoke();
43 | }
44 |
45 | public void ChangeMode(string mode)
46 | {
47 | if (Enum.GetNames(typeof(ElementTheme)).Contains(mode))
48 | {
49 | ElementTheme requestedMode = (ElementTheme)Enum.Parse(typeof(ElementTheme), mode);
50 |
51 | //if the mode is different from current mode and string value matches
52 | if (Window.Current.Content is FrameworkElement frameworkElement && frameworkElement.RequestedTheme != requestedMode)
53 | {
54 | frameworkElement.RequestedTheme = requestedMode;
55 | CurrentMode = requestedMode;
56 | ApplicationData.Current.LocalSettings.Values[App.SettingsMode] = mode;
57 | }
58 | }
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/RetroPass/PlayLaterControl.xaml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
29 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/RetroPass/StorageUtils.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | using System.IO;
4 | using System.Threading.Tasks;
5 | using Windows.Storage;
6 |
7 | namespace RetroPass
8 | {
9 | public class StorageUtils
10 | {
11 | public static async Task GetFileAsync(StorageFolder storageFolder, string fileName)
12 | {
13 | try
14 | {
15 | Trace.TraceInformation("StorageUtils: GetFileAsync: {0} {1}", storageFolder.Path, fileName);
16 | var file = await storageFolder.GetFileAsync(fileName);
17 | return file;
18 | }
19 | catch (Exception e)
20 | {
21 | Trace.TraceError("StorageUtils: GetFileAsync FAIL: {0} {1}", storageFolder.Path, fileName);
22 | Trace.TraceError(e.Message);
23 | return null;
24 | }
25 | }
26 |
27 | public static async Task GetFileFromPathAsync(string path)
28 | {
29 | try
30 | {
31 | Trace.TraceInformation("StorageUtils: GetFolderFromPathAsync: {0}", path);
32 | var file = await StorageFile.GetFileFromPathAsync(path);
33 | return file;
34 | }
35 | catch (Exception e)
36 | {
37 | Trace.TraceError("StorageUtils: GetFolderFromPathAsync FAIL: {0}", path);
38 | Trace.TraceError(e.Message);
39 | return null;
40 | }
41 | }
42 |
43 | public static async Task GetFolderFromPathAsync(string path)
44 | {
45 | try
46 | {
47 | Trace.TraceInformation("StorageUtils: GetFolderFromPathAsync: {0}", path);
48 | var folder = await StorageFolder.GetFolderFromPathAsync(path);
49 | return folder;
50 | }
51 | catch (Exception e)
52 | {
53 |
54 | Trace.TraceError("StorageUtils: GetFolderFromPathAsync FAIL: {0}", path);
55 | Trace.TraceError(e.Message);
56 | return null;
57 | }
58 | }
59 |
60 | public static string NormalizePath(string path)
61 | {
62 | return Path.GetFullPath(new Uri(path).LocalPath)
63 | .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)
64 | .ToUpperInvariant();
65 | }
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/Docs/SettingsPersonalization.md:
--------------------------------------------------------------------------------
1 | # Settings - Personalization
2 |
3 | 
4 |
5 | - **Mode** - Choose light or dark mode for UI.
6 | * **System** - use default Xbox theme
7 | * **Dark** - override Xbox theme, use dark mode
8 | * **Light** - override Xbox theme, use light mode
9 | - **Main Page Layout**
10 | * **Fixed** - Predefined width and height of items on the main page.
11 |

12 | * **Original Aspect** - Variable width, predefined height. The list becomes horizontally scrollable, up to 5 items.
13 | 
14 | - **Collection Page Layout**
15 | * **Fixed** - Predefined width and height of items on platform collection page.
16 |

17 | * **Original Aspect** - Variable width, predefined height, variable space between items. The number of items in a row is automatically determined by the width of the first image in the collection.
18 | 
19 | * **Group Aspect** - Variable width, predefined height, fixed space between items. The number of items in a row is predefined by the aspect ratio, utilizing row space as best as possible. In general, Group Aspect may display the same or more images in a row when compared to Original Aspect.
20 | 
21 | - **Collection Image Stretch**
22 | * **Uniform** - Fill by width, preserving aspect ratio. It can result in some empty space at the bottom of the area if the image aspect ratio is not the same as item aspect ratio.
23 |

24 | * **Fill** - Fill the whole area. Changes image aspect ratio. Images may look stretched.
25 | 
26 | * **Uniform To Fill** - Fill the whole area, preserving aspect ratio. Images may be zoomed in, cropping edge parts.
27 | 
28 | - **Auto Play Video** - If checked, automatically plays a video when content is selected.
29 | - **Play Full Screen Video** - If checked, plays larger game video.
30 | - **Mute Video**
31 | * **None** - Never mute video.
32 | * **On Auto Play** - Mute video only on auto play. If video is paused and then started manually, it plays the sound.
33 | * **Always** - Always mute video.
34 |
35 |
--------------------------------------------------------------------------------
/RetroPass/LogPage.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
31 |
32 |
33 |
35 |
36 |
37 |
38 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/RetroPass/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 | RetroPass
11 | RetroPass
12 | Assets\StoreLogo.png
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | retropass
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/RetroPass/SettingsPages/SettingsPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using RetroPass.SettingsPages;
2 | using Windows.ApplicationModel;
3 | using Windows.UI.Core;
4 | using Windows.UI.Xaml;
5 | using Windows.UI.Xaml.Navigation;
6 | using Windows.UI.Xaml.Controls;
7 |
8 | namespace RetroPass
9 | {
10 | public sealed partial class SettingsPage : Page
11 | {
12 | DataSourceManager dataSourceManager;
13 | string AppVersion { get; set; }
14 |
15 | public SettingsPage()
16 | {
17 | var version = Package.Current.Id.Version;
18 |
19 | AppVersion = string.Format("v{0}.{1}.{2}", version.Major, version.Minor, version.Build);
20 | InitializeComponent();
21 | Loaded += SettingsPage_Loaded;
22 | }
23 |
24 | private void SettingsPage_Loaded(object sender, RoutedEventArgs e)
25 | {
26 | //remove shadow on navigation view
27 | SplitView content = Utils.FindChild(NavigationViewSettings, "RootSplitView");
28 | if (content != null)
29 | {
30 | content.Pane.Translation = new System.Numerics.Vector3(0, 0, 0);
31 | }
32 | }
33 |
34 | //on windows, windows key + backspace
35 | private void OnBackRequested(object sender, BackRequestedEventArgs e)
36 | {
37 | if (Frame.CanGoBack)
38 | {
39 | Frame.GoBack();
40 | e.Handled = true;
41 | }
42 | }
43 |
44 | protected override void OnNavigatedTo(NavigationEventArgs e)
45 | {
46 | dataSourceManager = e.Parameter as DataSourceManager;
47 | SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
48 | base.OnNavigatedTo(e);
49 | //select sources as default
50 | NavigationViewSettings.SelectedItem = NavigationViewSettings.MenuItems[0];
51 | }
52 |
53 | protected override void OnNavigatedFrom(NavigationEventArgs e)
54 | {
55 | SystemNavigationManager.GetForCurrentView().BackRequested -= OnBackRequested;
56 | base.OnNavigatedFrom(e);
57 | }
58 |
59 | private void NavigationViewSettings_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args)
60 | {
61 | var item = args.SelectedItem as NavigationViewItem;
62 | string navTo = item.Tag.ToString();
63 |
64 | if (navTo != null)
65 | {
66 | switch (navTo)
67 | {
68 | case "SettingsPageDataSource":
69 | ContentFrame.Navigate(typeof(SettingsDataSourcePage), dataSourceManager);
70 | break;
71 |
72 | case "SettingsPagePersonalization":
73 | ContentFrame.Navigate(typeof(SettingsPersonalizationPage));
74 | break;
75 |
76 | case "SettingsPageLogging":
77 | ContentFrame.Navigate(typeof(SettingsLogPage));
78 | break;
79 | }
80 | }
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/RetroPass.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.28307.1525
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RetroPass", "RetroPass\RetroPass.csproj", "{674D331B-19AD-4E76-8D83-0F0473BC4F22}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|ARM = Debug|ARM
11 | Debug|ARM64 = Debug|ARM64
12 | Debug|x64 = Debug|x64
13 | Debug|x86 = Debug|x86
14 | Release|ARM = Release|ARM
15 | Release|ARM64 = Release|ARM64
16 | Release|x64 = Release|x64
17 | Release|x86 = Release|x86
18 | EndGlobalSection
19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
20 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Debug|ARM.ActiveCfg = Debug|ARM
21 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Debug|ARM.Build.0 = Debug|ARM
22 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Debug|ARM.Deploy.0 = Debug|ARM
23 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Debug|ARM64.ActiveCfg = Debug|ARM64
24 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Debug|ARM64.Build.0 = Debug|ARM64
25 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Debug|ARM64.Deploy.0 = Debug|ARM64
26 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Debug|x64.ActiveCfg = Debug|x64
27 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Debug|x64.Build.0 = Debug|x64
28 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Debug|x64.Deploy.0 = Debug|x64
29 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Debug|x86.ActiveCfg = Debug|x86
30 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Debug|x86.Build.0 = Debug|x86
31 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Debug|x86.Deploy.0 = Debug|x86
32 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Release|ARM.ActiveCfg = Release|ARM
33 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Release|ARM.Build.0 = Release|ARM
34 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Release|ARM.Deploy.0 = Release|ARM
35 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Release|ARM64.ActiveCfg = Release|ARM64
36 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Release|ARM64.Build.0 = Release|ARM64
37 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Release|ARM64.Deploy.0 = Release|ARM64
38 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Release|x64.ActiveCfg = Release|x64
39 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Release|x64.Build.0 = Release|x64
40 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Release|x64.Deploy.0 = Release|x64
41 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Release|x86.ActiveCfg = Release|x86
42 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Release|x86.Build.0 = Release|x86
43 | {674D331B-19AD-4E76-8D83-0F0473BC4F22}.Release|x86.Deploy.0 = Release|x86
44 | EndGlobalSection
45 | GlobalSection(SolutionProperties) = preSolution
46 | HideSolutionNode = FALSE
47 | EndGlobalSection
48 | GlobalSection(ExtensibilityGlobals) = postSolution
49 | SolutionGuid = {DF7679BD-8D27-4C56-B7FD-3BA4EACA5A1E}
50 | EndGlobalSection
51 | EndGlobal
52 |
--------------------------------------------------------------------------------
/RetroPass/Platform.cs:
--------------------------------------------------------------------------------
1 | using System.Xml.Serialization;
2 | using Windows.Storage;
3 |
4 | namespace RetroPass
5 | {
6 | public class Platform
7 | {
8 | public enum EEmulatorType
9 | {
10 | retroarch,
11 | rgx,
12 | xbsx2,
13 | dolphin,
14 | xenia,
15 | xeniacanary,
16 | ppsspp,
17 | duckstation,
18 | }
19 | public string Name { get; set; }
20 | public string SourceName { get; set; }
21 | public EEmulatorType EmulatorType { get; set; }
22 | public string BoxFrontPath { get; set; }
23 | public string ScreenshotGameTitlePath { get; set; }
24 | public string ScreenshotGameplayPath { get; set; }
25 | public string ScreenshotGameSelectPath { get; set; }
26 | public string VideoPath { get; set; }
27 |
28 | [XmlIgnoreAttribute]
29 | public StorageFolder BoxFrontFolder { get; set; }
30 |
31 | public void SetEmulatorType(string emulatorPath)
32 | {
33 | /*if((string.IsNullOrEmpty(emulatorPath) == false && emulatorPath.Contains("retroarch", System.StringComparison.InvariantCultureIgnoreCase))
34 | {
35 | EmulatorType = EEmulatorType.retroarch;
36 | }
37 | else */
38 | if (string.IsNullOrEmpty(emulatorPath) == false &&
39 | (emulatorPath.Contains("pcsx2", System.StringComparison.CurrentCultureIgnoreCase) ||
40 | emulatorPath.Contains("xbsx2", System.StringComparison.CurrentCultureIgnoreCase))
41 | )
42 | {
43 | EmulatorType = EEmulatorType.xbsx2;
44 | }
45 | else if (string.IsNullOrEmpty(emulatorPath) == false && emulatorPath.Contains("retrix", System.StringComparison.CurrentCultureIgnoreCase))
46 | {
47 | EmulatorType = EEmulatorType.rgx;
48 | }
49 | else if (string.IsNullOrEmpty(emulatorPath) == false && emulatorPath.Contains("dolphin", System.StringComparison.CurrentCultureIgnoreCase))
50 | {
51 | EmulatorType = EEmulatorType.dolphin;
52 | }
53 | else if (string.IsNullOrEmpty(emulatorPath) == false &&
54 | (emulatorPath.Contains("xenia-canary", System.StringComparison.CurrentCultureIgnoreCase) ||
55 | emulatorPath.Contains("xeniacanary", System.StringComparison.CurrentCultureIgnoreCase))
56 | )
57 | {
58 | EmulatorType = EEmulatorType.xeniacanary;
59 | }
60 | else if (string.IsNullOrEmpty(emulatorPath) == false && emulatorPath.Contains("xenia", System.StringComparison.CurrentCultureIgnoreCase))
61 | {
62 | EmulatorType = EEmulatorType.xenia;
63 | }
64 | else if (string.IsNullOrEmpty(emulatorPath) == false && emulatorPath.Contains("ppsspp", System.StringComparison.CurrentCultureIgnoreCase))
65 | {
66 | EmulatorType = EEmulatorType.ppsspp;
67 | }
68 | else if (string.IsNullOrEmpty(emulatorPath) == false && emulatorPath.Contains("duckstation", System.StringComparison.CurrentCultureIgnoreCase))
69 | {
70 | EmulatorType = EEmulatorType.duckstation;
71 | }
72 | else
73 | {
74 | //let it just be default retroarch
75 | EmulatorType = EEmulatorType.retroarch;
76 | }
77 | }
78 |
79 | public Platform Copy()
80 | {
81 | return (Platform)this.MemberwiseClone();
82 | }
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/RetroPass/Playlist.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Collections.ObjectModel;
3 | using System.Linq;
4 | using Windows.Storage;
5 |
6 | namespace RetroPass
7 | {
8 | public class Playlist
9 | {
10 | public string Name { get; set; }
11 | public ObservableCollection PlaylistItems { get; set; } = new ObservableCollection();
12 | public ObservableCollection PlaylistItemsLandingPage { get; set; } = new ObservableCollection();
13 |
14 | public PlaylistItem AddPlaylistItem(Game game)
15 | {
16 | PlaylistItem playlistItem = new PlaylistItem();
17 | playlistItem.playlist = this;
18 | playlistItem.game = game;
19 | PlaylistItems.Add(playlistItem);
20 | return playlistItem;
21 | }
22 |
23 | public void ClearLastPlayedSettings()
24 | {
25 | ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;
26 | localSettings.Values["LastPlayed" + Name] = "";
27 | }
28 |
29 | public void UpdateGamesLandingPage()
30 | {
31 | //ClearLandingPage();
32 |
33 | PlaylistItemsLandingPage.Clear();
34 |
35 | List games = PlaylistItems.Take(5).ToList();
36 | List lastPlayedGames = new List();
37 | //check if there are some already played
38 | ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;
39 |
40 | string lastPlayedStr = (string)localSettings.Values["LastPlayed" + Name];
41 |
42 | if (string.IsNullOrEmpty(lastPlayedStr) == false)
43 | {
44 | string[] lastPlayed = lastPlayedStr.Split(";;;");
45 |
46 | foreach (var title in lastPlayed)
47 | {
48 | PlaylistItem game = PlaylistItems.FirstOrDefault(t => t.game.Title == title);
49 | if (game != null)
50 | {
51 | lastPlayedGames.Add(game);
52 | }
53 | }
54 | }
55 |
56 | games = lastPlayedGames.Concat(games).Distinct().Take(5).ToList();
57 |
58 | for (int i = 0; i < games.Count; i++)
59 | {
60 | //add item if there is none
61 | PlaylistItemsLandingPage.Add(games[i]);
62 | }
63 | }
64 |
65 | public void SetLastPlayed(PlaylistItem playlist)
66 | {
67 | List lastPlayedGames = new List();
68 |
69 | ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;
70 | string lastPlayedStr = (string)localSettings.Values["LastPlayed" + Name];
71 |
72 | if (string.IsNullOrEmpty(lastPlayedStr) == false)
73 | {
74 | lastPlayedGames.AddRange(lastPlayedStr.Split(";;;"));
75 | lastPlayedGames.Insert(0, playlist.game.Title);
76 | lastPlayedGames = lastPlayedGames.Distinct().Take(5).ToList();
77 | }
78 | else
79 | {
80 | lastPlayedGames.Insert(0, playlist.game.Title);
81 | }
82 |
83 | lastPlayedStr = string.Join(";;;", lastPlayedGames.ToArray());
84 | localSettings.Values["LastPlayed" + Name] = lastPlayedStr;
85 |
86 | UpdateGamesLandingPage();
87 | }
88 |
89 | public void Sort()
90 | {
91 | List sorted = PlaylistItems.OrderBy(t => t.game.Title).ToList();
92 | for (int i = 0; i < sorted.Count(); i++)
93 | {
94 | PlaylistItems.Move(PlaylistItems.IndexOf(sorted[i]), i);
95 | }
96 | }
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/Docs/SetupEmulationStation.md:
--------------------------------------------------------------------------------
1 | # Setup with Emulation Station
2 |
3 | If you do not wish to use LaunchBox, it is also possible to create Emulation Station compatible metadata source.
4 |
5 | 1. Setup and configure Emulation Station to work with RetroArch, preferably directly on external storage.
6 |
7 | 2. Download all images, descriptions and videos. There are various scrapers that can download assets from various databases and output to Emulation Station gamelist.xml files
8 |
9 | 3. [Download](/Docs/v1.6/RetroPass.xml) Retropass configuration file and copy it to the root of external storage.
10 |
11 | 4. Edit **RetroPass.xml** configuration file.
12 |
13 | **\** points to Emulation Station directory on the external storage. Do not put absolute path like "E:\EmulationStation", because when external storage is plugged into Xbox, it might be recognized under a different letter. For example, if EmulationStation folder is in the root of external storage, then it should be configured like this:
14 |
15 | ```XML
16 |
17 |
18 |
19 | Games
20 | EmulationStation
21 | ./EmulationStation
22 |
23 |
24 |
25 | ```
26 |
27 | 5. Check that **es_systems.cfg** file exists somewhere in the Emulation Station directory and that it has valid systems defined. i.e.
28 | - Ignore **\** property, it doesn't have to be properly set.
29 | - Make sure that **\** property for each system is properly configured. Paths are not important, as long as the core name is properly specified. RetroPass ignores everything in the command line except the core name. It knows how to properly pass it to RetroArch.
30 | - **\** is what is actually displayed in RetroPass as the name of the system.
31 | - In the example below, only relevant properties are shown:
32 |
33 | ```XML
34 |
35 | nes
36 | Nintendo Entertainment System
37 | -L %HOME%\\systems\nestopia_libretro.dll
38 | nes
39 |
40 | ```
41 | 6. Setup **gamelist.xml** for every system:
42 | - **gamelist.xml** must be in its own directory which equals system's **\** defined in **es_systems.cfg**. For example, based on the example in step 3, it is expected that for NES, it should be **/nes/gamelist.xml**.
43 | - All paths defined in **\**, **\**, **\**, **\