├── .gitattributes ├── .github └── workflows │ └── main.yml ├── .gitignore ├── AUTHORS.md ├── Docs ├── SettingsDataSources.md ├── SettingsLogging.md ├── SettingsPersonalization.md ├── SetupDolphin.md ├── SetupDuckStation.md ├── SetupEmulationStation.md ├── SetupLaunchBox.md ├── SetupLaunchBoxImport.md ├── SetupLaunchBoxSorting.md ├── SetupMultipleDataSources.md ├── SetupPPSSPP.md ├── SetupRetriXGold.md ├── SetupRetroArch.md ├── SetupXBSX2.md ├── SetupXeniaCanary.md ├── core_per_game.png ├── layout_collection_fixed.png ├── layout_collection_group.png ├── layout_collection_original.png ├── layout_collection_stretch_fill.png ├── layout_collection_stretch_uniform.png ├── layout_collection_stretch_uniform_to_fill.png ├── layout_menu_fixed.png ├── layout_menu_original.png ├── media_types.png ├── menu.gif ├── settings_data_source_activate.png ├── settings_data_source_add.png ├── settings_data_source_choose.png ├── settings_first_run.png ├── settings_log.png ├── settings_personalization.png ├── setup_dolphin_associated_platforms.png ├── setup_dolphin_edit_emulator.png ├── setup_duckstation_associated_platforms.png ├── setup_duckstation_edit_emulator.png ├── setup_launchbox_import_add.png ├── setup_launchbox_import_copy.png ├── setup_launchbox_import_emulator.png ├── setup_launchbox_import_platform.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 ├── setup_ppsspp_associated_platforms.png ├── setup_ppsspp_edit_emulator.png ├── setup_retrixgold_associated_platforms.png ├── setup_retrixgold_edit_emulator.png ├── setup_retroarch_associated_platforms.png ├── setup_retroarch_edit_emulator.png ├── setup_retroarch_quit_hotkey.png ├── setup_sort_games.png ├── setup_sort_platform.png ├── setup_sort_playlist.png ├── setup_xbsx2_associated_platforms.png ├── setup_xbsx2_edit_emulator.png ├── setup_xeniacanary_associated_platforms.png ├── setup_xeniacanary_edit_emulator.png ├── v1.5 │ └── RetroPass.xml └── v1.6 │ └── RetroPass.xml ├── LICENSE.txt ├── README.md ├── RetroPass.sln ├── RetroPass ├── App.xaml ├── App.xaml.cs ├── Assets │ ├── LargeTile.scale-100.png │ ├── LargeTile.scale-125.png │ ├── LargeTile.scale-150.png │ ├── LargeTile.scale-200.png │ ├── LargeTile.scale-400.png │ ├── LockScreenLogo.scale-200.png │ ├── SmallTile.scale-100.png │ ├── SmallTile.scale-125.png │ ├── SmallTile.scale-150.png │ ├── SmallTile.scale-200.png │ ├── SmallTile.scale-400.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 │ ├── Square150x150Logo.scale-100.png │ ├── Square150x150Logo.scale-125.png │ ├── Square150x150Logo.scale-150.png │ ├── Square150x150Logo.scale-200.png │ ├── Square150x150Logo.scale-400.png │ ├── Square44x44Logo.altform-lightunplated_targetsize-16.png │ ├── Square44x44Logo.altform-lightunplated_targetsize-24.png │ ├── Square44x44Logo.altform-lightunplated_targetsize-256.png │ ├── Square44x44Logo.altform-lightunplated_targetsize-32.png │ ├── Square44x44Logo.altform-lightunplated_targetsize-48.png │ ├── Square44x44Logo.altform-unplated_targetsize-16.png │ ├── Square44x44Logo.altform-unplated_targetsize-256.png │ ├── Square44x44Logo.altform-unplated_targetsize-32.png │ ├── Square44x44Logo.altform-unplated_targetsize-48.png │ ├── Square44x44Logo.scale-100.png │ ├── Square44x44Logo.scale-125.png │ ├── Square44x44Logo.scale-150.png │ ├── Square44x44Logo.scale-200.png │ ├── Square44x44Logo.scale-400.png │ ├── Square44x44Logo.targetsize-16.png │ ├── Square44x44Logo.targetsize-24.png │ ├── Square44x44Logo.targetsize-24_altform-unplated.png │ ├── Square44x44Logo.targetsize-256.png │ ├── Square44x44Logo.targetsize-32.png │ ├── Square44x44Logo.targetsize-48.png │ ├── StoreLogo.backup.png │ ├── StoreLogo.scale-100.png │ ├── StoreLogo.scale-125.png │ ├── StoreLogo.scale-150.png │ ├── StoreLogo.scale-200.png │ ├── StoreLogo.scale-400.png │ ├── Wide310x150Logo.scale-100.png │ ├── Wide310x150Logo.scale-125.png │ ├── Wide310x150Logo.scale-150.png │ ├── Wide310x150Logo.scale-200.png │ ├── Wide310x150Logo.scale-400.png │ └── empty.png ├── DataSource.cs ├── DataSourceEmulationStation.cs ├── DataSourceLaunchBox.cs ├── DataSourceManager.cs ├── FocusControl.xaml ├── FocusControl.xaml.cs ├── Game.cs ├── GameCollectionPage.xaml ├── GameCollectionPage.xaml.cs ├── GameDetailsPage.xaml ├── GameDetailsPage.xaml.cs ├── LogPage.xaml ├── LogPage.xaml.cs ├── MainPage.xaml ├── MainPage.xaml.cs ├── Package.appxmanifest ├── Platform.cs ├── PlayLaterControl.xaml ├── PlayLaterControl.xaml.cs ├── Playlist.cs ├── PlaylistItem.cs ├── PlaylistPlayLater.cs ├── Properties │ ├── AssemblyInfo.cs │ └── Default.rd.xml ├── Resources │ ├── SearchBackgroundDark_128.png │ ├── SearchBackgroundLight_128.png │ └── Themes │ │ └── ThemeDefault │ │ ├── CommonDefault.xaml │ │ └── CommonDefault.xaml.cs ├── RetroPass.csproj ├── SearchPage.xaml ├── SearchPage.xaml.cs ├── SettingsPage.xaml.cs ├── SettingsPages │ ├── SettingsAddDataSourcePage.xaml │ ├── SettingsAddDataSourcePage.xaml.cs │ ├── SettingsDataSourcePage.xaml │ ├── SettingsDataSourcePage.xaml.cs │ ├── SettingsLogPage.xaml │ ├── SettingsLogPage.xaml.cs │ ├── SettingsPage.xaml │ ├── SettingsPage.xaml.cs │ ├── SettingsPersonalizationPage.xaml │ └── SettingsPersonalizationPage.xaml.cs ├── StorageUtils.cs ├── ThemeManager.cs ├── ThumbnailCache.cs ├── UrlSchemeGenerator.cs └── Utils.cs └── Temp └── Job.md /.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 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: RetroPass Build 2 | 3 | # Controls when the workflow will run 4 | on: 5 | # Triggers the workflow on tag event 6 | push: 7 | tags: 8 | - 'v*' 9 | 10 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 11 | jobs: 12 | # This workflow contains a single job called "build" 13 | build: 14 | # The type of runner that the job will run on 15 | runs-on: windows-latest 16 | 17 | env: 18 | SolutionPath: RetroPass.sln 19 | Platform: x64 20 | Configuration: Release 21 | BuildMode: SideLoadOnly 22 | AppxBundle: Never 23 | SigningCertificate: RetroPassKey.pfx 24 | ProjectPath: RetroPass\RetroPass.csproj 25 | ProjectDirectory: .\RetroPass 26 | PackageOutputRootDir: C:\AppPackage 27 | PackageOutputDir: RetroPass 28 | PackageOutputBaseName: RetroPass 29 | 30 | # Steps represent a sequence of tasks that will be executed as part of the job 31 | steps: 32 | - name: Add msbuild to PATH 33 | uses: microsoft/setup-msbuild@v1 34 | 35 | - name: Setup NuGet.exe for use with actions 36 | uses: NuGet/setup-nuget@v1.0.5 37 | 38 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 39 | - name: checkout 40 | uses: actions/checkout@v2 41 | 42 | # Get tag name so a proper package name can be generated 43 | - name: Get tag 44 | id: getTag 45 | # You may pin to the exact commit or the version. 46 | uses: dawidd6/action-get-tag@v1.1.0 47 | 48 | # Create package name 49 | - name: GetPackageName 50 | id: getPackageName 51 | run: | 52 | $PackageName = "${{ env.PackageOutputBaseName }}" + "_" + "${{ steps.getTag.outputs.tag }}" 53 | echo "::set-output name=PackageName::$PackageName" 54 | Write-Host "Package Name is $PackageName" 55 | 56 | # Decode the Base64 encoded Pfx 57 | - name: Decode the Pfx 58 | run: | 59 | $pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.BASE64_ENCODED_PFX }}") 60 | $currentDirectory = Get-Location 61 | $certificatePath = Join-Path -Path $currentDirectory -ChildPath $env:ProjectDirectory -AdditionalChildPath $env:SigningCertificate 62 | [IO.File]::WriteAllBytes("$certificatePath", $pfx_cert_byte) 63 | 64 | # Build app 65 | - name: App build 66 | run: msbuild $env:SolutionPath 67 | /p:Platform=$env:Platform 68 | /p:Configuration=$env:Configuration 69 | /p:UapAppxPackageBuildMode=$env:BuildMode 70 | /p:AppxBundle=$env:AppxBundle 71 | /p:PackageCertificateKeyFile=$env:SigningCertificate 72 | /p:PackageCertificatePassword=${{ secrets.PFX_KEY_PASSWORD }} 73 | /p:AppxPackageTestDir="${{ env.PackageOutputRootDir }}\${{steps.getPackageName.outputs.PackageName}}\" 74 | /restore 75 | 76 | # Remove the .pf 77 | - name: Remove the .pfx 78 | run: Remove-Item -path $env:ProjectDirectory/$env:SigningCertificate 79 | 80 | # Clean the package 81 | - name: Clean package 82 | run: | 83 | $PackagePath = "${{ env.PackageOutputRootDir }}\${{steps.getPackageName.outputs.PackageName}}" 84 | Remove-Item -Recurse -path $PackagePath/Add-AppDevPackage.resources 85 | Remove-Item -Recurse -path $PackagePath/TelemetryDependencies 86 | Remove-Item -Recurse -path $PackagePath/Dependencies/arm 87 | Remove-Item -Recurse -path $PackagePath/Dependencies/arm64 88 | Remove-Item -Recurse -path $PackagePath/Dependencies/x86 89 | Remove-Item -path $PackagePath/Add-AppDevPackage.ps1 90 | Remove-Item -Recurse -path $PackagePath/Install.ps1 91 | 92 | # Archive the package 93 | - name: Create archive 94 | run: | 95 | $PackagePath = "${{ env.PackageOutputRootDir }}\${{steps.getPackageName.outputs.PackageName}}" 96 | Compress-Archive -Path $PackagePath\* -DestinationPath "$PackagePath.zip" 97 | dir "${{ env.PackageOutputRootDir }}" 98 | 99 | # Create the release: https://github.com/actions/create-release 100 | - name: Create release 101 | id: create_release 102 | uses: actions/create-release@v1 103 | env: 104 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token 105 | with: 106 | tag_name: ${{steps.getPackageName.outputs.PackageName}} 107 | release_name: ${{steps.getPackageName.outputs.PackageName}} 108 | draft: false 109 | prerelease: false 110 | 111 | # Upload release asset: https://github.com/actions/upload-release-asset 112 | - name: Update release asset 113 | id: upload-release-asset 114 | uses: actions/upload-release-asset@v1 115 | env: 116 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 117 | with: 118 | upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps 119 | asset_path: ${{ env.PackageOutputRootDir }}\${{steps.getPackageName.outputs.PackageName}}.zip 120 | asset_name: ${{steps.getPackageName.outputs.PackageName}}.zip 121 | asset_content_type: application/zip 122 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Aa][Rr][Mm]/ 27 | [Aa][Rr][Mm]64/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Ll]og/ 32 | [Ll]ogs/ 33 | 34 | # Visual Studio 2015/2017 cache/options directory 35 | .vs/ 36 | # Uncomment if you have tasks that create the project's static files in wwwroot 37 | #wwwroot/ 38 | 39 | # Visual Studio 2017 auto generated files 40 | Generated\ Files/ 41 | 42 | # MSTest test Results 43 | [Tt]est[Rr]esult*/ 44 | [Bb]uild[Ll]og.* 45 | 46 | # NUnit 47 | *.VisualState.xml 48 | TestResult.xml 49 | nunit-*.xml 50 | 51 | # Build Results of an ATL Project 52 | [Dd]ebugPS/ 53 | [Rr]eleasePS/ 54 | dlldata.c 55 | 56 | # Benchmark Results 57 | BenchmarkDotNet.Artifacts/ 58 | 59 | # .NET Core 60 | project.lock.json 61 | project.fragment.lock.json 62 | artifacts/ 63 | 64 | # StyleCop 65 | StyleCopReport.xml 66 | 67 | # Files built by Visual Studio 68 | *_i.c 69 | *_p.c 70 | *_h.h 71 | *.ilk 72 | *.meta 73 | *.obj 74 | *.iobj 75 | *.pch 76 | *.pdb 77 | *.ipdb 78 | *.pgc 79 | *.pgd 80 | *.rsp 81 | *.sbr 82 | *.tlb 83 | *.tli 84 | *.tlh 85 | *.tmp 86 | *.tmp_proj 87 | *_wpftmp.csproj 88 | *.log 89 | *.vspscc 90 | *.vssscc 91 | .builds 92 | *.pidb 93 | *.svclog 94 | *.scc 95 | 96 | # Chutzpah Test files 97 | _Chutzpah* 98 | 99 | # Visual C++ cache files 100 | ipch/ 101 | *.aps 102 | *.ncb 103 | *.opendb 104 | *.opensdf 105 | *.sdf 106 | *.cachefile 107 | *.VC.db 108 | *.VC.VC.opendb 109 | 110 | # Visual Studio profiler 111 | *.psess 112 | *.vsp 113 | *.vspx 114 | *.sap 115 | 116 | # Visual Studio Trace Files 117 | *.e2e 118 | 119 | # TFS 2012 Local Workspace 120 | $tf/ 121 | 122 | # Guidance Automation Toolkit 123 | *.gpState 124 | 125 | # ReSharper is a .NET coding add-in 126 | _ReSharper*/ 127 | *.[Rr]e[Ss]harper 128 | *.DotSettings.user 129 | 130 | # TeamCity is a build add-in 131 | _TeamCity* 132 | 133 | # DotCover is a Code Coverage Tool 134 | *.dotCover 135 | 136 | # AxoCover is a Code Coverage Tool 137 | .axoCover/* 138 | !.axoCover/settings.json 139 | 140 | # Visual Studio code coverage results 141 | *.coverage 142 | *.coveragexml 143 | 144 | # NCrunch 145 | _NCrunch_* 146 | .*crunch*.local.xml 147 | nCrunchTemp_* 148 | 149 | # MightyMoose 150 | *.mm.* 151 | AutoTest.Net/ 152 | 153 | # Web workbench (sass) 154 | .sass-cache/ 155 | 156 | # Installshield output folder 157 | [Ee]xpress/ 158 | 159 | # DocProject is a documentation generator add-in 160 | DocProject/buildhelp/ 161 | DocProject/Help/*.HxT 162 | DocProject/Help/*.HxC 163 | DocProject/Help/*.hhc 164 | DocProject/Help/*.hhk 165 | DocProject/Help/*.hhp 166 | DocProject/Help/Html2 167 | DocProject/Help/html 168 | 169 | # Click-Once directory 170 | publish/ 171 | 172 | # Publish Web Output 173 | *.[Pp]ublish.xml 174 | *.azurePubxml 175 | # Note: Comment the next line if you want to checkin your web deploy settings, 176 | # but database connection strings (with potential passwords) will be unencrypted 177 | *.pubxml 178 | *.publishproj 179 | 180 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 181 | # checkin your Azure Web App publish settings, but sensitive information contained 182 | # in these scripts will be unencrypted 183 | PublishScripts/ 184 | 185 | # NuGet Packages 186 | *.nupkg 187 | # NuGet Symbol Packages 188 | *.snupkg 189 | # The packages folder can be ignored because of Package Restore 190 | **/[Pp]ackages/* 191 | # except build/, which is used as an MSBuild target. 192 | !**/[Pp]ackages/build/ 193 | # Uncomment if necessary however generally it will be regenerated when needed 194 | #!**/[Pp]ackages/repositories.config 195 | # NuGet v3's project.json files produces more ignorable files 196 | *.nuget.props 197 | *.nuget.targets 198 | 199 | # Microsoft Azure Build Output 200 | csx/ 201 | *.build.csdef 202 | 203 | # Microsoft Azure Emulator 204 | ecf/ 205 | rcf/ 206 | 207 | # Windows Store app package directories and files 208 | AppPackages/ 209 | BundleArtifacts/ 210 | Package.StoreAssociation.xml 211 | _pkginfo.txt 212 | *.appx 213 | *.appxbundle 214 | *.appxupload 215 | 216 | # Visual Studio cache files 217 | # files ending in .cache can be ignored 218 | *.[Cc]ache 219 | # but keep track of directories ending in .cache 220 | !?*.[Cc]ache/ 221 | 222 | # Others 223 | ClientBin/ 224 | ~$* 225 | *~ 226 | *.dbmdl 227 | *.dbproj.schemaview 228 | *.jfm 229 | *.pfx 230 | *.publishsettings 231 | orleans.codegen.cs 232 | 233 | # Including strong name files can present a security risk 234 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 235 | #*.snk 236 | 237 | # Since there are multiple workflows, uncomment next line to ignore bower_components 238 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 239 | #bower_components/ 240 | 241 | # RIA/Silverlight projects 242 | Generated_Code/ 243 | 244 | # Backup & report files from converting an old project file 245 | # to a newer Visual Studio version. Backup files are not needed, 246 | # because we have git ;-) 247 | _UpgradeReport_Files/ 248 | Backup*/ 249 | UpgradeLog*.XML 250 | UpgradeLog*.htm 251 | ServiceFabricBackup/ 252 | *.rptproj.bak 253 | 254 | # SQL Server files 255 | *.mdf 256 | *.ldf 257 | *.ndf 258 | 259 | # Business Intelligence projects 260 | *.rdl.data 261 | *.bim.layout 262 | *.bim_*.settings 263 | *.rptproj.rsuser 264 | *- [Bb]ackup.rdl 265 | *- [Bb]ackup ([0-9]).rdl 266 | *- [Bb]ackup ([0-9][0-9]).rdl 267 | 268 | # Microsoft Fakes 269 | FakesAssemblies/ 270 | 271 | # GhostDoc plugin setting file 272 | *.GhostDoc.xml 273 | 274 | # Node.js Tools for Visual Studio 275 | .ntvs_analysis.dat 276 | node_modules/ 277 | 278 | # Visual Studio 6 build log 279 | *.plg 280 | 281 | # Visual Studio 6 workspace options file 282 | *.opt 283 | 284 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 285 | *.vbw 286 | 287 | # Visual Studio LightSwitch build output 288 | **/*.HTMLClient/GeneratedArtifacts 289 | **/*.DesktopClient/GeneratedArtifacts 290 | **/*.DesktopClient/ModelManifest.xml 291 | **/*.Server/GeneratedArtifacts 292 | **/*.Server/ModelManifest.xml 293 | _Pvt_Extensions 294 | 295 | # Paket dependency manager 296 | .paket/paket.exe 297 | paket-files/ 298 | 299 | # FAKE - F# Make 300 | .fake/ 301 | 302 | # CodeRush personal settings 303 | .cr/personal 304 | 305 | # Python Tools for Visual Studio (PTVS) 306 | __pycache__/ 307 | *.pyc 308 | 309 | # Cake - Uncomment if you are using it 310 | # tools/** 311 | # !tools/packages.config 312 | 313 | # Tabs Studio 314 | *.tss 315 | 316 | # Telerik's JustMock configuration file 317 | *.jmconfig 318 | 319 | # BizTalk build output 320 | *.btp.cs 321 | *.btm.cs 322 | *.odx.cs 323 | *.xsd.cs 324 | 325 | # OpenCover UI analysis results 326 | OpenCover/ 327 | 328 | # Azure Stream Analytics local run output 329 | ASALocalRun/ 330 | 331 | # MSBuild Binary and Structured Log 332 | *.binlog 333 | 334 | # NVidia Nsight GPU debugger configuration file 335 | *.nvuser 336 | 337 | # MFractors (Xamarin productivity tool) working folder 338 | .mfractor/ 339 | 340 | # Local History for Visual Studio 341 | .localhistory/ 342 | 343 | # BeatPulse healthcheck temp database 344 | healthchecksdb 345 | 346 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 347 | MigrationBackup/ 348 | 349 | # Ionide (cross platform F# VS Code tools) working folder 350 | .ionide/ 351 | -------------------------------------------------------------------------------- /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 -------------------------------------------------------------------------------- /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 | ![](/Docs/settings_first_run.png) 6 | 7 | 1. Navigate to your LaunchBox or EmulationStation directory on external storage an click **Select** button. 8 | 9 | ![](/Docs/settings_data_source_choose.png) 10 | 11 | 1. Set the name of this data source and click **Add** button 12 | 13 | ![](/Docs/settings_data_source_add.png) 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 | ![](/Docs/settings_data_source_activate.png) 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 | -------------------------------------------------------------------------------- /Docs/SettingsLogging.md: -------------------------------------------------------------------------------- 1 | # Settings - Logging 2 | 3 | ![](/Docs/settings_log.png) 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/SettingsPersonalization.md: -------------------------------------------------------------------------------- 1 | # Settings - Personalization 2 | 3 | ![](/Docs/settings_personalization.png) 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 |
![](/Docs/layout_menu_fixed.png) 12 | * **Original Aspect** - Variable width, predefined height. The list becomes horizontally scrollable, up to 5 items. 13 | ![](/Docs/layout_menu_original.png) 14 | - **Collection Page Layout** 15 | * **Fixed** - Predefined width and height of items on platform collection page. 16 |
![](/Docs/layout_collection_fixed.png) 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 | ![](/Docs/layout_collection_original.png) 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 | ![](/Docs/layout_collection_group.png) 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 |
![](/Docs/layout_collection_stretch_uniform.png) 24 | * **Fill** - Fill the whole area. Changes image aspect ratio. Images may look stretched. 25 | ![](/Docs/layout_collection_stretch_fill.png) 26 | * **Uniform To Fill** - Fill the whole area, preserving aspect ratio. Images may be zoomed in, cropping edge parts. 27 | ![](/Docs/layout_collection_stretch_uniform_to_fill.png) 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 | -------------------------------------------------------------------------------- /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 |
![](/Docs/setup_dolphin_edit_emulator.png) 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 | ![](/Docs/setup_dolphin_associated_platforms.png) 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /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 | ![](/Docs/setup_duckstation_edit_emulator.png) 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 | ![](/Docs/setup_duckstation_associated_platforms.png) 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /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 **\**, **\**, **\**, **\