Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
c3ba888
Remove bad contact information
N7Alpha Apr 6, 2023
9af5a21
Update README.md
N7Alpha Apr 7, 2023
adc678c
Add load_cfg_file() function to load libretro core options from a .cf…
AltoRetrato Apr 11, 2023
5b7298a
Revert "load libretro core options from... file"
N7Alpha Jun 5, 2023
a6890e7
Move retro-common code to public folder
N7Alpha Dec 21, 2022
fb82e25
Add [miniz](https://github.com/richgel999/miniz)
N7Alpha Dec 21, 2022
02789c7
Make and document building faster
N7Alpha Dec 21, 2022
e19b1bd
Add partial implementation of Editor Module
N7Alpha Feb 20, 2023
81ede17
Add buildbot.libretro.com certificate
N7Alpha Feb 3, 2023
3db4338
Add method of getting bound controllers on core
N7Alpha Feb 18, 2023
3101a59
Refactor some code using ChatGPT
N7Alpha Feb 20, 2023
17c94ce
Remove old input handling code
N7Alpha Apr 29, 2023
039c8db
Eliminate SDL2 dependency
N7Alpha May 1, 2023
239ac55
Normalize line endings
N7Alpha May 2, 2023
72b3864
Make gamemode to select between VR & non-VR pawns
N7Alpha May 14, 2023
05153c0
Fix bloated include UBT complained about
N7Alpha May 14, 2023
6b4c0d9
Fix an invalid state transition and document
N7Alpha May 14, 2023
ac352ab
Improve VRPawn grab action
N7Alpha May 16, 2023
26f7641
Improve compatibility between engine versions
N7Alpha May 16, 2023
3dd94ae
Ditch the inherited blueprint idea
N7Alpha May 16, 2023
f5fa95e
Remove useless pragma
N7Alpha May 16, 2023
057a806
Add procedure for engine version compatibility
N7Alpha May 16, 2023
2970100
Fix #21 UE5_2 Build
N7Alpha May 16, 2023
2300105
Add SIMD support for ARM NEON
N7Alpha May 22, 2023
9f76692
Refactor to make struct reusable
N7Alpha May 23, 2023
eed30c5
Refactor and cleanup
N7Alpha May 25, 2023
63ca339
Reimplement options code to be more threadsafe
N7Alpha May 29, 2023
ab6d9ae
Decouple core discovery; Add http error check
N7Alpha May 29, 2023
8b51fe9
Add OculusVR as a dependency
N7Alpha Jun 4, 2023
f770732
Add obvious disclaimer
N7Alpha Jun 4, 2023
1105b31
Add planned supported platforms
N7Alpha Jun 4, 2023
329a9c5
Fix indexing logic
N7Alpha Jun 4, 2023
3269058
Add a temp fix for pixel formats on Android
N7Alpha Jun 4, 2023
6692eb7
Mark the editor module as an editor module
N7Alpha Jun 5, 2023
cee9652
BUGFIX default initialization
N7Alpha Jun 5, 2023
4fbf323
Document and fix small things
N7Alpha Jun 5, 2023
6986cbb
Add bSuccess parameter to core launch event
N7Alpha Jun 5, 2023
9edff07
Update documentation
N7Alpha Jun 5, 2023
ddcec0f
Rename variable to comply with naming conventions
N7Alpha Jun 5, 2023
459c2c1
Make filename more appropriate
N7Alpha Jun 5, 2023
139ca7e
Make variable name more appropriate
N7Alpha Jun 5, 2023
8f419cc
Ignore line endings change in blame
N7Alpha May 2, 2023
0af6e00
Commit Content
N7Alpha Dec 21, 2022
6dc54b6
Add missing headers
N7Alpha Jun 5, 2023
4efc2fc
Add a 10 minute timeout
N7Alpha Jun 5, 2023
c1f8c22
Fix packaging with UAT on UE 5.2
N7Alpha Jun 6, 2023
6d4eb65
Fix packaging with UAT on UE 5.0
N7Alpha Jun 7, 2023
eaeb485
Make small optimization
N7Alpha Jun 7, 2023
3135706
Convert tabs to spaces in project C++ source
N7Alpha Jun 7, 2023
e73e2eb
Ignore whitespace changes in blame
N7Alpha Jun 7, 2023
51ea170
Use mingw instead of wsl
N7Alpha Jun 7, 2023
8922aef
Update actions versions; Make setup.sh run synchronously
N7Alpha Jun 7, 2023
e16b288
Fix silly thing I forgot to test
N7Alpha Jun 8, 2023
fba6e87
Created setup.cmd for Windows users (#23)
AltoRetrato Jun 13, 2023
bd5eaef
Add editor warning for #24
N7Alpha Jun 13, 2023
92f02a9
Fix packaging with UAT on UE 5.2
N7Alpha Sep 2, 2023
67c3b7f
Handle ROMPath not set when core !supports_no_game
N7Alpha Sep 2, 2023
d80545d
Add mask for device ID
N7Alpha Sep 2, 2023
072d5f6
Fix #26
N7Alpha Sep 2, 2023
61e8362
Update the copyright date
N7Alpha Sep 2, 2023
6ecb66d
Fix build for UE 5.3
N7Alpha Oct 14, 2023
8a7b636
Fix return value
N7Alpha Oct 14, 2023
ab2fd37
Implement release action (#29)
N7Alpha Oct 21, 2023
5afe5ec
Change packaging so we don't double zip
N7Alpha Oct 22, 2023
5e37451
Fix folder name causing UAT to convulse
N7Alpha Oct 22, 2023
2cf1352
Modify to package in parent directory
N7Alpha Oct 22, 2023
3641f7f
Remove .. from paths
N7Alpha Oct 22, 2023
7661e55
Refactor
N7Alpha Oct 29, 2023
c57fb14
Add recursive search for Roms
N7Alpha Oct 29, 2023
d5a463e
💧
N7Alpha Oct 29, 2023
d3c0ef6
Add search box for ROMs list
N7Alpha Oct 30, 2023
883e304
Point badge to better destination
N7Alpha Oct 31, 2023
0961e9f
Use matrix strategy to consolidate code
N7Alpha Oct 29, 2023
b551df4
Make version support badge depend on actual builds
N7Alpha Nov 5, 2023
a147af3
Update miniz to 3.0.2
N7Alpha May 11, 2024
f6f4c30
Update to support UE 5.4
N7Alpha May 11, 2024
c0e326a
Fix packaging for UE 5.4
N7Alpha May 11, 2024
aacd0d9
support mouse move and avoid crashing when loading some cores or roms
yosanyu Oct 22, 2024
cf37346
call unload_game before deinit that avoid mame2003-plus don't save de…
yosanyu Nov 27, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
239ac5549ea07fd966c58d5a58ac20d153597f65
bfcc9c3ba9c860f113d50cced2b0c3b927b070ef
4 changes: 3 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# This is quite implicit in what its doing. But its saying for all files (the * wildcard) if it thinks its a text file. It will try to automatically manage their line endings. Specifically it should make committed files have LF line endings most of the time.
* text=auto

*.png binary
*.png binary
*.uasset binary
*.umap binary

*.sln eol=crlf
*.vcxproj eol=crlf
Expand Down
116 changes: 54 additions & 62 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,80 +1,72 @@
# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
workflow_dispatch:
push:
branches: [ master ]
# Would be cool to have this but since I'm self hosting this would be a major security hole
#merge:
# branches: [ master ]
branches: [ master, github-workflow-test ]
tags:
- 'v*.*.*'

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
create-release:
runs-on: ubuntu-latest
outputs:
upload_url: ${{ steps.create_release.outputs.upload_url }}
steps:
- name: Create Release
id: create_release
if: startsWith(github.ref, 'refs/tags/') # Only release when a tag is pushed
uses: actions/create-release@v1
with:
draft: false
prerelease: false
release_name: ${{ github.ref }}
tag_name: ${{ github.ref }}
# body: This is an automated release for ${{ github.ref }}`.
env:
GITHUB_TOKEN: ${{ github.token }}

build:
# The type of runner that the job will run on
runs-on: self-hosted

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2

# Runs setup.sh in the root of the project directory.
- name: Run Setup Script
run: wsl ./setup.sh
needs: create-release
strategy:
matrix:
version:
- {major: 4, minor: 24}
- {major: 4, minor: 25}
- {major: 4, minor: 26}
- {major: 4, minor: 27}
- {major: 5, minor: 0}
- {major: 5, minor: 1}
- {major: 5, minor: 2}
- {major: 5, minor: 3}
- {major: 5, minor: 4}

# Lots of copying and pasting since we build for many unreal engine versions
- name: Package for Unreal Engine 4.24
run: python package.py "$env:UE_4_24"

- name: Upload Build-Artifact
uses: actions/upload-artifact@v2.3.1
with:
name: UnrealLibretro-4.24
path: UE_4.24
if-no-files-found: error
steps:
- uses: actions/checkout@v3.5.2

- name: Package for Unreal Engine 4.25
run: python package.py "$env:UE_4_25"

- name: Upload Build-Artifact
uses: actions/upload-artifact@v2.3.1
with:
name: UnrealLibretro-4.25
path: UE_4.25
if-no-files-found: error
- name: Run Setup Script
run: C:\msys64\msys2_shell.cmd -defterm -here -no-start -mingw64 -shell bash setup.sh

- name: Package for Unreal Engine 4.26
run: python package.py "$env:UE_4_26"

- name: Upload Build-Artifact
uses: actions/upload-artifact@v2.3.1
with:
name: UnrealLibretro-4.26
path: UE_4.26
if-no-files-found: error
- name: Package for Unreal Engine
run: python package.py "$env:UE_${{ matrix.version.major }}_${{ matrix.version.minor }}" "$env:RUNNER_TEMP"

- name: Package for Unreal Engine 4.27
run: python package.py "$env:UE_4_27"

- name: Upload Build-Artifact
uses: actions/upload-artifact@v2.3.1
if: startsWith(github.ref, 'refs/heads/') # Upload artifacts when commits (not tags) are pushed
uses: actions/upload-artifact@v3.1.2
with:
name: UnrealLibretro-4.27
path: UE_4.27
name: UnrealLibretro-${{ matrix.version.major }}.${{ matrix.version.minor }}
path: ${{ runner.temp }}/UnrealLibretro-${{ matrix.version.major }}.${{ matrix.version.minor }}
if-no-files-found: error

- name: Package for Unreal Engine 5.0
run: python package.py "$env:UE_5_0"

- name: Upload Build-Artifact
uses: actions/upload-artifact@v2.3.1
- name: Upload Release Asset
id: upload-release-asset
if: startsWith(github.ref, 'refs/tags/') # Only release when a tag is pushed
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ github.token }}
with:
name: UnrealLibretro-5.0
path: UE_5.0
if-no-files-found: error
upload_url: ${{ needs.create-release.outputs.upload_url }} # Reference the output from create-release job
asset_path: ${{ runner.temp }}/UnrealLibretro-${{ matrix.version.major }}.${{ matrix.version.minor }}.zip
asset_name: UnrealLibretro-${{ matrix.version.major }}.${{ matrix.version.minor }}.zip
asset_content_type: application/zip
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
###### PROJECT SPECIFIC FILTERS ######
/Content
/MyROMs
/MyGames
/Saves
/Source/UnrealLibretro/Private/*/SDL2
/System
*.pdb
UnrealLibretro.uplugin


###### GITHUB PROVIDED FILTERS ######
Expand Down
26 changes: 15 additions & 11 deletions COMPATIBILITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ Unfortunately the full Libretro API is quite complex so I have only partially im
# Platform Compatibility

# Windows

## Known working cores

* `nestopia        `
Expand All @@ -24,11 +25,16 @@ Unfortunately the full Libretro API is quite complex so I have only partially im
* `dosbox_pure     ` (This one fails when loading the content)

# Android

I know for certain `gearboy` and `mupen64plus_next` work so I'd try testing those first. I'll probably try to set up automated regression tests in the future so a list can be automatically maintained.

# How to run the right cores for the right platform
You could manually come up with a way to do this, but the way I provide will package the right cores for the right platform as well. Also I'm pretty sure this would be kind of nasty to do in Blueprints.
```

You can always manually give a path to a core if needed however the recommended way is to store them in the same way as the `UnrealLibretroEditor` module does when it downloads them. These paths are used when packaging a project and `UnrealLibretro` uses them to load cores in a platform agnostic way.

Here's how the plugin directory might look after downloading a couple cores.

```txt
📦UnrealLibretro
┣ 📂MyCores
┃ ┣ 📂Android
Expand All @@ -39,18 +45,16 @@ You could manually come up with a way to do this, but the way I provide will pac
┃ ┃ ┣ 📜gearboy_libretro_android.so
┃ ┃ ┗ 📜mupen64plus_next_gles3_libretro_android.so
┃ ┗ 📂Win64
┃ ┣ 📜gearboy_libretro_android.dll
┃ ┗ 📜mupen64plus_next_gles3_libretro_android.dll
┃ ┣ 📜gearboy_libretro.dll
┃ ┗ 📜mupen64plus_next_libretro.dll
┗ 📂MyROMs
┣ 📜baserom.us.z64
┗ 📜Legend of Zelda, The - Link's Awakening DX (USA, Europe) (SGB Enhanced).gbc
```

If the directory structure of `MyCores` and `MyROMs` looks like this then if you specify *Core Path* as the name of the core without the extension as is done in this image

![](Resources/PathExample.png)
```

Then it should load the right Libretro Core for the corresponding platform i.e. on an x86_64 Windows machine it loads `MyCores/Win64/gearboy_libretro_android.dll` (Ignore the fact it says Android I just changed it so the name was the same)
* Cores are organized hierarchically in the same convention Unreal Engine uses for binaries
* Notice how `gearboy_libretro.dll` and `gearboy_libretro_android.so` only differ by a `.dll` and `_android.so`. This is actually a standard naming format used for cores. So I've written the code so `ULibretroCoreInstance::CorePath` can just be set to `gearboy` and the correct core will be chosen for the correct platform
* Unfortunately some cores like `mupen64plus_next_libretro.dll` and `mupen64plus_next_gles3_libretro_android.so` differ by more than just the standard format so they can't be directly associated. So you'll have to come up with your own way to load these correctly for the correct platform

[1]: README.md#sometimes-required-download-content-folder
[1]: README.md#sometimes-required-download-content-folder
25 changes: 23 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# Contributing

## Debugging Libretro Cores

Debugging libretro cores is kind of a nightmare since a lot of times your game will crash inside the cores code and if you don't have symbols good luck figuring that out. Luckily this [tutorial](https://docs.libretro.com/development/retroarch/compilation/windows/) mostly explains how to get symbolized debugging working. Note: You absolutely must use the MinGW64 terminal not the MSYS2 terminal when building Libretro cores for Windows. Also don't forget to enable the debug flags they mention when building with ```make```.

The one thing that isn't mentioned is that once you successfully build the DLL you have to use [cv2pdb](https://github.com/rainers/cv2pdb/releases/latest) to make a Windows debug symbol database file (pdb).
Expand All @@ -11,23 +14,41 @@ cv2pdb.exe {core_name}.exe

The pdb is produced in the same directory as the DLL. Copy both of them over to MyCores. Once that's done Visual Studio should automagically load the pdb and will ask you to point to the source files. And now you might get more insight into whats going wrong... hopefully.

## My Approach to Source Control

`git` is not good with binary assets. `.uasset` files are binary assets. If you want to modify existing blueprints or assets this has to be communicated through a github issue or pull request.

Basically only tagged commits on master are safe to check out this is because if I expect to have a lot of churn modifying assets I'll...

1. do the work on a `dev` branch and do as many commits as I feel is needed
2. once the assets are as I like them I'll rebase the `dev` branch onto `master` and squash the blueprints into one commit at the top. The net effect here is the source changes are saved in history although you can't directly check them out and expect it to work since the history will be lost on `master` (by the squashed commits)
3. I'll rename `dev` to something like `dev-vX.X.X` so I can keep the complete history around
4. If this repo ever gets too bloated I'll move the archive branches to some archive repo

This is complicated, but I'll figure out how to merge changes if people have them.

## Random notes
Q: Visual Studio loads the source files for the wrong core when debugging

To get faster iteration times use [Live Coding](https://docs.unrealengine.com/5.0/en-US/using-live-coding-to-recompile-unreal-engine-applications-at-runtime/) and add `bUseUnityBuild = false;` to your `[Project Name].Target.cs` and `[Project Name]Editor.Target.cs` build files. Mind that this might slow down the initial build the recompiles should be much faster.

Q: Visual Studio loads the source files for the wrong core when debugging

A: Remove other pdbs AND source files and clean the build and rerun

Stage changes that aren't line ending changes in git
`git diff -U0 -w --no-color | git apply --cached --ignore-whitespace --unidiff-zero -`

### Android

OBB files must be less than 100 MB?

.so libraries are packaged in `/data/data/[Java Package]/lib` there are files named `_APL.xml` in the Unreal Engine soure that cover how to do this

Android studio device explorer will show files without needing to be root

### Continous Integration testing

Probably can use [this](https://github.com/pfist/Nano) to bootstrap a project environment

`E:\UE_4.26/Engine/Build/BatchFiles/RunUAT BuildCookRun -project=E:\Build\Nano\Nano.uproject -build -run -unattended -editortest
-nocompile -map=LibretroWorld`
-nocompile -map=LibretroWorld`
9 changes: 8 additions & 1 deletion Config/DefaultUnrealLibretro.ini
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
[/Script/UnrealLibretro.LibretroSettings]
CoreSaveDirectory=Saves/Core/
CoreSystemDirectory=System/
CoreSystemDirectory=System/

;Global options for all cores can be set here or in the editor
;GlobalCoreOptions=(("mame_lightgun_mode", "touchscreen"),("nestopia_zapper_device", "pointer"))

;[/Script/Engine.PhysicsSettings]
;; Arcade guns won't work without this I have a text warning over the arcade gun actor for this, but I'm leaving this here as a reminder
;bSupportUVFromHitResults=True
64 changes: 63 additions & 1 deletion Config/Input.ini
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,66 @@
+AxisMappings=(AxisName="LibretroLookUp",Scale=-1.000000,Key=Gamepad_RightY)
+AxisMappings=(AxisName="LibretroLookRight",Scale=1.000000,Key=Gamepad_RightX)
+AxisMappings=(AxisName="LibretroMoveForward",Scale=1.000000,Key=Gamepad_LeftY)
+AxisMappings=(AxisName="LibretroMoveRight",Scale=1.000000,Key=Gamepad_LeftX)
+AxisMappings=(AxisName="LibretroMoveRight",Scale=1.000000,Key=Gamepad_LeftX)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Virtual Reality Bindings ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+AxisMappings=(AxisName="LibretroMovementAxisLeft_X",Scale=1.000000,Key=MixedReality_Left_Thumbstick_X)
+AxisMappings=(AxisName="LibretroMovementAxisLeft_X",Scale=1.000000,Key=OculusTouch_Left_Thumbstick_X)
+AxisMappings=(AxisName="LibretroMovementAxisLeft_X",Scale=1.000000,Key=ValveIndex_Left_Thumbstick_X)
+AxisMappings=(AxisName="LibretroMovementAxisLeft_X",Scale=1.000000,Key=Vive_Left_Trackpad_X)
+AxisMappings=(AxisName="LibretroMovementAxisLeft_Y",Scale=1.000000,Key=MixedReality_Left_Thumbstick_Y)
+AxisMappings=(AxisName="LibretroMovementAxisLeft_Y",Scale=1.000000,Key=OculusTouch_Left_Thumbstick_Y)
+AxisMappings=(AxisName="LibretroMovementAxisLeft_Y",Scale=1.000000,Key=ValveIndex_Left_Thumbstick_Y)
+AxisMappings=(AxisName="LibretroMovementAxisLeft_Y",Scale=1.000000,Key=Vive_Left_Trackpad_Y)
+AxisMappings=(AxisName="LibretroMovementAxisRight_X",Scale=1.000000,Key=MixedReality_Right_Thumbstick_X)
+AxisMappings=(AxisName="LibretroMovementAxisRight_X",Scale=1.000000,Key=OculusTouch_Right_Thumbstick_X)
+AxisMappings=(AxisName="LibretroMovementAxisRight_X",Scale=1.000000,Key=ValveIndex_Right_Thumbstick_X)
+AxisMappings=(AxisName="LibretroMovementAxisRight_X",Scale=1.000000,Key=Vive_Right_Trackpad_X)
+AxisMappings=(AxisName="LibretroMovementAxisRight_Y",Scale=1.000000,Key=MixedReality_Right_Thumbstick_Y)
+AxisMappings=(AxisName="LibretroMovementAxisRight_Y",Scale=1.000000,Key=OculusTouch_Right_A_Click)
+AxisMappings=(AxisName="LibretroMovementAxisRight_Y",Scale=1.000000,Key=OculusTouch_Right_Thumbstick_Y)
+AxisMappings=(AxisName="LibretroMovementAxisRight_Y",Scale=1.000000,Key=ValveIndex_Right_Thumbstick_Y)
+AxisMappings=(AxisName="LibretroMovementAxisRight_Y",Scale=1.000000,Key=Vive_Right_Trackpad_Y)
+AxisMappings=(AxisName="LibretroGrabAxisLeft",Scale=1.000000,Key=MixedReality_Left_Grip_Click)
+AxisMappings=(AxisName="LibretroGrabAxisLeft",Scale=1.000000,Key=OculusTouch_Left_Grip_Axis)
+AxisMappings=(AxisName="LibretroGrabAxisLeft",Scale=1.000000,Key=ValveIndex_Left_Grip_Axis)
+AxisMappings=(AxisName="LibretroGrabAxisLeft",Scale=1.000000,Key=Vive_Left_Grip_Click)
+AxisMappings=(AxisName="LibretroGrabAxisRight",Scale=1.000000,Key=MixedReality_Right_Grip_Click)
+AxisMappings=(AxisName="LibretroGrabAxisRight",Scale=1.000000,Key=OculusTouch_Right_Grip_Axis)
+AxisMappings=(AxisName="LibretroGrabAxisRight",Scale=1.000000,Key=ValveIndex_Right_Grip_Axis)
+AxisMappings=(AxisName="LibretroGrabAxisRight",Scale=1.000000,Key=Vive_Right_Grip_Click)
+AxisMappings=(AxisName="LibretroTriggerAxisLeft",Scale=1.000000,Key=MixedReality_Left_Trigger_Axis)
+AxisMappings=(AxisName="LibretroTriggerAxisLeft",Scale=1.000000,Key=OculusTouch_Left_Trigger_Axis)
+AxisMappings=(AxisName="LibretroTriggerAxisLeft",Scale=1.000000,Key=ValveIndex_Left_Trigger_Axis)
+AxisMappings=(AxisName="LibretroTriggerAxisLeft",Scale=1.000000,Key=Vive_Left_Trigger_Axis)
+AxisMappings=(AxisName="LibretroTriggerAxisRight",Scale=1.000000,Key=MixedReality_Right_Trigger_Axis)
+AxisMappings=(AxisName="LibretroTriggerAxisRight",Scale=1.000000,Key=OculusTouch_Right_Trigger_Axis)
+AxisMappings=(AxisName="LibretroTriggerAxisRight",Scale=1.000000,Key=ValveIndex_Right_Trigger_Axis)
+AxisMappings=(AxisName="LibretroTriggerAxisRight",Scale=1.000000,Key=Vive_Right_Trigger_Axis)
+ActionMappings=(ActionName="LibretroTriggerLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MixedReality_Left_Trigger_Click)
+ActionMappings=(ActionName="LibretroTriggerLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=OculusTouch_Left_Trigger_Click)
+ActionMappings=(ActionName="LibretroTriggerLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=ValveIndex_Left_Trigger_Click)
+ActionMappings=(ActionName="LibretroTriggerLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Vive_Left_Trigger_Click)
+ActionMappings=(ActionName="LibretroTriggerRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MixedReality_Right_Trigger_Click)
+ActionMappings=(ActionName="LibretroTriggerRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=OculusTouch_Right_Trigger_Click)
+ActionMappings=(ActionName="LibretroTriggerRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=ValveIndex_Right_Trigger_Click)
+ActionMappings=(ActionName="LibretroTriggerRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Vive_Right_Trigger_Click)
+ActionMappings=(ActionName="LibretroGrabLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MixedReality_Left_Grip_Click)
+ActionMappings=(ActionName="LibretroGrabLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=OculusTouch_Left_Grip_Click)
+ActionMappings=(ActionName="LibretroGrabLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=ValveIndex_Left_Grip_Axis)
+ActionMappings=(ActionName="LibretroGrabLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Vive_Left_Grip_Click)
+ActionMappings=(ActionName="LibretroGrabRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MixedReality_Right_Grip_Click)
+ActionMappings=(ActionName="LibretroGrabRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=OculusTouch_Right_Grip_Click)
+ActionMappings=(ActionName="LibretroGrabRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=ValveIndex_Right_Grip_Axis)
+ActionMappings=(ActionName="LibretroGrabRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Vive_Right_Grip_Click)
+ActionMappings=(ActionName="LibretroMenuToggleLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MixedReality_Left_Menu_Click)
+ActionMappings=(ActionName="LibretroMenuToggleLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=OculusTouch_Left_Menu_Click)
+ActionMappings=(ActionName="LibretroMenuToggleLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=OculusTouch_Left_Thumbstick_Click)
+ActionMappings=(ActionName="LibretroMenuToggleLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=ValveIndex_Left_Thumbstick_Click)
+ActionMappings=(ActionName="LibretroMenuToggleLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Vive_Left_Menu_Click)
+ActionMappings=(ActionName="LibretroMenuToggleRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MixedReality_Right_Menu_Click)
+ActionMappings=(ActionName="LibretroMenuToggleRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=OculusTouch_Right_Thumbstick_Click)
+ActionMappings=(ActionName="LibretroMenuToggleRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=ValveIndex_Right_Thumbstick_Click)
+ActionMappings=(ActionName="LibretroMenuToggleRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Vive_Right_Menu_Click)
Binary file added Content/Blueprints/LibretroActorBase.uasset
Binary file not shown.
Binary file added Content/Blueprints/LibretroArcadeGunActor.uasset
Binary file not shown.
Binary file not shown.
Binary file added Content/Blueprints/LibretroCharacter.uasset
Binary file not shown.
Binary file added Content/Blueprints/LibretroCoreMenuWidget.uasset
Binary file not shown.
Binary file added Content/Blueprints/LibretroFocusViewPawn.uasset
Binary file not shown.
Binary file added Content/Blueprints/LibretroHUD.uasset
Binary file not shown.
Binary file added Content/Blueprints/LibretroTVPawn.uasset
Binary file not shown.
Binary file not shown.
Loading