├── .gitattributes ├── .github └── FUNDING.yml ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── UnrealVR.sln ├── UnrealVR.sln.DotSettings ├── UnrealVRLauncher ├── App.xaml ├── App.xaml.cs ├── Assets │ ├── LockScreenLogo.scale-200.png │ ├── SplashScreen.scale-200.png │ ├── Square150x150Logo.scale-200.png │ ├── Square44x44Logo.scale-200.png │ ├── Square44x44Logo.targetsize-24_altform-unplated.png │ ├── StoreLogo.png │ └── Wide310x150Logo.scale-200.png ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── Microsoft.WindowsAppSdk.manifest ├── NativeMethods.txt ├── Package.appxmanifest ├── PipeServer.cs ├── ProfileModel.cs ├── Properties │ └── launchSettings.json ├── UnrealVRLauncher.csproj └── app.manifest ├── UnrealVRLoader ├── CalculateProjectionMatrix.asm ├── D3D11Service.cpp ├── D3D11Service.h ├── HookHelper.cpp ├── HookHelper.h ├── OpenXRService.cpp ├── OpenXRService.h ├── PipeClientService.cpp ├── PipeClientService.h ├── PixelShader.hlsl ├── UE4Extensions.cpp ├── UE4Extensions.h ├── UE4Service.cpp ├── UE4Service.h ├── UnrealVRLoader.cpp ├── UnrealVRLoader.h ├── UnrealVRLoader.vcxproj ├── UnrealVRLoader.vcxproj.filters ├── VertexShader.hlsl ├── dllmain.cpp ├── hex_to_cpp.py └── packages.config ├── docs ├── CNAME ├── icons │ ├── discord.svg │ ├── github.svg │ ├── microsoft.svg │ └── patreon.svg ├── images │ └── preview.png ├── index.html ├── style.css └── writeup │ └── index.html ├── preview.png └── rizin_to_uml.py /.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/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: gpizarro 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /.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 | [Ww][Ii][Nn]32/ 27 | [Aa][Rr][Mm]/ 28 | [Aa][Rr][Mm]64/ 29 | bld/ 30 | [Bb]in/ 31 | [Oo]bj/ 32 | [Oo]ut/ 33 | [Ll]og/ 34 | [Ll]ogs/ 35 | 36 | # Visual Studio 2015/2017 cache/options directory 37 | .vs/ 38 | # Uncomment if you have tasks that create the project's static files in wwwroot 39 | #wwwroot/ 40 | 41 | # Visual Studio 2017 auto generated files 42 | Generated\ Files/ 43 | 44 | # MSTest test Results 45 | [Tt]est[Rr]esult*/ 46 | [Bb]uild[Ll]og.* 47 | 48 | # NUnit 49 | *.VisualState.xml 50 | TestResult.xml 51 | nunit-*.xml 52 | 53 | # Build Results of an ATL Project 54 | [Dd]ebugPS/ 55 | [Rr]eleasePS/ 56 | dlldata.c 57 | 58 | # Benchmark Results 59 | BenchmarkDotNet.Artifacts/ 60 | 61 | # .NET Core 62 | project.lock.json 63 | project.fragment.lock.json 64 | artifacts/ 65 | 66 | # ASP.NET Scaffolding 67 | ScaffoldingReadMe.txt 68 | 69 | # StyleCop 70 | StyleCopReport.xml 71 | 72 | # Files built by Visual Studio 73 | *_i.c 74 | *_p.c 75 | *_h.h 76 | *.ilk 77 | *.meta 78 | *.obj 79 | *.iobj 80 | *.pch 81 | *.pdb 82 | *.ipdb 83 | *.pgc 84 | *.pgd 85 | *.rsp 86 | *.sbr 87 | *.tlb 88 | *.tli 89 | *.tlh 90 | *.tmp 91 | *.tmp_proj 92 | *_wpftmp.csproj 93 | *.log 94 | *.vspscc 95 | *.vssscc 96 | .builds 97 | *.pidb 98 | *.svclog 99 | *.scc 100 | 101 | # Chutzpah Test files 102 | _Chutzpah* 103 | 104 | # Visual C++ cache files 105 | ipch/ 106 | *.aps 107 | *.ncb 108 | *.opendb 109 | *.opensdf 110 | *.sdf 111 | *.cachefile 112 | *.VC.db 113 | *.VC.VC.opendb 114 | 115 | # Visual Studio profiler 116 | *.psess 117 | *.vsp 118 | *.vspx 119 | *.sap 120 | 121 | # Visual Studio Trace Files 122 | *.e2e 123 | 124 | # TFS 2012 Local Workspace 125 | $tf/ 126 | 127 | # Guidance Automation Toolkit 128 | *.gpState 129 | 130 | # ReSharper is a .NET coding add-in 131 | _ReSharper*/ 132 | *.[Rr]e[Ss]harper 133 | *.DotSettings.user 134 | 135 | # TeamCity is a build add-in 136 | _TeamCity* 137 | 138 | # DotCover is a Code Coverage Tool 139 | *.dotCover 140 | 141 | # AxoCover is a Code Coverage Tool 142 | .axoCover/* 143 | !.axoCover/settings.json 144 | 145 | # Coverlet is a free, cross platform Code Coverage Tool 146 | coverage*.json 147 | coverage*.xml 148 | coverage*.info 149 | 150 | # Visual Studio code coverage results 151 | *.coverage 152 | *.coveragexml 153 | 154 | # NCrunch 155 | _NCrunch_* 156 | .*crunch*.local.xml 157 | nCrunchTemp_* 158 | 159 | # MightyMoose 160 | *.mm.* 161 | AutoTest.Net/ 162 | 163 | # Web workbench (sass) 164 | .sass-cache/ 165 | 166 | # Installshield output folder 167 | [Ee]xpress/ 168 | 169 | # DocProject is a documentation generator add-in 170 | DocProject/buildhelp/ 171 | DocProject/Help/*.HxT 172 | DocProject/Help/*.HxC 173 | DocProject/Help/*.hhc 174 | DocProject/Help/*.hhk 175 | DocProject/Help/*.hhp 176 | DocProject/Help/Html2 177 | DocProject/Help/html 178 | 179 | # Click-Once directory 180 | publish/ 181 | 182 | # Publish Web Output 183 | *.[Pp]ublish.xml 184 | *.azurePubxml 185 | # Note: Comment the next line if you want to checkin your web deploy settings, 186 | # but database connection strings (with potential passwords) will be unencrypted 187 | *.pubxml 188 | *.publishproj 189 | 190 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 191 | # checkin your Azure Web App publish settings, but sensitive information contained 192 | # in these scripts will be unencrypted 193 | PublishScripts/ 194 | 195 | # NuGet Packages 196 | *.nupkg 197 | # NuGet Symbol Packages 198 | *.snupkg 199 | # The packages folder can be ignored because of Package Restore 200 | **/[Pp]ackages/* 201 | # except build/, which is used as an MSBuild target. 202 | !**/[Pp]ackages/build/ 203 | # Uncomment if necessary however generally it will be regenerated when needed 204 | #!**/[Pp]ackages/repositories.config 205 | # NuGet v3's project.json files produces more ignorable files 206 | *.nuget.props 207 | *.nuget.targets 208 | 209 | # Microsoft Azure Build Output 210 | csx/ 211 | *.build.csdef 212 | 213 | # Microsoft Azure Emulator 214 | ecf/ 215 | rcf/ 216 | 217 | # Windows Store app package directories and files 218 | AppPackages/ 219 | BundleArtifacts/ 220 | Package.StoreAssociation.xml 221 | _pkginfo.txt 222 | *.appx 223 | *.appxbundle 224 | *.appxupload 225 | 226 | # Visual Studio cache files 227 | # files ending in .cache can be ignored 228 | *.[Cc]ache 229 | # but keep track of directories ending in .cache 230 | !?*.[Cc]ache/ 231 | 232 | # Others 233 | ClientBin/ 234 | ~$* 235 | *~ 236 | *.dbmdl 237 | *.dbproj.schemaview 238 | *.jfm 239 | *.pfx 240 | *.publishsettings 241 | orleans.codegen.cs 242 | 243 | # Including strong name files can present a security risk 244 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 245 | #*.snk 246 | 247 | # Since there are multiple workflows, uncomment next line to ignore bower_components 248 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 249 | #bower_components/ 250 | 251 | # RIA/Silverlight projects 252 | Generated_Code/ 253 | 254 | # Backup & report files from converting an old project file 255 | # to a newer Visual Studio version. Backup files are not needed, 256 | # because we have git ;-) 257 | _UpgradeReport_Files/ 258 | Backup*/ 259 | UpgradeLog*.XML 260 | UpgradeLog*.htm 261 | ServiceFabricBackup/ 262 | *.rptproj.bak 263 | 264 | # SQL Server files 265 | *.mdf 266 | *.ldf 267 | *.ndf 268 | 269 | # Business Intelligence projects 270 | *.rdl.data 271 | *.bim.layout 272 | *.bim_*.settings 273 | *.rptproj.rsuser 274 | *- [Bb]ackup.rdl 275 | *- [Bb]ackup ([0-9]).rdl 276 | *- [Bb]ackup ([0-9][0-9]).rdl 277 | 278 | # Microsoft Fakes 279 | FakesAssemblies/ 280 | 281 | # GhostDoc plugin setting file 282 | *.GhostDoc.xml 283 | 284 | # Node.js Tools for Visual Studio 285 | .ntvs_analysis.dat 286 | node_modules/ 287 | 288 | # Visual Studio 6 build log 289 | *.plg 290 | 291 | # Visual Studio 6 workspace options file 292 | *.opt 293 | 294 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 295 | *.vbw 296 | 297 | # Visual Studio LightSwitch build output 298 | **/*.HTMLClient/GeneratedArtifacts 299 | **/*.DesktopClient/GeneratedArtifacts 300 | **/*.DesktopClient/ModelManifest.xml 301 | **/*.Server/GeneratedArtifacts 302 | **/*.Server/ModelManifest.xml 303 | _Pvt_Extensions 304 | 305 | # Paket dependency manager 306 | .paket/paket.exe 307 | paket-files/ 308 | 309 | # FAKE - F# Make 310 | .fake/ 311 | 312 | # CodeRush personal settings 313 | .cr/personal 314 | 315 | # Python Tools for Visual Studio (PTVS) 316 | __pycache__/ 317 | *.pyc 318 | 319 | # Cake - Uncomment if you are using it 320 | # tools/** 321 | # !tools/packages.config 322 | 323 | # Tabs Studio 324 | *.tss 325 | 326 | # Telerik's JustMock configuration file 327 | *.jmconfig 328 | 329 | # BizTalk build output 330 | *.btp.cs 331 | *.btm.cs 332 | *.odx.cs 333 | *.xsd.cs 334 | 335 | # OpenCover UI analysis results 336 | OpenCover/ 337 | 338 | # Azure Stream Analytics local run output 339 | ASALocalRun/ 340 | 341 | # MSBuild Binary and Structured Log 342 | *.binlog 343 | 344 | # NVidia Nsight GPU debugger configuration file 345 | *.nvuser 346 | 347 | # MFractors (Xamarin productivity tool) working folder 348 | .mfractor/ 349 | 350 | # Local History for Visual Studio 351 | .localhistory/ 352 | 353 | # BeatPulse healthcheck temp database 354 | healthchecksdb 355 | 356 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 357 | MigrationBackup/ 358 | 359 | # Ionide (cross platform F# VS Code tools) working folder 360 | .ionide/ 361 | 362 | # Fody - auto-generated XML schema 363 | FodyWeavers.xsd 364 | 365 | # Generated shader headers 366 | *Shader.h 367 | 368 | # IDEs 369 | .idea/ 370 | .vs/ 371 | .vscode/ 372 | 373 | # rizin 374 | *.rzdb 375 | *.sdb 376 | 377 | RizinWorkspace* 378 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "minhook"] 2 | path = minhook 3 | url = https://github.com/TheNewJavaman/minhook 4 | [submodule "UnrealModLoader"] 5 | path = UnrealModLoader 6 | url = https://github.com/TheNewJavaman/UnrealModLoader 7 | [submodule "PatternStreams"] 8 | path = PatternStreams 9 | url = https://github.com/TheNewJavaman/PatternStreams 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 2.1, February 1999 3 | 4 | Copyright (C) 1991, 1999 Free Software Foundation, Inc. 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | [This is the first released version of the Lesser GPL. It also counts 10 | as the successor of the GNU Library Public License, version 2, hence 11 | the version number 2.1.] 12 | 13 | Preamble 14 | 15 | The licenses for most software are designed to take away your 16 | freedom to share and change it. By contrast, the GNU General Public 17 | Licenses are intended to guarantee your freedom to share and change 18 | free software--to make sure the software is free for all its users. 19 | 20 | This license, the Lesser General Public License, applies to some 21 | specially designated software packages--typically libraries--of the 22 | Free Software Foundation and other authors who decide to use it. You 23 | can use it too, but we suggest you first think carefully about whether 24 | this license or the ordinary General Public License is the better 25 | strategy to use in any particular case, based on the explanations below. 26 | 27 | When we speak of free software, we are referring to freedom of use, 28 | not price. Our General Public Licenses are designed to make sure that 29 | you have the freedom to distribute copies of free software (and charge 30 | for this service if you wish); that you receive source code or can get 31 | it if you want it; that you can change the software and use pieces of 32 | it in new free programs; and that you are informed that you can do 33 | these things. 34 | 35 | To protect your rights, we need to make restrictions that forbid 36 | distributors to deny you these rights or to ask you to surrender these 37 | rights. These restrictions translate to certain responsibilities for 38 | you if you distribute copies of the library or if you modify it. 39 | 40 | For example, if you distribute copies of the library, whether gratis 41 | or for a fee, you must give the recipients all the rights that we gave 42 | you. You must make sure that they, too, receive or can get the source 43 | code. If you link other code with the library, you must provide 44 | complete object files to the recipients, so that they can relink them 45 | with the library after making changes to the library and recompiling 46 | it. And you must show them these terms so they know their rights. 47 | 48 | We protect your rights with a two-step method: (1) we copyright the 49 | library, and (2) we offer you this license, which gives you legal 50 | permission to copy, distribute and/or modify the library. 51 | 52 | To protect each distributor, we want to make it very clear that 53 | there is no warranty for the free library. Also, if the library is 54 | modified by someone else and passed on, the recipients should know 55 | that what they have is not the original version, so that the original 56 | author's reputation will not be affected by problems that might be 57 | introduced by others. 58 | 59 | Finally, software patents pose a constant threat to the existence of 60 | any free program. We wish to make sure that a company cannot 61 | effectively restrict the users of a free program by obtaining a 62 | restrictive license from a patent holder. Therefore, we insist that 63 | any patent license obtained for a version of the library must be 64 | consistent with the full freedom of use specified in this license. 65 | 66 | Most GNU software, including some libraries, is covered by the 67 | ordinary GNU General Public License. This license, the GNU Lesser 68 | General Public License, applies to certain designated libraries, and 69 | is quite different from the ordinary General Public License. We use 70 | this license for certain libraries in order to permit linking those 71 | libraries into non-free programs. 72 | 73 | When a program is linked with a library, whether statically or using 74 | a shared library, the combination of the two is legally speaking a 75 | combined work, a derivative of the original library. The ordinary 76 | General Public License therefore permits such linking only if the 77 | entire combination fits its criteria of freedom. The Lesser General 78 | Public License permits more lax criteria for linking other code with 79 | the library. 80 | 81 | We call this license the "Lesser" General Public License because it 82 | does Less to protect the user's freedom than the ordinary General 83 | Public License. It also provides other free software developers Less 84 | of an advantage over competing non-free programs. These disadvantages 85 | are the reason we use the ordinary General Public License for many 86 | libraries. However, the Lesser license provides advantages in certain 87 | special circumstances. 88 | 89 | For example, on rare occasions, there may be a special need to 90 | encourage the widest possible use of a certain library, so that it becomes 91 | a de-facto standard. To achieve this, non-free programs must be 92 | allowed to use the library. A more frequent case is that a free 93 | library does the same job as widely used non-free libraries. In this 94 | case, there is little to gain by limiting the free library to free 95 | software only, so we use the Lesser General Public License. 96 | 97 | In other cases, permission to use a particular library in non-free 98 | programs enables a greater number of people to use a large body of 99 | free software. For example, permission to use the GNU C Library in 100 | non-free programs enables many more people to use the whole GNU 101 | operating system, as well as its variant, the GNU/Linux operating 102 | system. 103 | 104 | Although the Lesser General Public License is Less protective of the 105 | users' freedom, it does ensure that the user of a program that is 106 | linked with the Library has the freedom and the wherewithal to run 107 | that program using a modified version of the Library. 108 | 109 | The precise terms and conditions for copying, distribution and 110 | modification follow. Pay close attention to the difference between a 111 | "work based on the library" and a "work that uses the library". The 112 | former contains code derived from the library, whereas the latter must 113 | be combined with the library in order to run. 114 | 115 | GNU LESSER GENERAL PUBLIC LICENSE 116 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 117 | 118 | 0. This License Agreement applies to any software library or other 119 | program which contains a notice placed by the copyright holder or 120 | other authorized party saying it may be distributed under the terms of 121 | this Lesser General Public License (also called "this License"). 122 | Each licensee is addressed as "you". 123 | 124 | A "library" means a collection of software functions and/or data 125 | prepared so as to be conveniently linked with application programs 126 | (which use some of those functions and data) to form executables. 127 | 128 | The "Library", below, refers to any such software library or work 129 | which has been distributed under these terms. A "work based on the 130 | Library" means either the Library or any derivative work under 131 | copyright law: that is to say, a work containing the Library or a 132 | portion of it, either verbatim or with modifications and/or translated 133 | straightforwardly into another language. (Hereinafter, translation is 134 | included without limitation in the term "modification".) 135 | 136 | "Source code" for a work means the preferred form of the work for 137 | making modifications to it. For a library, complete source code means 138 | all the source code for all modules it contains, plus any associated 139 | interface definition files, plus the scripts used to control compilation 140 | and installation of the library. 141 | 142 | Activities other than copying, distribution and modification are not 143 | covered by this License; they are outside its scope. The act of 144 | running a program using the Library is not restricted, and output from 145 | such a program is covered only if its contents constitute a work based 146 | on the Library (independent of the use of the Library in a tool for 147 | writing it). Whether that is true depends on what the Library does 148 | and what the program that uses the Library does. 149 | 150 | 1. You may copy and distribute verbatim copies of the Library's 151 | complete source code as you receive it, in any medium, provided that 152 | you conspicuously and appropriately publish on each copy an 153 | appropriate copyright notice and disclaimer of warranty; keep intact 154 | all the notices that refer to this License and to the absence of any 155 | warranty; and distribute a copy of this License along with the 156 | Library. 157 | 158 | You may charge a fee for the physical act of transferring a copy, 159 | and you may at your option offer warranty protection in exchange for a 160 | fee. 161 | 162 | 2. You may modify your copy or copies of the Library or any portion 163 | of it, thus forming a work based on the Library, and copy and 164 | distribute such modifications or work under the terms of Section 1 165 | above, provided that you also meet all of these conditions: 166 | 167 | a) The modified work must itself be a software library. 168 | 169 | b) You must cause the files modified to carry prominent notices 170 | stating that you changed the files and the date of any change. 171 | 172 | c) You must cause the whole of the work to be licensed at no 173 | charge to all third parties under the terms of this License. 174 | 175 | d) If a facility in the modified Library refers to a function or a 176 | table of data to be supplied by an application program that uses 177 | the facility, other than as an argument passed when the facility 178 | is invoked, then you must make a good faith effort to ensure that, 179 | in the event an application does not supply such function or 180 | table, the facility still operates, and performs whatever part of 181 | its purpose remains meaningful. 182 | 183 | (For example, a function in a library to compute square roots has 184 | a purpose that is entirely well-defined independent of the 185 | application. Therefore, Subsection 2d requires that any 186 | application-supplied function or table used by this function must 187 | be optional: if the application does not supply it, the square 188 | root function must still compute square roots.) 189 | 190 | These requirements apply to the modified work as a whole. If 191 | identifiable sections of that work are not derived from the Library, 192 | and can be reasonably considered independent and separate works in 193 | themselves, then this License, and its terms, do not apply to those 194 | sections when you distribute them as separate works. But when you 195 | distribute the same sections as part of a whole which is a work based 196 | on the Library, the distribution of the whole must be on the terms of 197 | this License, whose permissions for other licensees extend to the 198 | entire whole, and thus to each and every part regardless of who wrote 199 | it. 200 | 201 | Thus, it is not the intent of this section to claim rights or contest 202 | your rights to work written entirely by you; rather, the intent is to 203 | exercise the right to control the distribution of derivative or 204 | collective works based on the Library. 205 | 206 | In addition, mere aggregation of another work not based on the Library 207 | with the Library (or with a work based on the Library) on a volume of 208 | a storage or distribution medium does not bring the other work under 209 | the scope of this License. 210 | 211 | 3. You may opt to apply the terms of the ordinary GNU General Public 212 | License instead of this License to a given copy of the Library. To do 213 | this, you must alter all the notices that refer to this License, so 214 | that they refer to the ordinary GNU General Public License, version 2, 215 | instead of to this License. (If a newer version than version 2 of the 216 | ordinary GNU General Public License has appeared, then you can specify 217 | that version instead if you wish.) Do not make any other change in 218 | these notices. 219 | 220 | Once this change is made in a given copy, it is irreversible for 221 | that copy, so the ordinary GNU General Public License applies to all 222 | subsequent copies and derivative works made from that copy. 223 | 224 | This option is useful when you wish to copy part of the code of 225 | the Library into a program that is not a library. 226 | 227 | 4. You may copy and distribute the Library (or a portion or 228 | derivative of it, under Section 2) in object code or executable form 229 | under the terms of Sections 1 and 2 above provided that you accompany 230 | it with the complete corresponding machine-readable source code, which 231 | must be distributed under the terms of Sections 1 and 2 above on a 232 | medium customarily used for software interchange. 233 | 234 | If distribution of object code is made by offering access to copy 235 | from a designated place, then offering equivalent access to copy the 236 | source code from the same place satisfies the requirement to 237 | distribute the source code, even though third parties are not 238 | compelled to copy the source along with the object code. 239 | 240 | 5. A program that contains no derivative of any portion of the 241 | Library, but is designed to work with the Library by being compiled or 242 | linked with it, is called a "work that uses the Library". Such a 243 | work, in isolation, is not a derivative work of the Library, and 244 | therefore falls outside the scope of this License. 245 | 246 | However, linking a "work that uses the Library" with the Library 247 | creates an executable that is a derivative of the Library (because it 248 | contains portions of the Library), rather than a "work that uses the 249 | library". The executable is therefore covered by this License. 250 | Section 6 states terms for distribution of such executables. 251 | 252 | When a "work that uses the Library" uses material from a header file 253 | that is part of the Library, the object code for the work may be a 254 | derivative work of the Library even though the source code is not. 255 | Whether this is true is especially significant if the work can be 256 | linked without the Library, or if the work is itself a library. The 257 | threshold for this to be true is not precisely defined by law. 258 | 259 | If such an object file uses only numerical parameters, data 260 | structure layouts and accessors, and small macros and small inline 261 | functions (ten lines or less in length), then the use of the object 262 | file is unrestricted, regardless of whether it is legally a derivative 263 | work. (Executables containing this object code plus portions of the 264 | Library will still fall under Section 6.) 265 | 266 | Otherwise, if the work is a derivative of the Library, you may 267 | distribute the object code for the work under the terms of Section 6. 268 | Any executables containing that work also fall under Section 6, 269 | whether or not they are linked directly with the Library itself. 270 | 271 | 6. As an exception to the Sections above, you may also combine or 272 | link a "work that uses the Library" with the Library to produce a 273 | work containing portions of the Library, and distribute that work 274 | under terms of your choice, provided that the terms permit 275 | modification of the work for the customer's own use and reverse 276 | engineering for debugging such modifications. 277 | 278 | You must give prominent notice with each copy of the work that the 279 | Library is used in it and that the Library and its use are covered by 280 | this License. You must supply a copy of this License. If the work 281 | during execution displays copyright notices, you must include the 282 | copyright notice for the Library among them, as well as a reference 283 | directing the user to the copy of this License. Also, you must do one 284 | of these things: 285 | 286 | a) Accompany the work with the complete corresponding 287 | machine-readable source code for the Library including whatever 288 | changes were used in the work (which must be distributed under 289 | Sections 1 and 2 above); and, if the work is an executable linked 290 | with the Library, with the complete machine-readable "work that 291 | uses the Library", as object code and/or source code, so that the 292 | user can modify the Library and then relink to produce a modified 293 | executable containing the modified Library. (It is understood 294 | that the user who changes the contents of definitions files in the 295 | Library will not necessarily be able to recompile the application 296 | to use the modified definitions.) 297 | 298 | b) Use a suitable shared library mechanism for linking with the 299 | Library. A suitable mechanism is one that (1) uses at run time a 300 | copy of the library already present on the user's computer system, 301 | rather than copying library functions into the executable, and (2) 302 | will operate properly with a modified version of the library, if 303 | the user installs one, as long as the modified version is 304 | interface-compatible with the version that the work was made with. 305 | 306 | c) Accompany the work with a written offer, valid for at 307 | least three years, to give the same user the materials 308 | specified in Subsection 6a, above, for a charge no more 309 | than the cost of performing this distribution. 310 | 311 | d) If distribution of the work is made by offering access to copy 312 | from a designated place, offer equivalent access to copy the above 313 | specified materials from the same place. 314 | 315 | e) Verify that the user has already received a copy of these 316 | materials or that you have already sent this user a copy. 317 | 318 | For an executable, the required form of the "work that uses the 319 | Library" must include any data and utility programs needed for 320 | reproducing the executable from it. However, as a special exception, 321 | the materials to be distributed need not include anything that is 322 | normally distributed (in either source or binary form) with the major 323 | components (compiler, kernel, and so on) of the operating system on 324 | which the executable runs, unless that component itself accompanies 325 | the executable. 326 | 327 | It may happen that this requirement contradicts the license 328 | restrictions of other proprietary libraries that do not normally 329 | accompany the operating system. Such a contradiction means you cannot 330 | use both them and the Library together in an executable that you 331 | distribute. 332 | 333 | 7. You may place library facilities that are a work based on the 334 | Library side-by-side in a single library together with other library 335 | facilities not covered by this License, and distribute such a combined 336 | library, provided that the separate distribution of the work based on 337 | the Library and of the other library facilities is otherwise 338 | permitted, and provided that you do these two things: 339 | 340 | a) Accompany the combined library with a copy of the same work 341 | based on the Library, uncombined with any other library 342 | facilities. This must be distributed under the terms of the 343 | Sections above. 344 | 345 | b) Give prominent notice with the combined library of the fact 346 | that part of it is a work based on the Library, and explaining 347 | where to find the accompanying uncombined form of the same work. 348 | 349 | 8. You may not copy, modify, sublicense, link with, or distribute 350 | the Library except as expressly provided under this License. Any 351 | attempt otherwise to copy, modify, sublicense, link with, or 352 | distribute the Library is void, and will automatically terminate your 353 | rights under this License. However, parties who have received copies, 354 | or rights, from you under this License will not have their licenses 355 | terminated so long as such parties remain in full compliance. 356 | 357 | 9. You are not required to accept this License, since you have not 358 | signed it. However, nothing else grants you permission to modify or 359 | distribute the Library or its derivative works. These actions are 360 | prohibited by law if you do not accept this License. Therefore, by 361 | modifying or distributing the Library (or any work based on the 362 | Library), you indicate your acceptance of this License to do so, and 363 | all its terms and conditions for copying, distributing or modifying 364 | the Library or works based on it. 365 | 366 | 10. Each time you redistribute the Library (or any work based on the 367 | Library), the recipient automatically receives a license from the 368 | original licensor to copy, distribute, link with or modify the Library 369 | subject to these terms and conditions. You may not impose any further 370 | restrictions on the recipients' exercise of the rights granted herein. 371 | You are not responsible for enforcing compliance by third parties with 372 | this License. 373 | 374 | 11. If, as a consequence of a court judgment or allegation of patent 375 | infringement or for any other reason (not limited to patent issues), 376 | conditions are imposed on you (whether by court order, agreement or 377 | otherwise) that contradict the conditions of this License, they do not 378 | excuse you from the conditions of this License. If you cannot 379 | distribute so as to satisfy simultaneously your obligations under this 380 | License and any other pertinent obligations, then as a consequence you 381 | may not distribute the Library at all. For example, if a patent 382 | license would not permit royalty-free redistribution of the Library by 383 | all those who receive copies directly or indirectly through you, then 384 | the only way you could satisfy both it and this License would be to 385 | refrain entirely from distribution of the Library. 386 | 387 | If any portion of this section is held invalid or unenforceable under any 388 | particular circumstance, the balance of the section is intended to apply, 389 | and the section as a whole is intended to apply in other circumstances. 390 | 391 | It is not the purpose of this section to induce you to infringe any 392 | patents or other property right claims or to contest validity of any 393 | such claims; this section has the sole purpose of protecting the 394 | integrity of the free software distribution system which is 395 | implemented by public license practices. Many people have made 396 | generous contributions to the wide range of software distributed 397 | through that system in reliance on consistent application of that 398 | system; it is up to the author/donor to decide if he or she is willing 399 | to distribute software through any other system and a licensee cannot 400 | impose that choice. 401 | 402 | This section is intended to make thoroughly clear what is believed to 403 | be a consequence of the rest of this License. 404 | 405 | 12. If the distribution and/or use of the Library is restricted in 406 | certain countries either by patents or by copyrighted interfaces, the 407 | original copyright holder who places the Library under this License may add 408 | an explicit geographical distribution limitation excluding those countries, 409 | so that distribution is permitted only in or among countries not thus 410 | excluded. In such case, this License incorporates the limitation as if 411 | written in the body of this License. 412 | 413 | 13. The Free Software Foundation may publish revised and/or new 414 | versions of the Lesser General Public License from time to time. 415 | Such new versions will be similar in spirit to the present version, 416 | but may differ in detail to address new problems or concerns. 417 | 418 | Each version is given a distinguishing version number. If the Library 419 | specifies a version number of this License which applies to it and 420 | "any later version", you have the option of following the terms and 421 | conditions either of that version or of any later version published by 422 | the Free Software Foundation. If the Library does not specify a 423 | license version number, you may choose any version ever published by 424 | the Free Software Foundation. 425 | 426 | 14. If you wish to incorporate parts of the Library into other free 427 | programs whose distribution conditions are incompatible with these, 428 | write to the author to ask for permission. For software which is 429 | copyrighted by the Free Software Foundation, write to the Free 430 | Software Foundation; we sometimes make exceptions for this. Our 431 | decision will be guided by the two goals of preserving the free status 432 | of all derivatives of our free software and of promoting the sharing 433 | and reuse of software generally. 434 | 435 | NO WARRANTY 436 | 437 | 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO 438 | WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. 439 | EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR 440 | OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY 441 | KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE 442 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 443 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE 444 | LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME 445 | THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 446 | 447 | 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 448 | WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY 449 | AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU 450 | FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 451 | CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE 452 | LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING 453 | RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A 454 | FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF 455 | SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 456 | DAMAGES. 457 | 458 | END OF TERMS AND CONDITIONS 459 | 460 | How to Apply These Terms to Your New Libraries 461 | 462 | If you develop a new library, and you want it to be of the greatest 463 | possible use to the public, we recommend making it free software that 464 | everyone can redistribute and change. You can do so by permitting 465 | redistribution under these terms (or, alternatively, under the terms of the 466 | ordinary General Public License). 467 | 468 | To apply these terms, attach the following notices to the library. It is 469 | safest to attach them to the start of each source file to most effectively 470 | convey the exclusion of warranty; and each file should have at least the 471 | "copyright" line and a pointer to where the full notice is found. 472 | 473 | 474 | Copyright (C) 475 | 476 | This library is free software; you can redistribute it and/or 477 | modify it under the terms of the GNU Lesser General Public 478 | License as published by the Free Software Foundation; either 479 | version 2.1 of the License, or (at your option) any later version. 480 | 481 | This library is distributed in the hope that it will be useful, 482 | but WITHOUT ANY WARRANTY; without even the implied warranty of 483 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 484 | Lesser General Public License for more details. 485 | 486 | You should have received a copy of the GNU Lesser General Public 487 | License along with this library; if not, write to the Free Software 488 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 489 | USA 490 | 491 | Also add information on how to contact you by electronic and paper mail. 492 | 493 | You should also get your employer (if you work as a programmer) or your 494 | school, if any, to sign a "copyright disclaimer" for the library, if 495 | necessary. Here is a sample; alter the names: 496 | 497 | Yoyodyne, Inc., hereby disclaims all copyright interest in the 498 | library `Frob' (a library for tweaking knobs) written by James Random 499 | Hacker. 500 | 501 | , 1 April 1990 502 | Ty Coon, President of Vice 503 | 504 | That's all there is to it! 505 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![](https://img.shields.io/static/v1?label=Homepage&message=unrealvr.dev&logo=&color=2b2b2b)](https://unrealvr.dev/) 2 | [![](https://img.shields.io/static/v1?label=Discord&message=Flatscreen%20To%20VR&color=5865F2&logo=Discord&logoColor=white)](https://discord.gg/6SEy6WmP5t) 3 | [![](https://img.shields.io/static/v1?label=Patreon&message=gpizarro&color=FF424D&logo=Patreon&logoColor=white)](https://www.patreon.com/gpizarro) 4 | 5 | # UnrealVR 6 | 7 | **No releases yet** 8 | 9 | Adds virtual reality support to flatscreen Unreal Engine games 10 | 11 | ## Features 12 | 13 | - **Stereoscopic Rendering**: Presents the game in full 3D, not a flatscreen in VR 14 | - **6 Degrees of Freedom**: Headset movement and rotation is tracked in-game 15 | - **Configurable Profiles**: Save and share your settings for each game 16 | 17 | ## Coming Soon 18 | 19 | - **Input Binding**: Map VR controller buttons to game actions 20 | - **Controller Tracking**: Link hand movement to in-game objects 21 | - **Synchronized Rendering**: Renders both eyes at the same time, reducing discomfort 22 | 23 | ## Improvements 24 | 25 | There are so many features I want to add, and so many refactorings that could improve the code. 26 | 27 | - **Input Binding**: Map VR controller buttons to game actions via keyboard/mouse/gamepad input. Add a button to reset 28 | the view rotation/position. 29 | - **Controller Tracking**: Link hand movement to in-game objects. Make them rotate and move according to how your 30 | hands move. Allow configurable offsets for the UI so that it feels like your hand is holding a gun, for example. 31 | - **Synchronized Rendering**: Renders both eyes at the same time, reducing discomfort. This one isn't as important 32 | because the mod seems to perform pretty well so far. But at lower framerates, some people may experience discomfort is 33 | the positions of objects aren't aligned for the left/right eyes. 34 | - **Optimization**: Do more profiling to increase framerate. VR should be accessible to as many people as possible, so 35 | we as a community need to make sure that our mods aren't too limited by hardware. 36 | - **VR For All**: Abstract the graphics, VR, and game engine services into interfaces that can be implemented for other 37 | graphics APIs/VR runtimes/game engines; this will definitely be necessary for D3D12, and if I want to add support 38 | Vulkan/OpenGL, it'll be even more important. Probably won't be used for other game engines, but if someone uses a game 39 | engine written in any language that can interop with C++, imagine the possibilities! Probably not useful for VR, 40 | though, since OpenXR is the future... hopefully there won't ever be a replacement VR runtime that I'll have to add 41 | support for. 42 | - **UE Version Detector**: Reduces the configuration necessary for new games. Would use the same information as the 43 | Details pane in File Explorer to determine the Unreal Engine version. 44 | - **Console Output**: Enable/disable the log window; also, don't use a basic terminal for output, show it in the 45 | nice-looking app UI. 46 | - **Unreal Engine 5**: It's not too different from UE4, so add support to UML if Russell.J doesn't have time 47 | - **Build System**: Use meson so it's faster and cross-platform. Would also reduce dependence on Rider/Visual Studio 48 | - **Stop Using UML**: Build a home-grown solution that's better for this specific use-case 49 | - **Dependency Injection**: Inject service class instances at runtime so there aren't as many static members 50 | 51 | ## Preview 52 | 53 | ![](preview.png) 54 | 55 | ## Contribute 56 | 57 | If you have any ideas for features or want to implement a feature yourself, please email me or send a DM on Discord to 58 | TheNewJavaman#3966. 59 | 60 | ### Development Tools 61 | 62 | - **Rider 2022.1 EAP**: For writing C++ code; it has a much better code formatter than Visual Studio, is much faster, 63 | and has superior refactoring capabilities. Also supports Python for the rizin script. Get it for free via the early 64 | access program in the Jetbrains Toolbox app 65 | - **Visual Studio 2022 Preview**: For writing C# code or HLSL shaders; Rider doesn't support WinUI nor Hot Reload; also, 66 | VS supports profiling both the CPU and GPU for C++, compiling HLSL, and packaging the final app. Get it for free via 67 | the Visual Studio installer 68 | - **Sourcetree**: My favorite Git GUI; the main thing is its support for multiple stashes; get it for free from 69 | Atlassian 70 | - **Rizin**: Used to reverse engineer UE/game binaries. Get it for free from GitHub 71 | 72 | ### Rizin Cheatsheet 73 | 74 | My most-used commands for reverse-engineering game binaries 75 | 76 | - `[command]?`: Show the help menu 77 | - `o [filename]`: Open a binary (exe, dll, lib) 78 | - `ipd [filename]`: Open a debug symbols file (pdb) 79 | - `Po [filename]`: Open a project (rzdb) 80 | - `Ps [filename]`: Save project to file (rzdb) 81 | - `aa`: Run quick analysis on the binary (better for no PDB) 82 | - `aaa`: Run longer analysis on the binary (better for PDB, includes function autonaming) 83 | - `aflq~[function]`: Search for a function 84 | - `s [address|function]`: Go to an address or function 85 | - `zaf [function] [signature]`: Create a signature for the current function 86 | - `z`: List signatures 87 | - `zos [filename]`: Save signatures to file (sdb) 88 | - `zj | python rizin_to_uml.py [numbytes]`: Print signatures in UML format; see `rizin_to_uml.py` 89 | -------------------------------------------------------------------------------- /UnrealVR.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.2.32210.308 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnrealVRLoader", "UnrealVRLoader\UnrealVRLoader.vcxproj", "{D6615132-07AE-494B-91B0-84C8BD5EFF23}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libMinHook", "minhook\build\VC16\libMinHook.vcxproj", "{F142A341-5EE0-442D-A15F-98AE9B48DBAE}" 9 | EndProject 10 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnrealEngineModLoader", "UnrealModLoader\UnrealEngineModLoader\UnrealEngineModLoader.vcxproj", "{DE3BC2AD-2683-4D76-AD72-95D98164E9C7}" 11 | EndProject 12 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{7C1C8400-8B57-4E8F-B04C-7F56FC146C56}" 13 | ProjectSection(SolutionItems) = preProject 14 | README.md = README.md 15 | rizin_to_uml.py = rizin_to_uml.py 16 | EndProjectSection 17 | EndProject 18 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnrealVRLauncher", "UnrealVRLauncher\UnrealVRLauncher.csproj", "{F8C4A549-E621-4AA5-A8ED-8C2C12250C79}" 19 | ProjectSection(ProjectDependencies) = postProject 20 | {D6615132-07AE-494B-91B0-84C8BD5EFF23} = {D6615132-07AE-494B-91B0-84C8BD5EFF23} 21 | {DE3BC2AD-2683-4D76-AD72-95D98164E9C7} = {DE3BC2AD-2683-4D76-AD72-95D98164E9C7} 22 | EndProjectSection 23 | EndProject 24 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PatternStreams", "PatternStreams\PatternStreams\PatternStreams.vcxproj", "{37CD8A5D-65E8-4D18-90A3-595EEA6C6F19}" 25 | EndProject 26 | Global 27 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 28 | Debug|arm64 = Debug|arm64 29 | Debug|x64 = Debug|x64 30 | Debug|x86 = Debug|x86 31 | Release|arm64 = Release|arm64 32 | Release|x64 = Release|x64 33 | Release|x86 = Release|x86 34 | EndGlobalSection 35 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 36 | {D6615132-07AE-494B-91B0-84C8BD5EFF23}.Debug|arm64.ActiveCfg = Debug|x64 37 | {D6615132-07AE-494B-91B0-84C8BD5EFF23}.Debug|arm64.Build.0 = Debug|x64 38 | {D6615132-07AE-494B-91B0-84C8BD5EFF23}.Debug|x64.ActiveCfg = Debug|x64 39 | {D6615132-07AE-494B-91B0-84C8BD5EFF23}.Debug|x64.Build.0 = Debug|x64 40 | {D6615132-07AE-494B-91B0-84C8BD5EFF23}.Debug|x86.ActiveCfg = Debug|Win32 41 | {D6615132-07AE-494B-91B0-84C8BD5EFF23}.Debug|x86.Build.0 = Debug|Win32 42 | {D6615132-07AE-494B-91B0-84C8BD5EFF23}.Release|arm64.ActiveCfg = Release|x64 43 | {D6615132-07AE-494B-91B0-84C8BD5EFF23}.Release|arm64.Build.0 = Release|x64 44 | {D6615132-07AE-494B-91B0-84C8BD5EFF23}.Release|x64.ActiveCfg = Release|x64 45 | {D6615132-07AE-494B-91B0-84C8BD5EFF23}.Release|x64.Build.0 = Release|x64 46 | {D6615132-07AE-494B-91B0-84C8BD5EFF23}.Release|x86.ActiveCfg = Release|Win32 47 | {D6615132-07AE-494B-91B0-84C8BD5EFF23}.Release|x86.Build.0 = Release|Win32 48 | {F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|arm64.ActiveCfg = Debug|x64 49 | {F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|arm64.Build.0 = Debug|x64 50 | {F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.ActiveCfg = Debug|x64 51 | {F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.Build.0 = Debug|x64 52 | {F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x86.ActiveCfg = Debug|Win32 53 | {F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x86.Build.0 = Debug|Win32 54 | {F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|arm64.ActiveCfg = Release|x64 55 | {F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|arm64.Build.0 = Release|x64 56 | {F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.ActiveCfg = Release|x64 57 | {F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.Build.0 = Release|x64 58 | {F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x86.ActiveCfg = Release|Win32 59 | {F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x86.Build.0 = Release|Win32 60 | {DE3BC2AD-2683-4D76-AD72-95D98164E9C7}.Debug|arm64.ActiveCfg = Debug|x64 61 | {DE3BC2AD-2683-4D76-AD72-95D98164E9C7}.Debug|arm64.Build.0 = Debug|x64 62 | {DE3BC2AD-2683-4D76-AD72-95D98164E9C7}.Debug|x64.ActiveCfg = Debug|x64 63 | {DE3BC2AD-2683-4D76-AD72-95D98164E9C7}.Debug|x64.Build.0 = Debug|x64 64 | {DE3BC2AD-2683-4D76-AD72-95D98164E9C7}.Debug|x86.ActiveCfg = Debug|Win32 65 | {DE3BC2AD-2683-4D76-AD72-95D98164E9C7}.Debug|x86.Build.0 = Debug|Win32 66 | {DE3BC2AD-2683-4D76-AD72-95D98164E9C7}.Release|arm64.ActiveCfg = Release|x64 67 | {DE3BC2AD-2683-4D76-AD72-95D98164E9C7}.Release|arm64.Build.0 = Release|x64 68 | {DE3BC2AD-2683-4D76-AD72-95D98164E9C7}.Release|x64.ActiveCfg = Release|x64 69 | {DE3BC2AD-2683-4D76-AD72-95D98164E9C7}.Release|x64.Build.0 = Release|x64 70 | {DE3BC2AD-2683-4D76-AD72-95D98164E9C7}.Release|x86.ActiveCfg = Release|Win32 71 | {DE3BC2AD-2683-4D76-AD72-95D98164E9C7}.Release|x86.Build.0 = Release|Win32 72 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Debug|arm64.ActiveCfg = Debug|arm64 73 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Debug|arm64.Build.0 = Debug|arm64 74 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Debug|arm64.Deploy.0 = Debug|arm64 75 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Debug|x64.ActiveCfg = Debug|x64 76 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Debug|x64.Build.0 = Debug|x64 77 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Debug|x64.Deploy.0 = Debug|x64 78 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Debug|x86.ActiveCfg = Debug|x86 79 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Debug|x86.Build.0 = Debug|x86 80 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Debug|x86.Deploy.0 = Debug|x86 81 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Release|arm64.ActiveCfg = Release|arm64 82 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Release|arm64.Build.0 = Release|arm64 83 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Release|arm64.Deploy.0 = Release|arm64 84 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Release|x64.ActiveCfg = Release|x64 85 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Release|x64.Build.0 = Release|x64 86 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Release|x64.Deploy.0 = Release|x64 87 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Release|x86.ActiveCfg = Release|x86 88 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Release|x86.Build.0 = Release|x86 89 | {F8C4A549-E621-4AA5-A8ED-8C2C12250C79}.Release|x86.Deploy.0 = Release|x86 90 | {37CD8A5D-65E8-4D18-90A3-595EEA6C6F19}.Debug|arm64.ActiveCfg = Debug|x64 91 | {37CD8A5D-65E8-4D18-90A3-595EEA6C6F19}.Debug|arm64.Build.0 = Debug|x64 92 | {37CD8A5D-65E8-4D18-90A3-595EEA6C6F19}.Debug|x64.ActiveCfg = Debug|x64 93 | {37CD8A5D-65E8-4D18-90A3-595EEA6C6F19}.Debug|x64.Build.0 = Debug|x64 94 | {37CD8A5D-65E8-4D18-90A3-595EEA6C6F19}.Debug|x86.ActiveCfg = Debug|Win32 95 | {37CD8A5D-65E8-4D18-90A3-595EEA6C6F19}.Debug|x86.Build.0 = Debug|Win32 96 | {37CD8A5D-65E8-4D18-90A3-595EEA6C6F19}.Release|arm64.ActiveCfg = Release|x64 97 | {37CD8A5D-65E8-4D18-90A3-595EEA6C6F19}.Release|arm64.Build.0 = Release|x64 98 | {37CD8A5D-65E8-4D18-90A3-595EEA6C6F19}.Release|x64.ActiveCfg = Release|x64 99 | {37CD8A5D-65E8-4D18-90A3-595EEA6C6F19}.Release|x64.Build.0 = Release|x64 100 | {37CD8A5D-65E8-4D18-90A3-595EEA6C6F19}.Release|x86.ActiveCfg = Release|Win32 101 | {37CD8A5D-65E8-4D18-90A3-595EEA6C6F19}.Release|x86.Build.0 = Release|Win32 102 | EndGlobalSection 103 | GlobalSection(SolutionProperties) = preSolution 104 | HideSolutionNode = FALSE 105 | EndGlobalSection 106 | GlobalSection(ExtensibilityGlobals) = postSolution 107 | SolutionGuid = {59EE696C-5345-4B77-8BE2-BCA76CA5CDC6} 108 | EndGlobalSection 109 | EndGlobal 110 | -------------------------------------------------------------------------------- /UnrealVR.sln.DotSettings: -------------------------------------------------------------------------------- 1 |  2 | True 3 | ForNonProjectFiles 4 | Required 5 | Required 6 | Required 7 | True 8 | END_OF_LINE 9 | 1 10 | 1 11 | TOGETHER_SAME_LINE 12 | ON_SINGLE_LINE 13 | ON_SINGLE_LINE 14 | END_OF_LINE 15 | 1 16 | 1 17 | ON_SINGLE_LINE 18 | All 19 | END_OF_LINE 20 | END_OF_LINE 21 | False 22 | False 23 | True 24 | False 25 | END_OF_LINE 26 | LINE_BREAK 27 | LINE_BREAK 28 | LINE_BREAK 29 | True 30 | True 31 | False 32 | True 33 | ON_SINGLE_LINE 34 | ON_SINGLE_LINE 35 | END_OF_LINE 36 | WRAP_IF_LONG 37 | CHOP_IF_LONG 38 | True 39 | True 40 | True -------------------------------------------------------------------------------- /UnrealVRLauncher/App.xaml: -------------------------------------------------------------------------------- 1 |  6 | 7 | 8 | 9 | 10 | 11 | 15 | 20 | 25 | 31 | 36 | 39 | 43 | 47 | 50 | 53 | 59 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /UnrealVRLauncher/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.UI.Xaml; 2 | using Microsoft.UI.Xaml.Controls; 3 | using Microsoft.UI.Xaml.Controls.Primitives; 4 | using Microsoft.UI.Xaml.Data; 5 | using Microsoft.UI.Xaml.Input; 6 | using Microsoft.UI.Xaml.Media; 7 | using Microsoft.UI.Xaml.Navigation; 8 | using Microsoft.UI.Xaml.Shapes; 9 | using System; 10 | using System.Collections.Generic; 11 | using System.IO; 12 | using System.Linq; 13 | using System.Runtime.InteropServices.WindowsRuntime; 14 | using Windows.ApplicationModel; 15 | using Windows.ApplicationModel.Activation; 16 | using Windows.Foundation; 17 | using Windows.Foundation.Collections; 18 | 19 | namespace UnrealVR 20 | { 21 | public partial class App : Application 22 | { 23 | public App() 24 | { 25 | this.InitializeComponent(); 26 | } 27 | 28 | protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args) 29 | { 30 | m_window = new MainWindow(); 31 | m_window.Activate(); 32 | } 33 | 34 | private Window m_window; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /UnrealVRLauncher/Assets/LockScreenLogo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheNewJavaman/unreal-vr/06c62a2022bb511d2b63d26bd8ba0f7acca2ea3c/UnrealVRLauncher/Assets/LockScreenLogo.scale-200.png -------------------------------------------------------------------------------- /UnrealVRLauncher/Assets/SplashScreen.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheNewJavaman/unreal-vr/06c62a2022bb511d2b63d26bd8ba0f7acca2ea3c/UnrealVRLauncher/Assets/SplashScreen.scale-200.png -------------------------------------------------------------------------------- /UnrealVRLauncher/Assets/Square150x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheNewJavaman/unreal-vr/06c62a2022bb511d2b63d26bd8ba0f7acca2ea3c/UnrealVRLauncher/Assets/Square150x150Logo.scale-200.png -------------------------------------------------------------------------------- /UnrealVRLauncher/Assets/Square44x44Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheNewJavaman/unreal-vr/06c62a2022bb511d2b63d26bd8ba0f7acca2ea3c/UnrealVRLauncher/Assets/Square44x44Logo.scale-200.png -------------------------------------------------------------------------------- /UnrealVRLauncher/Assets/Square44x44Logo.targetsize-24_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheNewJavaman/unreal-vr/06c62a2022bb511d2b63d26bd8ba0f7acca2ea3c/UnrealVRLauncher/Assets/Square44x44Logo.targetsize-24_altform-unplated.png -------------------------------------------------------------------------------- /UnrealVRLauncher/Assets/StoreLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheNewJavaman/unreal-vr/06c62a2022bb511d2b63d26bd8ba0f7acca2ea3c/UnrealVRLauncher/Assets/StoreLogo.png -------------------------------------------------------------------------------- /UnrealVRLauncher/Assets/Wide310x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheNewJavaman/unreal-vr/06c62a2022bb511d2b63d26bd8ba0f7acca2ea3c/UnrealVRLauncher/Assets/Wide310x150Logo.scale-200.png -------------------------------------------------------------------------------- /UnrealVRLauncher/MainWindow.xaml: -------------------------------------------------------------------------------- 1 |  8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 |